blizzard_api 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.gitlab-ci.yml +28 -0
  4. data/.rubocop.yml +13 -0
  5. data/.rubocop_todo.yml +7 -0
  6. data/.travis.yml +7 -0
  7. data/CHANGELOG.md +4 -0
  8. data/Gemfile +8 -0
  9. data/Gemfile.lock +44 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +208 -0
  12. data/Rakefile +12 -0
  13. data/bin/console +14 -0
  14. data/bin/setup +8 -0
  15. data/blizzard_api.gemspec +42 -0
  16. data/lib/blizzard_api.rb +14 -0
  17. data/lib/blizzard_api/configuration.rb +82 -0
  18. data/lib/blizzard_api/diablo.rb +76 -0
  19. data/lib/blizzard_api/diablo/community/act.rb +35 -0
  20. data/lib/blizzard_api/diablo/community/artisan.rb +38 -0
  21. data/lib/blizzard_api/diablo/community/character.rb +38 -0
  22. data/lib/blizzard_api/diablo/community/follower.rb +25 -0
  23. data/lib/blizzard_api/diablo/community/item.rb +26 -0
  24. data/lib/blizzard_api/diablo/community/item_type.rb +35 -0
  25. data/lib/blizzard_api/diablo/community/profile.rb +77 -0
  26. data/lib/blizzard_api/diablo/game_data/era.rb +21 -0
  27. data/lib/blizzard_api/diablo/game_data/generic_data_endpoint.rb +58 -0
  28. data/lib/blizzard_api/diablo/game_data/season.rb +21 -0
  29. data/lib/blizzard_api/diablo/request.rb +15 -0
  30. data/lib/blizzard_api/exception.rb +12 -0
  31. data/lib/blizzard_api/request.rb +182 -0
  32. data/lib/blizzard_api/starcraft.rb +40 -0
  33. data/lib/blizzard_api/starcraft/community/account.rb +23 -0
  34. data/lib/blizzard_api/starcraft/community/ladder.rb +34 -0
  35. data/lib/blizzard_api/starcraft/community/profile.rb +76 -0
  36. data/lib/blizzard_api/starcraft/game_data/league.rb +27 -0
  37. data/lib/blizzard_api/starcraft/request.rb +36 -0
  38. data/lib/blizzard_api/version.rb +6 -0
  39. data/lib/blizzard_api/wow.rb +167 -0
  40. data/lib/blizzard_api/wow/community/achievements.rb +45 -0
  41. data/lib/blizzard_api/wow/community/auction.rb +25 -0
  42. data/lib/blizzard_api/wow/community/boss.rb +35 -0
  43. data/lib/blizzard_api/wow/community/challenge.rb +35 -0
  44. data/lib/blizzard_api/wow/community/character.rb +103 -0
  45. data/lib/blizzard_api/wow/community/guild.rb +67 -0
  46. data/lib/blizzard_api/wow/community/item.rb +46 -0
  47. data/lib/blizzard_api/wow/community/mount.rb +24 -0
  48. data/lib/blizzard_api/wow/community/pets.rb +85 -0
  49. data/lib/blizzard_api/wow/community/pvp.rb +34 -0
  50. data/lib/blizzard_api/wow/community/quest.rb +25 -0
  51. data/lib/blizzard_api/wow/community/recipe.rb +25 -0
  52. data/lib/blizzard_api/wow/community/spell.rb +25 -0
  53. data/lib/blizzard_api/wow/community/zone.rb +35 -0
  54. data/lib/blizzard_api/wow/game_data/connected_realm.rb +37 -0
  55. data/lib/blizzard_api/wow/game_data/generic_data_endpoint.rb +58 -0
  56. data/lib/blizzard_api/wow/game_data/mythic_keystone_affix.rb +23 -0
  57. data/lib/blizzard_api/wow/game_data/playable_class.rb +62 -0
  58. data/lib/blizzard_api/wow/game_data/playable_specialization.rb +70 -0
  59. data/lib/blizzard_api/wow/game_data/power_type.rb +23 -0
  60. data/lib/blizzard_api/wow/game_data/race.rb +51 -0
  61. data/lib/blizzard_api/wow/game_data/realm.rb +48 -0
  62. data/lib/blizzard_api/wow/game_data/region.rb +49 -0
  63. data/lib/blizzard_api/wow/request.rb +16 -0
  64. metadata +198 -0
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'blizzard_api/configuration'
4
+ require_relative 'blizzard_api/request'
5
+ require_relative 'blizzard_api/exception'
6
+ require_relative 'blizzard_api/version'
7
+ require_relative 'blizzard_api/wow'
8
+ require_relative 'blizzard_api/diablo'
9
+ require_relative 'blizzard_api/starcraft'
10
+
11
+ # Blizzard namespace
12
+ module BlizzardApi
13
+ extend Configuration
14
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ # Global configurations
5
+ module Configuration
6
+ ##
7
+ # @!attribute app_id
8
+ # Application ID.
9
+ # @see https://develop.battle.net/access/clients
10
+ # @return [String] Application ID
11
+ attr_accessor :app_id
12
+
13
+ ##
14
+ # @!attribute app_secret
15
+ # Application secret.
16
+ # @see https://develop.battle.net/access/clients
17
+ # @return [String] Application secret
18
+ attr_accessor :app_secret
19
+
20
+ ##
21
+ # @!attribute region
22
+ # Default region.
23
+ # @return [String] Default region
24
+ attr_accessor :region
25
+
26
+ ##
27
+ # @!attribute use_cache
28
+ # If true requests will be cached using a Redis server.
29
+ # @see https://redis.io/
30
+ # @return [Boolean] Application ID
31
+ attr_accessor :use_cache
32
+
33
+ ##
34
+ # @!attribute redis_host
35
+ # Redis host.
36
+ # @see https://redis.io/
37
+ # @return [String] Redis host
38
+ attr_accessor :redis_host
39
+
40
+ ##
41
+ # @!attribute redis_port
42
+ # Redis port.
43
+ # @see https://redis.io/
44
+ # @return [Integer] Redis port
45
+ attr_accessor :redis_port
46
+
47
+ ##
48
+ # @!attribute format
49
+ # Response format:
50
+ # * *:raw* plain text (String)
51
+ # * *:json* for native ruby json (Array).
52
+ # * Any other value *OpenStruct* will be used.
53
+ # @return [Symbol] Response format.
54
+ attr_accessor :format
55
+
56
+ ##
57
+ # @!attribute access_token
58
+ # Access token. Optional. If you don't provide one it will be generate using your client credentials.
59
+ # @return [String] Access token.
60
+ attr_accessor :access_token
61
+
62
+ ##
63
+ # This method return the singleton instance of the configuration module. Use this to initialize the default values
64
+ # and options.
65
+ #
66
+ # @yield self
67
+ #
68
+ # @example
69
+ # Blizzard.configure do |config|
70
+ # config.app_id = ENV['BNET_APPLICATION_ID']
71
+ # config.app_secret = ENV['BNET_APPLICATION_SECRET']
72
+ # config.region = 'us'
73
+ # config.use_cache = true
74
+ # config.redis_host = ENV['REDIS_HOST']
75
+ # config.redis_port = ENV['REDIS_PORT']
76
+ # config.format = :json
77
+ # end
78
+ def configure
79
+ yield self
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ # Diablo III related classes
5
+ module Diablo
6
+ require_relative 'diablo/request'
7
+ require_relative 'diablo/game_data/generic_data_endpoint'
8
+
9
+ # Diablo data api
10
+ require_relative 'diablo/game_data/season'
11
+ require_relative 'diablo/game_data/era'
12
+
13
+ ##
14
+ # @return {Season}
15
+ def season
16
+ BlizzardApi::Diablo::Season.new
17
+ end
18
+
19
+ ##
20
+ # @return {Era}
21
+ def era
22
+ BlizzardApi::Diablo::Era.new
23
+ end
24
+
25
+ # Diablo community api
26
+ require_relative 'diablo/community/act'
27
+ require_relative 'diablo/community/artisan'
28
+ require_relative 'diablo/community/follower'
29
+ require_relative 'diablo/community/character'
30
+ require_relative 'diablo/community/item_type'
31
+ require_relative 'diablo/community/item'
32
+ require_relative 'diablo/community/profile'
33
+
34
+ ##
35
+ # @return {Act}
36
+ def act
37
+ BlizzardApi::Diablo::Act.new
38
+ end
39
+
40
+ ##
41
+ # @return {Artisan}
42
+ def artisan
43
+ BlizzardApi::Diablo::Artisan.new
44
+ end
45
+
46
+ ##
47
+ # @return {Follower}
48
+ def follower
49
+ BlizzardApi::Diablo::Follower.new
50
+ end
51
+
52
+ ##
53
+ # @return {Character}
54
+ def character
55
+ BlizzardApi::Diablo::Character.new
56
+ end
57
+
58
+ ##
59
+ # @return {ItemType}
60
+ def item_type
61
+ BlizzardApi::Diablo::ItemType.new
62
+ end
63
+
64
+ ##
65
+ # @return {Type}
66
+ def item
67
+ BlizzardApi::Diablo::Item.new
68
+ end
69
+
70
+ ##
71
+ # @return {Profile}
72
+ def profile
73
+ BlizzardApi::Diablo::Profile.new
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Diablo
5
+ ##
6
+ # This class allows access to Diablo III act data
7
+ #
8
+ # @see https://develop.battle.net/documentation/api-reference/diablo-3-community-api
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Diablo.act
12
+ class Act < BlizzardApi::Diablo::Request
13
+ ##
14
+ # Return a list with all acts
15
+ #
16
+ # @!macro request_options
17
+ #
18
+ # @!macro response
19
+ def index(options = {})
20
+ api_request "#{base_url(:community)}/data/act", { ttl: CACHE_TRIMESTER }.merge(options)
21
+ end
22
+
23
+ ##
24
+ # Return complete information about an act
25
+ #
26
+ # @param id [Integer] Act id
27
+ # @!macro request_options
28
+ #
29
+ # @!macro response
30
+ def get(id, options = {})
31
+ api_request "#{base_url(:community)}/data/act/#{id}", { ttl: CACHE_TRIMESTER }.merge(options)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Diablo
5
+ ##
6
+ # This class allows access to Diablo III artisan data
7
+ #
8
+ # @see https://develop.battle.net/documentation/api-reference/diablo-3-community-api
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Diablo.artisan
12
+ class Artisan < BlizzardApi::Diablo::Request
13
+ ##
14
+ # Return data about an artisan by its slug
15
+ #
16
+ # @param artisan_slug [String] Artisan slug
17
+ # @!macro request_options
18
+ #
19
+ # @!macro response
20
+ def get(artisan_slug, options = {})
21
+ api_request "#{base_url(:community)}/data/artisan/#{artisan_slug}", { ttl: CACHE_TRIMESTER }.merge(options)
22
+ end
23
+
24
+ ##
25
+ # Return data about an artisan recipe
26
+ #
27
+ # @param artisan_slug [String] Artisan slug
28
+ # @param recipe_slug [String] Recipe slug
29
+ # @!macro request_options
30
+ #
31
+ # @!macro response
32
+ def recipe(artisan_slug, recipe_slug, options = {})
33
+ opts = { ttl: CACHE_TRIMESTER }.merge(options)
34
+ api_request "#{base_url(:community)}/data/artisan/#{artisan_slug}/recipe/#{recipe_slug}", opts
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Diablo
5
+ ##
6
+ # This class allows access to Diablo III character data
7
+ #
8
+ # @see https://develop.battle.net/documentation/api-reference/diablo-3-community-api
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Diablo.character
12
+ class Character < BlizzardApi::Diablo::Request
13
+ ##
14
+ # Return information about a class
15
+ #
16
+ # @param class_slug [String] Class slug
17
+ # @!macro request_options
18
+ #
19
+ # @!macro response
20
+ def get(class_slug, options = {})
21
+ api_request "#{base_url(:community)}/data/hero/#{class_slug}", { ttl: CACHE_TRIMESTER }.merge(options)
22
+ end
23
+
24
+ ##
25
+ # Return information about a class' skill
26
+ #
27
+ # @param class_slug [String] Class slug
28
+ # @param skill_slug [String] Skill slug
29
+ # @!macro request_options
30
+ #
31
+ # @!macro response
32
+ def skill(class_slug, skill_slug, options = {})
33
+ opts = { ttl: CACHE_TRIMESTER }.merge(options)
34
+ api_request "#{base_url(:community)}/data/hero/#{class_slug}/skill/#{skill_slug}", opts
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Diablo
5
+ ##
6
+ # This class allows access to Diablo III follower data
7
+ #
8
+ # @see https://develop.battle.net/documentation/api-reference/diablo-3-community-api
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Diablo.follower
12
+ class Follower < BlizzardApi::Diablo::Request
13
+ ##
14
+ # Return information about a follower
15
+ #
16
+ # @param follower_slug [String] Follower slug
17
+ # @!macro request_options
18
+ #
19
+ # @!macro response
20
+ def get(follower_slug, options = {})
21
+ api_request "#{base_url(:community)}/data/follower/#{follower_slug}", { ttl: CACHE_TRIMESTER }.merge(options)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Diablo
5
+ ##
6
+ # This class allows access to Diablo III item data
7
+ #
8
+ # @see https://develop.battle.net/documentation/api-reference/diablo-3-community-api
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Diablo.item
12
+ class Item < BlizzardApi::Diablo::Request
13
+ ##
14
+ # Return information about an item
15
+ #
16
+ # @param item_slug [String] Item slug
17
+ # @param item_id [Integer] Item id
18
+ # @!macro request_options
19
+ #
20
+ # @!macro response
21
+ def get(item_slug, item_id, options = {})
22
+ api_request "#{base_url(:community)}/data/item/#{item_slug}-#{item_id}", { ttl: CACHE_TRIMESTER }.merge(options)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Diablo
5
+ ##
6
+ # This class allows access to Diablo III item type data
7
+ #
8
+ # @see https://develop.battle.net/documentation/api-reference/diablo-3-community-api
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Diablo.item_type
12
+ class ItemType < BlizzardApi::Diablo::Request
13
+ ##
14
+ # Return a list of item types
15
+ #
16
+ # @!macro request_options
17
+ #
18
+ # @!macro response
19
+ def index(options = {})
20
+ api_request "#{base_url(:community)}/data/item-type", { ttl: CACHE_TRIMESTER }.merge(options)
21
+ end
22
+
23
+ ##
24
+ # Return more information about an item type
25
+ #
26
+ # @param item_type_slug [String] Item type slug
27
+ # @!macro request_options
28
+ #
29
+ # @!macro response
30
+ def get(item_type_slug, options = {})
31
+ api_request "#{base_url(:community)}/data/item-type/#{item_type_slug}", { ttl: CACHE_TRIMESTER }.merge(options)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Diablo
5
+ ##
6
+ # This class allows access to Diablo III profile data
7
+ #
8
+ # @see https://develop.battle.net/documentation/api-reference/diablo-3-community-api
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Diablo.profile
12
+ class Profile < BlizzardApi::Diablo::Request
13
+ ##
14
+ # Return an user's profile data with a list of heroes
15
+ #
16
+ # @param battletag [String] User's battletag
17
+ # @param oauth_token [String] A token generated by the OAuth authorization flow. See the link below for more info.
18
+ # @!macro request_options
19
+ #
20
+ # @!macro response
21
+ #
22
+ # @see https://develop.battle.net/documentation/guides/using-oauth/authorization-code-flow
23
+ def index(battletag, oauth_token, options = {})
24
+ opts = { access_token: oauth_token, ttl: CACHE_TRIMESTER }.merge(options)
25
+ api_request "#{base_url(:community)}/data/profile/#{battletag}", opts
26
+ end
27
+
28
+ ##
29
+ # Return more data about a hero
30
+ #
31
+ # @param battletag [String] User's battletag
32
+ # @param oauth_token [String] A token generated by the OAuth authorization flow. See the link below for more info.
33
+ # @param hero_id [Integer] Hero id
34
+ # @!macro request_options
35
+ #
36
+ # @!macro response
37
+ #
38
+ # @see https://develop.battle.net/documentation/guides/using-oauth/authorization-code-flow
39
+ def hero(battletag, oauth_token, hero_id, options = {})
40
+ opts = { access_token: oauth_token, ttl: CACHE_TRIMESTER }.merge(options)
41
+ api_request "#{base_url(:community)}/data/profile/#{battletag}/hero/#{hero_id}", opts
42
+ end
43
+
44
+ ##
45
+ # Return more data about a hero's items
46
+ #
47
+ # @param battletag [String] User's battletag
48
+ # @param oauth_token [String] A token generated by the OAuth authorization flow. See the link below for more info.
49
+ # @param hero_id [Integer] Hero id
50
+ # @!macro request_options
51
+ #
52
+ # @!macro response
53
+ #
54
+ # @see https://develop.battle.net/documentation/guides/using-oauth/authorization-code-flow
55
+ def hero_items(battletag, oauth_token, hero_id, options = {})
56
+ opts = { access_token: oauth_token, ttl: CACHE_TRIMESTER }.merge(options)
57
+ api_request "#{base_url(:community)}/data/profile/#{battletag}/hero/#{hero_id}/items", opts
58
+ end
59
+
60
+ ##
61
+ # Return more data about a hero's followers
62
+ #
63
+ # @param battletag [String] User's battletag
64
+ # @param oauth_token [String] A token generated by the OAuth authorization flow. See the link below for more info.
65
+ # @param hero_id [Integer] Hero id
66
+ # @!macro request_options
67
+ #
68
+ # @!macro response
69
+ #
70
+ # @see https://develop.battle.net/documentation/guides/using-oauth/authorization-code-flow
71
+ def hero_follower_items(battletag, oauth_token, hero_id, options = {})
72
+ opts = { access_token: oauth_token, ttl: CACHE_TRIMESTER }.merge(options)
73
+ api_request "#{base_url(:community)}/data/profile/#{battletag}/hero/#{hero_id}/follower-items", opts
74
+ end
75
+ end
76
+ end
77
+ end