starcraft2 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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('sc2', 'loader.rb')
1
+ require File.join('starcraft2', 'loader.rb')
@@ -1,18 +1,16 @@
1
- module SC2
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.build_achievements(raw_data)
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
@@ -0,0 +1,11 @@
1
+ module Starcraft2
2
+ class Character
3
+ attr_accessor :id, :realm, :display_name, :clan_name, :clan_tag, :profile_path
4
+
5
+ def initialize(options = {})
6
+ options.each do |k,v|
7
+ self.send(:"#{k.to_s.underscore}=", v)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,7 +1,8 @@
1
- module SC2
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.build_achievements(achievements_data)
16
+ Achievement.build(achievements_data)
16
17
  end
17
18
 
18
19
  def rewards
19
- Reward.build_rewards(rewards_data)
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,10 @@
1
+ module Starcraft2
2
+ class Ladder
3
+ def self.build(raw_data)
4
+ data = JSON.parse(raw_data)
5
+ data['ladderMembers'].map do |member|
6
+ Member.new(member)
7
+ end
8
+ end
9
+ end
10
+ 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 SC2
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.build_rewards(raw_data)
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/vcr_cassettes'
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