d3api 0.0.4 → 1.0.0
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/.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
|
[](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
|
[](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
|