metal_archives 2.2.0 → 2.2.3

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 (61) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +46 -0
  3. data/.github/workflows/release.yml +69 -0
  4. data/.gitignore +6 -6
  5. data/.overcommit.yml +35 -0
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +54 -8
  8. data/.rubocop_todo.yml +92 -0
  9. data/CHANGELOG.md +22 -0
  10. data/Gemfile +1 -1
  11. data/LICENSE.md +1 -1
  12. data/README.md +35 -64
  13. data/Rakefile +8 -7
  14. data/bin/console +41 -0
  15. data/bin/setup +8 -0
  16. data/docker-compose.yml +14 -0
  17. data/lib/metal_archives.rb +48 -29
  18. data/lib/metal_archives/{utils/collection.rb → collection.rb} +0 -0
  19. data/lib/metal_archives/configuration.rb +9 -33
  20. data/lib/metal_archives/{error.rb → errors.rb} +0 -0
  21. data/lib/metal_archives/http_client.rb +13 -8
  22. data/lib/metal_archives/{utils/lru_cache.rb → lru_cache.rb} +0 -0
  23. data/lib/metal_archives/middleware/cache_check.rb +2 -4
  24. data/lib/metal_archives/middleware/encoding.rb +2 -2
  25. data/lib/metal_archives/middleware/headers.rb +5 -5
  26. data/lib/metal_archives/middleware/rewrite_endpoint.rb +2 -2
  27. data/lib/metal_archives/models/artist.rb +40 -24
  28. data/lib/metal_archives/models/band.rb +47 -29
  29. data/lib/metal_archives/models/base_model.rb +64 -61
  30. data/lib/metal_archives/models/label.rb +11 -11
  31. data/lib/metal_archives/models/release.rb +17 -15
  32. data/lib/metal_archives/{utils/nil_date.rb → nil_date.rb} +10 -18
  33. data/lib/metal_archives/parsers/artist.rb +62 -31
  34. data/lib/metal_archives/parsers/band.rb +97 -74
  35. data/lib/metal_archives/parsers/label.rb +21 -21
  36. data/lib/metal_archives/parsers/parser.rb +23 -8
  37. data/lib/metal_archives/parsers/release.rb +77 -72
  38. data/lib/metal_archives/{utils/range.rb → range.rb} +5 -2
  39. data/lib/metal_archives/version.rb +12 -1
  40. data/metal_archives.env.example +7 -0
  41. data/metal_archives.gemspec +40 -28
  42. data/nginx/default.conf +60 -0
  43. metadata +126 -65
  44. data/.travis.yml +0 -12
  45. data/spec/configuration_spec.rb +0 -96
  46. data/spec/factories/artist_factory.rb +0 -37
  47. data/spec/factories/band_factory.rb +0 -60
  48. data/spec/factories/nil_date_factory.rb +0 -9
  49. data/spec/factories/range_factory.rb +0 -8
  50. data/spec/models/artist_spec.rb +0 -138
  51. data/spec/models/band_spec.rb +0 -164
  52. data/spec/models/base_model_spec.rb +0 -219
  53. data/spec/models/release_spec.rb +0 -133
  54. data/spec/parser_spec.rb +0 -19
  55. data/spec/spec_helper.rb +0 -111
  56. data/spec/support/factory_girl.rb +0 -5
  57. data/spec/support/metal_archives.rb +0 -33
  58. data/spec/utils/collection_spec.rb +0 -72
  59. data/spec/utils/lru_cache_spec.rb +0 -53
  60. data/spec/utils/nil_date_spec.rb +0 -156
  61. data/spec/utils/range_spec.rb +0 -62
