ffprober 0.2.0 → 0.2.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
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