Class: MockServer::RateLimit

Inherits:
Object
  • Object
show all
Defined in:
lib/mockserver/models.rb

Overview

Per-expectation rate limit (org.mockserver.model.RateLimit). When the counter keyed by name (or the expectation id when name is nil) exceeds the configured limit, the server returns error_status (default 429).

algorithm is the wire enum value: "fixed_window" (default) or "token_bucket" (the server serialises it lower-case). FIXED_WINDOW uses limit / window_millis; TOKEN_BUCKET uses burst / refill_per_second.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name: nil, algorithm: nil, limit: nil, window_millis: nil, burst: nil, refill_per_second: nil, error_status: nil, retry_after: nil) ⇒ RateLimit

Returns a new instance of RateLimit.



2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
# File 'lib/mockserver/models.rb', line 2188

def initialize(name: nil, algorithm: nil, limit: nil, window_millis: nil, burst: nil,
               refill_per_second: nil, error_status: nil, retry_after: nil)
  @name = name
  @algorithm = algorithm
  @limit = limit
  @window_millis = window_millis
  @burst = burst
  @refill_per_second = refill_per_second
  @error_status = error_status
  @retry_after = retry_after
end

Instance Attribute Details

#algorithmObject

Returns the value of attribute algorithm.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def algorithm
  @algorithm
end

#burstObject

Returns the value of attribute burst.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def burst
  @burst
end

#error_statusObject

Returns the value of attribute error_status.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def error_status
  @error_status
end

#limitObject

Returns the value of attribute limit.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def limit
  @limit
end

#nameObject

Returns the value of attribute name.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def name
  @name
end

#refill_per_secondObject

Returns the value of attribute refill_per_second.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def refill_per_second
  @refill_per_second
end

#retry_afterObject

Returns the value of attribute retry_after.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def retry_after
  @retry_after
end

#window_millisObject

Returns the value of attribute window_millis.



2185
2186
2187
# File 'lib/mockserver/models.rb', line 2185

def window_millis
  @window_millis
end

Class Method Details

.fixed_window(limit, window_millis, name: nil) ⇒ Object



2228
2229
2230
# File 'lib/mockserver/models.rb', line 2228

def self.fixed_window(limit, window_millis, name: nil)
  new(name: name, algorithm: 'fixed_window', limit: limit, window_millis: window_millis)
end

.from_hash(data) ⇒ Object



2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
# File 'lib/mockserver/models.rb', line 2213

def self.from_hash(data)
  return nil if data.nil?

  new(
    name:              data['name'],
    algorithm:         data['algorithm'],
    limit:             data['limit'],
    window_millis:     data['windowMillis'],
    burst:             data['burst'],
    refill_per_second: data['refillPerSecond'],
    error_status:      data['errorStatus'],
    retry_after:       data['retryAfter']
  )
end

.token_bucket(burst, refill_per_second, name: nil) ⇒ Object



2232
2233
2234
# File 'lib/mockserver/models.rb', line 2232

def self.token_bucket(burst, refill_per_second, name: nil)
  new(name: name, algorithm: 'token_bucket', burst: burst, refill_per_second: refill_per_second)
end

Instance Method Details

#to_hObject



2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
# File 'lib/mockserver/models.rb', line 2200

def to_h
  MockServer.strip_none({
    'name'            => @name,
    'algorithm'       => @algorithm,
    'limit'           => @limit,
    'windowMillis'    => @window_millis,
    'burst'           => @burst,
    'refillPerSecond' => @refill_per_second,
    'errorStatus'     => @error_status,
    'retryAfter'      => @retry_after
  })
end