battlenet 0.1.1 → 1.0.0
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.
- data/README.md +31 -45
- data/VERSION +1 -0
- data/battlenet.gemspec +13 -2
- data/lib/battlenet.rb +95 -2
- data/lib/battlenet/authentication.rb +21 -0
- data/lib/battlenet/modules/arena.rb +13 -0
- data/lib/battlenet/modules/auction.rb +18 -0
- data/lib/battlenet/modules/character.rb +12 -0
- data/lib/battlenet/modules/data.rb +23 -0
- data/lib/battlenet/modules/guild.rb +12 -0
- data/lib/battlenet/modules/item.rb +7 -0
- data/lib/battlenet/modules/realm.rb +7 -0
- data/spec/fixtures/cassettes/arena_fun_and_profit.yml +29 -0
- data/spec/fixtures/cassettes/auction_data.yml +63 -0
- data/spec/fixtures/cassettes/auction_files.yml +30 -0
- data/spec/fixtures/cassettes/character_classes.yml +33 -0
- data/spec/fixtures/cassettes/character_mortawa.yml +30 -0
- data/spec/fixtures/cassettes/character_mortawa_es.yml +48 -0
- data/spec/fixtures/cassettes/character_mortawa_titles.yml +32 -0
- data/spec/fixtures/cassettes/character_nonstandard_name.yml +30 -0
- data/spec/fixtures/cassettes/character_races.yml +34 -0
- data/spec/fixtures/cassettes/guild_perks.yml +91 -0
- data/spec/fixtures/cassettes/guild_rewards.yml +175 -0
- data/spec/fixtures/cassettes/guild_rl_bl.yml +28 -0
- data/spec/fixtures/cassettes/guild_rl_bl_members.yml +28 -0
- data/spec/fixtures/cassettes/item_classes.yml +33 -0
- data/spec/fixtures/cassettes/item_hooooooooooo.yml +29 -0
- data/spec/fixtures/cassettes/realm.yml +69 -0
- data/spec/integration/arena_spec.rb +14 -0
- data/spec/integration/auction_spec.rb +22 -0
- data/spec/integration/character_spec.rb +29 -0
- data/spec/integration/data_spec.rb +41 -0
- data/spec/integration/guild_spec.rb +20 -0
- data/spec/integration/item_spec.rb +13 -0
- data/spec/integration/locale_spec.rb +23 -0
- data/spec/integration/realm_spec.rb +15 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/battlenet_authentication_spec.rb +31 -0
- data/spec/unit/battlenet_spec.rb +158 -0
- metadata +151 -51
- data/lib/battlenet/adapter/abstract_adapter.rb +0 -11
- data/lib/battlenet/adapter/net_http.rb +0 -14
- data/lib/battlenet/adapter/typhoeus.rb +0 -13
- data/lib/battlenet/adapter_manager.rb +0 -51
- data/lib/battlenet/api.rb +0 -73
- data/lib/battlenet/api/realm.rb +0 -14
- data/lib/battlenet/version.rb +0 -3
- data/spec/abstract_adapter_spec.rb +0 -15
- data/spec/adapter_manager_spec.rb +0 -55
- data/spec/api_spec.rb +0 -115
metadata
CHANGED
@@ -1,87 +1,187 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: battlenet
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Brandon Tilley
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
date: 2011-11-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70134987231600 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70134987231600
|
25
|
+
- !ruby/object:Gem::Dependency
|
17
26
|
name: rspec
|
27
|
+
requirement: &70134987231020 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70134987231020
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: timecop
|
38
|
+
requirement: &70134987230560 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70134987230560
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: vcr
|
49
|
+
requirement: &70134987229320 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
18
56
|
prerelease: false
|
19
|
-
|
57
|
+
version_requirements: *70134987229320
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: webmock
|
60
|
+
requirement: &70134987228880 !ruby/object:Gem::Requirement
|
20
61
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
25
66
|
type: :development
|
26
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70134987228880
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: httparty
|
71
|
+
requirement: &70134987228400 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70134987228400
|
27
80
|
description: Easily consume Blizzard's Community Platform API.
|
28
|
-
email:
|
81
|
+
email:
|
29
82
|
- brandon@brandontilley.com
|
30
83
|
executables: []
|
31
|
-
|
32
84
|
extensions: []
|
33
|
-
|
34
85
|
extra_rdoc_files: []
|
35
|
-
|
36
|
-
files:
|
86
|
+
files:
|
37
87
|
- .gitignore
|
38
88
|
- Gemfile
|
39
89
|
- LICENSE
|
40
90
|
- README.md
|
41
91
|
- Rakefile
|
92
|
+
- VERSION
|
42
93
|
- battlenet.gemspec
|
43
94
|
- lib/battlenet.rb
|
44
|
-
- lib/battlenet/
|
45
|
-
- lib/battlenet/
|
46
|
-
- lib/battlenet/
|
47
|
-
- lib/battlenet/
|
48
|
-
- lib/battlenet/
|
49
|
-
- lib/battlenet/
|
50
|
-
- lib/battlenet/
|
51
|
-
-
|
52
|
-
- spec/
|
53
|
-
- spec/
|
95
|
+
- lib/battlenet/authentication.rb
|
96
|
+
- lib/battlenet/modules/arena.rb
|
97
|
+
- lib/battlenet/modules/auction.rb
|
98
|
+
- lib/battlenet/modules/character.rb
|
99
|
+
- lib/battlenet/modules/data.rb
|
100
|
+
- lib/battlenet/modules/guild.rb
|
101
|
+
- lib/battlenet/modules/item.rb
|
102
|
+
- lib/battlenet/modules/realm.rb
|
103
|
+
- spec/fixtures/cassettes/arena_fun_and_profit.yml
|
104
|
+
- spec/fixtures/cassettes/auction_data.yml
|
105
|
+
- spec/fixtures/cassettes/auction_files.yml
|
106
|
+
- spec/fixtures/cassettes/character_classes.yml
|
107
|
+
- spec/fixtures/cassettes/character_mortawa.yml
|
108
|
+
- spec/fixtures/cassettes/character_mortawa_es.yml
|
109
|
+
- spec/fixtures/cassettes/character_mortawa_titles.yml
|
110
|
+
- spec/fixtures/cassettes/character_nonstandard_name.yml
|
111
|
+
- spec/fixtures/cassettes/character_races.yml
|
112
|
+
- spec/fixtures/cassettes/guild_perks.yml
|
113
|
+
- spec/fixtures/cassettes/guild_rewards.yml
|
114
|
+
- spec/fixtures/cassettes/guild_rl_bl.yml
|
115
|
+
- spec/fixtures/cassettes/guild_rl_bl_members.yml
|
116
|
+
- spec/fixtures/cassettes/item_classes.yml
|
117
|
+
- spec/fixtures/cassettes/item_hooooooooooo.yml
|
118
|
+
- spec/fixtures/cassettes/realm.yml
|
119
|
+
- spec/integration/arena_spec.rb
|
120
|
+
- spec/integration/auction_spec.rb
|
121
|
+
- spec/integration/character_spec.rb
|
122
|
+
- spec/integration/data_spec.rb
|
123
|
+
- spec/integration/guild_spec.rb
|
124
|
+
- spec/integration/item_spec.rb
|
125
|
+
- spec/integration/locale_spec.rb
|
126
|
+
- spec/integration/realm_spec.rb
|
54
127
|
- spec/spec_helper.rb
|
55
|
-
|
56
|
-
|
128
|
+
- spec/unit/battlenet_authentication_spec.rb
|
129
|
+
- spec/unit/battlenet_spec.rb
|
130
|
+
homepage: ''
|
57
131
|
licenses: []
|
58
|
-
|
59
132
|
post_install_message:
|
60
133
|
rdoc_options: []
|
61
|
-
|
62
|
-
require_paths:
|
134
|
+
require_paths:
|
63
135
|
- lib
|
64
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
137
|
none: false
|
66
|
-
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version:
|
70
|
-
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
segments:
|
143
|
+
- 0
|
144
|
+
hash: 1432348448402265031
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
146
|
none: false
|
72
|
-
requirements:
|
73
|
-
- -
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version:
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
segments:
|
152
|
+
- 0
|
153
|
+
hash: 1432348448402265031
|
76
154
|
requirements: []
|
77
|
-
|
78
155
|
rubyforge_project:
|
79
|
-
rubygems_version: 1.
|
156
|
+
rubygems_version: 1.8.10
|
80
157
|
signing_key:
|
81
158
|
specification_version: 3
|
82
159
|
summary: Easily consume Blizzard's Community Platform API.
|
83
|
-
test_files:
|
84
|
-
- spec/
|
85
|
-
- spec/
|
86
|
-
- spec/
|
160
|
+
test_files:
|
161
|
+
- spec/fixtures/cassettes/arena_fun_and_profit.yml
|
162
|
+
- spec/fixtures/cassettes/auction_data.yml
|
163
|
+
- spec/fixtures/cassettes/auction_files.yml
|
164
|
+
- spec/fixtures/cassettes/character_classes.yml
|
165
|
+
- spec/fixtures/cassettes/character_mortawa.yml
|
166
|
+
- spec/fixtures/cassettes/character_mortawa_es.yml
|
167
|
+
- spec/fixtures/cassettes/character_mortawa_titles.yml
|
168
|
+
- spec/fixtures/cassettes/character_nonstandard_name.yml
|
169
|
+
- spec/fixtures/cassettes/character_races.yml
|
170
|
+
- spec/fixtures/cassettes/guild_perks.yml
|
171
|
+
- spec/fixtures/cassettes/guild_rewards.yml
|
172
|
+
- spec/fixtures/cassettes/guild_rl_bl.yml
|
173
|
+
- spec/fixtures/cassettes/guild_rl_bl_members.yml
|
174
|
+
- spec/fixtures/cassettes/item_classes.yml
|
175
|
+
- spec/fixtures/cassettes/item_hooooooooooo.yml
|
176
|
+
- spec/fixtures/cassettes/realm.yml
|
177
|
+
- spec/integration/arena_spec.rb
|
178
|
+
- spec/integration/auction_spec.rb
|
179
|
+
- spec/integration/character_spec.rb
|
180
|
+
- spec/integration/data_spec.rb
|
181
|
+
- spec/integration/guild_spec.rb
|
182
|
+
- spec/integration/item_spec.rb
|
183
|
+
- spec/integration/locale_spec.rb
|
184
|
+
- spec/integration/realm_spec.rb
|
87
185
|
- spec/spec_helper.rb
|
186
|
+
- spec/unit/battlenet_authentication_spec.rb
|
187
|
+
- spec/unit/battlenet_spec.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'battlenet/adapter/abstract_adapter'
|
2
|
-
require 'net/http'
|
3
|
-
|
4
|
-
module Battlenet
|
5
|
-
module Adapter
|
6
|
-
class NetHTTP < AbstractAdapter
|
7
|
-
def get(url)
|
8
|
-
uri = URI.parse url
|
9
|
-
response = Net::HTTP.get_response uri
|
10
|
-
[response.code.to_i, response.body]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'battlenet/adapter/abstract_adapter'
|
2
|
-
require 'typhoeus'
|
3
|
-
|
4
|
-
module Battlenet
|
5
|
-
module Adapter
|
6
|
-
class Typhoeus < AbstractAdapter
|
7
|
-
def get(url)
|
8
|
-
response = ::Typhoeus::Request.get url
|
9
|
-
[response.code.to_i, response.body]
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module Battlenet
|
2
|
-
module Adapter; end
|
3
|
-
|
4
|
-
module AdapterManager
|
5
|
-
class InvalidAdapter < Exception; end
|
6
|
-
|
7
|
-
extend self
|
8
|
-
|
9
|
-
@adapters = {
|
10
|
-
:net_http => "NetHTTP",
|
11
|
-
:typhoeus => "Typhoeus"
|
12
|
-
}
|
13
|
-
|
14
|
-
def adapters
|
15
|
-
@adapters
|
16
|
-
end
|
17
|
-
|
18
|
-
def fetch(adapter_name)
|
19
|
-
unless adapters.include? adapter_name
|
20
|
-
raise InvalidAdapter.new("#{adapter_name.to_s} is not a valid adapter")
|
21
|
-
end
|
22
|
-
|
23
|
-
adapter_class = adapters[adapter_name]
|
24
|
-
adapter = load_adapter adapter_name, adapter_class
|
25
|
-
end
|
26
|
-
|
27
|
-
def register(identifier, klass)
|
28
|
-
@adapters[identifier] = klass
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def load_adapter(adapter_name, klass_name)
|
34
|
-
begin
|
35
|
-
klass = Battlenet::Adapter.const_get("#{klass_name}", false)
|
36
|
-
rescue NameError
|
37
|
-
begin
|
38
|
-
adapter_file = "battlenet/adapter/#{adapter_name.to_s}"
|
39
|
-
require adapter_file
|
40
|
-
klass = Battlenet::Adapter.const_get("#{klass_name}", false)
|
41
|
-
rescue LoadError
|
42
|
-
raise InvalidAdapter.new("adapter #{klass_name} does not exist, and file #{adapter_file} does not exist")
|
43
|
-
rescue NameError
|
44
|
-
raise InvalidAdapter.new("expected #{adapter_file} to define Battlenet::Adapter::#{klass_name}")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
return klass.new
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/battlenet/api.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'battlenet/adapter_manager'
|
2
|
-
require 'cgi'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
module Battlenet
|
6
|
-
module API
|
7
|
-
class APIError < Exception
|
8
|
-
attr_reader :code, :body
|
9
|
-
def initialize(code, body)
|
10
|
-
@code = code
|
11
|
-
@body = body
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
"Status: #{code} Body: #{body}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
extend self
|
20
|
-
|
21
|
-
@config = {
|
22
|
-
:indifferent_hashes => true,
|
23
|
-
:http_adapter => :net_http,
|
24
|
-
:region => :us
|
25
|
-
}
|
26
|
-
|
27
|
-
def set_option(setting, value)
|
28
|
-
@config[setting] = value
|
29
|
-
end
|
30
|
-
|
31
|
-
def get_option(setting, default = nil)
|
32
|
-
@config[setting] || default
|
33
|
-
end
|
34
|
-
|
35
|
-
def adapter
|
36
|
-
@adapter ||= Battlenet::AdapterManager.fetch get_option(:http_adapter)
|
37
|
-
end
|
38
|
-
|
39
|
-
def base_url
|
40
|
-
region = get_option(:region, :us).to_s
|
41
|
-
"http://#{region}.battle.net/api/wow"
|
42
|
-
end
|
43
|
-
|
44
|
-
def make_api_call(path, query = {})
|
45
|
-
query_string = query.empty? ? '' : make_query_string(query)
|
46
|
-
url = base_url
|
47
|
-
url << (path.start_with?('/') ? '' : '/')
|
48
|
-
url << path
|
49
|
-
url << query_string
|
50
|
-
code, body = get url
|
51
|
-
raise APIError.new(code, body) unless code == 200
|
52
|
-
JSON::parse body
|
53
|
-
end
|
54
|
-
|
55
|
-
def get(url)
|
56
|
-
adapter.get(url)
|
57
|
-
end
|
58
|
-
|
59
|
-
def make_query_string(query)
|
60
|
-
query_string = "?"
|
61
|
-
query.each do |key, value|
|
62
|
-
case value
|
63
|
-
when String
|
64
|
-
query_string << "#{key}=#{CGI.escape value}&"
|
65
|
-
when Array
|
66
|
-
value.each { |v| query_string << "#{key}=#{CGI.escape v}&" }
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
query_string.chomp("&").chomp("?")
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/lib/battlenet/api/realm.rb
DELETED
data/lib/battlenet/version.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'battlenet/adapter/abstract_adapter'
|
2
|
-
|
3
|
-
describe Battlenet::Adapter::AbstractAdapter do
|
4
|
-
it "has a method 'get'" do
|
5
|
-
subject.should respond_to :get
|
6
|
-
end
|
7
|
-
|
8
|
-
context "#get" do
|
9
|
-
it "is abstract" do
|
10
|
-
lambda {
|
11
|
-
subject.get('fake_url')
|
12
|
-
}.should raise_error Battlenet::Adapter::NotImplementedException
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'battlenet/adapter_manager'
|
2
|
-
|
3
|
-
describe Battlenet::AdapterManager do
|
4
|
-
it "has a list of adapters" do
|
5
|
-
subject.adapters.should be_a Hash
|
6
|
-
end
|
7
|
-
|
8
|
-
context "#fetch" do
|
9
|
-
it "raises an exception if an invalid adapter is passed" do
|
10
|
-
lambda {
|
11
|
-
subject.fetch(:some_fake_adapter)
|
12
|
-
}.should raise_error Battlenet::AdapterManager::InvalidAdapter
|
13
|
-
end
|
14
|
-
|
15
|
-
it "requires a library file based on the adapter chosen if the class doesn't exist" do
|
16
|
-
subject.should_receive(:require).once.with('battlenet/adapter/net_http')
|
17
|
-
begin
|
18
|
-
subject.fetch(:net_http)
|
19
|
-
rescue Battlenet::AdapterManager::InvalidAdapter
|
20
|
-
# expected
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
it "raises an error if the adapter class doesn't exist and the library can't be loaded" do
|
25
|
-
old_adapters = subject.adapters
|
26
|
-
subject.instance_variable_set(:@adapters, {:adapter => "SuperAdapter"})
|
27
|
-
|
28
|
-
lambda {
|
29
|
-
subject.fetch(:adapter)
|
30
|
-
}.should raise_error Battlenet::AdapterManager::InvalidAdapter, /does not exist/
|
31
|
-
|
32
|
-
subject.instance_variable_set(:@adapters, old_adapters)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "raises an error if the adapter library is loaded but doesn't define the adapter class" do
|
36
|
-
subject.should_receive(:require).once.with('battlenet/adapter/net_http').and_return(nil)
|
37
|
-
lambda {
|
38
|
-
subject.fetch(:net_http)
|
39
|
-
}.should raise_error Battlenet::AdapterManager::InvalidAdapter, /expected (.*) to define/
|
40
|
-
end
|
41
|
-
|
42
|
-
it "returns an instance of the adapter" do
|
43
|
-
adapter = subject.fetch(:net_http)
|
44
|
-
adapter.should be_a Battlenet::Adapter::NetHTTP
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "#register" do
|
49
|
-
it "registers an adapter" do
|
50
|
-
lambda do
|
51
|
-
subject.register(:adapter_identifier, 'AdapterClass')
|
52
|
-
end.should change(subject.adapters, :count).by(1)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|