id3tag 0.10.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +46 -6
  3. data/lib/id3tag.rb +14 -4
  4. data/lib/id3tag/audio_file.rb +10 -4
  5. data/lib/id3tag/configuration.rb +43 -2
  6. data/lib/id3tag/configuration_struct.rb +13 -0
  7. data/lib/id3tag/encoding_util.rb +1 -1
  8. data/lib/id3tag/frames/v1/comments_frame.rb +1 -1
  9. data/lib/id3tag/frames/v1/text_frame.rb +1 -5
  10. data/lib/id3tag/frames/v2/comments_frame.rb +1 -1
  11. data/lib/id3tag/frames/v2/text_frame.rb +4 -6
  12. data/lib/id3tag/id3_v2_frame_parser.rb +13 -9
  13. data/lib/id3tag/tag.rb +1 -1
  14. data/lib/id3tag/version.rb +1 -1
  15. metadata +21 -110
  16. data/.document +0 -5
  17. data/.gitignore +0 -8
  18. data/.rspec +0 -1
  19. data/.travis.yml +0 -15
  20. data/Gemfile +0 -4
  21. data/Rakefile +0 -24
  22. data/id3tag.gemspec +0 -28
  23. data/spec/features/can_read_non_audio_files_spec.rb +0 -17
  24. data/spec/features/can_read_tag_v1_spec.rb +0 -15
  25. data/spec/fixtures/id3v1_and_v2.mp3 +0 -0
  26. data/spec/fixtures/id3v1_with_track_nr.mp3 +0 -0
  27. data/spec/fixtures/id3v1_without_track_nr.mp3 +0 -0
  28. data/spec/fixtures/id3v2.mp3 +0 -0
  29. data/spec/fixtures/pov_20131018-2100a.mp3.v1_tag_body +0 -0
  30. data/spec/fixtures/pov_20131018-2100a.mp3.v2_3_tag_body +0 -0
  31. data/spec/fixtures/signals_1.mp3.v2_3_tag_body +0 -0
  32. data/spec/id3tag_extract_tags +0 -18
  33. data/spec/lib/id3tag/audio_file_spec.rb +0 -131
  34. data/spec/lib/id3tag/frames/util/genre_name_by_id_finder_spec.rb +0 -18
  35. data/spec/lib/id3tag/frames/v1/comments_frame_spec.rb +0 -39
  36. data/spec/lib/id3tag/frames/v1/genre_frame_spec.rb +0 -20
  37. data/spec/lib/id3tag/frames/v1/text_frame_spec.rb +0 -14
  38. data/spec/lib/id3tag/frames/v1/track_nr_frame_spec.rb +0 -19
  39. data/spec/lib/id3tag/frames/v2/basic_frame_spec.rb +0 -140
  40. data/spec/lib/id3tag/frames/v2/comments_frame_spec.rb +0 -45
  41. data/spec/lib/id3tag/frames/v2/frame_fabricator_spec.rb +0 -70
  42. data/spec/lib/id3tag/frames/v2/frame_flags_spec.rb +0 -588
  43. data/spec/lib/id3tag/frames/v2/genre_frame/genre_parser_24_spec.rb +0 -26
  44. data/spec/lib/id3tag/frames/v2/genre_frame/genre_parser_pre_24_spec.rb +0 -48
  45. data/spec/lib/id3tag/frames/v2/genre_frame/genre_parser_spec.rb +0 -13
  46. data/spec/lib/id3tag/frames/v2/genre_frame_spec.rb +0 -61
  47. data/spec/lib/id3tag/frames/v2/picture_frame_spec.rb +0 -127
  48. data/spec/lib/id3tag/frames/v2/text_frame_spec.rb +0 -89
  49. data/spec/lib/id3tag/frames/v2/unique_file_id_frame_spec.rb +0 -31
  50. data/spec/lib/id3tag/frames/v2/user_text_frame_spec.rb +0 -34
  51. data/spec/lib/id3tag/id3_v1_frame_parser_spec.rb +0 -71
  52. data/spec/lib/id3tag/id3_v2_frame_parser_spec.rb +0 -32
  53. data/spec/lib/id3tag/id3_v2_tag_header_spec.rb +0 -149
  54. data/spec/lib/id3tag/id3tag_spec.rb +0 -17
  55. data/spec/lib/id3tag/io_util_spec.rb +0 -30
  56. data/spec/lib/id3tag/number_util_spec.rb +0 -32
  57. data/spec/lib/id3tag/string_util_spec.rb +0 -81
  58. data/spec/lib/id3tag/synchsafe_integer_spec.rb +0 -14
  59. data/spec/lib/id3tag/tag_spec.rb +0 -352
  60. data/spec/spec_helper.rb +0 -23
  61. data/spec/support/mp3_fixtures.rb +0 -4
  62. data/standard_documents/id3v2-00.txt +0 -1657
  63. data/standard_documents/id3v2.3.0.txt +0 -2022
  64. data/standard_documents/id3v2.4.0-frames.txt +0 -1732
  65. 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: f472ca0d17fce8372d1bca854965d2d1ae862e74933e5da9cc8cf6e7614e3d59