@@ -0,0 +1,60 @@
1
+ proxy_cache_path /cache levels=1:2 keys_zone=metal_archives:10m max_size=10g
2
+ inactive=6M use_temp_path=off;
3
+
4
+ limit_req_zone $binary_remote_addr zone=ma_limit_req:10m rate=2r/s;
5
+
6
+ server {
7
+ listen 80;
8
+
9
+ # Don't send the NGINX version number in error pages and Server header
10
+ server_tokens off;
11
+
12
+ # Don't process logs
13
+ access_log off;
14
+
15
+ # Proxy to MA server
16
+ location / {
17
+ proxy_pass https://www.metal-archives.com;
18
+
19
+ sub_filter www.metal-archives.com localhost;
20
+ sub_filter_once off;
21
+
22
+ proxy_redirect off;
23
+ proxy_set_header Host www.metal-archives.com;
24
+ proxy_set_header X-Forwarded-Host $host;
25
+ proxy_set_header X-Forwarded-Server $host;
26
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
27
+ proxy_set_header X-Real-IP $remote_addr;
28
+
29
+ proxy_ssl_certificate /etc/nginx/auth.d/client.pem;
30
+ proxy_ssl_certificate_key /etc/nginx/auth.d/client.key;
31
+ proxy_ssl_server_name on;
32
+ proxy_ssl_session_reuse on;
33
+
34
+ proxy_ignore_headers X-Accel-Expires;
35
+ proxy_ignore_headers Expires;
36
+ proxy_ignore_headers Cache-Control;
37
+ proxy_ignore_headers Set-Cookie;
38
+
39
+ proxy_hide_header Set-Cookie;
40
+ proxy_hide_header Pragma;
41
+
42
+ # Limit HTTP requests
43
+ limit_req zone=ma_limit_req burst=5;
44
+ limit_req_status 429;
45
+ limit_conn_status 429;
46
+
47
+ # Cache responses
48
+ proxy_cache metal_archives;
49
+ proxy_cache_valid 200 301 302 30d;
50
+ proxy_cache_valid 404 7d;
51
+ expires 30d;
52
+
53
+ proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
54
+ proxy_cache_background_update on;
55
+ proxy_cache_lock on;
56
+ proxy_cache_bypass $cookie_nocache $arg_nocache;
57
+
58
+ add_header X-Cache-Status $upstream_cache_status;
59
+ }
60
+ }
metadata CHANGED
@@ -1,15 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metal_archives
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Dejonckheere
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-13 00:00:00.000000000 Z
11
+ date: 2020-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: countries
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '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: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday_throttler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: zeitwerk
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
13
83
  - !ruby/object:Gem::Dependency
14
84
  name: byebug
15
85
  requirement: !ruby/object:Gem::Requirement
@@ -25,7 +95,7 @@ dependencies:
25
95
  - !ruby/object:Gem::Version
26
96
  version: '0'
27
97
  - !ruby/object:Gem::Dependency
28
- name: rake
98
+ name: debase
29
99
  requirement: !ruby/object:Gem::Requirement
30
100
  requirements:
31
101
  - - ">="
@@ -39,7 +109,7 @@ dependencies:
39
109
  - !ruby/object:Gem::Version
40
110
  version: '0'
41
111
  - !ruby/object:Gem::Dependency
42
- name: rdoc
112
+ name: factory_bot
43
113
  requirement: !ruby/object:Gem::Requirement
44
114
  requirements:
45
115
  - - ">="
@@ -53,7 +123,7 @@ dependencies:
53
123
  - !ruby/object:Gem::Version
54
124
  version: '0'
55
125
  - !ruby/object:Gem::Dependency
56
- name: rspec
126
+ name: fasterer
57
127
  requirement: !ruby/object:Gem::Requirement
58
128
  requirements:
59
129
  - - ">="
@@ -67,7 +137,7 @@ dependencies:
67
137
  - !ruby/object:Gem::Version
68
138
  version: '0'
69
139
  - !ruby/object:Gem::Dependency
70
- name: factory_girl
140
+ name: ffaker
71
141
  requirement: !ruby/object:Gem::Requirement
72
142
  requirements:
73
143
  - - ">="
@@ -81,7 +151,7 @@ dependencies:
81
151
  - !ruby/object:Gem::Version
82
152
  version: '0'
83
153
  - !ruby/object:Gem::Dependency
84
- name: faker
154
+ name: flay
85
155
  requirement: !ruby/object:Gem::Requirement
86
156
  requirements:
87
157
  - - ">="
@@ -95,7 +165,7 @@ dependencies:
95
165
  - !ruby/object:Gem::Version
