flacky 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,80 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'minitest/autorun'
4
+ require 'vcr'
5
+ require 'webmock/minitest'
6
+ require 'flacky/scraper'
7
+
8
+ VCR.configure do |c|
9
+ c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
10
+ c.hook_into :webmock
11
+ end
12
+
13
+ describe Flacky::Scraper do
14
+ WRAPPED_ERRORS = [
15
+ Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
16
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError,
17
+ SocketError, OpenSSL::SSL::SSLError, Errno::ECONNREFUSED
18
+ ]
19
+
20
+ ALBUM_DATA = {
21
+ :rush_moving_pictures => {
22
+ :url => "http://www.allmusic.com/album/moving-pictures-mw0000616962",
23
+ :styles => [
24
+ "Album Rock", "Arena Rock", "Hard Rock", "Prog-Rock"
25
+ ],
26
+ :moods => [
27
+ "Aggressive", "Ambitious", "Atmospheric", "Cerebral", "Complex",
28
+ "Confident", "Difficult", "Dramatic", "Earnest", "Elaborate",
29
+ "Energetic", "Enigmatic", "Epic", "Fierce", "Fiery", "Intense",
30
+ "Literate", "Lively", "Plaintive", "Provocative", "Reflective",
31
+ "Sprawling", "Swaggering", "Tense/Anxious", "Theatrical", "Urgent",
32
+ "Visceral", "Volatile"
33
+ ]
34
+ },
35
+ :audioslave_revelations => {
36
+ :url => "http://www.allmusic.com/album/revelations-mw0000451121",
37
+ :styles => [
38
+ "Alternative Metal", "Hard Rock", "Heavy Metal", "Post-Grunge"
39
+ ],
40
+ :moods => [
41
+ "Aggressive", "Angst-Ridden", "Anguished/Distraught", "Brooding",
42
+ "Cerebral", "Confrontational", "Cynical/Sarcastic", "Dramatic",
43
+ "Fiery", "Harsh", "Intense", "Literate", "Manic", "Menacing",
44
+ "Ominous", "Provocative", "Rebellious", "Searching", "Street-Smart",
45
+ "Tense/Anxious", "Uncompromising", "Volatile", "Wry",
46
+ ]
47
+ },
48
+ :bend_sinister_small_fame => {
49
+ :url => "http://www.allmusic.com/album/small-fame-mw0002374964",
50
+ :styles => [
51
+ "Alternative/Indie Rock"
52
+ ],
53
+ :moods => [
54
+ ]
55
+ },
56
+ }
57
+
58
+ ALBUM_DATA.each_pair do |cassette, album|
59
+ it "#styles returns a sorted array of styles (#{cassette})" do
60
+ VCR.use_cassette(cassette) do
61
+ Flacky::Scraper.new(album[:url]).styles.must_equal album[:styles]
62
+ end
63
+ end
64
+
65
+ it "#moods returns a sorted array of moods (#{cassette})" do
66
+ VCR.use_cassette(cassette) do
67
+ Flacky::Scraper.new(album[:url]).moods.must_equal album[:moods]
68
+ end
69
+ end
70
+ end
71
+
72
+ WRAPPED_ERRORS.each do |error|
73
+ it "#styles wraps #{error} and raises a ScraperError" do
74
+ stub_request(:get, "http://www.allmusic.com/uhoh").to_raise(error)
75
+ scraper = Flacky::Scraper.new("http://www.allmusic.com/uhoh")
76
+
77
+ proc { scraper.styles }.must_raise(Flacky::ScraperError)
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,67 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'minitest/autorun'
4
+ require 'mocha/setup'
5
+ require 'flacky/tagger'
6
+
7
+ describe Flacky::Tagger do
8
+ let(:flac_file) do
9
+ File.join(File.dirname(__FILE__), '../fixtures/silence.flac')
10
+ end
11
+
12
+ let(:tagger) do
13
+ Flacky::Tagger.new(flac_file)
14
+ end
15
+
16
+ let(:flacinfo) do
17
+ mock = FlacInfo.new(flac_file)
18
+ mock.stubs(:tags).returns({ 'Title' => 'Silence' })
19
+ mock.stubs(:update!).returns(true)
20
+ mock
21
+ end
22
+
23
+ describe "#tag" do
24
+ it "adds a new comment tag if none exist" do
25
+ flacinfo.expects(:comment_add).with('DISCNUMBER=1').returns(true)
26
+ FlacInfo.stubs(:new).returns(flacinfo)
27
+
28
+ tagger.tag "DISCNUMBER", "1"
29
+ end
30
+
31
+ it "overwrites a comment tag if one exists" do
32
+ flacinfo.expects(:comment_del).with('Title').returns(true)
33
+ flacinfo.expects(:comment_add).with('Title=Le Silence').returns(true)
34
+ FlacInfo.stubs(:new).returns(flacinfo)
35
+
36
+ tagger.tag "Title", "Le Silence"
37
+ end
38
+ end
39
+
40
+ describe "#update!" do
41
+ it "calls update! on the FlacInfo object" do
42
+ flacinfo.expects(:update!).returns(true)
43
+ FlacInfo.stubs(:new).returns(flacinfo)
44
+
45
+ tagger.update!
46
+ end
47
+ end
48
+
49
+ describe ".update" do
50
+ it "adds the tag and updates" do
51
+ flacinfo.expects(:comment_add).with('DISCNUMBER=1').returns(true)
52
+ flacinfo.expects(:update!).returns(true)
53
+ FlacInfo.stubs(:new).returns(flacinfo)
54
+
55
+ Flacky::Tagger.update(flac_file) do
56
+ tag "DISCNUMBER", "1"
57
+ end
58
+ end
59
+ end
60
+
61
+ # it "does stuff" do
62
+ # Flacky::Tagger.update('file') do
63
+ # tag 'MOOD', "yep"
64
+ # tag 'FILEOWNER', "fletcher"
65
+ # end
66
+ # end
67
+ end
metadata ADDED
@@ -0,0 +1,202 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flacky
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Fletcher Nichol
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: nokogiri
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: flacinfo-rb
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: minitest
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: vcr
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: webmock
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.8.11
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.8.11
110
+ - !ruby/object:Gem::Dependency
111
+ name: mocha
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: guard-minitest
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: Loose collection of CLI commands to sort and process Flac files
143
+ email:
144
+ - fnichol@nichol.ca
145
+ executables:
146
+ - flacky
147
+ extensions: []
148
+ extra_rdoc_files: []
149
+ files:
150
+ - .gitignore
151
+ - Gemfile
152
+ - Guardfile
153
+ - LICENSE.txt
154
+ - README.md
155
+ - Rakefile
156
+ - bin/flacky
157
+ - flacky.gemspec
158
+ - lib/flacky.rb
159
+ - lib/flacky/cli.rb
160
+ - lib/flacky/core_ext.rb
161
+ - lib/flacky/metadata_generator.rb
162
+ - lib/flacky/mp3_convertor.rb
163
+ - lib/flacky/scraper.rb
164
+ - lib/flacky/tagger.rb
165
+ - lib/flacky/version.rb
166
+ - spec/fixtures/silence.flac
167
+ - spec/fixtures/vcr_cassettes/audioslave_revelations.yml
168
+ - spec/fixtures/vcr_cassettes/bend_sinister_small_fame.yml
169
+ - spec/fixtures/vcr_cassettes/rush_moving_pictures.yml
170
+ - spec/flacky/scraper_spec.rb
171
+ - spec/flacky/tagger_spec.rb
172
+ homepage: https://github.com/fnichol/flacky
173
+ licenses: []
174
+ post_install_message:
175
+ rdoc_options: []
176
+ require_paths:
177
+ - lib
178
+ required_ruby_version: !ruby/object:Gem::Requirement
179
+ none: false
180
+ requirements:
181
+ - - ! '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ requirements: []
191
+ rubyforge_project:
192
+ rubygems_version: 1.8.24
193
+ signing_key:
194
+ specification_version: 3
195
+ summary: Loose collection of CLI commands to sort and process Flac files
196
+ test_files:
197
+ - spec/fixtures/silence.flac
198
+ - spec/fixtures/vcr_cassettes/audioslave_revelations.yml
199
+ - spec/fixtures/vcr_cassettes/bend_sinister_small_fame.yml
200
+ - spec/fixtures/vcr_cassettes/rush_moving_pictures.yml
201
+ - spec/flacky/scraper_spec.rb
202
+ - spec/flacky/tagger_spec.rb