blizzard-community-api 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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