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