ruby-mp3info 0.8.4 → 0.8.5

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: 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.