id3tag 0.6.0 → 0.7.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 +4 -4
- data/.travis.yml +1 -0
- data/Gemfile.lock +2 -2
- data/lib/id3tag.rb +3 -0
- data/lib/id3tag/encoding_util.rb +33 -0
- data/lib/id3tag/frame_id_advisor.rb +6 -3
- data/lib/id3tag/frames/v2/frame_fabricator.rb +2 -0
- data/lib/id3tag/frames/v2/picture_frame.rb +101 -0
- data/lib/id3tag/io_util.rb +17 -0
- data/lib/id3tag/version.rb +1 -1
- data/spec/lib/id3tag/frames/v2/picture_frame_spec.rb +107 -0
- data/spec/lib/id3tag/frames/v2/text_frame_spec.rb +5 -0
- data/spec/lib/id3tag/io_util_spec.rb +30 -0
- data/spec/spec_helper.rb +9 -7
- metadata +27 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae0e8d8a654a808950dc260c139c134a92553d15
|
4
|
+
data.tar.gz: cfcae0b936e24c4fb733987b2fc492d2e02d5064
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0964ce3767d4637b84450e6420017b9035994f9b9b28e86839d6ebea65cbb79c5be1dc932688b2cd7bea700553a7c833f1b2f3ce01a0d8e989b5860711f4adf6
|
7
|
+
data.tar.gz: ca5440480c9b10ed97fa33d2ca34dd78e1b67c8b1e95e7ea3cc710c21af50e3b6161895812ab9ade5c51bfda1470de94a5789ed723ebe77a55473466b2f42948
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/lib/id3tag.rb
CHANGED
@@ -6,6 +6,8 @@ require "id3tag/id3_v2_tag_header"
|
|
6
6
|
require "id3tag/unsynchronization"
|
7
7
|
require "id3tag/number_util"
|
8
8
|
require "id3tag/string_util"
|
9
|
+
require "id3tag/encoding_util"
|
10
|
+
require "id3tag/io_util"
|
9
11
|
require "id3tag/id3_v1_frame_parser"
|
10
12
|
require "id3tag/id3_v2_frame_parser"
|
11
13
|
require "id3tag/frame_id_advisor"
|
@@ -24,6 +26,7 @@ require "id3tag/frames/v2/unique_file_id_frame"
|
|
24
26
|
require "id3tag/frames/v2/private_frame"
|
25
27
|
require "id3tag/frames/v2/comments_frame"
|
26
28
|
require "id3tag/frames/v2/unsychronized_transcription_frame"
|
29
|
+
require "id3tag/frames/v2/picture_frame"
|
27
30
|
require "id3tag/frames/v2/genre_frame"
|
28
31
|
require "id3tag/frames/v2/genre_frame/genre_parser"
|
29
32
|
require "id3tag/frames/v2/genre_frame/genre_parser_pre_24"
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module ID3Tag
|
2
|
+
module EncodingUtil
|
3
|
+
UnsupportedTextEncoding = Class.new(StandardError)
|
4
|
+
UnsupportedEncoding = Class.new(StandardError)
|
5
|
+
DESTINATION_ENCODING = Encoding::UTF_8.to_s
|
6
|
+
|
7
|
+
ENCODING_MAP = {
|
8
|
+
0b0 => Encoding::ISO8859_1,
|
9
|
+
0b1 => Encoding::UTF_16,
|
10
|
+
0b10 => Encoding::UTF_16BE,
|
11
|
+
0b11 => Encoding::UTF_8
|
12
|
+
}
|
13
|
+
|
14
|
+
TERMINATOR_MAP = {
|
15
|
+
0b0 => 1,
|
16
|
+
0b1 => 2,
|
17
|
+
0b10 => 2,
|
18
|
+
0b11 => 1
|
19
|
+
}
|
20
|
+
|
21
|
+
def self.find_encoding(byte)
|
22
|
+
ENCODING_MAP.fetch(byte) { raise UnsupportedTextEncoding }.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.terminator_size(byte)
|
26
|
+
TERMINATOR_MAP.fetch(byte) { raise UnsupportedEncoding.new("Can not find terminator for encoding byte: #{byte.inspect}") }
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.encode(text, source_encoding)
|
30
|
+
text.encode(DESTINATION_ENCODING, source_encoding, ID3Tag.configuration.string_encode_options)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -20,7 +20,8 @@ module ID3Tag
|
|
20
20
|
:comments => :COM,
|
21
21
|
:genre => :TCO,
|
22
22
|
:track_nr => :TRK,
|
23
|
-
:unsychronized_transcription => :ULT
|
23
|
+
:unsychronized_transcription => :ULT,
|
24
|
+
:image => :PIC
|
24
25
|
},
|
25
26
|
'v2.3' => {
|
26
27
|
:artist => :TPE1,
|
@@ -30,7 +31,8 @@ module ID3Tag
|
|
30
31
|
:comments => :COMM,
|
31
32
|
:genre => :TCON,
|
32
33
|
:track_nr => :TRCK,
|
33
|
-
:unsychronized_transcription => :USLT
|
34
|
+
:unsychronized_transcription => :USLT,
|
35
|
+
:image => :APIC
|
34
36
|
},
|
35
37
|
'v2.4' => {
|
36
38
|
:artist => :TPE1,
|
@@ -40,7 +42,8 @@ module ID3Tag
|
|
40
42
|
:comments => :COMM,
|
41
43
|
:genre => :TCON,
|
42
44
|
:track_nr => :TRCK,
|
43
|
-
:unsychronized_transcription => :USLT
|
45
|
+
:unsychronized_transcription => :USLT,
|
46
|
+
:image => :APIC
|
44
47
|
}
|
45
48
|
}
|
46
49
|
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module ID3Tag
|
2
|
+
module Frames
|
3
|
+
module V2
|
4
|
+
class PictureFrame < BasicFrame
|
5
|
+
LINK_SYMBOL = '-->'
|
6
|
+
IMPLIED_MIME_TYPE = 'image/'
|
7
|
+
TYPES = {
|
8
|
+
0x00 => :other, # Other
|
9
|
+
0x01 => :file_icon_png32, # 32x32 pixels 'file icon' (PNG only)
|
10
|
+
0x02 => :file_icon, # Other file icon
|
11
|
+
0x03 => :cover_front, # Cover (front)
|
12
|
+
0x04 => :cover_back, # Cover (back)
|
13
|
+
0x05 => :leaflet_page, # Leaflet page
|
14
|
+
0x06 => :media, # Media (e.g. lable side of CD)
|
15
|
+
0x07 => :lead_artist, # Lead artist/lead performer/soloist
|
16
|
+
0x08 => :artist, # Artist/performer
|
17
|
+
0x09 => :conductor, # Conductor
|
18
|
+
0x0a => :band, # Band/Orchestra
|
19
|
+
0x0b => :composer, # Composer
|
20
|
+
0x0c => :lyricist, # Lyricist/text writer
|
21
|
+
0x0d => :recording_location, # Recording Location
|
22
|
+
0x0e => :during_recording, # During recording
|
23
|
+
0x0f => :during_performance, # During performance
|
24
|
+
0x10 => :movie_screen_capture, # Movie/video screen capture
|
25
|
+
0x11 => :fish, # A bright coloured fish
|
26
|
+
0x12 => :illustration, # Illustration
|
27
|
+
0x13 => :band_logotype, # Band/artist logotype
|
28
|
+
0x14 => :publisher_logotype # Publisher/Studio logotype
|
29
|
+
}
|
30
|
+
|
31
|
+
def mime_type
|
32
|
+
if @major_version_number > 2
|
33
|
+
result = parts[:mime_type]
|
34
|
+
if StringUtil.blank?(result.strip)
|
35
|
+
IMPLIED_MIME_TYPE
|
36
|
+
else
|
37
|
+
result
|
38
|
+
end
|
39
|
+
else
|
40
|
+
image_format = parts[:mime_type].downcase
|
41
|
+
if StringUtil.blank?(image_format.strip)
|
42
|
+
IMPLIED_MIME_TYPE
|
43
|
+
else
|
44
|
+
IMPLIED_MIME_TYPE + image_format
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def link?
|
50
|
+
mime_type == LINK_SYMBOL
|
51
|
+
end
|
52
|
+
|
53
|
+
def type
|
54
|
+
TYPES[parts[:picture_type_byte]]
|
55
|
+
end
|
56
|
+
|
57
|
+
def description
|
58
|
+
encoding = get_encoding
|
59
|
+
EncodingUtil.encode(parts[:description], encoding)
|
60
|
+
end
|
61
|
+
|
62
|
+
def content
|
63
|
+
data
|
64
|
+
end
|
65
|
+
|
66
|
+
def data
|
67
|
+
parts[:data]
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def parts
|
73
|
+
@parts ||= read_parts!
|
74
|
+
end
|
75
|
+
|
76
|
+
def read_parts!
|
77
|
+
usable_content_io.rewind
|
78
|
+
parts = {}
|
79
|
+
parts[:encoding_byte] = usable_content_io.getbyte
|
80
|
+
if @major_version_number > 2
|
81
|
+
parts[:mime_type] = ID3Tag::IOUtil.read_until_terminator(usable_content_io, 1)
|
82
|
+
else
|
83
|
+
parts[:mime_type] = usable_content_io.read(3)
|
84
|
+
end
|
85
|
+
parts[:picture_type_byte] = usable_content_io.getbyte
|
86
|
+
parts[:description] = ID3Tag::IOUtil.read_until_terminator(usable_content_io, EncodingUtil.terminator_size(parts[:encoding_byte]))
|
87
|
+
parts[:data] = usable_content_io.read
|
88
|
+
parts
|
89
|
+
end
|
90
|
+
|
91
|
+
def usable_content_io
|
92
|
+
@usable_content_io ||= StringIO.new(usable_content)
|
93
|
+
end
|
94
|
+
|
95
|
+
def get_encoding
|
96
|
+
EncodingUtil.find_encoding(parts[:encoding_byte])
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ID3Tag
|
2
|
+
module IOUtil
|
3
|
+
|
4
|
+
def self.read_until_terminator(io, group_size)
|
5
|
+
result = []
|
6
|
+
bytes = io.each_byte
|
7
|
+
current_group = bytes.take(group_size)
|
8
|
+
while current_group.size == group_size do
|
9
|
+
break if current_group.all? { |byte| byte == 0 }
|
10
|
+
result += current_group
|
11
|
+
current_group = bytes.take(group_size)
|
12
|
+
end
|
13
|
+
result.pack("C*")
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
data/lib/id3tag/version.rb
CHANGED
@@ -0,0 +1,107 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe ID3Tag::Frames::V2::PictureFrame do
|
5
|
+
let(:separator) { "\x00".force_encoding(target_encoding) }
|
6
|
+
let(:encoding) { encoding_byte.force_encoding(target_encoding) }
|
7
|
+
let(:flags) { nil }
|
8
|
+
let(:target_encoding) { Encoding::UTF_8 }
|
9
|
+
let(:encoding_byte) { "\x03" }
|
10
|
+
let(:description) { "picture description" }
|
11
|
+
let(:picture_type) { "\x03" } # cover_front
|
12
|
+
let(:frame) { described_class.new(id, raw_content, flags, major_version_number) }
|
13
|
+
let(:data) { "picture data" }
|
14
|
+
|
15
|
+
context "when PIC frame" do
|
16
|
+
let(:id) { "PIC" }
|
17
|
+
let(:major_version_number) { 2 }
|
18
|
+
let(:format) { "png" }
|
19
|
+
let(:raw_content) do
|
20
|
+
encoding_byte + format + picture_type + description + separator + data
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#id' do
|
24
|
+
subject { frame.id }
|
25
|
+
it { should == :PIC }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "mime_type" do
|
29
|
+
subject { frame.mime_type }
|
30
|
+
it { should eq('image/png') }
|
31
|
+
context "when mime type is blank" do
|
32
|
+
let(:format) { "\x00\x00\x00" }
|
33
|
+
it { should eq('image/') }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#data" do
|
38
|
+
subject { frame.data }
|
39
|
+
it { should == "picture data" }
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#type" do
|
43
|
+
subject { frame.type }
|
44
|
+
it { should == :cover_front }
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#description" do
|
48
|
+
subject { frame.description }
|
49
|
+
it { should == "picture description" }
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#content" do
|
53
|
+
subject { frame.content }
|
54
|
+
it { should == "picture data" }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "when APIC frame" do
|
59
|
+
let(:id) { "APIC" }
|
60
|
+
let(:major_version_number) { 3 }
|
61
|
+
let(:mime_type) { "image/png" }
|
62
|
+
let(:raw_content) do
|
63
|
+
# mime_type is iso 8859-1 so alawys terminated with \x00
|
64
|
+
encoding_byte + mime_type + "\x00" + picture_type + description + separator + data
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#id' do
|
68
|
+
subject { frame.id }
|
69
|
+
it { should == :APIC }
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#data" do
|
73
|
+
subject { frame.data }
|
74
|
+
it { should == "picture data" }
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#type" do
|
78
|
+
subject { frame.type }
|
79
|
+
it { should == :cover_front }
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#mime_type" do
|
83
|
+
subject { frame.mime_type }
|
84
|
+
it { should == "image/png" }
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "#description" do
|
88
|
+
subject { frame.description }
|
89
|
+
it { should == "picture description" }
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "#content" do
|
93
|
+
subject { frame.content }
|
94
|
+
it { should == "picture data" }
|
95
|
+
end
|
96
|
+
|
97
|
+
context "when frame contains link not actual image data" do
|
98
|
+
let(:raw_content) { "\x02-->\x00\x08\u0000a\u0000b\u0000c" }
|
99
|
+
subject { frame }
|
100
|
+
|
101
|
+
its(:link?) { should be_true }
|
102
|
+
its(:mime_type) { should eq("-->") }
|
103
|
+
its(:description) { should eq("abc") }
|
104
|
+
its(:type) { should eq(:artist) }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -69,6 +69,11 @@ describe ID3Tag::Frames::V2::TextFrame do
|
|
69
69
|
c.string_encode_options = { :invalid => :replace, :undef => :replace }
|
70
70
|
end
|
71
71
|
end
|
72
|
+
after(:each) do
|
73
|
+
ID3Tag.configuration do |c|
|
74
|
+
c.string_encode_options = {}
|
75
|
+
end
|
76
|
+
end
|
72
77
|
it "does not raise error" do
|
73
78
|
expect { subject }.not_to raise_error
|
74
79
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ID3Tag::IOUtil do
|
4
|
+
|
5
|
+
describe "#read_until_terminator" do
|
6
|
+
subject { ID3Tag::IOUtil.read_until_terminator(io, group_size) }
|
7
|
+
context "when reading IO and looking for UTF-8 terminator - 1 null byte" do
|
8
|
+
let(:group_size) { 1 }
|
9
|
+
context "when only 1 null byte present" do
|
10
|
+
let(:io) { StringIO.new("abcd\x00ef") }
|
11
|
+
it { should eq("abcd") }
|
12
|
+
end
|
13
|
+
context "when no null bytes are present" do
|
14
|
+
let(:io) { StringIO.new("abcdef") }
|
15
|
+
it { should eq("abcdef") }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
context "when reading IO and looking for UTF-16 terminator - 2 null bytes" do
|
19
|
+
let(:group_size) { 2 }
|
20
|
+
context "when only 1 null byte present" do
|
21
|
+
let(:io) { StringIO.new("a\x00b\x00\x00\x00c\x00") }
|
22
|
+
it "should return content until terminator and leave cursor just right after" do
|
23
|
+
subject.should eq("a\x00b\x00")
|
24
|
+
io.read.should eq("c\x00")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
unless ENV['RUBY_VERSION'] =~ /rbx/
|
2
|
+
if ENV['CI']
|
3
|
+
require 'coveralls'
|
4
|
+
Coveralls.wear!
|
5
|
+
else
|
6
|
+
require 'simplecov'
|
7
|
+
SimpleCov.start
|
8
|
+
end
|
7
9
|
end
|
8
10
|
|
9
11
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -16,5 +18,5 @@ require 'id3tag'
|
|
16
18
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
17
19
|
|
18
20
|
RSpec.configure do |config|
|
19
|
-
|
21
|
+
|
20
22
|
end
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: id3tag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Krists Ozols
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rdoc
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.12'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.12'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.13.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.13.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: coveralls
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
description: Native Ruby ID3 tag reader that aims for 100% covarage of ID3v2.x and
|
@@ -103,10 +103,10 @@ extra_rdoc_files:
|
|
103
103
|
- LICENSE.txt
|
104
104
|
- README.md
|
105
105
|
files:
|
106
|
-
- .document
|
107
|
-
- .gitignore
|
108
|
-
- .rspec
|
109
|
-
- .travis.yml
|
106
|
+
- ".document"
|
107
|
+
- ".gitignore"
|
108
|
+
- ".rspec"
|
109
|
+
- ".travis.yml"
|
110
110
|
- Gemfile
|
111
111
|
- Gemfile.lock
|
112
112
|
- LICENSE.txt
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/id3tag.rb
|
117
117
|
- lib/id3tag/audio_file.rb
|
118
118
|
- lib/id3tag/configuration.rb
|
119
|
+
- lib/id3tag/encoding_util.rb
|
119
120
|
- lib/id3tag/frame_id_advisor.rb
|
120
121
|
- lib/id3tag/frames/util/genre_names.rb
|
121
122
|
- lib/id3tag/frames/v1/comments_frame.rb
|
@@ -131,6 +132,7 @@ files:
|
|
131
132
|
- lib/id3tag/frames/v2/genre_frame/genre_parser_24.rb
|
132
133
|
- lib/id3tag/frames/v2/genre_frame/genre_parser_pre_24.rb
|
133
134
|
- lib/id3tag/frames/v2/involved_people_list_frame.rb
|
135
|
+
- lib/id3tag/frames/v2/picture_frame.rb
|
134
136
|
- lib/id3tag/frames/v2/private_frame.rb
|
135
137
|
- lib/id3tag/frames/v2/text_frame.rb
|
136
138
|
- lib/id3tag/frames/v2/unique_file_id_frame.rb
|
@@ -139,6 +141,7 @@ files:
|
|
139
141
|
- lib/id3tag/id3_v1_frame_parser.rb
|
140
142
|
- lib/id3tag/id3_v2_frame_parser.rb
|
141
143
|
- lib/id3tag/id3_v2_tag_header.rb
|
144
|
+
- lib/id3tag/io_util.rb
|
142
145
|
- lib/id3tag/number_util.rb
|
143
146
|
- lib/id3tag/scope.rb
|
144
147
|
- lib/id3tag/string_util.rb
|
@@ -170,6 +173,7 @@ files:
|
|
170
173
|
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_pre_24_spec.rb
|
171
174
|
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_spec.rb
|
172
175
|
- spec/lib/id3tag/frames/v2/genre_frame_spec.rb
|
176
|
+
- spec/lib/id3tag/frames/v2/picture_frame_spec.rb
|
173
177
|
- spec/lib/id3tag/frames/v2/text_frame_spec.rb
|
174
178
|
- spec/lib/id3tag/frames/v2/unique_file_id_frame_spec.rb
|
175
179
|
- spec/lib/id3tag/frames/v2/user_text_frame_spec.rb
|
@@ -177,6 +181,7 @@ files:
|
|
177
181
|
- spec/lib/id3tag/id3_v2_frame_parser_spec.rb
|
178
182
|
- spec/lib/id3tag/id3_v2_tag_header_spec.rb
|
179
183
|
- spec/lib/id3tag/id3tag_spec.rb
|
184
|
+
- spec/lib/id3tag/io_util_spec.rb
|
180
185
|
- spec/lib/id3tag/number_util_spec.rb
|
181
186
|
- spec/lib/id3tag/string_util_spec.rb
|
182
187
|
- spec/lib/id3tag/synchsafe_integer_spec.rb
|
@@ -197,12 +202,12 @@ require_paths:
|
|
197
202
|
- lib
|
198
203
|
required_ruby_version: !ruby/object:Gem::Requirement
|
199
204
|
requirements:
|
200
|
-
- -
|
205
|
+
- - ">="
|
201
206
|
- !ruby/object:Gem::Version
|
202
207
|
version: 1.9.2
|
203
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
209
|
requirements:
|
205
|
-
- -
|
210
|
+
- - ">="
|
206
211
|
- !ruby/object:Gem::Version
|
207
212
|
version: '0'
|
208
213
|
requirements: []
|
@@ -237,6 +242,7 @@ test_files:
|
|
237
242
|
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_pre_24_spec.rb
|
238
243
|
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_spec.rb
|
239
244
|
- spec/lib/id3tag/frames/v2/genre_frame_spec.rb
|
245
|
+
- spec/lib/id3tag/frames/v2/picture_frame_spec.rb
|
240
246
|
- spec/lib/id3tag/frames/v2/text_frame_spec.rb
|
241
247
|
- spec/lib/id3tag/frames/v2/unique_file_id_frame_spec.rb
|
242
248
|
- spec/lib/id3tag/frames/v2/user_text_frame_spec.rb
|
@@ -244,6 +250,7 @@ test_files:
|
|
244
250
|
- spec/lib/id3tag/id3_v2_frame_parser_spec.rb
|
245
251
|
- spec/lib/id3tag/id3_v2_tag_header_spec.rb
|
246
252
|
- spec/lib/id3tag/id3tag_spec.rb
|
253
|
+
- spec/lib/id3tag/io_util_spec.rb
|
247
254
|
- spec/lib/id3tag/number_util_spec.rb
|
248
255
|
- spec/lib/id3tag/string_util_spec.rb
|
249
256
|
- spec/lib/id3tag/synchsafe_integer_spec.rb
|