bn 0.0.1
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.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +22 -0
- data/README.md +202 -0
- data/Rakefile +14 -0
- data/VERSION +1 -0
- data/bn.gemspec +23 -0
- data/lib/bn.rb +9 -0
- data/lib/bn/api.rb +19 -0
- data/lib/bn/api/base.rb +78 -0
- data/lib/bn/api/d3.rb +44 -0
- data/lib/bn/api/sc2.rb +74 -0
- data/lib/bn/api/wow.rb +10 -0
- data/lib/bn/entity.rb +19 -0
- data/lib/bn/entity/base.rb +16 -0
- data/lib/bn/entity/d3/hero.rb +164 -0
- data/lib/bn/entity/d3/profile.rb +185 -0
- data/lib/bn/error/api/base.rb +11 -0
- data/lib/bn/error/api/invalid_key.rb +14 -0
- data/lib/bn/error/api/invalid_locale.rb +16 -0
- data/lib/bn/error/api/invalid_region.rb +14 -0
- data/lib/bn/error/base.rb +10 -0
- data/lib/bn/error/middleware/base.rb +11 -0
- data/lib/bn/error/middleware/invalid_api_request.rb +38 -0
- data/lib/bn/error/middleware/invalid_http_response.rb +26 -0
- data/lib/bn/helpers/has_attributes.rb +45 -0
- data/lib/bn/middleware.rb +13 -0
- data/lib/bn/middleware/api_error.rb +27 -0
- data/lib/bn/middleware/base.rb +21 -0
- data/lib/bn/middleware/d3.rb +9 -0
- data/lib/bn/middleware/d3/profile.rb +39 -0
- data/lib/bn/middleware/http_response.rb +24 -0
- data/lib/bn/middleware/key_converter.rb +28 -0
- metadata +117 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
require "bn/error/middleware/base"
|
2
|
+
|
3
|
+
module BN
|
4
|
+
module Error
|
5
|
+
module Middleware
|
6
|
+
# Raised when the JSON API response was an error.
|
7
|
+
class InvalidAPIRequest < Base
|
8
|
+
# @method code
|
9
|
+
# Get the code for this API error.
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
|
13
|
+
# @method code=
|
14
|
+
# Set the code for this API error.
|
15
|
+
#
|
16
|
+
# @param [#to_s] value
|
17
|
+
# @return [String]
|
18
|
+
attribute(:code) { |value| value.to_s }
|
19
|
+
|
20
|
+
# @method reason
|
21
|
+
# Get the reason for this API error.
|
22
|
+
#
|
23
|
+
# @return [String]
|
24
|
+
|
25
|
+
# @method reason=
|
26
|
+
# Set the reason for this API error.
|
27
|
+
#
|
28
|
+
# @param [#to_s] value
|
29
|
+
# @return [String]
|
30
|
+
attribute(:reason) { |value| value.to_s }
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
"Invalid API request: #{@reason}."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "bn/error/middleware/base"
|
2
|
+
|
3
|
+
module BN
|
4
|
+
module Error
|
5
|
+
module Middleware
|
6
|
+
# Raised when the HTTP response object given is invalid.
|
7
|
+
class InvalidHTTPResponse < Base
|
8
|
+
# @method response
|
9
|
+
# Get the HTTP response.
|
10
|
+
#
|
11
|
+
# @return [#body]
|
12
|
+
|
13
|
+
# @method response=
|
14
|
+
# Set the HTTP response.
|
15
|
+
#
|
16
|
+
# @param [#body] value
|
17
|
+
# @return [#body]
|
18
|
+
attribute(:response)
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"Invalid HTTP response."
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module BN
|
2
|
+
module Helpers
|
3
|
+
# Adds the `update_attributes` method and `attribute` class method.
|
4
|
+
module HasAttributes
|
5
|
+
# The class methods to be mixed in when included.
|
6
|
+
module ClassMethods
|
7
|
+
def attribute(name, options={}, &block)
|
8
|
+
options = options.to_h
|
9
|
+
|
10
|
+
attr_reader(name)
|
11
|
+
|
12
|
+
define_method("#{name}=") do |value|
|
13
|
+
value = instance_exec(value, options, &block) unless block.nil?
|
14
|
+
|
15
|
+
instance_variable_set("@#{name}", value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def included(base)
|
22
|
+
base.extend(ClassMethods)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Initialize this object by optionally updating attributes with a Hash.
|
27
|
+
#
|
28
|
+
# @param [#to_h] attributes Attributes to set after initializing.
|
29
|
+
def initialize(attributes={})
|
30
|
+
update_attributes(attributes)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Update any attributes on this object.
|
34
|
+
#
|
35
|
+
# @param [#to_h] attributes
|
36
|
+
# @return [Hash] The attributes.
|
37
|
+
def update_attributes(attributes={})
|
38
|
+
attributes = attributes.to_h
|
39
|
+
attributes.each { |name, value| send("#{name}=", value) }
|
40
|
+
|
41
|
+
attributes
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module BN
|
2
|
+
# The API response middleware.
|
3
|
+
module Middleware
|
4
|
+
class << self
|
5
|
+
def execute(data, *middleware)
|
6
|
+
middleware.each_with_object(data) { |middleware, data| middleware.execute(data, options) }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require "bn/middleware/http_response"
|
13
|
+
require "bn/middleware/d3"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "bn/error/middleware/invalid_api_request"
|
2
|
+
require "bn/middleware/base"
|
3
|
+
|
4
|
+
module BN
|
5
|
+
module Middleware
|
6
|
+
# Checks the JSON API response to see if it is an error.
|
7
|
+
class APIResponse < Base
|
8
|
+
# Execute the middleware.
|
9
|
+
#
|
10
|
+
# @param [#to_h] data
|
11
|
+
# @return [Hash]
|
12
|
+
def execute(data)
|
13
|
+
data = data.to_h
|
14
|
+
|
15
|
+
raise BN::Error::Middleware::InvalidAPIRequest, data if error?(data)
|
16
|
+
|
17
|
+
data
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def error?(data)
|
23
|
+
data.keys.sort == [:code, :reason].sort
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module BN
|
2
|
+
module Middleware
|
3
|
+
# The base class for middleware.
|
4
|
+
class Base
|
5
|
+
class << self
|
6
|
+
def execute(data, options={})
|
7
|
+
new(options).execute(data)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(options={})
|
12
|
+
@options = options.to_h
|
13
|
+
end
|
14
|
+
|
15
|
+
# Execute the middleware.
|
16
|
+
def execute(_value)
|
17
|
+
raise NotImplementedError
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "bn/middleware/base"
|
2
|
+
require "bn/entity/d3/profile"
|
3
|
+
|
4
|
+
module BN
|
5
|
+
module Middleware
|
6
|
+
module D3
|
7
|
+
# Transforms a Hash into an Entity::Profile instance.
|
8
|
+
class Profile < Base
|
9
|
+
# Execute the middleware.
|
10
|
+
#
|
11
|
+
# @return [Entity::Profile]
|
12
|
+
def execute(data)
|
13
|
+
convert_heroes(data)
|
14
|
+
convert_time_played(data)
|
15
|
+
|
16
|
+
Entity::D3::Profile.new(data)
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def convert_heroes(data)
|
22
|
+
data[:heroes].each do |hero|
|
23
|
+
hero[:hero_class] = hero.delete(:class).tr("-", "_").downcase.to_sym
|
24
|
+
hero[:gender] = hero[:gender] == 0 ? :male : :female
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def convert_time_played(data)
|
29
|
+
data[:time_played].keys.each do |hero_class|
|
30
|
+
value = data[:time_played].delete(hero_class).to_f
|
31
|
+
hero_class = hero_class.tr("-", "_").downcase.to_sym
|
32
|
+
|
33
|
+
hero[hero_class] = value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "json"
|
2
|
+
require "httpi"
|
3
|
+
require "bn/error/middleware/invalid_http_response"
|
4
|
+
require "bn/middleware/base"
|
5
|
+
|
6
|
+
module BN
|
7
|
+
module Middleware
|
8
|
+
# Transforms the body of an HTTP request from JSON to Ruby.
|
9
|
+
class HTTPResponse < Base
|
10
|
+
# Execute the middleware.
|
11
|
+
#
|
12
|
+
# @param [#body] response
|
13
|
+
# @return [Hash]
|
14
|
+
def execute(response)
|
15
|
+
raise Error::Middleware::InvalidHTTPResponse, response: response unless response.respond_to?(:body)
|
16
|
+
raise Error::Middleware::InvalidHTTPResponse, response: response unless response.respond_to?(:code) && (200...300).include?(response.code)
|
17
|
+
|
18
|
+
body = response.body.to_s
|
19
|
+
|
20
|
+
::JSON.parse(body)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "bn/middleware/base"
|
2
|
+
|
3
|
+
module BN
|
4
|
+
module Middleware
|
5
|
+
# Recursively convert all keys in a Hash from camelCase or dashed-delimited Strings into underscore_delimited Symbols.
|
6
|
+
class KeyConverter < Base
|
7
|
+
# Execute the middleware.
|
8
|
+
#
|
9
|
+
# @param [#to_h] value
|
10
|
+
# @return [Hash]
|
11
|
+
def execute(value)
|
12
|
+
convert_keys(value.to_h)
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def convert_keys(data)
|
18
|
+
data.keys.each do |key|
|
19
|
+
value = data.delete(key)
|
20
|
+
value = convert_keys(value) if value.is_a?(Hash)
|
21
|
+
key = key.gsub(/([a-z\d])([A-Z])/, "\1_\2").tr("-", "_").downcase.to_sym
|
22
|
+
|
23
|
+
data[key] = value
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bn
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Scott Lewis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: version
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httpi
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.4.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.4.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 10.4.2
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 10.4.2
|
55
|
+
description: A Battle.net API adapter and entity mapper.
|
56
|
+
email: ryan@rynet.us
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- Gemfile
|
62
|
+
- Gemfile.lock
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- VERSION
|
66
|
+
- bn.gemspec
|
67
|
+
- lib/bn.rb
|
68
|
+
- lib/bn/api.rb
|
69
|
+
- lib/bn/api/base.rb
|
70
|
+
- lib/bn/api/d3.rb
|
71
|
+
- lib/bn/api/sc2.rb
|
72
|
+
- lib/bn/api/wow.rb
|
73
|
+
- lib/bn/entity.rb
|
74
|
+
- lib/bn/entity/base.rb
|
75
|
+
- lib/bn/entity/d3/hero.rb
|
76
|
+
- lib/bn/entity/d3/profile.rb
|
77
|
+
- lib/bn/error/api/base.rb
|
78
|
+
- lib/bn/error/api/invalid_key.rb
|
79
|
+
- lib/bn/error/api/invalid_locale.rb
|
80
|
+
- lib/bn/error/api/invalid_region.rb
|
81
|
+
- lib/bn/error/base.rb
|
82
|
+
- lib/bn/error/middleware/base.rb
|
83
|
+
- lib/bn/error/middleware/invalid_api_request.rb
|
84
|
+
- lib/bn/error/middleware/invalid_http_response.rb
|
85
|
+
- lib/bn/helpers/has_attributes.rb
|
86
|
+
- lib/bn/middleware.rb
|
87
|
+
- lib/bn/middleware/api_error.rb
|
88
|
+
- lib/bn/middleware/base.rb
|
89
|
+
- lib/bn/middleware/d3.rb
|
90
|
+
- lib/bn/middleware/d3/profile.rb
|
91
|
+
- lib/bn/middleware/http_response.rb
|
92
|
+
- lib/bn/middleware/key_converter.rb
|
93
|
+
homepage: http://github.com/RyanScottLewis/
|
94
|
+
licenses:
|
95
|
+
- MIT
|
96
|
+
metadata: {}
|
97
|
+
post_install_message:
|
98
|
+
rdoc_options: []
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.4.5
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: A Battle.net API adapter and entity mapper.
|
117
|
+
test_files: []
|