blizzard_api 0.5.1 → 0.5.6

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +21 -0
  3. data/CHANGELOG.md +22 -0
  4. data/Gemfile.lock +16 -16
  5. data/README.md +58 -218
  6. data/blizzard_api.gemspec +6 -4
  7. data/lib/blizzard_api/diablo/community/act.rb +2 -2
  8. data/lib/blizzard_api/diablo/community/artisan.rb +2 -2
  9. data/lib/blizzard_api/diablo/community/character.rb +2 -2
  10. data/lib/blizzard_api/diablo/community/follower.rb +1 -1
  11. data/lib/blizzard_api/diablo/community/item.rb +1 -1
  12. data/lib/blizzard_api/diablo/community/item_type.rb +2 -2
  13. data/lib/blizzard_api/diablo/community/profile.rb +4 -4
  14. data/lib/blizzard_api/diablo/game_data/generic_data_endpoint.rb +3 -3
  15. data/lib/blizzard_api/hearthstone/game_data/back.rb +1 -1
  16. data/lib/blizzard_api/hearthstone/game_data/card.rb +2 -2
  17. data/lib/blizzard_api/hearthstone/game_data/generic_data_endpoint.rb +2 -2
  18. data/lib/blizzard_api/request.rb +3 -3
  19. data/lib/blizzard_api/starcraft.rb +7 -0
  20. data/lib/blizzard_api/starcraft/community/account.rb +1 -1
  21. data/lib/blizzard_api/starcraft/community/ladder.rb +2 -2
  22. data/lib/blizzard_api/starcraft/community/legacy.rb +88 -0
  23. data/lib/blizzard_api/starcraft/community/profile.rb +5 -5
  24. data/lib/blizzard_api/starcraft/game_data/league.rb +1 -1
  25. data/lib/blizzard_api/version.rb +1 -1
  26. data/lib/blizzard_api/wow.rb +16 -7
  27. data/lib/blizzard_api/wow/game_data/achievement.rb +3 -3
  28. data/lib/blizzard_api/wow/game_data/auction.rb +1 -1
  29. data/lib/blizzard_api/wow/game_data/azerite_essence.rb +1 -1
  30. data/lib/blizzard_api/wow/game_data/covenant.rb +79 -0
  31. data/lib/blizzard_api/wow/game_data/creature.rb +6 -6
  32. data/lib/blizzard_api/wow/game_data/generic_data_endpoint.rb +3 -3
  33. data/lib/blizzard_api/wow/game_data/guild_crest.rb +2 -2
  34. data/lib/blizzard_api/wow/game_data/item.rb +6 -6
  35. data/lib/blizzard_api/wow/game_data/journal.rb +8 -8
  36. data/lib/blizzard_api/wow/game_data/modified_crafting.rb +4 -4
  37. data/lib/blizzard_api/wow/game_data/mythic_keystone.rb +6 -6
  38. data/lib/blizzard_api/wow/game_data/mythic_keystone_affix.rb +1 -1
  39. data/lib/blizzard_api/wow/game_data/mythic_keystone_leaderboard.rb +2 -2
  40. data/lib/blizzard_api/wow/game_data/mythic_raid_leaderboard.rb +1 -1
  41. data/lib/blizzard_api/wow/game_data/pet.rb +4 -4
  42. data/lib/blizzard_api/wow/game_data/playable_class.rb +4 -4
  43. data/lib/blizzard_api/wow/game_data/playable_specialization.rb +2 -2
  44. data/lib/blizzard_api/wow/game_data/profession.rb +4 -4
  45. data/lib/blizzard_api/wow/game_data/pvp_season.rb +3 -3
  46. data/lib/blizzard_api/wow/game_data/pvp_tier.rb +1 -1
  47. data/lib/blizzard_api/wow/game_data/quest.rb +6 -6
  48. data/lib/blizzard_api/wow/game_data/reputation.rb +4 -4
  49. data/lib/blizzard_api/wow/game_data/spell.rb +1 -1
  50. data/lib/blizzard_api/wow/game_data/talent.rb +2 -2
  51. data/lib/blizzard_api/wow/game_data/tech_talent.rb +57 -0
  52. data/lib/blizzard_api/wow/game_data/wow_token.rb +1 -1
  53. data/lib/blizzard_api/wow/profile/character_profile.rb +63 -49
  54. data/lib/blizzard_api/wow/profile/guild.rb +8 -8
  55. data/lib/blizzard_api/wow/profile/profile.rb +5 -5
  56. data/lib/blizzard_api/wow/search/search_request.rb +1 -1
  57. metadata +13 -8
  58. data/.gitlab-ci.yml +0 -12
