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.
@@ -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