blizzard_api 0.5.0 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
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 +9 -9
  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 +24 -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 +67 -0
  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 +14 -8
  58. data/.gitlab-ci.yml +0 -12
@@ -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)}/keystone-affix/#{id}", default_options.merge(options)
23
23
  end
24
24
 
@@ -18,7 +18,7 @@ module BlizzardApi
18
18
  # @!macro request_options
19
19
  #
20
20
  # @!macro response
21
- def index(connected_realm_id, options = {})
21
+ def index(connected_realm_id, **options)
22
22
  api_request "#{endpoint_uri(connected_realm_id)}/index", default_options(options)
23
23
  end
24
24
 
@@ -30,7 +30,7 @@ module BlizzardApi
30
30
  # @!macro request_options
31
31
  #
32
32
  # @!macro response
33
- def get(connected_realm_id, dungeon_id, period, options = {})
33
+ def get(connected_realm_id, dungeon_id, period, **options)
34
34
  api_request "#{endpoint_uri(connected_realm_id)}/#{dungeon_id}/period/#{period}", default_options(options)
35
35
  end
36
36
 
@@ -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)