cuesnap 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|