starcraft2 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fixtures/cassettes/ladders_999000.yml +1053 -0
- data/lib/starcraft2/character.rb +7 -1
- data/lib/starcraft2/client.rb +33 -19
- data/lib/starcraft2/loader.rb +4 -0
- data/lib/starcraft2/profile.rb +5 -1
- data/lib/starcraft2/profile/achievement_item.rb +3 -3
- data/lib/starcraft2/profile/achievements.rb +2 -2
- data/lib/starcraft2/profile/campaign.rb +2 -2
- data/lib/starcraft2/profile/career.rb +2 -2
- data/lib/starcraft2/profile/detailed_season.rb +17 -0
- data/lib/starcraft2/profile/ladder.rb +17 -0
- data/lib/starcraft2/profile/ladders.rb +11 -0
- data/lib/starcraft2/profile/match.rb +1 -1
- data/lib/starcraft2/profile/non_rank.rb +18 -0
- data/lib/starcraft2/profile/points.rb +1 -1
- data/lib/starcraft2/profile/season.rb +1 -1
- data/lib/starcraft2/profile/stats.rb +2 -2
- data/spec/starcraft2/achievement_spec.rb +42 -45
- data/spec/starcraft2/character_spec.rb +37 -19
- data/spec/starcraft2/client_spec.rb +2 -4
- data/spec/starcraft2/icon_spec.rb +7 -22
- data/spec/starcraft2/member_spec.rb +24 -54
- data/spec/starcraft2/profile/achievement_item_spec.rb +48 -0
- data/spec/starcraft2/profile/achievements_spec.rb +36 -27
- data/spec/starcraft2/profile/campaign_spec.rb +8 -7
- data/spec/starcraft2/profile/career_spec.rb +30 -47
- data/spec/starcraft2/profile/detailed_season_spec.rb +98 -0
- data/spec/starcraft2/profile/ladder_spec.rb +63 -0
- data/spec/starcraft2/profile/ladders_spec.rb +197 -0
- data/spec/starcraft2/profile/match_spec.rb +41 -22
- data/spec/starcraft2/profile/non_rank_spec.rb +48 -0
- data/spec/starcraft2/profile/points_spec.rb +22 -0
- data/spec/starcraft2/profile/rewards_spec.rb +17 -11
- data/spec/starcraft2/profile/season_spec.rb +33 -23
- data/spec/starcraft2/profile/stats_spec.rb +49 -0
- data/spec/starcraft2/profile/swarm_levels_spec.rb +29 -16
- data/spec/starcraft2/profile/swarm_race_spec.rb +25 -0
- data/spec/starcraft2/profile_spec.rb +80 -73
- data/spec/starcraft2/reward_spec.rb +22 -31
- data/spec/starcraft2/utils_spec.rb +30 -0
- data/starcraft2.gemspec +1 -1
- metadata +15 -2
data/lib/starcraft2/character.rb
CHANGED
data/lib/starcraft2/client.rb
CHANGED
@@ -16,26 +16,22 @@ module Starcraft2
|
|
16
16
|
|
17
17
|
def profile(options = {})
|
18
18
|
if (args = [:character_name, :id, :realm] - options.keys).empty?
|
19
|
-
Profile.build(self,
|
19
|
+
Profile.build(self, profile_data(options))
|
20
20
|
else
|
21
21
|
raise MissingArgumentsError, "Missing Keys: #{args.map {|i| ":#{i}"}.join(', ')}"
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
def matches(options = {})
|
26
|
-
Profile::Match.build(match_json(options))
|
27
|
-
end
|
28
|
-
|
29
25
|
def achievements
|
30
|
-
Achievement.build(
|
26
|
+
Achievement.build(achievements_data)
|
31
27
|
end
|
32
28
|
|
33
29
|
def rewards
|
34
|
-
Reward.build(
|
30
|
+
Reward.build(rewards_data)
|
35
31
|
end
|
36
32
|
|
37
33
|
def ladder(id)
|
38
|
-
Ladder.build(
|
34
|
+
Ladder.build(ladder_data(id))
|
39
35
|
end
|
40
36
|
|
41
37
|
def grandmaster_ladder
|
@@ -48,8 +44,16 @@ module Starcraft2
|
|
48
44
|
|
49
45
|
private
|
50
46
|
|
51
|
-
def
|
52
|
-
|
47
|
+
def matches(options = {})
|
48
|
+
Profile::Match.build(match_data(options))
|
49
|
+
end
|
50
|
+
|
51
|
+
def ladders(options = {})
|
52
|
+
Profile::Ladders.new(ladders_data(options))
|
53
|
+
end
|
54
|
+
|
55
|
+
def profile_data(options)
|
56
|
+
get_json do
|
53
57
|
HTTParty.get(profile_url(options))
|
54
58
|
end
|
55
59
|
end
|
@@ -62,18 +66,28 @@ module Starcraft2
|
|
62
66
|
"/api/sc2/profile/#{options[:id]}/#{options[:realm]}/#{options[:character_name]}/" + locale_param
|
63
67
|
end
|
64
68
|
|
65
|
-
def
|
66
|
-
|
69
|
+
def match_data(options)
|
70
|
+
get_json do
|
67
71
|
HTTParty.get(match_url(options))
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
75
|
+
def ladders_data(options)
|
76
|
+
get_json do
|
77
|
+
HTTParty.get(ladders_url(options))
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
71
81
|
def match_url(options)
|
72
82
|
'https://' + host + profile_path(options) + 'matches' + locale_param
|
73
83
|
end
|
74
84
|
|
75
|
-
def
|
76
|
-
|
85
|
+
def ladders_url(options)
|
86
|
+
'https://' + host + profile_path(options) + 'ladders' + locale_param
|
87
|
+
end
|
88
|
+
|
89
|
+
def achievements_data
|
90
|
+
get_json do
|
77
91
|
HTTParty.get(achievements_url)
|
78
92
|
end
|
79
93
|
end
|
@@ -82,8 +96,8 @@ module Starcraft2
|
|
82
96
|
'https://' + host + ACHIEVEMENTS_PATH + locale_param
|
83
97
|
end
|
84
98
|
|
85
|
-
def
|
86
|
-
|
99
|
+
def rewards_data
|
100
|
+
get_json do
|
87
101
|
HTTParty.get(rewards_url)
|
88
102
|
end
|
89
103
|
end
|
@@ -92,8 +106,8 @@ module Starcraft2
|
|
92
106
|
'https://' + host + REWARDS_PATH + locale_param
|
93
107
|
end
|
94
108
|
|
95
|
-
def
|
96
|
-
|
109
|
+
def ladder_data(id)
|
110
|
+
get_json do
|
97
111
|
HTTParty.get(ladder_url(id))
|
98
112
|
end
|
99
113
|
end
|
@@ -106,7 +120,7 @@ module Starcraft2
|
|
106
120
|
locale.nil? ? '' : "?locale=#{locale}"
|
107
121
|
end
|
108
122
|
|
109
|
-
def
|
123
|
+
def get_json
|
110
124
|
response = yield
|
111
125
|
case response.code
|
112
126
|
when 200
|
data/lib/starcraft2/loader.rb
CHANGED
@@ -24,4 +24,8 @@ require File.join('starcraft2', 'profile', 'rewards')
|
|
24
24
|
require File.join('starcraft2', 'profile', 'achievements')
|
25
25
|
require File.join('starcraft2', 'profile', 'points')
|
26
26
|
require File.join('starcraft2', 'profile', 'achievement_item')
|
27
|
+
require File.join('starcraft2', 'profile', 'ladders')
|
28
|
+
require File.join('starcraft2', 'profile', 'detailed_season')
|
29
|
+
require File.join('starcraft2', 'profile', 'non_rank')
|
30
|
+
require File.join('starcraft2', 'profile', 'ladder')
|
27
31
|
require File.join('starcraft2', 'profile')
|
data/lib/starcraft2/profile.rb
CHANGED
@@ -20,7 +20,11 @@ module Starcraft2
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def matches
|
23
|
-
client.
|
23
|
+
client.send(:matches, {:character_name => self.display_name, :id => self.id, :realm => self.realm})
|
24
|
+
end
|
25
|
+
|
26
|
+
def ladders
|
27
|
+
client.send(:ladders, {:character_name => self.display_name, :id => self.id, :realm => self.realm})
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
@@ -4,8 +4,8 @@ module Starcraft2
|
|
4
4
|
attr_accessor :points, :achievements
|
5
5
|
|
6
6
|
def initialize(options = {})
|
7
|
-
Utils.load(self, options, {
|
7
|
+
Utils.load(self, options, {:points => Points}, {:achievements => AchievementItem})
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
11
|
-
end
|
11
|
+
end
|
@@ -4,9 +4,9 @@ module Starcraft2
|
|
4
4
|
attr_accessor :primary_race, :league, :terran_wins, :protoss_wins, :zerg_wins,
|
5
5
|
:highest1v1_rank, :highest_team_rank, :season_total_games, :career_total_games
|
6
6
|
|
7
|
-
def initialize(options)
|
7
|
+
def initialize(options = {})
|
8
8
|
Utils.load(self, options)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
12
|
-
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Starcraft2
|
2
|
+
class Profile
|
3
|
+
class DetailedSeason
|
4
|
+
attr_accessor :ladder, :characters, :non_ranked
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
Utils.load(self, options, {}, {:ladder => Ladder, :characters => ::Starcraft2::Character, :non_ranked => NonRank})
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.build(detailed_season)
|
11
|
+
detailed_season.map do |ds|
|
12
|
+
new(ds)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Starcraft2
|
2
|
+
class Profile
|
3
|
+
class Ladder
|
4
|
+
attr_accessor :ladder_name, :ladder_id, :division, :rank, :league, :match_making_queue, :wins, :losses, :showcase
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
Utils.load(self, options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.build(ladders)
|
11
|
+
ladders.map do |l|
|
12
|
+
new(l)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Starcraft2
|
2
|
+
class Profile
|
3
|
+
class Ladders
|
4
|
+
attr_accessor :current_season, :previous_season, :showcase_placement
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
Utils.load(self, options, {}, {:current_season => DetailedSeason, :previous_season => DetailedSeason})
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Starcraft2
|
2
|
+
class Profile
|
3
|
+
class NonRank
|
4
|
+
attr_accessor :mmq, :games_played
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
Utils.load(self, options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.build(non_rank_data)
|
11
|
+
non_rank_data.map do |nr|
|
12
|
+
new(nr)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -1,13 +1,45 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Starcraft2::Achievement do
|
4
|
+
describe '.initialize' do
|
5
|
+
let(:achievement) { Starcraft2::Achievement.new(@options) }
|
6
|
+
|
7
|
+
before do
|
8
|
+
@options = {
|
9
|
+
'title' => 'Test Title',
|
10
|
+
'description' => 'Description',
|
11
|
+
'achievementId' => 5,
|
12
|
+
'categoryId' => 10,
|
13
|
+
'points' => 5,
|
14
|
+
'icon' => {'x' => 1, 'y' => 2, 'w' => 3, 'h' => 4, 'offset' => 0, 'url' => 'https://example.com'}
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should store attributes as underscored' do
|
19
|
+
achievement.title.should == 'Test Title'
|
20
|
+
achievement.description.should == 'Description'
|
21
|
+
achievement.achievement_id.should == 5
|
22
|
+
achievement.category_id.should == 10
|
23
|
+
achievement.points.should == 5
|
24
|
+
achievement.icon.x.should == 1
|
25
|
+
achievement.icon.y.should == 2
|
26
|
+
achievement.icon.w.should == 3
|
27
|
+
achievement.icon.h.should == 4
|
28
|
+
achievement.icon.offset.should == 0
|
29
|
+
achievement.icon.url.should == 'https://example.com'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
4
33
|
describe '#build' do
|
5
|
-
let(:achievements) { Starcraft2::Achievement.build(@
|
34
|
+
let(:achievements) { Starcraft2::Achievement.build(@items) }
|
6
35
|
|
7
36
|
before do
|
8
|
-
|
9
|
-
|
10
|
-
|
37
|
+
@items = {
|
38
|
+
'achievements' => [
|
39
|
+
{'title' => 'Test Title'},
|
40
|
+
{'title' => 'Another'}
|
41
|
+
]
|
42
|
+
}
|
11
43
|
end
|
12
44
|
|
13
45
|
it 'should build an array of achievements' do
|
@@ -16,16 +48,16 @@ describe Starcraft2::Achievement do
|
|
16
48
|
a.class.should == Starcraft2::Achievement
|
17
49
|
end
|
18
50
|
end
|
19
|
-
end
|
20
51
|
|
21
|
-
|
22
|
-
|
52
|
+
it 'should build items using new' do
|
53
|
+
@items['achievements'].each do |i|
|
54
|
+
Starcraft2::Achievement.should_receive(:new).with(i)
|
55
|
+
end
|
23
56
|
|
24
|
-
|
25
|
-
@options = {}
|
57
|
+
achievements
|
26
58
|
end
|
27
59
|
|
28
|
-
it 'should import the
|
60
|
+
it 'should import the achievements from blizzard' do
|
29
61
|
VCR.use_cassette('achievements') do
|
30
62
|
@achievement = Starcraft2::Achievement.build(JSON.parse(HTTParty.get('https://us.battle.net/api/sc2/data/achievements').body)).first
|
31
63
|
end
|
@@ -42,40 +74,5 @@ describe Starcraft2::Achievement do
|
|
42
74
|
@achievement.icon.offset.should == 45
|
43
75
|
@achievement.icon.url.should == 'http://media.blizzard.com/sc2/achievements/5-75.jpg'
|
44
76
|
end
|
45
|
-
|
46
|
-
it 'should store the title' do
|
47
|
-
@options = {:title => 'Test Title'}
|
48
|
-
achievement.title.should == 'Test Title'
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should store the description' do
|
52
|
-
@options = {:description => 'Description'}
|
53
|
-
achievement.description.should == 'Description'
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'should store the achievement id' do
|
57
|
-
@options = {:achievement_id => 5}
|
58
|
-
achievement.achievement_id.should == 5
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'should store the category id' do
|
62
|
-
@options = {:category_id => 10}
|
63
|
-
achievement.category_id.should == 10
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'should store the points' do
|
67
|
-
@options = {:points => 5}
|
68
|
-
achievement.points.should == 5
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'should store the icon data' do
|
72
|
-
@options = {:icon => {'x' => 1, 'y' => 2, 'w' => 3, 'h' => 4, 'offset' => 0, 'url' => 'https://example.com'}}
|
73
|
-
achievement.icon.x.should == 1
|
74
|
-
achievement.icon.y.should == 2
|
75
|
-
achievement.icon.w.should == 3
|
76
|
-
achievement.icon.h.should == 4
|
77
|
-
achievement.icon.offset.should == 0
|
78
|
-
achievement.icon.url.should == 'https://example.com'
|
79
|
-
end
|
80
77
|
end
|
81
78
|
end
|
@@ -5,37 +5,55 @@ describe Starcraft2::Character do
|
|
5
5
|
let(:character) { Starcraft2::Character.new(@options) }
|
6
6
|
|
7
7
|
before do
|
8
|
-
@options = {
|
8
|
+
@options = {
|
9
|
+
'id' => 5,
|
10
|
+
'realm' => 'somewhere',
|
11
|
+
'displayName' => 'display me',
|
12
|
+
'clanName' => 'clan name',
|
13
|
+
'clanTag' => 'clan tag',
|
14
|
+
'profilePath' => '/some/path'
|
15
|
+
}
|
9
16
|
end
|
10
17
|
|
11
|
-
it 'should store
|
12
|
-
@options = {:id => 5}
|
18
|
+
it 'should store attributes as underscored' do
|
13
19
|
character.id.should == 5
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should store the realm' do
|
17
|
-
@options = {:realm => 'somewhere'}
|
18
20
|
character.realm.should == 'somewhere'
|
21
|
+
character.display_name.should == 'display me'
|
22
|
+
character.clan_name.should == 'clan name'
|
23
|
+
character.clan_tag.should == 'clan tag'
|
24
|
+
character.profile_path.should == '/some/path'
|
19
25
|
end
|
20
26
|
|
21
|
-
it 'should
|
22
|
-
@options
|
23
|
-
|
27
|
+
it 'should use Stracraft2::Utils.load to populate the model' do
|
28
|
+
Starcraft2::Utils.should_receive(:load).with(anything, @options)
|
29
|
+
|
30
|
+
character
|
24
31
|
end
|
32
|
+
end
|
25
33
|
|
26
|
-
|
27
|
-
|
28
|
-
|
34
|
+
describe '#build' do
|
35
|
+
let(:characters) { Starcraft2::Character.build(@items) }
|
36
|
+
|
37
|
+
before do
|
38
|
+
@items = [
|
39
|
+
{'id' => 1},
|
40
|
+
{'id' => 2}
|
41
|
+
]
|
29
42
|
end
|
30
43
|
|
31
|
-
it 'should
|
32
|
-
|
33
|
-
|
44
|
+
it 'should build multiple character objects' do
|
45
|
+
characters.class.should == Array
|
46
|
+
characters.each do |s|
|
47
|
+
s.class.should == Starcraft2::Character
|
48
|
+
end
|
34
49
|
end
|
35
50
|
|
36
|
-
it 'should
|
37
|
-
@
|
38
|
-
|
51
|
+
it 'should build items using new' do
|
52
|
+
@items.each do |i|
|
53
|
+
Starcraft2::Character.should_receive(:new).with(i)
|
54
|
+
end
|
55
|
+
|
56
|
+
characters
|
39
57
|
end
|
40
58
|
end
|
41
59
|
end
|