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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 520a63e5917a644637384f486a1e142a30df2089
4
- data.tar.gz: 7475177d8f920f5fc05db1a12b0d74bbaeeb964f
3
+ metadata.gz: ae0e8d8a654a808950dc260c139c134a92553d15
4
+ data.tar.gz: cfcae0b936e24c4fb733987b2fc492d2e02d5064
5
5
  SHA512:
6
- metadata.gz: c51ffcecb546f642557fdf31e4c1f0a1a2d79cbf74fb20271b1a492b64ee51e1cb4596ac7d1e45c989cadd7561f989c0d478c659b48d2275139f7e645161fdfe
7
- data.tar.gz: e5a00fe77748a311c1d4a6d5514a2dac9eb54d7f16fb0891af3fc3bfd7b66b89b1a7312e313108dce27bc5b770451a9e898a1dbea1f5cd175b050216b1b2746d
6
+ metadata.gz: 0964ce3767d4637b84450e6420017b9035994f9b9b28e86839d6ebea65cbb79c5be1dc932688b2cd7bea700553a7c833f1b2f3ce01a0d8e989b5860711f4adf6
7
+ data.tar.gz: ca5440480c9b10ed97fa33d2ca34dd78e1b67c8b1e95e7ea3cc710c21af50e3b6161895812ab9ade5c51bfda1470de94a5789ed723ebe77a55473466b2f42948
@@ -6,3 +6,4 @@ rvm:
6
6
  - jruby-19mode
7
7
  - jruby-head
8
8
  - rbx-19mode
9
+ - rbx-2.1.1
@@ -13,11 +13,11 @@ GEM
13
13
  term-ansicolor
14
14
  thor
15
15
  diff-lcs (1.2.5)
16
- docile (1.1.1)
16
+ docile (1.1.2)
17
17
  json (1.8.1)
18
18
  json (1.8.1-java)
19
19
  mime-types (2.0)
20
- multi_json (1.8.2)
20
+ multi_json (1.8.4)
21
21
  rake (10.1.1)
22
22
  rdoc (3.12.2)
23
23
  json (~> 1.4)
@@ -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
 
@@ -32,6 +32,8 @@ module ID3Tag
32
32
  UniqueFileIdFrame
33
33
  when /^(IPL|IPLS)$/
34
34
  InvolvedPeopleListFrame
35
+ when /^(PIC|APIC)$/
36
+ PictureFrame
35
37
  when /^PRIV$/
36
38
  PrivateFrame
37
39
  else
@@ -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
@@ -1,3 +1,3 @@
1
1
  module ID3Tag
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -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
@@ -1,9 +1,11 @@
1
- if ENV['CI']
2
- require 'coveralls'
3
- Coveralls.wear!
4
- else
5
- require 'simplecov'
6
- SimpleCov.start
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.6.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-01 00:00:00.000000000 Z
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