@@ -19,7 +19,7 @@ module BlizzardApi
19
19
  # @!macro request_options
20
20
  #
21
21
  # @!macro response
22
- def get(raid, faction, options = {})
22
+ def get(raid, faction, **options)
23
23
  opts = options.merge(namespace: :dynamic, ttl: CACHE_DAY)
24
24
  api_request "#{base_url(:game_data)}/leaderboard/hall-of-fame/#{raid}/#{faction}", opts
25
25
  end
@@ -18,7 +18,7 @@ module BlizzardApi
18
18
  # @!macro request_options
19
19
  #
20
20
  # @!macro response
21
- def media(id, options = {})
21
+ def media(id, **options)
22
22
  api_request "#{base_url(:media)}/pet/#{id}", default_options.merge(options)
23
23
  end
24
24
 
@@ -28,7 +28,7 @@ module BlizzardApi
28
28
  # @!macro request_options
29
29
  #
30
30
  # @!macro response
31
- def abilities(options = {})
31
+ def abilities(**options)
32
32
  api_request "#{endpoint_uri('ability')}/index", default_options.merge(options)
33
33
  end
34
34
 
@@ -40,7 +40,7 @@ module BlizzardApi
40
40
  # @!macro request_options
41
41
  #
42
42
  # @!macro response
43
- def ability(id, options = {})
43
+ def ability(id, **options)
44
44
  api_request "#{endpoint_uri('ability')}/#{id}", default_options.merge(options)
45
45
  end
46
46
 
@@ -52,7 +52,7 @@ module BlizzardApi
52
52
  # @!macro request_options
53
53
  #
54
54
  # @!macro response
55
- def ability_media(id, options = {})
55
+ def ability_media(id, **options)
56
56
  api_request "#{base_url(:media)}/pet-ability/#{id}", default_options.merge(options)
57
57
  end
58
58
 
@@ -17,7 +17,7 @@ module BlizzardApi
17
17
  # @!macro request_options
18
18
  #
19
19
  # @!macro response
20
- def talent_slots(id, options = {})
20
+ def talent_slots(id, **options)
21
21
  api_request "#{endpoint_uri}/#{id}/pvp-talent-slots", default_options.merge(options)
22
22
  end
23
23
 
@@ -25,7 +25,7 @@ module BlizzardApi
25
25
  # @!macro complete
26
26
  #
27
27
  # @option options [Boolean] :classic If set to true, this method will call the classic version
28
- def complete(options = {})
28
+ def complete(**options)
29
29
  index_data = index options
30
30
  [].tap do |classes|
31
31
  index_data[:classes].each do |pclass|
@@ -45,7 +45,7 @@ module BlizzardApi
45
45
  # @option options [Boolean] :classic If set to true, this method will call the classic version
46
46
  #
47
47
  # @!macro response
48
- def get(id, options = {})
48
+ def get(id, **options)
49
49
  data = api_request "#{endpoint_uri}/#{id}", default_options.merge(options)
50
50
  data[:icon] = get_class_icon data[:media], options
51
51
  data
@@ -59,7 +59,7 @@ module BlizzardApi
59
59
  # @!macro request_options
60
60
  #
61
61
  # @!macro response
62
- def media(id, options = {})
62
+ def media(id, **options)
63
63
  api_request "#{base_url(:media)}/playable-class/#{id}", default_options.merge(options)
64
64
  end
65
65
 
@@ -12,7 +12,7 @@ module BlizzardApi
12
12
  class PlayableSpecialization < Wow::GenericDataEndpoint
13
13
  ##
14
14
  # @!macro complete
15
- def complete(options = {})
15
+ def complete(**options)
16
16
  index_data = index options
17
17
  response_data = OpenStruct.new
