ruby-mp3info 0.8.4 → 0.8.5

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: 2e73d57ec360910c42245abd65123968dc3a12c3
4
- data.tar.gz: 41a47932af670ac092a1929ae18b796dc4b3a514
3
+ metadata.gz: 969aa771d7ae3b0b47648d6e21ee285cfe238713
4
+ data.tar.gz: e51dac8cf99fdbcd015fc497d88d239316d0f5ab
5
5
  SHA512:
6
- metadata.gz: fc2a8e453af0620cc2159d8dd7b960df38196a3abceaa5716b845920b8f444feac7fbf99bbbb6e79038d2b9346c9934cc35d517ef8e22607f198f20284836db7
7
- data.tar.gz: 4c89f8648c5075417f2d21199516037dfe09acccbca2f88de865aaf7077e1d8ccafef7ea5fdbb94e4666db4a5bf0bef07b3169e38732bf5dc5f6253915255aea
6
+ metadata.gz: ac0b6fcbb6acfaed1e5b975f309a26ae0caf8a2179fb5de86268128349216b654535d7e57fb9f93e7af8c32c07d83abb5f2e8b78b4e46395a525d577ee04d495
7
+ data.tar.gz: f027fa0a62c2ebf1c31120ce827b047133f98595a59f702b5ab1a239ef0ecc2dc9e8163bc7107283a5c9a0c547a72044aab4d7f3a7e1d5c1952f211a41842843
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ === 0.8.5 / 2014-09-17
2
+
3
+ * lyrics support (USLT tag) (thanks to ipmsteven)
4
+ * fixed travis CI tests (thanks to ipmsteven)
5
+
1
6
  === 0.8.4 / 2014-04-26
2
7
 
3
8
  * more robust frame scanning when unsynced (thanks to emonsqueeze for the bug report)
data/README.md CHANGED
@@ -2,13 +2,15 @@
2
2
 
3
3
  * http://github.com/moumar/ruby-mp3info
4
4
 
