pa 1.1.4 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/pa/path.rb CHANGED
@@ -12,31 +12,11 @@ attribute absolute and dir return String, method absolute_path(), dirname() retu
12
12
 
13
13
  =end
14
14
  class Pa
15
- NAME_EXT_PAT = /^(.+?)(?:\.([^.]+))?$/
16
15
  module Path
17
16
  extend Util::Concern
18
17
 
19
18
  module ClassMethods
20
- # get path of an object.
21
- #
22
- # return obj#path if object has a 'path' instance method
23
- #
24
- # nil -> nil
25
- #
26
- #
27
- # @param [String,#path] obj
28
- # @return [String,nil] path
29
- def get(obj)
30
- if obj.respond_to?(:path)
31
- obj.path
32
- elsif String === obj
33
- obj
34
- elsif obj.nil?
35
- nil
36
- else
37
- raise ArgumentError, "Pa.get() not support type -- #{obj.inspect}(#{obj.class})"
38
- end
39
- end
19
+ DELEGATE_METHODS = [:pwd, :dir, :absolute, :expand, :real, :parent]
40
20
 
41
21
  # return current work directory
42
22
  # @return [String] path
@@ -69,7 +49,6 @@ class Pa
69
49
  end
70
50
  end # def dsymlink?
71
51
 
72
-
73
52
  def dir2(path)
74
53
  File.dirname(path)
75
54
  end
@@ -88,13 +67,23 @@ class Pa
88
67
  def base2(name, o={})
89
68
  name = File.basename(get(name))
90
69
  if o[:ext]
91
- name, ext = name.match(NAME_EXT_PAT).captures
70
+ name, ext = name.match(/^(.+?)(?:\.([^.]+))?$/).captures
92
71
  [ name, (ext || "")]
93
72
  else
94
73
  name
95
74
  end
96
75
  end
97
76
 
77
+ def base(*args, &blk)
78
+ rst = base2(*args, &blk)
79
+
80
+ if Array===rst
81
+ [ Pa(rst[0]), rst[1] ]
82
+ else
83
+ rst
84
+ end
85
+ end
86
+
98
87
  # ext of a path
99
88
  #
100
89
  # @example
@@ -108,6 +97,8 @@ class Pa
108
97
  ext
109
98
  end
110
99
 
100
+ alias ext ext2
101
+
111
102
  # alias from File.absolute_path
112
103
  # @param [String,Pa] path
113
104
  # @return [String]
@@ -131,6 +122,8 @@ class Pa
131
122
  get(path).sub /^#{Regexp.escape(ENV["HOME"])}/, "~"
132
123
  end
133
124
 
125
+ alias shorten shorten2
126
+
134
127
  # real path
135
128
  def real2(path)
136
129
  File.realpath get(path)
@@ -148,171 +141,36 @@ class Pa
148
141
  end
149
142
  path
150
143
  end
151
-
152
- # split path
153
- #
154
- # @example
155
- # path="/home/a/file"
156
- # split2(path) #=> "/home/a", "file"
157
- # split2(path, :all => true) #=> "/", "home", "a", "file"
158
- #
159
- # @param [String,Pa] name
160
- # @param [Hash] o option
161
- # @option o [Boolean] :all split all parts
162
- # @return [Array<String>]
163
- def split2(name, o={})
164
- dir, fname = File.split(get(name))
165
- ret = Util.wrap_array(File.basename(fname))
166
-
167
- if o[:all]
168
- loop do
169
- dir1, fname = File.split(dir)
170
- break if dir1 == dir
171
- ret.unshift fname
172
- dir = dir1
173
- end
174
- end
175
- ret.unshift dir
176
- ret
177
- end
178
-
179
- # special case
180
- def split(*args)
181
- dir, *names = split2(*args)
182
- [ Pa(dir), *names]
183
- end
184
144
 