18
18
  response_data.character_specializations = character_data(index_data, options)
@@ -28,7 +28,7 @@ module BlizzardApi
28
28
  # @!macro request_options
29
29
  #
30
30
  # @!macro response
31
- def media(id, options = {})
31
+ def media(id, **options)
32
32
  api_request "#{base_url(:media)}/playable-specialization/#{id}", default_options.merge(options)
33
33
  end
34
34
 
@@ -18,7 +18,7 @@ module BlizzardApi
18
18
  # @!macro request_options
19
19
  #
20
20
  # @!macro response
21
- def media(id, options = {})
21
+ def media(id, **options)
22
22
  api_request "#{base_url(:media)}/profession/#{id}", default_options.merge(options)
23
23
  end
24
24
 
@@ -31,7 +31,7 @@ module BlizzardApi
31
31
  # @!macro request_options
32
32
  #
33
33
  # @!macro response
34
- def skill_tier(id, tier_id, options = {})
34
+ def skill_tier(id, tier_id, **options)
35
35
  api_request "#{base_url(:game_data)}/profession/#{id}/skill-tier/#{tier_id}", default_options.merge(options)
36
36
  end
37
37
 
@@ -43,7 +43,7 @@ module BlizzardApi
43
43
  # @!macro request_options
44
44
  #
45
45
  # @!macro response
46
- def recipe(id, options = {})
46
+ def recipe(id, **options)
47
47
  api_request "#{base_url(:game_data)}/recipe/#{id}", default_options.merge(options)
48
48
  end
49
49
 
@@ -55,7 +55,7 @@ module BlizzardApi
55
55
  # @!macro request_options
56
56
  #
57
57
  # @!macro response
58
- def recipe_media(id, options = {})
58
+ def recipe_media(id, **options)
59
59
  api_request "#{base_url(:media)}/recipe/#{id}", default_options.merge(options)
60
60
  end
61
61
 
@@ -16,7 +16,7 @@ module BlizzardApi
16
16
  # @!macro request_options
17
17
  #
18
18
  # @!macro response
19
- def leaderboards(season_id, options = {})
19
+ def leaderboards(season_id, **options)
20
20
  api_request "#{endpoint_uri}/#{season_id}/pvp-leaderboard/index", default_options.merge(options)
21
21
  end
22
22
 
@@ -26,7 +26,7 @@ module BlizzardApi
26
26
  # @!macro request_options
27
27
  #
28
28
  # @!macro response
29
- def leaderboard(season_id, brackets, options = {})
29
+ def leaderboard(season_id, brackets, **options)
30
30
  api_request "#{endpoint_uri}/#{season_id}/pvp-leaderboard/#{brackets}", default_options.merge(options)
31
31
  end
32
32
 
@@ -36,7 +36,7 @@ module BlizzardApi
36
36
  # @!macro request_options
37
37
  #
38
38
  # @!macro response
39
- def rewards(season_id, options = {})
39
+ def rewards(season_id, **options)
40
40
  api_request "#{endpoint_uri}/#{season_id}/pvp-reward/index", default_options.merge(options)
41
41
  end
42
42
 
@@ -16,7 +16,7 @@ module BlizzardApi
16
16
  # @!macro request_options
17
17
  #
18
18
  # @!macro response
19
- def tier_media(id, options = {})
19
+ def tier_media(id, **options)
20
20
  api_request "#{base_url(:media)}/#{@endpoint}/#{id}", default_options.merge(options)
21
21
  end
22
22
 
@@ -16,7 +16,7 @@ module BlizzardApi
16
16
  # @!macro request_options
17
17
  #
18
18
  # @!macro response
19
- def categories(options = {})
19
+ def categories(**options)
20
20
  api_request "#{endpoint_uri}/category/index", default_options.merge(options)
21
21
  end
22
22
 
@@ -27,7 +27,7 @@ module BlizzardApi
27
27
  # @!macro request_options
28
28
  #
29
29
  # @!macro response
30
- def category(id, options = {})
30
+ def category(id, **options)
31
31
  api_request "#{endpoint_uri}/category/#{id}", default_options.merge(options)
32
32
  end
33
33
 
