musical 0.0.1 → 0.0.2
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/Gemfile +1 -0
- data/README.rdoc +8 -3
- data/VERSION +1 -1
- data/bin/musical +2 -2
- data/lib/musical.rb +25 -121
- data/lib/musical/dvd.rb +132 -0
- data/lib/musical/itunes.rb +31 -0
- data/musical.gemspec +7 -2
- metadata +24 -11
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
= musical
|
2
2
|
|
3
3
|
Musical is a simple tool for your DVD.
|
4
|
-
It enables you to rip and
|
4
|
+
It enables you to rip data by chapter, encode it with your iTunes setting and add it to your iTunes library automatically.
|
5
5
|
|
6
6
|
|
7
7
|
== Install
|
8
8
|
|
9
|
-
1
|
9
|
+
1 Musical depends on dvdbackup and ffmpeg. To install them try this for example,
|
10
10
|
brew install dvdbackup
|
11
11
|
brew install ffmpeg
|
12
12
|
|
@@ -21,13 +21,18 @@ Set you DVD and type
|
|
21
21
|
Options:
|
22
22
|
--info, -i: Show your DVD data
|
23
23
|
--ignore-convert-sound, -g: Rip data only, NOT convert them to wav file
|
24
|
+
--ignore-use-itunes, -n: NOT add ripped files to iTunes and encode the
|
24
25
|
--dev, -d <s>: Set location of DVD device
|
25
26
|
--title, -t <s>: Set DVD title (default: LIVE)
|
27
|
+
--artist, -a <s>: Set DVD artist (default: Artist)
|
26
28
|
--output, -o <s>: Set location of ripped data (default: ripped)
|
27
29
|
--version, -v: Print version and exit
|
28
30
|
--help, -h: Show this message
|
29
31
|
|
30
32
|
|
33
|
+
When you use iTunes, you should use --title and --artist options. They will help you to manage your music library easily.
|
34
|
+
|
35
|
+
|
31
36
|
== FAQ
|
32
37
|
|
33
38
|
=== On Mac OS X 10.7.x, I cannot install ffmpeg.
|
@@ -35,7 +40,7 @@ Options:
|
|
35
40
|
The latest Xcode doesn't include gcc. Install gcc-4.2[https://github.com/kennethreitz/osx-gcc-installer].
|
36
41
|
|
37
42
|
And try this.
|
38
|
-
brew install --use-
|
43
|
+
brew install --use-gcc ffmpeg
|
39
44
|
|
40
45
|
|
41
46
|
=== I got an error, /bin/sh: /usr/bin/pod2man: Permission denied
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/bin/musical
CHANGED
data/lib/musical.rb
CHANGED
@@ -2,135 +2,39 @@ require 'rubygems'
|
|
2
2
|
require 'trollop'
|
3
3
|
require 'progressbar'
|
4
4
|
require 'fileutils'
|
5
|
+
require 'appscript'
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
attr_accessor :opts
|
9
|
-
|
10
|
-
def self.detect
|
11
|
-
dev_infos = `df -h | awk {'print $1,$5,$6'}`.split("\n")
|
12
|
-
candidates = []
|
13
|
-
dev_infos.each do |dev_info|
|
14
|
-
info = dev_info.split(" ")
|
15
|
-
file_system = info[0]
|
16
|
-
capacity = info[1]
|
17
|
-
mounted = info[2]
|
18
|
-
if capacity == "100%" && mounted.include?("/Volumes")
|
19
|
-
candidates << mounted
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
raise "Not detect DVD device" if candidates.empty?
|
24
|
-
candidates
|
25
|
-
end
|
26
|
-
|
27
|
-
def initialize
|
28
|
-
@opts = Trollop::options do
|
29
|
-
version 'Musical 0.0.1'
|
30
|
-
opt :info, "Show your DVD data", :type => :boolean
|
31
|
-
opt :ignore_convert_sound, "Rip data only, NOT convert them to wav file", :type => :boolean
|
32
|
-
opt :dev, "Set location of DVD device"
|
33
|
-
opt :title, "Set DVD title", :default => 'LIVE'
|
34
|
-
opt :output, "Set location of ripped data", :default => 'ripped'
|
35
|
-
end
|
36
|
-
run
|
37
|
-
end
|
38
|
-
|
39
|
-
def run
|
40
|
-
check_env
|
41
|
-
return puts info if @opts[:info]
|
42
|
-
rip_by_chapter
|
43
|
-
convert_sound unless @opts[:ignore_convert_sound]
|
44
|
-
end
|
45
|
-
|
46
|
-
def dev
|
47
|
-
@_dev ||= DVD.detect.first
|
48
|
-
end
|
49
|
-
|
50
|
-
def info
|
51
|
-
raise "Not detect DVD device" if dev.empty?
|
52
|
-
@_info ||= `dvdbackup --input=#{dev} --info 2>/dev/null`
|
53
|
-
end
|
54
|
-
|
55
|
-
def title_with_chapters
|
56
|
-
return @_title_chapters unless @_title_chapters.nil?
|
57
|
-
|
58
|
-
@_title_chapters = []
|
59
|
-
info_str = info.split("\n")
|
60
|
-
info_str.each_with_index do |line, index|
|
61
|
-
if line =~ /\s*Title (\d):$/
|
62
|
-
@_title_chapters << { :title => $1.to_i, :line => index }
|
63
|
-
end
|
64
|
-
end
|
7
|
+
require 'musical/dvd'
|
8
|
+
require 'musical/itunes'
|
65
9
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
@_title_chapters
|
74
|
-
end
|
75
|
-
|
76
|
-
def rip_by_chapter
|
77
|
-
task_message "Ripping"
|
78
|
-
|
79
|
-
pbar = ProgressBar.new "Ripping", chapter_size
|
80
|
-
title_with_chapters.each_with_index do |title_chapter, title_index|
|
81
|
-
ripped_dir_base = "#{@opts[:output]}"
|
82
|
-
saved_dir = "#{ripped_dir_base}/#{@opts[:title]}/title_#{title_index+1}"
|
83
|
-
FileUtils.mkdir_p "#{saved_dir}"
|
84
|
-
|
85
|
-
1.upto title_chapter[:chapter] do |chapter|
|
86
|
-
`dvdbackup --name=#{@opts[:title]} --input=#{dev} --title=#{title_index+1} --start=#{chapter} --end=#{chapter} --output=#{ripped_dir_base}_#{title_index}_#{chapter} 2>/dev/null`
|
87
|
-
pbar.inc
|
88
|
-
|
89
|
-
# moved file
|
90
|
-
vob_path = `find #{ripped_dir_base}_#{title_index}_#{chapter} -name "*.VOB"`.chomp
|
91
|
-
FileUtils.mv vob_path, "#{saved_dir}/chapter_#{chapter}.VOB"
|
92
|
-
FileUtils.rm_rf "#{ripped_dir_base}_#{title_index}_#{chapter}"
|
93
|
-
end
|
94
|
-
end
|
95
|
-
pbar.finish
|
96
|
-
end
|
97
|
-
|
98
|
-
def convert_sound
|
99
|
-
task_message "Converting"
|
100
|
-
|
101
|
-
pbar = ProgressBar.new "Converting", chapter_size
|
102
|
-
title_with_chapters.each_with_index do |title_chapter, title_index|
|
103
|
-
ripped_dir_base = "#{@opts[:output]}"
|
104
|
-
saved_dir = "#{ripped_dir_base}/#{@opts[:title]}/title_#{title_index+1}"
|
105
|
-
|
106
|
-
1.upto title_chapter[:chapter] do |chapter|
|
107
|
-
`ffmpeg -i #{saved_dir}/chapter_#{chapter}.VOB #{saved_dir}/chapter_#{chapter}.wav 2>/dev/null`
|
108
|
-
FileUtils.rm_f "#{saved_dir}/chapter_#{chapter}.VOB"
|
109
|
-
pbar.inc
|
110
|
-
end
|
10
|
+
module Musical
|
11
|
+
def setup
|
12
|
+
# check env
|
13
|
+
['dvdbackup', 'ffmpeg'].each do |app|
|
14
|
+
if `which #{app}`.empty?
|
15
|
+
raise RuntimeError, "\n\n'#{app}' is not installed.\n\ntry:\n brew install #{app}\n\n"
|
111
16
|
end
|
112
|
-
pbar.finish
|
113
17
|
end
|
114
18
|
|
115
|
-
|
116
|
-
raise "Not found any titles and chapters" if title_with_chapters.size == 0 && chapter_size == 0
|
117
|
-
puts "#{task} #{title_with_chapters.size} titles, #{chapter_size} chapters to #{@opts[:output]} directory"
|
118
|
-
end
|
119
|
-
private :task_message
|
19
|
+
version = open(File.join(File.dirname(__FILE__), "..", "VERSION")){ |f| f.gets }
|
120
20
|
|
121
|
-
|
122
|
-
|
21
|
+
# parse options
|
22
|
+
opts = Trollop::options do
|
23
|
+
version "Musical #{version}"
|
24
|
+
opt :info, "Show your DVD data", :type => :boolean
|
25
|
+
opt :ignore_convert_sound, "Rip data only, NOT convert them to wav file", :type => :boolean
|
26
|
+
opt :ignore_use_itunes, "NOT add ripped files to iTunes and encode them"
|
27
|
+
opt :dev, "Set location of DVD device"
|
28
|
+
opt :title, "Set DVD title", :default => 'LIVE'
|
29
|
+
opt :artist, "Set DVD artist", :default => 'Artist'
|
30
|
+
opt :output, "Set location of ripped data", :default => 'ripped'
|
123
31
|
end
|
124
|
-
private :chapter_size
|
125
32
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
raise RuntimeError, "\n\n'#{app}' is not installed.\n\ntry:\n brew install #{app}\n\n"
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
private :check_env
|
33
|
+
# fix fox dvdbackup
|
34
|
+
opts[:trim_title] = opts[:title].gsub(" ", "_")
|
35
|
+
opts[:trim_artist] = opts[:artist].gsub(" ", "_")
|
134
36
|
|
37
|
+
opts
|
135
38
|
end
|
39
|
+
|
136
40
|
end
|
data/lib/musical/dvd.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
module Musical
|
2
|
+
class DVD
|
3
|
+
attr_accessor :opts
|
4
|
+
|
5
|
+
def self.detect
|
6
|
+
dev_infos = `df -h | awk {'print $1,$5,$6'}`.split("\n")
|
7
|
+
candidates = []
|
8
|
+
dev_infos.each do |dev_info|
|
9
|
+
info = dev_info.split(" ")
|
10
|
+
file_system = info[0]
|
11
|
+
capacity = info[1]
|
12
|
+
mounted = info[2]
|
13
|
+
if capacity == "100%" && mounted.include?("/Volumes")
|
14
|
+
candidates << mounted
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
raise "Not detect DVD device" if candidates.empty?
|
19
|
+
candidates
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(options={})
|
23
|
+
@opts = options
|
24
|
+
|
25
|
+
return puts info if @opts[:info]
|
26
|
+
|
27
|
+
# rip_by_chapter
|
28
|
+
# convert_sound unless @opts[:ignore_convert_sound]
|
29
|
+
to_itunes unless @opts[:ignore_use_itunes]
|
30
|
+
end
|
31
|
+
|
32
|
+
def dev
|
33
|
+
@_dev ||= DVD.detect.first
|
34
|
+
end
|
35
|
+
|
36
|
+
def info
|
37
|
+
raise "Not detect DVD device" if dev.empty?
|
38
|
+
@_info ||= `dvdbackup --input=#{dev} --info 2>/dev/null`
|
39
|
+
end
|
40
|
+
|
41
|
+
def title_with_chapters
|
42
|
+
return @_title_chapters unless @_title_chapters.nil?
|
43
|
+
|
44
|
+
@_title_chapters = []
|
45
|
+
info_str = info.split("\n")
|
46
|
+
info_str.each_with_index do |line, index|
|
47
|
+
if line =~ /\s*Title (\d):$/
|
48
|
+
@_title_chapters << { :title => $1.to_i, :line => index }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@_title_chapters.each do |title_chapter|
|
53
|
+
line = title_chapter[:line]
|
54
|
+
if info_str[line + 1] =~ /\s*Title (\d) has (\d*) chapter/
|
55
|
+
title_chapter[:chapter] = $2.to_i
|
56
|
+
title_chapter.delete(:line)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
@_title_chapters
|
60
|
+
end
|
61
|
+
|
62
|
+
def rip_by_chapter
|
63
|
+
task_message "Ripping"
|
64
|
+
|
65
|
+
pbar = ProgressBar.new "Ripping", chapter_size
|
66
|
+
title_with_chapters.each_with_index do |title_chapter, title_index|
|
67
|
+
ripped_dir_base = "#{@opts[:output]}"
|
68
|
+
saved_dir = "#{ripped_dir_base}/#{@opts[:trim_title]}/title_#{title_index+1}"
|
69
|
+
FileUtils.mkdir_p "#{saved_dir}"
|
70
|
+
|
71
|
+
1.upto title_chapter[:chapter] do |chapter|
|
72
|
+
`dvdbackup --name=#{@opts[:trim_title]} --input=#{dev} --title=#{title_index+1} --start=#{chapter} --end=#{chapter} --output=#{ripped_dir_base}_#{title_index}_#{chapter} 2>/dev/null`
|
73
|
+
pbar.inc
|
74
|
+
# moved file
|
75
|
+
vob_path = `find #{ripped_dir_base}_#{title_index}_#{chapter} -name "*.VOB"`.chomp
|
76
|
+
FileUtils.mv vob_path, "#{saved_dir}/chapter_#{chapter}.VOB"
|
77
|
+
FileUtils.rm_rf "#{ripped_dir_base}_#{title_index}_#{chapter}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
pbar.finish
|
81
|
+
end
|
82
|
+
|
83
|
+
def convert_sound
|
84
|
+
task_message "Converting"
|
85
|
+
|
86
|
+
pbar = ProgressBar.new "Converting", chapter_size
|
87
|
+
title_with_chapters.each_with_index do |title_chapter, title_index|
|
88
|
+
ripped_dir_base = "#{@opts[:output]}"
|
89
|
+
saved_dir = "#{ripped_dir_base}/#{@opts[:trim_title]}/title_#{title_index+1}"
|
90
|
+
|
91
|
+
1.upto title_chapter[:chapter] do |chapter|
|
92
|
+
`ffmpeg -i #{saved_dir}/chapter_#{chapter}.VOB #{saved_dir}/chapter_#{chapter}.wav 2>/dev/null`
|
93
|
+
FileUtils.rm_f "#{saved_dir}/chapter_#{chapter}.VOB"
|
94
|
+
pbar.inc
|
95
|
+
end
|
96
|
+
end
|
97
|
+
pbar.finish
|
98
|
+
end
|
99
|
+
|
100
|
+
def to_itunes
|
101
|
+
task_message "To iTunes"
|
102
|
+
|
103
|
+
pbar = ProgressBar.new "To iTunes", chapter_size
|
104
|
+
its = ITunes.new
|
105
|
+
|
106
|
+
title_with_chapters.each_with_index do |title_chapter, title_index|
|
107
|
+
ripped_dir_base = "#{@opts[:output]}"
|
108
|
+
saved_dir = "#{ripped_dir_base}/#{@opts[:trim_title]}/title_#{title_index+1}"
|
109
|
+
|
110
|
+
options = { :album => @opts[:title], :artist => @opts[:artist], :track_count => title_chapter[:chapter]}
|
111
|
+
1.upto title_chapter[:chapter] do |chapter|
|
112
|
+
its.add("#{saved_dir}/chapter_#{chapter}.wav", options.merge(:track_number => chapter))
|
113
|
+
pbar.inc
|
114
|
+
end
|
115
|
+
end
|
116
|
+
FileUtils.rm_rf @opts[:output]
|
117
|
+
pbar.finish
|
118
|
+
end
|
119
|
+
|
120
|
+
def chapter_size
|
121
|
+
@_chapter_size ||= title_with_chapters.inject(0){ |count, t| count + t[:chapter]}
|
122
|
+
end
|
123
|
+
private :chapter_size
|
124
|
+
|
125
|
+
def task_message(task)
|
126
|
+
raise "Not found any titles and chapters" if title_with_chapters.size == 0 && chapter_size == 0
|
127
|
+
puts "#{task} #{title_with_chapters.size} titles, #{chapter_size} chapters"
|
128
|
+
end
|
129
|
+
private :task_message
|
130
|
+
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Musical
|
2
|
+
include Appscript
|
3
|
+
|
4
|
+
class ITunes
|
5
|
+
attr_accessor :opts
|
6
|
+
def initialize(options = {})
|
7
|
+
raise "iTunes support works on only Mac OSX" unless RUBY_PLATFORM.include? "darwin"
|
8
|
+
@opts = options # not used yet
|
9
|
+
end
|
10
|
+
|
11
|
+
def its
|
12
|
+
@_its ||= app "iTunes.app"
|
13
|
+
end
|
14
|
+
|
15
|
+
def add(file_path, options = {})
|
16
|
+
wav = its.add MacTypes::FileURL.path(File.expand_path(file_path))
|
17
|
+
return if wav.nil?
|
18
|
+
|
19
|
+
tracks = wav.convert
|
20
|
+
sleep 5 # FIXME
|
21
|
+
tracks.each do |track|
|
22
|
+
[:name, :album, :artist, :track_count, :track_number].each do |key|
|
23
|
+
unless options[key].nil?
|
24
|
+
track.send(key).set options[key]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
its.delete wav
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/musical.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{musical}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["ryo katsuma"]
|
12
|
-
s.date = %q{2011-11-
|
12
|
+
s.date = %q{2011-11-26}
|
13
13
|
s.default_executable = %q{musical}
|
14
14
|
s.description = %q{Musical is a simple rip and convert tool for your DVD. It enables you to rip and convert it to wav data by chapter.}
|
15
15
|
s.email = %q{katsuma@gmail.com}
|
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
|
|
28
28
|
"VERSION",
|
29
29
|
"bin/musical",
|
30
30
|
"lib/musical.rb",
|
31
|
+
"lib/musical/dvd.rb",
|
32
|
+
"lib/musical/itunes.rb",
|
31
33
|
"musical.gemspec",
|
32
34
|
"spec/musical_spec.rb",
|
33
35
|
"spec/spec_helper.rb"
|
@@ -44,6 +46,7 @@ Gem::Specification.new do |s|
|
|
44
46
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
45
47
|
s.add_runtime_dependency(%q<trollop>, [">= 1.16.2"])
|
46
48
|
s.add_runtime_dependency(%q<progressbar>, [">= 0.9.1"])
|
49
|
+
s.add_runtime_dependency(%q<rb-appscript>, [">= 0.6.1"])
|
47
50
|
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
48
51
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
49
52
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -51,6 +54,7 @@ Gem::Specification.new do |s|
|
|
51
54
|
else
|
52
55
|
s.add_dependency(%q<trollop>, [">= 1.16.2"])
|
53
56
|
s.add_dependency(%q<progressbar>, [">= 0.9.1"])
|
57
|
+
s.add_dependency(%q<rb-appscript>, [">= 0.6.1"])
|
54
58
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
55
59
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
56
60
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -59,6 +63,7 @@ Gem::Specification.new do |s|
|
|
59
63
|
else
|
60
64
|
s.add_dependency(%q<trollop>, [">= 1.16.2"])
|
61
65
|
s.add_dependency(%q<progressbar>, [">= 0.9.1"])
|
66
|
+
s.add_dependency(%q<rb-appscript>, [">= 0.6.1"])
|
62
67
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
63
68
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
64
69
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: musical
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- ryo katsuma
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-11-
|
13
|
+
date: 2011-11-26 00:00:00 +09:00
|
14
14
|
default_executable: musical
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -36,8 +36,19 @@ dependencies:
|
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: rb-appscript
|
40
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.6.1
|
46
|
+
type: :runtime
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rspec
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
41
52
|
none: false
|
42
53
|
requirements:
|
43
54
|
- - ~>
|
@@ -45,10 +56,10 @@ dependencies:
|
|
45
56
|
version: 2.3.0
|
46
57
|
type: :development
|
47
58
|
prerelease: false
|
48
|
-
version_requirements: *
|
59
|
+
version_requirements: *id004
|
49
60
|
- !ruby/object:Gem::Dependency
|
50
61
|
name: bundler
|
51
|
-
requirement: &
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
52
63
|
none: false
|
53
64
|
requirements:
|
54
65
|
- - ~>
|
@@ -56,10 +67,10 @@ dependencies:
|
|
56
67
|
version: 1.0.0
|
57
68
|
type: :development
|
58
69
|
prerelease: false
|
59
|
-
version_requirements: *
|
70
|
+
version_requirements: *id005
|
60
71
|
- !ruby/object:Gem::Dependency
|
61
72
|
name: jeweler
|
62
|
-
requirement: &
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
63
74
|
none: false
|
64
75
|
requirements:
|
65
76
|
- - ~>
|
@@ -67,10 +78,10 @@ dependencies:
|
|
67
78
|
version: 1.6.4
|
68
79
|
type: :development
|
69
80
|
prerelease: false
|
70
|
-
version_requirements: *
|
81
|
+
version_requirements: *id006
|
71
82
|
- !ruby/object:Gem::Dependency
|
72
83
|
name: rcov
|
73
|
-
requirement: &
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
74
85
|
none: false
|
75
86
|
requirements:
|
76
87
|
- - ">="
|
@@ -78,7 +89,7 @@ dependencies:
|
|
78
89
|
version: "0"
|
79
90
|
type: :development
|
80
91
|
prerelease: false
|
81
|
-
version_requirements: *
|
92
|
+
version_requirements: *id007
|
82
93
|
description: Musical is a simple rip and convert tool for your DVD. It enables you to rip and convert it to wav data by chapter.
|
83
94
|
email: katsuma@gmail.com
|
84
95
|
executables:
|
@@ -98,6 +109,8 @@ files:
|
|
98
109
|
- VERSION
|
99
110
|
- bin/musical
|
100
111
|
- lib/musical.rb
|
112
|
+
- lib/musical/dvd.rb
|
113
|
+
- lib/musical/itunes.rb
|
101
114
|
- musical.gemspec
|
102
115
|
- spec/musical_spec.rb
|
103
116
|
- spec/spec_helper.rb
|
@@ -115,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
128
|
requirements:
|
116
129
|
- - ">="
|
117
130
|
- !ruby/object:Gem::Version
|
118
|
-
hash:
|
131
|
+
hash: -3076262886197774611
|
119
132
|
segments:
|
120
133
|
- 0
|
121
134
|
version: "0"
|