eve_badger 0.1.2 → 0.1.3

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: 2bc45c7eb50a097472bc492371e1e500712dfca9
4
- data.tar.gz: 9a0307ae74ba1477a86911ebf27f252ec77982f0
3
+ metadata.gz: 6d466155cb066385f95d91b504852a9e926229b7
4
+ data.tar.gz: f20836c0e7d123b9d3f841300b1178ec38eded52
5
5
  SHA512:
6
- metadata.gz: 6d4ebf620cbc554ba9eb5066e4bc43c6d284c16377e0dbef12bb23e44b601506724504bdfcd7a5875519f134be148d91ef71ba3225186ec9c3e22be385db8416
7
- data.tar.gz: 72ed8c09f93b607f7db34483d23d564f7285374d12fe35c5242919ef1fb32d1b6418c08d3216aff4bc05b4a375d3cdca4d278b8d93b3e3740bcdf05c04b3c055
6
+ metadata.gz: a6309c1516bf5e704f878ba241e9480d47ab9609e4be1e48404c19fdeb39c05c8dd3dc11e21edec7c96837591abc9bb338fa115c9bfb15bc77e7ec13e7deb97c
7
+ data.tar.gz: 85a43012be2168f6f89e11a79be09a60054467445a9974619d882fb054c2383d1bd1dbdec8e2f8a8827e51f1313105ad333bcb430faed7aa9248055a37849dc6
data/README.md CHANGED
@@ -14,7 +14,7 @@ I wrote this for 3 reasons:
14
14
 
15
15
  ## What does it do?
16
16
 
17
- * Obeys CCP's default request rate limit (can be disabled if you have an exception)
17
+ * Can throttle the request rate so you don't hit CCP's default rate limit. (Disabled by default.)
18
18
  * Uses Moneta to cache responses with whatever supported backend you prefer. (Disabled by default.)
19
19
  * Automatically fetches missing access_mask and key_type values from the API Key Info endpoint.
20
20
  * Respects access masks for keys and endpoints (it will raise an exception instead of making an HTTP request if you try to access an endpoint that isn't allowed by the key's access mask)
@@ -100,18 +100,41 @@ end
100
100
  api = EveBadger::EveAPI.new(server: :sisi)
101
101
  api.key_id = my_key_id
102
102
  api.vcode = my_vcode
103
- api.character_id = my_character_id)
103
+ api.character_id = my_character_id
104
104
  # then continue as normal
105
105
  ```
106
106
 
107
- ### Enable Request Caching
107
+ ### Request Caching
108
108
  ```ruby
109
- # EveBadger::Cache.enable! takes the same arguments as Moneta.new
109
+ # EveBadger::Cache.enable takes the same arguments as Moneta.new
110
110
  # See Moneta API docs for possible configurations:
111
111
  # http://www.rubydoc.info/gems/moneta/frames
112
- # Note: EveBadger will automatically merge in {expires: true} if the
112
+ #
113
+ # EveBadger will automatically merge in {expires: true} if the
113
114
  # chosen adapter doesn't support expiration natively.
