pa 1.2.1 → 1.2.2

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/lib/pa.rb CHANGED
@@ -207,13 +207,21 @@ class Pa
207
207
  DELEGATE_METHODS = [ :dir, :build, :join ]
208
208
 
209
209
  attr_reader :path2
210
- attr_reader :absolute2, :dir2, :dir_strict2, :base2, :fname2, :name2, :short2, :ext2, :fext2
210
+ attr_reader :absolute2, :dir2, :dir_strict2, :base2, :fname2, :name2, :short2, :ext2, :fext2, :rel, :rea
211
+ attr_reader :options
211
212
 
213
+ # @param [Hash] o option
214
+ # @option o [String] rel relative path
215
+ # @option o [String] base_dir
212
216
  # @param [String, #path] path
213
- def initialize(path)
214
- # convert ~ to ENV["HOME"]
217
+ def initialize(path, o={})
215
218
  @path2 = Pa.get(path)
219
+ # convert ~ to ENV["HOME"]
216
220
  @path2.sub!(/^~/, ENV["HOME"]) if @path2 # nil
221
+ @options = o
222
+
223
+ @rel = o[:rel] || ""
224
+ @base_dir = o[:base_dir]
217
225
 
218
226
  initialize_variables
219
227
  end
@@ -223,8 +231,34 @@ class Pa
223
231
  end
224
232
  include chainable
225
233
 
234
+ def rel
235
+ raise Error, "don't have a :rel option" unless rel?
236
+
237
+ @rel ||= options[:rel]
238
+ end
239
+
240
+ def base_dir
241
+ raise Error, "don't have a :base_dir option" unless base_dir?
242
+
243
+ @base_dir ||= options[:base_dir]
244
+ end
245
+
246
+ def rea
247
+ raise Error, "don't have a :base_dir option" unless base_dir?
248
+
249
+ @rea ||= File.join(options[:base_dir], path)
250
+ end
251
+
252
+ def rel?
253
+ options.has_key?(:rel)
254
+ end
255
+
256
+ def base_dir?
257
+ options.has_key?(:base_dir)
258
+ end
259
+
226
260
  def absolute2
227
- @absolute2 ||= File.absolute_path(path)
261
+ @absolute2 ||= File.absolute_path(options[:base_dir] ? rea : path)
228
262
  end
229
263
 
230
264
  # => ".", "..", "/", "c:"
data/lib/pa/cmd.rb CHANGED
@@ -93,7 +93,7 @@ class Pa
93
93
  # @overload touch(*paths, o={})
94
94
  # @param [String] *paths
95
95
  # @param [Hash] o option
96
- # @option o [Fixnum,String] :mode
96
+ # @option o [Fixnum,String] :mode (0664)
97
97
  # @option o [Boolean] :mkdir auto mkdir if path contained directory not exists.
98
98
  # @option o [Boolean] :force
99
99
  # @option o [Boolean] :verbose
@@ -119,7 +119,7 @@ class Pa
119
119
  # @overload mkdir(*paths, o={})
120
120
  # @param [String, Pa] *paths
121
121
  # @param [Hash] o option
122
- # @option o [Fixnum] :mode
122
+ # @option o [Fixnum] :mode (0775)
123
123
  # @option o [Boolean] :force
124
124
  # @option o [Boolean] :verbose
125
125
  # @return [nil]
@@ -308,6 +308,8 @@ class Pa
308
308
  # yield # use yield to do the actuactal cp work
309
309
  # end
310
310
  #
311
+ # default: preverse mode, not owner.
312
+ #
311
313
  # @overload cp(src_s, dest, o)
312
314
  # @param [Array<String>, String] src_s support globbing
313
315
  # @param [String,Pa] dest
@@ -460,7 +462,7 @@ class Pa
460
462
  end
461
463
 
462
464
  def _mkdir(paths, o)
463
- o[:mode] ||= 0744
465
+ o[:mode] ||= 0775
464
466
  paths.map!{|v|get(v)}