@@ -37,7 +37,7 @@ module BlizzardApi
37
37
  # @!macro request_options
38
38
  #
39
39
  # @!macro response
40
- def areas(options = {})
40
+ def areas(**options)
41
41
  api_request "#{endpoint_uri}/area/index", default_options.merge(options)
42
42
  end
43
43
 
@@ -48,7 +48,7 @@ module BlizzardApi
48
48
  # @!macro request_options
49
49
  #
50
50
  # @!macro response
51
- def area(id, options = {})
51
+ def area(id, **options)
52
52
  api_request "#{endpoint_uri}/area/#{id}", default_options.merge(options)
53
53
  end
54
54
 
@@ -58,7 +58,7 @@ module BlizzardApi
58
58
  # @!macro request_options
59
59
  #
60
60
  # @!macro response
61
- def types(options = {})
61
+ def types(**options)
62
62
  api_request "#{endpoint_uri}/type/index", default_options.merge(options)
63
63
  end
64
64
 
@@ -69,7 +69,7 @@ module BlizzardApi
69
69
  # @!macro request_options
70
70
  #
71
71
  # @!macro response
72
- def type(id, options = {})
72
+ def type(id, **options)
73
73
  api_request "#{endpoint_uri}/type/#{id}", default_options.merge(options)
74
74
  end
75
75
 
@@ -32,7 +32,7 @@ module BlizzardApi
32
32
  # @!macro request_options
33
33
  #
34
34
  # @!macro response
35
- def factions(options = {})
35
+ def factions(**options)
36
36
  api_request "#{endpoint_uri('faction')}/index", default_options.merge(options)
37
37
  end
38
38
 
@@ -43,7 +43,7 @@ module BlizzardApi
43
43
  # @!macro request_options
44
44
  #
45
45
  # @!macro response
46
- def faction(id, options = {})
46
+ def faction(id, **options)
47
47
  api_request "#{endpoint_uri('faction')}/#{id}", default_options.merge(options)
48
48
  end
49
49
 
@@ -53,7 +53,7 @@ module BlizzardApi
53
53
  # @!macro request_options
54
54
  #
55
55
  # @!macro response
56
- def tiers(options = {})
56
+ def tiers(**options)
57
57
  api_request "#{endpoint_uri('tiers')}/index", default_options.merge(options)
58
58
  end
59
59
 
@@ -64,7 +64,7 @@ module BlizzardApi
64
64
  # @!macro request_options
65
65
  #
66
66
  # @!macro response
67
- def tier(id, options = {})
67
+ def tier(id, **options)
68
68
  api_request "#{endpoint_uri('tiers')}/#{id}", default_options.merge(options)
69
69
  end
70
70
 
@@ -36,7 +36,7 @@ module BlizzardApi
36
36
  # @!macro request_options
37
37
  #
38
38
  # @!macro response
39
- def display_media(id, options = {})
39
+ def display_media(id, **options)
40
40
  api_request "#{base_url(:media)}/spell/#{id}", default_options.merge(options)
41
41
  end
42
42
 
@@ -16,7 +16,7 @@ module BlizzardApi
16
16
  # @!macro request_options
17
17
  #
18
18
  # @!macro response
19
- def pvp_talents(options = {})
19
+ def pvp_talents(**options)
20
20
  api_request "#{base_url(:game_data)}/pvp-talent/index", default_options.merge(options)
21
21
  end
22
22
 
@@ -28,7 +28,7 @@ module BlizzardApi
28
28
  # @!macro request_options
29
29
  #
30
30
  # @!macro response
31
- def pvp_talent(id, options = {})
31
+ def pvp_talent(id, **options)
32
32
  api_request "#{base_url(:game_data)}/pvp-talent/#{id}", default_options.merge(options)
33
33
  end