114
- EveBadger::Cache.enable!(:Redis)
115
+ #
116
+ # Caching is handled automatically while a cache adapter is enabled.
117
+ EveBadger::Cache.enable(:Redis)
118
+
119
+ # You can also disable an enabled cache if you want to for some reason
120
+ # just keep in mind that all your cached data will go poof if you use
121
+ # an the :Memory adapter.
122
+ EveBadger::Cache.disable
123
+ ```
124
+
125
+ ### Request Throttling
126
+ ```ruby
127
+ # EveBadger::Thottle.enable_default will set CCPs default rate
128
+ # limit of 30 requests per minute.
129
+ EveBadger::Throttle.enable_default
130
+
131
+ # Use EveBadger::Throttle.enable_custom to set a custom limit if
132
+ # you have arranged for an exception for your app.
133
+ requests_per_minute = 100
134
+ EveBadger::Throttle.enable_custom(requests_per_minute)
135
+
136
+ # Like caching, you may disable a previously enabled throttle.
137
+ EveBadger::Throttle.disable
115
138
  ```
116
139
 
117
140
  ### Tips for Edge Cases
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -2,7 +2,7 @@ require 'moneta'
2
2
  require 'digest/sha1'
3
3
 
4
4
  module EveBadger
5
- # A wrapper around a Moneta object that provides automatic request caching for Evebadger::EveAPI when enabled.
5
+ # A wrapper around a Moneta object that provides automatic request caching for Evebadger::EveAPI while enabled.
6
6
  module Cache
7
7
  # Cache is disabled by default
8
8
  @cache = nil
@@ -11,15 +11,14 @@ module EveBadger
11
11
 
12
12
  # Enable the cache with a specified Moneta adapter.
13
13
  # See Moneta API documentation for possible configurations: http://www.rubydoc.info/gems/moneta/frames
14
- def self.enable!(*args, **kwargs)
14
+ def self.enable(*args, **kwargs)
15
15
  unless @native_expires.any? { |name| args.include?(name) }
16
- # unless false
17
16
  kwargs.merge!({expires: true})
18
17
  end
19
18
  @cache = Moneta.new(*args, **kwargs)
20
19
  end
21
20
 
22
- def self.disable!
21
+ def self.disable
23
22
  @cache = nil
24
23
  end
25
24
 
@@ -1,10 +1,6 @@
1
1
  require 'nokogiri'
2
2
  require 'time'
3
3
  require 'open-uri'
4
- require 'eve_badger'
5
- require 'eve_badger/endpoints'
6
- require 'eve_badger/response'
7
- require 'eve_badger/cache'
8
4
  require 'digest/sha1'
9
5
 
10
6
  module EveBadger
@@ -13,11 +9,7 @@ module EveBadger
13
9
  attr_reader :key_id, :vcode, :character_id, :domain
14
10
 
15
11
  def initialize(args={})
16
- if args[:server] == :sisi
17
- @domain = EveBadger.sisi_domain
18
- else
19
- @domain = EveBadger.tq_domain
20
- end
12
+ @domain = args[:sisi] ? EveBadger.default_sisi_domain : EveBadger.default_tq_domain
21
13
  @user_agent = EveBadger.default_user_agent
22
14
  @key_id = args[:key_id].to_s if args[:key_id]
23
15
  @vcode = args[:vcode].to_s if args[:vcode]
@@ -148,7 +140,7 @@ module EveBadger
148
140
  end
149
141
  end
150
142
 
151
- # Hash URI's before use as a cache key so that API key/vcode combinations don't leak from the cache monitor or logs.
143
+ # Hash URI's before use as a cache key so that API key/vcode combinations don't into log files of dependencies.
152
144
  def hash_of(uri)
153
145
  Digest::SHA1.hexdigest(uri)
154
146
  end
@@ -28,12 +28,9 @@ module EveBadger
28
28
  Badgerfish::Parser.new.load(@content)['eveapi']['result']
29
29
  end
30
30
 
31
- # raise an exception if the response contains an Eve API error
32
- def raise_for_api_errors!(response)
33
- document = Nokogiri::XML(response)
34
- if document.xpath('//error').any?
35
- raise EveBadger::CCPPleaseError, "#{document.xpath('//error').first}"
36
- end
31
+ def api_errors
32
+ document = Nokogiri::XML(@content)
33
+ document.xpath('//error')
37
34
  end
38
35
  end
39
36
 
@@ -0,0 +1,31 @@
1
+ require 'slowweb'
2
+
3
+ module EveBadger
4
+ module Throttle
5
+ def self.disable
6
+ SlowWeb.reset
7
+ end
8
+
9
+ # enables the default rate limit of 30 requests per minute which ccp expects users to obey
10
+ def self.enable_default
11
+ SlowWeb.limit(EveBadger.default_tq_domain, 30, 60)
12
+ SlowWeb.limit(EveBadger.default_sisi_domain, 30, 60)
13
+ end
14
+
15
+ #
16
+ def self.enable_custom(requests_per_minute)
17
+ SlowWeb.reset
18
+ SlowWeb.limit(EveBadger.default_tq_domain, requests_per_minute, 60)
19
+ SlowWeb.limit(EveBadger.default_sisi_domain, requests_per_minute, 60)
20
+ end
21
+
22
+
23
+ def self.enabled?
24
+ if SlowWeb.get_limit(EveBadger.default_tq_domain) || SlowWeb.get_limit(EveBadger.default_sisi_domain)
25
+ true
26
+ else
27
+ false
28
+ end
29
+ end
30
+ end
31
+ end
data/lib/eve_badger.rb CHANGED
@@ -1,5 +1,8 @@
1
- require 'slowweb'
2
1
  require 'eve_badger/eve_api'
2
+ require 'eve_badger/endpoints'
3
+ require 'eve_badger/response'
4
+ require 'eve_badger/cache'
5
+ require 'eve_badger/throttle'
3
6
 
4
7
  module EveBadger
5
8
  def self.version
@@ -10,30 +13,11 @@ module EveBadger
10
13
  "EveBadger-#{EveBadger.version}/Ruby-#{RUBY_VERSION}"
11
14
  end
12
15
 
13
- def self.tq_domain
16
+ def self.default_tq_domain
14
17
  'https://api.eveonline.com/'
15
18
  end
16
19
 
17
- def self.sisi_domain
20
+ def self.default_sisi_domain
18
21
  'https://api.testeveonline.com/'
19
22
  end
20
-
21
- # According to CCP the default limit for API access is 30 requests per minute.
22
- SlowWeb.limit(tq_domain, 30, 60)
23
- SlowWeb.limit(sisi_domain, 30, 60)
24
-
25
- def self.disable_throttling
26
- SlowWeb.reset
27
- end
28
-
29
- def self.enable_default_throttling
30
- SlowWeb.limit(tq_domain, 30, 60)
31
- SlowWeb.limit(sisi_domain, 30, 60)
32
- end
33
-
34
- def self.enable_custom_throttling(requests_per_minute)
35
- SlowWeb.reset
36
- SlowWeb.limit(tq_domain, requests_per_minute, 60)
37
- SlowWeb.limit(sisi_domain, requests_per_minute, 60)
38
- end
39
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eve_badger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Smedstad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-30 00:00:00.000000000 Z
11
+ date: 2015-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -66,8 +66,36 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.8.0
69
- description: For more information look at the README in the github repository (homepage
70
- link).
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 5.7.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 5.7.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: load_path
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.2.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.2.1
97
+ description: 'Easily get XML or JSON from the Eve: Online API with optional caching
98
+ and throttling.'
71
99
  email: smedstadc@gmail.com
72
100
  executables: []
73
101
  extensions: []
@@ -85,6 +113,7 @@ files:
85
113
  - lib/eve_badger/json/corporation_endpoints.json
86
114
  - lib/eve_badger/json/detail_endpoints.json
87
115
  - lib/eve_badger/response.rb
116
+ - lib/eve_badger/throttle.rb
88
117
  homepage: https://github.com/smedstadc/eve_badger
89
118
  licenses:
90
119
  - MIT
@@ -108,5 +137,5 @@ rubyforge_project:
108
137
  rubygems_version: 2.4.8
109
138
  signing_key:
110
139
  specification_version: 4
111
- summary: 'A gem for interacting with the Eve: Online XML API.'
140
+ summary: 'A gem for interacting with the Eve: Online API.'
112
141
  test_files: []