id3tag 0.10.1 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +46 -6
- data/lib/id3tag.rb +14 -4
- data/lib/id3tag/audio_file.rb +10 -4
- data/lib/id3tag/configuration.rb +43 -2
- data/lib/id3tag/configuration_struct.rb +13 -0
- data/lib/id3tag/encoding_util.rb +1 -1
- data/lib/id3tag/frames/v1/comments_frame.rb +1 -1
- data/lib/id3tag/frames/v1/text_frame.rb +1 -5
- data/lib/id3tag/frames/v2/comments_frame.rb +1 -1
- data/lib/id3tag/frames/v2/text_frame.rb +4 -6
- data/lib/id3tag/id3_v2_frame_parser.rb +13 -9
- data/lib/id3tag/tag.rb +1 -1
- data/lib/id3tag/version.rb +1 -1
- metadata +21 -110
- data/.document +0 -5
- data/.gitignore +0 -8
- data/.rspec +0 -1
- data/.travis.yml +0 -15
- data/Gemfile +0 -4
- data/Rakefile +0 -24
- data/id3tag.gemspec +0 -28
- data/spec/features/can_read_non_audio_files_spec.rb +0 -17
- data/spec/features/can_read_tag_v1_spec.rb +0 -15
- data/spec/fixtures/id3v1_and_v2.mp3 +0 -0
- data/spec/fixtures/id3v1_with_track_nr.mp3 +0 -0
- data/spec/fixtures/id3v1_without_track_nr.mp3 +0 -0
- data/spec/fixtures/id3v2.mp3 +0 -0
- data/spec/fixtures/pov_20131018-2100a.mp3.v1_tag_body +0 -0
- data/spec/fixtures/pov_20131018-2100a.mp3.v2_3_tag_body +0 -0
- data/spec/fixtures/signals_1.mp3.v2_3_tag_body +0 -0
- data/spec/id3tag_extract_tags +0 -18
- data/spec/lib/id3tag/audio_file_spec.rb +0 -131
- data/spec/lib/id3tag/frames/util/genre_name_by_id_finder_spec.rb +0 -18
- data/spec/lib/id3tag/frames/v1/comments_frame_spec.rb +0 -39
- data/spec/lib/id3tag/frames/v1/genre_frame_spec.rb +0 -20
- data/spec/lib/id3tag/frames/v1/text_frame_spec.rb +0 -14
- data/spec/lib/id3tag/frames/v1/track_nr_frame_spec.rb +0 -19
- data/spec/lib/id3tag/frames/v2/basic_frame_spec.rb +0 -140
- data/spec/lib/id3tag/frames/v2/comments_frame_spec.rb +0 -45
- data/spec/lib/id3tag/frames/v2/frame_fabricator_spec.rb +0 -70
- data/spec/lib/id3tag/frames/v2/frame_flags_spec.rb +0 -588
- data/spec/lib/id3tag/frames/v2/genre_frame/genre_parser_24_spec.rb +0 -26
- data/spec/lib/id3tag/frames/v2/genre_frame/genre_parser_pre_24_spec.rb +0 -48
- data/spec/lib/id3tag/frames/v2/genre_frame/genre_parser_spec.rb +0 -13
- data/spec/lib/id3tag/frames/v2/genre_frame_spec.rb +0 -61
- data/spec/lib/id3tag/frames/v2/picture_frame_spec.rb +0 -127
- data/spec/lib/id3tag/frames/v2/text_frame_spec.rb +0 -89
- data/spec/lib/id3tag/frames/v2/unique_file_id_frame_spec.rb +0 -31
- data/spec/lib/id3tag/frames/v2/user_text_frame_spec.rb +0 -34
- data/spec/lib/id3tag/id3_v1_frame_parser_spec.rb +0 -71
- data/spec/lib/id3tag/id3_v2_frame_parser_spec.rb +0 -32
- data/spec/lib/id3tag/id3_v2_tag_header_spec.rb +0 -149
- data/spec/lib/id3tag/id3tag_spec.rb +0 -17
- data/spec/lib/id3tag/io_util_spec.rb +0 -30
- data/spec/lib/id3tag/number_util_spec.rb +0 -32
- data/spec/lib/id3tag/string_util_spec.rb +0 -81
- data/spec/lib/id3tag/synchsafe_integer_spec.rb +0 -14
- data/spec/lib/id3tag/tag_spec.rb +0 -352
- data/spec/spec_helper.rb +0 -23
- data/spec/support/mp3_fixtures.rb +0 -4
- data/standard_documents/id3v2-00.txt +0 -1657
- data/standard_documents/id3v2.3.0.txt +0 -2022
- data/standard_documents/id3v2.4.0-frames.txt +0 -1732
- data/standard_documents/id3v2.4.0-structure.txt +0 -732
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 667971eff7efb32a7d5b35c40bf93f66cf435c7aca6e24a6ca6c8d02cd90e783
|
4
|
+
data.tar.gz: ae499c107a5cf5f75b1906a6259552061e9143e4f302cfbbadd4f3e4e62436b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93641cd6c5d2ef1febf87859bed72ec3f2aa92b79ed250f2e51dbf37373043c6bc39f07cb280e2ae171d25f6b1add950fc571706edce5bf35561d46dac5ab851
|
7
|
+
data.tar.gz: bb9cb24084969d9b1e3b986f2b872e534ee67cfbf72599705fac60a931952c6765be3c95dffa08619763eb013740a6a2c5e8a6a799bb373a1c9c2e4a255fcf66
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# ID3Tag
|
2
|
-
Native Ruby ID3 tag reader that aims for 100%
|
2
|
+
Native Ruby ID3 tag reader that aims for 100% coverage of ID3v2.x and ID3v1.x standards
|
3
3
|
|
4
4
|
## Install
|
5
5
|
|
@@ -12,7 +12,7 @@ gem install id3tag
|
|
12
12
|
|
13
13
|
Or add the gem to your Gemfile:
|
14
14
|
```
|
15
|
-
gem 'id3tag', '~> 0.
|
15
|
+
gem 'id3tag', '~> 0.14.0'
|
16
16
|
```
|
17
17
|
|
18
18
|
## How to use
|
@@ -58,13 +58,53 @@ ID3Tag.read(file,:v2) # Reads only v2.x tag
|
|
58
58
|
|
59
59
|
You can inspect tag by calling `frame_ids` to see available frame ids or `frames` to return all frames
|
60
60
|
|
61
|
-
|
61
|
+
## Configuration
|
62
|
+
|
62
63
|
|
63
|
-
This way you can avoid Encoding::InvalidByteSequenceError when tag contains invalid data.
|
64
64
|
```ruby
|
65
|
+
# Configuration could be set using a block syntax.
|
65
66
|
ID3Tag.configuration do |c|
|
67
|
+
|
68
|
+
# This way you can avoid Encoding::InvalidByteSequenceError when tag contains invalid data.
|
69
|
+
# Currently only for String#encode which is used in TextFrames.
|
70
|
+
# default: {}
|
66
71
|
c.string_encode_options = { :invalid => :replace, :undef => :replace }
|
72
|
+
|
73
|
+
# You might want to set v2.x tag read limit in bytes to avoid reading too much data into memory
|
74
|
+
# v2 tags will be extracted until end of tag or limit is reached.
|
75
|
+
# default: 0 (There are no limit)
|
76
|
+
c.v2_tag_read_limit = 1048576 # 1 megabyte
|
77
|
+
|
78
|
+
# In some situations, it's not possible to recognize what is the encoding of a
|
79
|
+
# text frame. The default behavior is to raise UnsupportedTextEncoding, but
|
80
|
+
# it's possible to set a fallback to avoid it.
|
81
|
+
# default: nil
|
82
|
+
c.source_encoding_fallback = Encoding::UTF_8
|
83
|
+
|
67
84
|
end
|
85
|
+
|
86
|
+
ID3Tag.configuration.v2_tag_read_limit # 1048576
|
87
|
+
|
88
|
+
ID3Tag.configuration.v2_tag_read_limit = 1024
|
89
|
+
|
90
|
+
ID3Tag.configuration.v2_tag_read_limit # 1024
|
91
|
+
|
92
|
+
|
93
|
+
# In case you would like to set configuration temporally you could use `local_configuration` method.
|
94
|
+
# Within this block you can read and modify configuration and it wont affect global or layers above.
|
95
|
+
|
96
|
+
ID3Tag.local_configuration do
|
97
|
+
ID3Tag.configuration.v2_tag_read_limit # 1024
|
98
|
+
ID3Tag.configuration.v2_tag_read_limit = 9999
|
99
|
+
# ...
|
100
|
+
ID3Tag.configuration.v2_tag_read_limit # 9999
|
101
|
+
end
|
102
|
+
|
103
|
+
ID3Tag.configuration.v2_tag_read_limit # 1024
|
104
|
+
|
105
|
+
ID3Tag.reset_configuration # Resets global configuration to defaults
|
106
|
+
|
107
|
+
ID3Tag.configuration.v2_tag_read_limit # 0
|
68
108
|
```
|
69
109
|
|
70
110
|
|
@@ -85,8 +125,8 @@ end
|
|
85
125
|
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
86
126
|
|
87
127
|
## Code Status
|
88
|
-
[![Code Climate](https://codeclimate.com/github/krists/id3tag.
|
128
|
+
[![Code Climate](https://codeclimate.com/github/krists/id3tag.svg)](https://codeclimate.com/github/krists/id3tag) [![Build Status](https://travis-ci.org/krists/id3tag.svg?branch=master)](https://travis-ci.org/krists/id3tag) [![Coverage Status](https://coveralls.io/repos/krists/id3tag/badge.svg?branch=master)](https://coveralls.io/r/krists/id3tag) [![Gem Version](https://badge.fury.io/rb/id3tag.svg)](http://badge.fury.io/rb/id3tag)
|
89
129
|
## Copyright
|
90
130
|
|
91
|
-
Copyright (c)
|
131
|
+
Copyright (c) 2018 Krists Ozols. See LICENSE.txt for
|
92
132
|
further details.
|
data/lib/id3tag.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require "stringio"
|
2
|
+
require "singleton"
|
3
|
+
require "id3tag/configuration_struct"
|
2
4
|
require "id3tag/configuration"
|
3
5
|
require "id3tag/synchsafe_integer"
|
4
6
|
require "id3tag/audio_file"
|
@@ -41,9 +43,17 @@ module ID3Tag
|
|
41
43
|
tag
|
42
44
|
end
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
class << self
|
47
|
+
def configuration(&blk)
|
48
|
+
ID3Tag::Configuration.configuration(&blk)
|
49
|
+
end
|
50
|
+
|
51
|
+
def local_configuration(&blk)
|
52
|
+
ID3Tag::Configuration.local_configuration(&blk)
|
53
|
+
end
|
54
|
+
|
55
|
+
def reset_configuration
|
56
|
+
ID3Tag::Configuration.reset
|
57
|
+
end
|
48
58
|
end
|
49
59
|
end
|
data/lib/id3tag/audio_file.rb
CHANGED
@@ -4,6 +4,7 @@ module ID3Tag
|
|
4
4
|
ID3V2_TAG_HEADER_SIZE = 10
|
5
5
|
IDV1_TAG_IDENTIFIER = "TAG"
|
6
6
|
IDV2_TAG_IDENTIFIER = "ID3"
|
7
|
+
BLANK_STRING = ""
|
7
8
|
|
8
9
|
def initialize(file)
|
9
10
|
@file = file
|
@@ -19,14 +20,14 @@ module ID3Tag
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def v2_tag_present?
|
22
|
-
@file.
|
23
|
+
@file.seek(0)
|
23
24
|
@file.read(3) == IDV2_TAG_IDENTIFIER
|
24
25
|
end
|
25
26
|
|
26
27
|
def v1_tag_body
|
27
28
|
if v1_tag_present?
|
28
29
|
@file.seek(-v1_tag_size, IO::SEEK_END)
|
29
|
-
@file.read
|
30
|
+
@file.read(v1_tag_size)
|
30
31
|
else
|
31
32
|
nil
|
32
33
|
end
|
@@ -43,7 +44,12 @@ module ID3Tag
|
|
43
44
|
def v2_tag_body
|
44
45
|
if v2_tag_size > 0
|
45
46
|
@file.seek(v2_tag_frame_and_padding_position)
|
46
|
-
|
47
|
+
bytes_to_read = v2_tag_frame_and_padding_size
|
48
|
+
limit = ID3Tag.configuration.v2_tag_read_limit
|
49
|
+
if (limit > 0) && (bytes_to_read > limit)
|
50
|
+
bytes_to_read = limit
|
51
|
+
end
|
52
|
+
@file.read(bytes_to_read) || BLANK_STRING
|
47
53
|
end
|
48
54
|
end
|
49
55
|
|
@@ -105,7 +111,7 @@ module ID3Tag
|
|
105
111
|
end
|
106
112
|
|
107
113
|
def get_v2_tag_header
|
108
|
-
@file.
|
114
|
+
@file.seek(0)
|
109
115
|
ID3v2TagHeader.new(@file.read(ID3V2_TAG_HEADER_SIZE))
|
110
116
|
end
|
111
117
|
end
|
data/lib/id3tag/configuration.rb
CHANGED
@@ -1,9 +1,50 @@
|
|
1
1
|
module ID3Tag
|
2
2
|
class Configuration
|
3
|
+
include Singleton
|
4
|
+
ResetError = Class.new(StandardError)
|
5
|
+
StackItem = Struct.new(:configuration)
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def local_configuration(&blk)
|
9
|
+
instance.send(:local_configuration, &blk)
|
10
|
+
end
|
11
|
+
|
12
|
+
def configuration
|
13
|
+
value_from_stack = instance.instance_variable_get(:@stack).last
|
14
|
+
value = value_from_stack && value_from_stack.configuration
|
15
|
+
value ||= instance.instance_variable_get(:@global_configuration)
|
16
|
+
yield value if block_given?
|
17
|
+
value
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset
|
21
|
+
instance.send(:reset)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def local_configuration
|
26
|
+
instance_to_copy = @stack.last && @stack.last.configuration
|
27
|
+
instance_to_copy ||= @global_configuration
|
28
|
+
stack_item = StackItem.new(instance_to_copy.dup)
|
29
|
+
stack_backup = @stack.dup
|
30
|
+
@stack << stack_item
|
31
|
+
begin
|
32
|
+
yield stack_item.configuration
|
33
|
+
ensure
|
34
|
+
@stack.replace stack_backup
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
3
40
|
def initialize
|
4
|
-
@
|
41
|
+
@stack = []
|
42
|
+
reset
|
5
43
|
end
|
6
44
|
|
7
|
-
|
45
|
+
def reset
|
46
|
+
raise ResetError, "Configuration cannot be reset within local_configuration block" if @stack.size > 0
|
47
|
+
@global_configuration = ConfigurationStruct.new
|
48
|
+
end
|
8
49
|
end
|
9
50
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ID3Tag
|
2
|
+
class ConfigurationStruct
|
3
|
+
def initialize
|
4
|
+
@string_encode_options = {}
|
5
|
+
@v2_tag_read_limit = 0
|
6
|
+
@source_encoding_fallback = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :string_encode_options
|
10
|
+
attr_accessor :v2_tag_read_limit
|
11
|
+
attr_accessor :source_encoding_fallback
|
12
|
+
end
|
13
|
+
end
|
data/lib/id3tag/encoding_util.rb
CHANGED
@@ -27,7 +27,7 @@ module ID3Tag
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.encode(text, source_encoding)
|
30
|
-
text.encode(DESTINATION_ENCODING, source_encoding, ID3Tag.configuration.string_encode_options)
|
30
|
+
text.encode(DESTINATION_ENCODING, source_encoding, **ID3Tag.configuration.string_encode_options)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -9,15 +9,11 @@ module ID3Tag
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def content
|
12
|
-
|
12
|
+
EncodingUtil.encode(@content, source_encoding)
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
-
def destination_encoding
|
18
|
-
Encoding::UTF_8
|
19
|
-
end
|
20
|
-
|
21
17
|
def source_encoding
|
22
18
|
Encoding::ISO8859_1
|
23
19
|
end
|
@@ -32,7 +32,7 @@ module ID3Tag
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def encoded_content
|
35
|
-
|
35
|
+
EncodingUtil.encode(content_without_encoding_byte_and_language, source_encoding)
|
36
36
|
end
|
37
37
|
|
38
38
|
def content_without_encoding_byte_and_language
|
@@ -21,15 +21,13 @@ module ID3Tag
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def encoded_content
|
24
|
-
|
24
|
+
EncodingUtil.encode(content_without_encoding_byte, source_encoding)
|
25
25
|
end
|
26
26
|
|
27
27
|
def source_encoding
|
28
|
-
ENCODING_MAP.fetch(get_encoding_byte)
|
29
|
-
|
30
|
-
|
31
|
-
def destination_encoding
|
32
|
-
Encoding::UTF_8.to_s
|
28
|
+
ENCODING_MAP.fetch(get_encoding_byte) do
|
29
|
+
ID3Tag.configuration.source_encoding_fallback || raise(UnsupportedTextEncoding)
|
30
|
+
end.to_s
|
33
31
|
end
|
34
32
|
|
35
33
|
def get_encoding_byte
|
@@ -13,13 +13,15 @@ module ID3Tag
|
|
13
13
|
def get_frames
|
14
14
|
frames = []
|
15
15
|
rewind_input
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
catch(:unexpected_eof) do
|
17
|
+
loop do
|
18
|
+
frame_id = read_next_frame_id
|
19
|
+
frame_size = read_next_frame_size
|
20
|
+
frame_flags = read_next_frame_flags
|
21
|
+
frame_content = read_next_bytes(frame_size)
|
22
|
+
frames << Frames::V2::FrameFabricator.fabricate(frame_id, frame_content, frame_flags, @major_version_number)
|
23
|
+
break if padding_or_eof_reached?
|
24
|
+
end
|
23
25
|
end
|
24
26
|
frames
|
25
27
|
end
|
@@ -52,11 +54,13 @@ module ID3Tag
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def read_next_bytes(limit)
|
55
|
-
@input.read(limit)
|
57
|
+
bytes = @input.read(limit)
|
58
|
+
throw(:unexpected_eof) unless bytes && bytes.bytesize == limit
|
59
|
+
bytes
|
56
60
|
end
|
57
61
|
|
58
62
|
def rewind_input
|
59
|
-
@input.
|
63
|
+
@input.seek(0)
|
60
64
|
end
|
61
65
|
|
62
66
|
def padding_or_eof_reached?
|
data/lib/id3tag/tag.rb
CHANGED
@@ -38,7 +38,7 @@ module ID3Tag
|
|
38
38
|
|
39
39
|
def first_frame_by_id(*ids)
|
40
40
|
first_existing_id = ids.find { |id| frame_ids.include?(id) }
|
41
|
-
first_existing_id &&
|
41
|
+
first_existing_id && get_frames(first_existing_id).first
|
42
42
|
end
|
43
43
|
|
44
44
|
def all_frames_by_id(*ids)
|
data/lib/id3tag/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: id3tag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.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:
|
11
|
+
date: 2020-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,85 +30,85 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 13.0.1
|
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
|
-
version:
|
40
|
+
version: 13.0.1
|
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
|
-
version:
|
47
|
+
version: 6.2.1
|
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
|
-
version:
|
54
|
+
version: 6.2.1
|
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
|
-
version: 3.
|
61
|
+
version: 3.9.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
|
-
version: 3.
|
68
|
+
version: 3.9.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
|
-
version: 0.
|
75
|
+
version: 0.16.1
|
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
|
-
version: 0.
|
82
|
+
version: 0.16.1
|
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
|
-
version: 0.8.
|
89
|
+
version: 0.8.23
|
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
|
-
version: 0.8.
|
96
|
+
version: 0.8.23
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: pry
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: 0.13.1
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
111
|
-
description: Native Ruby ID3 tag reader that aims for 100%
|
110
|
+
version: 0.13.1
|
111
|
+
description: Native Ruby ID3 tag reader that aims for 100% coverage of ID3v2.x and
|
112
112
|
ID3v1.x standards
|
113
113
|
email: krists.ozols@gmail.com
|
114
114
|
executables: []
|
@@ -117,18 +117,12 @@ extra_rdoc_files:
|
|
117
117
|
- LICENSE.txt
|
118
118
|
- README.md
|
119
119
|
files:
|
120
|
-
- ".document"
|
121
|
-
- ".gitignore"
|
122
|
-
- ".rspec"
|
123
|
-
- ".travis.yml"
|
124
|
-
- Gemfile
|
125
120
|
- LICENSE.txt
|
126
121
|
- README.md
|
127
|
-
- Rakefile
|
128
|
-
- id3tag.gemspec
|
129
122
|
- lib/id3tag.rb
|
130
123
|
- lib/id3tag/audio_file.rb
|
131
124
|
- lib/id3tag/configuration.rb
|
125
|
+
- lib/id3tag/configuration_struct.rb
|
132
126
|
- lib/id3tag/encoding_util.rb
|
133
127
|
- lib/id3tag/frame_id_advisor.rb
|
134
128
|
- lib/id3tag/frames/util/genre_names.rb
|
@@ -162,50 +156,7 @@ files:
|
|
162
156
|
- lib/id3tag/tag.rb
|
163
157
|
- lib/id3tag/unsynchronization.rb
|
164
158
|
- lib/id3tag/version.rb
|
165
|
-
|
166
|
-
- spec/features/can_read_tag_v1_spec.rb
|
167
|
-
- spec/fixtures/id3v1_and_v2.mp3
|
168
|
-
- spec/fixtures/id3v1_with_track_nr.mp3
|
169
|
-
- spec/fixtures/id3v1_without_track_nr.mp3
|
170
|
-
- spec/fixtures/id3v2.mp3
|
171
|
-
- spec/fixtures/pov_20131018-2100a.mp3.v1_tag_body
|
172
|
-
- spec/fixtures/pov_20131018-2100a.mp3.v2_3_tag_body
|
173
|
-
- spec/fixtures/signals_1.mp3.v2_3_tag_body
|
174
|
-
- spec/id3tag_extract_tags
|
175
|
-
- spec/lib/id3tag/audio_file_spec.rb
|
176
|
-
- spec/lib/id3tag/frames/util/genre_name_by_id_finder_spec.rb
|
177
|
-
- spec/lib/id3tag/frames/v1/comments_frame_spec.rb
|
178
|
-
- spec/lib/id3tag/frames/v1/genre_frame_spec.rb
|
179
|
-
- spec/lib/id3tag/frames/v1/text_frame_spec.rb
|
180
|
-
- spec/lib/id3tag/frames/v1/track_nr_frame_spec.rb
|
181
|
-
- spec/lib/id3tag/frames/v2/basic_frame_spec.rb
|
182
|
-
- spec/lib/id3tag/frames/v2/comments_frame_spec.rb
|
183
|
-
- spec/lib/id3tag/frames/v2/frame_fabricator_spec.rb
|
184
|
-
- spec/lib/id3tag/frames/v2/frame_flags_spec.rb
|
185
|
-
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_24_spec.rb
|
186
|
-
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_pre_24_spec.rb
|
187
|
-
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_spec.rb
|
188
|
-
- spec/lib/id3tag/frames/v2/genre_frame_spec.rb
|
189
|
-
- spec/lib/id3tag/frames/v2/picture_frame_spec.rb
|
190
|
-
- spec/lib/id3tag/frames/v2/text_frame_spec.rb
|
191
|
-
- spec/lib/id3tag/frames/v2/unique_file_id_frame_spec.rb
|
192
|
-
- spec/lib/id3tag/frames/v2/user_text_frame_spec.rb
|
193
|
-
- spec/lib/id3tag/id3_v1_frame_parser_spec.rb
|
194
|
-
- spec/lib/id3tag/id3_v2_frame_parser_spec.rb
|
195
|
-
- spec/lib/id3tag/id3_v2_tag_header_spec.rb
|
196
|
-
- spec/lib/id3tag/id3tag_spec.rb
|
197
|
-
- spec/lib/id3tag/io_util_spec.rb
|
198
|
-
- spec/lib/id3tag/number_util_spec.rb
|
199
|
-
- spec/lib/id3tag/string_util_spec.rb
|
200
|
-
- spec/lib/id3tag/synchsafe_integer_spec.rb
|
201
|
-
- spec/lib/id3tag/tag_spec.rb
|
202
|
-
- spec/spec_helper.rb
|
203
|
-
- spec/support/mp3_fixtures.rb
|
204
|
-
- standard_documents/id3v2-00.txt
|
205
|
-
- standard_documents/id3v2.3.0.txt
|
206
|
-
- standard_documents/id3v2.4.0-frames.txt
|
207
|
-
- standard_documents/id3v2.4.0-structure.txt
|
208
|
-
homepage: http://github.com/krists/id3tag
|
159
|
+
homepage: https://github.com/krists/id3tag
|
209
160
|
licenses:
|
210
161
|
- MIT
|
211
162
|
metadata: {}
|
@@ -217,56 +168,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
217
168
|
requirements:
|
218
169
|
- - ">="
|
219
170
|
- !ruby/object:Gem::Version
|
220
|
-
version:
|
171
|
+
version: '2.2'
|
221
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
173
|
requirements:
|
223
174
|
- - ">="
|
224
175
|
- !ruby/object:Gem::Version
|
225
176
|
version: '0'
|
226
177
|
requirements: []
|
227
|
-
|
228
|
-
rubygems_version: 2.7.3
|
178
|
+
rubygems_version: 3.0.3
|
229
179
|
signing_key:
|
230
180
|
specification_version: 4
|
231
|
-
summary: Native Ruby ID3 tag reader that aims for 100%
|
181
|
+
summary: Native Ruby ID3 tag reader that aims for 100% coverage of ID3v2.x and ID3v1.x
|
232
182
|
standards
|
233
|
-
test_files:
|
234
|
-
- spec/features/can_read_non_audio_files_spec.rb
|
235
|
-
- spec/features/can_read_tag_v1_spec.rb
|
236
|
-
- spec/fixtures/id3v1_and_v2.mp3
|
237
|
-
- spec/fixtures/id3v1_with_track_nr.mp3
|
238
|
-
- spec/fixtures/id3v1_without_track_nr.mp3
|
239
|
-
- spec/fixtures/id3v2.mp3
|
240
|
-
- spec/fixtures/pov_20131018-2100a.mp3.v1_tag_body
|
241
|
-
- spec/fixtures/pov_20131018-2100a.mp3.v2_3_tag_body
|
242
|
-
- spec/fixtures/signals_1.mp3.v2_3_tag_body
|
243
|
-
- spec/id3tag_extract_tags
|
244
|
-
- spec/lib/id3tag/audio_file_spec.rb
|
245
|
-
- spec/lib/id3tag/frames/util/genre_name_by_id_finder_spec.rb
|
246
|
-
- spec/lib/id3tag/frames/v1/comments_frame_spec.rb
|
247
|
-
- spec/lib/id3tag/frames/v1/genre_frame_spec.rb
|
248
|
-
- spec/lib/id3tag/frames/v1/text_frame_spec.rb
|
249
|
-
- spec/lib/id3tag/frames/v1/track_nr_frame_spec.rb
|
250
|
-
- spec/lib/id3tag/frames/v2/basic_frame_spec.rb
|
251
|
-
- spec/lib/id3tag/frames/v2/comments_frame_spec.rb
|
252
|
-
- spec/lib/id3tag/frames/v2/frame_fabricator_spec.rb
|
253
|
-
- spec/lib/id3tag/frames/v2/frame_flags_spec.rb
|
254
|
-
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_24_spec.rb
|
255
|
-
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_pre_24_spec.rb
|
256
|
-
- spec/lib/id3tag/frames/v2/genre_frame/genre_parser_spec.rb
|
257
|
-
- spec/lib/id3tag/frames/v2/genre_frame_spec.rb
|
258
|
-
- spec/lib/id3tag/frames/v2/picture_frame_spec.rb
|
259
|
-
- spec/lib/id3tag/frames/v2/text_frame_spec.rb
|
260
|
-
- spec/lib/id3tag/frames/v2/unique_file_id_frame_spec.rb
|
261
|
-
- spec/lib/id3tag/frames/v2/user_text_frame_spec.rb
|
262
|
-
- spec/lib/id3tag/id3_v1_frame_parser_spec.rb
|
263
|
-
- spec/lib/id3tag/id3_v2_frame_parser_spec.rb
|
264
|
-
- spec/lib/id3tag/id3_v2_tag_header_spec.rb
|
265
|
-
- spec/lib/id3tag/id3tag_spec.rb
|
266
|
-
- spec/lib/id3tag/io_util_spec.rb
|
267
|
-
- spec/lib/id3tag/number_util_spec.rb
|
268
|
-
- spec/lib/id3tag/string_util_spec.rb
|
269
|
-
- spec/lib/id3tag/synchsafe_integer_spec.rb
|
270
|
-
- spec/lib/id3tag/tag_spec.rb
|
271
|
-
- spec/spec_helper.rb
|
272
|
-
- spec/support/mp3_fixtures.rb
|
183
|
+
test_files: []
|