185
- # join paths, skip nil and empty string.
186
- #
187
- # @param [*Array<String>] *paths
188
- # @return [String]
189
- def join2(*paths)
190
- paths.map!{|v|get(v)}
191
-
192
- # skip nil
193
- paths.compact!
145
+ DELEGATE_METHODS.each { |mth|
146
+ mth2 = "#{mth}2"
194
147
 
195
- # skip empty string
196
- paths.delete("")
197
-
198
- File.join(*paths)
199
- end
148
+ class_eval <<-EOF
149
+ def #{mth}(*args, &blk)
150
+ Pa(Pa.#{mth2}(*args, &blk))
151
+ end
152
+ EOF
153
+ }
200
154
  end
201
155
 
202
156
  module InstanceMethods
203
- # @return [String]
204
- attr_reader :absolute2, :dir2, :base2, :name2, :short2
205
-
206
- # @return [String] ext "", "ogg"
207
- attr_reader :ext2
208
-
209
- # @return [String] ext "", ".ogg"
210
- attr_reader :fext2
211
-
212
- def initialize_variables
213
- super
214
- @absolute2 = File.absolute_path(@path)
215
- @dir2 = File.dirname(@path)
216
- @base2 = File.basename(@path)
217
- @name2, @ext2 = @base2.match(NAME_EXT_PAT).captures
218
- @ext2 ||= ""
219
- @fext2 = @ext2.empty? ? "" : "."+@ext2
220
- end
221
-
222
- alias a2 absolute2
223
- alias d2 dir2
224
- alias b2 base2
225
- alias n2 name2
226
- alias fname2 base2
227
- alias fn2 fname2
228
- alias e2 ext2
229
- alias fe2 fext2
230
-
231
- # fix name,2 => String
232
- alias base base2
233
- alias fname fname2
234
- alias name name2
235
- alias ext ext2
236
- alias fext fext2
237
-
238
- alias b base
239
- alias fn fname
240
- alias n name
241
- alias e ext
242
- alias fe fext
243
-
244
- def short2
245
- @short2 ||= Pa.shorten2(@path)
246
- end
247
-
248
- # add string to path
249
- #
250
- # @example
251
- # pa = Pa('/home/foo/a.txt')
252
- # pa+'~' #=> new Pa('/home/foo/a.txt~')
253
- #
254
- # @param [String] str
255
- # @return [Pa]
256
- def +(str)
257
- Pa(path+str)
258
- end
259
-
260
- # @return [String]
261
- def sub2(*args, &blk)
262
- path.sub(*args, &blk)
263
- end
264
-
265
- # @return [String]
266
- def gsub2(*args, &blk)
267
- path.gsub(*args, &blk)
268
- end
269
-
270
- # @return [Pa]
271
- def sub(*args, &blk)
272
- Pa(sub2(*args, &blk))
273
- end
274
-
275
- # @return [Pa]
276
- def gsub(*args, &blk)
277
- Pa(gsub2(*args, &blk))
278
- end
279
-
280
- # @return [Pa]
281
- def sub!(*args,&blk)
282
- self.replace path.sub(*args,&blk)
283
- end
284
-
285
- # @return [Pa]
286
- def gsub!(*args,&blk)
287
- self.replace path.gsub(*args,&blk)
288
- end
289
-
290
- # @return [MatchData]
291
- def match(*args,&blk)
292
- path.match(*args,&blk)
293
- end
294
-
295
- # @return [Boolean]
296
- def start_with?(*args)
297
- path.start_with?(*args)
298
- end
299
-
300
- # @return [Boolean]
301
- def end_with?(*args)
302
- path.end_with?(*args)
303
- end
157
+ DELEGATE_METHODS2 = [ :parent2 ]
158
+ DELEGATE_METHODS = [ :parent]
304
159
 
305
- def =~(regexp)
306
- path =~ regexp
160
+ DELEGATE_METHODS2.each do |mth2|
161
+ class_eval <<-EOF
162
+ def #{mth2}(*args, &blk)
163
+ Pa.#{mth2}(path, *args, &blk)
164
+ end
165
+ EOF
307
166
  end
308
167
 
309
- def ==(other)
310
- case other
311
- when Pa
312
- self.path == other.path
313
- else
314
- false
315
- end
168
+ DELEGATE_METHODS.each do |mth|
169
+ class_eval <<-EOF
170
+ def #{mth}(*args, &blk)
171
+ Pa(#{mth}2(*args, &blk))
172
+ end
173
+ EOF
316
174
  end
317
175
  end
318
176
  end
data/lib/pa/state.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  class Pa
2
2
  module State
3
3
  extend Util::Concern
4
- module ClassMethods
5
- # goes to File
6
- FILE_DELEGATED_METHODS = [ :exists?, :atime, :ctime, :mtime, :stat, :lstat, :size, :zero?, :executable?, :executable_real?, :world_executable?, :readable?, :readable_real?, :world_readalbe?, :writeable?, :writeable_real?, :world_writeable?, :directory?, :file?, :blockdev?, :chardev?, :piple?, :socket?, :symlink?, :owned?, :grpowned?, :setgid?, :setuid?, :stricky?, :identical? ]
7
4
 
5
+ FILE_DELEGATED_METHODS = [ :exists?, :atime, :ctime, :mtime, :stat, :lstat, :size, :zero?, :executable?, :executable_real?, :world_executable?, :readable?, :readable_real?, :world_readalbe?, :writeable?, :writeable_real?, :world_writeable?, :directory?, :file?, :blockdev?, :chardev?, :piple?, :socket?, :symlink?, :owned?, :grpowned?, :setgid?, :setuid?, :stricky?, :identical? ]
6
+
7
+ module ClassMethods
8
8
  # delegated from File
9
9
  FILE_DELEGATED_METHODS.each { |name|
10
10
  module_eval <<-METHOD, __FILE__, __LINE__
@@ -64,7 +64,6 @@ class Pa
64
64
  end
65
65
  end # def type
66
66
 
67
-
68
67
  # is path a mountpoint?
69
68
  #
70
69
  # @param[String] path
@@ -82,6 +81,15 @@ class Pa
82
81
  end
83
82
 
84
83
  module InstanceMethods
84
+ # delegated from File
85
+ FILE_DELEGATED_METHODS.each { |name|
86
+ module_eval <<-METHOD, __FILE__, __LINE__
87
+ def #{name}(*args)
88
+ File.#{name}(*args, path)
89
+ end
90
+ METHOD
91
+ }
92
+
85
93
  def chmod(mode)
86
94
  File.chmod(mode, path)
87
95
  end
data/lib/pa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Pa
2
- VERSION = "1.1.4"
2
+ VERSION = "1.2.0"
3
3
  end