ffprober 0.2.0 → 0.2.1

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: 2a48f3dc5c3a59c2b99241bdd3be2cef2f1317f4
4
- data.tar.gz: dc67ddb0cb794eaf341d7a422a4aa9882218f149
3
+ metadata.gz: 919d1151ce185635625a4202ef066333408afc39
4
+ data.tar.gz: 0fc63f7d15e762393ce4a858eca5370ad8bd9084
5
5
  SHA512:
6
- metadata.gz: 88ba09c9ecf3e7da3cf006cb38e4470f883f703e92b9a71e8be1127de3072b43a07906bb1e4edb8b19038b8f485e434d2b4a8cb97a5a03a88db1cfffed4ae9dc
7
- data.tar.gz: dab0af154e1b400ff62e83012b35f2df135c6fff8e2ffd5d7926df4babd8a461afc990a01b2b251233bd5f6d0ffd5d65efb63e713f426389e76495d0b63282d0
6
+ metadata.gz: 62cebe986fd0545a230c2c5ed1701f9dc155cb18c4c12fab95db66eb847a55c682641243d3edfacffde556cad12bb0ea1dedfec4aa94ac854e7e28c89da27dc3
7
+ data.tar.gz: f6b348f46fd23c2c385fd2d3813c7d17caad9b439a880b443023ba1a464ef1bf0228b595e9a838db9fa8684da1ea090811d0a6ade6719b74688ee18cdee3c5ee
data/ffprober.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.summary = %q{a Ruby wrapper for ffprobe (part of ffmpeg)}
9
9
  gem.homepage = "https://github.com/beanieboi/ffprober"
10
10
 
11
- gem.required_ruby_version = ">= 1.9.2"
11
+ gem.required_ruby_version = ">= 1.9.3"
12
12
  gem.rubyforge_project = "ffprober"
13
13
 
14
14
  gem.licenses = ['MIT']
data/lib/ffprober.rb CHANGED
@@ -4,7 +4,20 @@ require "ffprober/format"
4
4
  require "ffprober/stream"
5
5
  require "ffprober/audio_stream"
6
6
  require "ffprober/video_stream"
7
+ require "ffprober/ffprobe_version"
7
8
  require "json"
8
9
 
9
10
  module Ffprober
11
+ def self.path
12
+ name = 'ffprobe'
13
+
14
+ if File.executable? name
15
+ cmd
16
+ else
17
+ path = ENV['PATH'].split(File::PATH_SEPARATOR).find { |path|
18
+ File.executable? File.join(path, name)
19
+ }
20
+ path && File.expand_path(name, path)
21
+ end
22
+ end
10
23
  end
@@ -0,0 +1,21 @@
1
+ module Ffprober
2
+ class FfprobeVersion
3
+ @@version_regex = /^ffprobe version (\d+)\.?(\d+)\.?(|\d+)$/
4
+
5
+ MIN_VERSION = Gem::Version.new("0.9.0")
6
+ MAX_VERSION = Gem::Version.new("1.2.0")
7
+
8
+ def self.valid?
9
+ MIN_VERSION <= parsed_version && parsed_version <= MAX_VERSION
10
+ end
11
+
12
+ def self.parsed_version
13
+ version = `#{Ffprober.path} -version`.match(@@version_regex)
14
+ raise Errno::ENOENT if version.nil?
15
+ major, minor, patch = version[1].to_i, version[2].to_i, version[3].to_i
16
+ Gem::Version.new([major, minor, patch].join("."))
17
+ rescue Errno::ENOENT => e
18
+ Gem::Version.new("0.0.0")
19
+ end
20
+ end
21
+ end
@@ -1,16 +1,15 @@
1
1
  module Ffprober
2
2
  class Parser
3
3
  @@options = '-v quiet -print_format json -show_format -show_streams'
4
- @@version_regex = /^ffprobe version (\d+)\.?(\d+)\.?(|\d+)$/
5
4
 
6
5
  class << self
7
6
  def from_file(file_to_parse)
