id3tag 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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