blizzard-community-api 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.
Files changed (41) hide show
  1. data/Gemfile +15 -0
  2. data/Gemfile.lock +33 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.rdoc +40 -0
  5. data/Rakefile +46 -0
  6. data/VERSION +1 -0
  7. data/lib/api_enums.rb +65 -0
  8. data/lib/api_request.rb +133 -0
  9. data/lib/api_requestor.rb +5 -0
  10. data/lib/arena_team_request.rb +23 -0
  11. data/lib/authorized_api_request.rb +62 -0
  12. data/lib/blizzard-community-api.rb +101 -0
  13. data/lib/character_classes_request.rb +11 -0
  14. data/lib/character_profile_request.rb +33 -0
  15. data/lib/character_races_request.rb +11 -0
  16. data/lib/configuration.rb +67 -0
  17. data/lib/current_auctions_request.rb +21 -0
  18. data/lib/guild_perks_request.rb +11 -0
  19. data/lib/guild_profile_request.rb +33 -0
  20. data/lib/guild_rewards_request.rb +11 -0
  21. data/lib/item_classes_request.rb +11 -0
  22. data/lib/item_request.rb +21 -0
  23. data/lib/realm_status_request.rb +28 -0
  24. data/spec/api_request_spec.rb +99 -0
  25. data/spec/api_spec.rb +84 -0
  26. data/spec/arena_team_request_spec.rb +46 -0
  27. data/spec/authorized_api_request_spec.rb +78 -0
  28. data/spec/authorized_spec.rb +89 -0
  29. data/spec/character_classes_request_spec.rb +38 -0
  30. data/spec/character_profile_request_spec.rb +92 -0
  31. data/spec/character_races_spec.rb +38 -0
  32. data/spec/current_auctions_request_spec.rb +41 -0
  33. data/spec/guild_perks_request_spec.rb +33 -0
  34. data/spec/guild_profile_request_spec.rb +59 -0
  35. data/spec/guild_rewards_request_spec.rb +54 -0
  36. data/spec/item_classes_request_spec.rb +36 -0
  37. data/spec/item_request_spec.rb +74 -0
  38. data/spec/realm_status_request_spec.rb +57 -0
  39. data/spec/rspec_helper.rb +8 -0
  40. data/spec/rspec_matchers.rb +18 -0
  41. metadata +92 -0