96
166
  version: '0'
97
167
  - !ruby/object:Gem::Dependency
98
- name: rubocop
168
+ name: overcommit
99
169
  requirement: !ruby/object:Gem::Requirement
100
170
  requirements:
101
171
  - - ">="
@@ -109,7 +179,7 @@ dependencies:
109
179
  - !ruby/object:Gem::Version
110
180
  version: '0'
111
181
  - !ruby/object:Gem::Dependency
112
- name: coveralls
182
+ name: pronto
113
183
  requirement: !ruby/object:Gem::Requirement
114
184
  requirements:
115
185
  - - ">="
@@ -123,7 +193,7 @@ dependencies:
123
193
  - !ruby/object:Gem::Version
124
194
  version: '0'
125
195
  - !ruby/object:Gem::Dependency
126
- name: debase
196
+ name: rake
127
197
  requirement: !ruby/object:Gem::Requirement
128
198
  requirements:
129
199
  - - ">="
@@ -137,13 +207,13 @@ dependencies:
137
207
  - !ruby/object:Gem::Version
138
208
  version: '0'
139
209
  - !ruby/object:Gem::Dependency
140
- name: faraday
210
+ name: rdoc
141
211
  requirement: !ruby/object:Gem::Requirement
142
212
  requirements:
143
213
  - - ">="
144
214
  - !ruby/object:Gem::Version
145
215
  version: '0'
146
- type: :runtime
216
+ type: :development
147
217
  prerelease: false
148
218
  version_requirements: !ruby/object:Gem::Requirement
149
219
  requirements:
@@ -151,13 +221,13 @@ dependencies:
151
221
  - !ruby/object:Gem::Version
152
222
  version: '0'
153
223
  - !ruby/object:Gem::Dependency
154
- name: faraday_throttler
224
+ name: reek
155
225
  requirement: !ruby/object:Gem::Requirement
156
226
  requirements:
157
227
  - - ">="
158
228
  - !ruby/object:Gem::Version
159
229
  version: '0'
160
- type: :runtime
230
+ type: :development
161
231
  prerelease: false
162
232
  version_requirements: !ruby/object:Gem::Requirement
163
233
  requirements:
@@ -165,13 +235,13 @@ dependencies:
165
235
  - !ruby/object:Gem::Version
166
236
  version: '0'
167
237
  - !ruby/object:Gem::Dependency
168
- name: nokogiri
238
+ name: rspec
169
239
  requirement: !ruby/object:Gem::Requirement
170
240
  requirements:
171
241
  - - ">="
172
242
  - !ruby/object:Gem::Version
173
243
  version: '0'
174
- type: :runtime
244
+ type: :development
175
245
  prerelease: false
176
246
  version_requirements: !ruby/object:Gem::Requirement
177
247
  requirements:
@@ -179,39 +249,64 @@ dependencies:
179
249
  - !ruby/object:Gem::Version
180
250
  version: '0'
181
251
  - !ruby/object:Gem::Dependency
182
- name: countries
252
+ name: rubocop
183
253
  requirement: !ruby/object:Gem::Requirement
184
254
  requirements:
185
255
  - - ">="
186
256
  - !ruby/object:Gem::Version
187
257
  version: '0'
188
- type: :runtime
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: webmock
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
189
273
  prerelease: false
190
274
  version_requirements: !ruby/object:Gem::Requirement
191
275
  requirements:
192
276
  - - ">="
193
277
  - !ruby/object:Gem::Version
194
278
  version: '0'
195
- description:
279
+ description: Ruby API layer that transparently queries, scrapes and caches Metal Archives'
280
+ website
196
281
  email:
197
282
  - florian@floriandejonckheere.be
198
- executables: []
283
+ executables:
284
+ - console
285
+ - setup
199
286
  extensions: []
200
287
  extra_rdoc_files: []
201
288
  files:
289
+ - ".github/workflows/ci.yml"
290
+ - ".github/workflows/release.yml"
202
291
  - ".gitignore"
292
+ - ".overcommit.yml"
203
293
  - ".rspec"
204
294
  - ".rubocop.yml"
