format_parser 0.15.0 → 0.15.1

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
- SHA256:
3
- metadata.gz: 32b5a18eb53b1c5197a828757056354c655225fe7047418a615bfb8f950a6805
4
- data.tar.gz: df289b5f4039f89d78b35e481efe50ea95f654497a7783bbaf0a35b997d630ed
2
+ SHA1:
3
+ metadata.gz: b54b8e7c496c5d1e732503678bc762993bf53e9a
4
+ data.tar.gz: ca7ce92f31f08a049b7475746e2017e6662b331a
5
5
  SHA512:
6
- metadata.gz: 358c318bf9f5262edb1acde1854e5caebaac3e945502d1d164f982f0d8fd26eb717ed5c43b3311f130d6ca2804b8c2bb1c0f1a596f462b01c59cd5a79267b0fb
7
- data.tar.gz: 9482a5702896f47ba6da0d99d0e5ef31d51981bdd9271a764872fd06f0a210e19202c1c4fbd111111645d894703646648e8a7f003df7ea2419deef3254ea32da
6
+ metadata.gz: d3dcc4792c6097dc701beb1b124ae17ad345305b4e7e4ac46a132646ff2aefea13cdc350087f8582b9b2653b75181c6c00ffb12d6a5180716538a732cfe60c46
7
+ data.tar.gz: 898ea93a39709415452b5256fdcee7acb69d9a1decc14c50b52695990ae399848c3f984787ab7374efb9b04b3bb758f0487a4b9da67c7fa83396ab5a5c114218
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ['lib']
32
32
 
33
- spec.add_dependency 'ks', '~> 0.0.1'
33
+ spec.add_dependency 'ks', '~> 0.0'
34
34
  spec.add_dependency 'exifr', '~> 1.0'
35
35
  spec.add_dependency 'id3tag', '~> 0.10', '>= 0.10.1'
36
36
  spec.add_dependency 'faraday', '~> 0.13'
@@ -4,6 +4,15 @@ module FormatParser
4
4
 
5
5
  NATURE = :audio
6
6
 
7
+ # Title of the audio
8
+ attr_accessor :title
9
+
10
+ # Album of the audio
11
+ attr_accessor :album
12
+
13
+ # Artist of the audio
14
+ attr_accessor :artist
15
+
7
16
  # Type of the file (e.g :mp3)
8
17
  attr_accessor :format
9
18
 
@@ -1,3 +1,3 @@
1
1
  module FormatParser
2
- VERSION = '0.15.0'
2
+ VERSION = '0.15.1'
3
3
  end
@@ -81,6 +81,8 @@ class FormatParser::MP3Parser
81
81
 
82
82
  first_frame = initial_frames.first
83
83
 
84
+ id3tags_hash = blend_id3_tags_into_hash(*tags)
85
+
84
86
  file_info = FormatParser::Audio.new(
85
87
  format: :mp3,
86
88
  # media_duration_frames is omitted because the frames
@@ -88,9 +90,15 @@ class FormatParser::MP3Parser
88
90
  # do not tell anything of substance
89
91
  num_audio_channels: first_frame.channels,
90
92
  audio_sample_rate_hz: first_frame.sample_rate,
91
- intrinsics: blend_id3_tags_into_hash(*tags).merge(id3tags: tags)
93
+ intrinsics: id3tags_hash.merge(id3tags: tags)
92
94
  )
93
95
 
96
+ extra_file_attirbutes = fetch_extra_attributes_from_id3_tags(id3tags_hash)
97
+
98
+ extra_file_attirbutes.each do |name, value|
99
+ file_info.send(:"#{name}=", value)
100
+ end
101
+
94
102
  if maybe_xing_header
95
103
  duration = maybe_xing_header.frames * SAMPLES_PER_FRAME / first_frame.sample_rate.to_f
96
104
  _bit_rate = maybe_xing_header.byte_count * 8 / duration / 1000
@@ -275,5 +283,15 @@ class FormatParser::MP3Parser
275
283
  end
276
284
  end
277
285
 
286
+ def fetch_extra_attributes_from_id3_tags(id3tags_hash)
287
+ attrs = {}
288
+
289
+ attrs[:title] = FormatParser.string_to_lossy_utf8(id3tags_hash[:title]) unless id3tags_hash[:title].to_s.empty?
290
+ attrs[:album] = FormatParser.string_to_lossy_utf8(id3tags_hash[:album]) unless id3tags_hash[:album].to_s.empty?
291
+ attrs[:artist] = FormatParser.string_to_lossy_utf8(id3tags_hash[:artist]) unless id3tags_hash[:artist].to_s.empty?
292
+
293
+ attrs
294
+ end
295
+
278
296
  FormatParser.register_parser self, natures: :audio, formats: :mp3, priority: 99
279
297
  end
@@ -15,6 +15,30 @@ describe FormatParser::MP3Parser do
15
15
  expect(parsed.media_duration_seconds).to be_within(0.1).of(0.836)
16
16
  end
17
17
 
18
+ describe 'title/artist/album attributes' do
19
+ let(:parsed) { subject.call(File.open(fpath, 'rb')) }
20
+
21
+ context 'when exist in id3 tags' do
22
+ let(:fpath) { fixtures_dir + '/MP3/Cassy.mp3' }
23
+
24
+ it 'set the attributes' do
25
+ expect(parsed.artist).to eq('WeTransfer Studios/GIlles Peterson')
26
+ expect(parsed.title).to eq('Cassy')
27
+ expect(parsed.album).to eq('The Psychology of DJing')
28
+ end
29
+ end
30
+
31
+ context 'when do not exist in id3 tags' do
32
+ let(:fpath) { fixtures_dir + '/MP3/atc_fixture_vbr.mp3' }
33
+
34
+ it 'set attributes with nil' do
35
+ expect(parsed.title).to be_nil
36
+ expect(parsed.artist).to be_nil
37
+ expect(parsed.album).to be_nil
38
+ end
39
+ end
40
+ end
41
+
18
42
  it 'decodes and estimates duration for a CBR MP3' do
19
43
  fpath = fixtures_dir + '/MP3/atc_fixture_cbr.mp3'
20
44
  parsed = subject.call(File.open(fpath, 'rb'))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: format_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Berman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-08-17 00:00:00.000000000 Z
12
+ date: 2019-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ks
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.0.1
20
+ version: '0.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.0.1
27
+ version: '0.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: exifr
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -284,7 +284,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
284
284
  version: '0'
285
285
  requirements: []
286
286
  rubyforge_project:
287
- rubygems_version: 2.7.3
287
+ rubygems_version: 2.6.11
288
288
  signing_key:
289
289
  specification_version: 4
290
290
  summary: A library for efficient parsing of file metadata