d3api 0.0.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +7 -7
- data/d3api.gemspec +2 -0
- data/lib/d3api.rb +12 -0
- data/lib/d3api/artisan.rb +14 -4
- data/lib/d3api/base_model.rb +3 -17
- data/lib/d3api/career.rb +32 -2
- data/lib/d3api/connection.rb +0 -1
- data/lib/d3api/equipped_item.rb +23 -0
- data/lib/d3api/equipped_item_set.rb +20 -0
- data/lib/d3api/follower.rb +13 -3
- data/lib/d3api/hero.rb +40 -1
- data/lib/d3api/hero_follower.rb +22 -0
- data/lib/d3api/hero_follower_set.rb +20 -0
- data/lib/d3api/hero_set.rb +19 -0
- data/lib/d3api/hero_skills.rb +19 -0
- data/lib/d3api/item.rb +33 -2
- data/lib/d3api/skill.rb +38 -0
- data/lib/d3api/version.rb +1 -1
- data/spec/d3api/artisan_spec.rb +11 -21
- data/spec/d3api/career_spec.rb +29 -54
- data/spec/d3api/equipped_item_set_spec.rb +23 -0
- data/spec/d3api/equipped_item_spec.rb +22 -0
- data/spec/d3api/follower_spec.rb +15 -4
- data/spec/d3api/hero_follower_set_spec.rb +41 -0
- data/spec/d3api/hero_follower_spec.rb +44 -0
- data/spec/d3api/hero_set_spec.rb +11 -0
- data/spec/d3api/hero_skills_spec.rb +30 -0
- data/spec/d3api/hero_spec.rb +22 -4
- data/spec/d3api/item_spec.rb +25 -4
- data/spec/d3api/skills_spec.rb +43 -0
- data/spec/spec_helper.rb +3 -0
- metadata +77 -4
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
[![Build
|
2
|
-
Status](https://travis-ci.org/phereford/d3api.png)](https://travis-ci.org/phereford/d3api)
|
2
|
+
Status](https://travis-ci.org/phereford/d3api.png?branch=master)](https://travis-ci.org/phereford/d3api)
|
3
3
|
[![Code
|
4
4
|
Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/phereford/d3api)
|
5
5
|
|
@@ -48,15 +48,16 @@ This will return a Career object with json values. I tried my best to
|
|
48
48
|
implement nice methods to get through the values such as:
|
49
49
|
```
|
50
50
|
@career.heroes #=> returns an array of heroes
|
51
|
-
@career.
|
52
|
-
@
|
51
|
+
@career.last_hero_played #=> returns the id of last hero played
|
52
|
+
@careerlast_updated.
|
53
53
|
@career.artisans #=> returns a hash of your arisan information
|
54
|
-
@career.
|
54
|
+
@career.monster_kills #=> returns an integer
|
55
55
|
```
|
56
56
|
|
57
57
|
There is a ton of data gleaned from the career object. Just look at
|
58
58
|
[Blizzard's Diablo 3 api docs](https://github.com/Blizzard/d3-api-docs)
|
59
|
-
for more information.
|
59
|
+
for more information. You can also look through the respc tests to get a
|
60
|
+
better idea of what the methods are to utilize.
|
60
61
|
|
61
62
|
### Hero
|
62
63
|
|
@@ -70,7 +71,7 @@ To get a user's Diablo 3 hero, you need to know 4 things:
|
|
70
71
|
@hero = D3api::Hero.new :us, 'yojymbu', '1249', '30255685' #=>
|
71
72
|
returns hero object
|
72
73
|
@hero.name #=> Returns name of character
|
73
|
-
@hero.
|
74
|
+
@hero.hero_class #=> Returns class of character
|
74
75
|
@hero.skills #=> returns an array of hashes for active and passive
|
75
76
|
skills
|
76
77
|
@hero.items #=> returns an array of hashes
|
@@ -111,7 +112,6 @@ If you have any comments questions or concerns, please let me know.
|
|
111
112
|
## ToDos
|
112
113
|
1. Implement Authentication per Blizzards protocol (allow 10,000
|
113
114
|
unsigned requests or 50,000 signed requests).
|
114
|
-
2. Rspec tests for api calls.
|
115
115
|
|
116
116
|
## Contributing
|
117
117
|
|
data/d3api.gemspec
CHANGED
data/lib/d3api.rb
CHANGED
@@ -5,7 +5,19 @@ module D3api
|
|
5
5
|
|
6
6
|
autoload :BaseModel, 'd3api/base_model'
|
7
7
|
autoload :Career, 'd3api/career'
|
8
|
+
|
8
9
|
autoload :Hero, 'd3api/hero'
|
10
|
+
autoload :HeroSet, 'd3api/hero_set'
|
11
|
+
|
12
|
+
autoload :EquippedItem, 'd3api/equipped_item'
|
13
|
+
autoload :EquippedItemSet, 'd3api/equipped_item_set'
|
14
|
+
|
15
|
+
autoload :HeroSkills, 'd3api/hero_skills'
|
16
|
+
|
17
|
+
autoload :HeroFollowerSet, 'd3api/hero_follower_set'
|
18
|
+
autoload :HeroFollower, 'd3api/hero_follower'
|
19
|
+
|
20
|
+
autoload :Skill, 'd3api/skill'
|
9
21
|
autoload :Item, 'd3api/item'
|
10
22
|
autoload :Follower, 'd3api/follower'
|
11
23
|
autoload :Artisan, 'd3api/artisan'
|
data/lib/d3api/artisan.rb
CHANGED
@@ -1,15 +1,25 @@
|
|
1
1
|
module D3api
|
2
2
|
class Artisan < BaseModel
|
3
|
-
|
3
|
+
attr_accessor :slug, :name, :portrait, :training
|
4
4
|
|
5
|
-
def initialize(region, artisan_type)
|
5
|
+
def initialize(region=:us, artisan_type)
|
6
6
|
json_response = find(region, artisan_type)
|
7
7
|
|
8
|
-
super json_response
|
8
|
+
values = super json_response
|
9
|
+
|
10
|
+
set_method(values)
|
9
11
|
end
|
10
12
|
|
13
|
+
private
|
11
14
|
def find(region, artisan_type)
|
12
|
-
get(
|
15
|
+
get(region, "data/artisan/#{artisan_type}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_method(values)
|
19
|
+
self.slug = values['slug']
|
20
|
+
self.name = values['name']
|
21
|
+
self.portrait = values['portrait']
|
22
|
+
self.training = nil
|
13
23
|
end
|
14
24
|
end
|
15
25
|
end
|
data/lib/d3api/base_model.rb
CHANGED
@@ -1,23 +1,9 @@
|
|
1
1
|
module D3api
|
2
2
|
class BaseModel
|
3
|
-
|
3
|
+
include D3api::Request
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(value)
|
8
|
-
@value = value
|
9
|
-
parsed_values = JSON.parse(value)
|
10
|
-
fields = parsed_values.keys.inject([]) do |result, element|
|
11
|
-
result << element.to_sym
|
12
|
-
end
|
13
|
-
|
14
|
-
fields.each do |field|
|
15
|
-
field = :heroClass if field == :class
|
16
|
-
|
17
|
-
self.class.send(:define_method, field) do
|
18
|
-
parsed_values[field.to_s]
|
19
|
-
end
|
20
|
-
end
|
5
|
+
def initialize(values)
|
6
|
+
JSON.parse(values)
|
21
7
|
end
|
22
8
|
end
|
23
9
|
end
|
data/lib/d3api/career.rb
CHANGED
@@ -1,15 +1,45 @@
|
|
1
1
|
module D3api
|
2
2
|
class Career < BaseModel
|
3
|
-
|
3
|
+
attr_accessor :last_hero_played, :heroes, :last_updated,
|
4
|
+
:artisans, :hardcore_artisans, :monster_kills,
|
5
|
+
:elite_kills, :hardcore_monster_kills,
|
6
|
+
:barbarian_time_played, :demon_hunter_time_played,
|
7
|
+
:monk_time_played, :witch_doctor_time_played,
|
8
|
+
:wizard_time_played, :fallen_heroes, :battle_tag,
|
9
|
+
:progression, :hardcore_progression
|
4
10
|
|
5
11
|
def initialize(region, battletag_name, battletag_code)
|
6
12
|
json_response = find(region, battletag_name, battletag_code)
|
7
13
|
|
8
|
-
super
|
14
|
+
values = super(json_response)
|
15
|
+
|
16
|
+
set_method(values)
|
17
|
+
|
9
18
|
end
|
10
19
|
|
20
|
+
private
|
11
21
|
def find(region, battletag_name, battletag_code)
|
12
22
|
get(region, "profile/#{battletag_name}-#{battletag_code}/")
|
13
23
|
end
|
24
|
+
|
25
|
+
def set_method(values)
|
26
|
+
self.last_hero_played = values['lastHeroPlayed']
|
27
|
+
self.heroes ||= D3api::HeroSet.new(values['heroes']).hero_set
|
28
|
+
self.last_updated = Time.at(values['lastUpdated'])
|
29
|
+
self.artisans = values['artisans']
|
30
|
+
self.hardcore_artisans = values['hardcoreArtisans']
|
31
|
+
self.monster_kills = values['kills']['monsters']
|
32
|
+
self.elite_kills = values['kills']['elites']
|
33
|
+
self.hardcore_monster_kills = values['kills']['hardcoreMonsters']
|
34
|
+
self.barbarian_time_played = values['timePlayed']['barbarian']
|
35
|
+
self.demon_hunter_time_played = values['timePlayed']['demon-hunter']
|
36
|
+
self.monk_time_played = values['timePlayed']['monk']
|
37
|
+
self.witch_doctor_time_played = values['timePlayed']['witch-doctor']
|
38
|
+
self.wizard_time_played = values['timePlayed']['wizard']
|
39
|
+
self.fallen_heroes = nil
|
40
|
+
self.battle_tag = values['battleTag']
|
41
|
+
self.progression = nil
|
42
|
+
self.hardcore_progression = nil
|
43
|
+
end
|
14
44
|
end
|
15
45
|
end
|
data/lib/d3api/connection.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module D3api
|
2
|
+
class EquippedItem
|
3
|
+
attr_accessor :location, :name, :icon, :display_color,
|
4
|
+
:tooltip_params, :id
|
5
|
+
|
6
|
+
def initialize(array)
|
7
|
+
location = array[0]
|
8
|
+
attributes = array[1]
|
9
|
+
|
10
|
+
set_method(location, attributes)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def set_method(location, attributes)
|
15
|
+
self.location = location
|
16
|
+
self.id = attributes['id']
|
17
|
+
self.name = attributes['name']
|
18
|
+
self.icon = attributes['icon']
|
19
|
+
self.display_color = attributes['displayColor']
|
20
|
+
self.tooltip_params = attributes['tooltipParams']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module D3api
|
2
|
+
class EquippedItemSet
|
3
|
+
attr_accessor :item_set
|
4
|
+
|
5
|
+
def initialize(*array)
|
6
|
+
equipped_items = []
|
7
|
+
|
8
|
+
array[0].each do |item|
|
9
|
+
equipped_items << EquippedItem.new(item)
|
10
|
+
end
|
11
|
+
|
12
|
+
set_method(equipped_items)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def set_method(equipped_items)
|
17
|
+
self.item_set = equipped_items
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/d3api/follower.rb
CHANGED
@@ -1,15 +1,25 @@
|
|
1
1
|
module D3api
|
2
2
|
class Follower < BaseModel
|
3
|
-
|
3
|
+
attr_accessor :slug, :name, :portrait, :skills
|
4
4
|
|
5
5
|
def initialize(region, follower_type)
|
6
6
|
json_response = find(region, follower_type)
|
7
7
|
|
8
|
-
super json_response
|
8
|
+
values = super json_response
|
9
|
+
|
10
|
+
set_method(values)
|
9
11
|
end
|
10
12
|
|
13
|
+
private
|
11
14
|
def find(region, follower_type)
|
12
|
-
get(
|
15
|
+
get(region, "data/follower/#{follower_type}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_method(values)
|
19
|
+
self.slug = values['slug']
|
20
|
+
self.name = values['name']
|
21
|
+
self.portrait = values['portrait']
|
22
|
+
self.skills = nil
|
13
23
|
end
|
14
24
|
end
|
15
25
|
end
|
data/lib/d3api/hero.rb
CHANGED
@@ -1,15 +1,54 @@
|
|
1
1
|
module D3api
|
2
2
|
class Hero < BaseModel
|
3
3
|
include D3api::Request
|
4
|
+
attr_accessor :id, :name, :hero_class, :gender,
|
5
|
+
:level, :hardcore, :last_updated,
|
6
|
+
:items, :active_skills, :passive_skills,
|
7
|
+
:followers
|
4
8
|
|
5
9
|
def initialize(region, battletag_name, battletag_id, hero_id)
|
6
10
|
json_response = find(region, battletag_name, battletag_id, hero_id)
|
7
11
|
|
8
|
-
super json_response
|
12
|
+
values = super json_response
|
13
|
+
|
14
|
+
set_method(values)
|
9
15
|
end
|
10
16
|
|
17
|
+
# stats class
|
18
|
+
# progress class
|
19
|
+
private
|
11
20
|
def find(region, battletag_name, battletag_id, hero_id)
|
12
21
|
get(region, "profile/#{battletag_name}-#{battletag_id}/hero/#{hero_id}")
|
13
22
|
end
|
23
|
+
|
24
|
+
def set_method(values)
|
25
|
+
self.id = values['id']
|
26
|
+
self.name = values['name']
|
27
|
+
self.hero_class = values['class']
|
28
|
+
self.gender = determine_gender(values['gender'])
|
29
|
+
self.level = values['level']
|
30
|
+
self.hardcore = values['hardcore']
|
31
|
+
self.last_updated = Time.at(values['last-updated'])
|
32
|
+
self.items ||= D3api::EquippedItemSet
|
33
|
+
.new(values['items'])
|
34
|
+
.item_set
|
35
|
+
self.active_skills ||= D3api::HeroSkills
|
36
|
+
.new('active', values['skills']['active'])
|
37
|
+
.skill_set
|
38
|
+
self.passive_skills ||= D3api::HeroSkills
|
39
|
+
.new('passive', values['skills']['passive'])
|
40
|
+
.skill_set
|
41
|
+
self.followers ||= D3api::HeroFollowerSet
|
42
|
+
.new(values['followers'])
|
43
|
+
.follower_set
|
44
|
+
end
|
45
|
+
|
46
|
+
def determine_gender(gender)
|
47
|
+
if gender == 0
|
48
|
+
'Male'
|
49
|
+
else
|
50
|
+
'Female'
|
51
|
+
end
|
52
|
+
end
|
14
53
|
end
|
15
54
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module D3api
|
2
|
+
class HeroFollower
|
3
|
+
attr_accessor :follower_type, :slug, :level,
|
4
|
+
:items, :skills
|
5
|
+
|
6
|
+
def initialize(follower_type, attributes)
|
7
|
+
follower_type = follower_type
|
8
|
+
attributes = attributes
|
9
|
+
|
10
|
+
set_method(follower_type, attributes)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def set_method(follower_type, attributes)
|
15
|
+
self.follower_type = follower_type
|
16
|
+
self.slug = attributes['slug']
|
17
|
+
self.level = attributes['level']
|
18
|
+
self.items ||= EquippedItemSet.new(attributes['items']).item_set
|
19
|
+
self.skills = nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module D3api
|
2
|
+
class HeroFollowerSet
|
3
|
+
attr_accessor :follower_set
|
4
|
+
|
5
|
+
def initialize(follower_array)
|
6
|
+
followers = []
|
7
|
+
|
8
|
+
follower_array.each do |follower|
|
9
|
+
followers << D3api::HeroFollower.new(follower[0], follower[1])
|
10
|
+
end
|
11
|
+
|
12
|
+
set_method(followers)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def set_method(followers)
|
17
|
+
self.follower_set ||= followers
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module D3api
|
2
|
+
class HeroSet
|
3
|
+
attr_accessor :hero_set
|
4
|
+
|
5
|
+
def initialize(array)
|
6
|
+
heroes = []
|
7
|
+
array.each do |character|
|
8
|
+
heroes << character
|
9
|
+
end
|
10
|
+
|
11
|
+
set_method(heroes)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def set_method(heroes)
|
16
|
+
self.hero_set = heroes
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module D3api
|
2
|
+
class HeroSkills
|
3
|
+
attr_accessor :skill_set
|
4
|
+
|
5
|
+
def initialize(skill_type, *attributes)
|
6
|
+
skill_set = []
|
7
|
+
attributes[0].each do |attribute|
|
8
|
+
skill_set << Skill.new(skill_type, attribute)
|
9
|
+
end
|
10
|
+
|
11
|
+
set_method(skill_set)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def set_method(skill_set)
|
16
|
+
self.skill_set = skill_set
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/d3api/item.rb
CHANGED
@@ -1,15 +1,46 @@
|
|
1
1
|
module D3api
|
2
2
|
class Item < BaseModel
|
3
|
-
|
3
|
+
attr_accessor :name, :icon, :tooltip_params, :display_color,
|
4
|
+
:required_level, :item_level, :bonus_affixes,
|
5
|
+
:attributes, :min_dps, :max_dps, :min_attacks_per_second,
|
6
|
+
:max_attacks_per_second, :socket_effects, :salvage
|
4
7
|
|
5
8
|
def initialize(region, item_hash)
|
6
9
|
json_response = find(region, item_hash)
|
7
10
|
|
8
|
-
super json_response
|
11
|
+
values = super json_response
|
12
|
+
|
13
|
+
set_method(values)
|
9
14
|
end
|
10
15
|
|
16
|
+
private
|
11
17
|
def find(region, item_hash)
|
12
18
|
get(region, "data/item/#{item_hash}")
|
13
19
|
end
|
20
|
+
|
21
|
+
def set_method(values)
|
22
|
+
self.name = values['name']
|
23
|
+
self.icon = values['icon']
|
24
|
+
self.tooltip_params = values['tooltipParams']
|
25
|
+
self.display_color = values['displayColor']
|
26
|
+
self.required_level = values['requiredLevel']
|
27
|
+
self.item_level = values['itemLevel']
|
28
|
+
self.bonus_affixes = values['bonusAffixes']
|
29
|
+
self.attributes = values['attributes']
|
30
|
+
|
31
|
+
unless weapon(values)
|
32
|
+
self.min_dps = values['dps']['min']
|
33
|
+
self.max_dps = values['dps']['max']
|
34
|
+
self.min_attacks_per_second = values['attacksPerSecond']['min']
|
35
|
+
self.max_attacks_per_second = values['attacksPerSecond']['max']
|
36
|
+
end
|
37
|
+
|
38
|
+
self.salvage = nil
|
39
|
+
self.socket_effects = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def weapon(values)
|
43
|
+
values['dps'] == nil
|
44
|
+
end
|
14
45
|
end
|
15
46
|
end
|
data/lib/d3api/skill.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module D3api
|
2
|
+
class Skill
|
3
|
+
attr_accessor :skill_type, :skill_slug, :skill_name, :skill_icon,
|
4
|
+
:skill_tooltip_url, :skill_description,
|
5
|
+
:skill_simple_description, :rune_slug, :rune_type,
|
6
|
+
:rune_name, :rune_description, :rune_simple_description,
|
7
|
+
:rune_tooltip_params, :rune_order
|
8
|
+
|
9
|
+
def initialize(skill_type, attributes)
|
10
|
+
skill_type = skill_type
|
11
|
+
skill = attributes['skill']
|
12
|
+
rune = attributes['rune']
|
13
|
+
|
14
|
+
set_method(skill_type, skill, rune)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def set_method(skill_type, skill, rune)
|
19
|
+
self.skill_type = skill_type
|
20
|
+
self.skill_slug = skill['slug']
|
21
|
+
self.skill_name = skill['name']
|
22
|
+
self.skill_icon = skill['icon']
|
23
|
+
self.skill_tooltip_url = skill['tooltipUrl']
|
24
|
+
self.skill_description = skill['description']
|
25
|
+
self.skill_simple_description = skill['simpleDescription']
|
26
|
+
|
27
|
+
if skill_type == 'active'
|
28
|
+
self.rune_slug = rune['slug']
|
29
|
+
self.rune_type = rune['type']
|
30
|
+
self.rune_name = rune['name']
|
31
|
+
self.rune_description = rune['description']
|
32
|
+
self.rune_simple_description = rune['simpleDescription']
|
33
|
+
self.rune_tooltip_params = rune['tooltipParams']
|
34
|
+
self.rune_order = rune['order']
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/d3api/version.rb
CHANGED
data/spec/d3api/artisan_spec.rb
CHANGED
@@ -1,31 +1,21 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe D3api::Artisan
|
3
|
+
describe D3api::Artisan do
|
4
4
|
use_vcr_cassette
|
5
|
+
subject { D3api::Artisan.new(:us, 'blacksmith') }
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
@artisan.should_not be_nil
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe D3api::Artisan, 'top level hash methods from BaseModel' do
|
13
|
-
subject { @artisan = D3api::Artisan.new(:us, 'blacksmith') }
|
14
|
-
use_vcr_cassette
|
15
|
-
|
16
|
-
it 'returns an array for .training' do
|
17
|
-
subject.training.should be_kind_of(Array)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns a string for .slug' do
|
21
|
-
subject.slug.should be_kind_of(String)
|
7
|
+
after do
|
8
|
+
VCR.eject_cassette
|
22
9
|
end
|
23
10
|
|
24
|
-
|
25
|
-
|
11
|
+
context '.new' do
|
12
|
+
it { should_not be_nil }
|
26
13
|
end
|
27
14
|
|
28
|
-
|
29
|
-
|
15
|
+
context '#set_method' do
|
16
|
+
its(:slug) { should eql 'blacksmith' }
|
17
|
+
its(:name) { should eql 'Blacksmith' }
|
18
|
+
its(:portrait) { should eql 'pt_blacksmith' }
|
19
|
+
its(:training) { should be nil }
|
30
20
|
end
|
31
21
|
end
|
data/spec/d3api/career_spec.rb
CHANGED
@@ -1,59 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe D3api::Career
|
3
|
+
describe D3api::Career do
|
4
4
|
use_vcr_cassette
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
subject.hardcoreArtisans.should be_kind_of(Array)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'returns a hash for .kills' do
|
37
|
-
subject.kills.should be_kind_of(Hash)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'returns a hash for .timePlayed' do
|
41
|
-
subject.timePlayed.should be_kind_of(Hash)
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'returns an array for .fallenHeroes' do
|
45
|
-
subject.fallenHeroes.should be_kind_of(Array)
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'returns a string for .battleTag' do
|
49
|
-
subject.battleTag.should be_kind_of(String)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'returns an array for .progression' do
|
53
|
-
subject.progression.should be_kind_of(Array)
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'returns an array for .hardcoreProgression' do
|
57
|
-
subject.hardcoreProgression.should be_kind_of(Array)
|
5
|
+
subject { D3api::Career.new(:us, 'yojymbu', '1249') }
|
6
|
+
|
7
|
+
after do
|
8
|
+
VCR.eject_cassette
|
9
|
+
end
|
10
|
+
|
11
|
+
context '.new' do
|
12
|
+
it { should_not be nil }
|
13
|
+
end
|
14
|
+
|
15
|
+
context '#set_method' do
|
16
|
+
its(:last_hero_played) { should be_kind_of(Integer) }
|
17
|
+
its(:heroes) { should be_kind_of(Array) }
|
18
|
+
its(:last_updated) { should be_kind_of(Time) }
|
19
|
+
its(:artisans) { should be_kind_of(Array) }
|
20
|
+
its(:hardcore_artisans) { should be_kind_of(Array) }
|
21
|
+
its(:monster_kills) { should be_kind_of(Integer) }
|
22
|
+
its(:elite_kills) { should be_kind_of(Integer) }
|
23
|
+
its(:hardcore_monster_kills) { should be_kind_of(Integer) }
|
24
|
+
its(:barbarian_time_played) { should be_kind_of(Float) }
|
25
|
+
its(:demon_hunter_time_played) { should be_kind_of(Float) }
|
26
|
+
its(:monk_time_played) { should be_kind_of(Float) }
|
27
|
+
its(:witch_doctor_time_played) { should be_kind_of(Float) }
|
28
|
+
its(:wizard_time_played) { should be_kind_of(Float) }
|
29
|
+
its(:fallen_heroes) { should be nil }
|
30
|
+
its(:battle_tag) { should eql 'Yojymbu#1249' }
|
31
|
+
its(:progression) { should be nil }
|
32
|
+
its(:hardcore_progression) { should be nil }
|
58
33
|
end
|
59
34
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe D3api::EquippedItemSet do
|
4
|
+
subject { D3api::EquippedItemSet.new(
|
5
|
+
{'head' =>
|
6
|
+
{'id' => 'Helm_104',
|
7
|
+
'name' => 'Abyssal Visage',
|
8
|
+
'icon' => 'helm_104_barbarian_male',
|
9
|
+
'displayColor' => 'yellow',
|
10
|
+
'tooltipParams' => 'item/Cj4Ite7E6QkSBwgEFTr1Tl0d0pJdSR0wjxxFHb1b6EgdhgJj6iILCAAVy_4BABgKICAwDTjIA0AASAtQDGD_Axj01PfUC1ACWAA'},
|
11
|
+
'torso'=>
|
12
|
+
{'id' => 'ChestArmor_102',
|
13
|
+
'name' => 'Cleansing Mail',
|
14
|
+
'icon' => 'chestarmor_102_barbarian_male',
|
15
|
+
'displayColor' => 'yellow',
|
16
|
+
'tooltipParams' => 'item/CowBCNvS4ewCEgcIBBXqHRlgHRrEUXQdt8Ji6h2eI7xIHQRFP-IiCwgAFcf-AQAYFCAeMAk43AJAAEgGUAxg_QNqJQoMCAAQ5_mb84CAgIA7EhUIm7'}
|
17
|
+
}
|
18
|
+
)}
|
19
|
+
|
20
|
+
context '#set_method' do
|
21
|
+
its(:item_set) { should be_kind_of(Array) }
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe D3api::EquippedItem do
|
4
|
+
subject { D3api::EquippedItem.new(
|
5
|
+
[ 'head', {'id' => 'Helm_104',
|
6
|
+
'name' => 'Abyssal Visage',
|
7
|
+
'icon' => 'helm_104_barbarian_male',
|
8
|
+
'displayColor' => 'yellow',
|
9
|
+
'tooltipParams' =>
|
10
|
+
'item/Cj4Ite7E6QkSBwgEFTr1Tl0d0pJdSR0wjxxFHb1b6EgdhgJj6iILCAAVy_4BABgKICAwDTjIA0AASAtQDGD_Axj01PfUC1ACWAA' }
|
11
|
+
]
|
12
|
+
) }
|
13
|
+
|
14
|
+
context '#set_method' do
|
15
|
+
its(:location) { should eql 'head' }
|
16
|
+
its(:id) { should eql 'Helm_104' }
|
17
|
+
its(:name) { should eql 'Abyssal Visage' }
|
18
|
+
its(:icon) { should eql 'helm_104_barbarian_male' }
|
19
|
+
its(:display_color) { should eql 'yellow' }
|
20
|
+
its(:tooltip_params) { should eql 'item/Cj4Ite7E6QkSBwgEFTr1Tl0d0pJdSR0wjxxFHb1b6EgdhgJj6iILCAAVy_4BABgKICAwDTjIA0AASAtQDGD_Axj01PfUC1ACWAA' }
|
21
|
+
end
|
22
|
+
end
|
data/spec/d3api/follower_spec.rb
CHANGED
@@ -1,10 +1,21 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe D3api::Follower
|
3
|
+
describe D3api::Follower do
|
4
4
|
use_vcr_cassette
|
5
|
+
subject { D3api::Follower.new(:us, 'scoundrel') }
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
after do
|
8
|
+
VCR.eject_cassette
|
9
|
+
end
|
10
|
+
|
11
|
+
context '.new' do
|
12
|
+
it { should_not be nil }
|
13
|
+
end
|
14
|
+
|
15
|
+
context '#set_method' do
|
16
|
+
its(:slug) { should eql 'scoundrel' }
|
17
|
+
its(:name) { should eql 'Scoundrel' }
|
18
|
+
its(:portrait) { should eql 'scoundrel' }
|
19
|
+
its(:skills) { should be nil }
|
9
20
|
end
|
10
21
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe D3api::HeroFollowerSet do
|
4
|
+
subject { D3api::HeroFollowerSet.new(
|
5
|
+
{'templar'=>
|
6
|
+
{'slug' => 'templar',
|
7
|
+
'level' => 8,
|
8
|
+
'items' =>
|
9
|
+
{'mainHand' =>
|
10
|
+
{'id' => 'Spear_001',
|
11
|
+
'name' => 'Javelin',
|
12
|
+
'icon' => 'spear_001_demonhunter_male',
|
13
|
+
'displayColor' => 'white',
|
14
|
+
'tooltipParams' => 'item/ChkI6MLF7A4SBwgEFQsX9vkwCTiqA0AAYKoDGOmjz2A'},
|
15
|
+
'offHand'=>
|
16
|
+
{'id' => 'Shield_001',
|
17
|
+
'name' => 'Buckler',
|
18
|
+
'icon' => 'shield_001_demonhunter_male',
|
19
|
+
'displayColor' => 'white',
|
20
|
+
'tooltipParams' => 'item/ChkIsIumtgkSBwgEFYkDO2wwCTjmBEAAYOYEGJKO2MMN'}},
|
21
|
+
'stats' => {'goldFind' => 0, 'magicFind' => 0, 'experienceBonus' => 0},
|
22
|
+
'skills'=>
|
23
|
+
[{'skill'=>
|
24
|
+
{'slug'=> 'heal',
|
25
|
+
'name' => 'Heal',
|
26
|
+
'icon' => 'templar_heal_110',
|
27
|
+
'level' => 5,
|
28
|
+
'tooltipUrl' => 'skill/templar/heal',
|
29
|
+
'description' => 'Heals you and the Templar for 4651 Life.\r\n\r\nCooldown: 30 seconds',
|
30
|
+
'simpleDescription' => 'Heals you and the Templar.',
|
31
|
+
'skillCalcId' => 'a'}},
|
32
|
+
{},
|
33
|
+
{},
|
34
|
+
{}]}}
|
35
|
+
)
|
36
|
+
}
|
37
|
+
|
38
|
+
context '#set_method' do
|
39
|
+
its(:follower_set) { should be_kind_of(Array) }
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe D3api::HeroFollower do
|
4
|
+
subject { D3api::HeroFollower.new('templar',
|
5
|
+
{'slug' => 'templar',
|
6
|
+
'level' => 8,
|
7
|
+
'items'=>
|
8
|
+
{'mainHand' =>
|
9
|
+
{'id' => 'Spear_001',
|
10
|
+
'name' => 'Javelin',
|
11
|
+
'icon' => 'spear_001_demonhunter_male',
|
12
|
+
'displayColor' => 'white',
|
13
|
+
'tooltipParams' => 'item/ChkI6MLF7A4SBwgEFQsX9vkwCTiqA0AAYKoDGOmjz2A'},
|
14
|
+
'offHand'=>
|
15
|
+
{'id' => 'Shield_001',
|
16
|
+
'name' => 'Buckler',
|
17
|
+
'icon' => 'shield_001_demonhunter_male',
|
18
|
+
'displayColor' => 'white',
|
19
|
+
'tooltipParams' => 'item/ChkIsIumtgkSBwgEFYkDO2wwCTjmBEAAYOYEGJKO2MMN'}},
|
20
|
+
'stats'=>{'goldFind' => 0, 'magicFind' => 0, 'experienceBonus' => 0},
|
21
|
+
'skills'=>
|
22
|
+
[{'skill'=>
|
23
|
+
{'slug' => 'heal',
|
24
|
+
'name' => 'Heal',
|
25
|
+
'icon' => 'templar_heal_110',
|
26
|
+
'level' => 5,
|
27
|
+
'tooltipUrl' => 'skill/templar/heal',
|
28
|
+
'description' => 'Heals you and the Templar for 4651 Life.\r\n\r\nCooldown: 30 seconds',
|
29
|
+
'simpleDescription' => 'Heals you and the Templar.',
|
30
|
+
'skillCalcId' => 'a'}},
|
31
|
+
{},
|
32
|
+
{},
|
33
|
+
{}]}
|
34
|
+
)
|
35
|
+
}
|
36
|
+
|
37
|
+
context '#set_method' do
|
38
|
+
its(:follower_type) { should eql 'templar' }
|
39
|
+
its(:slug) { should eql 'templar'}
|
40
|
+
its(:level) { should eql 8 }
|
41
|
+
its(:items) { should be_kind_of(Array) }
|
42
|
+
its(:skills) { should be nil }
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe D3api::HeroSkills do
|
4
|
+
subject { D3api::HeroSkills.new('active', [{'skill' =>
|
5
|
+
{'slug' => 'cleave',
|
6
|
+
'name' => 'Cleave',
|
7
|
+
'icon' => 'barbarian_cleave',
|
8
|
+
'level' => 3,
|
9
|
+
'categorySlug' => 'primary',
|
10
|
+
'tooltipUrl' => 'skill/barbarian/cleave',
|
11
|
+
'description' => 'Generate: 5 Fury per attack\r\n\r\nSwing your weapon in a wide arc to deal 140% weapon damage to all enemies caught in the swing.',
|
12
|
+
'simpleDescription' => 'Generate: 5 Fury per attack\r\n\r\nSwing your weapon in an arc and strike multiple enemies.',
|
13
|
+
'skillCalcId' => 'b'},
|
14
|
+
'rune'=>
|
15
|
+
{'slug' => 'cleave-c',
|
16
|
+
'type' => 'c',
|
17
|
+
'name' => 'Scattering Blast',
|
18
|
+
'level' => 30,
|
19
|
+
'description' => 'On Critical Hits, knock enemies back 9 yards and inflict 60% weapon damage to enemies where they land.',
|
20
|
+
'simpleDescription' => 'Critical Hits cause Knockback, and enemies deal additional damage where they land.',
|
21
|
+
'tooltipParams' => 'rune/cleave/c',
|
22
|
+
'skillCalcId' => 'b',
|
23
|
+
'order' => 2}}]
|
24
|
+
)
|
25
|
+
}
|
26
|
+
|
27
|
+
context '#set_method' do
|
28
|
+
its(:skill_set) { should be_kind_of(Array) }
|
29
|
+
end
|
30
|
+
end
|
data/spec/d3api/hero_spec.rb
CHANGED
@@ -1,10 +1,28 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe D3api::Hero
|
3
|
+
describe D3api::Hero do
|
4
4
|
use_vcr_cassette
|
5
|
+
subject { D3api::Hero.new(:us, 'yojymbu', '1249', '30255685') }
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
after do
|
8
|
+
VCR.eject_cassette
|
9
|
+
end
|
10
|
+
|
11
|
+
context '.new' do
|
12
|
+
it { should_not be nil }
|
13
|
+
end
|
14
|
+
|
15
|
+
context '#set_method' do
|
16
|
+
its(:id) { should eql 30255685 }
|
17
|
+
its(:name) { should eql 'Belgan' }
|
18
|
+
its(:hero_class) { should eql 'barbarian' }
|
19
|
+
its(:gender) { should eql 'Male' }
|
20
|
+
its(:level) { should eql 45 }
|
21
|
+
its(:hardcore) { should be_kind_of(TrueClass) }
|
22
|
+
its(:last_updated) { should be_kind_of(Time) }
|
23
|
+
its(:active_skills) { should be_kind_of(Array) }
|
24
|
+
its(:passive_skills) { should be_kind_of(Array) }
|
25
|
+
its(:items) { should be_kind_of(Array) }
|
26
|
+
its(:followers) { should be_kind_of(Array) }
|
9
27
|
end
|
10
28
|
end
|
data/spec/d3api/item_spec.rb
CHANGED
@@ -1,10 +1,31 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe D3api::Item
|
3
|
+
describe D3api::Item do
|
4
4
|
use_vcr_cassette
|
5
|
+
subject { D3api::Item.new(:us, 'ChkIsp-JsQsSBwgEFRaK1aUwCTiYBEAAYJgEGNPX06ILUAhYAA') }
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
after do
|
8
|
+
VCR.eject_cassette
|
9
|
+
end
|
10
|
+
|
11
|
+
context '.new' do
|
12
|
+
it { should_not be nil}
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'set_method' do
|
16
|
+
its(:name) { should eql 'Cloth Pants' }
|
17
|
+
its(:icon) { should eql 'pants_001_monk_male' }
|
18
|
+
its(:display_color) { should be_kind_of(String) }
|
19
|
+
its(:tooltip_params) { should eql 'item/ChkIsp-JsQsSBwgEFRaK1aUwCTiYBEAAYJgEGNPX06ILUAhYAA' }
|
20
|
+
its(:required_level) { should eql 1 }
|
21
|
+
its(:item_level) { should eql 2 }
|
22
|
+
its(:bonus_affixes) { should eql 0 }
|
23
|
+
its(:min_dps) { should raise_error }
|
24
|
+
its(:max_dps) { should raise_error }
|
25
|
+
its(:min_attacks_per_second) { should raise_error }
|
26
|
+
its(:max_attacks_per_second) { should raise_error }
|
27
|
+
its(:attributes) { should be_kind_of(Array) }
|
28
|
+
its(:socket_effects) { should be nil }
|
29
|
+
its(:salvage) { should be nil }
|
9
30
|
end
|
10
31
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe D3api::Skill do
|
4
|
+
subject { D3api::Skill.new('active', {'skill' =>
|
5
|
+
{'slug' => 'cleave',
|
6
|
+
'name' => 'Cleave',
|
7
|
+
'icon' => 'barbarian_cleave',
|
8
|
+
'level' => 3,
|
9
|
+
'categorySlug' => 'primary',
|
10
|
+
'tooltipUrl' => 'skill/barbarian/cleave',
|
11
|
+
'description' => 'Generate: 5 Fury per attack\r\n\r\nSwing your weapon in a wide arc to deal 140% weapon damage to all enemies caught in the swing.',
|
12
|
+
'simpleDescription' => 'Generate: 5 Fury per attack\r\n\r\nSwing your weapon in an arc and strike multiple enemies.',
|
13
|
+
'skillCalcId' => 'b'},
|
14
|
+
'rune'=>
|
15
|
+
{'slug' => 'cleave-c',
|
16
|
+
'type' => 'c',
|
17
|
+
'name' => 'Scattering Blast',
|
18
|
+
'level' => 30,
|
19
|
+
'description' => 'On Critical Hits, knock enemies back 9 yards and inflict 60% weapon damage to enemies where they land.',
|
20
|
+
'simpleDescription' => 'Critical Hits cause Knockback, and enemies deal additional damage where they land.',
|
21
|
+
'tooltipParams' => 'rune/cleave/c',
|
22
|
+
'skillCalcId' => 'b',
|
23
|
+
'order' => 2}}
|
24
|
+
)
|
25
|
+
}
|
26
|
+
|
27
|
+
context '#set_method' do
|
28
|
+
its(:skill_type) { should eql 'active' }
|
29
|
+
its(:skill_slug) { should eql 'cleave' }
|
30
|
+
its(:skill_name) { should eql 'Cleave' }
|
31
|
+
its(:skill_icon) { should eql 'barbarian_cleave' }
|
32
|
+
its(:skill_tooltip_url) { should eql 'skill/barbarian/cleave' }
|
33
|
+
its(:skill_description) { should eql 'Generate: 5 Fury per attack\r\n\r\nSwing your weapon in a wide arc to deal 140% weapon damage to all enemies caught in the swing.' }
|
34
|
+
its(:skill_simple_description) { should eql 'Generate: 5 Fury per attack\r\n\r\nSwing your weapon in an arc and strike multiple enemies.' }
|
35
|
+
its(:rune_slug) { should eql 'cleave-c' }
|
36
|
+
its(:rune_type) { should eql 'c' }
|
37
|
+
its(:rune_name) { should eql 'Scattering Blast' }
|
38
|
+
its(:rune_description) { should eql 'On Critical Hits, knock enemies back 9 yards and inflict 60% weapon damage to enemies where they land.' }
|
39
|
+
its(:rune_simple_description) { should eql 'Critical Hits cause Knockback, and enemies deal additional damage where they land.' }
|
40
|
+
its(:rune_tooltip_params) { should eql 'rune/cleave/c' }
|
41
|
+
its(:rune_order) { should eql 2 }
|
42
|
+
end
|
43
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: d3api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -91,6 +91,38 @@ dependencies:
|
|
91
91
|
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: 2.4.0
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: pry
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: simplecov
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
94
126
|
description: Diablo 3 API ruby wrapper
|
95
127
|
email:
|
96
128
|
- phereford@gmail.com
|
@@ -113,23 +145,47 @@ files:
|
|
113
145
|
- lib/d3api/career.rb
|
114
146
|
- lib/d3api/configuration.rb
|
115
147
|
- lib/d3api/connection.rb
|
148
|
+
- lib/d3api/equipped_item.rb
|
149
|
+
- lib/d3api/equipped_item_set.rb
|
116
150
|
- lib/d3api/follower.rb
|
117
151
|
- lib/d3api/hero.rb
|
152
|
+
- lib/d3api/hero_follower.rb
|
153
|
+
- lib/d3api/hero_follower_set.rb
|
154
|
+
- lib/d3api/hero_set.rb
|
155
|
+
- lib/d3api/hero_skills.rb
|
118
156
|
- lib/d3api/item.rb
|
119
157
|
- lib/d3api/request.rb
|
158
|
+
- lib/d3api/skill.rb
|
120
159
|
- lib/d3api/version.rb
|
121
160
|
- spec/.DS_Store
|
122
161
|
- spec/cassettes/D3api_Artisan.yml
|
162
|
+
- spec/cassettes/D3api_Artisan_new.yml
|
163
|
+
- spec/cassettes/D3api_Artisan_top_level_hash_methods_from_BaseModel.yml
|
123
164
|
- spec/cassettes/D3api_Career.yml
|
165
|
+
- spec/cassettes/D3api_Career_new.yml
|
166
|
+
- spec/cassettes/D3api_Career_top_level_hash_methods_from_BaseModel.yml
|
124
167
|
- spec/cassettes/D3api_Follower.yml
|
168
|
+
- spec/cassettes/D3api_Follower_new.yml
|
169
|
+
- spec/cassettes/D3api_Follower_top_level_hash_to_methods.yml
|
125
170
|
- spec/cassettes/D3api_Hero.yml
|
171
|
+
- spec/cassettes/D3api_Hero_new.yml
|
172
|
+
- spec/cassettes/D3api_Hero_top_level_hash_to_methods.yml
|
126
173
|
- spec/cassettes/D3api_Item.yml
|
174
|
+
- spec/cassettes/D3api_Item_new.yml
|
175
|
+
- spec/cassettes/D3api_Item_top_level_hash_to_methods.yml
|
127
176
|
- spec/d3api/.DS_Store
|
128
177
|
- spec/d3api/artisan_spec.rb
|
129
178
|
- spec/d3api/career_spec.rb
|
179
|
+
- spec/d3api/equipped_item_set_spec.rb
|
180
|
+
- spec/d3api/equipped_item_spec.rb
|
130
181
|
- spec/d3api/follower_spec.rb
|
182
|
+
- spec/d3api/hero_follower_set_spec.rb
|
183
|
+
- spec/d3api/hero_follower_spec.rb
|
184
|
+
- spec/d3api/hero_set_spec.rb
|
185
|
+
- spec/d3api/hero_skills_spec.rb
|
131
186
|
- spec/d3api/hero_spec.rb
|
132
187
|
- spec/d3api/item_spec.rb
|
188
|
+
- spec/d3api/skills_spec.rb
|
133
189
|
- spec/spec_helper.rb
|
134
190
|
homepage: https://github.com/phereford/d3api
|
135
191
|
licenses: []
|
@@ -145,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
201
|
version: '0'
|
146
202
|
segments:
|
147
203
|
- 0
|
148
|
-
hash:
|
204
|
+
hash: -1160581402281800813
|
149
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
206
|
none: false
|
151
207
|
requirements:
|
@@ -154,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
210
|
version: '0'
|
155
211
|
segments:
|
156
212
|
- 0
|
157
|
-
hash:
|
213
|
+
hash: -1160581402281800813
|
158
214
|
requirements: []
|
159
215
|
rubyforge_project:
|
160
216
|
rubygems_version: 1.8.24
|
@@ -164,14 +220,31 @@ summary: Blizzard's Diablo 3 API
|
|
164
220
|
test_files:
|
165
221
|
- spec/.DS_Store
|
166
222
|
- spec/cassettes/D3api_Artisan.yml
|
223
|
+
- spec/cassettes/D3api_Artisan_new.yml
|
224
|
+
- spec/cassettes/D3api_Artisan_top_level_hash_methods_from_BaseModel.yml
|
167
225
|
- spec/cassettes/D3api_Career.yml
|
226
|
+
- spec/cassettes/D3api_Career_new.yml
|
227
|
+
- spec/cassettes/D3api_Career_top_level_hash_methods_from_BaseModel.yml
|
168
228
|
- spec/cassettes/D3api_Follower.yml
|
229
|
+
- spec/cassettes/D3api_Follower_new.yml
|
230
|
+
- spec/cassettes/D3api_Follower_top_level_hash_to_methods.yml
|
169
231
|
- spec/cassettes/D3api_Hero.yml
|
232
|
+
- spec/cassettes/D3api_Hero_new.yml
|
233
|
+
- spec/cassettes/D3api_Hero_top_level_hash_to_methods.yml
|
170
234
|
- spec/cassettes/D3api_Item.yml
|
235
|
+
- spec/cassettes/D3api_Item_new.yml
|
236
|
+
- spec/cassettes/D3api_Item_top_level_hash_to_methods.yml
|
171
237
|
- spec/d3api/.DS_Store
|
172
238
|
- spec/d3api/artisan_spec.rb
|
173
239
|
- spec/d3api/career_spec.rb
|
240
|
+
- spec/d3api/equipped_item_set_spec.rb
|
241
|
+
- spec/d3api/equipped_item_spec.rb
|
174
242
|
- spec/d3api/follower_spec.rb
|
243
|
+
- spec/d3api/hero_follower_set_spec.rb
|
244
|
+
- spec/d3api/hero_follower_spec.rb
|
245
|
+
- spec/d3api/hero_set_spec.rb
|
246
|
+
- spec/d3api/hero_skills_spec.rb
|
175
247
|
- spec/d3api/hero_spec.rb
|
176
248
|
- spec/d3api/item_spec.rb
|
249
|
+
- spec/d3api/skills_spec.rb
|
177
250
|
- spec/spec_helper.rb
|