musk 0.0.3 → 0.0.4
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/Gemfile.lock +1 -1
- data/bin/musk +3 -4
- data/lib/musk/formatter/csv.rb +23 -0
- data/lib/musk/formatter/pretty.rb +15 -11
- data/lib/musk/track_loader.rb +0 -1
- data/lib/musk/track_printer.rb +2 -4
- data/lib/musk/version.rb +1 -1
- data/lib/musk.rb +4 -0
- data/spec/bin/musk_spec.rb +21 -19
- data/spec/lib/musk/decorator/printable_track_spec.rb +2 -2
- data/spec/lib/musk/formatter/csv_spec.rb +27 -0
- data/spec/lib/musk/track_printer_spec.rb +10 -2
- data/spec/support/examples/extract_command_with_csv_format_example.rb +11 -0
- data/spec/support/examples/extract_command_with_pretty_format_example.rb +11 -0
- data/spec/support/examples/{decorator_with_nullable_attributes_example.rb → track_decorator_with_nullable_attributes_example.rb} +4 -4
- data/spec/support/examples/{decorator_with_zeroable_attributes_example.rb → track_decorator_with_zeroable_attributes_example.rb} +6 -6
- metadata +13 -8
- data/spec/support/examples/command_to_print_tracks_to_stdout_in_pretty_format_example.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de4f097d74a73c706373689095573eede025a309
|
4
|
+
data.tar.gz: 3dfe5fff8e66130a94c826d582456159e75ee8ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fbef5b662def26e868f5b81032e90606f3b014a2dcc448b5086f46c014b83b94151b0d8e6da214c04a2348d3a5a4a4016b922f994fb5848eb595e2c4d52d340
|
7
|
+
data.tar.gz: 034fb77607002b90a4c8bf10c36a704e0a7bf85762ef37c5019ad2bc077d552b53e50ab337b3a86c95c4ee39e8405839909347c96189271056bc7f70031d7de9
|
data/Gemfile.lock
CHANGED
data/bin/musk
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "gli"
|
4
|
-
require "musk
|
5
|
-
require "musk/track_printer"
|
4
|
+
require "musk"
|
6
5
|
|
7
6
|
extend GLI::App
|
8
7
|
|
9
8
|
desc "Extract meta-data (tags) from MP3 files"
|
10
|
-
arg_name "
|
9
|
+
arg_name "path_to_files"
|
11
10
|
command :extract do |command|
|
12
|
-
command.arg_name "
|
11
|
+
command.arg_name "csv|pretty"
|
13
12
|
command.default_value "pretty"
|
14
13
|
command.flag [:f, :format]
|
15
14
|
command.action do |global_options, options, arguments|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Musk
|
2
|
+
module Formatter
|
3
|
+
class CSV
|
4
|
+
ATTRIBUTES = [
|
5
|
+
:path,
|
6
|
+
:title,
|
7
|
+
:position,
|
8
|
+
:artist,
|
9
|
+
:album,
|
10
|
+
:genre,
|
11
|
+
:year,
|
12
|
+
:comment,
|
13
|
+
]
|
14
|
+
|
15
|
+
def self.print(tracks)
|
16
|
+
tracks.each do |track|
|
17
|
+
track = Musk::Decorator::PrintableTrack.new(track)
|
18
|
+
puts ATTRIBUTES.map {|a| track.send(a)}.join(",")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,20 +1,24 @@
|
|
1
|
-
require "musk/decorator/printable_track"
|
2
|
-
|
3
1
|
module Musk
|
4
2
|
module Formatter
|
5
3
|
class Pretty
|
4
|
+
ATTRIBUTES = [
|
5
|
+
:path,
|
6
|
+
:title,
|
7
|
+
:position,
|
8
|
+
:artist,
|
9
|
+
:album,
|
10
|
+
:genre,
|
11
|
+
:year,
|
12
|
+
:comment,
|
13
|
+
]
|
14
|
+
|
6
15
|
def self.print(tracks)
|
7
16
|
tracks.each_with_index do |track, index|
|
8
|
-
track = Musk::Decorator::PrintableTrack.new(track)
|
9
17
|
puts if index > 0
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
printf("%-10s%s\n", "Album:", track.album)
|
15
|
-
printf("%-10s%s\n", "Genre:", track.genre)
|
16
|
-
printf("%-10s%s\n", "Year:", track.year)
|
17
|
-
printf("%-10s%s\n", "Comment:", track.comment)
|
18
|
+
ATTRIBUTES.map do |attribute|
|
19
|
+
track = Musk::Decorator::PrintableTrack.new(track)
|
20
|
+
printf("%-10s%s\n", "#{attribute.capitalize}:", track.send(attribute))
|
21
|
+
end
|
18
22
|
end
|
19
23
|
end
|
20
24
|
end
|
data/lib/musk/track_loader.rb
CHANGED
data/lib/musk/track_printer.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
require "musk/formatter/pretty"
|
2
|
-
|
3
1
|
module Musk
|
4
2
|
class TrackPrinter
|
5
3
|
def self.print!(format, tracks)
|
6
4
|
case format.to_s.to_sym
|
7
|
-
when :
|
8
|
-
|
5
|
+
when :csv then Musk::Formatter::CSV.print(tracks)
|
6
|
+
when :pretty then Musk::Formatter::Pretty.print(tracks)
|
9
7
|
else
|
10
8
|
raise "Unknown format '#{format}'"
|
11
9
|
end
|
data/lib/musk/version.rb
CHANGED
data/lib/musk.rb
CHANGED
data/spec/bin/musk_spec.rb
CHANGED
@@ -1,41 +1,43 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe "musk extract" do
|
4
|
-
let(:command) { "bundle exec bin/musk extract" }
|
5
|
-
|
6
4
|
context "called without arguments" do
|
7
5
|
it "should fail with the exit code 1" do
|
8
|
-
stdout, stderr, status = Open3.capture3(
|
6
|
+
stdout, stderr, status = Open3.capture3("bundle exec bin/musk extract")
|
9
7
|
status.exitstatus.should eq(1)
|
10
8
|
end
|
11
9
|
|
12
10
|
it "should write an error message to STDERR" do
|
13
|
-
stdout, stderr, status = Open3.capture3(
|
11
|
+
stdout, stderr, status = Open3.capture3("bundle exec bin/musk extract")
|
14
12
|
stderr.should_not be_empty
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
18
16
|
context "called with 'path_to_tracks'" do
|
19
|
-
it_should_behave_like "
|
20
|
-
let(:expected_command) { command }
|
21
|
-
end
|
17
|
+
it_should_behave_like "the extract command with the pretty format"
|
22
18
|
end
|
23
19
|
|
24
|
-
context "called with '-f pretty
|
25
|
-
it_should_behave_like "
|
26
|
-
let(:expected_command) { "#{command} -f pretty" }
|
27
|
-
end
|
20
|
+
context "called with 'path_to_tracks -f pretty'" do
|
21
|
+
it_should_behave_like "the extract command with the pretty format", "-f pretty"
|
28
22
|
end
|
29
23
|
|
30
|
-
context "called with '--format pretty
|
31
|
-
it_should_behave_like "
|
32
|
-
let(:expected_command) { "#{command} --format pretty" }
|
33
|
-
end
|
24
|
+
context "called with 'path_to_tracks --format pretty'" do
|
25
|
+
it_should_behave_like "the extract command with the pretty format", "--format pretty"
|
34
26
|
end
|
35
27
|
|
36
|
-
context "called with '--format=pretty
|
37
|
-
it_should_behave_like "
|
38
|
-
|
39
|
-
|
28
|
+
context "called with 'path_to_tracks --format=pretty'" do
|
29
|
+
it_should_behave_like "the extract command with the pretty format", "--format=pretty"
|
30
|
+
end
|
31
|
+
|
32
|
+
context "called with 'path_to_tracks -f csv'" do
|
33
|
+
it_should_behave_like "the extract command with the csv format", "-f csv"
|
34
|
+
end
|
35
|
+
|
36
|
+
context "called with 'path_to_tracks --format csv'" do
|
37
|
+
it_should_behave_like "the extract command with the csv format", "--format csv"
|
38
|
+
end
|
39
|
+
|
40
|
+
context "called with 'path_to_tracks --format=csv'" do
|
41
|
+
it_should_behave_like "the extract command with the csv format", "--format=csv"
|
40
42
|
end
|
41
43
|
end
|
@@ -25,14 +25,14 @@ describe Musk::Decorator::PrintableTrack do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
it_should_behave_like "
|
28
|
+
it_should_behave_like "the track decorator with zeroable attributes", [
|
29
29
|
:position_number,
|
30
30
|
:positions_count,
|
31
31
|
:comment,
|
32
32
|
:year,
|
33
33
|
]
|
34
34
|
|
35
|
-
it_should_behave_like "
|
35
|
+
it_should_behave_like "the track decorator with nullable attributes", [
|
36
36
|
:title,
|
37
37
|
:artist,
|
38
38
|
:album,
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Musk::Formatter::CSV do
|
4
|
+
describe ".print(tracks)" do
|
5
|
+
let(:tracks) do
|
6
|
+
[build(:jets_track), build(:kamakura_track)]
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:printable_tracks) do
|
10
|
+
tracks.map {|t| Musk::Decorator::PrintableTrack.new(t)}
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:attributes) do
|
14
|
+
[:path, :title, :position, :artist, :album, :genre, :year, :comment]
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:stdout) do
|
18
|
+
printable_tracks.map do |track|
|
19
|
+
attributes.map {|a| track.send(a)}.join(",").concat("\n")
|
20
|
+
end.join
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should print tracks to STDOUT in the csv format" do
|
24
|
+
capture_stdout { described_class.print(tracks) }.should eq(stdout)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -4,7 +4,15 @@ describe Musk::TrackPrinter do
|
|
4
4
|
describe ".print!(format, tracks)" do
|
5
5
|
let(:tracks) { build_list(:track, 2) }
|
6
6
|
|
7
|
-
context "when format
|
7
|
+
context "when format == 'csv'" do
|
8
|
+
it "should call Musk::Formatter::CSV.print(tracks)" do
|
9
|
+
allow(Musk::Formatter::CSV).to receive(:print).with(tracks)
|
10
|
+
described_class.print!('csv', tracks)
|
11
|
+
expect(Musk::Formatter::CSV).to have_received(:print).with(tracks)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "when format == 'pretty'" do
|
8
16
|
it "should call Musk::Formatter::Pretty.print(tracks)" do
|
9
17
|
allow(Musk::Formatter::Pretty).to receive(:print).with(tracks)
|
10
18
|
described_class.print!('pretty', tracks)
|
@@ -12,7 +20,7 @@ describe Musk::TrackPrinter do
|
|
12
20
|
end
|
13
21
|
end
|
14
22
|
|
15
|
-
context "
|
23
|
+
context "else" do
|
16
24
|
it "should raise \"Unknown format '{format}'\"" do
|
17
25
|
error = "Unknown format 'unsupported'"
|
18
26
|
expect { described_class.print!('unsupported', tracks) }.to raise_error(error)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
shared_examples "the extract command with the csv format" do |options|
|
2
|
+
let(:command) { "bundle exec bin/musk extract" }
|
3
|
+
|
4
|
+
it "should print tracks to STDOUT via Musk::Formatter::CSV" do
|
5
|
+
path = ENV["MUSK_TRACKS_PATH"]
|
6
|
+
tracks = Musk::TrackLoader.load!(path)
|
7
|
+
stdout, stderr, status = Open3.capture3("#{command} #{options} #{path}")
|
8
|
+
stdout.should eq(capture_stdout {Musk::Formatter::CSV.print(tracks)})
|
9
|
+
status.exitstatus.should eq(0)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
shared_examples "the extract command with the pretty format" do |options|
|
2
|
+
let(:command) { "bundle exec bin/musk extract" }
|
3
|
+
|
4
|
+
it "should print tracks to STDOUT via Musk::Formatter::Pretty" do
|
5
|
+
path = ENV["MUSK_TRACKS_PATH"]
|
6
|
+
tracks = Musk::TrackLoader.load!(path)
|
7
|
+
stdout, stderr, status = Open3.capture3("#{command} #{options} #{path}")
|
8
|
+
stdout.should eq(capture_stdout {Musk::Formatter::Pretty.print(tracks)})
|
9
|
+
status.exitstatus.should eq(0)
|
10
|
+
end
|
11
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
shared_examples "
|
2
|
-
|
1
|
+
shared_examples "the track decorator with nullable attributes" do |attributes|
|
2
|
+
let(:decorator) { Musk::Decorator::PrintableTrack }
|
3
3
|
|
4
4
|
attributes.each do |attribute|
|
5
5
|
describe "##{attribute}" do
|
@@ -7,7 +7,7 @@ shared_examples "a decorator with nullable attributes" do |attributes|
|
|
7
7
|
it "should return '-'" do
|
8
8
|
track = build(:track)
|
9
9
|
allow(track).to receive(attribute).and_return(nil)
|
10
|
-
|
10
|
+
decorator.new(track).send(attribute).should eq("-")
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -15,7 +15,7 @@ shared_examples "a decorator with nullable attributes" do |attributes|
|
|
15
15
|
it "should return track.#{attribute}" do
|
16
16
|
track = build(:track)
|
17
17
|
allow(track).to receive(attribute).and_return("VaLuE")
|
18
|
-
|
18
|
+
decorator.new(track).send(attribute).should eq("VaLuE")
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
shared_examples "
|
2
|
-
|
1
|
+
shared_examples "the track decorator with zeroable attributes" do |attributes|
|
2
|
+
let(:decorator) { Musk::Decorator::PrintableTrack }
|
3
3
|
|
4
4
|
attributes.each do |attribute|
|
5
5
|
describe "##{attribute}" do
|
@@ -7,7 +7,7 @@ shared_examples "a decorator with zeroable attributes" do |attributes|
|
|
7
7
|
it "should return '-'" do
|
8
8
|
track = build(:track)
|
9
9
|
allow(track).to receive(attribute).and_return(nil)
|
10
|
-
|
10
|
+
decorator.new(track).send(attribute).should eq("-")
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -15,7 +15,7 @@ shared_examples "a decorator with zeroable attributes" do |attributes|
|
|
15
15
|
it "should return '-'" do
|
16
16
|
track = build(:track)
|
17
17
|
allow(track).to receive(attribute).and_return(0)
|
18
|
-
|
18
|
+
decorator.new(track).send(attribute).should eq("-")
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -23,7 +23,7 @@ shared_examples "a decorator with zeroable attributes" do |attributes|
|
|
23
23
|
it "should return '-'" do
|
24
24
|
track = build(:track)
|
25
25
|
allow(track).to receive(attribute).and_return("0")
|
26
|
-
|
26
|
+
decorator.new(track).send(attribute).should eq("-")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -31,7 +31,7 @@ shared_examples "a decorator with zeroable attributes" do |attributes|
|
|
31
31
|
it "should return track.#{attribute}" do
|
32
32
|
track = build(:track)
|
33
33
|
allow(track).to receive(attribute).and_return("VaLuE")
|
34
|
-
|
34
|
+
decorator.new(track).send(attribute).should eq("VaLuE")
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: musk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Pempel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- bin/musk
|
139
139
|
- lib/musk.rb
|
140
140
|
- lib/musk/decorator/printable_track.rb
|
141
|
+
- lib/musk/formatter/csv.rb
|
141
142
|
- lib/musk/formatter/pretty.rb
|
142
143
|
- lib/musk/track.rb
|
143
144
|
- lib/musk/track_loader.rb
|
@@ -146,14 +147,16 @@ files:
|
|
146
147
|
- musk.gemspec
|
147
148
|
- spec/bin/musk_spec.rb
|
148
149
|
- spec/lib/musk/decorator/printable_track_spec.rb
|
150
|
+
- spec/lib/musk/formatter/csv_spec.rb
|
149
151
|
- spec/lib/musk/formatter/pretty_spec.rb
|
150
152
|
- spec/lib/musk/track_loader_spec.rb
|
151
153
|
- spec/lib/musk/track_printer_spec.rb
|
152
154
|
- spec/lib/musk/track_spec.rb
|
153
155
|
- spec/spec_helper.rb
|
154
|
-
- spec/support/examples/
|
155
|
-
- spec/support/examples/
|
156
|
-
- spec/support/examples/
|
156
|
+
- spec/support/examples/extract_command_with_csv_format_example.rb
|
157
|
+
- spec/support/examples/extract_command_with_pretty_format_example.rb
|
158
|
+
- spec/support/examples/track_decorator_with_nullable_attributes_example.rb
|
159
|
+
- spec/support/examples/track_decorator_with_zeroable_attributes_example.rb
|
157
160
|
- spec/support/factories/tracks.rb
|
158
161
|
- spec/support/helpers/capture_stdout_helper.rb
|
159
162
|
- spec/support/matchers/be_tracks_matcher.rb
|
@@ -186,14 +189,16 @@ summary: Your music with the demonic scent of musk
|
|
186
189
|
test_files:
|
187
190
|
- spec/bin/musk_spec.rb
|
188
191
|
- spec/lib/musk/decorator/printable_track_spec.rb
|
192
|
+
- spec/lib/musk/formatter/csv_spec.rb
|
189
193
|
- spec/lib/musk/formatter/pretty_spec.rb
|
190
194
|
- spec/lib/musk/track_loader_spec.rb
|
191
195
|
- spec/lib/musk/track_printer_spec.rb
|
192
196
|
- spec/lib/musk/track_spec.rb
|
193
197
|
- spec/spec_helper.rb
|
194
|
-
- spec/support/examples/
|
195
|
-
- spec/support/examples/
|
196
|
-
- spec/support/examples/
|
198
|
+
- spec/support/examples/extract_command_with_csv_format_example.rb
|
199
|
+
- spec/support/examples/extract_command_with_pretty_format_example.rb
|
200
|
+
- spec/support/examples/track_decorator_with_nullable_attributes_example.rb
|
201
|
+
- spec/support/examples/track_decorator_with_zeroable_attributes_example.rb
|
197
202
|
- spec/support/factories/tracks.rb
|
198
203
|
- spec/support/helpers/capture_stdout_helper.rb
|
199
204
|
- spec/support/matchers/be_tracks_matcher.rb
|
@@ -1,9 +0,0 @@
|
|
1
|
-
shared_examples "a command to print tracks to STDOUT in the pretty format" do
|
2
|
-
it "should print tracks to STDOUT via Musk::Formatter::Pretty" do
|
3
|
-
path = ENV["MUSK_TRACKS_PATH"]
|
4
|
-
tracks = Musk::TrackLoader.load!(path)
|
5
|
-
stdout, stderr, status = Open3.capture3("#{expected_command} #{path}")
|
6
|
-
stdout.should eq(capture_stdout { Musk::Formatter::Pretty.print(tracks) })
|
7
|
-
status.exitstatus.should eq(0)
|
8
|
-
end
|
9
|
-
end
|