8
- unless ffprobe_version_valid?
7
+ unless FfprobeVersion.valid?
9
8
  raise ArgumentError.new("no or unsupported ffprobe version found.\
10
- (version: #{ffprobe_version})")
9
+ (version: #{FfprobeVersion.parsed_version.to_s})")
11
10
  end
12
11
 
13
- json_output = `#{ffprobe_path} #{@@options} #{file_to_parse}`
12
+ json_output = `#{Ffprober.path} #{@@options} #{file_to_parse}`
14
13
  from_json(json_output)
15
14
  end
16
15
 
@@ -19,70 +18,35 @@ module Ffprober
19
18
  parser.parse(json_to_parse)
20
19
  parser
21
20
  end
22
-
23
- def ffprobe_version_valid?
24
- valid_versions.include?(ffprobe_version)
25
- end
26
-
27
- def ffprobe_version
28
- version = `#{ffprobe_path} -version`.match(@@version_regex)
29
- raise Errno::ENOENT if version.nil?
30
- major, minor, patch = version[1].to_i, version[2].to_i, version[3].to_i
31
- {major: major, minor: minor, patch: patch}
32
- rescue Errno::ENOENT => e
33
- {major: 0, minor: 0, patch: 0}
34
- end
35
-
36
- def valid_versions
37
- [
38
- {major: 0, minor: 9, patch: 0},
39
- {major: 0, minor: 10, patch: 0},
40
- {major: 0, minor: 11, patch: 0},
41
- {major: 1, minor: 0, patch: 0},
42
- {major: 1, minor: 0, patch: 1},
43
- {major: 1, minor: 1, patch: 0},
44
- {major: 1, minor: 1, patch: 1},
45
- {major: 1, minor: 1, patch: 2},
46
- {major: 1, minor: 1, patch: 3},
47
- {major: 1, minor: 1, patch: 4},
48
- {major: 1, minor: 2, patch: 0}
49
- ]
50
- end
51
-
52
- def ffprobe_path
53
- name = 'ffprobe'
54
-
55
- if File.executable? name
56
- cmd
57
- else
58
- path = ENV['PATH'].split(File::PATH_SEPARATOR).find { |path|
59
- File.executable? File.join(path, name)
60
- }
61
- path && File.expand_path(name, path)
62
- end
63
- end
64
21
  end
65
22
 
66
23
  def parse(json_to_parse)
67
24
  raise ArgumentError.new("No JSON found") if json_to_parse.nil?
68
- @video_json = JSON.parse(json_to_parse, symbolize_names: true)
25
+ @json_to_parse = json_to_parse
26
+ end
27
+
28
+ def parsed_json
29
+ @parsed_json ||= JSON.parse(@json_to_parse, symbolize_names: true)
69
30
  end
70
31
 
71
32
  def format
72
- Ffprober::Format.new(@video_json[:format])
33
+ Ffprober::Format.new(parsed_json[:format])
73
34
  end
74
35
 
75
36
  def video_streams
76
- @video_json[:streams].select { |stream| stream[:codec_type] == 'video'}.map do |s|
37
+ streams.select { |stream| stream[:codec_type] == 'video'}.map do |s|
77
38
  Ffprober::VideoStream.new(s)
78
39
  end
79
40
  end
80
41
 
81
42
  def audio_streams
82
- @video_json[:streams].select { |stream| stream[:codec_type] == 'audio'}.map do |s|
43
+ streams.select { |stream| stream[:codec_type] == 'audio'}.map do |s|
83
44
  Ffprober::AudioStream.new(s)
84
45
  end
85
46
  end
86
47
 
48
+ def streams
49
+ parsed_json[:streams]
50
+ end
87
51
  end
88
52
  end
@@ -1,3 +1,3 @@
1
1
  module Ffprober
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Ffprober::FfprobeVersion do
5
+ let(:before_one_zero) { Gem::Version.new("0.9.0") }
6
+ let(:one_zero) { Gem::Version.new("1.0.0") }
7
+ let(:one_one) { Gem::Version.new("1.1.0") }
8
+ let(:after_one_zero) { Gem::Version.new("1.9.0") }
9
+ let(:latest) { Gem::Version.new("1.2") }
10
+
11
+ context 'validates the ffprobe version' do
12
+ it 'detects versions < 0.9' do
13
+ Ffprober::FfprobeVersion.stub(:parsed_version) { before_one_zero }
14
+ Ffprober::FfprobeVersion.valid?.should be_true
15
+ end
16
+
17
+ it 'detects versions 1.0' do
18
+ Ffprober::FfprobeVersion.stub(:parsed_version) { one_zero }
19
+ Ffprober::FfprobeVersion.valid?.should be_true
20
+ end
21
+
22
+ it 'detects versions 1.1' do
23
+ Ffprober::FfprobeVersion.stub(:parsed_version) { one_one }
24
+ Ffprober::FfprobeVersion.valid?.should be_true
25
+ end
26
+
27
+ it 'detects versions 1.9' do
28
+ Ffprober::FfprobeVersion.stub(:parsed_version) { after_one_zero }
29
+ Ffprober::FfprobeVersion.valid?.should be_false
30
+ end
31
+
32
+ it 'detects latest' do
33
+ Ffprober::FfprobeVersion.stub(:parsed_version) { latest }
34
+ Ffprober::FfprobeVersion.valid?.should be_true
35
+ end
36
+
37
+ end
38
+ end
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Ffprober do
5
- describe "from_file", if: Ffprober::Parser.ffprobe_version_valid? do
5
+ describe "from_file", if: Ffprober::FfprobeVersion.valid? do
6
6
  before :each do
7
7
  @ffprobe = Ffprober::Parser.from_file('spec/assets/301-extracting_a_ruby_gem.m4v')
8
8
  end
@@ -24,7 +24,7 @@ describe Ffprober do
24
24
 
25
25
  describe "if no ffprobe is found" do
26
26
  it "should raise a exception" do
27
- Ffprober::Parser.stub(:ffprobe_path).and_return("nonexistant")
27
+ Ffprober.stub(:path).and_return("nonexistant")
28
28
  lambda { @ffprobe = Ffprober::Parser.from_file('spec/assets/301-extracting_a_ruby_gem.m4v') }.should raise_error
29
29
  end
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffprober
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - beanieboi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-13 00:00:00.000000000 Z
11
+ date: 2013-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -56,6 +56,7 @@ files:
56
56
  - ffprober.gemspec
57
57
  - lib/ffprober.rb
58
58
  - lib/ffprober/audio_stream.rb
59
+ - lib/ffprober/ffprobe_version.rb
59
60
  - lib/ffprober/format.rb
60
61
  - lib/ffprober/parser.rb
61
62
  - lib/ffprober/stream.rb
@@ -63,7 +64,7 @@ files:
63
64
  - lib/ffprober/video_stream.rb
64
65
  - spec/assets/301-extracting_a_ruby_gem.json
65
66
  - spec/assets/301-extracting_a_ruby_gem.m4v
66
- - spec/ffprober/parser_spec.rb
67
+ - spec/ffprober/ffprobe_version_spec.rb
67
68
  - spec/ffprober_spec.rb
68
69
  - spec/spec_helper.rb
69
70
  homepage: https://github.com/beanieboi/ffprober
@@ -78,7 +79,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
79
  requirements:
79
80
  - - '>='
80
81
  - !ruby/object:Gem::Version
81
- version: 1.9.2
82
+ version: 1.9.3
82
83
  required_rubygems_version: !ruby/object:Gem::Requirement
83
84
  requirements:
84
85
  - - '>='
@@ -93,6 +94,6 @@ summary: a Ruby wrapper for ffprobe (part of ffmpeg)
93
94
  test_files:
94
95
  - spec/assets/301-extracting_a_ruby_gem.json
95
96
  - spec/assets/301-extracting_a_ruby_gem.m4v
96
- - spec/ffprober/parser_spec.rb
97
+ - spec/ffprober/ffprobe_version_spec.rb
97
98
  - spec/ffprober_spec.rb
98
99
  - spec/spec_helper.rb
@@ -1,32 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
-
4
- describe Ffprober::Parser do
5
- let(:before_one_zero) { {major: 0, minor: 9, patch: 0} }
6
- let(:one_zero) { {major: 1, minor: 0, patch: 0} }
7
- let(:one_one) { {major: 1, minor: 1, patch: 0} }
8
- let(:after_one_zero) { {major: 1, minor: 9, patch: 0} }
9
-
10
- context 'validates the ffprobe version' do
11
- it 'detects versions < 0.9' do
12
- Ffprober::Parser.stub(:ffprobe_version) { before_one_zero }
13
- Ffprober::Parser.ffprobe_version_valid?.should be_true
14
- end
15
-
16
- it 'detects versions 1.0' do
17
- Ffprober::Parser.stub(:ffprobe_version) { one_zero }
18
- Ffprober::Parser.ffprobe_version_valid?.should be_true
19
- end
20
-
21
- it 'detects versions 1.1' do
22
- Ffprober::Parser.stub(:ffprobe_version) { one_one }
23
- Ffprober::Parser.ffprobe_version_valid?.should be_true
24
- end
25
-
26
-
27
- it 'detects versions 1.9' do
28
- Ffprober::Parser.stub(:ffprobe_version) { after_one_zero }
29
- Ffprober::Parser.ffprobe_version_valid?.should be_false
30
- end
31
- end
32
- end