5
+ [![Build Status](https://travis-ci.org/moumar/ruby-mp3info.png?branch=master)](https://travis-ci.org/moumar/ruby-mp3info)
6
+
5
7
  ## Description
6
8
 
7
9
  ruby-mp3info read low-level informations and manipulate tags on mp3 files.
8
10
 
9
11
  ## Features/Problems
10
12
 
11
- * Written in pure ruby
13
+ * Written in pure ruby
12
14
  * Read low-level informations like bitrate, length, samplerate, etc...
13
15
  * Read, write, remove id3v1 and id3v2 tags
14
16
  * Correctly read VBR files (with or without Xing header)
@@ -31,8 +33,8 @@ end
31
33
  # when writing, each tag is written.
32
34
 
33
35
  Mp3Info.open("myfile.mp3") do |mp3|
34
- puts mp3.tag.title
35
- puts mp3.tag.artist
36
+ puts mp3.tag.title
37
+ puts mp3.tag.artist
36
38
  puts mp3.tag.album
37
39
  puts mp3.tag.tracknum
38
40
  mp3.tag.title = "track title"
@@ -61,18 +63,18 @@ file = File.new('input_img','rb')
61
63
  Mp3Info.open '1.mp3' do |m|
62
64
  pictures = m.tag2.pictures # array of images :
63
65
  pictures.each do |description, data|
64
- # description ends with (.jpg / .png) for easy writing to file
65
- File.binwrite(description, data)
66
+ # description ends with (.jpg / .png) for easy writing to file
67
+ File.binwrite(description, data)
66
68
  end
67
69
  m.tag2.remove_pictures # remove all images
68
-
70
+
69
71
  m.tag2.add_picture(file.read) # add a single image to APIC tag
70
72
  # **optionally**, you may include options for the image tag to add_picture():
71
73
  # options = { mime: 'jpeg|gif|png', description: "description",
72
74
  # pic_type: 0 }
73
75
  # There is no need to specify mime or options because the mime is guessed based on the input image
74
76
  # Only one image is permitted in the mp3 for compatibility. add_picture() overwrites all previous images.
75
- # Please note:
77
+ # Please note:
76
78
  # If supplying :mime option just supply the mime 'jpeg', 'gif' or 'png', the code adds the "image/.." for you!
77
79
  # e.g. m.tag2.add_picture(file.read, mime: 'jpeg', pic_type: 3) gets a mime "image/jpeg"
78
80
  end
data/lib/mp3info.rb CHANGED
@@ -17,7 +17,7 @@ end
17
17
 
18
18
  class Mp3Info
19
19
 
20
- VERSION = "0.8.4"
20
+ VERSION = "0.8.5"
21
21
 
22
22
  LAYER = [ nil, 3, 2, 1]
23
23
  BITRATE = {
data/lib/mp3info/id3v2.rb CHANGED
@@ -345,8 +345,8 @@ class ID3v2 < DelegateClass(Hash)
345
345
  end
346
346
 
347
347
  def remove_pictures
348
- self.APIC = ""
349
- self.PIC = ""
348
+ self["APIC"] = ""
349
+ self["PIC"] = ""
350
350
  end
351
351
 
352
352
  ### gets id3v2 tag information from io object (must support #seek() method)
@@ -391,13 +391,13 @@ class ID3v2 < DelegateClass(Hash)
391
391
  @hash.each do |k, v|
392
392
  next unless v
393
393
  next if v.respond_to?("empty?") and v.empty?
394
-
394
+
395
395
  # Automagically translate V2 to V3 tags
396
396
  k = TAG_MAPPING_2_2_to_2_3[k] if TAG_MAPPING_2_2_to_2_3.has_key?(k)
397
397
 
398
398
  # doesn't encode id3v2.2 tags, which have 3 characters
399
- next if k.size != 4
400
-
399
+ next if k.size != 4
400
+
401
401
  # Output one flag for each array element, or one only if it's not an array
402
402
  [v].flatten.each do |value|
403
403
  data = encode_tag(k, value.to_s)
@@ -416,7 +416,7 @@ class ID3v2 < DelegateClass(Hash)
416
416
  end
417
417
 
418
418
  tag_str = "ID3"
419
- #version_maj, version_min, unsync, ext_header, experimental, footer
419
+ #version_maj, version_min, unsync, ext_header, experimental, footer
420
420
  tag_str << [ 3, 0, "0000" ].pack("CCB4")
421
421
  tag_str << [to_syncsafe(tag.size)].pack("N")
422
422
  tag_str << tag
@@ -430,18 +430,18 @@ class ID3v2 < DelegateClass(Hash)
430
430
  puts "encode_tag(#{name.inspect}, #{value.inspect})" if $DEBUG
431
431
  name = name.to_s
432
432
 
433
- if name =~ /^(COM|T)/
433
+ if name =~ /^(COM|T|USLT)/
434
434
  transcoded_value = Mp3Info::EncodingHelper.convert_to(value, "utf-8", "utf-16")
435
435
  end
436
436
  case name
437
- when "COMM"
438
- puts "encode COMM: lang: #{@options[:lang]}, value #{transcoded_value.inspect}" if $DEBUG
439
- s = [ 1, @options[:lang], "\xFE\xFF\x00\x00", transcoded_value].pack("ca3a*a*")
440
- return s
441
- when /^T/
442
- unless RUBY_1_8
443
- transcoded_value.force_encoding("BINARY")
444
- end
437
+ when "COMM", "USLT"
438
+ puts "encode #{name} lang: #{@options[:lang]}, value #{transcoded_value.inspect}" if $DEBUG
439
+ s = [ 1, @options[:lang], "\xFE\xFF\x00\x00", transcoded_value].pack("ca3a*a*")
440
+ return s
441
+ when /^T/
442
+ unless RUBY_1_8
443
+ transcoded_value.force_encoding("BINARY")
444
+ end
445
445
  return "\x01" + transcoded_value
446
446
  else
447
447
  return value
@@ -451,8 +451,8 @@ class ID3v2 < DelegateClass(Hash)
451
451
  ### Read a tag from file and perform UNICODE translation if needed
452
452
  def decode_tag(name, raw_value)
453
453
  puts("decode_tag(#{name.inspect}, #{raw_value.inspect})") if $DEBUG
454
- if name =~ /^(T|COM)/
455
- if name =~ /^COM/
454
+ if name =~ /^(T|COM|USLT)/
455
+ if name =~ /^(COM|USLT)/
456
456
  #FIXME improve this
457
457
  encoding_index, lang, raw_tag = raw_value.unpack("ca3a*")
458
458
  if encoding_index == 1
@@ -470,7 +470,7 @@ class ID3v2 < DelegateClass(Hash)
470
470
  end
471
471
  puts "COM tag found. encoding: #{encoding_index} lang: #{lang} str: #{out.inspect}" if $DEBUG
472
472
  else
473
- encoding_index = raw_value.getbyte(0) # language encoding (see TEXT_ENCODINGS constant)
473
+ encoding_index = raw_value.getbyte(0) # language encoding (see TEXT_ENCODINGS constant)
474
474
  out = raw_value[1..-1]
475
475
  end
476
476
  # we need to convert the string in order to match
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: utf-8
3
3
 
4
- $:.unshift("lib/")
4
+ dir = File.dirname(__FILE__)
5
+ $:.unshift("#{dir}/../lib/")
6
+ $:.unshift("#{dir}/../test")
5
7
 
6
- require "test/unit"
8
+ require "helper"
7
9
  require "mp3info"
8
10
  require "fileutils"
9
11
  require "tempfile"
@@ -12,23 +14,23 @@ require "yaml"
12
14
 
13
15
  GOT_ID3V2 = system("which id3v2 > /dev/null")
14
16
 
15
- class Mp3InfoTest < Test::Unit::TestCase
16
-
17
+ class Mp3InfoTest < TestCase
17
18
  TEMP_FILE = File.join(File.dirname(__FILE__), "test_mp3info.mp3")
18
19
 
19
20
  DUMMY_TAG2 = {
20
21
  "COMM" => "comments",
21
- #"TCON" => "genre_s"
22
+ #"TCON" => "genre_s"
22
23
  "TIT2" => "title",
23
24
  "TPE1" => "artist",
24
25
  "TALB" => "album",
25
26
  "TYER" => "year",
26
- "TRCK" => "tracknum"
27
+ "TRCK" => "tracknum",
28
+ "USLT" => "lyrics test 123456789"
27
29
  }
28
30
 
29
31
  DUMMY_TAG1 = {
30
32
  "title" => "toto",
31
- "artist" => "artist 123",
33
+ "artist" => "artist 123",
32
34
  "album" => "ALBUMM",
33
35
  "year" => 1934,
34
36
  "tracknum" => 14,
@@ -69,17 +71,15 @@ class Mp3InfoTest < Test::Unit::TestCase
69
71
  end
70
72
 
71
73
  def test_is_an_mp3
72
- assert_nothing_raised do
73
- Mp3Info.new(TEMP_FILE).close
74
- end
74
+ Mp3Info.new(TEMP_FILE).close
75
75
  end
76
-
76
+
77
77
  def test_detected_info
78
78
  Mp3Info.open(TEMP_FILE) do |mp3|
79
79
  assert_mp3_info_are_ok(mp3)
80
80
  end
81
81
  end
82
-
82
+
83
83
  def test_vbr_mp3_length
84
84
  load_fixture_to_temp_file("vbr")
85
85
 
@@ -115,7 +115,7 @@ class Mp3InfoTest < Test::Unit::TestCase
115
115
  }
116
116
  id3_test(tag, valid_tag)
117
117
  end
118
-
118
+
119
119
  def test_valid_tag1_0
120
120
  tag = [ "title", "artist", "album", "1921", "comments", 0].pack('A30A30A30A4A30C')
121
121
  valid_tag = {
@@ -150,7 +150,7 @@ class Mp3InfoTest < Test::Unit::TestCase
150
150
  end
151
151
 
152
152
  def test_hastags
153
- Mp3Info.open(TEMP_FILE) do |info|
153
+ Mp3Info.open(TEMP_FILE) do |info|
154
154
  info.tag1 = @tag
155
155
  end
156
156
  assert(Mp3Info.hastag1?(TEMP_FILE))
@@ -160,10 +160,10 @@ class Mp3InfoTest < Test::Unit::TestCase
160
160
  end
161
161
 
162
162
  def test_universal_tag
163
- 2.times do
163
+ 2.times do
164
164
  tag = {"title" => "title"}
165
165
  Mp3Info.open(TEMP_FILE) do |mp3|
166
- tag.each { |k,v| mp3.tag[k] = v }
166
+ tag.each { |k,v| mp3.tag[k] = v }
167
167
  end
168
168
  w = Mp3Info.open(TEMP_FILE) { |m| m.tag }
169
169
  assert_equal(tag, w)
@@ -181,7 +181,7 @@ class Mp3InfoTest < Test::Unit::TestCase
181
181
  w.delete("genre")
182
182
  w.delete("genre_s")
183
183
  assert_equal(tag, w)
184
- # id3v2_prog_test(tag, w)
184
+ # id3v2_prog_test(tag, w)
185
185
  end
186
186
 
187
187
  def test_id3v2_version
@@ -198,17 +198,17 @@ class Mp3InfoTest < Test::Unit::TestCase
198
198
  end
199
199
  end
200
200
  =end
201
-
201
+
202
202
  # test for good output of APIC tag inspect (escaped and snipped)
203
203
  def test_id3v2_to_inspect_hash
204
204
  Mp3Info.open(TEMP_FILE) do |mp3|
205
- mp3.tag2.APIC = "\x00testing.jpg\x00" * 20
205
+ mp3.tag2["APIC"] = "\x00testing.jpg\x00" * 20
206
206
  assert_match(/^((\\x00|\\u0000)testing.jpg(\\x00|\\u0000))+.*<<<\.\.\.snip\.\.\.>>>$/, mp3.tag2.to_inspect_hash["APIC"])
207
207
  end
208
208
  end
209
209
 
210
210
  def test_id3v2_get_pictures
211
- img = "\x89PNG".force_encoding('BINARY') +
211
+ img = "\x89PNG".force_encoding('BINARY') +
212
212
  random_string(120).force_encoding('BINARY')
213
213
  Mp3Info.open(TEMP_FILE) do |mp3|
214
214
  mp3.tag2.add_picture(img, :description => 'example image.png')
@@ -217,9 +217,9 @@ class Mp3InfoTest < Test::Unit::TestCase
217
217
  assert_equal(["01_example image.png", img], mp3.tag2.pictures[0])
218
218
  end
219
219
  end
220
-
220
+
221
221
  def test_id3v2_remove_pictures
222
- jpg_data = "\xFF".force_encoding('BINARY') +
222
+ jpg_data = "\xFF".force_encoding('BINARY') +
223
223
  random_string(123).force_encoding('BINARY')
224
224
  Mp3Info.open(TEMP_FILE) do |mp|
225
225
  mp.tag2.add_picture(jpg_data)
@@ -234,16 +234,16 @@ class Mp3InfoTest < Test::Unit::TestCase
234
234
  tag = { "TIT2" => "tit2", "TPE1" => "tpe1" }
235
235
  Mp3Info.open(TEMP_FILE) do |mp3|
236
236
  tag.each do |k, v|
237
- mp3.tag2.send("#{k}=".to_sym, v)
237
+ mp3.tag2.tap { |h| h[k.to_s] = v }
238
238
  end
239
- assert_equal(tag, mp3.tag2)
239
+ assert_equal tag, mp3.tag2.to_hash
240
240
  end
241
241
  end
242
242
 
243
243
  def test_id3v2_basic
244
244
  written_tag = write_tag2_to_temp_file(DUMMY_TAG2)
245
- assert_equal(DUMMY_TAG2, written_tag)
246
- id3v2_prog_test(DUMMY_TAG2, written_tag)
245
+ assert_equal(DUMMY_TAG2, written_tag.to_hash)
246
+ id3v2_prog_test(DUMMY_TAG2, written_tag.to_hash)
247
247
  end
248
248
 
249
249
  #test the tag with the "id3v2" program
@@ -253,44 +253,43 @@ class Mp3InfoTest < Test::Unit::TestCase
253
253
  id3v2_output = {}
254
254
  =begin
255
255
  id3v2 tag info for test/test_mp3info.mp3:
256
- COMM (Comments): (~)[ENG]:
256
+ COMM (Comments): (~)[ENG]:
257
257
  test/test_mp3info.mp3: No ID3v1 tag
258
258
  =end
259
259
  raw_output = `id3v2 -l #{TEMP_FILE}`
260
260
  raw_output.split(/\n/).each do |line|
261
261
  if line =~ /^id3v2 tag info/
262
- start = true
263
- next
262
+ start = true
263
+ next
264
264
  end
265
265
  next unless start
266
266
  if match = /^(.{4}) \(.+\): (.+)$/.match(line)
267
267
  k, v = match[1, 2]
268
268
  case k
269
- #COMM (Comments): ()[spa]: fmg
270
- when "COMM"
271
- v.sub!(/\(\)\[.{3}\]: (.+)/, '\1')
269
+ #COMM (Comments): ()[spa]: fmg
270
+ when "COMM", "USLT"
271
+ v.sub!(/\(\)\[.{3}\]: (.+)/, '\1')
272
272
  end
273
273
  id3v2_output[k] = v
274
274
  end
275
275
  end
276
276
 
277
- assert_equal( id3v2_output, written_tag, "id3v2 program output doesn't match")
277
+ assert_equal( id3v2_output, written_tag.to_hash, "id3v2 program output doesn't match")
278
278
  end
279
279
 
280
280
  def test_id3v2_complex
281
281
  tag = {}
282
- #ID3v2::TAGS.keys.each do |k|
283
282
  ["PRIV", "APIC"].each do |k|
284
283
  tag[k] = random_string(50)
285
284
  end
286
285
 
287
286
  got_tag = write_tag2_to_temp_file(tag)
288
- assert_equal(tag, got_tag)
287
+ assert_equal(tag, got_tag.to_hash)
289
288
  end
290
289
 
291
290
  def test_id3v2_bigtag
292
291
  tag = {"APIC" => random_string(1024) }
293
- assert_equal(tag, write_tag2_to_temp_file(tag))
292
+ assert_equal(tag, write_tag2_to_temp_file(tag).to_hash)
294
293
  end
295
294
 
296
295
  def test_leading_char_gets_chopped
@@ -312,7 +311,7 @@ class Mp3InfoTest < Test::Unit::TestCase
312
311
 
313
312
  Mp3Info.open(TEMP_FILE) do |mp3|
314
313
  assert_equal "2.2.0", mp3.tag2.version
315
- expected_tag = {
314
+ expected_tag = {
316
315
  "TCO" => "Hip Hop/Rap",
317
316
  "TP1" => "Grems Aka Supermicro",
318
317
  "TT2" => "Intro",
@@ -324,9 +323,9 @@ class Mp3InfoTest < Test::Unit::TestCase
324
323
  tag = mp3.tag2.dup
325
324
  assert_equal 4, tag["COM"].size
326
325
  tag.delete("COM")
327
- assert_equal expected_tag, tag
326
+ assert_equal expected_tag, tag.to_hash
328
327
 
329
- expected_tag = {
328
+ expected_tag = {
330
329
  "genre_s" => "Hip Hop/Rap",
331
330
  "title" => "Intro",
332
331
  #"comments" => "\000engiTunPGAP\0000\000\000",
@@ -336,7 +335,7 @@ class Mp3InfoTest < Test::Unit::TestCase
336
335
  "artist" => "Grems Aka Supermicro",
337
336
  "tracknum" => 1 }
338
337
  # test universal tag
339
- assert_equal expected_tag, mp3.tag
338
+ assert_equal expected_tag, mp3.tag.to_hash
340
339
  end
341
340
  end
342
341
 
@@ -471,7 +470,7 @@ class Mp3InfoTest < Test::Unit::TestCase
471
470
  end
472
471
 
473
472
  def test_hastag_class_methods_with_a_stringio
474
- Mp3Info.open(TEMP_FILE) do |info|
473
+ Mp3Info.open(TEMP_FILE) do |info|
475
474
  info.tag1 = @tag
476
475
  end
477
476
  io = load_string_io
@@ -490,7 +489,7 @@ class Mp3InfoTest < Test::Unit::TestCase
490
489
 
491
490
  def test_modifying_an_io
492
491
  io = open(TEMP_FILE, "r")
493
- Mp3Info.open(io) do |mp3|
492
+ Mp3Info.open(io) do |mp3|
494
493
  mp3.tag.artist = "test_artist"
495
494
  end
496
495
  end
@@ -504,9 +503,7 @@ class Mp3InfoTest < Test::Unit::TestCase
504
503
  end
505
504
 
506
505
  Mp3Info.open("/tmp/test.mp3") do |info|
507
- assert_nothing_raised do
508
- info.each_frame { |frame| frame }
509
- end
506
+ info.each_frame { |frame| frame }
510
507
  assert(info.vbr)
511
508
  assert_in_delta(174.210612, info.length, 0.000001)
512
509
  end
@@ -526,7 +523,6 @@ class Mp3InfoTest < Test::Unit::TestCase
526
523
  mp3.tag2.update(tag)
527
524
  end
528
525
  return Mp3Info.open(TEMP_FILE) { |m| m.tag2 }
529
- #system("cp -v #{TEMP_FILE} #{TEMP_FILE}.test")
530
526
  end
531
527
 
532
528
  def random_string(size)
@@ -558,7 +554,7 @@ class Mp3InfoTest < Test::Unit::TestCase
558
554
  :emphasis=>0,
559
555
  :channel_num=>1,
560
556
  :channel_mode=>"JStereo"
561
- }, mp3.header)
557
+ }, mp3.header)
562
558
  end
563
559
 
564
560
  def load_string_io(filename = TEMP_FILE)
@@ -588,26 +584,8 @@ class Mp3InfoTest < Test::Unit::TestCase
588
584
  content = Zlib::Inflate.inflate(content)
589
585
  end
590
586
 
591
- File.open(TEMP_FILE, "w") do |f|
587
+ File.open(TEMP_FILE, "w") do |f|
592
588
  f.write(content)
593
589
  end
594
590
  end
595
- =begin
596
-
597
- def test_encoder
598
- write_to_temp
599
- info = Mp3Info.new(TEMP_FILE)
600
- assert(info.encoder == "Lame 3.93")
601
- end
602
-
603
- def test_vbr
604
- mp3_vbr = Base64.decode64 <<EOF
605
-
606
- EOF
607
- File.open(TEMP_FILE, "w") { |f| f.write(mp3_vbr) }
608
- info = Mp3Info.new(TEMP_FILE)
609
- assert_equal(info.vbr, true)
610
- assert_equal(info.bitrate, 128)
611
- end
612
- =end
613
591
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mp3info
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Pierronnet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-26 00:00:00.000000000 Z
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.0'
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: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: hoe
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.7'
33
+ version: '3.12'
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: '3.7'
40
+ version: '3.12'
41
41
  description: ruby-mp3info read low-level informations and manipulate tags on mp3 files.
42
42
  email:
43
43
  - guillaume.pierronnet@gmail.com
@@ -48,6 +48,7 @@ extra_rdoc_files:
48
48
  - Manifest.txt
49
49
  - README.md
50
50
  files:
51
+ - ".gemtest"
51
52
  - History.txt
52
53
  - Manifest.txt
53
54
  - README.md
@@ -55,32 +56,31 @@ files:
55
56
  - lib/mp3info.rb
56
57
  - lib/mp3info/extension_modules.rb
57
58
  - lib/mp3info/id3v2.rb
58
- - test/test_ruby-mp3info.rb
59
59
  - test/fixtures.yml
60
- - .gemtest
60
+ - test/test_ruby-mp3info.rb
61
61
  homepage: http://github.com/moumar/ruby-mp3info
62
62
  licenses:
63
63
  - MIT
64
64
  metadata: {}
65
65
  post_install_message:
66
66
  rdoc_options:
67
- - --main
67
+ - "--main"
68
68
  - README.md
69
69
  require_paths:
70
70
  - lib
71
71
  required_ruby_version: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - '>='
78
+ - - ">="
79
79
  - !ruby/object:Gem::Version
80
80
  version: '0'
81
81
  requirements: []
82
- rubyforge_project: ruby-mp3info
83
- rubygems_version: 2.1.5
82
+ rubyforge_project:
83
+ rubygems_version: 2.2.2
84
84
  signing_key:
85
85
  specification_version: 4
86
86
  summary: ruby-mp3info read low-level informations and manipulate tags on mp3 files.