34
34
 
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ module Wow
5
+ ##
6
+ # This class allows access to World of Warcraft talent data
7
+ #
8
+ # @see https://develop.battle.net/documentation/world-of-warcraft/game-data-apis
9
+ #
10
+ # You can get an instance of this class using the default region as follows:
11
+ # api_instance = BlizzardApi::Wow.talent
12
+ class TechTalent < Wow::GenericDataEndpoint
13
+ ##
14
+ # Fetch tech talent trees
15
+ #
16
+ # @!macro request_options
17
+ #
18
+ # @!macro response
19
+ def tech_talent_trees(**options)
20
+ api_request "#{base_url(:game_data)}/tech-talent-tree/index", default_options.merge(options)
21
+ end
22
+
23
+ ##
24
+ # Fetch a tech talent tree
25
+ #
26
+ # @param id [Integer] Tech talent id
27
+ #
28
+ # @!macro request_options
29
+ #
30
+ # @!macro response
31
+ def tech_talent_tree(id, **options)
32
+ api_request "#{base_url(:game_data)}/tech-talent-tree/#{id}", default_options.merge(options)
33
+ end
34
+
35
+ ##
36
+ # Fetch a tech talent media
37
+ #
38
+ # @param id [Integer] Tech talent id
39
+ #
40
+ # @!macro request_options
41
+ #
42
+ # @!macro response
43
+ def media(id, **options)
44
+ api_request "#{base_url(:media)}/tech-talent/#{id}", default_options.merge(options)
45
+ end
46
+
47
+ protected
48
+
49
+ def endpoint_setup
50
+ @endpoint = 'tech-talent'
51
+ @namespace = :static
52
+ @collection = 'tech-talents'
53
+ @ttl = CACHE_TRIMESTER
54
+ end
55
+ end
56
+ end
57
+ end
@@ -16,7 +16,7 @@ module BlizzardApi
16
16
  # @!macro request_options
17
17
  #
18
18
  # @!macro response
19
- def get(options = {})
19
+ def get(**options)
20
20
  opts = { namespace: :dynamic, ttl: CACHE_HOUR }.merge(options)
21
21
  api_request "#{base_url(:game_data)}/token/index", opts
22
22
  end
@@ -22,7 +22,7 @@ module BlizzardApi
22
22
  # @!macro request_options
23
23
  #
24
24
  # @!macro response
25
- def get(realm, character, options = {})
25
+ def get(realm, character, **options)
26
26
  character_request realm, character, options
27
27
  end
28
28
 
@@ -36,8 +36,8 @@ module BlizzardApi
36
36
  # @!macro request_options
37
37
  #
38
38
  # @!macro response
39
- def achievements(realm, character, options = {})
40
- character_request realm, character, options, 'achievements'
39
+ def achievements(realm, character, **options)
40
+ character_request realm, character, 'achievements', options
41
41
  end
42
42
 
43
43
  ##
@@ -50,8 +50,8 @@ module BlizzardApi
50
50
  # @!macro request_options
51
51
  #
52
52
  # @!macro response
53
- def achievement_statistics(realm, character, options = {})
54
- character_request realm, character, options, 'achievements/statistics'
53
+ def achievement_statistics(realm, character, **options)
54
+ character_request realm, character, 'achievements/statistics', options
55
55
  end
56
56
 
57
57
  ##
@@ -64,8 +64,8 @@ module BlizzardApi
64
64
  # @!macro request_options
65
65
  #
66
66
  # @!macro response
67
- def appearance(realm, character, options = {})
68
- character_request realm, character, options, 'appearance'
67
+ def appearance(realm, character, **options)
68
+ character_request realm, character, 'appearance', options
69
69
  end
70
70
 
71
71
  ##
@@ -78,8 +78,8 @@ module BlizzardApi
78
78
  # @!macro request_options
79
79
  #
80
80
  # @!macro response
81
- def collections(realm, character, options = {})
82
- character_request realm, character, options, 'collections'
81
+ def collections(realm, character, **options)
82
+ character_request realm, character, 'collections', options
83
83
  end
84
84
 
85
85
  ##
@@ -92,8 +92,8 @@ module BlizzardApi
92
92
  # @!macro request_options
93
93
  #
94
94
  # @!macro response
95
- def pets(realm, character, options = {})
96
- character_request realm, character, options, 'collections/pets'
95
+ def pets(realm, character, **options)
96
+ character_request realm, character, 'collections/pets', options
97
97
  end
98
98
 
99
99
  ##
@@ -106,8 +106,8 @@ module BlizzardApi
106
106
  # @!macro request_options
107
107
  #
