depix 1.0.5 → 1.0.8

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.
data/.DS_Store ADDED
Binary file
@@ -18,7 +18,7 @@ DPX metadata gets returned as a Depix::DPX object with nested properties.
18
18
  * <tt>filename</tt> (String) Original filename
19
19
  * <tt>timestamp</tt> (String) Creation timestamp
20
20
  * <tt>creator</tt> (String) Creator application
21
- * <tt>roject</tt> (String) Project name
21
+ * <tt>project</tt> (String) Project name
22
22
  * <tt>copyright</tt> (String) Copyright
23
23
  * <tt>encrypt_key</tt> Encryption key
24
24
  * <tt>reserve</tt> (String)
data/History.txt CHANGED
@@ -1,3 +1,13 @@
1
+ === 1.0.8 / 2009-11-14
2
+
3
+ * Fix the version tag check so that it allows all versions but is still included, and so that the tests run
4
+
5
+ === 1.0.7 / 2009-05-21
6
+
7
+ * Do not bail out on headers newer than V1.0
8
+ * Allow access to headers directly in Depix::Editor
9
+ * Fix project field name
10
+
1
11
  === 1.0.5 / 2009-01-18
2
12
 
3
13
  * Switch project to guerilla-di
data/Manifest.txt CHANGED
@@ -1,10 +1,10 @@
1
+ .DS_Store
1
2
  DPX_HEADER_STRUCTURE.txt
2
3
  History.txt
3
4
  Manifest.txt
4
5
  README.txt
5
6
  Rakefile
6
7
  bin/depix-describe
7
- depix.gemspec
8
8
  lib/depix.rb
9
9
  lib/depix/benchmark.rb
10
10
  lib/depix/compact_structs.rb
@@ -14,6 +14,9 @@ lib/depix/enums.rb
14
14
  lib/depix/reader.rb
15
15
  lib/depix/struct_explainer.rb
16
16
  lib/depix/structs.rb
17
+ test/.DS_Store
18
+ test/samples/.DS_Store
19
+ test/samples/026_FROM_HERO_TAPE_5-3-1_MOV.0029.dpx
17
20
  test/samples/E012_P001_L000002_lin.0001.dpx
18
21
  test/samples/E012_P001_L000002_lin.0002.dpx
19
22
  test/samples/E012_P001_L000002_log.0001.dpx
data/README.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  = depix
2
2
 
3
- * http://wiretap.rubyforge.org/depix
3
+ * http://guerilla-di.org/depix
4
4
 
5
5
  == DESCRIPTION:
6
6
 
data/lib/depix.rb CHANGED
@@ -10,7 +10,7 @@ require File.dirname(__FILE__) + '/depix/editor'
10
10
 
11
11
 
12
12
  module Depix
13
- VERSION = '1.0.5'
13
+ VERSION = '1.0.8'
14
14
 
15
15
  class InvalidHeader < RuntimeError; end
16
16
 
data/lib/depix/dict.rb CHANGED
@@ -1,8 +1,34 @@
1
1
  module Depix
2
2
 
3
3
  #:stopdoc:
