deckard_cain 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d519aa856c87b19d08f41fbd785f18a8eb6aa90a
4
- data.tar.gz: 8d259210401c4edb8e1698b8b3109b184a9656e9
3
+ metadata.gz: 7e83008d71b011e7f79325749c8f275a7c2e7780
4
+ data.tar.gz: 47369d7905380ebd7a1d64b987c0bcb5eb46fe52
5
5
  SHA512:
6
- metadata.gz: aefe3200b3e0600fae15e96c6ed44d3f16ff76f2f808e26a04fba05f469b64829c3ae81f1e21775b0a1fd4bc3caca5da07fac1829ceb0b7bec3a969a6a8b3c6b
7
- data.tar.gz: 3c14b69d41c9139edafa73e1f4b9a536682f29f3167936a1c0ac3a9fb3d75f29f92648d4748d8790fc02171ff5789773b8778bfe9f0d111841a65abd63407d46
6
+ metadata.gz: b05660f27cda2b2a3e6eb26c83872016ca329fc79fe45cf2261c26ccc1fae35e44e89b3e278c0c50df0f054e3589e082ef2138755dd8ac0974ae986a2c6b6b4d
7
+ data.tar.gz: b02b9292d3688483822ec32372ed9194f49d5224fcd4c91d449a36af578b049a6d76c0eb037451b01ba9b129af4e77f2348b2b59f695cd19f530272e8e56e3ef
@@ -0,0 +1,3 @@
1
+ ---
2
+ service_name: travis-ci
3
+ repo_token: A30pYIGz97cs4u0ttuOKpV9nlH0BWa5QL
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
19
+
20
+ .ignore
21
+
22
+ # VCR fragments
23
+ fixtures
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+
5
+ group :test do
6
+ gem 'rspec', "~> 2.14"
7
+ gem 'coveralls', '~> 0.7', require: false
8
+ gem 'webmock', '~> 1.15'
9
+ gem 'vcr', '~> 2.7'
10
+ end
@@ -0,0 +1,49 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ addressable (2.3.5)
5
+ coveralls (0.7.0)
6
+ multi_json (~> 1.3)
7
+ rest-client
8
+ simplecov (>= 0.7)
9
+ term-ansicolor
10
+ thor
11
+ crack (0.4.1)
12
+ safe_yaml (~> 0.9.0)
13
+ diff-lcs (1.2.4)
14
+ mime-types (1.25)
15
+ multi_json (1.8.0)
16
+ rake (10.1.0)
17
+ rest-client (1.6.7)
18
+ mime-types (>= 1.16)
19
+ rspec (2.14.1)
20
+ rspec-core (~> 2.14.0)
21
+ rspec-expectations (~> 2.14.0)
22
+ rspec-mocks (~> 2.14.0)
23
+ rspec-core (2.14.6)
24
+ rspec-expectations (2.14.3)
25
+ diff-lcs (>= 1.1.3, < 2.0)
26
+ rspec-mocks (2.14.4)
27
+ safe_yaml (0.9.7)
28
+ simplecov (0.7.1)
29
+ multi_json (~> 1.0)
30
+ simplecov-html (~> 0.7.1)
31
+ simplecov-html (0.7.1)
32
+ term-ansicolor (1.2.2)
33
+ tins (~> 0.8)
34
+ thor (0.18.1)
35
+ tins (0.12.0)
36
+ vcr (2.7.0)
37
+ webmock (1.15.2)
38
+ addressable (>= 2.2.7)
39
+ crack (>= 0.3.2)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ coveralls (~> 0.7)
46
+ rake
47
+ rspec (~> 2.14)
48
+ vcr (~> 2.7)
49
+ webmock (~> 1.15)
@@ -0,0 +1,9 @@
1
+ Deckard Cain
2
+ ============
3
+
4
+ [![Build Status](https://travis-ci.org/1morepx/deckard_cain.png?branch=master)](https://travis-ci.org/1morepx/deckard_cain)
5
+ [![Code Climate](https://codeclimate.com/github/1morepx/deckard_cain.png)](https://codeclimate.com/github/1morepx/deckard_cain)
6
+ [![Gem Version](https://badge.fury.io/rb/deckard_cain.png)](http://badge.fury.io/rb/deckard_cain)
7
+ [![Coverage Status](https://coveralls.io/repos/1morepx/deckard_cain/badge.png)](https://coveralls.io/r/1morepx/deckard_cain)
8
+
9
+ Stay a while and listen! Deckard Cain knows all about your Diablo 3 characters! This gem allows you to easily consume the Diablo 3 Community API provided by Blizzard.
@@ -0,0 +1,4 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new('spec')
3
+
4
+ task default: :spec
@@ -0,0 +1,20 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "cain/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'deckard_cain'
6
+ s.version = Cain::VERSION
7
+ s.date = '2013-04-24'
8
+ s.summary = 'Stay a while and listen!'
9
+ s.description = 'Deckard Cain knows everything about the Diablo 3 Community API'
10
+ s.authors = ["David Mills"]
11
+ s.email = 'dave@1morepx.com'
12
+ s.files = `git ls-files`.split("\n")
13
+ s.homepage = 'http://github.com/1morepx/deckard_cain'
14
+ s.add_development_dependency 'rspec', '~> 2.14'
15
+ s.add_development_dependency 'coveralls', '~> 0.7'
16
+ s.add_development_dependency 'webmock', '~> 1.15'
17
+ s.add_development_dependency 'vcr', '~> 2.7'
18
+
19
+ s.add_dependency 'json'
20
+ end
@@ -0,0 +1,6 @@
1
+ require 'cain/model'
2
+
3
+ module Cain
4
+ class Artisan < Model
5
+ end
6
+ end
@@ -0,0 +1,26 @@
1
+ require 'cain/model'
2
+ require 'cain/hero'
3
+
4
+ module Cain
5
+ class Career < Model
6
+
7
+ def initialize battle_tag=nil
8
+ super battle_tag
9
+
10
+ uri = URI(path)
11
+ data = JSON.parse(Net::HTTP.get(uri))
12
+ data["heroes"].each { |hero| heroes << Hero.build_from_json(hero) }
13
+ end
14
+
15
+ attr_writer :heroes
16
+
17
+ def heroes
18
+ @heroes ||= []
19
+ end
20
+
21
+ protected
22
+ def resource_path
23
+ "profile/#{battle_tag}/"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,35 @@
1
+ require 'date'
2
+ require 'cain/model'
3
+
4
+ module Cain
5
+ class Hero < Model
6
+
7
+ def self.build_from_json params
8
+ hero = new
9
+
10
+ params.keys.each do |key|
11
+ method = key.gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
12
+ method = "character_class" if method == "class"
13
+ hero.send(method + "=", params[key])
14
+ end
15
+
16
+ hero
17
+ end
18
+
19
+ attr_accessor :name, :id, :level, :gender, :hardcore, :dead, :paragon_level, :character_class
20
+
21
+ def gender= value
22
+ @gender = value.zero? ? :male : :female
23
+ end
24
+
25
+ def character_class= value
26
+ value = value.gsub(/-/, '_')
27
+ @character_class = value.to_sym
28
+ end
29
+
30
+ protected
31
+ def resource_path
32
+ "profile/#{battle_tag}/hero/#{id}"
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,6 @@
1
+ require 'cain/model'
2
+
3
+ module Cain
4
+ class Item < Model
5
+ end
6
+ end
@@ -0,0 +1,38 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+
4
+ module Cain
5
+ class Model
6
+
7
+ attr_accessor :last_updated, :battle_tag
8
+ def initialize battle_tag=nil
9
+ @battle_tag = battle_tag
10
+ end
11
+
12
+ def last_updated= timestamp
13
+ @last_updated = epoch_to_date timestamp
14
+ end
15
+
16
+ def path
17
+ "http://#{host}/#{api_path}/#{resource_path}"
18
+ end
19
+
20
+ protected
21
+
22
+ def epoch_to_date timestamp
23
+ DateTime.strptime("#{timestamp}", '%s')
24
+ end
25
+
26
+ def resource_path; end
27
+
28
+ private
29
+
30
+ def host
31
+ "us.battle.net"
32
+ end
33
+
34
+ def api_path
35
+ "api/d3"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Cain
2
+ VERSION = '0.0.4'
3
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe DeckardCain, :vcr do
4
+ it 'returns the correct version string' do
5
+ DeckardCain.version_string.should == "Deckard Cain version #{Cain::VERSION}"
6
+ end
7
+
8
+ context "career" do
9
+ let(:battle_tag) { "Daegren-1581" }
10
+ let(:career) { DeckardCain.fetch_career battle_tag }
11
+
12
+ it 'creates a career object with the proper battle tag' do
13
+ career.battle_tag.should eq battle_tag
14
+ career.should be_instance_of Cain::Career
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'cain/career'
3
+ require 'cain/hero'
4
+
5
+ module Cain
6
+ describe Career, :vcr do
7
+ let(:battle_tag){ "Daegren-1581" }
8
+ subject { described_class.new battle_tag }
9
+
10
+ it 'generates the right resource path on battle.net' do
11
+ subject.path.should eq "http://us.battle.net/api/d3/profile/Daegren-1581/"
12
+ end
13
+
14
+ it 'has heroes in an array' do
15
+ subject.heroes.should be_instance_of Array
16
+ end
17
+
18
+ it 'has a proper hero object' do
19
+ subject.heroes.sample.should be_instance_of Cain::Hero
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+ require 'cain/hero'
3
+
4
+ module Cain
5
+ describe Hero, :vcr do
6
+ let(:battle_tag) { "Daegren-1581" }
7
+ subject { described_class.new battle_tag }
8
+ before do
9
+ subject.id = 3691256
10
+ end
11
+
12
+ context '#gender' do
13
+ it 'is male' do
14
+ subject.gender = 0
15
+
16
+ subject.gender.should eq :male
17
+ end
18
+
19
+ it 'is female' do
20
+ subject.gender = 1
21
+
22
+ subject.gender.should eq :female
23
+ end
24
+ end
25
+
26
+ context '#character_class' do
27
+ it 'represents classes as symbols' do
28
+ subject.character_class = "demon-hunter"
29
+
30
+ subject.character_class.should eq :demon_hunter
31
+ end
32
+ end
33
+
34
+ context '#path' do
35
+ before do
36
+ subject.id = hero_id
37
+ end
38
+ let(:hero_id) { 5 }
39
+
40
+ it 'path is correct for the resource' do
41
+ subject.path.should == "http://us.battle.net/api/d3/profile/#{battle_tag}/hero/#{hero_id}"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'cain/model'
3
+
4
+ module Cain
5
+ class TestModel < Model
6
+ end
7
+
8
+ describe Model do
9
+ subject { TestModel.new }
10
+ context '#epoch_to_date' do
11
+ it 'converts timestamp to sane ruby object' do
12
+ subject.last_updated = 1365373956
13
+
14
+ date = subject.last_updated
15
+ date.year.should eq 2013
16
+ date.month.should eq 4
17
+ date.day.should eq 7
18
+ date.hour.should eq 22
19
+ date.minute.should eq 32
20
+ date.second.should eq 36
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ require 'json'
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+
5
+ require 'rspec'
6
+ require 'deckard_cain'
7
+ require 'vcr'
8
+
9
+ VCR.configure do |c|
10
+ c.cassette_library_dir = 'fixtures/vcr_cassettes'
11
+ c.hook_into :webmock
12
+ c.configure_rspec_metadata!
13
+ end
14
+
15
+ RSpec.configure do |config|
16
+ config.color_enabled = true
17
+ config.formatter = 'documentation'
18
+ config.treat_symbols_as_metadata_keys_with_true_values = true
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deckard_cain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Mills
@@ -66,13 +66,46 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: json
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: Deckard Cain knows everything about the Diablo 3 Community API
70
84
  email: dave@1morepx.com
71
85
  executables: []
72
86
  extensions: []
73
87
  extra_rdoc_files: []
74
88
  files:
89
+ - .coveralls.yml
90
+ - .gitignore
91
+ - .travis.yml
92
+ - Gemfile
93
+ - Gemfile.lock
94
+ - README.md
95
+ - Rakefile
96
+ - deckard_cain.gemspec
97
+ - lib/cain/artisan.rb
98
+ - lib/cain/career.rb
99
+ - lib/cain/hero.rb
100
+ - lib/cain/item.rb
101
+ - lib/cain/model.rb
102
+ - lib/cain/version.rb
75
103
  - lib/deckard_cain.rb
104
+ - spec/deckard_cain_spec.rb
105
+ - spec/lib/cain/career_spec.rb
106
+ - spec/lib/cain/hero_spec.rb
107
+ - spec/lib/cain/model_spec.rb
108
+ - spec/spec_helper.rb
76
109
  homepage: http://github.com/1morepx/deckard_cain
77
110
  licenses: []
78
111
  metadata: {}