metal_archives 3.0.1 → 3.1.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +59 -12
- data/.rspec +1 -0
- data/.rubocop.yml +34 -20
- data/CHANGELOG.md +4 -0
- data/LICENSE.md +17 -4
- data/README.md +29 -14
- data/bin/console +8 -11
- data/config/inflections.rb +7 -0
- data/config/initializers/.keep +0 -0
- data/docker-compose.yml +10 -1
- data/lib/metal_archives.rb +56 -22
- data/lib/metal_archives/cache/base.rb +40 -0
- data/lib/metal_archives/cache/memory.rb +68 -0
- data/lib/metal_archives/cache/null.rb +22 -0
- data/lib/metal_archives/cache/redis.rb +49 -0
- data/lib/metal_archives/collection.rb +3 -5
- data/lib/metal_archives/configuration.rb +28 -21
- data/lib/metal_archives/errors.rb +9 -1
- data/lib/metal_archives/http_client.rb +42 -46
- data/lib/metal_archives/models/artist.rb +55 -26
- data/lib/metal_archives/models/band.rb +43 -36
- data/lib/metal_archives/models/{base_model.rb → base.rb} +53 -53
- data/lib/metal_archives/models/label.rb +7 -8
- data/lib/metal_archives/models/release.rb +11 -17
- data/lib/metal_archives/parsers/artist.rb +40 -35
- data/lib/metal_archives/parsers/band.rb +73 -29
- data/lib/metal_archives/parsers/base.rb +14 -0
- data/lib/metal_archives/parsers/country.rb +21 -0
- data/lib/metal_archives/parsers/date.rb +31 -0
- data/lib/metal_archives/parsers/genre.rb +67 -0
- data/lib/metal_archives/parsers/label.rb +21 -13
- data/lib/metal_archives/parsers/parser.rb +15 -77
- data/lib/metal_archives/parsers/release.rb +22 -18
- data/lib/metal_archives/parsers/year.rb +29 -0
- data/lib/metal_archives/version.rb +3 -3
- data/metal_archives.env.example +7 -4
- data/metal_archives.gemspec +7 -4
- data/nginx/default.conf +2 -2
- metadata +76 -32
- data/.github/workflows/release.yml +0 -69
- data/.rubocop_todo.yml +0 -92
- data/lib/metal_archives/lru_cache.rb +0 -61
- data/lib/metal_archives/middleware/cache_check.rb +0 -18
- data/lib/metal_archives/middleware/encoding.rb +0 -16
- data/lib/metal_archives/middleware/headers.rb +0 -38
- data/lib/metal_archives/middleware/rewrite_endpoint.rb +0 -38
- data/lib/metal_archives/nil_date.rb +0 -91
- data/lib/metal_archives/range.rb +0 -69
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "faraday"
|
4
|
-
|
5
|
-
module MetalArchives
|
6
|
-
module Middleware
|
7
|
-
##
|
8
|
-
# Log cache status
|
9
|
-
#
|
10
|
-
class CacheCheck < Faraday::Response::Middleware # :nodoc:
|
11
|
-
def on_complete(env)
|
12
|
-
return unless MetalArchives.config.endpoint
|
13
|
-
|
14
|
-
MetalArchives.config.logger.info "Cache #{env[:response_headers]['x-cache-status'].downcase} for #{env.url}" if env[:response_headers].key? "x-cache-status"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "faraday"
|
4
|
-
|
5
|
-
module MetalArchives
|
6
|
-
module Middleware
|
7
|
-
##
|
8
|
-
# Force UTF-8 conversion
|
9
|
-
#
|
10
|
-
class Encoding < Faraday::Response::Middleware # :nodoc:
|
11
|
-
def on_complete(env)
|
12
|
-
env.response.body.force_encoding("utf-8")
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "faraday"
|
4
|
-
|
5
|
-
module MetalArchives
|
6
|
-
module Middleware
|
7
|
-
##
|
8
|
-
# Add appropriate request headers
|
9
|
-
#
|
10
|
-
class Headers < Faraday::Middleware # :nodoc:
|
11
|
-
def call(env)
|
12
|
-
headers = {
|
13
|
-
"User-Agent" => user_agent_string,
|
14
|
-
"Via" => via_string,
|
15
|
-
"Accept" => accept_string,
|
16
|
-
}
|
17
|
-
|
18
|
-
env[:request_headers].merge! headers
|
19
|
-
|
20
|
-
@app.call env
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def user_agent_string
|
26
|
-
"#{MetalArchives.config.app_name}/#{MetalArchives.config.app_version} ( #{MetalArchives.config.app_contact} )"
|
27
|
-
end
|
28
|
-
|
29
|
-
def accept_string
|
30
|
-
"application/json"
|
31
|
-
end
|
32
|
-
|
33
|
-
def via_string
|
34
|
-
"gem metal_archives/#{VERSION}"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "faraday"
|
4
|
-
|
5
|
-
module MetalArchives
|
6
|
-
module Middleware
|
7
|
-
##
|
8
|
-
# Dynamically rewrite endpoints
|
9
|
-
#
|
10
|
-
class RewriteEndpoint < Faraday::Middleware
|
11
|
-
def call(env)
|
12
|
-
env[:url] = RewriteEndpoint.rewrite(env[:url])
|
13
|
-
|
14
|
-
@app.call env
|
15
|
-
end
|
16
|
-
|
17
|
-
class << self
|
18
|
-
def rewrite(uri)
|
19
|
-
return uri unless MetalArchives.config.endpoint
|
20
|
-
|
21
|
-
new_uri = uri.clone
|
22
|
-
|
23
|
-
default_uri = URI MetalArchives.config.default_endpoint
|
24
|
-
rewritten_uri = URI MetalArchives.config.endpoint
|
25
|
-
|
26
|
-
if uri.host == default_uri.host && uri.scheme == default_uri.scheme
|
27
|
-
new_uri.host = rewritten_uri.host
|
28
|
-
new_uri.scheme = rewritten_uri.scheme
|
29
|
-
|
30
|
-
MetalArchives.config.logger.debug "Rewrite #{uri} to #{new_uri}"
|
31
|
-
end
|
32
|
-
|
33
|
-
new_uri
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "date"
|
4
|
-
|
5
|
-
module MetalArchives
|
6
|
-
##
|
7
|
-
# Date with nullable year, month and day
|
8
|
-
#
|
9
|
-
# WARNING: No validation on actual date is performed
|
10
|
-
#
|
11
|
-
class NilDate
|
12
|
-
include Comparable
|
13
|
-
|
14
|
-
attr_accessor :year, :month, :day
|
15
|
-
|
16
|
-
def initialize(year = nil, month = nil, day = nil)
|
17
|
-
@year = year
|
18
|
-
@month = month
|
19
|
-
@day = day
|
20
|
-
end
|
21
|
-
|
22
|
-
def year?
|
23
|
-
!@year.nil?
|
24
|
-
end
|
25
|
-
|
26
|
-
def month?
|
27
|
-
!@month.nil?
|
28
|
-
end
|
29
|
-
|
30
|
-
def day?
|
31
|
-
!@day.nil?
|
32
|
-
end
|
33
|
-
|
34
|
-
##
|
35
|
-
# Return a +Date+ object
|
36
|
-
#
|
37
|
-
def date
|
38
|
-
raise MetalArchives::Errors::ArgumentError, "Invalid conversion to Date: #{self}" unless year?
|
39
|
-
|
40
|
-
::Date.new @year, month || 1, day || 1
|
41
|
-
end
|
42
|
-
|
43
|
-
##
|
44
|
-
# Parse YYYY[-MM[-DD]]
|
45
|
-
#
|
46
|
-
def self.parse(value)
|
47
|
-
split = value.split("-")
|
48
|
-
|
49
|
-
year = Integer(split[0], 10) if split.any? && split[0] && !split[0].empty?
|
50
|
-
year = nil if year == 0
|
51
|
-
|
52
|
-
month = Integer(split[1], 10) if split.length > 1 && split[1] && !split[1].empty?
|
53
|
-
month = nil if month == 0
|
54
|
-
|
55
|
-
day = Integer(split[2], 10) if split.length > 2 && split[2] && !split[2].empty?
|
56
|
-
day = nil if day == 0
|
57
|
-
|
58
|
-
MetalArchives::NilDate.new year, month, day
|
59
|
-
rescue StandardError => e
|
60
|
-
raise MetalArchives::Errors::ArgumentError, "Invalid date: #{value}: #{e}"
|
61
|
-
end
|
62
|
-
|
63
|
-
##
|
64
|
-
# Comparison operator
|
65
|
-
#
|
66
|
-
def <=>(other)
|
67
|
-
return nil if other.nil?
|
68
|
-
|
69
|
-
# Return nil if one of the two years is nil
|
70
|
-
return nil if (@year.nil? && !other.year.nil?) || (!@year.nil? && other.year.nil?)
|
71
|
-
|
72
|
-
# Return nil if one of the two months is nil
|
73
|
-
return nil if (@month.nil? && !other.month.nil?) || (!@month.nil? && other.month.nil?)
|
74
|
-
|
75
|
-
# Return nil if one of the two months is nil
|
76
|
-
return nil if (@day.nil? && !other.day.nil?) || (!@day.nil? && other.day.nil?)
|
77
|
-
|
78
|
-
comp_year = @year <=> other.year
|
79
|
-
if comp_year == 0
|
80
|
-
comp_month = @month <=> other.month
|
81
|
-
if comp_month == 0
|
82
|
-
@day <=> other.day
|
83
|
-
else
|
84
|
-
comp_month
|
85
|
-
end
|
86
|
-
else
|
87
|
-
comp_year
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
data/lib/metal_archives/range.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module MetalArchives
|
4
|
-
##
|
5
|
-
# Range which can start and/or end with +nil+
|
6
|
-
#
|
7
|
-
class Range
|
8
|
-
include Comparable
|
9
|
-
|
10
|
-
##
|
11
|
-
# Begin- and endpoint of range
|
12
|
-
#
|
13
|
-
attr_accessor :begin, :end
|
14
|
-
|
15
|
-
##
|
16
|
-
# Create a new range
|
17
|
-
#
|
18
|
-
# [+_begin+]
|
19
|
-
# Start of range
|
20
|
-
#
|
21
|
-
# Default: +nil+
|
22
|
-
#
|
23
|
-
# [+_end+]
|
24
|
-
# End of range
|
25
|
-
#
|
26
|
-
# Default: +nil+
|
27
|
-
#
|
28
|
-
def initialize(_begin = nil, _end = nil)
|
29
|
-
@begin = _begin
|
30
|
-
@end = _end
|
31
|
-
end
|
32
|
-
|
33
|
-
##
|
34
|
-
# Whether start of range is present
|
35
|
-
#
|
36
|
-
def begin?
|
37
|
-
!@begin.nil?
|
38
|
-
end
|
39
|
-
|
40
|
-
##
|
41
|
-
# Whether end of range is present
|
42
|
-
#
|
43
|
-
def end?
|
44
|
-
!@end.nil?
|
45
|
-
end
|
46
|
-
|
47
|
-
##
|
48
|
-
# Comparison operator
|
49
|
-
#
|
50
|
-
def <=>(other)
|
51
|
-
comp_begin = self.begin <=> other.begin
|
52
|
-
comp_end = self.end <=> other.end
|
53
|
-
# Return nil if begin or end is uncomparable
|
54
|
-
return nil if comp_begin.nil? || comp_end.nil?
|
55
|
-
|
56
|
-
# Compare end if begin is equal
|
57
|
-
return comp_end if comp_begin.zero?
|
58
|
-
|
59
|
-
# Compare begin if end is equal
|
60
|
-
return comp_begin if comp_begin.zero?
|
61
|
-
|
62
|
-
return nil unless self.begin.is_a?(Integer) && self.end.is_a?(Integer)
|
63
|
-
return nil unless other.begin.is_a?(Integer) && other.end.is_a?(Integer)
|
64
|
-
|
65
|
-
# Compare actual range
|
66
|
-
(self.end - self.begin) <=> (other.end - other.begin)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|