starcraft2 0.1.1 → 0.2.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/fixtures/cassettes/ladders_999000.yml +1053 -0
  3. data/lib/starcraft2/character.rb +7 -1
  4. data/lib/starcraft2/client.rb +33 -19
  5. data/lib/starcraft2/loader.rb +4 -0
  6. data/lib/starcraft2/profile.rb +5 -1
  7. data/lib/starcraft2/profile/achievement_item.rb +3 -3
  8. data/lib/starcraft2/profile/achievements.rb +2 -2
  9. data/lib/starcraft2/profile/campaign.rb +2 -2
  10. data/lib/starcraft2/profile/career.rb +2 -2
  11. data/lib/starcraft2/profile/detailed_season.rb +17 -0
  12. data/lib/starcraft2/profile/ladder.rb +17 -0
  13. data/lib/starcraft2/profile/ladders.rb +11 -0
  14. data/lib/starcraft2/profile/match.rb +1 -1
  15. data/lib/starcraft2/profile/non_rank.rb +18 -0
  16. data/lib/starcraft2/profile/points.rb +1 -1
  17. data/lib/starcraft2/profile/season.rb +1 -1
  18. data/lib/starcraft2/profile/stats.rb +2 -2
  19. data/spec/starcraft2/achievement_spec.rb +42 -45
  20. data/spec/starcraft2/character_spec.rb +37 -19
  21. data/spec/starcraft2/client_spec.rb +2 -4
  22. data/spec/starcraft2/icon_spec.rb +7 -22
  23. data/spec/starcraft2/member_spec.rb +24 -54
  24. data/spec/starcraft2/profile/achievement_item_spec.rb +48 -0
  25. data/spec/starcraft2/profile/achievements_spec.rb +36 -27
  26. data/spec/starcraft2/profile/campaign_spec.rb +8 -7
  27. data/spec/starcraft2/profile/career_spec.rb +30 -47
  28. data/spec/starcraft2/profile/detailed_season_spec.rb +98 -0
  29. data/spec/starcraft2/profile/ladder_spec.rb +63 -0
  30. data/spec/starcraft2/profile/ladders_spec.rb +197 -0
  31. data/spec/starcraft2/profile/match_spec.rb +41 -22
  32. data/spec/starcraft2/profile/non_rank_spec.rb +48 -0
  33. data/spec/starcraft2/profile/points_spec.rb +22 -0
  34. data/spec/starcraft2/profile/rewards_spec.rb +17 -11
  35. data/spec/starcraft2/profile/season_spec.rb +33 -23
  36. data/spec/starcraft2/profile/stats_spec.rb +49 -0
  37. data/spec/starcraft2/profile/swarm_levels_spec.rb +29 -16
  38. data/spec/starcraft2/profile/swarm_race_spec.rb +25 -0
  39. data/spec/starcraft2/profile_spec.rb +80 -73
  40. data/spec/starcraft2/reward_spec.rb +22 -31
  41. data/spec/starcraft2/utils_spec.rb +30 -0
  42. data/starcraft2.gemspec +1 -1
  43. metadata +15 -2
@@ -8,12 +8,10 @@ describe Starcraft2::Client do
8
8
  end
9
9
 
10
10
  context 'url constants' do
11
- it 'should store the achievements url' do
11
+ it 'should store the key endpoint paths' do
12
12
  Starcraft2::Client::ACHIEVEMENTS_PATH.should == '/api/sc2/data/achievements'
13
- end
14
-
15
- it 'should store the rewards url' do
16
13
  Starcraft2::Client::REWARDS_PATH.should == '/api/sc2/data/rewards'
14
+ Starcraft2::Client::LADDER_PATH.should == '/api/sc2/ladder/'
17
15
  end
18
16
  end
19
17
 
@@ -5,37 +5,22 @@ describe Starcraft2::Icon do
5
5
  let(:icon) { Starcraft2::Icon.new(@options) }
6
6
 
7
7
  before do
8
- @options = {}
8
+ @options = {'x' => 5, 'y' => 6, 'w' => 7, 'h' => 8, 'offset' => 0, 'url' => 'https://example.com'}
9
9
  end
10
10
 
