discid 1.0.0rc2 → 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.
- checksums.yaml +15 -0
- data/CHANGES +4 -0
- data/README.md +13 -3
- data/discid.gemspec +6 -3
- data/examples/discidinfo.rb +23 -0
- data/examples/readdiscid.rb +1 -1
- data/lib/discid/disc.rb +4 -4
- data/lib/discid/lib.rb +1 -1
- data/lib/discid/{track_info.rb → track.rb} +14 -14
- data/lib/discid/version.rb +1 -1
- data/test/test_disc.rb +1 -1
- data/test/test_discid.rb +1 -1
- data/test/{test_track_info.rb → test_track.rb} +10 -10
- metadata +16 -27
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OWU1OTZiMzAyYzIxNGEzOTliYmRmMjc4MzI5MWNiZjAxM2FlOWJkOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NzRjNTM3MjYwMzQ2NWJlNjVmY2YyNmE0NDBlMDE1ZThiNDIwODcyNQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZWI2ZTdjOTNlOTIyMzk5NDNhZDVjOGFmNjk4MTg4ZDVmYWVhNzBmNTQ0ZjI3
|
10
|
+
MmM2YWNlZDI3NmZiOTVmNzU1NTk0NGM0YTkwMjAyOWFiNWNiOTY0ZDgyMTYw
|
11
|
+
MDQ3ODEyMGVlZDBjYmZiYmFjZTc0N2ZmYzZjYTRhZGE0M2MzNTQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NDUxZmJkOGQ4NTA3ZTdiYjk4Yjg4YjFhOTZkNTBhOThhMDA4NTE5NzE2YzYy
|
14
|
+
NDM3NjBlZmZmYzQ5MTUxZmE1NDVlMGYzNmZjMDFiMzgxZTY1YzVmYjEyZmM0
|
15
|
+
MjA4ZDljY2Y1NmYzNzg0OWQ1ZDkxNTQxNDJlMzJjNWExMWMzYTY=
|
data/CHANGES
CHANGED
data/README.md
CHANGED
@@ -6,8 +6,9 @@ It allows calculating DiscIDs (MusicBrainz and freedb) for Audio CDs. Additional
|
|
6
6
|
the library can extract the MCN/UPC/EAN and the ISRCs from disc.
|
7
7
|
|
8
8
|
## Requirements
|
9
|
-
* Ruby >= 1.8.
|
10
|
-
*
|
9
|
+
* Ruby >= 1.8.7
|
10
|
+
* RubyGems >= 1.3.6
|
11
|
+
* Ruby-FFI >= 1.6.0
|
11
12
|
* libdiscid >= 0.1.0
|
12
13
|
|
13
14
|
## Installation
|
@@ -18,9 +19,18 @@ Installing ruby-discid is best done using RubyGems:
|
|
18
19
|
|
19
20
|
gem install discid
|
20
21
|
|
21
|
-
|
22
|
+
You can also install from source. This requires RubyGems and Bundler installed.
|
23
|
+
First make sure you have installed bundler:
|
22
24
|
|
25
|
+
gem install bundler
|
26
|
+
|
27
|
+
Then inside the ruby-discid source directory run:
|
28
|
+
|
29
|
+
bundle install
|
23
30
|
rake install
|
31
|
+
|
32
|
+
`bundle install` will install additional development dependencies (Rake, Yard
|
33
|
+
and Kramdown). `rake install` will build the discid gem and install it.
|
24
34
|
|
25
35
|
## Usage
|
26
36
|
|
data/discid.gemspec
CHANGED
@@ -13,16 +13,19 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "https://github.com/phw/ruby-discid"
|
14
14
|
spec.license = "LGPL-3"
|
15
15
|
spec.post_install_message = %q{Please make sure you have libdiscid (http://musicbrainz.org/doc/libdiscid) installed.}
|
16
|
-
|
16
|
+
|
17
|
+
spec.requirements = "libdiscid >= 0.1.0"
|
18
|
+
spec.required_ruby_version = ">= 1.8.7"
|
19
|
+
spec.required_rubygems_version = ">= 1.3.6"
|
17
20
|
|
18
21
|
spec.files = `git ls-files`.split($/)
|
19
22
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
23
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
24
|
spec.require_paths = ["lib"]
|
22
25
|
|
23
|
-
spec.add_dependency "ffi", "
|
26
|
+
spec.add_dependency "ffi", ">= 1.6.0"
|
24
27
|
|
25
|
-
spec.add_development_dependency "bundler", "
|
28
|
+
spec.add_development_dependency "bundler", ">= 1.3"
|
26
29
|
spec.add_development_dependency "rake"
|
27
30
|
spec.add_development_dependency "yard"
|
28
31
|
spec.add_development_dependency "kramdown"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Example script for DiscId.
|
4
|
+
#
|
5
|
+
# This script will read the disc ID from the default device and print
|
6
|
+
# the results. You can specify an alternate device to use by giving the
|
7
|
+
# device's name as the first command line argument.
|
8
|
+
#
|
9
|
+
# Example:
|
10
|
+
# ./discid.rb /dev/dvd
|
11
|
+
|
12
|
+
# Just make sure we can run this example from the command
|
13
|
+
# line even if DiscId is not yet installed properly.
|
14
|
+
$: << 'lib/' << 'ext/' << '../ext/' << '../lib/'
|
15
|
+
|
16
|
+
require 'discid'
|
17
|
+
|
18
|
+
# Print information about libdiscid
|
19
|
+
print <<EOF
|
20
|
+
Version : #{DiscId::LIBDISCID_VERSION}
|
21
|
+
Default device : #{DiscId.default_device}
|
22
|
+
Supported features: #{DiscId.feature_list.join(', ')}
|
23
|
+
EOF
|
data/examples/readdiscid.rb
CHANGED
@@ -52,7 +52,7 @@ disc.tracks do |track|
|
|
52
52
|
puts " Length: %02d:%02d (%i sectors)" %
|
53
53
|
[track.seconds / 60, track.seconds % 60, track.sectors]
|
54
54
|
puts " Start : %02d:%02d (sector %i)" %
|
55
|
-
[track.start_time / 60, track.start_time % 60, track.
|
55
|
+
[track.start_time / 60, track.start_time % 60, track.offset]
|
56
56
|
puts " End : %02d:%02d (sector %i)" %
|
57
57
|
[track.end_time / 60, track.end_time % 60, track.end_sector]
|
58
58
|
puts " ISRC : %s" % track.isrc if DiscId.has_feature?(:isrc)
|
data/lib/discid/disc.rb
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
require 'ffi'
|
17
17
|
require 'discid/lib'
|
18
|
-
require 'discid/
|
18
|
+
require 'discid/track'
|
19
19
|
|
20
20
|
module DiscId
|
21
21
|
# This class holds information about a disc (TOC, MCN, ISRCs).
|
@@ -149,7 +149,7 @@ module DiscId
|
|
149
149
|
id.to_s
|
150
150
|
end
|
151
151
|
|
152
|
-
# Returns an array of {
|
152
|
+
# Returns an array of {Track} objects. Each Track object contains
|
153
153
|
# detailed information about the track.
|
154
154
|
#
|
155
155
|
# Returns always `nil` if no ID was yet read. The block won't be
|
@@ -158,7 +158,7 @@ module DiscId
|
|
158
158
|
# @yield [track_info] If a block is given this method returns `nil` and
|
159
159
|
# instead iterates over the block calling the block with one argument.
|
160
160
|
# @yieldreturn [nil]
|
161
|
-
# @return [Array<
|
161
|
+
# @return [Array<Track>] Array of {Track} objects.
|
162
162
|
def tracks
|
163
163
|
if @read
|
164
164
|
read_tracks if @tracks.nil?
|
@@ -183,7 +183,7 @@ module DiscId
|
|
183
183
|
isrc = Lib.get_track_isrc(@handle, track_number)
|
184
184
|
offset = Lib.get_track_offset(@handle, track_number)
|
185
185
|
length = Lib.get_track_length(@handle, track_number)
|
186
|
-
track_info =
|
186
|
+
track_info = Track.new(track_number, offset, length, isrc)
|
187
187
|
|
188
188
|
@tracks << track_info
|
189
189
|
end
|
data/lib/discid/lib.rb
CHANGED
@@ -22,7 +22,7 @@ module DiscId
|
|
22
22
|
#
|
23
23
|
# * number: The number of the track on the disc.
|
24
24
|
# * sectors: Length of the track in sectors.
|
25
|
-
# *
|
25
|
+
# * offset: Start position of the track on the disc in sectors.
|
26
26
|
# * end_sector: End position of the track on the disc in sectors.
|
27
27
|
# * seconds: Length of the track in seconds.
|
28
28
|
# * start_time: Start position of the track on the disc in seconds.
|
@@ -33,12 +33,12 @@ module DiscId
|
|
33
33
|
# You can access all fields either directly or with the square bracket
|
34
34
|
# notation:
|
35
35
|
#
|
36
|
-
# track =
|
36
|
+
# track = Track.new(1, 150, 16007)
|
37
37
|
# puts track.sectors # 16007
|
38
38
|
# puts track[:sectors] # 16007
|
39
39
|
#
|
40
40
|
# @see DiscId::Disc#tracks
|
41
|
-
class
|
41
|
+
class Track
|
42
42
|
|
43
43
|
# The number of the track on the disc.
|
44
44
|
#
|
@@ -53,7 +53,7 @@ module DiscId
|
|
53
53
|
# Start position of the track on the disc in sectors.
|
54
54
|
#
|
55
55
|
# @return [Integer]
|
56
|
-
attr_reader :
|
56
|
+
attr_reader :offset
|
57
57
|
|
58
58
|
# ISRC number of the track.
|
59
59
|
#
|
@@ -64,11 +64,11 @@ module DiscId
|
|
64
64
|
# @return [String]
|
65
65
|
attr_reader :isrc
|
66
66
|
|
67
|
-
#
|
68
|
-
def initialize(number, offset,
|
67
|
+
# Initializes a new Track object.
|
68
|
+
def initialize(number, offset, sectors, isrc)
|
69
69
|
@number = number
|
70
|
-
@
|
71
|
-
@sectors =
|
70
|
+
@offset = offset
|
71
|
+
@sectors = sectors
|
72
72
|
@isrc = isrc
|
73
73
|
end
|
74
74
|
|
@@ -76,7 +76,7 @@ module DiscId
|
|
76
76
|
#
|
77
77
|
# @return [Integer]
|
78
78
|
def end_sector
|
79
|
-
|
79
|
+
offset + sectors
|
80
80
|
end
|
81
81
|
|
82
82
|
# Length of the track in seconds.
|
@@ -90,7 +90,7 @@ module DiscId
|
|
90
90
|
#
|
91
91
|
# @return [Integer]
|
92
92
|
def start_time
|
93
|
-
DiscId.sectors_to_seconds(
|
93
|
+
DiscId.sectors_to_seconds(offset)
|
94
94
|
end
|
95
95
|
|
96
96
|
# End position of the track on the disc in seconds.
|
@@ -104,24 +104,24 @@ module DiscId
|
|
104
104
|
#
|
105
105
|
# Example:
|
106
106
|
#
|
107
|
-
# track =
|
107
|
+
# track = Track.new(1, 150, 16007)
|
108
108
|
# puts track.sectors # 16007
|
109
109
|
# puts track[:sectors] # 16007
|
110
110
|
def [](key)
|
111
|
-
if [:number, :sectors, :
|
111
|
+
if [:number, :sectors, :offset, :end_sector,
|
112
112
|
:seconds, :start_time, :end_time, :isrc].include?(key.to_sym)
|
113
113
|
method(key).call
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
-
# Converts the
|
117
|
+
# Converts the Track into a Hash.
|
118
118
|
#
|
119
119
|
# @return [Hash]
|
120
120
|
def to_hash
|
121
121
|
{
|
122
122
|
:number => number,
|
123
123
|
:sectors => sectors,
|
124
|
-
:
|
124
|
+
:offset => offset,
|
125
125
|
:end_sector => end_sector,
|
126
126
|
:seconds => seconds,
|
127
127
|
:start_time => start_time,
|
data/lib/discid/version.rb
CHANGED
data/test/test_disc.rb
CHANGED
@@ -80,7 +80,7 @@ class TestDisc < Test::Unit::TestCase
|
|
80
80
|
assert_equal @fiction_last_track, disc.last_track_number
|
81
81
|
assert_equal @fiction_sectors, disc.sectors
|
82
82
|
assert_equal @fiction_seconds, disc.seconds
|
83
|
-
assert_equal @fiction_offsets, disc.tracks.map{|t| t.
|
83
|
+
assert_equal @fiction_offsets, disc.tracks.map{|t| t.offset}
|
84
84
|
assert_equal @fiction_lengths, disc.tracks.map{|t| t.sectors}
|
85
85
|
end
|
86
86
|
|
data/test/test_discid.rb
CHANGED
@@ -81,7 +81,7 @@ class TestDiscId < Test::Unit::TestCase
|
|
81
81
|
proc_test_track = lambda do |track|
|
82
82
|
assert_equal number + 1, track.number
|
83
83
|
|
84
|
-
assert_equal @fiction_offsets[number], track.
|
84
|
+
assert_equal @fiction_offsets[number], track.offset
|
85
85
|
assert_equal @fiction_lengths[number], track.sectors
|
86
86
|
assert_equal @fiction_offsets[number]+ @fiction_lengths[number],
|
87
87
|
track.end_sector
|
@@ -14,10 +14,10 @@
|
|
14
14
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
15
15
|
|
16
16
|
require 'test/unit'
|
17
|
-
require 'discid/
|
17
|
+
require 'discid/track'
|
18
18
|
|
19
|
-
# Unit test for the DiscId::
|
20
|
-
class
|
19
|
+
# Unit test for the DiscId::Track class.
|
20
|
+
class TestTrack < Test::Unit::TestCase
|
21
21
|
|
22
22
|
def setup
|
23
23
|
@number = 3
|
@@ -27,10 +27,10 @@ class TestTrackInfo < Test::Unit::TestCase
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_init_track_info
|
30
|
-
track = DiscId::
|
30
|
+
track = DiscId::Track.new @number, @offset, @length, @isrc
|
31
31
|
|
32
32
|
assert_equal @number, track.number
|
33
|
-
assert_equal @offset, track.
|
33
|
+
assert_equal @offset, track.offset
|
34
34
|
assert_equal @length, track.sectors
|
35
35
|
assert_equal @isrc, track.isrc
|
36
36
|
|
@@ -41,11 +41,11 @@ class TestTrackInfo < Test::Unit::TestCase
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_to_hash
|
44
|
-
track = DiscId::
|
44
|
+
track = DiscId::Track.new @number, @offset, @length, @isrc
|
45
45
|
hash = track.to_hash
|
46
46
|
|
47
47
|
assert_equal track.number, hash[:number]
|
48
|
-
assert_equal track.
|
48
|
+
assert_equal track.offset, hash[:offset]
|
49
49
|
assert_equal track.sectors, hash[:sectors]
|
50
50
|
assert_equal track.isrc, hash[:isrc]
|
51
51
|
|
@@ -56,10 +56,10 @@ class TestTrackInfo < Test::Unit::TestCase
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def test_selector_access
|
59
|
-
track = DiscId::
|
59
|
+
track = DiscId::Track.new @number, @offset, @length, @isrc
|
60
60
|
|
61
61
|
assert_equal track.number, track[:number]
|
62
|
-
assert_equal track.
|
62
|
+
assert_equal track.offset, track[:offset]
|
63
63
|
assert_equal track.sectors, track[:sectors]
|
64
64
|
assert_equal track.isrc, track[:isrc]
|
65
65
|
|
@@ -70,7 +70,7 @@ class TestTrackInfo < Test::Unit::TestCase
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def test_invalid_selector_value
|
73
|
-
track = DiscId::
|
73
|
+
track = DiscId::Track.new @number, @offset, @length, @isrc
|
74
74
|
assert_equal nil, track[:invalid_value]
|
75
75
|
end
|
76
76
|
|
metadata
CHANGED
@@ -1,52 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: discid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease: 5
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Philipp Wolfer
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-05-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: ffi
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.6.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 1.6.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: bundler
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '1.3'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '1.3'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rake
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: yard
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: kramdown
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -109,44 +98,44 @@ files:
|
|
109
98
|
- README.md
|
110
99
|
- Rakefile
|
111
100
|
- discid.gemspec
|
101
|
+
- examples/discidinfo.rb
|
112
102
|
- examples/readdiscid.rb
|
113
103
|
- lib/discid.rb
|
114
104
|
- lib/discid/disc.rb
|
115
105
|
- lib/discid/lib.rb
|
116
|
-
- lib/discid/
|
106
|
+
- lib/discid/track.rb
|
117
107
|
- lib/discid/version.rb
|
118
108
|
- test/test_disc.rb
|
119
109
|
- test/test_discid.rb
|
120
|
-
- test/
|
110
|
+
- test/test_track.rb
|
121
111
|
homepage: https://github.com/phw/ruby-discid
|
122
112
|
licenses:
|
123
113
|
- LGPL-3
|
114
|
+
metadata: {}
|
124
115
|
post_install_message: Please make sure you have libdiscid (http://musicbrainz.org/doc/libdiscid)
|
125
116
|
installed.
|
126
117
|
rdoc_options: []
|
127
118
|
require_paths:
|
128
119
|
- lib
|
129
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
121
|
requirements:
|
132
122
|
- - ! '>='
|
133
123
|
- !ruby/object:Gem::Version
|
134
|
-
version:
|
124
|
+
version: 1.8.7
|
135
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
126
|
requirements:
|
138
|
-
- - ! '
|
127
|
+
- - ! '>='
|
139
128
|
- !ruby/object:Gem::Version
|
140
|
-
version: 1.3.
|
129
|
+
version: 1.3.6
|
141
130
|
requirements:
|
142
131
|
- libdiscid >= 0.1.0
|
143
132
|
rubyforge_project:
|
144
|
-
rubygems_version:
|
133
|
+
rubygems_version: 2.0.3
|
145
134
|
signing_key:
|
146
|
-
specification_version:
|
135
|
+
specification_version: 4
|
147
136
|
summary: Ruby bindings for libdiscid
|
148
137
|
test_files:
|
149
138
|
- test/test_disc.rb
|
150
139
|
- test/test_discid.rb
|
151
|
-
- test/
|
140
|
+
- test/test_track.rb
|
152
141
|
has_rdoc:
|