sequencer 1.0.2 → 1.0.3

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.
Files changed (5) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +1 -0
  3. data/bin/rseqpad +38 -0
  4. data/lib/sequencer.rb +29 -2
  5. metadata +38 -14
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 1.0.3 / 2010-10-26
2
+
3
+ * Add rseqpad binary that zero-pads filenames
4
+
1
5
  === 1.0.2 / 2010-05-06
2
6
 
3
7
  * Add Sequence#from_glob for scavenging all sequences from all subdirs
data/Manifest.txt CHANGED
@@ -4,5 +4,6 @@ Manifest.txt
4
4
  README.txt
5
5
  Rakefile
6
6
  bin/rseqls
7
+ bin/rseqpad
7
8
  lib/sequencer.rb
8
9
  test/test_sequencer.rb
data/bin/rseqpad ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + "/../lib/sequencer"
4
+
5
+ d = ARGV.shift || Dir.pwd
6
+
7
+ renames = []
8
+ Sequencer.entries(d).each do | e |
9
+ next if e.length < 2
10
+
11
+ padz = e.length.to_s.length
12
+
13
+ puts "Repadding sequence #{e} with #{padz} zeroes"
14
+
15
+ e.each do | f |
16
+ rep_name = f.gsub(/([\.\-\_]?)(\d+)\.(\w+)$/) do
17
+ ".%0#{padz}d.%s" % [$2.to_i, $3]
18
+ end
19
+ # Now this is a replaced name
20
+ from_to = [File.join(e.directory, f), File.join(e.directory, rep_name)]
21
+ renames.push(from_to)
22
+ end
23
+ end
24
+
25
+ # Check for dupes
26
+ destinations = renames.map{|e| e[1] }
27
+
28
+ if (destinations.uniq.length != destinations.length)
29
+ twice = destinations.length - destinations.uniq.length
30
+ $stderr.puts "Cannot rename - #{twice} files will overwrite each other or files will be renamed twice"
31
+ twice.each {|e| $stderr.puts e }
32
+ exit -1
33
+ end
34
+
35
+ # And do the job
36
+ renames.each do | from, to |
37
+ File.rename(from, to)
38
+ end
data/lib/sequencer.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Sequencer
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
3
3
  NUMBERS_AT_END = /(\d+)([^\d]+)?$/
4
4
 
5
5
  extend self
@@ -171,7 +171,7 @@ module Sequencer
171
171
  @filenames.include?(base_filename)
172
172
  end
173
173
 
174
- # Yield each filename in the sequence to the block
174
+ # Yields the filename of each file to the block
175
175
  def each
176
176
  @filenames.each {|f| yield(f) }
177
177
  end
@@ -201,6 +201,33 @@ module Sequencer
201
201
  @ranges[-1].end
202
202
  end
203
203
 
204
+ # Apply a bulk rename
205
+ def bulk_rename(with_pattern)
206
+ rename_map = filenames.inject({}) do | filename, map |
207
+ frame_no = filename.scan(NUMBERS_AT_END).flatten.shift.to_i
208
+ map.merge(filename => (with_pattern % frame_no))
209
+ end
210
+
211
+ # Ensure we will not produce dupes
212
+ if (rename_map.values.uniq.length != rename_map.length)
213
+ raise "This would would produce non-unique files"
214
+ end
215
+
216
+ if (error = (rename_map.keys & rename_map.values)).any?
217
+ raise "This would overwrite old files with the renamed ones (#{error[0..1]}.join(',')..)"
218
+ end
219
+
220
+ if (error = (Dir.entries(@directory) % rename_map.values)).any?
221
+ raise "Files that will be created by the rename are already in place (#{error[0..1]}.join(',')..)"
222
+ end
223
+
224
+
225
+ end
226
+
227
+ def bulk_rename!(with_pattern)
228
+ replace(bulk_rename(with_pattern))
229
+ end
230
+
204
231
  private
205
232
 
206
233
  def natural_sort(ar)
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequencer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ hash: 17
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 3
10
+ version: 1.0.3
5
11
  platform: ruby
6
12
  authors:
7
13
  - Julik Tarkhanov
@@ -9,34 +15,45 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-05-06 00:00:00 +02:00
18
+ date: 2010-10-26 00:00:00 +02:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: test-spec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
23
32
  version: "0"
24
- version:
33
+ type: :development
34
+ version_requirements: *id001
25
35
  - !ruby/object:Gem::Dependency
26
36
  name: hoe
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
30
40
  requirements:
31
41
  - - ">="
32
42
  - !ruby/object:Gem::Version
33
- version: 2.6.0
34
- version:
43
+ hash: 21
44
+ segments:
45
+ - 2
46
+ - 6
47
+ - 1
48
+ version: 2.6.1
49
+ type: :development
50
+ version_requirements: *id002
35
51
  description: Simplifies working with image sequences
36
52
  email:
37
53
  - me@julik.nl
38
54
  executables:
39
55
  - rseqls
56
+ - rseqpad
40
57
  extensions: []
41
58
 
42
59
  extra_rdoc_files:
@@ -50,6 +67,7 @@ files:
50
67
  - README.txt
51
68
  - Rakefile
52
69
  - bin/rseqls
70
+ - bin/rseqpad
53
71
  - lib/sequencer.rb
54
72
  - test/test_sequencer.rb
55
73
  has_rdoc: true
@@ -63,21 +81,27 @@ rdoc_options:
63
81
  require_paths:
64
82
  - lib
65
83
  required_ruby_version: !ruby/object:Gem::Requirement
84
+ none: false
66
85
  requirements:
67
86
  - - ">="
68
87
  - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
69
91
  version: "0"
70
- version:
71
92
  required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
72
94
  requirements:
73
95
  - - ">="
74
96
  - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
75
100
  version: "0"
76
- version:
77
101
  requirements: []
78
102
 
79
103
  rubyforge_project: sequencer
80
- rubygems_version: 1.3.5
104
+ rubygems_version: 1.3.7
81
105
  signing_key:
82
106
  specification_version: 3
83
107
  summary: Simplifies working with image sequences