fun_with_files 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -204,14 +204,15 @@ module FunWith
204
204
  split_basename.length > 1 ? split_basename.last : ""
205
205
  end
206
206
 
207
- # given an ancestor dir, returns a relative path that takes you from
208
- # the ancestor dir to the pathfile. TODO: expand to arbitrary paths, not
209
- # just immediate ancestors. For example "/usr/bin/bash".relative_to("/usr/bin/zsh") => "." ?
210
- # TODO: look at Pathname.relative_path_from. Might just want to alias.
211
- def relative_to( ancestor_dir )
212
- depth = ancestor_dir.to_s.split(File::SEPARATOR).length
213
- relative_path = self.to_s.split(File::SEPARATOR)
214
- relative_path[(depth)..-1].join(File::SEPARATOR).fwf_filepath
207
+ # base, ext = @path.basename_and_ext
208
+ def basename_and_ext
209
+ [basename_no_ext, ext]
210
+ end
211
+
212
+ # Basically Pathname.relative_path_from, but you can pass in strings
213
+ def relative_path_from( dir )
214
+ dir = super( Pathname.new( dir ) )
215
+ self.class.new( dir )
215
216
  end
216
217
 
217
218
  # gsub acts on the filepath, not the file contents
@@ -227,6 +228,39 @@ module FunWith
227
228
  def fwf_filepath
228
229
  self
229
230
  end
231
+
232
+ # Gives a sequence of files. Examples:
233
+ # file.dat --> file.000000.dat
234
+ # file_without_ext --> file_without_ext.000000
235
+ # If it sees a six-digit number at or near the end of the
236
+ # filename, it increments it.
237
+ #
238
+ # You can change the length of the sequence string by passing
239
+ # in an argument, but it should always be the same value for
240
+ # a given set of files.
241
+ SUCC_DIGIT_COUNT = 6
242
+ def succ( digit_count = SUCC_DIGIT_COUNT )
243
+ chunks = basename.to_s.split(".")
244
+ if chunks.length == 1 # not being counted, no file extension.
245
+ chunks.push( "0" * digit_count )
246
+ elsif match_data = chunks[-2].match( /^(\d{#{digit_count}})$/ )
247
+ i = match_data[1].to_i + 1
248
+ chunks[-2] = sprintf("%0#{digit_count}i", i)
249
+ elsif match_data = chunks[-1].match( /^(\d{#{digit_count}})$/ )
250
+ i = match_data[1].to_i + 1
251
+ chunks[-1] = sprintf("%0#{digit_count}i", i)
252
+ else # not being counted, has file extension
253
+ chunks = [chunks[0..-2], ("0" * digit_count), chunks[-1]].flatten
254
+ end
255
+
256
+ self.up.join( chunks.join(".") )
257
+ end
230
258
  end
259
+
260
+ # TODO: succession : enumerates a sequence of files that get passed
261
+ # to a block in order.
262
+
263
+ # TODO: succ_last : find the last existing file of the given sequence.
264
+ # TODO: succ_next : find the first free file of the given sequence
231
265
  end
232
266
  end
@@ -0,0 +1,5 @@
1
+ class Pathname
2
+ def fwf_filepath(*args)
3
+ FunWith::Files::FilePath.new( self, *args )
4
+ end
5
+ end
@@ -7,6 +7,7 @@ require_relative File.join("files", "file_path")
7
7
  require_relative File.join("files", "root_path")
8
8
  require_relative File.join("files", "remote_path")
9
9
  require_relative File.join("files", "string_extensions")
10
+ require_relative File.join("files", "pathname_extensions")
10
11
 
11
12
  FunWith::Files::RootPath.rootify( FunWith::Files, FunWith::Files::FilePath.new(__FILE__).dirname.up )
12
13
 
@@ -32,6 +32,27 @@ class TestFilePath < Test::Unit::TestCase
32
32
  #invoking down didn't change original
33
33
  assert_no_match /ask_for_floyd/, f2.to_s
34
34
  end
35
+
36
+ should "convert from string" do
37
+ str = "/"
38
+ f1 = FilePath.new(str)
39
+ f2 = str.fwf_filepath
40
+
41
+ assert_equal f1, f2
42
+ end
43
+
44
+ should "convert from pathname" do
45
+ str = "/"
46
+ f1 = FilePath.new(str)
47
+ f2 = Pathname.new(str).fwf_filepath
48
+
49
+ assert_equal f1, f2
50
+
51
+ f3 = f1.join( "bin", "bash" )
52
+ f4 = Pathname.new( str ).fwf_filepath( "bin", "bash" )
53
+
54
+ assert_equal f3, f4
55
+ end
35
56
  end
36
57
 
37
58
  context "test glob" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fun_with_files
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-30 00:00:00.000000000 Z
12
+ date: 2013-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
@@ -106,6 +106,7 @@ extra_rdoc_files:
106
106
  - README.rdoc
107
107
  files:
108
108
  - ./lib/files/file_path.rb
109
+ - ./lib/files/pathname_extensions.rb
109
110
  - ./lib/files/remote_path.rb
110
111
  - ./lib/files/root_path.rb
111
112
  - ./lib/files/string_extensions.rb
@@ -137,7 +138,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
138
  version: '0'
138
139
  segments:
139
140
  - 0
140
- hash: -1077870850940227410
141
+ hash: -2333632354630146614
141
142
  required_rubygems_version: !ruby/object:Gem::Requirement
142
143
  none: false
143
144
  requirements: