mxfinfo 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -0
- data/Gemfile +8 -0
- data/LICENSE +22 -0
- data/README.md +4 -0
- data/Rakefile +8 -0
- data/lib/mxfinfo/attr_readers.rb +55 -0
- data/lib/mxfinfo/version.rb +3 -0
- data/lib/mxfinfo.rb +111 -0
- data/mxfinfo.gemspec +19 -0
- data/spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf +0 -0
- data/spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf.info +44 -0
- data/spec/img_0395.mov.a14dc7130d_spec.rb +116 -0
- data/spec/mxfinfo_spec.rb +76 -0
- data/spec/spec_helper.rb +23 -0
- metadata +66 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Steve Dierker
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
class MXFinfo
|
4
|
+
class InfoObject
|
5
|
+
module AttrReaders
|
6
|
+
# Add attribute reader for AVID MXF INFO attributes
|
7
|
+
def mxfinfo_attr_reader(method_name, mxfinfo_key = nil)
|
8
|
+
before_type_cast_method_name = "#{method_name}_before_type_cast"
|
9
|
+
mxfinfo_key = mxfinfo_key.gsub(/\s+/,"_").downcase if mxfinfo_key
|
10
|
+
|
11
|
+
# Define before_type_cast method alias {method_name}_before_type_cast
|
12
|
+
define_method before_type_cast_method_name do
|
13
|
+
if value = instance_variable_get("@#{before_type_cast_method_name}")
|
14
|
+
value
|
15
|
+
else
|
16
|
+
key = mxfinfo_key ? mxfinfo_key : method_name.to_s
|
17
|
+
value = @processed_data[key]
|
18
|
+
|
19
|
+
instance_variable_set "@#{before_type_cast_method_name}", value
|
20
|
+
instance_variable_get "@#{before_type_cast_method_name}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Define after_type_cast method alias {method_name}
|
25
|
+
define_method method_name do
|
26
|
+
if value = instance_variable_get("@#{method_name}")
|
27
|
+
value
|
28
|
+
else
|
29
|
+
value = send(before_type_cast_method_name)
|
30
|
+
value = yield value if value and block_given?
|
31
|
+
|
32
|
+
instance_variable_set "@#{method_name}", value
|
33
|
+
instance_variable_get "@#{method_name}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
MXFinfo::InfoObject.supported_attributes << method_name
|
38
|
+
end
|
39
|
+
|
40
|
+
def mxfinfo_date_reader(*a)
|
41
|
+
mxfinfo_attr_reader(*a) { |v| Time.parse v }
|
42
|
+
end
|
43
|
+
|
44
|
+
def mxfinfo_duration_reader(*a)
|
45
|
+
mxfinfo_attr_reader(*a) { |v|
|
46
|
+
value = v.split(" ")[2].gsub(/\(|\)/,"")
|
47
|
+
t = 0
|
48
|
+
tmp = value.split(":")
|
49
|
+
t = (tmp[0].to_i*60*60*1000) + (tmp[1].to_i*60*1000) + (tmp[2].to_i * 1000) + (tmp[3].to_i * 10)
|
50
|
+
t
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/mxfinfo.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require "forwardable"
|
2
|
+
require "mxfinfo/version"
|
3
|
+
require "mxfinfo/attr_readers"
|
4
|
+
|
5
|
+
class MXFinfo
|
6
|
+
extend Forwardable
|
7
|
+
# We assume it's in the path of the user
|
8
|
+
@@binary = 'avidmxfinfo'
|
9
|
+
|
10
|
+
# BINARY CHANGE
|
11
|
+
def self.binary; @@binary; end
|
12
|
+
def self.binary=(binary); @@binary = binary; end
|
13
|
+
|
14
|
+
def self.scan(path)
|
15
|
+
info = InfoObject.new(path)
|
16
|
+
info.valid? ? info : nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.import(data)
|
20
|
+
InfoObject.new(data, false)
|
21
|
+
end
|
22
|
+
|
23
|
+
class InfoObject
|
24
|
+
extend AttrReaders
|
25
|
+
|
26
|
+
# RAW AVIDMXFINFO OUTPUT
|
27
|
+
def raw_data; @mxfinfo; end
|
28
|
+
|
29
|
+
# Attributes
|
30
|
+
def self.supported_attributes; @supported_attributes ||= []; end
|
31
|
+
|
32
|
+
def initialize(input, process = true)
|
33
|
+
if process
|
34
|
+
@filepath = File.absolute_path(input)
|
35
|
+
File.exists?(@filepath.shellescape) ? @valid = true : @valid = false
|
36
|
+
@mxfinfo = mxfinfo if (process && @valid)
|
37
|
+
else
|
38
|
+
@valid = true
|
39
|
+
@mxfinfo = input
|
40
|
+
end
|
41
|
+
process_data if @valid
|
42
|
+
end
|
43
|
+
|
44
|
+
def valid?
|
45
|
+
@valid
|
46
|
+
end
|
47
|
+
|
48
|
+
mxfinfo_attr_reader :filename
|
49
|
+
mxfinfo_attr_reader :project_name
|
50
|
+
mxfinfo_attr_reader :clip_name
|
51
|
+
mxfinfo_date_reader :clip_created_at, "Clip Created"
|
52
|
+
mxfinfo_attr_reader :project_edit_rate
|
53
|
+
mxfinfo_attr_reader :clip_edit_rate
|
54
|
+
mxfinfo_duration_reader :clip_duration
|
55
|
+
|
56
|
+
mxfinfo_attr_reader :videotracks, "Clip Video Tracks"
|
57
|
+
def v_tracks; videotracks.to_i; end
|
58
|
+
alias_method :video_tracks, :v_tracks
|
59
|
+
|
60
|
+
mxfinfo_attr_reader :audiotracks, "Clip Audio Tracks"
|
61
|
+
def a_tracks; audiotracks.to_i; end
|
62
|
+
alias_method :audio_tracks, :a_tracks
|
63
|
+
|
64
|
+
mxfinfo_attr_reader :clip_track_string
|
65
|
+
mxfinfo_attr_reader :essence_type
|
66
|
+
mxfinfo_attr_reader :essence_label
|
67
|
+
|
68
|
+
mxfinfo_attr_reader :tracknumber, "Track Number"
|
69
|
+
def t_number; tracknumber.to_i; end
|
70
|
+
alias_method :track_number, :t_number
|
71
|
+
|
72
|
+
mxfinfo_attr_reader :edit_rate
|
73
|
+
mxfinfo_duration_reader :track_duration
|
74
|
+
mxfinfo_duration_reader :track_segment_duration
|
75
|
+
mxfinfo_duration_reader :track_segment_offset
|
76
|
+
mxfinfo_duration_reader :start_timecode
|
77
|
+
mxfinfo_attr_reader :audio_sampling_rate
|
78
|
+
|
79
|
+
mxfinfo_attr_reader :channelcount, "Channel Count"
|
80
|
+
def c_count; channelcount.to_i; end
|
81
|
+
alias_method :channel_count, :c_count
|
82
|
+
|
83
|
+
mxfinfo_attr_reader :quantizationbits, "Quantization Bits"
|
84
|
+
def q_bits; quantizationbits.to_i; end
|
85
|
+
alias_method :quantization_bits, :q_bits
|
86
|
+
|
87
|
+
mxfinfo_attr_reader :unc_path
|
88
|
+
mxfinfo_attr_reader :material_package_uid
|
89
|
+
mxfinfo_attr_reader :file_package_uid
|
90
|
+
mxfinfo_attr_reader :physical_package_uid
|
91
|
+
mxfinfo_attr_reader :physical_package_type
|
92
|
+
mxfinfo_attr_reader :physical_package_name
|
93
|
+
mxfinfo_attr_reader :physical_package_locator
|
94
|
+
|
95
|
+
private
|
96
|
+
def mxfinfo
|
97
|
+
# TODO: - add check if return data is valid
|
98
|
+
`#{MXFinfo.binary} #{@filepath.shellescape}`
|
99
|
+
end
|
100
|
+
|
101
|
+
def process_data
|
102
|
+
@processed_data = Hash.new
|
103
|
+
@mxfinfo.each_line do |line|
|
104
|
+
if line.include?("=")
|
105
|
+
key, value = line.split("=")[0], line.split("=")[1]
|
106
|
+
@processed_data[key.strip.gsub(/\s+/, "_").downcase] = value.strip
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/mxfinfo.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/mxfinfo/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Steve Dierker"]
|
6
|
+
gem.email = ["steve.dierker@flavoursys.com"]
|
7
|
+
gem.description = %q{MXFinfo is a gem to use avidmxfinfo from http://ingex.sourceforge.net/ directly in ruby.}
|
8
|
+
gem.summary = %q{MXFinfo is a gem to use avidmxfinfo from http://ingex.sourceforge.net/ directly in ruby.}
|
9
|
+
gem.homepage = "http://github.com/bigzed/mxfinfo"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "mxfinfo"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = MXFinfo::VERSION
|
17
|
+
gem.required_ruby_version = '>= 1.8.1'
|
18
|
+
|
19
|
+
end
|
Binary file
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
Filename = /home/steved/Documents/git/mxfinfo/spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf
|
3
|
+
Warning: Ignoring non-zero TimecodeComponent::StartTimecode because edit rate combination not supported
|
4
|
+
Project name = Ballerinas_zippy
|
5
|
+
Project edit rate = 25/1
|
6
|
+
Clip name = IMG_0395.MOV
|
7
|
+
Clip created = 2011-05-08 22:02:53.000
|
8
|
+
Clip edit rate = 25/1
|
9
|
+
Clip duration = 287 samples (00:00:11:12)
|
10
|
+
Clip video tracks = 1
|
11
|
+
Clip audio tracks = 1
|
12
|
+
Clip track string = V1 A1
|
13
|
+
Audio essence
|
14
|
+
Essence type = PCM
|
15
|
+
Essence label = 060e2b34040101010d01030102060200
|
16
|
+
Track number = 1
|
17
|
+
Edit rate = 48000/1
|
18
|
+
Track duration = 551040 samples (00:00:11:12)
|
19
|
+
Track segment duration = 551040 samples (00:00:11:12)
|
20
|
+
Track segment offset = 0 samples (00:00:00:00)
|
21
|
+
Start timecode = 0 samples (00:00:00:00)
|
22
|
+
Audio sampling rate = 48000/1
|
23
|
+
Channel count = 1
|
24
|
+
Quantization bits = 16
|
25
|
+
User comments:
|
26
|
+
UNC Path = Macintosh HD:Users:susannehassepass:Desktop:London 1video:IMG_0395.MOV
|
27
|
+
Material package attributes:
|
28
|
+
_IMPORTSETTING = __AttributeList
|
29
|
+
_DOMINANCE = 1
|
30
|
+
_IMPORTPICTSEQ = 0
|
31
|
+
_IGNOREALPHA = 0
|
32
|
+
_INVERTALPHA = 1
|
33
|
+
_ASPECT = 2
|
34
|
+
_IMPORTASPECT = 2
|
35
|
+
_COLORLEVEL = 1
|
36
|
+
_FORMAT = 2
|
37
|
+
_SRCFILE = __PortableObject
|
38
|
+
_ATN_IMPORT_AUD_BWF_MONO_GROUP = 1
|
39
|
+
Material package UID = 060a2b340101010101010f00130000004dc7130d05831a0a060e2b347f7f2a80
|
40
|
+
File package UID = 060a2b340101010101010f00130000004dc7130d05841a0a060e2b347f7f2a80
|
41
|
+
Physical package UID = 060a2b340101010101010f00130000004dc7130d05851a0a060e2b347f7f2a80
|
42
|
+
Physical package type = Import
|
43
|
+
Physical package name = IMG_0395.MOV
|
44
|
+
Physical package locator = file:///Macintosh%20HD/Users/susannehassepass/Desktop/London%201video/IMG_0395.MOV
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "IMG_0395.MOV.A14DC7130D.mxf" do
|
4
|
+
before (:all) do
|
5
|
+
infoFile = File.open(name_to_fixture "IMG_0395.MOV.A14DC7130D.mxf.info")
|
6
|
+
@info = MXFinfo.import(infoFile.read)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should have a filename" do
|
10
|
+
@info.filename.should == "/home/steved/Documents/git/mxfinfo/spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should have a project name" do
|
14
|
+
@info.project_name.should == "Ballerinas_zippy"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have a clip name" do
|
18
|
+
@info.clip_name.should == "IMG_0395.MOV"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a clip created at" do
|
22
|
+
@info.clip_created_at.should == Time.parse("2011-05-08 22:02:53.000")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a edit rate" do
|
26
|
+
@info.project_edit_rate.should == "25/1"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a clip duration" do
|
30
|
+
@info.clip_duration.should == 11120
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have a clip video tracks count" do
|
34
|
+
@info.video_tracks.should == 1
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have a clip audio tracks count" do
|
38
|
+
@info.audio_tracks.should == 1
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should have a clip tracks string" do
|
42
|
+
@info.clip_track_string.should == "V1 A1"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should have a essence type" do
|
46
|
+
@info.essence_type.should == "PCM"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should have a essence label" do
|
50
|
+
@info.essence_label.should == "060e2b34040101010d01030102060200"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should have a track number" do
|
54
|
+
@info.track_number.should == 1
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should have a edit rate" do
|
58
|
+
@info.edit_rate.should == "48000/1"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should have a track duration" do
|
62
|
+
@info.track_duration.should == 11120
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should have a track segment duration" do
|
66
|
+
@info.track_segment_duration.should == 11120
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should have a track segment offset" do
|
70
|
+
@info.track_segment_offset.should == 0
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should have a start timecode" do
|
74
|
+
@info.start_timecode.should == 0
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should have a audio sampling rate" do
|
78
|
+
@info.audio_sampling_rate.should == "48000/1"
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should have a channel count" do
|
82
|
+
@info.channel_count.should == 1
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should have a quantization bits" do
|
86
|
+
@info.quantization_bits.should == 16
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should have a unc path" do
|
90
|
+
@info.unc_path.should == "Macintosh HD:Users:susannehassepass:Desktop:London 1video:IMG_0395.MOV"
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should have a material package uid" do
|
94
|
+
@info.material_package_uid.should == "060a2b340101010101010f00130000004dc7130d05831a0a060e2b347f7f2a80"
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should have a file package uid" do
|
98
|
+
@info.file_package_uid.should == "060a2b340101010101010f00130000004dc7130d05841a0a060e2b347f7f2a80"
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should have a physical package uid" do
|
102
|
+
@info.physical_package_uid.should == "060a2b340101010101010f00130000004dc7130d05851a0a060e2b347f7f2a80"
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should have a physical package type" do
|
106
|
+
@info.physical_package_type.should == "Import"
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should have a physical package name" do
|
110
|
+
@info.physical_package_name.should == "IMG_0395.MOV"
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should have a physical package locator" do
|
114
|
+
@info.physical_package_locator.should == "file:///Macintosh%20HD/Users/susannehassepass/Desktop/London%201video/IMG_0395.MOV"
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MXFinfo do
|
4
|
+
before(:each) do
|
5
|
+
MXFinfo .class_variable_set :@@binary, 'avidmxfinfo'
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "avidmxfinfo binary change" do
|
9
|
+
it "should be default on 'avidmxfinfo'" do
|
10
|
+
MXFinfo.binary.should == "avidmxfinfo"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be changeable by MXFinfo.binary='new_path' " do
|
14
|
+
MXFinfo.binary.should == "avidmxfinfo"
|
15
|
+
MXFinfo.binary = "/bin/avidmxfinfo"
|
16
|
+
MXFinfo.binary.should == "/bin/avidmxfinfo"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be instantiated with valid path" do
|
21
|
+
info = MXFinfo.scan(name_to_fixture "IMG_0395.MOV.A14DC7130D.mxf")
|
22
|
+
info.nil?.should == false
|
23
|
+
info.raw_data.empty?.should == false
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should return nil if file doesn't exist" do
|
27
|
+
MXFinfo.scan("imagenary File").should == nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be possible to access raw data" do
|
31
|
+
info = MXFinfo.scan(name_to_fixture "IMG_0395.MOV.A14DC7130D.mxf")
|
32
|
+
info.nil?.should == false
|
33
|
+
infoFile = File.open(name_to_fixture "IMG_0395.MOV.A14DC7130D.mxf.info")
|
34
|
+
info.raw_data.should eql infoFile.read
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be possible to create infoObject from avidmxfinfo dump" do
|
38
|
+
infoFile = File.open(name_to_fixture "IMG_0395.MOV.A14DC7130D.mxf.info")
|
39
|
+
info = MXFinfo.import(infoFile.read)
|
40
|
+
info.valid?.should == true
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should have supported attributes" do
|
44
|
+
supported_attributes = [:project_name,
|
45
|
+
:filename,
|
46
|
+
:clip_name,
|
47
|
+
:clip_created_at,
|
48
|
+
:project_edit_rate,
|
49
|
+
:clip_edit_rate,
|
50
|
+
:clip_duration,
|
51
|
+
:videotracks,
|
52
|
+
:audiotracks,
|
53
|
+
:clip_track_string,
|
54
|
+
:essence_type,
|
55
|
+
:essence_label,
|
56
|
+
:tracknumber,
|
57
|
+
:edit_rate,
|
58
|
+
:track_duration,
|
59
|
+
:track_segment_duration,
|
60
|
+
:track_segment_offset,
|
61
|
+
:start_timecode,
|
62
|
+
:audio_sampling_rate,
|
63
|
+
:channelcount,
|
64
|
+
:quantizationbits,
|
65
|
+
:unc_path,
|
66
|
+
:material_package_uid,
|
67
|
+
:file_package_uid,
|
68
|
+
:physical_package_uid,
|
69
|
+
:physical_package_type,
|
70
|
+
:physical_package_name,
|
71
|
+
:physical_package_locator]
|
72
|
+
MXFinfo::InfoObject.supported_attributes.each do |a|
|
73
|
+
supported_attributes.include?(a).should == true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
require 'mxfinfo'
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
|
+
config.run_all_when_everything_filtered = true
|
12
|
+
config.filter_run :focus
|
13
|
+
|
14
|
+
# Run specs in random order to surface order dependencies. If you find an
|
15
|
+
# order dependency and want to debug it, you can fix the order by providing
|
16
|
+
# the seed, which is printed after each run.
|
17
|
+
# --seed 1234
|
18
|
+
config.order = 'random'
|
19
|
+
end
|
20
|
+
|
21
|
+
def name_to_fixture(file)
|
22
|
+
File.join("#{File.dirname(__FILE__)}/fixtures",file)
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mxfinfo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Steve Dierker
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-12 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: MXFinfo is a gem to use avidmxfinfo from http://ingex.sourceforge.net/
|
15
|
+
directly in ruby.
|
16
|
+
email:
|
17
|
+
- steve.dierker@flavoursys.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- Gemfile
|
24
|
+
- LICENSE
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- lib/mxfinfo.rb
|
28
|
+
- lib/mxfinfo/attr_readers.rb
|
29
|
+
- lib/mxfinfo/version.rb
|
30
|
+
- mxfinfo.gemspec
|
31
|
+
- spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf
|
32
|
+
- spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf.info
|
33
|
+
- spec/img_0395.mov.a14dc7130d_spec.rb
|
34
|
+
- spec/mxfinfo_spec.rb
|
35
|
+
- spec/spec_helper.rb
|
36
|
+
homepage: http://github.com/bigzed/mxfinfo
|
37
|
+
licenses: []
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.8.1
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubyforge_project:
|
56
|
+
rubygems_version: 1.8.24
|
57
|
+
signing_key:
|
58
|
+
specification_version: 3
|
59
|
+
summary: MXFinfo is a gem to use avidmxfinfo from http://ingex.sourceforge.net/ directly
|
60
|
+
in ruby.
|
61
|
+
test_files:
|
62
|
+
- spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf
|
63
|
+
- spec/fixtures/IMG_0395.MOV.A14DC7130D.mxf.info
|
64
|
+
- spec/img_0395.mov.a14dc7130d_spec.rb
|
65
|
+
- spec/mxfinfo_spec.rb
|
66
|
+
- spec/spec_helper.rb
|