4
- data.tar.gz: 4faf983540a5f81630294fe91ca353e30a09dc378b1fb1e8377f30a293fd212d
3
+ metadata.gz: 667971eff7efb32a7d5b35c40bf93f66cf435c7aca6e24a6ca6c8d02cd90e783
4
+ data.tar.gz: ae499c107a5cf5f75b1906a6259552061e9143e4f302cfbbadd4f3e4e62436b2
5
5
  SHA512:
6
- metadata.gz: fc4ec4101cca2e2b35ff722abc5d5d4a5cfd517d946d059e8f6b3775cc022335284bae1f14b868a2629765f1de94a14448ceecbee80eb6737b0ee506ca8b5a5e
7
- data.tar.gz: 64fab8761e94835e3b7c05cfe4463c3f9ab1ec646ef85f6a4ced501695e8e9c73995973a00080b7d7ca284fc8810e46d9ce04617149c982eca2dbad15b7c41ee
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% covarage of ID3v2.x and ID3v1.x standards
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.10.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
- It is also possible to provide configuration and overwrite default behaviour. Currently only for String#encode which is used in TextFrames.
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.png)](https://codeclimate.com/github/krists/id3tag) [![Build Status](https://travis-ci.org/krists/id3tag.png?branch=master)](https://travis-ci.org/krists/id3tag) [![Coverage Status](https://coveralls.io/repos/krists/id3tag/badge.png?branch=master)](https://coveralls.io/r/krists/id3tag) [![Gem Version](https://badge.fury.io/rb/id3tag.png)](http://badge.fury.io/rb/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) 2017 Krists Ozols. See LICENSE.txt for
131
+ Copyright (c) 2018 Krists Ozols. See LICENSE.txt for
92
132
  further details.
@@ -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
- def self.configuration
45
- @@configuration ||= ID3Tag::Configuration.new
46
- yield @@configuration if block_given?
47
- @@configuration
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
@@ -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.rewind
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
- @file.read(v2_tag_frame_and_padding_size)
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.rewind
114
+ @file.seek(0)
109
115
  ID3v2TagHeader.new(@file.read(ID3V2_TAG_HEADER_SIZE))
110
116
  end
111
117
  end
@@ -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
- @string_encode_options = {}
41
+ @stack = []
42
+ reset
5
43
  end
6
44
 
7
- attr_accessor :string_encode_options
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
@@ -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
@@ -15,7 +15,7 @@ module ID3Tag
15
15
  end
16
16
 
17
17
  def content
18
- @content.encode(destination_encoding, source_encoding)
18
+ EncodingUtil.encode(@content, source_encoding)
19
19
  end
20
20
  end
21
21
  end
@@ -9,15 +9,11 @@ module ID3Tag
9
9
  end
10
10
 
11
11
  def content
12
- @content.encode(destination_encoding, source_encoding)
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
- content_without_encoding_byte_and_language.encode(destination_encoding, source_encoding)
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
- content_without_encoding_byte.encode(destination_encoding, source_encoding, ID3Tag.configuration.string_encode_options)
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) { raise UnsupportedTextEncoding }.to_s
29
- end
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
- loop do
17
- frame_id = read_next_frame_id
18
- frame_size = read_next_frame_size
19
- frame_flags = read_next_frame_flags
20
- frame_content = read_next_bytes(frame_size)
21
- frames << Frames::V2::FrameFabricator.fabricate(frame_id, frame_content, frame_flags, @major_version_number)
22
- break if padding_or_eof_reached?
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.rewind
63
+ @input.seek(0)
60
64
  end
61
65
 
62
66
  def padding_or_eof_reached?
@@ -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 && get_frame(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)
@@ -1,3 +1,3 @@
1
1
  module ID3Tag
2
- VERSION = "0.10.1"
2
+ VERSION = "0.14.0"
3
3
  end
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.10.1
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: 2018-06-13 00:00:00.000000000 Z
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: 12.1.0
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: 12.1.0
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: 5.1.0
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: 5.1.0
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.6.0
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.6.0
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.14.1
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.14.1
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.21
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.21
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.11.1
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.11.1
111
- description: Native Ruby ID3 tag reader that aims for 100% covarage of ID3v2.x and
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
- - spec/features/can_read_non_audio_files_spec.rb
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: 1.9.2
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
- rubyforge_project:
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% covarage of ID3v2.x and ID3v1.x
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: []