205
- - ".travis.yml"
295
+ - ".rubocop_todo.yml"
206
296
  - CHANGELOG.md
207
297
  - Gemfile
208
298
  - LICENSE.md
209
299
  - README.md
210
300
  - Rakefile
301
+ - bin/console
302
+ - bin/setup
303
+ - docker-compose.yml
211
304
  - lib/metal_archives.rb
305
+ - lib/metal_archives/collection.rb
212
306
  - lib/metal_archives/configuration.rb
213
- - lib/metal_archives/error.rb
307
+ - lib/metal_archives/errors.rb
214
308
  - lib/metal_archives/http_client.rb
309
+ - lib/metal_archives/lru_cache.rb
215
310
  - lib/metal_archives/middleware/cache_check.rb
216
311
  - lib/metal_archives/middleware/encoding.rb
217
312
  - lib/metal_archives/middleware/headers.rb
@@ -221,39 +316,23 @@ files:
221
316
  - lib/metal_archives/models/base_model.rb
222
317
  - lib/metal_archives/models/label.rb
223
318
  - lib/metal_archives/models/release.rb
319
+ - lib/metal_archives/nil_date.rb
224
320
  - lib/metal_archives/parsers/artist.rb
225
321
  - lib/metal_archives/parsers/band.rb
226
322
  - lib/metal_archives/parsers/label.rb
227
323
  - lib/metal_archives/parsers/parser.rb
228
324
  - lib/metal_archives/parsers/release.rb
229
- - lib/metal_archives/utils/collection.rb
230
- - lib/metal_archives/utils/lru_cache.rb
231
- - lib/metal_archives/utils/nil_date.rb
232
- - lib/metal_archives/utils/range.rb
325
+ - lib/metal_archives/range.rb
233
326
  - lib/metal_archives/version.rb
327
+ - metal_archives.env.example
234
328
  - metal_archives.gemspec
329
+ - nginx/default.conf
235
330
  - publish.sh
236
- - spec/configuration_spec.rb
237
- - spec/factories/artist_factory.rb
238
- - spec/factories/band_factory.rb
239
- - spec/factories/nil_date_factory.rb
240
- - spec/factories/range_factory.rb
241
- - spec/models/artist_spec.rb
242
- - spec/models/band_spec.rb
243
- - spec/models/base_model_spec.rb
244
- - spec/models/release_spec.rb
245
- - spec/parser_spec.rb
246
- - spec/spec_helper.rb
247
- - spec/support/factory_girl.rb
248
- - spec/support/metal_archives.rb
249
- - spec/utils/collection_spec.rb
250
- - spec/utils/lru_cache_spec.rb
251
- - spec/utils/nil_date_spec.rb
252
- - spec/utils/range_spec.rb
253
331
  homepage: http://github.com/floriandejonckheere/metal_archives
254
332
  licenses:
255
333
  - MIT
256
- metadata: {}
334
+ metadata:
335
+ source_code_uri: https://github.com/floriandejonckheere/metal_archives
257
336
  post_install_message:
258
337
  rdoc_options: []
259
338
  require_paths:
@@ -262,33 +341,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
262
341
  requirements:
263
342
  - - ">="
264
343
  - !ruby/object:Gem::Version
265
- version: '0'
344
+ version: 2.5.8
266
345
  required_rubygems_version: !ruby/object:Gem::Requirement
267
346
  requirements:
268
347
  - - ">="
269
348
  - !ruby/object:Gem::Version
270
349
  version: '0'
271
350
  requirements: []
272
- rubyforge_project:
273
- rubygems_version: 2.6.12
351
+ rubygems_version: 3.1.2
274
352
  signing_key:
275
353
  specification_version: 4
276
354
  summary: Metal Archives Ruby API