4
+
5
+ =begin
6
+ A basic C structs library (only works by value).
7
+ Here's the basic mode of operation:
8
+ 1) You define a struct, with a number of fields in it
9
+ 3) Each field knows how big it is and how to produce a pattern to get it's value from the byte stream
10
+ by using Ruby's "pack/unpack". Each field thus provides an unpack pattern, and patterns are ordered
11
+ into a stack, starting with the first unpack pattern
12
+ 4) When you parse some bytes using the struct, heres what will happen:
13
+ - An unpack pattern will be compiled from all of the fields composing the struct,
14
+ and it will be a single string. The string gets applied to the bytes passed to parse()
15
+ - An array of unpacked values returned by unpack is then passed to the struct's consumption engine,
16
+ which lets each field take as many items off the stack as it needs. A field might happily produce
17
+ 4 items for unpacking and then take the same 4 items off the stack of parsed values. Or not.
18
+ - A new structure gets created and for every named field it defines an attr_accessor. When consuming,
19
+ the values returned by Field objects get set using the accessors (so accessors can be overridden too!)
20
+ 5) When you save out the struct roughly the same happens but in reverse (readers are called per field,
21
+ then it's checked whether the data can be packed and fits into the alloted number of bytes, and then
22
+ one big array of values is composed and passed on to Array#pack)
23
+ =end
24
+
4
25
  class Field
5
- attr_accessor :name, :length, :pattern, :req, :desc, :rtype
26
+ attr_accessor :name, # Field name
27
+ :length, # Field length in bytes, including any possible padding
28
+ :pattern, # The unpack pattern that defines the field
29
+ :req, # Is the field required?
30
+ :desc, # Field description
31
+ :rtype # To which Ruby type this has to be cast (and which type is accepted as value)
6
32
  alias_method :req?, :req
7
33
 
8
34
  # Hash init
@@ -36,17 +62,19 @@ module Depix
36
62
  R32Field.new(o)
37
63
  end
38
64
 
39
- # Return a cleaned value
65
+ # Return a cleaned value (like a null-terminated string truncated up to null)
40
66
  def clean(v)
41
67
  v
42
68
  end
43
69
 
70
+ # Show a nice textual explanation of the field
44
71
  def explain
45
72
  [rtype ? ("(%s)" % rtype) : nil, desc, (req? ? "- required" : nil)].compact.join(' ')
46
73
  end
47
74
 
48
75
  # Return the actual values from the stack. The stack will begin on the element we need,
49
- # so the default consumption is shift
76
+ # so the default consumption is shift. Normally all fields shift the stack
77
+ # as they go, and if they contain nested substructs they will pop the stack as well
50
78
  def consume!(stack)
51
79
  clean(stack.shift)
52
80
  end
@@ -193,7 +221,7 @@ module Depix
193
221
 
194
222
  BLANKING_VALUES = [0x00.chr, 0xFF.chr]
195
223
  BLANKING_PATTERNS = BLANKING_VALUES.inject([]) do | p, char |
196
- p << /^(#{char}+)/ << /(#{char}+)$/
224
+ p << /^([#{char}]+)/ << /([#{char}]+)$/mu
197
225
  end
198
226
 
199
227
  def pattern
data/lib/depix/editor.rb CHANGED
@@ -1,32 +1,54 @@
1
+ require 'delegate'
2
+
1
3
  module Depix
2
4
  # Used to edit DPX headers. Create an Editor object and pass the path to the file to it. Change the headers variable to contain the edited
3
- # DPX headers and call commit!. Note that the DPX header will be overwritten in place - if you want to save another version you need to manage it yourself
4
- class Editor
5
+ # DPX headers and call commit!. Note that the DPX header will be overwritten in place - if you want to save another version you need to manage
6
+ # it yourself.
7
+ #
8
+ # dpx = Depix::Editor.new("/RAID/scans/1374470_adjusted.dpx")
9
+ # dpx.file.copyright = "Copyleft"
10
+ # dpx.file.reserve = "FileReserve"
11
+ # dpx.orientation.reserve = "OrientReserve"
12
+ # dpx.orientation.device = "Chainik"
13
+ # dpx.orientation.serial = "43"
14
+ # dpx.film.reserve = "FilmRezerve"
15
+ # dpx.file.project = "Mastermind"
16
+ #
17
+ # dpx.commit! # will write out the headers
18
+ class Editor < Delegator
5
19
 
6
20
  # Stores the path to file
7
21
  attr_reader :path
8
22
 
9
- # Stores the Depix::DPX object with headers
10
- attr_accessor :headers
11
-
12
23
  # Create a new editor for the file at path
13
24
  def initialize(file_path)
14
25
  @path = file_path
15
- @headers = Depix.from_file(@path)
26
+ @dpx = Depix.from_file(@path)
16
27
  end
17
28
 
18
29
  # Save the headers to file at path, overwriting the old ones
19
30
  def commit!
20
- raise "No headers" unless @headers
21
- raise "Cannot pack LE headers" if @headers.le?
22
- packed = @headers.class.pack(@headers)
31
+ raise "No headers" unless @dpx
32
+ raise "Cannot pack LE headers yet" if @dpx.le?
33
+ packed = @dpx.class.pack(@dpx)
23
34
 
24
35
  # Validate that we can unpack first - what if something went wrong?
25
36
  Depix::Reader.new.parse(packed, false)
26
37
 
38
+ # Use in-place writing into DPX file (this is what + does)
27
39
  File.open(@path, 'rb+') do | f |
28
40
  f.seek(0, IO::SEEK_SET); f.write(packed)
29
41
  end
30
42
  end
43
+
44
+ # DEPRECATED
45
+ def headers
46
+ STDERR.puts "Depix::Editor#headers is deprecated, use the Editor itself instead"
47
+ self
48
+ end
49
+
50
+ def __getobj__
51
+ @dpx # return object we are delegating to, required
52
+ end
31
53
  end
32
54
  end
data/lib/depix/reader.rb CHANGED
@@ -26,14 +26,14 @@ module Depix
26
26
  # The hear of Depix
27
27
  def parse(data, compact)
28
28
  magic = data[0..3]
29
-
29
+
30
30
  raise InvalidHeader, "No magic bytes found at start" unless %w( SDPX XPDS).include?(magic)
31
-
31
+
32
32
  struct = compact ? CompactDPX : DPX
33
-
33
+
34
34
  is_be = (magic == "SDPX")
35
35
  version_check = FileInfo.only(:magic, :version)
36
-
36
+
37
37
  result = begin
38
38
  if is_be
39
39
  version_check.consume!(data.unpack(version_check.pattern))
@@ -43,9 +43,9 @@ module Depix
43
43
  rescue ArgumentError
44
44
  raise InvalidHeader
45
45
  end
46
-
47
- raise InvalidHeader, "Unknown version tag #{result.version}" unless result.version == "V1.0"
48
-
46
+
47
+ raise InvalidHeader, "Unknown version tag #{result.version}" unless result.version =~ /V(\d)\.(\d+)/
48
+
49
49
  template = is_be ? DPX.pattern : make_le(DPX.pattern)
50
50
  struct.consume!(data.unpack(struct.pattern))
51
51
  end
data/lib/depix/structs.rb CHANGED
@@ -17,7 +17,7 @@ module Depix
17
17
  char :filename, 100, :desc => 'Original filename'
18
18
  char :timestamp, 24, :desc => 'Creation timestamp'
19
19
  char :creator, 100, :desc => 'Creator application'
20
- char :roject, 200, :desc => 'Project name'
20
+ char :project, 200, :desc => 'Project name'
21
21
  char :copyright, 200, :desc => 'Copyright'
22
22
 
23
23
  u32 :encrypt_key, :desc => 'Encryption key'
data/test/.DS_Store ADDED
Binary file
Binary file
data/test/test_depix.rb CHANGED
@@ -119,7 +119,8 @@ class EditorTest < Test::Unit::TestCase
119
119
  e = Depix::Editor.new(SAMPLE_DPX)
120
120
  assert_not_nil e
121
121
  assert_equal SAMPLE_DPX, e.path
122
- assert_not_nil e.headers
122
+ assert_respond_to e, :flame_reel
123
+ assert_equal "E012", e.flame_reel
123
124
  end
124
125
 
125
126
  def test_commit
@@ -127,7 +128,7 @@ class EditorTest < Test::Unit::TestCase
127
128
  begin
128
129
  FileUtils.cp(SAMPLE_DPX, temp_path)
129
130
  e = Depix::Editor.new(temp_path)
130
- e.headers.flame_reel = "E013"
131
+ e.flame_reel = "E013"
131
132
 
132
133
  assert_nothing_raised { e.commit! }
133
134
 
data/test/test_dict.rb CHANGED
@@ -147,7 +147,7 @@ end
147
147
  class TestArrayField < Test::Unit::TestCase
148
148
  include FieldConformity
149
149
 
150
- def test_array_field_conform_field!s_to_field_and_has_extra_methods
150
+ def test_array_field_conforms_to_field_and_has_extra_methods
151
151
  f = ArrayField.new
152
152
  conform_field!(f)
153
153
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: depix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-18 00:00:00 +01:00
12
+ date: 2009-11-14 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.8.2
33
+ version: 2.3.3
34
34
  version:
35
35
  description: Read and write DPX file metadata
36
36
  email:
@@ -45,13 +45,13 @@ extra_rdoc_files:
45
45
  - Manifest.txt
46
46
  - README.txt
47
47
  files:
48
+ - .DS_Store
48
49
  - DPX_HEADER_STRUCTURE.txt
49
50
  - History.txt
50
51
  - Manifest.txt
51
52
  - README.txt
52
53
  - Rakefile
53
54
  - bin/depix-describe
54
- - depix.gemspec
55
55
  - lib/depix.rb
56
56
  - lib/depix/benchmark.rb
57
57
  - lib/depix/compact_structs.rb
@@ -61,6 +61,9 @@ files:
61
61
  - lib/depix/reader.rb
62
62
  - lib/depix/struct_explainer.rb
63
63
  - lib/depix/structs.rb
64
+ - test/.DS_Store
65
+ - test/samples/.DS_Store
66
+ - test/samples/026_FROM_HERO_TAPE_5-3-1_MOV.0029.dpx
64
67
  - test/samples/E012_P001_L000002_lin.0001.dpx
65
68
  - test/samples/E012_P001_L000002_lin.0002.dpx
66
69
  - test/samples/E012_P001_L000002_log.0001.dpx
@@ -68,7 +71,9 @@ files:
68
71
  - test/test_depix.rb
69
72
  - test/test_dict.rb
70
73
  has_rdoc: true
71
- homepage: http://wiretap.rubyforge.org/depix
74
+ homepage: http://guerilla-di.org/depix
75
+ licenses: []
76
+
72
77
  post_install_message:
73
78
  rdoc_options:
74
79
  - --main
@@ -90,9 +95,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
95
  requirements: []
91
96
 
92
97
  rubyforge_project: guerilla-di
93
- rubygems_version: 1.3.1
98
+ rubygems_version: 1.3.5
94
99
  signing_key:
95
- specification_version: 2
100
+ specification_version: 3
96
101
  summary: Read and write DPX file metadata
97
102
  test_files:
98
103
  - test/test_depix.rb
data/depix.gemspec DELETED
@@ -1,35 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = %q{depix}
3
- s.version = "1.0.5"
4
-
5
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
- s.authors = ["Julik Tarkhanov"]
7
- s.date = %q{2008-12-26}
8
- s.default_executable = %q{depix-describe}
9
- s.description = %q{Read DPX file metadata}
10
- s.email = ["me@julik.nl"]
11
- s.executables = ["depix-describe"]
12
- s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt", "DPX_HEADER_STRUCTURE.txt"]
13
- s.files = ["History.txt", "Manifest.txt", "README.txt", "DPX_HEADER_STRUCTURE.txt", "Rakefile", "bin/depix-describe", "lib/depix.rb", "lib/depix/struct_explainer.rb", "lib/depix/structs.rb", "lib/depix/benchmark.rb", "lib/depix/compact_structs.rb", "lib/depix/enums.rb", "lib/depix/dict.rb", "lib/depix/reader.rb", "lib/depix/editor.rb", "test/test_dict.rb", "test/test_depix.rb", "test/samples/E012_P001_L000002_lin.0001.dpx", "test/samples/E012_P001_L000002_lin.0002.dpx", "test/samples/E012_P001_L000002_log.0001.dpx", "test/samples/E012_P001_L000002_log.0002.dpx"]
14
- s.has_rdoc = true
15
- s.homepage = %q{http://guerilla-di.rubyforge.org/depix}
16
- s.rdoc_options = ["--main", "README.txt"]
17
- s.require_paths = ["lib"]
18
- s.rubyforge_project = %q{guerilla-di}
19
- s.rubygems_version = %q{1.3.1}
20
- s.summary = %q{Read DPX file metadata}
21
- s.test_files = ["test/test_depix.rb", "test/test_dict.rb"]
22
-
23
- if s.respond_to? :specification_version then
24
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
- s.specification_version = 2
26
-
27
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
- s.add_development_dependency(%q<hoe>, [">= 1.8.2"])
29
- else
30
- s.add_dependency(%q<hoe>, [">= 1.8.2"])
31
- end
32
- else
33
- s.add_dependency(%q<hoe>, [">= 1.8.2"])
34
- end
35
- end