ratelimit-ruby 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f3b746eec2993e0825020e4c703de39a6a3458a
4
- data.tar.gz: e49e70c0153e2a0c5aa5d8f8a87382e4664ed412
3
+ metadata.gz: ba840b0a4094c38901cdf325bcc69fdc3f6a864e
4
+ data.tar.gz: 15d19e332a9ed5bd77ec0edd4daa326e157e2a76
5
5
  SHA512:
6
- metadata.gz: 9f18859ffe8e2805dce9597d79c6ee3b9f50a8a642b520e4bd22ef95a10750b5ed3324404ec377a6e72a16506bc20a31fcf50abfb0abc64a9e1a566eccba0354
7
- data.tar.gz: 7435ee478458b536a662854e9f99c15eee732b739ce1cfebba7330911bab8b2613fc6627e43cc601d442d58ddba1b68cf257a3f50c8d7d5cb3025fe812c7376a
6
+ metadata.gz: fa3c25ee0c3ac084e7bc2baf30b896b4cfadf20a0e4e1d35929ada2d4a5c2b0c3f755f9345b953ea162a1d4908a179a209fde19cbb6390186cdcb4fbb3fb40ee
7
+ data.tar.gz: 262baa3cd4d504c389c2ae6fad3c4c62f6402f1cfd03d471c849d1eb6398c0a4874cf199e4f9c49b6134135840cde011d4046c00d5ef4a44228611d3f93c9829
data/README.md CHANGED
@@ -15,6 +15,7 @@ end
15
15
  ```
16
16
  See full documentation http://www.ratelim.it/documentation
17
17
 
18
+
18
19
  ## Supports
19
20
 
20
21
  * RateLimits
@@ -24,6 +25,17 @@ See full documentation http://www.ratelim.it/documentation
24
25
  * Semaphores
25
26
  * Infinite retention fo deduplication workflows
26
27
 
28
+ ## Options and Defaults
29
+ ```ruby
30
+ limiter = RateLimit::Limiter.new(apikey: "ACCT_ID|APIKEY",
31
+ on_error: :log_and_pass, # :log_and_pass, :log_and_hit, :throw
32
+ logger: nil, # pass in your own logger here
33
+ debug: false #Faraday debugging
34
+ )
35
+
36
+
37
+ ```
38
+
27
39
 
28
40
  ## Contributing to ratelimit-ruby
29
41
 
@@ -37,6 +49,6 @@ See full documentation http://www.ratelim.it/documentation
37
49
 
38
50
  ## Copyright
39
51
 
40
- Copyright (c) 2016 Jeff Dwyer. See LICENSE.txt for
52
+ Copyright (c) 2017 Jeff Dwyer. See LICENSE.txt for
41
53
  further details.
42
54
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,5 +1,6 @@
1
1
  module RateLimit
2
2
  WAIT_INCR_MAX = 0.5
3
+ ON_ERROR = [:log_and_pass, :log_and_hit, :throw]
3
4
 
4
5
  class WaitExceeded < StandardError
5
6
  end
@@ -9,10 +10,16 @@ module RateLimit
9
10
  local ? 'http://localhost:8080' : 'http://www.ratelim.it'
10
11
  end
11
12
 
12
- def initialize(apikey:, local: false, debug: false)
13
+ def initialize(apikey:, on_error: :log_and_pass, logger: nil, debug: false, local: false)
14
+ @logger = (logger || Logger.new($stdout)).tap do |log|
15
+ log.progname = "RateLimit"
16
+ end
17
+ @on_error = on_error
13
18
  @conn = Faraday.new(:url => self.base_url(local)) do |faraday|
14
19
  faraday.request :json # form-encode POST params
15
20
  faraday.response :logger if debug
21
+ faraday.options[:open_timeout] = 2
22
+ faraday.options[:timeout] = 5
16
23
  faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
17
24
  end
18
25
  (username, pass) = apikey.split("|")
@@ -47,9 +54,12 @@ module RateLimit
47
54
  result = @conn.post '/api/v1/limitcheck', { acquireAmount: acquire_amount,
48
55
  groups: [group],
49
56
  allowPartialResponse: allow_partial_response }.to_json
57
+ handle_failure(result) unless result.success?
50
58
  res =JSON.parse(result.body, object_class: OpenStruct)
51
59
  res.amount ||= 0
52
60
  res
61
+ rescue => e
62
+ handle_error(e)
53
63
  end
54
64
 
55
65
  def acquire_or_wait(key:, acquire_amount:, max_wait_secs:, init_backoff: 0)
@@ -71,7 +81,9 @@ module RateLimit
71
81
  @conn.post '/api/v1/limitreturn',
72
82
  { enforcedGroup: limit_result.enforcedGroup,
73
83
  amount: limit_result.amount }.to_json
74
- puts "RETURN #{result.body} #{result.status}"
84
+ handle_failure(result) unless result.success?
85
+ rescue => e
86
+ handle_error(e)
75
87
  end
76
88
 
77
89
  private
@@ -83,6 +95,35 @@ module RateLimit
83
95
  policyName: limit_definition.policy,
84
96
  returnable: limit_definition.returnable }.to_json
85
97
  result= @conn.send(method, '/api/v1/limits', to_send)
98
+ handle_failure(result) unless result.success?
99
+ rescue => e
100
+ handle_error(e)
101
+ end
102
+
103
+ def handle_failure(result)
104
+ case @on_error
105
+ when :log_and_pass
106
+ @logger.warn("returned #{result.status}")
107
+ OpenStruct.new(passed: true)
108
+ when :log_and_hit
109
+ @logger.warn("returned #{result.status}")
110
+ OpenStruct.new(passed: false)
111
+ when :throw
112
+ raise "#{result.status} calling RateLim.it"
113
+ end
114
+ end
115
+
116
+ def handle_error(e)
117
+ case @on_error
118
+ when :log_and_pass
119
+ @logger.warn(e)
120
+ OpenStruct.new(passed: true)
121
+ when :log_and_hit
122
+ @logger.warn(e)
123
+ OpenStruct.new(passed: false)
124
+ when :throw
125
+ raise e
126
+ end
86
127
  end
87
128
  end
88
129
 
@@ -90,4 +131,5 @@ end
90
131
 
91
132
  require 'faraday'
92
133
  require 'faraday_middleware'
134
+ require 'logger'
93
135
  require 'ratelimit/limit_definition'
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: ratelimit-ruby 0.1.1 ruby lib
5
+ # stub: ratelimit-ruby 0.1.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "ratelimit-ruby"
9
- s.version = "0.1.1"
9
+ s.version = "0.1.2"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Jeff Dwyer"]
14
- s.date = "2016-12-13"
14
+ s.date = "2016-12-16"
15
15
  s.description = "rate limit your ruby"
16
16
  s.email = "jdwyah@gmail.com"
17
17
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ratelimit-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-13 00:00:00.000000000 Z
11
+ date: 2016-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday