starcraft2 0.0.3 → 0.0.4
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/.travis.yml +0 -1
- data/README.md +4 -1
- data/fixtures/cassettes/achievements.yml +13340 -0
- data/fixtures/cassettes/grandmaster.yml +6406 -0
- data/fixtures/cassettes/ladder_148200.yml +6374 -0
- data/fixtures/cassettes/rewards.yml +4192 -0
- data/fixtures/vcr_cassettes/grandmaster.yml +3221 -0
- data/fixtures/vcr_cassettes/previous_grandmaster.yml +39 -0
- data/lib/starcraft2.rb +1 -1
- data/lib/{sc2 → starcraft2}/achievement.rb +3 -5
- data/lib/starcraft2/character.rb +11 -0
- data/lib/{sc2 → starcraft2}/client.rb +24 -3
- data/lib/starcraft2/ladder.rb +10 -0
- data/lib/starcraft2/loader.rb +9 -0
- data/lib/starcraft2/member.rb +13 -0
- data/lib/{sc2 → starcraft2}/reward.rb +3 -5
- data/spec/spec_helper.rb +5 -2
- data/spec/starcraft2/achievement_spec.rb +71 -0
- data/spec/starcraft2/character_spec.rb +41 -0
- data/spec/starcraft2/client_spec.rb +114 -0
- data/spec/starcraft2/ladder_spec.rb +28 -0
- data/spec/starcraft2/member_spec.rb +81 -0
- data/spec/starcraft2/reward_spec.rb +59 -0
- data/starcraft2.gemspec +3 -1
- metadata +55 -13
- data/fixtures/vcr_cassettes/achievements.yml +0 -14844
- data/fixtures/vcr_cassettes/rewards.yml +0 -7692
- data/lib/sc2/loader.rb +0 -5
- data/spec/sc2/achievement_spec.rb +0 -58
- data/spec/sc2/client_spec.rb +0 -75
- data/spec/sc2/reward_spec.rb +0 -48
@@ -0,0 +1,39 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://us.battle.net/api/sc2/ladder/grandmaster/last
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Date:
|
16
|
+
- Wed, 14 Aug 2013 03:31:06 GMT
|
17
|
+
Server:
|
18
|
+
- Apache
|
19
|
+
X-Frame-Options:
|
20
|
+
- SAMEORIGIN
|
21
|
+
Content-Language:
|
22
|
+
- en-US
|
23
|
+
Vary:
|
24
|
+
- Accept-Encoding
|
25
|
+
Transfer-Encoding:
|
26
|
+
- chunked
|
27
|
+
Content-Type:
|
28
|
+
- application/json;charset=UTF-8
|
29
|
+
body:
|
30
|
+
encoding: UTF-8
|
31
|
+
string: |-
|
32
|
+
{
|
33
|
+
"status" : "nok",
|
34
|
+
"code" : 500,
|
35
|
+
"message" : "Internal Server Error"
|
36
|
+
}
|
37
|
+
http_version:
|
38
|
+
recorded_at: Wed, 14 Aug 2013 03:31:05 GMT
|
39
|
+
recorded_with: VCR 2.5.0
|
data/lib/starcraft2.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require File.join('
|
1
|
+
require File.join('starcraft2', 'loader.rb')
|
@@ -1,18 +1,16 @@
|
|
1
|
-
module
|
1
|
+
module Starcraft2
|
2
2
|
class Achievement
|
3
3
|
attr_accessor :title, :description, :achievement_id, :category_id, :points, :icon
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
6
|
options.each do |k,v|
|
7
|
-
self.send(:"#{k}=", v)
|
7
|
+
self.send(:"#{k.to_s.underscore}=", v)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.
|
11
|
+
def self.build(raw_data)
|
12
12
|
data = JSON.parse(raw_data)
|
13
13
|
data['achievements'].map do |achievement|
|
14
|
-
achievement['achievement_id'] = achievement.delete('achievementId')
|
15
|
-
achievement['category_id'] = achievement.delete('categoryId')
|
16
14
|
new(achievement)
|
17
15
|
end
|
18
16
|
end
|
@@ -1,7 +1,8 @@
|
|
1
|
-
module
|
1
|
+
module Starcraft2
|
2
2
|
class Client
|
3
3
|
ACHIEVEMENTS_PATH = "/api/sc2/data/achievements"
|
4
4
|
REWARDS_PATH = "/api/sc2/data/rewards"
|
5
|
+
LADDER_PATH = "/api/sc2/ladder/"
|
5
6
|
|
6
7
|
attr_accessor :locale, :host
|
7
8
|
|
@@ -12,11 +13,23 @@ module SC2
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def achievements
|
15
|
-
Achievement.
|
16
|
+
Achievement.build(achievements_data)
|
16
17
|
end
|
17
18
|
|
18
19
|
def rewards
|
19
|
-
Reward.
|
20
|
+
Reward.build(rewards_data)
|
21
|
+
end
|
22
|
+
|
23
|
+
def ladder(id)
|
24
|
+
Ladder.build(ladder_data(id))
|
25
|
+
end
|
26
|
+
|
27
|
+
def grandmaster_ladder
|
28
|
+
ladder('grandmaster')
|
29
|
+
end
|
30
|
+
|
31
|
+
def previous_grandmaster_ladder
|
32
|
+
ladder('grandmaster/last')
|
20
33
|
end
|
21
34
|
|
22
35
|
private
|
@@ -37,6 +50,14 @@ module SC2
|
|
37
50
|
"http://" + host + REWARDS_PATH + locale_param
|
38
51
|
end
|
39
52
|
|
53
|
+
def ladder_data(id)
|
54
|
+
HTTParty.get(ladder_url(id)).body
|
55
|
+
end
|
56
|
+
|
57
|
+
def ladder_url(id)
|
58
|
+
"http://" + host + LADDER_PATH + id.to_s + locale_param
|
59
|
+
end
|
60
|
+
|
40
61
|
def locale_param
|
41
62
|
locale.nil? ? '' : "?locale=#{locale}"
|
42
63
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'json'
|
3
|
+
require File.join('active_support', 'inflector')
|
4
|
+
require File.join('starcraft2', 'client')
|
5
|
+
require File.join('starcraft2', 'achievement')
|
6
|
+
require File.join('starcraft2', 'reward')
|
7
|
+
require File.join('starcraft2', 'ladder')
|
8
|
+
require File.join('starcraft2', 'member')
|
9
|
+
require File.join('starcraft2', 'character')
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Starcraft2
|
2
|
+
class Member
|
3
|
+
attr_accessor :character, :join_timestamp, :points, :wins,
|
4
|
+
:losses, :highest_rank, :previous_rank, :favorite_race_p1, :favorite_race_p2, :favorite_race_p3, :favorite_race_p4
|
5
|
+
|
6
|
+
def initialize(options)
|
7
|
+
options.each do |k,v|
|
8
|
+
v = Starcraft2::Character.new(v) if k.to_sym == :character
|
9
|
+
self.send(:"#{k.to_s.underscore}=", v)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,20 +1,18 @@
|
|
1
|
-
module
|
1
|
+
module Starcraft2
|
2
2
|
class Reward
|
3
3
|
attr_accessor :title, :id, :icon, :achievement_id
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
6
|
options.each do |k,v|
|
7
|
-
self.send(:"#{k}=", v)
|
7
|
+
self.send(:"#{k.to_s.underscore}=", v)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.
|
11
|
+
def self.build(raw_data)
|
12
12
|
data = JSON.parse(raw_data)
|
13
13
|
data['portraits'].map do |reward|
|
14
|
-
reward['achievement_id'] = reward.delete('achievementId')
|
15
14
|
new(reward)
|
16
15
|
end
|
17
16
|
end
|
18
|
-
|
19
17
|
end
|
20
18
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,9 +2,12 @@ require File.join('bundler', 'setup')
|
|
2
2
|
require 'rspec'
|
3
3
|
require 'vcr'
|
4
4
|
require 'starcraft2'
|
5
|
+
require 'simplecov'
|
6
|
+
|
7
|
+
SimpleCov.start
|
5
8
|
|
6
9
|
VCR.configure do |c|
|
7
|
-
c.cassette_library_dir = 'fixtures/
|
10
|
+
c.cassette_library_dir = 'fixtures/cassettes'
|
8
11
|
c.hook_into :webmock
|
9
|
-
c.default_cassette_options = { :record => :new_episodes, :erb => true }
|
12
|
+
c.default_cassette_options = { :record => :new_episodes, :erb => true, :serialize_with => :yaml }
|
10
13
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Starcraft2::Achievement do
|
4
|
+
describe '#build' do
|
5
|
+
let(:achievements) { Starcraft2::Achievement.build(@raw_achievement_data)}
|
6
|
+
|
7
|
+
before do
|
8
|
+
VCR.use_cassette('achievements') do
|
9
|
+
@raw_achievement_data = HTTParty.get('http://us.battle.net/api/sc2/data/achievements').body
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should build an array of achievements' do
|
14
|
+
achievements.class.should == Array
|
15
|
+
achievements.each do |a|
|
16
|
+
a.class.should == Starcraft2::Achievement
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.initialize' do
|
22
|
+
let(:achievement) {Starcraft2::Achievement.new(@options)}
|
23
|
+
|
24
|
+
before do
|
25
|
+
@options = {}
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should import the first achievement' do
|
29
|
+
VCR.use_cassette('achievements') do
|
30
|
+
@achievement = Starcraft2::Achievement.build(HTTParty.get('http://us.battle.net/api/sc2/data/achievements').body).first
|
31
|
+
end
|
32
|
+
|
33
|
+
@achievement.title.should == "FFA Destroyer"
|
34
|
+
@achievement.description.should == "Win a Free-For-All Unranked game as each race option."
|
35
|
+
@achievement.achievement_id.should == 91475320766632
|
36
|
+
@achievement.category_id.should == 4325391
|
37
|
+
@achievement.points.should == 10
|
38
|
+
@achievement.icon.should == {"x" => 0, "y" => -375, "w" => 75, "h" => 75, "offset" => 45, "url" => "http://media.blizzard.com/sc2/achievements/5-75.jpg"}
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should store the title' do
|
42
|
+
@options = {:title => 'Test Title'}
|
43
|
+
achievement.title.should == 'Test Title'
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should store the description' do
|
47
|
+
@options = {:description => 'Description'}
|
48
|
+
achievement.description.should == 'Description'
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should store the achievement id' do
|
52
|
+
@options = {:achievement_id => 5}
|
53
|
+
achievement.achievement_id.should == 5
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should store the category id' do
|
57
|
+
@options = {:category_id => 10}
|
58
|
+
achievement.category_id.should == 10
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should store the points' do
|
62
|
+
@options = {:points => 5}
|
63
|
+
achievement.points.should == 5
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should store the icon data' do
|
67
|
+
@options = {:icon => {"x" => 1, "y" => 2, "w" => 3, "h" => 4, "offset" => 0, "url" => 'http://example.com'}}
|
68
|
+
achievement.icon.should == {"x" => 1, "y" => 2, "w" => 3, "h" => 4, "offset" => 0, "url" => 'http://example.com'}
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Starcraft2::Character do
|
4
|
+
describe '.initialize' do
|
5
|
+
let(:character) { Starcraft2::Character.new(@options) }
|
6
|
+
|
7
|
+
before do
|
8
|
+
@options = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should store the id' do
|
12
|
+
@options = {:id => 5}
|
13
|
+
character.id.should == 5
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should store the realm' do
|
17
|
+
@options = {:realm => "somewhere"}
|
18
|
+
character.realm.should == "somewhere"
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should store the display_name' do
|
22
|
+
@options = {:display_name => "display me"}
|
23
|
+
character.display_name.should == "display me"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should store the clan_name" do
|
27
|
+
@options = {:clan_name => "clan name"}
|
28
|
+
character.clan_name.should == "clan name"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should store the clan_tag" do
|
32
|
+
@options = {:clan_tag => "clan tag"}
|
33
|
+
character.clan_tag.should == "clan tag"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should store the profile_path" do
|
37
|
+
@options = {:profile_path => "/some/path"}
|
38
|
+
character.profile_path.should == "/some/path"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Starcraft2::Client do
|
4
|
+
let(:client) { Starcraft2::Client.new(@options)}
|
5
|
+
|
6
|
+
before do
|
7
|
+
@options = {:host => 'us.battle.net'}
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'url constants' do
|
11
|
+
it 'should store the achievements url' do
|
12
|
+
Starcraft2::Client::ACHIEVEMENTS_PATH.should == '/api/sc2/data/achievements'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should store the rewards url' do
|
16
|
+
Starcraft2::Client::REWARDS_PATH.should == '/api/sc2/data/rewards'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".initialize" do
|
21
|
+
it 'should store the locale' do
|
22
|
+
@options = { :locale => 'en_US' }
|
23
|
+
client.locale.should == 'en_US'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should store the host' do
|
27
|
+
@options = { :host => 'someserver.com'}
|
28
|
+
client.host.should == 'someserver.com'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe ".achievements" do
|
33
|
+
it 'should return an array of achievements' do
|
34
|
+
VCR.use_cassette('achievements') do
|
35
|
+
client.achievements.class.should == Array
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should return items of type Starcraft2::Achievement' do
|
40
|
+
VCR.use_cassette('achievements') do
|
41
|
+
client.achievements.first.class.should == Starcraft2::Achievement
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return achievements in the correct locale" do
|
46
|
+
@options.merge!({:locale => "pt_BR"})
|
47
|
+
|
48
|
+
VCR.use_cassette('achievements') do
|
49
|
+
client.achievements.first.title.should == "TCT Destruidor"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".rewards" do
|
55
|
+
it 'should return an array of rewards' do
|
56
|
+
VCR.use_cassette('rewards') do
|
57
|
+
client.rewards.class.should == Array
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should return items of type Starcraft2::Reward' do
|
62
|
+
VCR.use_cassette('rewards') do
|
63
|
+
client.rewards.first.class.should == Starcraft2::Reward
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return rewards in the correct locale" do
|
68
|
+
@options.merge!({:locale => "pt_BR"})
|
69
|
+
|
70
|
+
VCR.use_cassette('rewards') do
|
71
|
+
client.rewards.first.title.should == "Kachinsky"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '.grandmaster_ladder' do
|
77
|
+
let(:ladder) do
|
78
|
+
VCR.use_cassette('grandmaster') do
|
79
|
+
client.grandmaster_ladder
|
80
|
+
end
|
81
|
+
end
|
82
|
+
let(:member) { ladder.first }
|
83
|
+
|
84
|
+
it 'should return an array of members' do
|
85
|
+
ladder.class.should == Array
|
86
|
+
ladder.each do |m|
|
87
|
+
m.class.should == Starcraft2::Member
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should build characters within the members' do
|
92
|
+
ladder.each do |m|
|
93
|
+
m.character.class.should == Starcraft2::Character
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should return the first grandmaster' do
|
98
|
+
member.character.id == 2778732
|
99
|
+
member.character.realm == 1
|
100
|
+
member.character.display_name == 'lIlIlIlIlIlI'
|
101
|
+
member.character.clan_name == ""
|
102
|
+
member.character.clan_tag == ""
|
103
|
+
member.character.profile_path == "/profile/2778732/1/lIlIlIlIlIlI/"
|
104
|
+
|
105
|
+
member.points.should == 2362.0
|
106
|
+
member.wins.should == 250
|
107
|
+
member.losses.should == 101
|
108
|
+
member.join_timestamp.should == 1373859935
|
109
|
+
member.highest_rank.should == 1
|
110
|
+
member.previous_rank.should == 1
|
111
|
+
member.favorite_race_p1.should == "PROTOSS"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Starcraft2::Ladder do
|
4
|
+
describe '#build' do
|
5
|
+
let(:id) { 148200 }
|
6
|
+
let(:host) { 'us.battle.net' }
|
7
|
+
let(:ladder) { Starcraft2::Ladder.build(@raw_ladder_data) }
|
8
|
+
|
9
|
+
before do
|
10
|
+
VCR.use_cassette("ladder_#{id}") do
|
11
|
+
@raw_ladder_data = HTTParty.get("http://us.battle.net/api/sc2/ladder/#{id}").body
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should build an array of members' do
|
16
|
+
ladder.class.should == Array
|
17
|
+
ladder.each do |member|
|
18
|
+
member.class.should == Starcraft2::Member
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should build characters within the members' do
|
23
|
+
ladder.each do |member|
|
24
|
+
member.character.class.should == Starcraft2::Character
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|