108
108
  # @!macro response
109
- def mounts(realm, character, options = {})
110
- character_request realm, character, options, 'collections/mounts'
109
+ def mounts(realm, character, **options)
110
+ character_request realm, character, 'collections/mounts', options
111
111
  end
112
112
 
113
113
  ##
@@ -120,8 +120,8 @@ module BlizzardApi
120
120
  # @!macro request_options
121
121
  #
122
122
  # @!macro response
123
- def encounters(realm, character, options = {})
124
- character_request realm, character, options, 'encounters'
123
+ def encounters(realm, character, **options)
124
+ character_request realm, character, 'encounters', options
125
125
  end
126
126
 
127
127
  ##
@@ -134,8 +134,8 @@ module BlizzardApi
134
134
  # @!macro request_options
135
135
  #
136
136
  # @!macro response
137
- def dungeons(realm, character, options = {})
138
- character_request realm, character, options, 'encounters/dungeons'
137
+ def dungeons(realm, character, **options)
138
+ character_request realm, character, 'encounters/dungeons', options
139
139
  end
140
140
 
141
141
  ##
@@ -148,8 +148,8 @@ module BlizzardApi
148
148
  # @!macro request_options
149
149
  #
150
150
  # @!macro response
151
- def raids(realm, character, options = {})
152
- character_request realm, character, options, 'encounters/raids'
151
+ def raids(realm, character, **options)
152
+ character_request realm, character, 'encounters/raids', options
153
153
  end
154
154
 
155
155
  ##
@@ -162,8 +162,8 @@ module BlizzardApi
162
162
  # @!macro request_options
163
163
  #
164
164
  # @!macro response
165
- def equipment(realm, character, options = {})
166
- character_request realm, character, options, 'equipment'
165
+ def equipment(realm, character, **options)
166
+ character_request realm, character, 'equipment', options
167
167
  end
168
168
 
169
169
  ##
@@ -176,8 +176,8 @@ module BlizzardApi
176
176
  # @!macro request_options
177
177
  #
178
178
  # @!macro response
179
- def hunter_pets(realm, character, options = {})
180
- character_request realm, character, options, 'hunter-pets'
179
+ def hunter_pets(realm, character, **options)
180
+ character_request realm, character, 'hunter-pets', options
181
181
  end
182
182
 
183
183
  ##
@@ -190,8 +190,8 @@ module BlizzardApi
190
190
  # @!macro request_options
191
191
  #
192
192
  # @!macro response
193
- def media(realm, character, options = {})
194
- character_request realm, character, options, 'character-media'
193
+ def media(realm, character, **options)
194
+ character_request realm, character, 'character-media', options
195
195
  end
196
196
 
197
197
  ##
@@ -204,8 +204,8 @@ module BlizzardApi
204
204
  # @!macro request_options
205
205
  #
206
206
  # @!macro response
207
- def mythic_keystone_profile(realm, character, options = {})
208
- character_request realm, character, options, 'mythic-keystone-profile'
207
+ def mythic_keystone_profile(realm, character, **options)
208
+ character_request realm, character, 'mythic-keystone-profile', options
209
209
  end
210
210
 
211
211
  ##
@@ -219,8 +219,8 @@ module BlizzardApi
219
219
  # @!macro request_options
220
220
  #
221
221
  # @!macro response
222
- def mythic_keystone_seasons(realm, character, season = nil, options = {})
223
- character_request realm, character, options, "mythic-keystone-profile/season/#{season}"
222
+ def mythic_keystone_seasons(realm, character, season = nil, **options)
223
+ character_request realm, character, "mythic-keystone-profile/season/#{season}", options
224
224
  end
225
225
 
226
226
  ##
@@ -233,8 +233,8 @@ module BlizzardApi
233
233
  # @!macro request_options
234
234
  #
235
235
  # @!macro response
236
- def professions(realm, character, options = {})
237
- character_request realm, character, options, 'professions'
236
+ def professions(realm, character, **options)
237
+ character_request realm, character, 'professions', options
238
238
  end
239
239
 
240
240
  ##
@@ -248,8 +248,8 @@ module BlizzardApi
248
248
  # @!macro request_options
249
249
  #
250
250
  # @!macro response
