metal_archives 2.2.0 → 3.1.1
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 +5 -5
- data/.github/workflows/ci.yml +93 -0
- data/.gitignore +6 -6
- data/.overcommit.yml +35 -0
- data/.rspec +2 -0
- data/.rubocop.yml +66 -6
- data/CHANGELOG.md +33 -0
- data/Gemfile +1 -1
- data/LICENSE.md +17 -4
- data/README.md +65 -86
- data/Rakefile +8 -7
- data/bin/console +38 -0
- data/bin/setup +8 -0
- data/config/inflections.rb +7 -0
- data/config/initializers/.keep +0 -0
- data/docker-compose.yml +23 -0
- data/lib/metal_archives.rb +82 -27
- 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/{utils/collection.rb → collection.rb} +3 -5
- data/lib/metal_archives/configuration.rb +33 -50
- data/lib/metal_archives/{error.rb → errors.rb} +9 -1
- data/lib/metal_archives/http_client.rb +45 -44
- data/lib/metal_archives/models/artist.rb +90 -45
- data/lib/metal_archives/models/band.rb +77 -52
- data/lib/metal_archives/models/base.rb +225 -0
- data/lib/metal_archives/models/label.rb +14 -15
- data/lib/metal_archives/models/release.rb +25 -29
- data/lib/metal_archives/parsers/artist.rb +86 -50
- data/lib/metal_archives/parsers/band.rb +155 -88
- 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 +39 -31
- data/lib/metal_archives/parsers/parser.rb +18 -63
- data/lib/metal_archives/parsers/release.rb +98 -89
- data/lib/metal_archives/parsers/year.rb +31 -0
- data/lib/metal_archives/version.rb +12 -1
- data/metal_archives.env.example +10 -0
- data/metal_archives.gemspec +43 -28
- data/nginx/default.conf +60 -0
- metadata +179 -74
- data/.travis.yml +0 -12
- data/lib/metal_archives/middleware/cache_check.rb +0 -20
- 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/models/base_model.rb +0 -215
- data/lib/metal_archives/utils/lru_cache.rb +0 -61
- data/lib/metal_archives/utils/nil_date.rb +0 -99
- data/lib/metal_archives/utils/range.rb +0 -66
- data/spec/configuration_spec.rb +0 -96
- data/spec/factories/artist_factory.rb +0 -37
- data/spec/factories/band_factory.rb +0 -60
- data/spec/factories/nil_date_factory.rb +0 -9
- data/spec/factories/range_factory.rb +0 -8
- data/spec/models/artist_spec.rb +0 -138
- data/spec/models/band_spec.rb +0 -164
- data/spec/models/base_model_spec.rb +0 -219
- data/spec/models/release_spec.rb +0 -133
- data/spec/parser_spec.rb +0 -19
- data/spec/spec_helper.rb +0 -111
- data/spec/support/factory_girl.rb +0 -5
- data/spec/support/metal_archives.rb +0 -33
- data/spec/utils/collection_spec.rb +0 -72
- data/spec/utils/lru_cache_spec.rb +0 -53
- data/spec/utils/nil_date_spec.rb +0 -156
- data/spec/utils/range_spec.rb +0 -62
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'metal_archives'
|
4
|
-
|
5
|
-
MetalArchives.configure do |c|
|
6
|
-
## Application identity (required)
|
7
|
-
c.app_name = 'MetalArchivesGemTestSuite'
|
8
|
-
c.app_version = MetalArchives::VERSION
|
9
|
-
c.app_contact = 'user@example.com'
|
10
|
-
|
11
|
-
if ENV.has_key? 'TRAVIS'
|
12
|
-
## Request throttling (optional, overrides defaults)
|
13
|
-
c.request_rate = 1
|
14
|
-
c.request_timeout = 3
|
15
|
-
end
|
16
|
-
|
17
|
-
## Connect additional Faraday middleware
|
18
|
-
# c.middleware = [MyMiddleware, MyOtherMiddleware]
|
19
|
-
|
20
|
-
## Custom cache size per object class (optional, overrides defaults)
|
21
|
-
# c.cache_size = 100
|
22
|
-
|
23
|
-
## Metal Archives endpoint (optional, overrides default)
|
24
|
-
c.endpoint = ENV['MA_ENDPOINT'] if ENV['MA_ENDPOINT']
|
25
|
-
|
26
|
-
if ENV['MA_ENDPOINT']
|
27
|
-
puts "Using '#{ENV['MA_ENDPOINT']}' as MA endpoint"
|
28
|
-
end
|
29
|
-
|
30
|
-
## Custom logger (optional)
|
31
|
-
c.logger = Logger.new STDOUT
|
32
|
-
c.logger.level = Logger::INFO
|
33
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe MetalArchives::Collection do
|
4
|
-
it 'iterates' do
|
5
|
-
l = lambda do
|
6
|
-
@i ||= 0
|
7
|
-
|
8
|
-
next [] if @i >= 100
|
9
|
-
items = (@i .. (@i + 9)).to_a
|
10
|
-
@i += 10
|
11
|
-
|
12
|
-
items
|
13
|
-
end
|
14
|
-
|
15
|
-
c = MetalArchives::Collection.new l
|
16
|
-
|
17
|
-
i = 0
|
18
|
-
c.each do |item|
|
19
|
-
expect(item).to eq i
|
20
|
-
i += 1
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'returns' do
|
25
|
-
l = lambda do
|
26
|
-
@i ||= 0
|
27
|
-
|
28
|
-
raise StandardError if @i >= 100
|
29
|
-
items = (@i .. (@i + 9)).to_a
|
30
|
-
@i += 10
|
31
|
-
|
32
|
-
items
|
33
|
-
end
|
34
|
-
|
35
|
-
c = MetalArchives::Collection.new l
|
36
|
-
|
37
|
-
i = 0
|
38
|
-
c.each do |item|
|
39
|
-
break if i == 99
|
40
|
-
expect(item).to eq i
|
41
|
-
i += 1
|
42
|
-
end
|
43
|
-
|
44
|
-
expect(i).to eq 99
|
45
|
-
end
|
46
|
-
|
47
|
-
describe 'empty?' do
|
48
|
-
it 'is not empty' do
|
49
|
-
l = lambda do
|
50
|
-
@i ||= 0
|
51
|
-
|
52
|
-
next [] if @i >= 100
|
53
|
-
items = (@i .. (@i + 9)).to_a
|
54
|
-
@i += 10
|
55
|
-
|
56
|
-
items
|
57
|
-
end
|
58
|
-
|
59
|
-
c = MetalArchives::Collection.new l
|
60
|
-
|
61
|
-
i = 0
|
62
|
-
|
63
|
-
expect(c).not_to be_empty
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'is empty' do
|
67
|
-
c = MetalArchives::Collection.new -> { [] }
|
68
|
-
|
69
|
-
expect(c).to be_empty
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe MetalArchives::LRUCache do
|
4
|
-
let(:cache) { MetalArchives::LRUCache.new 3 }
|
5
|
-
|
6
|
-
it 'stores and retrieves objects' do
|
7
|
-
cache[:key] = 'MyString'
|
8
|
-
|
9
|
-
expect(cache[:key]).to eq 'MyString'
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'clears cache' do
|
13
|
-
cache[:key] = 'MyString'
|
14
|
-
cache.clear
|
15
|
-
|
16
|
-
expect(cache[:key]).to be_nil
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'peeks' do
|
20
|
-
expect(cache).not_to include :key
|
21
|
-
|
22
|
-
cache[:key] = 'MyString'
|
23
|
-
|
24
|
-
expect(cache).to include :key
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'deletes' do
|
28
|
-
cache[:key] = 'MyString'
|
29
|
-
|
30
|
-
expect(cache).to include :key
|
31
|
-
|
32
|
-
cache.delete :key
|
33
|
-
|
34
|
-
expect(cache).not_to include :key
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'implements LRU caching' do
|
38
|
-
cache[:a] = 'one'
|
39
|
-
cache[:b] = 'two'
|
40
|
-
cache[:c] = 'three'
|
41
|
-
|
42
|
-
expect(cache.instance_variable_get '@size').to eq 3
|
43
|
-
|
44
|
-
cache[:d] = 'four'
|
45
|
-
|
46
|
-
expect(cache.instance_variable_get '@size').to eq 3
|
47
|
-
|
48
|
-
expect(cache[:b]).to eq 'two'
|
49
|
-
expect(cache[:c]).to eq 'three'
|
50
|
-
expect(cache[:d]).to eq 'four'
|
51
|
-
expect(cache[:a]).to be_nil
|
52
|
-
end
|
53
|
-
end
|
data/spec/utils/nil_date_spec.rb
DELETED
@@ -1,156 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe MetalArchives::NilDate do
|
4
|
-
let(:date) { build :nil_date }
|
5
|
-
let(:date_without_day) { build :nil_date, :day => nil }
|
6
|
-
let(:date_without_month) { build :nil_date, :month => nil }
|
7
|
-
|
8
|
-
it 'has the correct properties' do
|
9
|
-
expect(date).to respond_to :year
|
10
|
-
expect(date).to respond_to :year=
|
11
|
-
expect(date).to respond_to :year?
|
12
|
-
|
13
|
-
expect(date).to respond_to :month
|
14
|
-
expect(date).to respond_to :month=
|
15
|
-
expect(date).to respond_to :month?
|
16
|
-
|
17
|
-
expect(date).to respond_to :day
|
18
|
-
expect(date).to respond_to :day=
|
19
|
-
expect(date).to respond_to :day?
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'returns the correct values' do
|
23
|
-
expect(date.year).not_to be_nil
|
24
|
-
expect(date.year).to be_an Integer
|
25
|
-
expect(date.year?).to be true
|
26
|
-
|
27
|
-
expect(date.month).not_to be_nil
|
28
|
-
expect(date.month).to be_an Integer
|
29
|
-
expect(date.month?).to be true
|
30
|
-
|
31
|
-
expect(date.day).not_to be_nil
|
32
|
-
expect(date.day).to be_an Integer
|
33
|
-
expect(date.day?).to be true
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'does not require a day' do
|
37
|
-
expect(date_without_day.day).to be_nil
|
38
|
-
expect(date_without_day.day?).to be false
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'does not require a month' do
|
42
|
-
expect(date_without_month.month).to be_nil
|
43
|
-
expect(date_without_month.month?).to be false
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'returns a date' do
|
47
|
-
expect(date.date).to be_a Date
|
48
|
-
expect(date.date.year).to eq date.year
|
49
|
-
expect(date.date.month).to eq date.month
|
50
|
-
expect(date.date.day).to eq date.day
|
51
|
-
end
|
52
|
-
|
53
|
-
describe 'parsing' do
|
54
|
-
it 'parses empty dates' do
|
55
|
-
date = described_class.parse ''
|
56
|
-
|
57
|
-
expect(date.year?).to be false
|
58
|
-
expect(date.month?).to be false
|
59
|
-
expect(date.day?).to be false
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'parses dates with year only' do
|
63
|
-
date = described_class.parse '2012'
|
64
|
-
|
65
|
-
expect(date.year?).to be true
|
66
|
-
expect(date.year).to eq 2012
|
67
|
-
expect(date.month?).to be false
|
68
|
-
expect(date.day?).to be false
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'parses parses dates with year and month' do
|
72
|
-
date = described_class.parse '2012-10'
|
73
|
-
|
74
|
-
expect(date.year?).to be true
|
75
|
-
expect(date.year).to eq 2012
|
76
|
-
expect(date.month?).to be true
|
77
|
-
expect(date.month).to eq 10
|
78
|
-
expect(date.day?).to be false
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'parses dates with leading zeroes' do
|
82
|
-
date = described_class.parse '2017-01-00'
|
83
|
-
|
84
|
-
expect(date.year).to eq 2017
|
85
|
-
expect(date.month).to eq 1
|
86
|
-
expect(date.day).to eq nil
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'parses full dates' do
|
90
|
-
date = described_class.parse '2012-10-02'
|
91
|
-
|
92
|
-
expect(date.year?).to be true
|
93
|
-
expect(date.year).to eq 2012
|
94
|
-
expect(date.month?).to be true
|
95
|
-
expect(date.month).to eq 10
|
96
|
-
expect(date.day?).to be true
|
97
|
-
expect(date.day).to eq 2
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'does not parse on invalid dates' do
|
101
|
-
expect(-> { described_class.parse 'October 2nd, 2012' }).to raise_error MetalArchives::Errors::ArgumentError
|
102
|
-
expect(-> { described_class.parse 'a-b-c' }).to raise_error MetalArchives::Errors::ArgumentError
|
103
|
-
expect(-> { described_class.parse "This isn't a date" }).to raise_error MetalArchives::Errors::ArgumentError
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'includes comparable' do
|
108
|
-
date1 = described_class.new 2015, 01, 01
|
109
|
-
date2 = described_class.new 2015, 01, 02
|
110
|
-
date3 = described_class.new 2015, 02, 01
|
111
|
-
date4 = described_class.new 2016, 01, 02
|
112
|
-
date5 = described_class.new 2015, 01, 01
|
113
|
-
date6 = described_class.new 2014, 12, 31
|
114
|
-
date7 = described_class.new 2015, 01, nil
|
115
|
-
date8 = described_class.new 2015, 01, nil
|
116
|
-
date9 = described_class.new 2015, 02, nil
|
117
|
-
date10 = described_class.new 2015, nil, nil
|
118
|
-
date11 = described_class.new 2016, nil, nil
|
119
|
-
|
120
|
-
expect(date1 <=> date2).to eq -1
|
121
|
-
expect(date2 <=> date1).to eq 1
|
122
|
-
expect(date1 <=> date3).to eq -1
|
123
|
-
expect(date3 <=> date1).to eq 1
|
124
|
-
expect(date1 <=> date4).to eq -1
|
125
|
-
expect(date4 <=> date1).to eq 1
|
126
|
-
expect(date1 <=> date5).to eq 0
|
127
|
-
expect(date5 <=> date1).to eq 0
|
128
|
-
expect(date6 <=> date1).to eq -1
|
129
|
-
expect(date1 <=> date6).to eq 1
|
130
|
-
|
131
|
-
expect(date1 <=> date7).to eq nil
|
132
|
-
expect(date7 <=> date1).to eq nil
|
133
|
-
expect(date1 <=> date9).to eq nil
|
134
|
-
expect(date9 <=> date1).to eq nil
|
135
|
-
expect(date7 <=> date8).to eq 0
|
136
|
-
expect(date8 <=> date7).to eq 0
|
137
|
-
expect(date7 <=> date9).to eq -1
|
138
|
-
expect(date9 <=> date7).to eq 1
|
139
|
-
expect(date7 <=> date10).to eq nil
|
140
|
-
expect(date10 <=> date7).to eq nil
|
141
|
-
expect(date10 <=> date11).to eq -1
|
142
|
-
expect(date11 <=> date10).to eq 1
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'prints to string' do
|
146
|
-
date1 = described_class.new 2015, nil, nil
|
147
|
-
date2 = described_class.new 2015, 01, nil
|
148
|
-
date3 = described_class.new 2015, 01, 01
|
149
|
-
date4 = described_class.new 2015, nil, 01
|
150
|
-
|
151
|
-
expect(date1.to_s).to eq '2015-00-00'
|
152
|
-
expect(date2.to_s).to eq '2015-01-00'
|
153
|
-
expect(date3.to_s).to eq '2015-01-01'
|
154
|
-
expect(date4.to_s).to eq '2015-00-01'
|
155
|
-
end
|
156
|
-
end
|
data/spec/utils/range_spec.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe MetalArchives::Range do
|
4
|
-
let(:range) { build :range }
|
5
|
-
let(:begin_range) { build :range, :end => nil }
|
6
|
-
let(:end_range) { build :range, :begin => nil }
|
7
|
-
|
8
|
-
it 'has the correct properties' do
|
9
|
-
expect(range).to respond_to :begin
|
10
|
-
expect(range).to respond_to :begin=
|
11
|
-
expect(range).to respond_to :begin?
|
12
|
-
|
13
|
-
expect(range).to respond_to :end
|
14
|
-
expect(range).to respond_to :end=
|
15
|
-
expect(range).to respond_to :end?
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'returns the correct values' do
|
19
|
-
expect(range.begin).not_to be_nil
|
20
|
-
expect(range.begin).to be_a Date
|
21
|
-
expect(range.begin?).to be true
|
22
|
-
|
23
|
-
expect(range.end).not_to be_nil
|
24
|
-
expect(range.end).to be_a Date
|
25
|
-
expect(range.end?).to be true
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'does not require an end date' do
|
29
|
-
expect(begin_range.end).to be_nil
|
30
|
-
expect(begin_range.end?).to be false
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'does not require a begin date' do
|
34
|
-
expect(end_range.begin).to be_nil
|
35
|
-
expect(end_range.begin?).to be false
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'implements comparable' do
|
39
|
-
range1 = described_class.new 1, 3
|
40
|
-
range1a = described_class.new 1, 3
|
41
|
-
range2 = described_class.new nil, 3
|
42
|
-
range2a = described_class.new nil, 3
|
43
|
-
range3 = described_class.new 1, nil
|
44
|
-
range3a = described_class.new 1, nil
|
45
|
-
|
46
|
-
range4 = described_class.new 1, 4
|
47
|
-
range5 = described_class.new 0, 3
|
48
|
-
|
49
|
-
expect(range1 <=> range1a).to eq 0
|
50
|
-
expect(range2 <=> range2a).to eq 0
|
51
|
-
expect(range3 <=> range3a).to eq 0
|
52
|
-
|
53
|
-
expect(range1 <=> range2).to be_nil
|
54
|
-
expect(range2 <=> range3).to be_nil
|
55
|
-
expect(range3 <=> range1).to be_nil
|
56
|
-
|
57
|
-
expect(range1 <=> range4).to eq -1
|
58
|
-
expect(range1 <=> range5).to eq -1
|
59
|
-
expect(range4 <=> range1).to eq 1
|
60
|
-
expect(range5 <=> range1).to eq 1
|
61
|
-
end
|
62
|
-
end
|