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.
@@ -0,0 +1,10 @@
1
+ require "bn/api/base"
2
+ require "bn/api/base"
3
+
4
+ module BN
5
+ module API
6
+ # The the World of Warcraft API requester.
7
+ class WOW < Base
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ module BN
2
+ # The Entity namespace.
3
+ module Entity
4
+ # The valid regions for the API.
5
+ # Contains name, host, and valid locales for each region.
6
+ REGIONS = {
7
+ us: { name: "US", uri: "https://us.api.battle.net", locales: %w(en_US es_MX pt_BR) },
8
+ eu: { name: "Europe", uri: "https://us.api.battle.net", locales: %w(en_GB es_ES fr_FR ru_RU de_DE pt_PT it_IT) },
9
+ kr: { name: "Korea", uri: "https://kr.api.battle.net", locales: %w(ko_KR) },
10
+ tw: { name: "Taiwan", uri: "https://tw.api.battle.net", locales: %w(zh_TW) },
11
+ cn: { name: "China", uri: "https://api.battlenet.com.cn", locales: %w(zh_CN) },
12
+ sea: { name: "South East Asia", uri: "https://sea.api.battle.net", locales: %w(en_US) }
13
+ }
14
+ end
15
+ end
16
+
17
+ require "bn/api/d3"
18
+ require "bn/api/sc2"
19
+ require "bn/api/wow"
@@ -0,0 +1,16 @@
1
+ require "bn/helpers/has_attributes"
2
+
3
+ module BN
4
+ module Entity
5
+ # The base class for game entities.
6
+ class Base
7
+ include Helpers::HasAttributes
8
+
9
+ protected
10
+
11
+ def convert_time(value)
12
+ value.is_a?(Time) ? value : Time.at(value.to_i)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,164 @@
1
+ require "bn/entity/base"
2
+
3
+ module BN
4
+ module Entity
5
+ module D3
6
+ # A hero within Diablo 3.
7
+ class Hero < Base
8
+ MAX_LEVEL = 70
9
+
10
+ def initialize(attributes={})
11
+ super
12
+
13
+ @level ||= 1
14
+ @paragon_level ||= 0
15
+ @hardcore ||= false
16
+ @seasonal ||= false
17
+ @dead ||= false
18
+ end
19
+
20
+ # @method id
21
+ # Get the ID.
22
+ #
23
+ # @return [Integer]
24
+
25
+ # @method id=
26
+ # Set the ID.
27
+ #
28
+ # @param [#to_i] value
29
+ # @return [Integer]
30
+ attribute(:id) { |value| value.to_i }
31
+
32
+ # @method name
33
+ # Get the name.
34
+ #
35
+ # @return [String]
36
+
37
+ # @method name=
38
+ # Set the name.
39
+ #
40
+ # @param [#to_s] value
41
+ # @return [String]
42
+ attribute(:name) { |value| value.to_s.strip }
43
+
44
+ # @method hero_class
45
+ # Get the hero class.
46
+ #
47
+ # @return [Symbol]
48
+
49
+ # @method hero_class=
50
+ # Set the hero class.
51
+ #
52
+ # @param [#to_sym] value
53
+ # @return [Symbol]
54
+ attribute(:hero_class) { |value| value.to_sym }
55
+
56
+ # @method gender
57
+ # Get the gender.
58
+ #
59
+ # @return [Symbol]
60
+
61
+ # @method gender=
62
+ # Set the gender.
63
+ #
64
+ # @param [#to_sym] value
65
+ # @return [Symbol]
66
+ attribute(:gender) { |value| value.to_sym }
67
+
68
+ # @method level
69
+ # Get the level.
70
+ #
71
+ # @return [Integer]
72
+
73
+ # @method level=
74
+ # Set the level.
75
+ #
76
+ # @param [#to_i] value
77
+ # @return [Integer]
78
+ attribute(:level) { |value| validate_level(value) }
79
+
80
+ # @method paragon_level
81
+ # Get the paragon level.
82
+ #
83
+ # @return [Integer]
84
+
85
+ # @method paragon_level=
86
+ # Set the paragon level.
87
+ #
88
+ # @param [#to_i] value
89
+ # @return [Integer]
90
+ attribute(:paragon_level) { |value| validate_level(value, true) }
91
+
92
+ # @method kills
93
+ # Get the number of kills per enemy type.
94
+ #
95
+ # @return [Hash]
96
+
97
+ # @method kills=
98
+ # Set the number of kills per enemy type.
99
+ #
100
+ # @param [#to_h] value
101
+ # @return [Hash]
102
+ attribute(:kills) { |value| value.to_h }
103
+
104
+ # @method hardcore
105
+ # Get whether this hero is hardcore.
106
+ #
107
+ # @return [Boolean]
108
+
109
+ # @method hardcore=
110
+ # Set whether this hero is hardcore.
111
+ #
112
+ # @param [Boolean] value
113
+ # @return [Boolean]
114
+ attribute(:hardcore) { |value| !!value }
115
+
116
+ # @method seasonal
117
+ # Get whether this hero is seasonal.
118
+ #
119
+ # @return [Boolean]
120
+
121
+ # @method seasonal=
122
+ # Set whether this hero is seasonal.
123
+ #
124
+ # @param [Boolean] value
125
+ # @return [Boolean]
126
+ attribute(:seasonal) { |value| !!value }
127
+
128
+ # @method last_updated
129
+ # Get the last updated time.
130
+ #
131
+ # @return [Time]
132
+
133
+ # @method last_updated=
134
+ # Set the last updated time.
135
+ #
136
+ # @param [Time, #to_i] value
137
+ # @return [Time]
138
+ attribute(:last_updated) { |value| convert_time(value) }
139
+
140
+ # @method dead
141
+ # Get whether this hero is dead.
142
+ #
143
+ # @return [Boolean]
144
+
145
+ # @method dead=
146
+ # Set whether this hero is dead.
147
+ #
148
+ # @param [Boolean] value
149
+ # @return [Boolean]
150
+ attribute(:dead) { |value| !!value }
151
+
152
+ protected
153
+
154
+ def validate_level(value, paragon=false)
155
+ value = value.to_i
156
+ value = 0 if value < MAX_LEVEL
157
+ value = MAX_LEVEL if !paragon && value > MAX_LEVEL
158
+
159
+ value
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,185 @@
1
+ require "bn/entity/base"
2
+ require "bn/entity/d3/hero"
3
+
4
+ module BN
5
+ module Entity
6
+ module D3
7
+ # A profile within Diablo 3.
8
+ class Profile < Base
9
+ # @method battle_tag
10
+ # Get the battle tag.
11
+ #
12
+ # @return [String]
13
+
14
+ # @method battle_tag=
15
+ # Set the battle tag.
16
+ #
17
+ # @param [#to_s] value
18
+ # @return [String]
19
+ attribute(:battle_tag) { |value| value.to_s.strip }
20
+
21
+ # @method paragon_level
22
+ # Get the paragon level.
23
+ #
24
+ # @return [Integer]
25
+
26
+ # @method paragon_level=
27
+ # Set the paragon level.
28
+ #
29
+ # @param [#to_i] value
30
+ # @return [Integer]
31
+ attribute(:paragon_level) { |value| value.to_i }
32
+
33
+ # @method paragon_level_hardcore
34
+ # Get the paragon hardcore level.
35
+ #
36
+ # @return [Integer]
37
+
38
+ # @method paragon_level_hardcore=
39
+ # Set the paragon hardcore level.
40
+ #
41
+ # @param [#to_i] value
42
+ # @return [Integer]
43
+ attribute(:paragon_level_hardcore) { |value| value.to_i }
44
+
45
+ # @method paragon_level_season
46
+ # Get the paragon season level.
47
+ #
48
+ # @return [Integer]
49
+
50
+ # @method paragon_level_season=
51
+ # Set the paragon season level.
52
+ #
53
+ # @param [#to_i] value
54
+ # @return [Integer]
55
+ attribute(:paragon_level_season) { |value| value.to_i }
56
+
57
+ # @method paragon_level_season_hardcore
58
+ # Get the paragon season hardcore level.
59
+ #
60
+ # @return [Integer]
61
+
62
+ # @method paragon_level_season_hardcore=
63
+ # Set the paragon season hardcore level.
64
+ #
65
+ # @param [#to_i] value
66
+ # @return [Integer]
67
+ attribute(:paragon_level_season_hardcore) { |value| value.to_i }
68
+
69
+ # @method guild_name
70
+ # Get the guild name.
71
+ #
72
+ # @return [String]
73
+
74
+ # @method guild_name=
75
+ # Set the guild name.
76
+ #
77
+ # @param [#to_s] value
78
+ # @return [String]
79
+ attribute(:guild_name) { |value| value.to_s }
80
+
81
+ # @method heroes
82
+ # Get the heroes.
83
+ #
84
+ # @return [<Hero>]
85
+
86
+ # @method heroes=
87
+ # Set the heroes.
88
+ #
89
+ # @param [#to_a] value
90
+ # @return [<Hero>]
91
+ attribute(:heroes) { |value| value.to_a.collect { |hero| convert_hero(hero) } }
92
+
93
+ # @method last_hero_played
94
+ # Get the last hero played.
95
+ #
96
+ # @return [Hero]
97
+
98
+ # @method heroes=
99
+ # Set the last hero played.
100
+ #
101
+ # @param [Hero, #to_h] value
102
+ # @return [Hero]
103
+ attribute(:last_hero_played) { |value| convert_hero(value) }
104
+
105
+ # @method last_updated
106
+ # Get the last updated time.
107
+ #
108
+ # @return [Time]
109
+
110
+ # @method last_updated=
111
+ # Set the last updated time.
112
+ #
113
+ # @param [Time, #to_i] value
114
+ # @return [Time]
115
+ attribute(:last_updated) { |value| convert_time(value) }
116
+
117
+ # @method kills
118
+ # Get the number of kills per enemy type.
119
+ #
120
+ # @return [Hash]
121
+
122
+ # @method kills=
123
+ # Set the number of kills per enemy type.
124
+ #
125
+ # @param [#to_h] value
126
+ # @return [Hash]
127
+ attribute(:kills) { |value| value.to_h }
128
+
129
+ # @method highest_hardcore_level
130
+ # Get the highest hardcore level.
131
+ #
132
+ # @return [Integer]
133
+
134
+ # @method highest_hardcore_level=
135
+ # Set the highest hardcore level.
136
+ #
137
+ # @param [#to_i] value
138
+ # @return [Integer]
139
+ attribute(:highest_hardcore_level) { |value| value.to_i }
140
+
141
+ # @method time_played
142
+ # Get the time played.
143
+ #
144
+ # @return [Hash]
145
+
146
+ # @method time_played=
147
+ # Set the time played.
148
+ #
149
+ # @param [#to_h] value
150
+ # @return [Hash]
151
+ attribute(:time_played) { |value| value.to_h }
152
+
153
+ # @method progression
154
+ # Get the act progression.
155
+ #
156
+ # @return [Hash]
157
+
158
+ # @method time_played=
159
+ # Set the act progression.
160
+ #
161
+ # @param [#to_h] value
162
+ # @return [Hash]
163
+ attribute(:progression) { |value| value.to_h }
164
+
165
+ # @method fallen_heroes
166
+ # Get the fallen heroes.
167
+ #
168
+ # @return [<Hero>]
169
+
170
+ # @method fallen_heroes=
171
+ # Set the fallen heroes.
172
+ #
173
+ # @param [#to_a] value
174
+ # @return [<Hero>]
175
+ attribute(:fallen_heroes) { |value| value.to_a }
176
+
177
+ protected
178
+
179
+ def convert_hero(value)
180
+ value.is_a?(Hero) ? value : Hero.new(value)
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,11 @@
1
+ require "bn/error/base"
2
+
3
+ module BN
4
+ module Error
5
+ module API
6
+ # The base class for API errors.
7
+ class Base < Error::Base
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ require "bn/error/api/base"
2
+
3
+ module BN
4
+ module Error
5
+ module API
6
+ # Raised when the key is invalid.
7
+ class InvalidKey < Base
8
+ def to_s
9
+ "The key is invalid."
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ require "bn/error/api/base"
2
+
3
+ module BN
4
+ module Error
5
+ module API
6
+ # Raised when the locale is invalid.
7
+ class InvalidLocale < Base
8
+ attribute(:region)
9
+
10
+ def to_s
11
+ "Invalid locale for region '#{@region[:name]}'. Must be one of the following: #{@region[:locales]}"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ require "bn/error/api/base"
2
+
3
+ module BN
4
+ module Error
5
+ module API
6
+ # Raised when the region is invalid.
7
+ class InvalidRegion < Base
8
+ def to_s
9
+ "Region must be one of the following: #{BN::API::REGIONS.keys}"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end