cuesnap 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+
19
+ /cuesnap
20
+ /vendor/
21
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # Guardfile for running minitest specs.
2
+
3
+ guard 'minitest' do
4
+ # with Minitest::Spec
5
+ watch(%r|^spec/(.*)_spec\.rb|)
6
+ watch(%r|^lib/(.*)/([^/]+)\.rb|) { |m| "spec/#{m[2]}_spec.rb" }
7
+ watch(%r|^spec/spec_helper\.rb|) { 'spec' }
8
+
9
+ end
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
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.pattern = "spec/*_spec.rb"
8
+ end
9
+
10
+ task default: ['test']
data/bin/cuesnap ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+
4
+ begin
5
+ require 'cuesnap/cli'
6
+ CueSnap::CLI.go!
7
+ rescue Interrupt => e
8
+ puts "\nQuitting..."
9
+ exit 1
10
+ rescue SystemExit => e
11
+ exit e.status
12
+ end
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
@@ -0,0 +1,3 @@
1
+ require 'cuesnap/version'
2
+ require 'cuesnap/cli'
3
+ require 'cuesnap/splitter'
@@ -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
@@ -0,0 +1,3 @@
1
+ module CueSnap
2
+ VERSION = '1.0.0'
3
+ end
data/lib/cuesnap.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'cuesnap/base'
2
+
3
+ module CueSnap
4
+ autoload :CLI, 'cuesnap/cli'
5
+ end
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
@@ -0,0 +1,7 @@
1
+ PERFORMER "Same Name"
2
+ TITLE "Same Man"
3
+ FILE "same_name.mp3" MP3
4
+ TRACK 01 AUDIO
5
+ PERFORMER "So Samy"
6
+ TITLE "Mr. Same"
7
+ INDEX 01 01:00:00
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
@@ -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