465
467
  paths.each {|p|
466
468
  puts "mkdir #{p}" if o[:verbose]
data/lib/pa/directory.rb CHANGED
@@ -106,50 +106,60 @@ class Pa
106
106
  # @prarm [Hash] o
107
107
  # @option o [Boolean] :dot (true) include dot file
108
108
  # @option o [Boolean] :backup (true) include backup file
109
- # @option o [Boolean] :absolute (false) return absolute path
110
109
  # @option o [Boolean] :error (false) yield(pa, err) instead of raise Errno::EPERM when Dir.open(dir)
110
+ # @option o [Boolean] :file (false) return path and not raise Errno:ENOTDIR if path is a file.
111
+ # @option o [String,Pa] :base_dir (nil) base directory.
111
112
  # @return [Enumerator<String>]
112
- # @overload each(path=".", o={})
113
+ # @overload each(path=".", o={}){|path, abs, fname, err, [rea]|}
113
114
  # @yieldparam [String] path
115
+ # @yieldparam [String] abs absolute path
116
+ # @yieldparam [String] fname a basename
117
+ # @yieldparam [String] err error
118
+ # @yieldparam [String] rea real relative path with o[:base_dir]
114
119
  # @return [nil]
115
120
  def each2(*args, &blk)
116
121
  return Pa.to_enum(:each2, *args) unless blk
117
122
 
118
- (path,), o = Util.extract_options(args)
123
+ (dir,), o = Util.extract_options(args)
124
+ dir = dir ? get(dir) : "."
119
125
  o = {dot: true, backup: true}.merge(o)
120
126
 
121
- path = path ? get(path) : "."
122
- raise Errno::ENOENT, "`#{path}' doesn't exists." unless File.exists?(path)
123
- raise Errno::ENOTDIR, "`#{path}' not a directoy." unless File.directory?(path)
127
+ rea_dir = o[:base_dir] ? File.join(get(o[:base_dir]), dir) : dir
128
+ raise Errno::ENOENT, "`#{rea_dir}' doesn't exists." unless File.exists?(rea_dir)
129
+
130
+ if not File.directory?(rea_dir)
131
+ if o[:file]
132
+ rea_path = rea_dir
133
+ blk.call dir, File.absolute_path(rea_path), File.basename(rea_path), nil, rea_path
134
+ return
135
+ else
136
+ raise Errno::ENOTDIR, "`#{rea_dir}' is not a directoy."
137
+ end
138
+ end
124
139
 
125
140
  begin
126
- dir = Dir.open(path)
141
+ d = Dir.open(rea_dir)
127
142
  rescue Errno::EPERM => err
128
143
  end
129
144
  raise err if err and !o[:error]
130
145
 
131
- while (entry=dir.read)
146
+ while (entry=d.read)
132
147
  next if %w(. ..).include? entry
133
148
  next if not o[:dot] and entry=~/^\./
134
149
  next if not o[:backup] and entry=~/~$/
135
150
 
136
- p = if o[:absolute]
137
- File.absolute_path(File.join(path, entry))
138
- else
139
- # => "foo" not "./foo"
140
- path=="." ? entry : File.join(path, entry)
141
- end
142
-
143
- blk.call p, err
144
- end
151
+ path = Util.join(dir, entry)
152
+ rea_path = Util.join(rea_dir, entry)
153
+ blk.call path, File.absolute_path(rea_path), File.basename(rea_path), err, rea_path
145
154
  end
155
+ end
146
156
 
147
157
  def each(*args, &blk)
148
158
  return Pa.to_enum(:each, *args) unless blk
149
159
 
150
160
  args, o = Util.extract_options(args)
151
- each2(*args, o) { |path, err|
152
- blk.call Pa(path), err
161
+ each2(*args, o) { |path, abs, fname, err, rea|
162
+ blk.call Pa(path), abs, fname, err, rea
153
163
  }
154
164
  end
155
165
 
@@ -160,27 +170,29 @@ class Pa
160
170
  # * each2_r(){path, relative, err}
161
171
  #
162
172
  # @overload each2_r(path=".", o={})
173
+ # @option o [String, Pa] :base_dir (nil) base directory.
163
174
  # @return [Enumerator<String>]
164
175
  # @overload each2_r(path=".", o={})
165
176
  # @yieldparam [String] path
166
- # @yieldparam [String] relative relative path
177
+ # @yieldparam [String] abs
178
+ # @yieldparam [String] rel/rea relative path
167
179
  # @yieldparam [Errno::ENOENT,Errno::EPERM] err
168
180
  # @return [nil]
169
181
  def each2_r(*args, &blk)
170
182
  return Pa.to_enum(:each2_r, *args) if not blk
171
183
 
172
- (path,), o = Util.extract_options(args)
173
- path ||= "."
184
+ (dir,), o = Util.extract_options(args)
185
+ dir ||= "."
174
186
 
175
- _each2_r(path, "", o, &blk)
187
+ _each2_r(dir, "", o, &blk)
176
188
  end
177
189
 
178
190
  def each_r(*args, &blk)
179
191
  return Pa.to_enum(:each_r, *args) if not blk
180
192
 
181
193
  args, o = Util.extract_options(args)
182
- each2_r *args, o do |path, err|
183
- blk.call Pa(path), err
194
+ each2_r *args, o do |path, abs, rel, err, rea|
195
+ blk.call Pa(path), abs, rel, err, rea
184
196
  end
185
197
  end
186
198
 
@@ -192,81 +204,120 @@ class Pa
192
204
  # @Example
193
205
  # Pa.ls2(".") {|path, fname| Pa.directory?(path)} # list only directories
194
206
  #
195
- # @overload ls2(path=".", o={})
207
+ # @overload ls2(*dirs, o={})
208
+ # @option o [Boolean] :absolute (false) return absolute path instead.
209
+ # @option o [Boolean] :include (false) return "<path>/foo"
196
210
  # @return [Array<String>]
197
- # @overload ls2(path=".", o={})
211
+ # @overload ls2(*dirs, o={}){|path, abs, fname|}
198
212
  # @yieldparam [String] path
213
+ # @yieldparam [String] abs
199
214
  # @yieldparam [String] fname
200
215
  # @return [Array<String>]
201
216
  def ls2(*args, &blk)
202
- (path,), o = Util.extract_options(args)
203
- path ||= "."
217
+ dirs, o = Util.extract_options(args)
218
+ dirs << "." if dirs.empty?
204
219
  blk ||= proc { true }
205
220
 
206
- each2(path, o).with_object([]) { |(path),m|
207
- base = File.basename(path)
208
-
209
- blk_ret = blk.call(path, base)
210
- file = o[:absolute] ? path : base
211
- m << file if blk_ret
212
- }
213
- end
214
-
215
- # @overload ls(path=".", o={})
216
- # @return [Array<Pa>]
217
- # @overload ls(path=".", o={})
218
- # @yieldparam [Pa] path
219
- # @yieldparam [String] fname
220
- # @return [Array<String>]
221
- def ls(*args, &blk)
222
- (path,), o = Util.extract_options(args)
223
- path ||= "."
224
- blk ||= proc { true }
221
+ dirs.each.with_object([]) { |dir, m|
222
+ each2(dir, o) { |path, abs, fname, err, rea|
225
223
 
226
- each2(path, o).with_object([]) { |(path), m|
227
- base = File.basename(path)
224
+ view_path = if o[:absolute]
225
+ abs
226
+ elsif o[:include]
227
+ path
228
+ else
229
+ fname
230
+ end
228
231
 
229
- blk_ret = blk.call(Pa(path), base)
230
- file = o[:absolute] ? path : base
231
- m << Pa(file) if blk_ret
232
+ m << view_path if blk.call(path, abs, fname, err, rea)
233
+ }
232
234
  }
233
235
  end
234
236
 
235
237
  # ls2 with recursive
236
238
  # @see ls2
237
239
  #
238
- # @overload ls2_r(path=".", o={})
240
+ # @overload ls2_r(*dirs, o={})
239
241
  # @return [Array<String>]
240
- # @overload ls2_r(path=".", o={})
241
- # @yieldparam [Pa] pa
242
+ # @overload ls2_r(*dirs, o={}){|pa, abs, rel, err, [rea]|
243
+ # @yieldparam [String] path
244
+ # @yieldparam [String] abs
242
245
  # @yieldparam [String] rel
246
+ # @yieldparam [Exception] err
247
+ # @yieldparam [String] rea
243
248
  # @return [Array<String>]
244
249
  def ls2_r(*args, &blk)
245
- blk ||= proc {true}
246
- each2_r(*args).with_object([]) { |(path,rel),m|
247
- m<<rel if blk.call(path, rel)
250
+ dirs, o = Util.extract_options(args)
251
+ dirs << "." if dirs.empty?
252
+ blk ||= proc { true }
253
+
254
+ dirs.each.with_object([]) { |dir, m|
255
+ each2_r(dir, o) { |path, abs, rel, err, rea|
256
+ view_path = if o[:absolute]
257
+ abs
258
+ elsif o[:include]
259
+ path
260
+ else
261
+ rel
262
+ end
263
+
264
+ m << view_path if blk.call(path, abs, rel, err, rea)
265
+ }
248
266
  }
249
267
  end
250
268
 
269
+ # @overload ls(*paths, o={})
270
+ # @params [Array] paths (["."])
271
+ # @return [Array<Pa>]
272
+ # @overload ls(*paths, o={}){|pa, abs, fname, err, [rea]|}
273
+ # @yieldparam [Pa] pa
274
+ # @yieldparam [String] abs
275
+ # @yieldparam [String] fname
276
+ # @yieldparam [Exception] err
277
+ # @yieldparam [String] rea
278
+ # @return [Array<String>]
279
+ def ls(*args, &blk)
280
+ dirs, o = Util.extract_options(args)
281
+ blk ||= proc { true }
282
+ ret = []
283
+
284
+ ls2(*dirs, o) { |path, abs, fname, err, rea|
285
+ view_path = if o[:absolute]
286
+ abs
287
+ elsif o[:include]
288
+ path
289
+ else
290
+ fname
291
+ end
292
+
293
+ ret << Pa(view_path) if blk.call(Pa(path), abs, fname, err, rea)
294
+ }
295
+
296
+ ret
297
+ end
298
+
251
299
  def ls_r(*args, &blk)
252
300
  args, o = Util.extract_options(args)
253
301
  ls2_r(*args, o, &blk)
254
302
  end
255
303
 
256
304
  private
305
+
306
+ # I'm rescurive.
257
307
  # @param [String] path
258
308
  def _each2_r(path, relative, o, &blk)
309
+ relative = relative == "" ? nil : relative
259
310
  o.merge!(error: true)
260
311
 
261
- Pa.each2(path, o) do |path2, err|
312
+ Pa.each2(path, o) do |path2, abs, fname, err, rea|
262
313
  # fix for File.join with empty string
263
- joins=[ relative=="" ? nil : relative, File.basename(path2)].compact
264
- relative2 = File.join(*joins)
314
+ rel = File.join(*[relative, File.basename(path2)].compact)
315
+ rea = o[:base_dir] ? File.join(get(o[:base_dir]), rel) : rel
265
316
 
266
- blk.call path2, relative2, err
317
+ blk.call path2, abs, rel, err, rea
267
318
 
268
- if File.directory?(path2)
269
- _each2_r(path2, relative2, o, &blk)
319
+ if File.directory?(abs)
320
+ _each2_r(path2, rel, o, &blk)
270
321
  end
271
322
  end
272
323
  end
data/lib/pa/path.rb CHANGED
@@ -175,4 +175,3 @@ class Pa
175
175
  end
176
176
  end
177
177
  end
178
-
data/lib/pa/util.rb CHANGED
@@ -31,6 +31,11 @@ class Pa
31
31
  def win32?
32
32
  RUBY_PLATFORM =~ /mingw32|mswin/
33
33
  end
34
+
35
+ # join(".", "foo") => "foo" not "./foo"
36
+ def join(dir, *names)
37
+ dir == "." ? File.join(*names) : File.join(dir, *names)
38
+ end
34
39
  end
35
40
  end
36
41
  end
data/lib/pa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Pa
2
- VERSION = "1.2.1"
2
+ VERSION = "1.2.2"
3
3
  end
data/pa.gemspec CHANGED
@@ -1,7 +1,4 @@
1
- $: << File.expand_path("../lib", __FILE__)
2
- require "pa/version"
3
-
4
- pd Pa::VERSION
1
+ Kernel.load File.expand_path("../lib/pa/version.rb", __FILE__)
5
2
 
6
3
  Gem::Specification.new do |s|
7
4
  s.name = "pa"
@@ -67,10 +67,19 @@ describe Pa do
67
67
  FileUtils.touch %w[filea .filea filea~ dira/dirb/b]
68
68
  end
69
69
 
70
- it "works" do
71
- ret = []
72
- Pa.each2{|pa| ret << pa}
73
- ret.sort.should == %w(.filea dira filea filea~)
70
+ it "(:base_dir => x) to build clean path" do
71
+ Pa.each2("dira").to_a.map{|v|v[0]}.should == %w[dira/dirb]
72
+ Pa.each2("dirb", :base_dir => "dira").to_a.map{|v|v[0]}.should == %w[dirb/b]
73
+ Pa.each2("dirb", :base_dir => Pa("dira")).to_a.map{|v|v[0]}.should == %w[dirb/b]
74
+ end
75
+
76
+ it "yields {|path, abs, fname, err, rea|}" do
77
+ Pa.each2("dira").to_a.sort[0].should == ["dira/dirb", File.join(Dir.pwd, "dira/dirb"), "dirb", nil, "dira/dirb"]
78
+ Pa.each2("dirb", :base_dir => "dira").to_a.sort[0].should == ["dirb/b", File.join(Dir.pwd, "dira/dirb/b"), "b", nil, "dira/dirb/b"]
79
+ end
80
+
81
+ it "list a directory" do
82
+ Pa.each2.to_a.map{|v|v[0]}.sort.should == %w[.filea dira filea filea~]
74
83
  end
75
84
 
76
85
  it "return a Enumerator when call without block" do
@@ -85,29 +94,29 @@ describe Pa do
85
94
  lambda { Pa.each2("filea"){} }.should raise_error(Errno::ENOTDIR)
86
95
  end
87
96
 
88
- it "each2(.) return 'foo' not '.foo'" do
89
- Pa.each2.with_object([]){|(pa),m| m<<pa}.sort.should == %w(.filea dira filea filea~)
90
- end
97
+ it "(:file => true) return path if path is a file." do
98
+ Pa.each2("filea", :file => true).to_a[0][0].should == "filea"
99
+ end
91
100
 
92
- it ".each2 with :dot => false -> list all files except dot file" do
93
- Pa.each2(:dot => false).with_object([]){|(pa),m|m<<pa}.sort.should == %w[dira filea filea~]
101
+ it "(.) return 'foo' not '.foo'" do
102
+ Pa.each2.to_a.map{|v|v[0]}.sort.should == %w(.filea dira filea filea~)
94
103
  end
95
104
 
96
- it ".each2 with :backup => false" do
97
- Pa.each2(:backup => false).with_object([]){|(pa),m|m<<pa}.sort.should == %w[.filea dira filea]
98
- end
105
+ it "with :dot => false -> list all files except dot file" do
106
+ Pa.each2(:dot => false).to_a.map{|v|v[0]}.sort.should == %w[dira filea filea~]
107
+ end
99
108
 
100
- it ".each2 with :absolute => true" do
101
- b = %w[.filea dira filea filea~].map{|v| File.join(Dir.pwd, v)}
102
- Pa.each2(:absolute => true).with_object([]){|(pa),m|m<<pa}.sort.should == b
109
+ it "with :backup => false" do
110
+ Pa.each2(:backup => false).to_a.map{|v|v[0]}.sort.should == %w[.filea dira filea]
103
111
  end
104
112
 
105
- it "each returns Pa" do
113
+ it "returns Pa" do
106
114
  Pa.each { |pa|
107
115
  pa.should be_an_instance_of Pa
108
116
  break
109
117
  }
110
118
  end
119
+
111
120
  end
112
121
 
113
122
  describe ".each" do
@@ -141,15 +150,30 @@ describe Pa do
141
150
  FileUtils.touch %w[filea .filea filea~ dira/dirb/b]
142
151
  end
143
152
 
144
- it "each2_r -> Enumerator" do
153
+ it "=> Enumerator when call without any arguments" do
145
154
  Pa.each2_r.should be_an_instance_of Enumerator
146
- Pa.each2_r.with_object([]){|(pa,r),m|m<<r}.sort.should == %w[.filea dira dira/dirb dira/dirb/b filea filea~]
147
155
  end
148
156
 
149
- it "with :absolute => true" do
150
- Pa.each2_r(:absolute => true).to_a[0][0].should == File.join(Dir.pwd, "filea~")
157
+ it "list directory recursive" do
158
+ Pa.each2_r.map{|v,|v}.sort.should == %w[.filea dira dira/dirb dira/dirb/b filea filea~]
159
+ end
160
+
161
+ it "(:base_dir => x) to build clean path" do
162
+ Pa.each2_r("dira").to_a.map{|v|v[0]}.should == %w[dira/dirb dira/dirb/b]
163
+ Pa.each2_r(".", :base_dir => "dira").to_a.map{|v|v[0]}.should == %w[dirb dirb/b]
164
+ Pa.each2_r(".", :base_dir => Pa("dira")).to_a.map{|v|v[0]}.should == %w[dirb dirb/b]
151
165
  end
166
+ end
152
167
 
168
+ describe ".each_r" do
169
+ # filea .filea filea~
170
+ # dira/
171
+ # dirb/
172
+ # b
173
+ before :each do
174
+ FileUtils.mkdir_p %w[dira/dirb]
175
+ FileUtils.touch %w[filea .filea filea~ dira/dirb/b]
176
+ end
153
177
 
154
178
  it "#each_r returns Pa" do
155
179
  Pa.each_r { |pa|
@@ -163,22 +187,77 @@ describe Pa do
163
187
  # filea
164
188
  # dira/
165
189
  # fileb
190
+ # dirb/
191
+ # dirb1/
192
+ # fileb1
166
193
  before :each do
167
- FileUtils.mkdir_p %w[dira]
168
- FileUtils.touch %w[filea dira/fileb]
194
+ FileUtils.mkdir_p %w[dira dirb/dirb1]
195
+ FileUtils.touch %w[filea dira/fileb dirb/dirb1/fileb1]
169
196
  end
170
197
 
171
198
  it "works" do
172
- Pa.ls2.should == %w[filea dira]
173
- Pa.ls2(Dir.pwd).should == %w[filea dira]
199
+ Pa.ls2.should == %w[filea dira dirb]
200
+ Pa.ls2("dira").should == %w[fileb]
174
201
  end
175
202
 
176
- it "with :absolute => true" do
177
- Pa.ls2(:absolute => true).should == %w[filea dira].map{|v| File.join(Dir.pwd, v)}
203
+ it "list multi paths" do
204
+ Pa.ls2("dira", "dirb").should == %w[fileb dirb1]
178
205
  end
179
206
 
180
- it "call a block" do
181
- Pa.ls2 { |p, fn| File.directory?(p) }.should == ["dira"]
207
+ it "(:absolute => true) returns absolute path" do
208
+ Pa.ls2("dira", :absolute => true).should == [File.join(Dir.pwd, "dira/fileb")]
209
+ end
210
+
211
+ it %~(:include => true) returns "<path>/foo"~ do
212
+ Pa.ls2("dira", :include => true).should == %w[dira/fileb]
213
+ end
214
+
215
+ it "(:base_dir => x)" do
216
+ Pa.ls2("dirb1", :base_dir => "dirb").should == %w[fileb1]
217
+ Pa.ls2("dirb1", :base_dir => "dirb", :include => true).should == %w[dirb1/fileb1]
218
+ end
219
+
220
+ it "call a block returns filtered result" do
221
+ Pa.ls2 {|p| File.directory?(p)}.should == %w[dira dirb]
222
+ end
223
+ end
224
+
225
+ describe ".ls2_r" do
226
+ # filea
227
+ # dira/
228
+ # fileb
229
+ # dirb/
230
+ # dirb1/
231
+ # fileb1
232
+ before :each do
233
+ FileUtils.mkdir_p %w[dira dirb/dirb1]
234
+ FileUtils.touch %w[filea dira/fileb dirb/dirb1/fileb1]
235
+ end
236
+
237
+ it "works" do
238
+ Pa.ls2_r.should == %w[filea dira dira/fileb dirb dirb/dirb1 dirb/dirb1/fileb1]
239
+ Pa.ls2_r("dirb").should == %w[dirb1 dirb1/fileb1]
240
+ end
241
+
242
+ it "list multi paths" do
243
+ Pa.ls2_r("dira", "dirb").should == %w[fileb dirb1 dirb1/fileb1]
244
+ end
245
+
246
+ it "(:absolute => true) returns absolute path" do
247
+ Pa.ls2_r("dirb", :absolute => true).should == %w[dirb/dirb1 dirb/dirb1/fileb1].map{|v|File.join(Dir.pwd, v)}
248
+ end
249
+
250
+ it %~(:include => true) returns "<path>/foo"~ do
251
+ Pa.ls2_r("dirb", :include => true).should == %w[dirb/dirb1 dirb/dirb1/fileb1]
252
+ end
253
+
254
+ it "(:base_dir => x)" do
255
+ Pa.ls2_r("dirb1", :base_dir => "dirb").should == %w[fileb1]
256
+ Pa.ls2_r("dirb1", :base_dir => "dirb", :include => true).should == %w[dirb1/fileb1]
257
+ end
258
+
259
+ it "call a block returns filtered result" do
260
+ Pa.ls2_r {|p, fn| File.directory?(p)}.should == %w[dira dirb dirb/dirb1]
182
261
  end
183
262
  end
184
263
 
@@ -192,16 +271,20 @@ describe Pa do
192
271
  end
193
272
 
194
273
  it "works" do
195
- Pa.ls.should == %w[filea dira].map{|v| Pa(v)}
196
- Pa.ls(Dir.pwd).should == %w[filea dira].map{|v| Pa(v)}
274
+ Pa.ls.should == %w[filea dira].map{|v|Pa(v)}
275
+ Pa.ls(Dir.pwd).should == %w[filea dira].map{|v|Pa(v)}
197
276
  end
198
277
 
278
+ it "list multi paths" do
279
+ Pa.ls(".", "dira").should == %w[filea dira fileb].map{|v|Pa(v)}
280
+ end
281
+
199
282
  it "with :absolute => true" do
200
- Pa.ls(:absolute => true).should == %w[filea dira].map{|v| Pa(File.join(Dir.pwd, v))}
283
+ Pa.ls(:absolute => true).should == %w[filea dira].map{|v|Pa(File.join(Dir.pwd, v))}
201
284
  end
202
285
 
203
286
  it "call a block" do
204
- Pa.ls{|p, fn| p.directory? }.should == %w[dira].map{|v| Pa(v)}
287
+ Pa.ls{|p, fn| p.directory? }.should == %w[dira].map{|v|Pa(v)}
205
288
  end
206
289
  end
207
290
 
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ Util = Pa::Util
4
+
5
+ describe Util do
6
+ describe ".join" do
7
+ it %~join(".", "foo") to "foo", not "./foo"~ do
8
+ Util.join(".", "a", "b").should == "a/b"
9
+ Util.join("a", "b", "c").should == "a/b/c"
10
+ end
11
+ end
12
+ end
13
+
data/spec/pa_spec.rb CHANGED
@@ -265,5 +265,4 @@ describe Pa do
265
265
  Pa.new("foo").build.should == Pa("foo")
266
266
  end
267
267
  end
268
-
269
268
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pa
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.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: 2012-02-02 00:00:00.000000000 Z
12
+ date: 2012-02-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'a path library for Ruby
15
15
 
@@ -39,6 +39,7 @@ files:
39
39
  - spec/pa/directory_spec.rb
40
40
  - spec/pa/path_spec.rb
41
41
  - spec/pa/state_spec.rb
42
+ - spec/pa/util_spec.rb
42
43
  - spec/pa_spec.rb
43
44
  - spec/spec_helper.rb
44
45
  homepage: http://github.com/GutenYe/pa