11
- it 'should store x' do
12
- @options = {:x => 5}
11
+ it 'should store attributes as underscored' do
13
12
  icon.x.should == 5
14
- end
15
-
16
- it 'should store y' do
17
- @options = {:y => 6}
18
13
  icon.y.should == 6
19
- end
20
-
21
- it 'should store w' do
22
- @options = {:w => 7}
23
14
  icon.w.should == 7
24
- end
25
-
26
- it 'should store h' do
27
- @options = {:h => 8}
28
15
  icon.h.should == 8
29
- end
30
-
31
- it 'should store the offset' do
32
- @options = {:offset => 0}
33
16
  icon.offset.should == 0
17
+ icon.url.should == 'https://example.com'
34
18
  end
35
19
 
36
- it 'should store the url' do
37
- @options = {:url => 'https://example.com'}
38
- icon.url.should == 'https://example.com'
20
+ it 'should use Stracraft2::Utils.load to populate the model' do
21
+ Starcraft2::Utils.should_receive(:load).with(anything, @options)
22
+
23
+ icon
39
24
  end
40
25
  end
41
26
  end
@@ -3,79 +3,49 @@ require 'spec_helper'
3
3
  describe Starcraft2::Member do
4
4
  describe '.initialize' do
5
5
  let(:member) { Starcraft2::Member.new(@options) }
6
- let(:character) { {
7
- 'id' => 333319,
8
- 'realm' => 1,
9
- 'displayName' => 'NajM',
10
- 'clanName' => '',
11
- 'clanTag' => '',
12
- 'profilePath' => '/profile/333319/1/NajM/'
13
- } }
14
6
 
15
7
  before do
16
- @options = {}
17
- end
18
-
19
- it 'should store the character' do
20
- @options = {:character => character}
8
+ @options = {
9
+ 'character' => {
10
+ 'id' => 333319,
11
+ 'realm' => 1,
12
+ 'displayName' => 'NajM',
13
+ 'clanName' => '',
14
+ 'clanTag' => '',
15
+ 'profilePath' => '/profile/333319/1/NajM/'
16
+ },
17
+ 'joinTimestamp' => 123456,
18
+ 'points' => 1234,
19
+ 'wins' => 123,
20
+ 'losses' => 12,
21
+ 'highestRank' => 1,
22
+ 'previousRank' => 5,
23
+ 'favoriteRaceP1' => 'Protoss',
24
+ 'favoriteRaceP2' => 'Protoss',
25
+ 'favoriteRaceP3' => 'Protoss',
26
+ 'favoriteRaceP4' => 'Protoss'
27
+ }
28
+ end
29
+
30
+ it 'should store attributes as underscored' do
21
31
  member.character.class.should == Starcraft2::Character
22
-
23
32
  member.character.id.should == 333319
24
33
  member.character.realm.should == 1
25
34
  member.character.display_name.should == 'NajM'
26
35
  member.character.clan_name.should == ''
27
36
  member.character.clan_tag.should == ''
28
37
  member.character.profile_path.should == '/profile/333319/1/NajM/'
29
- end
30
38
 
31
- it 'should store the join timestamp' do
32
- @options = {:join_timestamp => 123456}
33
39
  member.join_timestamp.should == 123456
34
- end
35
-
36
- it 'should store the points' do
37
- @options = {:points => 1234}
38
40
  member.points.should == 1234
39
- end
40
-
41
- it 'should store the wins' do
42
- @options = {:wins => 123}
43
41
  member.wins.should == 123
44
- end
45
-
46
- it 'should store the losses' do
47
- @options = {:losses => 12}
48
42
  member.losses.should == 12
49
- end
50
-
51
- it 'should store the highest rank' do
52
- @options = {:highest_rank => 1}
53
43
  member.highest_rank.should == 1
54
- end
55
-
56
- it 'should store the previous rank' do
57
- @options = {:previous_rank => 5}
58
44
  member.previous_rank.should == 5
59
- end
60
-
61
- it 'should store the favorite race for player 1' do
62
- @options = {:favorite_race_p1 => 'Protoss'}
63
45
  member.favorite_race_p1.should == 'Protoss'