251
- def status(realm, character, options = {})
252
- character_request realm, character, options, 'status'
251
+ def status(realm, character, **options)
252
+ character_request realm, character, 'status', options
253
253
  end
254
254
 
255
255
  ##
@@ -263,8 +263,8 @@ module BlizzardApi
263
263
  # @!macro request_options
264
264
  #
265
265
  # @!macro response
266
- def pvp_bracket(realm, character, bracket, options = {})
267
- character_request realm, character, options, "pvp-bracket/#{bracket}"
266
+ def pvp_bracket(realm, character, bracket, **options)
267
+ character_request realm, character, "pvp-bracket/#{bracket}", options
268
268
  end
269
269
 
270
270
  ##
@@ -277,8 +277,8 @@ module BlizzardApi
277
277
  # @!macro request_options
278
278
  #
279
279
  # @!macro response
280
- def pvp_summary(realm, character, options = {})
281
- character_request realm, character, options, 'pvp-summary'
280
+ def pvp_summary(realm, character, **options)
281
+ character_request realm, character, 'pvp-summary', options
282
282
  end
283
283
 
284
284
  ##
@@ -292,11 +292,11 @@ module BlizzardApi
292
292
  # @option options [Boolean] :completed Should return completed quests
293
293
  #
294
294
  # @!macro response
295
- def quests(realm, character, options = {})
295
+ def quests(realm, character, **options)
296
296
  completed = options.delete(:completed) || false
297
- return character_request realm, character, options, 'quests/completed' if completed
297
+ return character_request realm, character, 'quests/completed', options if completed
298
298
 
299
- character_request realm, character, options, 'quests'
299
+ character_request realm, character, 'quests', options
300
300
  end
301
301
 
302
302
  ##
@@ -309,8 +309,22 @@ module BlizzardApi
309
309
  # @!macro request_options
310
310
  #
311
311
  # @!macro response
312
- def reputation(realm, character, options = {})
313
- character_request realm, character, options, 'reputations'
312
+ def reputation(realm, character, **options)
313
+ character_request realm, character, 'reputations', options
314
+ end
315
+
316
+ ##
317
+ # Return a character's soulbinds
318
+ #
319
+ # @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-profile-api
320
+ #
321
+ # @param realm [String] The character realm's slug
322
+ # @param character [String] The character name
323
+ # @!macro request_options
324
+ #
325
+ # @!macro response
326
+ def soulbinds(realm, character, **options)
327
+ character_request realm, character, 'soulbinds', options
314
328
  end
315
329
 
316
330
  ##
@@ -323,8 +337,8 @@ module BlizzardApi
323
337
  # @!macro request_options
324
338
  #
325
339
  # @!macro response
326
- def specializations(realm, character, options = {})
327
- character_request realm, character, options, 'specializations'
340
+ def specializations(realm, character, **options)
341
+ character_request realm, character, 'specializations', options
328
342
  end
329
343
 
330
344
  ##
@@ -337,8 +351,8 @@ module BlizzardApi
337
351
  # @!macro request_options
338
352
  #
339
353
  # @!macro response
340
- def statistics(realm, character, options = {})
341
- character_request realm, character, options, 'statistics'
354
+ def statistics(realm, character, **options)
355
+ character_request realm, character, 'statistics', options
342
356
  end
343
357
 
344
358
  ##
@@ -351,8 +365,8 @@ module BlizzardApi
351
365
  # @!macro request_options
352
366
  #
353
367
  # @!macro response
354
- def titles(realm, character, options = {})
355
- character_request realm, character, options, 'titles'
368
+ def titles(realm, character, **options)
369
+ character_request realm, character, 'titles', options
356
370
  end
357
371
 
358
372
  private
@@ -363,7 +377,7 @@ module BlizzardApi
363
377
  opts
364
378
  end
365
379
 
366
- def character_request(realm, character, options = {}, variant = nil)
380
+ def character_request(realm, character, variant = nil, **options)
367
381
  uri = "#{base_url(:profile)}/character/#{string_to_slug(realm)}/#{string_to_slug(character)}"
368
382
  uri += "/#{variant}" if variant
369
383
  api_request uri, default_options.merge(options)