eve_badger 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +29 -6
- data/VERSION +1 -1
- data/lib/eve_badger/cache.rb +3 -4
- data/lib/eve_badger/eve_api.rb +2 -10
- data/lib/eve_badger/response.rb +3 -6
- data/lib/eve_badger/throttle.rb +31 -0
- data/lib/eve_badger.rb +6 -22
- metadata +34 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d466155cb066385f95d91b504852a9e926229b7
|
4
|
+
data.tar.gz: f20836c0e7d123b9d3f841300b1178ec38eded52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
*
|
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
|
-
###
|
107
|
+
### Request Caching
|
108
108
|
```ruby
|
109
|
-
# EveBadger::Cache.enable
|
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
|
-
#
|
112
|
+
#
|
113
|
+
# EveBadger will automatically merge in {expires: true} if the
|
113
114
|
# chosen adapter doesn't support expiration natively.
|
114
|
-
|
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.
|
1
|
+
0.1.3
|
data/lib/eve_badger/cache.rb
CHANGED
@@ -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
|
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
|
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
|
|
data/lib/eve_badger/eve_api.rb
CHANGED
@@ -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
|
-
|
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
|
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
|
data/lib/eve_badger/response.rb
CHANGED
@@ -28,12 +28,9 @@ module EveBadger
|
|
28
28
|
Badgerfish::Parser.new.load(@content)['eveapi']['result']
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
document
|
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.
|
16
|
+
def self.default_tq_domain
|
14
17
|
'https://api.eveonline.com/'
|
15
18
|
end
|
16
19
|
|
17
|
-
def self.
|
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.
|
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-
|
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
|
-
|
70
|
-
|
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
|
140
|
+
summary: 'A gem for interacting with the Eve: Online API.'
|
112
141
|
test_files: []
|