64
- end
65
-
66
- it 'should store the favorite race for player 2' do
67
- @options = {:favorite_race_p2 => 'Protoss'}
68
46
  member.favorite_race_p2.should == 'Protoss'
69
- end
70
-
71
- it 'should store the favorite race for player 3' do
72
- @options = {:favorite_race_p3 => 'Protoss'}
73
47
  member.favorite_race_p3.should == 'Protoss'
74
- end
75
-
76
- it 'should store the favorite race for player 4' do
77
- @options = {:favorite_race_p4 => 'Protoss'}
78
48
  member.favorite_race_p4.should == 'Protoss'
79
49
  end
80
50
  end
81
- end
51
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Starcraft2::Profile::AchievementItem do
4
+ describe '.initialize' do
5
+ let(:achievement_item) { Starcraft2::Profile::AchievementItem.new(@options) }
6
+
7
+ before do
8
+ @options = {'achievementId' => 1, 'completionDate' => 13333333}
9
+ end
10
+
11
+ it 'should store attributes as underscored' do
12
+ achievement_item.achievement_id.should == 1
13
+ achievement_item.completion_date.should == 13333333
14
+ end
15
+
16
+ it 'should use Stracraft2::Utils.load to populate the model' do
17
+ Starcraft2::Utils.should_receive(:load).with(anything, @options)
18
+
19
+ achievement_item
20
+ end
21
+ end
22
+
23
+ describe '#build' do
24
+ let(:achievement_items) { Starcraft2::Profile::AchievementItem.build(@items) }
25
+
26
+ before do
27
+ @items = [
28
+ {'achievementId' => 1},
29
+ {'achievementId' => 2}
30
+ ]
31
+ end
32
+
33
+ it 'should build multiple achievement items' do
34
+ achievement_items.class.should == Array
35
+ achievement_items.each do |ai|
36
+ ai.class.should == Starcraft2::Profile::AchievementItem
37
+ end
38
+ end
39
+
40
+ it 'should build items using new' do
41
+ @items.each do |i|
42
+ Starcraft2::Profile::AchievementItem.should_receive(:new).with(i)
43
+ end
44
+
45
+ achievement_items
46
+ end
47
+ end
48
+ end
@@ -1,35 +1,44 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Starcraft2::Profile::Achievements do
4
- let(:achievements) { Starcraft2::Profile::Achievements.new(@options) }
4
+ describe '.initialize' do
5
+ let(:achievements) { Starcraft2::Profile::Achievements.new(@options) }
5
6
 