277
- test_files:
278
- - spec/configuration_spec.rb
279
- - spec/factories/artist_factory.rb
280
- - spec/factories/band_factory.rb
281
- - spec/factories/nil_date_factory.rb
282
- - spec/factories/range_factory.rb
283
- - spec/models/artist_spec.rb
284
- - spec/models/band_spec.rb
285
- - spec/models/base_model_spec.rb
286
- - spec/models/release_spec.rb
287
- - spec/parser_spec.rb
288
- - spec/spec_helper.rb
289
- - spec/support/factory_girl.rb
290
- - spec/support/metal_archives.rb
291
- - spec/utils/collection_spec.rb
292
- - spec/utils/lru_cache_spec.rb
293
- - spec/utils/nil_date_spec.rb
294
- - spec/utils/range_spec.rb
355
+ test_files: []
@@ -1,12 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.1.10
6
- - 2.2.7
7
- - 2.3.4
8
- - 2.4.1
9
- env:
10
- - RAILS_ENV=test CI=true TRAVIS=true
11
- script:
12
- - bundle exec rspec
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe MetalArchives::Configuration do
4
- describe 'properties' do
5
- it 'has the correct properties' do
6
- expect(subject).to respond_to :app_name
7
- expect(subject).to respond_to :app_name=
8
- expect(subject).to respond_to :app_version
9
- expect(subject).to respond_to :app_version=
10
- expect(subject).to respond_to :app_contact
11
- expect(subject).to respond_to :app_contact=
12
- expect(subject).to respond_to :endpoint
13
- expect(subject).to respond_to :endpoint=
14
- expect(subject).to respond_to :default_endpoint
15
- expect(subject).to respond_to :middleware
16
- expect(subject).to respond_to :middleware=
17
- expect(subject).to respond_to :request_rate
18
- expect(subject).to respond_to :request_rate=
19
- expect(subject).to respond_to :request_timeout
20
- expect(subject).to respond_to :request_timeout=
21
- expect(subject).to respond_to :logger
22
- expect(subject).to respond_to :logger=
23
- expect(subject).to respond_to :cache_size
24
- expect(subject).to respond_to :cache_size=
25
- end
26
-
27
- it 'has default properties' do
28
- expect(subject.default_endpoint).to eq 'https://www.metal-archives.com/'
29
- expect(subject.logger).not_to be_nil
30
- expect(subject.cache_size).to be_an Integer
31
- end
32
-
33
- it 'overrides defaults' do
34
- subject.endpoint = 'http://my-proxy.com/'
35
- logger = Logger.new STDERR
36
- subject.logger = logger
37
- subject.cache_size = 0
38
-
39
- expect(subject.endpoint).to eq 'http://my-proxy.com/'
40
- expect(subject.logger).to be logger
41
- expect(subject.cache_size).to eq 0
42
- end
43
- end
44
-
45
- describe 'configuration' do
46
- after(:each) do
47
- # Reset configuration
48
- load 'support/metal_archives.rb'
49
- end
50
-
51
- it 'is invalid without app_name' do
52
- proc = -> do
53
- MetalArchives.configure do |c|
54
- c.app_version = MetalArchives::VERSION
55
- c.app_contact = 'user@example.com'
56
- end
57
- end
58
-
59
- expect(proc).to raise_error MetalArchives::Errors::InvalidConfigurationError
60
- end
61
-
62
- it 'is invalid without app_version' do
63
- proc = -> do
64
- MetalArchives.configure do |c|
65
- c.app_name = 'MetalArchivesGemTestSuite'
66
- c.app_contact = 'user@example.com'
67
- end
68
- end
69
-
70
- expect(proc).to raise_error MetalArchives::Errors::InvalidConfigurationError
71
- end
72
-
73
- it 'is invalid without app_contact' do
74
- proc = -> do
75
- MetalArchives.configure do |c|
76
- c.app_name = 'MetalArchivesGemTestSuite'
77
- c.app_version = MetalArchives::VERSION
78
- end
79
- end
80
-
81
- expect(proc).to raise_error MetalArchives::Errors::InvalidConfigurationError
82
- end
83
-
84
- it 'is valid' do
85
- proc = -> do
86
- MetalArchives.configure do |c|
87
- c.app_name = 'MetalArchivesGemTestSuite'
88
- c.app_version = MetalArchives::VERSION
89
- c.app_contact = 'user@example.com'
90
- end
91
- end
92
-
93
- expect(proc).not_to raise_error
94
- end
95
- end
96
- end