cuesnap 1.0.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.
- data/.gitignore +21 -0
- data/Gemfile +3 -0
- data/Guardfile +9 -0
- data/LICENSE +22 -0
- data/README.md +72 -0
- data/Rakefile +10 -0
- data/bin/cuesnap +12 -0
- data/cuesnap.gemspec +26 -0
- data/lib/cuesnap/base.rb +3 -0
- data/lib/cuesnap/cli.rb +36 -0
- data/lib/cuesnap/splitter.rb +77 -0
- data/lib/cuesnap/version.rb +3 -0
- data/lib/cuesnap.rb +5 -0
- data/spec/cli_spec.rb +19 -0
- data/spec/fixtures/same_name.cue +7 -0
- data/spec/fixtures/same_name.mp3 +0 -0
- data/spec/fixtures/ten_minute.mp3 +0 -0
- data/spec/fixtures/ten_splits.cue +39 -0
- data/spec/fixtures/unicode.cue +19 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/splitter_spec.rb +64 -0
- metadata +156 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Jeremy Mack
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# CueSnap
|
2
|
+
|
3
|
+
Snapping MP3s with [cue sheets][1] faster than your mom pops Pringle tops.
|
4
|
+
|
5
|
+
[1]: http://en.wikipedia.org/wiki/Cue_sheet_%28computing%29
|
6
|
+
|
7
|
+
## Setup
|
8
|
+
|
9
|
+
_Tested on Mac OS X 10.7 (Lion)._
|
10
|
+
|
11
|
+
**Prerequisites**
|
12
|
+
|
13
|
+
1. [Ruby 1.9.2 or Greater](https://rvm.io/)
|
14
|
+
2. [Mac OS X](http://store.apple.com)
|
15
|
+
|
16
|
+
**Okay, let's go**
|
17
|
+
|
18
|
+
1. `brew install mp3splt` _Install the mp3 clipping lbrary, it does the heavy-lifting._
|
19
|
+
1. `gem install cuesnap` _The cuesnap command will now be available._
|
20
|
+
1. `cuesnap phattrack.mp3 phattrack.cue` _*snap -- zzrgt -- crack*_
|
21
|
+
1. `open phattrack` _Gaze into the eyes of your slim mp3 files_
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
**Run**
|
26
|
+
|
27
|
+
`cuesnap supercool_but_so_large.mp3 supercool.cue`
|
28
|
+
|
29
|
+
**and you get**
|
30
|
+
|
31
|
+
```
|
32
|
+
supercool_but_so_large\
|
33
|
+
|
|
34
|
+
|- 01 Intro.mp3
|
35
|
+
|- 02 Holy Crap - So Cool.mp3
|
36
|
+
|- 03 Slower Crap - Pretty Coo.mp3
|
37
|
+
|- 04 It's On - Like Donkey Kong.mp3
|
38
|
+
```
|
39
|
+
|
40
|
+
## Command Line Options
|
41
|
+
|
42
|
+
```
|
43
|
+
--no-numbers (-nn) -
|
44
|
+
Because, fuck sorting.
|
45
|
+
e.g. Holy Crap - So Cool.mp3
|
46
|
+
-q, --quiet
|
47
|
+
Shut the hell up cuensap. Just be quiet.
|
48
|
+
```
|
49
|
+
|
50
|
+
## Setup for Development
|
51
|
+
|
52
|
+
1. Follow the steps in the **Setup** section.
|
53
|
+
1. `git clone http://github.com/mutewinter/cuesnap` _Clone this repo, duh._
|
54
|
+
1. `cd cuesnap` _Change directory into the folder._
|
55
|
+
1. `bundle` _Setup those pretty Ruby gems._
|
56
|
+
|
57
|
+
That's it, now code something awesome and tell me about it.
|
58
|
+
|
59
|
+
## Todo
|
60
|
+
|
61
|
+
1. Unicode Support _Fail test is already in_.
|
62
|
+
2. Error Message when mp3splt is missing.
|
63
|
+
3. Lower requirements to Ruby 1.8.7 (OS X built-in Ruby).
|
64
|
+
|
65
|
+
## Contributing
|
66
|
+
|
67
|
+
1. [Fork it](https://github.com/mutewinter/cuesnap/fork_select).
|
68
|
+
2. Create your feature branch (`git checkout -b my_sweet_feature`).
|
69
|
+
3. Write some kickass code.
|
70
|
+
3. Commit your changes (`git commit -am 'Added a sweet feature'`).
|
71
|
+
4. Push to the branch (`git push origin my_sweet_feature`).
|
72
|
+
5. Create new [Pull Request](https://github.com/mutewinter/cuesnap/pulls).
|
data/Rakefile
ADDED
data/bin/cuesnap
ADDED
data/cuesnap.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/cuesnap/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.authors = ['Jeremy Mack']
|
6
|
+
s.email = ['jeremy@pileofturtles.com']
|
7
|
+
s.description = %q{A Ruby wrapper around mp3splt that makes splitting mp3s with a cue file super simple.}
|
8
|
+
s.summary = %q{A command line tool for splitting mp3s with cue files}
|
9
|
+
s.homepage = "http://github.com/mutewinter/cuesnap"
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split($\)
|
12
|
+
s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
14
|
+
s.name = "cuesnap"
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
s.version = CueSnap::VERSION
|
17
|
+
|
18
|
+
# Regular Gems
|
19
|
+
s.add_dependency 'rubycue', '~> 0.1.0'
|
20
|
+
s.add_dependency 'methadone', '~> 1.2.1'
|
21
|
+
s.add_dependency 'hashie', '~> 1.2.0'
|
22
|
+
|
23
|
+
# Development Gems
|
24
|
+
s.add_development_dependency 'minitest', '~> 3.3.0'
|
25
|
+
s.add_development_dependency 'guard-minitest', '~> 0.5.0'
|
26
|
+
end
|
data/lib/cuesnap/base.rb
ADDED
data/lib/cuesnap/cli.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'cuesnap'
|
2
|
+
require 'methadone'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
module CueSnap
|
6
|
+
class CLI
|
7
|
+
include Methadone::Main
|
8
|
+
include Methadone::CLILogging
|
9
|
+
|
10
|
+
main do |mp3_file, cue_file|
|
11
|
+
# no-numbers comes in false when it's set, I know, crazy.
|
12
|
+
options[:no_numbers] = !options[:'no-numbers'] if options.has_key?(:'no-numbers')
|
13
|
+
|
14
|
+
file_not_found mp3_file unless File.exists? mp3_file
|
15
|
+
|
16
|
+
splitter = CueSnap::Splitter.new(mp3_file, cue_file, options)
|
17
|
+
|
18
|
+
if File.exists? splitter.cue_file
|
19
|
+
splitter.split!
|
20
|
+
else
|
21
|
+
file_not_found splitter.cue_file
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
on('--no-numbers')
|
27
|
+
on('-q', '--quiet')
|
28
|
+
|
29
|
+
arg :mp3_file
|
30
|
+
arg :cue_file, :optional
|
31
|
+
|
32
|
+
def self.file_not_found(file)
|
33
|
+
help_now! "I looked for #{file}, but didn't find it."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'hashie'
|
2
|
+
require 'rubycue'
|
3
|
+
|
4
|
+
module CueSnap
|
5
|
+
class Splitter
|
6
|
+
# Public: Loads an mp3 and a RubyCue cuesheet.
|
7
|
+
#
|
8
|
+
# mp3_file - String file path to an mp3 file.
|
9
|
+
# cue_file - The path to a cuesheet for the target cue file (default: the
|
10
|
+
# name of the mp3, with .cue added).
|
11
|
+
# options - Hash of options.
|
12
|
+
# no_numbers - No number prefix for tracks.
|
13
|
+
# output_folder - The output folder to use (default: the name
|
14
|
+
# of the mp3).
|
15
|
+
#
|
16
|
+
# Returns the initalized object.
|
17
|
+
def initialize(mp3_file, cue_file = nil, options = {})
|
18
|
+
@mp3_file = mp3_file
|
19
|
+
if cue_file and cue_file.strip != ''
|
20
|
+
@cue_file = cue_file
|
21
|
+
else
|
22
|
+
@cue_file = File.expand_path("#{mp3_filename}.cue", File.dirname(@mp3_file))
|
23
|
+
end
|
24
|
+
|
25
|
+
@options = Hashie::Mash.new options
|
26
|
+
@output_folder = @options.output_folder
|
27
|
+
@output_folder ||= mp3_filename
|
28
|
+
end
|
29
|
+
|
30
|
+
# Internal: Parses the cue file using RubyCue and sets the @cuesheet
|
31
|
+
# variable.
|
32
|
+
#
|
33
|
+
# Returns nothing.
|
34
|
+
def parse_cue_file
|
35
|
+
file_contents = File.read @cue_file
|
36
|
+
file_contents.encode!('UTF-8', 'UTF-8', invalid: :replace)
|
37
|
+
@cuesheet = RubyCue::Cuesheet.new file_contents
|
38
|
+
@cuesheet.parse!
|
39
|
+
end
|
40
|
+
|
41
|
+
# Public: Splits the mp3 into files based on track_names and saves them to
|
42
|
+
# the output folder.
|
43
|
+
#
|
44
|
+
# Returns nothing.
|
45
|
+
def split!
|
46
|
+
# Wait until the last second to parse the cue file, in case the user
|
47
|
+
# changes it before we split.
|
48
|
+
parse_cue_file
|
49
|
+
|
50
|
+
format = "@p - @t"
|
51
|
+
|
52
|
+
song_count_length = (@cuesheet.songs.length + 1).to_s.length
|
53
|
+
number_format = "@N#{song_count_length > 1 ? song_count_length : ''}"
|
54
|
+
format = "#{number_format} #{format}" unless @options.no_numbers
|
55
|
+
|
56
|
+
# Got to esape the spaces for the shell
|
57
|
+
format.gsub!(/\s/, '\\ ')
|
58
|
+
|
59
|
+
command = ['mp3splt',
|
60
|
+
"-d #{output_folder}",
|
61
|
+
"-o #{format}",
|
62
|
+
"-c #@cue_file"]
|
63
|
+
command.push '-Q' if @options.quiet
|
64
|
+
command.push @mp3_file
|
65
|
+
|
66
|
+
system command.join(' ')
|
67
|
+
end
|
68
|
+
|
69
|
+
# Public: The filename for the mp3 file with the .mp3 extension removed.
|
70
|
+
def mp3_filename
|
71
|
+
File.basename(@mp3_file, '.mp3')
|
72
|
+
end
|
73
|
+
|
74
|
+
attr_reader :mp3_file, :cue_file, :output_folder, :options
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
data/lib/cuesnap.rb
ADDED
data/spec/cli_spec.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe CueSnap::CLI do
|
4
|
+
describe 'When running the command line' do
|
5
|
+
describe 'with no cue file argument' do
|
6
|
+
it 'should tell the user when no .cue file is found' do
|
7
|
+
stdin, stdout = Open3.popen3 'bin/cuesnap spec/fixtures/ten_minute.mp3'
|
8
|
+
stdout.read.must_match(/I looked for .*ten_minute\.cue, but didn't find it\./)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'with missing .mp3 argument' do
|
13
|
+
it "should tell the user when the specified mp3 isn't found" do
|
14
|
+
stdin, stdout = Open3.popen3 'bin/cuesnap spec/fixtures/missing.mp3'
|
15
|
+
stdout.read.must_match(/I looked for .*missing\.mp3, but didn't find it\./)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
File without changes
|
Binary file
|
@@ -0,0 +1,39 @@
|
|
1
|
+
PERFORMER "Sir Splits-A-Lot"
|
2
|
+
TITLE "Many Splits Test"
|
3
|
+
FILE "ten_minute.mp3" MP3
|
4
|
+
TRACK 01 AUDIO
|
5
|
+
PERFORMER "I'm First"
|
6
|
+
TITLE "Always First"
|
7
|
+
INDEX 01 01:00:00
|
8
|
+
TRACK 02 AUDIO
|
9
|
+
PERFORMER "Derp Man"
|
10
|
+
TITLE "36 Second Track"
|
11
|
+
INDEX 01 02:36:71
|
12
|
+
TRACK 03 AUDIO
|
13
|
+
PERFORMER "Herp Woman"
|
14
|
+
TITLE "Two Minute 50 Second Track"
|
15
|
+
INDEX 01 03:50:42
|
16
|
+
TRACK 05 AUDIO
|
17
|
+
PERFORMER "Test Artist"
|
18
|
+
TITLE "Tësting Unicode"
|
19
|
+
INDEX 01 04:00:00
|
20
|
+
TRACK 06 AUDIO
|
21
|
+
PERFORMER "I'm First"
|
22
|
+
TITLE "Always First"
|
23
|
+
INDEX 01 05:00:00
|
24
|
+
TRACK 07 AUDIO
|
25
|
+
PERFORMER "Derp Man"
|
26
|
+
TITLE "36 Second Track"
|
27
|
+
INDEX 01 06:36:71
|
28
|
+
TRACK 08 AUDIO
|
29
|
+
PERFORMER "Herp Woman"
|
30
|
+
TITLE "Two Minute 50 Second Track"
|
31
|
+
INDEX 01 07:50:42
|
32
|
+
TRACK 09 AUDIO
|
33
|
+
PERFORMER "Test Artist"
|
34
|
+
TITLE "Tësting Unicode"
|
35
|
+
INDEX 01 08:00:00
|
36
|
+
TRACK 10 AUDIO
|
37
|
+
PERFORMER "I'm First"
|
38
|
+
TITLE "Always First"
|
39
|
+
INDEX 01 09:00:00
|
@@ -0,0 +1,19 @@
|
|
1
|
+
PERFORMER "T�st"
|
2
|
+
TITLE "Small Unicode Test"
|
3
|
+
FILE "small_unicode.mp3" MP3
|
4
|
+
TRACK 01 AUDIO
|
5
|
+
PERFORMER "I'm First"
|
6
|
+
TITLE "Always First"
|
7
|
+
INDEX 01 00:00:00
|
8
|
+
TRACK 02 AUDIO
|
9
|
+
PERFORMER "Derp Man"
|
10
|
+
TITLE "36 Second Track"
|
11
|
+
INDEX 01 00:36:71
|
12
|
+
TRACK 03 AUDIO
|
13
|
+
PERFORMER "Herp Woman"
|
14
|
+
TITLE "Two Minute 50 Second Track"
|
15
|
+
INDEX 01 02:50:42
|
16
|
+
TRACK 04 AUDIO
|
17
|
+
PERFORMER "Test Artist"
|
18
|
+
TITLE "T�sting Unicode"
|
19
|
+
INDEX 01 10:00:00
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
require "minitest/autorun"
|
4
|
+
require "minitest/pride"
|
5
|
+
|
6
|
+
require 'cuesnap'
|
7
|
+
require 'rubycue'
|
8
|
+
|
9
|
+
# -------------
|
10
|
+
# Constants
|
11
|
+
# -------------
|
12
|
+
|
13
|
+
OUTPUT_FOLDER = File.expand_path("../../tmp/spec_output", __FILE__)
|
14
|
+
|
15
|
+
# -------------
|
16
|
+
# Helpers
|
17
|
+
# -------------
|
18
|
+
def cuesheet_fixture(name)
|
19
|
+
if name && name.strip != ''
|
20
|
+
fixture_path "#{name}.cue"
|
21
|
+
else
|
22
|
+
name
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def mp3_fixture(name)
|
27
|
+
fixture_path "#{name}.mp3"
|
28
|
+
end
|
29
|
+
|
30
|
+
def fixture_path(name)
|
31
|
+
File.join(File.dirname(__FILE__), "fixtures/#{name}")
|
32
|
+
end
|
33
|
+
|
34
|
+
def load_splitter(mp3_name, cuesheet_name)
|
35
|
+
mp3 = mp3_fixture(mp3_name)
|
36
|
+
cuesheet = cuesheet_fixture(cuesheet_name)
|
37
|
+
|
38
|
+
@splitter = CueSnap::Splitter.new(mp3, cuesheet, {
|
39
|
+
quiet: true,
|
40
|
+
output_folder: "#{Time.now.to_i}#{rand(1000)}"
|
41
|
+
})
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
# -------------
|
46
|
+
# Output Folder
|
47
|
+
# -------------
|
48
|
+
|
49
|
+
def cd_to_output
|
50
|
+
FileUtils.mkdir_p OUTPUT_FOLDER unless File.exists? OUTPUT_FOLDER
|
51
|
+
Dir.chdir OUTPUT_FOLDER
|
52
|
+
end
|
53
|
+
|
54
|
+
# Public: Get all of the mp3s in the output folder for the splitter.
|
55
|
+
def created_mp3s
|
56
|
+
Dir.glob("#{@splitter.output_folder}/*.mp3").map { |f| File.basename f }
|
57
|
+
end
|
58
|
+
|
59
|
+
# Public: Adds after test suite callback to ensure temporary files are deleted.
|
60
|
+
class MyMiniTest
|
61
|
+
class Unit < MiniTest::Unit
|
62
|
+
def before_suites
|
63
|
+
end
|
64
|
+
|
65
|
+
def after_suites
|
66
|
+
remove_mp3s
|
67
|
+
remove_empty_directories
|
68
|
+
end
|
69
|
+
|
70
|
+
def remove_mp3s
|
71
|
+
Dir.glob("#{OUTPUT_FOLDER}/**/*.mp3").each do |f|
|
72
|
+
File.delete f unless File.directory? f
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def remove_empty_directories
|
77
|
+
Dir.glob("#{OUTPUT_FOLDER}/*/").each { |d| Dir.delete d }
|
78
|
+
end
|
79
|
+
|
80
|
+
def _run_suites(suites, type)
|
81
|
+
begin
|
82
|
+
before_suites
|
83
|
+
super(suites, type)
|
84
|
+
ensure
|
85
|
+
after_suites
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def _run_suite(suite, type)
|
90
|
+
begin
|
91
|
+
suite.before_suite if suite.respond_to?(:before_suite)
|
92
|
+
super(suite, type)
|
93
|
+
ensure
|
94
|
+
suite.after_suite if suite.respond_to?(:after_suite)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
MiniTest::Unit.runner = MyMiniTest::Unit.new
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../spec_helper', __FILE__)
|
3
|
+
|
4
|
+
describe CueSnap::Splitter do
|
5
|
+
|
6
|
+
describe 'When splitting ten_minute.mp3 and unicode.cue' do
|
7
|
+
|
8
|
+
before do
|
9
|
+
load_splitter 'ten_minute', 'unicode'
|
10
|
+
cd_to_output
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'splitting should produce 4 mp3 files' do
|
14
|
+
created_mp3s.length.wont_equal 4
|
15
|
+
@splitter.split!
|
16
|
+
created_mp3s.length.must_equal 4
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'the third track should not have a zero-padded index' do
|
20
|
+
# FIXME failing test
|
21
|
+
@splitter.split!
|
22
|
+
created_mp3s[2].must_match(/^3/)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'it should have no numbers when no_numbers is specified' do
|
26
|
+
@splitter.options.no_numbers = true
|
27
|
+
@splitter.split!
|
28
|
+
created_mp3s.first.must_equal 'Derp Man - 36 Second Track.mp3'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'the fourth track should be proper unicode' do
|
32
|
+
@splitter.split!
|
33
|
+
created_mp3s[3].must_equal "Tësting Unicode"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'When splitting ten_minute.mp3 and ten_splits.cue' do
|
39
|
+
|
40
|
+
before do
|
41
|
+
load_splitter 'ten_minute', 'ten_splits'
|
42
|
+
cd_to_output
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'must zero pad tracks less than 10th' do
|
46
|
+
@splitter.split!
|
47
|
+
created_mp3s.first.must_match(/^01/)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'When splitting same_name.mp3 without specified cuefile' do
|
52
|
+
|
53
|
+
before do
|
54
|
+
load_splitter 'same_name', nil
|
55
|
+
cd_to_output
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should default to using same_name.cue' do
|
59
|
+
File.basename(@splitter.cue_file).must_equal 'same_name.cue'
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cuesnap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jeremy Mack
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rubycue
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.1.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.1.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: methadone
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.2.1
|
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: 1.2.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: hashie
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.2.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: 1.2.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: 3.3.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: 3.3.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-minitest
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 0.5.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.5.0
|
94
|
+
description: A Ruby wrapper around mp3splt that makes splitting mp3s with a cue file
|
95
|
+
super simple.
|
96
|
+
email:
|
97
|
+
- jeremy@pileofturtles.com
|
98
|
+
executables:
|
99
|
+
- cuesnap
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- .gitignore
|
104
|
+
- Gemfile
|
105
|
+
- Guardfile
|
106
|
+
- LICENSE
|
107
|
+
- README.md
|
108
|
+
- Rakefile
|
109
|
+
- bin/cuesnap
|
110
|
+
- cuesnap.gemspec
|
111
|
+
- lib/cuesnap.rb
|
112
|
+
- lib/cuesnap/base.rb
|
113
|
+
- lib/cuesnap/cli.rb
|
114
|
+
- lib/cuesnap/splitter.rb
|
115
|
+
- lib/cuesnap/version.rb
|
116
|
+
- spec/cli_spec.rb
|
117
|
+
- spec/fixtures/same_name.cue
|
118
|
+
- spec/fixtures/same_name.mp3
|
119
|
+
- spec/fixtures/ten_minute.mp3
|
120
|
+
- spec/fixtures/ten_splits.cue
|
121
|
+
- spec/fixtures/unicode.cue
|
122
|
+
- spec/spec_helper.rb
|
123
|
+
- spec/splitter_spec.rb
|
124
|
+
homepage: http://github.com/mutewinter/cuesnap
|
125
|
+
licenses: []
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 1.8.24
|
145
|
+
signing_key:
|
146
|
+
specification_version: 3
|
147
|
+
summary: A command line tool for splitting mp3s with cue files
|
148
|
+
test_files:
|
149
|
+
- spec/cli_spec.rb
|
150
|
+
- spec/fixtures/same_name.cue
|
151
|
+
- spec/fixtures/same_name.mp3
|
152
|
+
- spec/fixtures/ten_minute.mp3
|
153
|
+
- spec/fixtures/ten_splits.cue
|
154
|
+
- spec/fixtures/unicode.cue
|
155
|
+
- spec/spec_helper.rb
|
156
|
+
- spec/splitter_spec.rb
|