6
- before do
7
- @options = {}
8
- end
9
-
10
- it 'should store points' do
11
- @options = {:points => {
12
- :total_points => 3420,
13
- :categoryPoints => {
14
- "4325382" => 0,
15
- "4325380" => 80,
16
- "4325408" => 0,
17
- "4325379" => 1560,
18
- "4325410" => 1280,
19
- "4325377" => 500
7
+ before do
8
+ @options = {
9
+ 'points' => {
10
+ 'totalPoints' => 3420,
11
+ 'categoryPoints' => {
12
+ '4325382' => 0,
13
+ '4325380' => 80
14
+ }
15
+ },
16
+ 'achievements' => [
17
+ {
18
+ 'achievementId' => 91475035553845,
19
+ 'completionDate' => 1365790265
20
+ }
21
+ ]
20
22
  }
21
- }}
22
- achievements.points.total_points.should == 3420
23
- end
23
+ end
24
+
25
+ it 'should store attributes as underscored' do
26
+ achievements.points.class.should == Starcraft2::Profile::Points
27
+ achievements.points.total_points.should == 3420
28
+ achievements.points.category_points.should == @options['points']['categoryPoints']
29
+
30
+ achievements.achievements.class.should == Array
31
+
32
+ achievement_item = achievements.achievements.first
33
+ achievement_item.class.should == Starcraft2::Profile::AchievementItem
34
+ achievement_item.achievement_id.should == 91475035553845
35
+ achievement_item.completion_date.should == 1365790265
36
+ end
24
37
 
25
- it 'should store achievement_items' do
26
- @options = {:achievements => [{ :achievement_id => 91475035553845, :completion_date => 1365790265},
27
- { :achievement_id => 91475320768475, :completion_date => 1365392587},
28
- { :achievement_id => 91475320768585, :completion_date => 1364634012}]}
38
+ it 'should use Stracraft2::Utils.load to populate the model' do
39
+ Starcraft2::Utils.should_receive(:load).with(anything, @options, {:points => Starcraft2::Profile::Points}, {:achievements => Starcraft2::Profile::AchievementItem})
29
40
 
30
- achievements.achievements.class.should == Array
31
- achievements.achievements.first.class.should == Starcraft2::Profile::AchievementItem
32
- achievements.achievements.first.achievement_id.should == 91475035553845
33
- achievements.achievements.first.completion_date.should == 1365790265
41
+ achievements
42
+ end
34
43
  end
35
- end
44
+ end
@@ -4,18 +4,19 @@ describe Starcraft2::Profile::Campaign do
4
4
  let(:campaign) { Starcraft2::Profile::Campaign.new(@options) }
5
5
 
6
6
  before do
7
- @options = {}
7
+ @options = {'wol' => 'BRUTAL', 'hots' => 'BRUTAL'}
8
8
  end
9
9
 
10
10
  describe '.initialize' do
11
- it 'should store wol' do
12
- @options = {:wol => 'BRUTAL'}
11
+ it 'should store attributes as underscored' do
13
12
  campaign.wol.should == 'BRUTAL'
13
+ campaign.hots.should == 'BRUTAL'
14
14
  end
15
15
 
16
- it 'should store hots' do
17
- @options = {:hots => 'BRUTAL'}
18
- campaign.hots.should == 'BRUTAL'
16
+ it 'should use Stracraft2::Utils.load to populate the model' do
17
+ Starcraft2::Utils.should_receive(:load).with(anything, @options)
18
+
19
+ campaign
19
20
  end
20
21
  end
21
- end
22
+ end
@@ -1,54 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Starcraft2::Profile::Career do
4
- let(:profile) { Starcraft2::Profile::Career.new(@options) }
4
+ let(:career) { Starcraft2::Profile::Career.new(@options) }
5
5
 
6
6
  before do
7
- @options = {}
8
- end
9
-
10
- it 'should store the primary_race' do
11
- @options = {:primary_race => 'PROTOSS'}
12
- profile.primary_race.should == 'PROTOSS'
13
- end
14
-
15
- it 'should store the league' do
16
- @options = {:league => 'GAMMA'}
17
- profile.league.should == 'GAMMA'
18
- end
19
-
20
- it 'should store the terran_wins' do
21
- @options = {:terran_wins => 121}
22
- profile.terran_wins.should == 121
23
- end
24
-
25
- it 'should store the protoss_wins' do
26
- @options = {:protoss_wins => 123}
27
- profile.protoss_wins.should == 123
28
- end
29
-
30
- it 'should store the zerg_wins' do
31
- @options = {:zerg_wins => 82}
32
- profile.zerg_wins.should == 82
33
- end
34
-
35
- it 'should store the highest_1v1_rank' do
36
- @options = {:highest1v1_rank => 'GOLD'}
37
- profile.highest1v1_rank.should == 'GOLD'
38
- end
39
-
40
- it 'should store the highest_team_rank' do
41
- @options = {:highest_team_rank => 'MASTER'}
42
- profile.highest_team_rank.should =='MASTER'
43
- end
44
-
45
- it 'should store the season_total_games' do
46
- @options = {:season_total_games => 596}
47
- profile.season_total_games.should == 596
48
- end
49
-
50
- it 'should store the career_total_games' do
51
- @options = {:career_total_games => 1293}
52
- profile.career_total_games.should == 1293
7
+ @options = {
8
+ 'primaryRace' => 'PROTOSS',
9
+ 'league' => 'GAMMA',
10
+ 'terranWins' => 121,
11
+ 'protossWins' => 123,
12
+ 'zergWins' => 82,
13
+ 'highest1v1Rank' => 'GOLD',
14
+ 'highestTeamRank' => 'MASTER',
15
+ 'seasonTotalGames' => 596,
16
+ 'careerTotalGames' => 1293
17
+ }
18
+ end
19
+
20
+ it 'should store attributes as underscored' do
21
+ career.primary_race.should == 'PROTOSS'
22
+ career.league.should == 'GAMMA'
23
+ career.terran_wins.should == 121
24
+ career.protoss_wins.should == 123
25
+ career.zerg_wins.should == 82
26
+ career.highest1v1_rank.should == 'GOLD'
27
+ career.highest_team_rank.should =='MASTER'
28
+ career.season_total_games.should == 596
29
+ career.career_total_games.should == 1293
30
+ end
31
+
32
+ it 'should use Stracraft2::Utils.load to populate the model' do
33
+ Starcraft2::Utils.should_receive(:load).with(anything, @options)
34
+
35
+ career
53
36
  end
54
37
  end
@@ -0,0 +1,98 @@
1
+ require 'spec_helper'
2
+
3
+ describe Starcraft2::Profile::DetailedSeason do
4
+ describe '.initialize' do
5
+ let(:detailed_season) { Starcraft2::Profile::DetailedSeason.new(@options) }
6
+
7
+ it 'should store attributes as underscored' do
8
+ @options = {
9
+ 'ladder' => [],
10
+ 'characters' => [
11
+ {
12
+ 'id' => 3113795,
13
+ 'realm' => 1,
14
+ 'displayName' => 'Smix',
15
+ 'clanName' => '',
16
+ 'clanTag' => '',
17
+ 'profilePath' => '/profile/3113795/1/Smix/'
18
+ }, {
19
+ 'id' => 1283116,
20
+ 'realm' => 1,
21
+ 'displayName' => 'megumixbear',
22
+ 'clanName' => '',
23
+ 'clanTag' => '',
24
+ 'profilePath' => '/profile/1283116/1/megumixbear/'
25
+ }
26
+ ],
27
+ 'nonRanked' => []
28
+ }
29
+
30
+ detailed_season.ladder.should == []
31
+
32
+ detailed_season.characters.class.should == Array
33
+ detailed_season.characters.each do |c|
34
+ c.class.should == Starcraft2::Character
35
+ end
36
+
37
+ c1 = detailed_season.characters.first
38
+ c1.id.should == 3113795
39
+ c1.realm.should == 1
40
+ c1.display_name.should == 'Smix'
41
+ c1.clan_name.should == ''
42
+ c1.clan_tag.should == ''
43
+ c1.profile_path.should == '/profile/3113795/1/Smix/'
44
+
45
+ c2 = detailed_season.characters.last
46
+ c2.id.should == 1283116
47
+ c2.realm.should == 1
48
+ c2.display_name.should == 'megumixbear'
49
+ c2.clan_name.should == ''
50
+ c2.clan_tag.should == ''
51
+ c2.profile_path.should == '/profile/1283116/1/megumixbear/'
52
+
53
+ detailed_season.non_ranked.should == []
54
+ end
55
+
56
+ it 'should use Stracraft2::Utils.load to populate the model' do
57
+ Starcraft2::Utils.should_receive(:load).with(anything, @options, {}, {:ladder => Starcraft2::Profile::Ladder, :characters => Starcraft2::Character, :non_ranked => Starcraft2::Profile::NonRank})
58
+
59
+ detailed_season
60
+ end
61
+ end
62
+
63
+ describe '#build' do
64
+ let(:detailed_seasons) { Starcraft2::Profile::DetailedSeason.build(@items) }
65
+
66
+ before do
67
+ @items = [
68
+ {
69
+ 'characters' => [
70
+ {'id' => 3113795},
71
+ {'id' => 1283116}
72
+ ]
73
+ },
74
+ {
75
+ 'characters' => [
76
+ {'id' => 3113796},
77
+ {'id' => 1283117}
78
+ ]
79
+ }
80
+ ]
81
+ end
82
+
83
+ it 'should build multiple detailed seasons' do
84
+ detailed_seasons.class.should == Array
85
+ detailed_seasons.each do |ds|
86
+ ds.class.should == Starcraft2::Profile::DetailedSeason
87
+ end
88
+ end
89
+
90
+ it 'should build items using new' do
91
+ @items.each do |i|
92
+ Starcraft2::Profile::DetailedSeason.should_receive(:new).with(i)
93
+ end
94
+
95
+ detailed_seasons
96
+ end
97
+ end
98
+ end