hextech 1.0.0

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 (79) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +17 -0
  5. data/CHANGELOG.md +54 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +134 -0
  8. data/LICENSE.md +21 -0
  9. data/README.md +50 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/docs/logo.png +0 -0
  13. data/hextech.gemspec +41 -0
  14. data/lib/hextech/adapter.rb +46 -0
  15. data/lib/hextech/base_struct.rb +13 -0
  16. data/lib/hextech/errors.rb +26 -0
  17. data/lib/hextech/global/account/base.rb +25 -0
  18. data/lib/hextech/global/account/by_puuid.rb +30 -0
  19. data/lib/hextech/global/account/by_riot_id.rb +35 -0
  20. data/lib/hextech/global/account.rb +23 -0
  21. data/lib/hextech/global/active_shard.rb +43 -0
  22. data/lib/hextech/global/response/account/by_puuid.rb +17 -0
  23. data/lib/hextech/global/response/account/by_riot_id.rb +17 -0
  24. data/lib/hextech/global/response/active_shard.rb +15 -0
  25. data/lib/hextech/global.rb +8 -0
  26. data/lib/hextech/league/champion_rotation.rb +39 -0
  27. data/lib/hextech/league/champions.rb +35 -0
  28. data/lib/hextech/league/clash/all_tournaments.rb +29 -0
  29. data/lib/hextech/league/clash/base.rb +25 -0
  30. data/lib/hextech/league/clash/by_summoner_id.rb +30 -0
  31. data/lib/hextech/league/clash/by_tournament_id.rb +30 -0
  32. data/lib/hextech/league/clash/team_by_team_id.rb +30 -0
  33. data/lib/hextech/league/clash/tournament_by_team_id.rb +30 -0
  34. data/lib/hextech/league/clash.rb +38 -0
  35. data/lib/hextech/league/mastery/all_champions.rb +30 -0
  36. data/lib/hextech/league/mastery/base.rb +25 -0
  37. data/lib/hextech/league/mastery/by_champion.rb +31 -0
  38. data/lib/hextech/league/mastery/total_score.rb +26 -0
  39. data/lib/hextech/league/mastery.rb +28 -0
  40. data/lib/hextech/league/match/base.rb +25 -0
  41. data/lib/hextech/league/match/by_match_id.rb +26 -0
  42. data/lib/hextech/league/match/by_puuid.rb +26 -0
  43. data/lib/hextech/league/match/timeline.rb +26 -0
  44. data/lib/hextech/league/match.rb +28 -0
  45. data/lib/hextech/league/patches.rb +23 -0
  46. data/lib/hextech/league/response/active_games.rb +43 -0
  47. data/lib/hextech/league/response/champion_rotation.rb +15 -0
  48. data/lib/hextech/league/response/champions.rb +60 -0
  49. data/lib/hextech/league/response/clash/player.rb +18 -0
  50. data/lib/hextech/league/response/clash/team.rb +27 -0
  51. data/lib/hextech/league/response/clash/tournament.rb +25 -0
  52. data/lib/hextech/league/response/featured_games.rb +47 -0
  53. data/lib/hextech/league/response/mastery.rb +21 -0
  54. data/lib/hextech/league/response/status.rb +17 -0
  55. data/lib/hextech/league/response/summoner.rb +19 -0
  56. data/lib/hextech/league/spectator/active_games.rb +30 -0
  57. data/lib/hextech/league/spectator/base.rb +25 -0
  58. data/lib/hextech/league/spectator/featured_games.rb +29 -0
  59. data/lib/hextech/league/spectator.rb +23 -0
  60. data/lib/hextech/league/status.rb +39 -0
  61. data/lib/hextech/league/summoner/base.rb +29 -0
  62. data/lib/hextech/league/summoner/by_account_id.rb +26 -0
  63. data/lib/hextech/league/summoner/by_puuid.rb +26 -0
  64. data/lib/hextech/league/summoner/by_summoner_id.rb +26 -0
  65. data/lib/hextech/league/summoner/by_summoner_name.rb +30 -0
  66. data/lib/hextech/league/summoner.rb +33 -0
  67. data/lib/hextech/league/third_party_code.rb +36 -0
  68. data/lib/hextech/league.rb +27 -0
  69. data/lib/hextech/mixins/argument_checks.rb +13 -0
  70. data/lib/hextech/mixins/callable.rb +17 -0
  71. data/lib/hextech/mixins/transform_keys.rb +63 -0
  72. data/lib/hextech/response.rb +43 -0
  73. data/lib/hextech/send_request.rb +43 -0
  74. data/lib/hextech/valorant/response/status.rb +67 -0
  75. data/lib/hextech/valorant/status.rb +38 -0
  76. data/lib/hextech/valorant.rb +4 -0
  77. data/lib/hextech/version.rb +5 -0
  78. data/lib/hextech.rb +19 -0
  79. metadata +265 -0
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hextech
4
+ module Mixins
5
+ module TransformKeys
6
+ def to_symbolized_snake_keys(value = self)
7
+ case value
8
+ when Array
9
+ value.map { |v| to_symbolized_snake_keys(v) }
10
+ when Hash
11
+ snake_hash(value)
12
+ else
13
+ value
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def snake_hash(value)
20
+ value.map { |k, v| [symbolize_and_underscore_key(k), to_symbolized_snake_keys(v)] }.to_h
21
+ end
22
+
23
+ def symbolize_and_underscore_key(key)
24
+ key_to_transform = case key
25
+ when Symbol
26
+ underscore(key.to_s)
27
+ when String
28
+ underscore(key)
29
+ else
30
+ key
31
+ end
32
+
33
+ key_to_transform.to_sym
34
+ end
35
+
36
+ def underscore(string)
37
+ @__memoize_underscore ||= {}
38
+
39
+ return @__memoize_underscore[string] if @__memoize_underscore[string]
40
+
41
+ @__memoize_underscore[string] =
42
+ string.tr('::', '/')
43
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
44
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
45
+ .tr('-', '_')
46
+ .downcase
47
+ @__memoize_underscore[string]
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ class Hash
54
+
55
+ include Hextech::Mixins::TransformKeys
56
+
57
+ end
58
+
59
+ class Array
60
+
61
+ include Hextech::Mixins::TransformKeys
62
+
63
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hextech
4
+ class Response
5
+
6
+ def initialize(response, response_class)
7
+ @response = response
8
+ @response_class = response_class
9
+ end
10
+
11
+ def call
12
+ parse_response
13
+ .then { wrap_response(_1) }
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :response, :response_class
19
+
20
+ def parse_response
21
+ JSON.parse(response, symbolize_names: true).then { format_response(_1) }
22
+ rescue JSON::ParserError, TypeError
23
+ response
24
+ end
25
+
26
+ def format_response(parsed_response)
27
+ return parsed_response if parsed_response.is_a?(Integer)
28
+
29
+ parsed_response.to_symbolized_snake_keys
30
+ end
31
+
32
+ def wrap_response(response)
33
+ return response unless response_class
34
+
35
+ if response.is_a?(Array)
36
+ response.map { response_class.new(_1) }
37
+ else
38
+ response_class.new(response)
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hextech
4
+ class SendRequest
5
+
6
+ STATIC_HOST = 'https://ddragon.leagueoflegends.com'
7
+
8
+ def initialize(host:, api_key:)
9
+ @host = host
10
+ @api_key = api_key
11
+ end
12
+
13
+ def call(path)
14
+ client.get(path)
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :host, :api_key
20
+
21
+ def static_data?
22
+ STATIC_HOST == host
23
+ end
24
+
25
+ def enable_logger?
26
+ ENV.fetch('DEBUG_LOGGER', 'false') == 'true'
27
+ end
28
+
29
+ def client
30
+ Faraday.new(url: host) do |faraday|
31
+ faraday.params['api_key'] = api_key unless static_data?
32
+ faraday.use Hextech::Errors
33
+
34
+ if enable_logger?
35
+ faraday.response :logger, nil, { headers: true, bodies: true } do |logger|
36
+ logger.filter(/(api_key=)([a-zA-Z0-9-]*)/, '\1[REMOVED]')
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hextech
4
+ module Valorant
5
+ module Response
6
+ class Status < Hextech::BaseStruct
7
+
8
+ attribute :id, Types::String
9
+ attribute :name, Types::String
10
+ attribute :locales, Types::Array
11
+
12
+ attribute :maintenances, Types::Array do
13
+ attribute :id, Types::Integer
14
+ attribute :maintenance_status, Types::String
15
+ attribute :incident_severity, Types::String.optional
16
+
17
+ attribute :titles, Types::Array do
18
+ attribute :locale, Types::String
19
+ attribute :content, Types::String
20
+ end
21
+
22
+ attribute :updates, Types::Array do
23
+ attribute :id, Types::Integer
24
+ attribute :author, Types::String
25
+ attribute :publish, Types::Bool
26
+ attribute :publish_locations, Types::Array
27
+ attribute :translations, Types::Array
28
+ attribute :created_at, Types::String
29
+ attribute :updated_at, Types::String
30
+ end
31
+
32
+ attribute :created_at, Types::String
33
+ attribute :archive_at, Types::String.optional
34
+ attribute :updated_at, Types::String.optional
35
+ attribute :platforms, Types::Array
36
+ end
37
+
38
+ attribute :incidents, Types::Array do
39
+ attribute :id, Types::Integer
40
+ attribute :maintenance_status, Types::String
41
+ attribute :incident_severity, Types::String
42
+
43
+ attribute :titles, Types::Array do
44
+ attribute :locale, Types::String
45
+ attribute :content, Types::String
46
+ end
47
+
48
+ attribute :updates, Types::Array do
49
+ attribute :id, Types::Integer
50
+ attribute :author, Types::String
51
+ attribute :publish, Types::Bool
52
+ attribute :publish_locations, Types::Array
53
+ attribute :translations, Types::Array
54
+ attribute :created_at, Types::String
55
+ attribute :updated_at, Types::String.optional
56
+ end
57
+
58
+ attribute :created_at, Types::String
59
+ attribute :archive_at, Types::String
60
+ attribute :updated_at, Types::String.optional
61
+ attribute :platforms, Types::Array
62
+ end
63
+
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hextech
4
+ module Valorant
5
+ class Status < Hextech::Adapter
6
+
7
+ REGIONS = %w[ap br eu kr latam na].freeze
8
+
9
+ def initialize(region: 'eu')
10
+ @region = region
11
+
12
+ super()
13
+ end
14
+
15
+ def call
16
+ validate_collection_for(collection: REGIONS, option: region)
17
+
18
+ super
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :region
24
+
25
+ def host
26
+ "https://#{region}.api.riotgames.com"
27
+ end
28
+
29
+ def path
30
+ '/val/status/v1/platform-data'
31
+ end
32
+
33
+ def response_class
34
+ Hextech::Valorant::Response::Status
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'valorant/response/status'
4
+ require_relative 'valorant/status'
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hextech
4
+ VERSION = '1.0.0'
5
+ end
data/lib/hextech.rb ADDED
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dry-struct'
4
+ require 'faraday'
5
+ require 'open-uri'
6
+
7
+ require 'hextech/mixins/argument_checks'
8
+ require 'hextech/mixins/callable'
9
+ require 'hextech/mixins/transform_keys'
10
+
11
+ require 'hextech/adapter'
12
+ require 'hextech/send_request'
13
+ require 'hextech/response'
14
+ require 'hextech/base_struct'
15
+ require 'hextech/errors'
16
+ require 'hextech/global'
17
+ require 'hextech/league'
18
+ require 'hextech/version'
19
+ require 'hextech/valorant'
metadata ADDED
@@ -0,0 +1,265 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hextech
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Lily Stoney
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-12-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-struct
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.4.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.4.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: climate_control
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.13.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.13.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.9.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.9.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.93.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.93.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.43.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.43.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.21.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.21.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: vcr
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 6.0.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 6.0.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: webmock
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 3.14.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 3.14.0
153
+ description: An easy to use ruby wrapper for Riot API endpoints for League, Valorant,Legends
154
+ of Runeterra, etc.
155
+ email:
156
+ - lily@lilypad.info
157
+ executables: []
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - ".gitignore"
162
+ - ".rspec"
163
+ - ".rubocop.yml"
164
+ - CHANGELOG.md
165
+ - Gemfile
166
+ - Gemfile.lock
167
+ - LICENSE.md
168
+ - README.md
169
+ - bin/console
170
+ - bin/setup
171
+ - docs/logo.png
172
+ - hextech.gemspec
173
+ - lib/hextech.rb
174
+ - lib/hextech/adapter.rb
175
+ - lib/hextech/base_struct.rb
176
+ - lib/hextech/errors.rb
177
+ - lib/hextech/global.rb
178
+ - lib/hextech/global/account.rb
179
+ - lib/hextech/global/account/base.rb
180
+ - lib/hextech/global/account/by_puuid.rb
181
+ - lib/hextech/global/account/by_riot_id.rb
182
+ - lib/hextech/global/active_shard.rb
183
+ - lib/hextech/global/response/account/by_puuid.rb
184
+ - lib/hextech/global/response/account/by_riot_id.rb
185
+ - lib/hextech/global/response/active_shard.rb
186
+ - lib/hextech/league.rb
187
+ - lib/hextech/league/champion_rotation.rb
188
+ - lib/hextech/league/champions.rb
189
+ - lib/hextech/league/clash.rb
190
+ - lib/hextech/league/clash/all_tournaments.rb
191
+ - lib/hextech/league/clash/base.rb
192
+ - lib/hextech/league/clash/by_summoner_id.rb
193
+ - lib/hextech/league/clash/by_tournament_id.rb
194
+ - lib/hextech/league/clash/team_by_team_id.rb
195
+ - lib/hextech/league/clash/tournament_by_team_id.rb
196
+ - lib/hextech/league/mastery.rb
197
+ - lib/hextech/league/mastery/all_champions.rb
198
+ - lib/hextech/league/mastery/base.rb
199
+ - lib/hextech/league/mastery/by_champion.rb
200
+ - lib/hextech/league/mastery/total_score.rb
201
+ - lib/hextech/league/match.rb
202
+ - lib/hextech/league/match/base.rb
203
+ - lib/hextech/league/match/by_match_id.rb
204
+ - lib/hextech/league/match/by_puuid.rb
205
+ - lib/hextech/league/match/timeline.rb
206
+ - lib/hextech/league/patches.rb
207
+ - lib/hextech/league/response/active_games.rb
208
+ - lib/hextech/league/response/champion_rotation.rb
209
+ - lib/hextech/league/response/champions.rb
210
+ - lib/hextech/league/response/clash/player.rb
211
+ - lib/hextech/league/response/clash/team.rb
212
+ - lib/hextech/league/response/clash/tournament.rb
213
+ - lib/hextech/league/response/featured_games.rb
214
+ - lib/hextech/league/response/mastery.rb
215
+ - lib/hextech/league/response/status.rb
216
+ - lib/hextech/league/response/summoner.rb
217
+ - lib/hextech/league/spectator.rb
218
+ - lib/hextech/league/spectator/active_games.rb
219
+ - lib/hextech/league/spectator/base.rb
220
+ - lib/hextech/league/spectator/featured_games.rb
221
+ - lib/hextech/league/status.rb
222
+ - lib/hextech/league/summoner.rb
223
+ - lib/hextech/league/summoner/base.rb
224
+ - lib/hextech/league/summoner/by_account_id.rb
225
+ - lib/hextech/league/summoner/by_puuid.rb
226
+ - lib/hextech/league/summoner/by_summoner_id.rb
227
+ - lib/hextech/league/summoner/by_summoner_name.rb
228
+ - lib/hextech/league/third_party_code.rb
229
+ - lib/hextech/mixins/argument_checks.rb
230
+ - lib/hextech/mixins/callable.rb
231
+ - lib/hextech/mixins/transform_keys.rb
232
+ - lib/hextech/response.rb
233
+ - lib/hextech/send_request.rb
234
+ - lib/hextech/valorant.rb
235
+ - lib/hextech/valorant/response/status.rb
236
+ - lib/hextech/valorant/status.rb
237
+ - lib/hextech/version.rb
238
+ homepage: https://github.com/LilyStoney/hextech
239
+ licenses:
240
+ - MIT
241
+ metadata:
242
+ bug_tracker_uri: https://github.com/lilystoney/hextech/issues
243
+ changelog_uri: https://github.com/lilystoney/hextech/blob/master/CHANGELOG.md
244
+ github_repo: ssh://github.com/lilystoney/hextech
245
+ source_code_uri: https://github.com/lilystoney/hextech
246
+ post_install_message:
247
+ rdoc_options: []
248
+ require_paths:
249
+ - lib
250
+ required_ruby_version: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: 2.7.0
255
+ required_rubygems_version: !ruby/object:Gem::Requirement
256
+ requirements:
257
+ - - ">="
258
+ - !ruby/object:Gem::Version
259
+ version: '0'
260
+ requirements: []
261
+ rubygems_version: 3.1.4
262
+ signing_key:
263
+ specification_version: 4
264
+ summary: Ruby Wrapper for the Riot API endpoints.
265
+ test_files: []