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 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