@@ -0,0 +1,84 @@
1
+ require "rspec_helper"
2
+ require "../lib/blizzard-community-api"
3
+
4
+ include WOW
5
+
6
+ describe API do
7
+ describe "::get_character_profile" do
8
+ it "should invoke a CharacterProfileRequest and return a response Hash", :live => true do
9
+ response = API.get_character_profile("Aven","Draenor")
10
+ response.should(be_a(Hash))
11
+ response["name"].should(be == "Aven")
12
+ end
13
+ end
14
+ describe "::get_guild_profile" do
15
+ it "should invoke a GuildProfileRequest and return a response Hash", :live => true do
16
+ response = API.get_guild_profile("Little Urban Elites","Draenor")
17
+ response.should(be_a(Hash))
18
+ response["name"].should(be == "Little Urban Elites")
19
+ end
20
+ end
21
+ describe "::get_arena_team" do
22
+ it "should invoke a ArenaTeamRequest and return a response Hash", :live => true do
23
+ response = API.get_arena_team("Draenor","3v3","Super Squishy")
24
+ response.should(be_a(Hash))
25
+ response["name"].should(be == "Super Squishy")
26
+ end
27
+ end
28
+ describe "::get_character_classes" do
29
+ it "should invoke a CharacterClassesRequest and return a response Hash", :live => true do
30
+ response = API.get_character_classes()
31
+ response.should(be_a(Hash))
32
+ response["classes"].should(be_a(Array))
33
+ end
34
+ end
35
+ describe "::get_character_races" do
36
+ it "should invoke a CharacterRacesRequest and return a response Hash", :live => true do
37
+ response = API.get_character_races()
38
+ response.should(be_a(Hash))
39
+ response["races"].should(be_a(Array))
40
+ end
41
+ end
42
+ describe "::get_current_auctions" do
43
+ it "should invoke a CurrentAuctionsRequest and return a response Hash", :live => true do
44
+ response = API.get_current_auctions("Draenor")
45
+ response.should(be_a(Hash))
46
+ response["files"].should(be_a(Array))
47
+ end
48
+ end
49
+ describe "::get_guild_perks" do
50
+ it "should invoke a GuildPerksRequest and return a response Hash", :live => true do
51
+ response = API.get_guild_perks()
52
+ response.should(be_a(Hash))
53
+ response["perks"].should(be_a(Array))
54
+ end
55
+ end
56
+ describe "::get_guild_rewards" do
57
+ it "should invoke a GuildRewardsRequest and return a response Hash", :live => true do
58
+ response = API.get_guild_rewards()
59
+ response.should(be_a(Hash))
60
+ response["rewards"].should(be_a(Array))
61
+ end
62
+ end
63
+ describe "::get_item_classes" do
64
+ it "should invoke a ItemClassesRequest and return a response Hash", :live => true do
65
+ response = API.get_item_classes()
66
+ response.should(be_a(Hash))
67
+ response["classes"].should(be_a(Array))
68
+ end
69
+ end
70
+ describe "::get_item" do
71
+ it "should invoke a ItemRequest and return a response Hash", :live => true do
72
+ response = API.get_item(78473)
73
+ response.should(be_a(Hash))
74
+ response["id"].should(be == 78473)
75
+ end
76
+ end
77
+ describe "::get_realm_status" do
78
+ it "should invoke a RealmStatusRequest and return a response Hash", :live => true do
79
+ response = API.get_realm_status()
80
+ response.should(be_a(Hash))
81
+ response["realms"].should(be_a(Array))
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,46 @@
1
+ require "rspec_helper"
2
+ require "../lib/arena_team_request"
3
+
4
+ include WOW
5
+
6
+ describe ArenaTeamRequest do
7
+ describe "::new" do
8
+ it "should create a new ArenaTeamRequest if valid" do
9
+ request = ArenaTeamRequest.new("Draenor","3v3","Super Squishy")
10
+ request.should be_instance_of(ArenaTeamRequest)
11
+ request.realm.should(be == "Draenor")
12
+ request.team_size.should(be == "3v3")
13
+ request.team_name.should(be == "Super Squishy")
14
+ end
15
+ it "should require a non-empty string for realm, team_size and team_name" do
16
+ lambda{ArenaTeamRequest.new(nil,"3v3","Super Squishy")}.should raise_error(SyntaxError)
17
+ lambda{ArenaTeamRequest.new("","3v3","Super Squishy")}.should raise_error(SyntaxError)
18
+ lambda{ArenaTeamRequest.new(3,"3v3","Super Squishy")}.should raise_error(SyntaxError)
19
+ lambda{ArenaTeamRequest.new("Draenor",nil,"Super Squishy")}.should raise_error(SyntaxError)
20
+ lambda{ArenaTeamRequest.new("Draenor","","Super Squishy")}.should raise_error(SyntaxError)
21
+ lambda{ArenaTeamRequest.new("Draenor",3,"Super Squishy")}.should raise_error(SyntaxError)
22
+ lambda{ArenaTeamRequest.new("Draenor","3v3",nil)}.should raise_error(SyntaxError)
23
+ lambda{ArenaTeamRequest.new("Draenor","3v3","")}.should raise_error(SyntaxError)
24
+ lambda{ArenaTeamRequest.new("Draenor","3v3",3)}.should raise_error(SyntaxError)
25
+ end
26
+ end
27
+ describe "#query" do
28
+ it "should be empty" do
29
+ request = ArenaTeamRequest.new("Draenor","3v3","Super Squishy")
30
+ request.query.should == {}
31
+ end
32
+ end
33
+ describe "#uri" do
34
+ it "should be created dynamically" do
35
+ request = ArenaTeamRequest.new("Draenor","3v3","Super Squishy")
36
+ request.uri.should == URI.parse("http://us.battle.net/api/wow/arena/Draenor/3v3/Super%20Squishy")
37
+ end
38
+ end
39
+ describe "#invoke" do
40
+ it "should return a valid character record", :live => true do
41
+ request = ArenaTeamRequest.new("Draenor","3v3","Super Squishy")
42
+ response = request.invoke
43
+ response.should(be_a(Hash))
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,78 @@
1
+ require "rspec_helper"
2
+ require "../lib/authorized_api_request"
3
+
4
+ include WOW
5
+
6
+ describe AuthorizedApiRequest do
7
+ describe "#scheme" do
8
+ it "should be https" do
9
+ api_request = ApiRequest.new()
10
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
11
+ authorized_request.scheme.should == "https"
12
+ end
13
+ end
14
+ describe "#uri" do
15
+ it "should update scheme to https" do
16
+ api_request = ApiRequest.new()
17
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
18
+ authorized_request.uri.should(be == URI.parse("#{authorized_request.scheme}://#{API_HOST_NAMES[authorized_request.locale]}#{API_ROOT_PATH}"))
19
+ end
20
+ end
21
+ describe "#locale" do
22
+ it "should inherit the value from api_request" do
23
+ api_request = ApiRequest.new()
24
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
25
+ authorized_request.locale.should(be(api_request.locale))
26
+ end
27
+ end
28
+ describe "#hostname" do
29
+ it "should inherit the value from api_request" do
30
+ api_request = ApiRequest.new()
31
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
32
+ authorized_request.hostname.should(be(api_request.hostname))
33
+ end
34
+ end
35
+ describe "#path" do
36
+ it "should inherit the value from api_request" do
37
+ api_request = ApiRequest.new()
38
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
39
+ authorized_request.path.should(be(api_request.path))
40
+ end
41
+ end
42
+ describe "#query" do
43
+ it "should inherit the value from api_request" do
44
+ api_request = ApiRequest.new()
45
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
46
+ authorized_request.query.should(be == api_request.query)
47
+ end
48
+ end
49
+ describe "#last_modified" do
50
+ it "should inherit the value from api_request" do
51
+ api_request = ApiRequest.new()
52
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
53
+ authorized_request.last_modified.should(be(api_request.last_modified))
54
+ end
55
+ end
56
+ describe "#headers" do
57
+ it "should contain default headers" do
58
+ api_request = ApiRequest.new()
59
+ authorized_request = AuthorizedApiRequest.new(api_request, "public_key", "private_key")
60
+ authorized_request.headers["Authorization"].should_not(be_nil)
61
+ authorized_request.headers["Authorization"][0...16].should(be == "BNET public_key:")
62
+ authorized_request.headers["Authorization"].length.should(be(45))
63
+ authorized_request.headers["Date"].should_not(be_nil)
64
+ DateTime.parse(authorized_request.headers["Date"]).should < DateTime.now
65
+ authorized_request.headers["If-Modified-Since"].should_not(be_nil)
66
+ DateTime.parse(authorized_request.headers["If-Modified-Since"]).to_time.should == Time.at(0).utc
67
+ end
68
+ end
69
+ describe "#invoke" do
70
+ it "should return a valid response", :live => true do
71
+ require "../lib/character_profile_request"
72
+ api_request = CharacterProfileRequest.new("Aven","Draenor")
73
+ authorized_request = AuthorizedApiRequest.new(api_request, "--DONT-CHECK-IN-YOUR-KEYS--", "--DONT-CHECK-IN-YOUR-KEYS--")
74
+ response = authorized_request.invoke
75
+ response.should(be_a(Hash))
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,89 @@
1
+ require "rspec_helper"
2
+ require "../lib/blizzard-community-api"
3
+
4
+ include WOW
5
+
6
+ describe API::Authorized do
7
+ before(:all) do
8
+ Configuration.public_key = "--DONT-CHECK-IN-KEYS--"
9
+ Configuration.private_key = "--DONT-CHECK-IN-KEYS--"
10
+ end
11
+
12
+ describe "::get_character_profile" do
13
+ it "should invoke a CharacterProfileRequest and return a response Hash", :live => true do
14
+ response = API::Authorized.get_character_profile("Aven","Draenor")
15
+ response.should(be_a(Hash))
16
+ response["name"].should(be == "Aven")
17
+ end
18
+ end
19
+ describe "::get_guild_profile" do
20
+ it "should invoke a GuildProfileRequest and return a response Hash", :live => true do
21
+ response = API::Authorized.get_guild_profile("Little Urban Elites","Draenor")
22
+ response.should(be_a(Hash))
23
+ response["name"].should(be == "Little Urban Elites")
24
+ end
25
+ end
26
+ describe "::get_arena_team" do
27
+ it "should invoke a ArenaTeamRequest and return a response Hash", :live => true do
28
+ response = API.get_arena_team("Draenor","3v3","Super Squishy")
29
+ response.should(be_a(Hash))
30
+ response["name"].should(be == "Super Squishy")
31
+ end
32
+ end
33
+ describe "::get_character_classes" do
34
+ it "should invoke a CharacterClassesRequest and return a response Hash", :live => true do
35
+ response = API::Authorized.get_character_classes()
36
+ response.should(be_a(Hash))
37
+ response["classes"].should(be_a(Array))
38
+ end
39
+ end
40
+ describe "::get_character_races" do
41
+ it "should invoke a CharacterRacesRequest and return a response Hash", :live => true do
42
+ response = API::Authorized.get_character_races()
43
+ response.should(be_a(Hash))
44
+ response["races"].should(be_a(Array))
45
+ end
46
+ end
47
+ describe "::get_current_auctions" do
48
+ it "should invoke a CurrentAuctionsRequest and return a response Hash", :live => true do
49
+ response = API::Authorized.get_current_auctions("Draenor")
50
+ response.should(be_a(Hash))
51
+ response["files"].should(be_a(Array))
52
+ end
53
+ end
54
+ describe "::get_guild_perks" do
55
+ it "should invoke a GuildPerksRequest and return a response Hash", :live => true do
56
+ response = API::Authorized.get_guild_perks()
57
+ response.should(be_a(Hash))
58
+ response["perks"].should(be_a(Array))
59
+ end
60
+ end
61
+ describe "::get_guild_rewards" do
62
+ it "should invoke a GuildRewardsRequest and return a response Hash", :live => true do
63
+ response = API::Authorized.get_guild_rewards()
64
+ response.should(be_a(Hash))
65
+ response["rewards"].should(be_a(Array))
66
+ end
67
+ end
68
+ describe "::get_item_classes" do
69
+ it "should invoke a ItemClassesRequest and return a response Hash", :live => true do
70
+ response = API::Authorized.get_item_classes()
71
+ response.should(be_a(Hash))
72
+ response["classes"].should(be_a(Array))
73
+ end
74
+ end
75
+ describe "::get_item" do
76
+ it "should invoke a ItemRequest and return a response Hash", :live => true do
77
+ response = API::Authorized.get_item(78473)
78
+ response.should(be_a(Hash))
79
+ response["id"].should(be == 78473)
80
+ end
81
+ end
82
+ describe "::get_realm_status" do
83
+ it "should invoke a RealmStatusRequest and return a response Hash", :live => true do
84
+ response = API::Authorized.get_realm_status()
85
+ response.should(be_a(Hash))
86
+ response["realms"].should(be_a(Array))
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,38 @@
1
+ require "rspec_helper"
2
+ require "../lib/character_classes_request"
3
+
4
+ include WOW
5
+
6
+ describe CharacterClassesRequest do
7
+ describe "::new" do
8
+ it "should create a new CharacterClassesRequest if valid" do
9
+ request = CharacterClassesRequest.new()
10
+ request.should be_instance_of(CharacterClassesRequest)
11
+ end
12
+ end
13
+ describe "#query" do
14
+ it "should be empty" do
15
+ request = CharacterClassesRequest.new()
16
+ request.query.should(be == {})
17
+ end
18
+ end
19
+ describe "#uri" do
20
+ it "should be created dynamically" do
21
+ request = CharacterClassesRequest.new()
22
+ request.uri.should == URI.parse("http://us.battle.net/api/wow/data/character/classes")
23
+ end
24
+ end
25
+ describe "#invoke" do
26
+ it "should return a valid item record", :live => true do
27
+ request = CharacterClassesRequest.new()
28
+ response = request.invoke
29
+ response.should(be_a(Hash))
30
+ response["classes"].should(be_a(Array))
31
+ response["classes"][0].should(be_a(Hash))
32
+ response["classes"][0]["id"].should(be_a(Integer))
33
+ response["classes"][0]["mask"].should(be_a(Integer))
34
+ response["classes"][0]["powerType"].should(be_a(String))
35
+ response["classes"][0]["name"].should(be_a(String))
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,92 @@
1
+ require "rspec_helper"
2
+ require "../lib/character_profile_request"
3
+
4
+ include WOW
5
+
6
+ describe CharacterProfileRequest do
7
+ describe "::new" do
8
+ it "should create a new CharacterProfileRequest if valid" do
9
+ request = CharacterProfileRequest.new("Aven","Draenor",:fields => [:stats, :talents])
10
+ request.should be_instance_of(CharacterProfileRequest)
11
+ request.name.should == "Aven"
12
+ request.realm.should == "Draenor"
13
+ request.fields.should == [:stats, :talents]
14
+ end
15
+ it "should require a non-empty string for name and realm" do
16
+ lambda{CharacterProfileRequest.new("", "realm")}.should raise_error(SyntaxError)
17
+ lambda{CharacterProfileRequest.new(nil, "realm")}.should raise_error(SyntaxError)
18
+ lambda{CharacterProfileRequest.new("name", "")}.should raise_error(SyntaxError)
19
+ lambda{CharacterProfileRequest.new("name", nil)}.should raise_error(SyntaxError)
20
+ lambda{CharacterProfileRequest.new(5, "")}.should raise_error(SyntaxError)
21
+ end
22
+ it "should require an array of fields if fields are supplied" do
23
+ lambda{CharacterProfileRequest.new("Aven","Draenor",:fields => :stats)}.should raise_error(SyntaxError)
24
+ lambda{CharacterProfileRequest.new("Aven","Draenor",:fields => { :stats => false, :talents => true })}.should raise_error(SyntaxError)
25
+ CharacterProfileRequest.new("Aven","Dreanor",:fields => nil).should be_instance_of(CharacterProfileRequest)
26
+ CharacterProfileRequest.new("Aven","Dreanor").should be_instance_of(CharacterProfileRequest)
27
+ end
28
+ it "should return additional information if fields collection contains token", :live => true do
29
+ request = CharacterProfileRequest.new("Aven","Draenor",:fields => [ :guild, :stats, :talents, :items, :reputation, :titles, :professions, :appearance, :companions, :mounts, :pets, :achievements, :progression, :pvp, :quests ])
30
+ response = request.invoke
31
+ response.should(be_a(Hash))
32
+ response["guild"].should(be_a(Hash))
33
+ response["stats"].should(be_a(Hash))
34
+ response["talents"].should(be_a(Array))
35
+ response["items"].should(be_a(Hash))
36
+ response["reputation"].should(be_a(Array))
37
+ response["titles"].should(be_a(Array))
38
+ response["professions"].should(be_a(Hash))
39
+ response["appearance"].should(be_a(Hash))
40
+ response["companions"].should(be_a(Array))
41
+ response["mounts"].should(be_a(Array))
42
+ response["pets"].should(be_a(Array))
43
+ response["achievements"].should(be_a(Hash))
44
+ response["progression"].should(be_a(Hash))
45
+ response["pvp"].should(be_a(Hash))
46
+ response["quests"].should(be_a(Array))
47
+ end
48
+ end
49
+ describe "#query" do
50
+ it "should be created dynamically" do
51
+ request = CharacterProfileRequest.new("Aven","Draenor",:fields => [:stats, :talents])
52
+ request.query.should == {"fields" => [ :stats, :talents ]}
53
+ end
54
+ end
55
+ describe "#uri" do
56
+ it "should be created dynamically" do
57
+ request = CharacterProfileRequest.new("Aven","Draenor",:fields => [:stats, :talents])
58
+ request.uri.should == URI.parse("http://us.battle.net/api/wow/character/Draenor/Aven?fields=stats,talents")
59
+ end
60
+ end
61
+ describe "#invoke" do
62
+ it "should return a valid character record", :live => true do
63
+ request = CharacterProfileRequest.new("Aven","Draenor")
64
+ response = request.invoke
65
+ response.should(be_a(Hash))
66
+ response["realm"].should(be_a(String))
67
+ response["name"].should(be_a(String))
68
+ response["level"].should(be_a(Integer))
69
+ response["lastModified"].should(be_a(Numeric))
70
+ response["thumbnail"].should(be_a(String))
71
+ response["race"].should(be_a(Integer))
72
+ response["achievementPoints"].should(be_a(Integer))
73
+ response["gender"].should(be_a(Integer))
74
+ response["class"].should(be_a(Integer))
75
+ response["guild"].should(be_nil)
76
+ response["stats"].should(be_nil)
77
+ response["talents"].should(be_nil)
78
+ response["items"].should(be_nil)
79
+ response["reputation"].should(be_nil)
80
+ response["titles"].should(be_nil)
81
+ response["professions"].should(be_nil)
82
+ response["appearance"].should(be_nil)
83
+ response["companions"].should(be_nil)
84
+ response["mounts"].should(be_nil)
85
+ response["pets"].should(be_nil)
86
+ response["achievements"].should(be_nil)
87
+ response["progression"].should(be_nil)
88
+ response["pvp"].should(be_nil)
89
+ response["quests"].should(be_nil)
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,38 @@
1
+ require "rspec_helper"
2
+ require "../lib/character_races_request"
3
+
4
+ include WOW
5
+
6
+ describe CharacterRacesRequest do
7
+ describe "::new" do
8
+ it "should create a new CharacterRacesRequest if valid" do
9
+ request = CharacterRacesRequest.new()
10
+ request.should be_instance_of(CharacterRacesRequest)
11
+ end
12
+ end
13
+ describe "#query" do
14
+ it "should be empty" do
15
+ request = CharacterRacesRequest.new()
16
+ request.query.should(be == {})
17
+ end
18
+ end
19
+ describe "#uri" do
20
+ it "should be created dynamically" do
21
+ request = CharacterRacesRequest.new()
22
+ request.uri.should == URI.parse("http://us.battle.net/api/wow/data/character/races")
23
+ end
24
+ end
25
+ describe "#invoke" do
26
+ it "should return a valid item record", :live => true do
27
+ request = CharacterRacesRequest.new()
28
+ response = request.invoke
29
+ response.should(be_a(Hash))
30
+ response["races"].should(be_a(Array))
31
+ response["races"][0].should(be_a(Hash))
32
+ response["races"][0]["id"].should(be_a(Integer))
33
+ response["races"][0]["mask"].should(be_a(Integer))
34
+ response["races"][0]["side"].should(be_a(String))
35
+ response["races"][0]["name"].should(be_a(String))
36
+ end
37
+ end
38
+ end