pa 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,41 +1,138 @@
1
+ require "rbconfig"
2
+
1
3
  class Pa
4
+ # In order to reduce the dependencies, this Util class contains some util functions.
2
5
  class Util
3
6
  module Concern
4
7
  def included(base)
5
8
  base.extend const_get(:ClassMethods) if const_defined?(:ClassMethods)
6
- base.send :include, const_get(:InstanceMethods) if const_defined?(:InstanceMethods)
7
9
  end
8
10
  end
9
11
 
10
12
  class << self
11
- # extract options
12
- # @see extract_options!
13
+ # Extracts options from a set of arguments.
14
+ #
13
15
  # @example
14
- # def mkdir(*args)
15
- # paths, o = args.extract_options
16
- # end
16
+ #
17
+ # dirs, o = Util.extract_options(["foo", "bar", {a: 1}], b: 2)
18
+ # -> ["foo", "bar"], {a: 1, b: 2}
19
+ #
20
+ # (dir,) o = Util.extract_options(["foo", {a: 1}])
21
+ # -> "foo", {a: 1}
17
22
  #
18
23
  # @return [Array<Array,Hash>]
19
- def extract_options(ary, default={})
20
- if ary.last.is_a?(Hash) && ary.last.instance_of?(Hash)
21
- [ary[0...-1], ary[-1].merge(default)]
24
+ def extract_options(args, default={})
25
+ if args.last.instance_of?(Hash)
26
+ [args[0...-1], default.merge(args[-1])]
22
27
  else
23
- [ary, default]
28
+ [args, default]
24
29
  end
25
30
  end
26
31
 
27
- def wrap_array(value)
28
- Array === value ? value : [value]
32
+ # Wraps its argument in an array unless it is already an array (or array-like).
33
+ #
34
+ # Specifically:
35
+ #
36
+ # * If the argument is +nil+ an empty list is returned.
37
+ # * Otherwise, if the argument responds to +to_ary+ it is invoked, and its result returned.
38
+ # * Otherwise, returns an array with the argument as its single element.
39
+ #
40
+ # Array.wrap(nil) # => []
41
+ # Array.wrap([1, 2, 3]) # => [1, 2, 3]
42
+ # Array.wrap(0) # => [0]
43
+ #
44
+ # This method is similar in purpose to <tt>Kernel#Array</tt>, but there are some differences:
45
+ #
46
+ # * If the argument responds to +to_ary+ the method is invoked. <tt>Kernel#Array</tt>
47
+ # moves on to try +to_a+ if the returned value is +nil+, but <tt>Array.wrap</tt> returns
48
+ # such a +nil+ right away.
49
+ # * If the returned value from +to_ary+ is neither +nil+ nor an +Array+ object, <tt>Kernel#Array</tt>
50
+ # raises an exception, while <tt>Array.wrap</tt> does not, it just returns the value.
51
+ # * It does not call +to_a+ on the argument, though special-cases +nil+ to return an empty array.
52
+ #
53
+ # The last point is particularly worth comparing for some enumerables:
54
+ #
55
+ # Array(:foo => :bar) # => [[:foo, :bar]]
56
+ # Array.wrap(:foo => :bar) # => [{:foo => :bar}]
57
+ #
58
+ # Array("foo\nbar") # => ["foo\n", "bar"], in Ruby 1.8
59
+ # Array.wrap("foo\nbar") # => ["foo\nbar"]
60
+ #
61
+ # There's also a related idiom that uses the splat operator:
62
+ #
63
+ # [*object]
64
+ #
65
+ # which returns <tt>[nil]</tt> for +nil+, and calls to <tt>Array(object)</tt> otherwise.
66
+ #
67
+ # Thus, in this case the behavior is different for +nil+, and the differences with
68
+ # <tt>Kernel#Array</tt> explained above apply to the rest of +object+s.
69
+ def wrap_array(object)
70
+ if object.nil?
71
+ []
72
+ elsif object.respond_to?(:to_ary)
73
+ object.to_ary || [object]
74
+ else
75
+ [object]
76
+ end
29
77
  end
30
78
 
31
- def win32?
32
- RUBY_PLATFORM =~ /mingw32|mswin/
33
- end
79
+ # Slice a hash to include only the given keys. This is useful for
80
+ # limiting an options hash to valid keys before passing to a method:
81
+ #
82
+ # @example
83
+ #
84
+ # a = {a: 1, b: 2, c: 3}
85
+ # a.slaice(:a, :b) -> {a: 1, b: 2}
86
+ def slice(hash, *keys)
87
+ keys = keys.map! { |key| hash.convert_key(key) } if hash.respond_to?(:convert_key)
88
+ h = hash.class.new
89
+ keys.each { |k| h[k] = hash[k] if hash.has_key?(k) }
90
+ h
91
+ end
34
92
 
35
- # join(".", "foo") => "foo" not "./foo"
36
- def join(dir, *names)
93
+ # different to File.join.
94
+ #
95
+ # @example
96
+ #
97
+ # join_path(".", "foo") -> "foo" not "./foo"
98
+ #
99
+ def join_path(dir, *names)
37
100
  dir == "." ? File.join(*names) : File.join(dir, *names)
38
101
  end
102
+
103
+ def linux?
104
+ RbConfig::CONFIG["host_os"] =~ /linux|cygwin/
105
+ end
106
+
107
+ def mac?
108
+ RbConfig::CONFIG["host_os"] =~ /mac|darwin/
109
+ end
110
+
111
+ def bsd?
112
+ RbConfig::CONFIG["host_os"] =~ /bsd/
113
+ end
114
+
115
+ def windows?
116
+ RbConfig::CONFIG["host_os"] =~ /mswin|mingw/
117
+ end
118
+
119
+ def solaris?
120
+ RbConfig::CONFIG["host_os"] =~ /solaris|sunos/
121
+ end
122
+
123
+ # TODO: who knows what symbian returns?
124
+ def symbian?
125
+ RbConfig::CONFIG["host_os"] =~ /symbian/
126
+ end
127
+
128
+ def posix?
129
+ linux? or mac? or bsd? or solaris? or begin
130
+ fork do end
131
+ true
132
+ rescue NotImplementedError, NoMethodError
133
+ false
134
+ end
135
+ end
39
136
  end
40
137
  end
41
138
  end
@@ -1,3 +1,3 @@
1
1
  class Pa
2
- VERSION = "1.3.0"
2
+ VERSION = "1.3.1"
3
3
  end
data/pa.gemspec CHANGED
@@ -14,5 +14,6 @@ a path library for Ruby
14
14
  s.rubyforge_project = "xx"
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
17
+
17
18
  s.add_dependency "pd"
18
19
  end
data/pa.watchr CHANGED
@@ -14,9 +14,9 @@ Signal.trap('QUIT') do
14
14
  test "spec"
15
15
  end
16
16
 
17
- def test path
18
- cmd = "rspec #{path}"
17
+ def test(path)
18
+ system "clear"
19
+ cmd = "bundle exec rspec #{path}"
19
20
  puts cmd
20
21
  system cmd
21
22
  end
22
-
File without changes
@@ -2,9 +2,7 @@ require "spec_helper"
2
2
  require "fileutils"
3
3
  require "tmpdir"
4
4
 
5
- module Pa::Cmd::ClassMethods
6
- public :_copy, :_touch, :_mkdir, :_mktmpname, :_rmdir, :_copy, :_move, :_ln
7
- end
5
+ public_all_methods Pa::Cmd::ClassMethods
8
6
 
9
7
  describe Pa do
10
8
  before :all do
@@ -13,16 +11,16 @@ describe Pa do
13
11
  Dir.chdir @tmpdir
14
12
  end
15
13
 
16
- after :all do
17
- Dir.chdir @curdir
18
- FileUtils.rm_r @tmpdir
19
- end
20
-
21
14
  # clean up directory after each run
22
15
  after :each do
23
16
  FileUtils.rm_r Dir.glob("*", File::FNM_DOTMATCH)-%w[. ..]
24
17
  end
25
18
 
19
+ after :all do
20
+ Dir.chdir @curdir
21
+ FileUtils.rm_r @tmpdir
22
+ end
23
+
26
24
  describe "#home2" do
27
25
  it "works" do
28
26
  Pa.home2.should == Dir.home
@@ -36,7 +34,7 @@ describe Pa do
36
34
  end
37
35
 
38
36
  it "works" do
39
- output = capture :stdout do
37
+ output = capture do
40
38
  Pa._ln(:link, "_lna", "_lnb", :verbose => true)
41
39
  end
42
40
 
@@ -86,7 +84,7 @@ describe Pa do
86
84
  it "doesn't raise Errno::EEXIST with :force" do
87
85
  lambda{ Pa.symln("file1", "file2", :force => true) }.should_not raise_error(Errno::EEXIST)
88
86
  File.symlink?("file2").should be_true
89
- File.readlink("file2").should == "file1"
87
+ File.readlink(File.absolute_path("file2")).should == "file1"
90
88
  end
91
89
  end
92
90
 
@@ -196,7 +194,7 @@ describe Pa do
196
194
 
197
195
  path = Pa.mktmpdir("foo")
198
196
 
199
- path.should =~ %r~#{Regexp.escape(ENV["TEMP"])}/foo~
197
+ path.should =~ %r~#{Regexp.escape(Dir.tmpdir)}/foo~
200
198
  end
201
199
  end
202
200
 
@@ -547,7 +545,7 @@ describe Pa do
547
545
  end
548
546
  end
549
547
 
550
- describe "class DELEGATE_METHODS" do
548
+ describe "DELEGATE_CLASS_METHODS" do
551
549
  it "works" do
552
550
  Pa.stub(:home2) { "/home/foo" }
553
551
  Pa.home.should == Pa("/home/foo")
@@ -2,11 +2,7 @@ require "spec_helper"
2
2
  require "fileutils"
3
3
  require "tmpdir"
4
4
 
5
- class Pa
6
- class << self
7
- public :_copy, :_move, :_rmdir, :_mktmpname, :_mkdir, :_touch
8
- end
9
- end
5
+ public_all_methods Pa
10
6
 
11
7
  describe Pa do
12
8
  before :all do
@@ -121,7 +117,6 @@ describe Pa do
121
117
  break
122
118
  }
123
119
  end
124
-
125
120
  end
126
121
 
127
122
  describe ".each" do
@@ -276,20 +271,20 @@ describe Pa do
276
271
  end
277
272
 
278
273
  it "works" do
279
- Pa.ls.should == %w[filea dira].map{|v|Pa(v)}
280
- Pa.ls(Dir.pwd).should == %w[filea dira].map{|v|Pa(v)}
274
+ Pa.ls.sort.should == %w[filea dira].map{|v|Pa(v)}.sort
275
+ Pa.ls(Dir.pwd).sort.should == %w[filea dira].map{|v|Pa(v)}.sort
281
276
  end
282
277
 
283
278
  it "list multi paths" do
284
- Pa.ls(".", "dira").should == %w[filea dira fileb].map{|v|Pa(v)}
279
+ Pa.ls(".", "dira").sort.should == %w[filea dira fileb].map{|v|Pa(v)}.sort
285
280
  end
286
281
 
287
282
  it "with :absolute => true" do
288
- Pa.ls(:absolute => true).should == %w[filea dira].map{|v|Pa(File.join(Dir.pwd, v))}
283
+ Pa.ls(:absolute => true).sort.should == %w[filea dira].map{|v|Pa(File.join(Dir.pwd, v))}.sort
289
284
  end
290
285
 
291
286
  it "call a block" do
292
- Pa.ls{|p, fn| p.directory? }.should == %w[dira].map{|v|Pa(v)}
287
+ Pa.ls{|p, fn| p.directory? }.sort.should == %w[dira].map{|v|Pa(v)}.sort
293
288
  end
294
289
  end
295
290
 
@@ -18,7 +18,7 @@ describe Pa do
18
18
  describe ".dangling?" do
19
19
  it "works" do
20
20
  olddir=Dir.pwd
21
- Dir.chdir("#{$specdir}/data/tmp")
21
+ Dir.chdir("#{$spec_dir}/data/tmp")
22
22
 
23
23
  begin
24
24
  File.open("fa", "w"){|f| f.puts "guten" }
@@ -44,60 +44,66 @@ describe Pa do
44
44
  end
45
45
  end
46
46
 
47
- describe ".dir2" do
48
- it "get a path's directory name" do
49
- Pa.dir2("/home/guten").should == "/home"
47
+ describe ".expand2" do
48
+ it "expand_path" do
49
+ Pa.expand2("~").should == File.expand_path("~")
50
50
  end
51
51
  end
52
52
 
53
- describe ".base2" do
54
- it "get name, ext with :ext => true" do
55
- Pa.base2("/home/foo.bar", ext: true).should == ["foo", "bar"]
56
- end
57
- end
58
-
59
- describe ".base" do
60
- it "works" do
61
- Pa.base("/home/foo.bar", ext: true).should == [Pa("foo"), "bar"]
53
+ describe ".relative_to?" do
54
+ it do
55
+ expect(Pa.relative_to?("/home/foo", "/home")).to be_true
56
+ expect(Pa.relative_to?("/home1/foo", "/home")).to be_false
62
57
  end
63
58
  end
64
59
 
65
- describe ".ext2" do
66
- it "get a path's extension" do
67
- Pa.ext2("/home/a.txt").should == "txt"
68
- end
60
+ describe ".relative_to2" do
61
+ it do
62
+ expect(Pa.relative_to2("/home/foo", "/home")).to eq("foo")
63
+ expect(Pa.relative_to2("/home/foo", "/home/foo")).to eq(".")
64
+ expect(Pa.relative_to2("/home/foo", "/bin")).to eq("/home/foo")
69
65
 
70
- it "return nil when don extension" do
71
- Pa.ext2("/home/a").should == nil
72
- end
66
+ expect(Pa.relative_to2("/home/foo", "/home/foo/")).to eq(".")
67
+ expect(Pa.relative_to2("/home/foo/", "/home/foo")).to eq(".")
68
+
69
+ expect(Pa.relative_to2("/home1/foo", "/home")).to eq("/home1/foo")
70
+ end
71
+ end
73
72
 
74
- it "with complex" do
75
- Pa.ext2("/home/a.b.c.txt").should == "txt"
73
+ describe ".has_ext?" do
74
+ it do
75
+ expect(Pa.has_ext?("foo.txt", ".txt")).to be_true
76
+ expect(Pa.has_ext?("foo", ".txt")).to be_false
77
+ expect(Pa.has_ext?("foo.1txt", ".txt")).to be_false
76
78
  end
77
79
  end
78
80
 
79
- describe ".absolute2" do
80
- it "returns absolute_path" do
81
- Pa.absolute2(".").should == File.absolute_path(".")
81
+ describe ".delete_ext2" do
82
+ it do
83
+ expect(Pa.delete_ext2("foo.txt", ".txt")).to eq("foo")
84
+ expect(Pa.delete_ext2("foo", ".txt")).to eq("foo")
85
+ expect(Pa.delete_ext2("foo.epub", ".txt")).to eq("foo.epub")
82
86
  end
83
87
  end
84
88
 
85
- describe ".expand2" do
86
- it "expand_path" do
87
- Pa.expand2("~").should == File.expand_path("~")
89
+ describe ".add_ext2" do
90
+ it do
91
+ expect(Pa.add_ext2("foo", ".txt")).to eq("foo.txt")
92
+ expect(Pa.add_ext2("foo.txt", ".txt")).to eq("foo.txt")
93
+ expect(Pa.add_ext2("foo.epub", ".txt")).to eq("foo.epub.txt")
88
94
  end
89
95
  end
90
96
 
97
+
91
98
  describe ".shorten2" do
92
- it "short /home/usr/file into ~/file" do
93
- ENV["HOME"] = "/home/foo"
94
- Pa.shorten2("/home/foo/file").should == "~/file"
95
- end
99
+ it do
100
+ Pa.stub(:home2) { "/home"}
101
+ expect(Pa.shorten2("/home/file")).to eq("~/file")
102
+ expect(Pa.shorten2("/home1/file")).to eq("/home1/file")
96
103
 
97
- it "not short /home/other-user/file" do
98
- ENV["HOME"] = "/home/foo"
99
- Pa.shorten2("/home/bar/file").should == "/home/bar/file"
100
- end
104
+ Pa.stub(:home2) { "" }
105
+ expect(Pa.shorten2("/home/file")).to eq("/home/file")
106
+ end
101
107
  end
102
108
 
103
109
  describe ".real2" do
@@ -118,24 +124,24 @@ describe Pa do
118
124
  end
119
125
  end
120
126
 
121
- describe "class DELEGATE_METHODS" do
122
- it "works" do
127
+ describe "DELEGATE_CLASS_METHODS" do
128
+ it do
123
129
  Pa.should_receive(:pwd2).with(1,2)
124
130
 
125
131
  Pa.pwd(1,2)
126
132
  end
127
133
  end
128
134
 
129
- describe "instance DELEGATE_METHODS2" do
130
- it "works" do
135
+ describe "DELEGATE_METHODS2" do
136
+ it do
131
137
  Pa.should_receive(:parent2).with("foo", 1, 2)
132
138
 
133
139
  Pa.new("foo").parent2(1, 2)
134
140
  end
135
141
  end
136
142
 
137
- describe "instance DELEGATE_METHODS" do
138
- it "works" do
143
+ describe "DELEGATE_METHODS" do
144
+ it do
139
145
  p = Pa.new("foo")
140
146
 
141
147
  p.should_receive(:parent2).with(1,2)
@@ -1,40 +1,11 @@
1
1
  require "spec_helper"
2
2
 
3
- class Pa
4
- class <<self
5
- public :_wrap, :build_path2
6
- end
7
- end
3
+ public_all_methods Pa
8
4
 
9
5
  describe Pa do
10
6
  it "._wrap" do
11
- Pa._wrap("foo").should == Pa("foo")
12
- Pa._wrap(["guten", "tag"]).should == [Pa("guten"), Pa("tag")]
13
- end
14
-
15
- describe ".build_path2" do
16
- it "works" do
17
- Pa.build_path2(path: "foo/bar.avi").should == "foo/bar.avi"
18
- Pa.build_path2(dir: "foo", name: "bar", ext: "avi").should == "foo/bar.avi"
19
- end
20
-
21
- it "complex examples" do
22
- Pa.build_path2(dir: "foo").should == "foo"
23
- Pa.build_path2(fname: "bar.avi").should == "bar.avi"
24
- Pa.build_path2(base: "bar.avi").should == "bar.avi"
25
- Pa.build_path2(name: "bar").should == "bar"
26
- Pa.build_path2(fext: ".avi").should == ".avi"
27
- Pa.build_path2(ext: "avi").should == ".avi"
28
- Pa.build_path2(dir: "", fname: "bar.avi").should == "bar.avi"
29
- end
30
-
31
- it "percedure" do
32
- Pa.build_path2(path: "foo", fname: "bar").should == "foo"
33
- Pa.build_path2(fname: "foo", name: "bar").should == "foo"
34
- Pa.build_path2(fname: "foo", ext: "bar").should == "foo"
35
- Pa.build_path2(fname: "foo", fext: ".bar").should == "foo"
36
- Pa.build_path2(fext: "foo", ext: "bar").should == "foo"
37
- end
7
+ expect(Pa._wrap("foo")).to eq(Pa("foo"))
8
+ expect(Pa._wrap(["guten", "tag"])).to eq([Pa("guten"), Pa("tag")])
38
9
  end
39
10
 
40
11
  describe ".get" do
@@ -43,144 +14,219 @@ describe Pa do
43
14
  def path.path
44
15
  "hello"
45
16
  end
46
- Pa.get(path).should == "hello"
17
+ expect(Pa.get(path)).to eq("hello")
47
18
  end
48
19
 
49
20
  it "get path from a string" do
50
- Pa.get("foo").should == "foo"
21
+ expect(Pa.get("foo")).to eq("foo")
51
22
  end
52
23
 
53
24
  it "get nil from nil" do
54
- Pa.get(nil).should == nil
25
+ expect(Pa.get(nil)).to eq(nil)
55
26
  end
56
27
 
57
28
  it "otherwise raise ArgumentError" do
58
- lambda { Pa.get([]) }.should raise_error(ArgumentError)
29
+ expect{ Pa.get([]) }.to raise_error(ArgumentError)
30
+ end
31
+ end
32
+
33
+ describe ".absolute2" do
34
+ it do
35
+ expect(Pa.absolute2("a.txt")).to eq(File.join(File.absolute_path(".", "."), "a.txt")) # rbx
36
+ end
37
+ end
38
+
39
+ describe ".dir2" do
40
+ it do
41
+ expect(Pa.dir2("/home/foo.txt")).to eq("/home")
42
+ expect(Pa.dir2("foo.txt")).to eq(".")
43
+ end
44
+ end
45
+
46
+ describe ".dir_strict2" do
47
+ it do
48
+ expect(Pa.dir_strict2("foo.txt")).to eq("")
49
+ expect(Pa.dir_strict2("./foo.txt")).to eq(".")
50
+ expect(Pa.dir_strict2("../foo.txt")).to eq("..")
51
+ expect(Pa.dir_strict2("/foo.txt")).to eq("/")
52
+ end
53
+ end
54
+
55
+ describe ".base2" do
56
+ it do
57
+ expect(Pa.base2("foo.txt")).to eq("foo.txt")
58
+ expect(Pa.base2("/home/foo.txt")).to eq("foo.txt")
59
+ end
60
+
61
+
62
+ it "(ext: true)" do
63
+ expect(Pa.base2("/home/foo.bar", ext: true)).to eq(["foo", "bar"])
64
+ end
65
+ end
66
+
67
+ describe ".base" do
68
+ it do
69
+ expect(Pa.base("/home/foo.txt")).to eq(Pa("foo.txt"))
70
+ expect(Pa.base("/home/foo.bar", ext: true)).to eq([Pa("foo"), "bar"])
71
+ end
72
+ end
73
+
74
+ describe ".name2" do
75
+ it do
76
+ expect(Pa.name2("foo.txt")).to eq("foo")
77
+ expect(Pa.name2("/home/foo.txt")).to eq("foo")
78
+ end
79
+ end
80
+
81
+ describe ".ext2" do
82
+ it do
83
+ expect(Pa.ext2("foo.txt")).to eq(".txt")
84
+ expect(Pa.ext2("foo")).to eq("")
85
+ expect(Pa.ext2("/home/foo.txt")).to eq(".txt")
86
+ end
87
+ end
88
+
89
+ describe ".fext2" do
90
+ it do
91
+ expect(Pa.fext2("foo.txt")).to eq("txt")
92
+ expect(Pa.fext2("foo")).to eq("")
93
+ expect(Pa.fext2("/home/foo.txt")).to eq("txt")
59
94
  end
60
95
  end
61
96
 
62
97
  describe "split2" do
63
98
  it "split a path into two part: dirname and basename" do
64
- Pa.split2("/home/b/a.txt").should == ["/home/b", "a.txt"]
99
+ expect(Pa.split2("/home/b/a.txt")).to eq(["/home/b", "a.txt"])
65
100
  end
66
101
 
67
102
  it "with :all options: split all parts" do
68
- Pa.split2("/home/b/a.txt", :all => true).should == ["/", "home", "b", "a.txt"]
103
+ expect(Pa.split2("/home/b/a.txt", :all => true)).to eq(["/", "home", "b", "a.txt"])
69
104
  end
70
105
  end
71
106
 
72
107
  describe "split" do
73
108
  it "is a special case" do
74
- Pa.split("/home/b/a.txt").should == [Pa("/home/b"), "a.txt"]
109
+ expect(Pa.split("/home/b/a.txt")).to eq([Pa("/home/b"), "a.txt"])
75
110
  end
76
111
  end
77
112
 
78
113
  describe ".join2" do
79
114
  it "join a path" do
80
- Pa.join2("/a", "b").should == "/a/b"
115
+ expect(Pa.join2("/a", "b")).to eq("/a/b")
81
116
  end
82
117
 
83
118
  it "skip nil values" do
84
- Pa.join2("/a", "b", nil).should == "/a/b"
119
+ expect(Pa.join2("/a", "b", nil)).to eq("/a/b")
85
120
  end
86
121
 
87
122
  it "skip empty values" do
88
- Pa.join2("/a", "b", "").should == "/a/b"
123
+ expect(Pa.join2("/a", "b", "")).to eq("/a/b")
89
124
  end
90
125
  end
91
126
 
92
- describe ".build2" do
93
- it "works" do
94
- Pa.build2("/home/guten.avi"){ |p| "#{p.dir}/foo.#{p.ext}" }.should == "/home/foo.avi"
95
- Pa.build2(dir: "/home", name: "guten", ext: "avi").should == "/home/guten.avi"
96
- Pa.build2(path: "/home/guten.avi"){ |p| "#{p.dir}/foo.#{p.ext}" }.should == "/home/foo.avi"
97
- end
98
- end
99
-
100
- describe "class DELEGATE_METHODS" do
101
- it "works" do
102
- Pa.stub(:build2){|arg| arg }
103
-
104
- Pa.build("foo").should == Pa("foo")
127
+ describe "DELEGATE_CLASS_METHODS" do
128
+ it do
129
+ Pa.stub(:dir2) { "foo" }
130
+ expect(Pa.dir).to eq(Pa("foo"))
105
131
  end
106
132
  end
107
133
 
108
134
  describe "#initilaize" do
109
135
  it "support ~/foo path" do
110
- Pa.new("~/foo").should == Pa("#{ENV['HOME']}/foo")
136
+ expect(Pa.new("~/foo")).to eq(Pa("#{ENV['HOME']}/foo"))
111
137
  end
112
138
  end
113
139
 
114
- it "#absolute2" do
115
- Pa.new("foo.avi").absolute2.should == File.join(File.absolute_path("."), "foo.avi")
116
- end
140
+ describe "DELEGATE_ATTR_METHODS2" do
141
+ it do
142
+ Pa.stub(:dir2) { "foo" }
117
143
 
118
- it "#dir2" do
119
- Pa.new("foo.avi").dir2.should == "."
144
+ a = Pa("foo")
145
+ expect(a.dir2).to eq("foo")
146
+ expect(a.instance_variable_get(:@dir2)).to eq("foo")
147
+ end
120
148
  end
121
149
 
122
- it "#dir_strict2" do
123
- Pa.new("foo.avi").dir_strict2.should == ""
124
- Pa.new("./foo.avi").dir_strict2.should == "."
125
- Pa.new("../foo.avi").dir_strict2.should == ".."
126
- Pa.new("/foo.avi").dir_strict2.should == "/"
150
+ describe "DELEGATE_ATTR_METHODS" do
151
+ it do
152
+ a = Pa("foo")
153
+ a.stub(:dir2) { "foo" }
154
+
155
+ expect(a.dir).to eq(Pa("foo"))
156
+ expect(a.instance_variable_get(:@dir)).to eq(Pa("foo"))
157
+ end
127
158
  end
128
159
 
129
- it "#base2" do
130
- Pa.new("foo.avi").base2.should == "foo.avi"
160
+ describe "DELEGATE_METHODS2" do
161
+ it do
162
+ Pa.stub(:join2) { "foo" }
163
+
164
+ expect(Pa("foo").join2).to eq("foo")
165
+ end
131
166
  end
132
167
 
133
- it "#name2" do
134
- Pa.new("foo.avi").name2.should == "foo"
168
+ describe "DELEGATE_METHODS" do
169
+ it do
170
+ Pa.stub(:join2) { "foo" }
171
+
172
+ expect(Pa("foo").join).to eq(Pa("foo"))
173
+ end
135
174
  end
136
175
 
137
- it "#ext2" do
138
- Pa.new("foo.avi").ext2.should == "avi"
139
- Pa.new("foo").ext2.should == ""
176
+ describe "DELEGATE_TO_PATH2" do
177
+ it do
178
+ a = Pa("foo")
179
+ a.path.stub("sub"){ "bar" }
180
+
181
+ expect(a.sub2).to eq("bar")
182
+ end
140
183
  end
141
184
 
142
- it "#fext2" do
143
- Pa.new("foo.avi").fext2.should == ".avi"
144
- Pa.new("foo").ext2.should == ""
185
+ describe "DELEGATE_TO_PATH" do
186
+ it do
187
+ a = Pa("foo")
188
+ a.path.stub("start_with?"){ "bar" }
189
+
190
+ expect(a.start_with?).to eq("bar")
191
+ end
145
192
  end
146
193
 
147
- it "#inspect" do
148
- Pa.new("/foo/bar.avi").inspect.should =~ /path|absolute/
194
+ describe "#inspect" do
195
+ it do
196
+ expect(Pa("/foo/bar.txt").inspect).to match(/path|absolute/)
197
+ end
149
198
  end
150
199
 
151
- it "#to_s" do
152
- Pa.new("bar.avi").to_s.should == "bar.avi"
200
+ describe "#to_s" do
201
+ it do
202
+ expect(Pa("bar.txt").to_s).to eq("bar.txt")
203
+ end
153
204
  end
154
205
 
155
- it "#replace" do
156
- a = Pa.new("/home/guten")
157
- a.replace "/bar/foo.avi"
158
-
159
- a.path.should == "/bar/foo.avi"
160
- a.absolute2.should == "/bar/foo.avi"
161
- a.dir2.should == "/bar"
162
- a.fname2.should == "foo.avi"
163
- a.base2.should == "foo.avi"
164
- a.name2.should == "foo"
165
- a.ext2.should == "avi"
166
- a.fext2.should == ".avi"
206
+ describe "#replace" do
207
+ it do
208
+ a = Pa("/home/guten")
209
+ a.replace "/bar/foo.txt"
210
+
211
+ expect(a.path ).to eq("/bar/foo.txt")
212
+ expect(a.absolute2).to eq("/bar/foo.txt")
213
+ expect(a.dir2 ).to eq("/bar")
214
+ expect(a.base2 ).to eq("foo.txt")
215
+ expect(a.name2 ).to eq("foo")
216
+ expect(a.ext2 ).to eq(".txt")
217
+ expect(a.fext2 ).to eq("txt")
218
+ end
167
219
  end
168
220
 
169
221
  describe "#<=>" do
170
222
  it "runs ok" do
171
- (Pa("/home/b") <=> Pa("/home/a")).should == 1
223
+ expect(Pa("/home/b") <=> Pa("/home/a")).to eq(1)
172
224
  end
173
225
  end
174
226
 
175
227
  describe "#+" do
176
228
  it "runs ok" do
177
- (Pa("/home")+"~").should == Pa("/home~")
178
- end
179
- end
180
-
181
- describe "#sub2" do
182
- it "runs ok" do
183
- Pa("/home/foo").sub2(/o/,"").should == "/hme/foo"
229
+ expect(Pa("/home")+"~").to eq(Pa("/home~"))
184
230
  end
185
231
  end
186
232
 
@@ -188,13 +234,7 @@ describe Pa do
188
234
  it "runs ok" do
189
235
  pa = Pa("/home/foo")
190
236
  pa.sub!(/o/,"")
191
- pa.should == Pa("/hme/foo")
192
- end
193
- end
194
-
195
- describe "#gsub2" do
196
- it "runs ok" do
197
- Pa("/home/foo").gsub2(/o/,"").should == "/hme/f"
237
+ expect(pa).to eq(Pa("/hme/foo"))
198
238
  end
199
239
  end
200
240
 
@@ -202,67 +242,40 @@ describe Pa do
202
242
  it "runs ok" do
203
243
  pa = Pa("/home/foo")
204
244
  pa.gsub!(/o/,"")
205
- pa.should == Pa("/hme/f")
206
- end
207
- end
208
-
209
- describe "#match" do
210
- it "runs ok" do
211
- Pa("/home/foo").match(/foo/)[0].should == "foo"
212
- end
213
- end
214
-
215
- describe "#start_with?" do
216
- it "runs ok" do
217
- Pa("/home/foo").start_with?("/home").should be_true
218
- end
219
- end
220
-
221
- describe "#end_with?" do
222
- it "runs ok" do
223
- Pa("/home/foo").end_with?("foo").should be_true
245
+ expect(pa).to eq(Pa("/hme/f"))
224
246
  end
225
247
  end
226
248
 
227
249
  describe "#=~" do
228
250
  it "runs ok" do
229
- (Pa("/home/foo") =~ /foo/).should be_true
251
+ expect((Pa("/home/foo") =~ /foo/)).to be_true
230
252
  end
231
253
  end
232
254
 
233
- describe "#build2" do
234
- it "works" do
235
- Pa.new("/home/guten.avi").build2(path: "/foo/bar.avi").should == "/foo/bar.avi"
236
- Pa.new("/home/guten.avi").build2(dir: "foo").should == "foo/guten.avi"
237
- Pa.new("/home/guten.avi").build2(fname: "bar").should == "/home/bar"
238
- Pa.new("/home/guten.avi").build2(base: "bar").should == "/home/bar"
239
- Pa.new("/home/guten.avi").build2(name: "bar").should == "/home/bar.avi"
240
- Pa.new("/home/guten.avi").build2(ext: "ogg").should == "/home/guten.ogg"
241
- Pa.new("/home/guten.avi").build2(fext: ".ogg").should == "/home/guten.ogg"
242
- Pa.new("/home/guten.avi").build2(dir: "foo", name: "bar", ext: "ogg").should == "foo/bar.ogg"
243
- end
244
-
245
- it "percedure" do
246
- Pa.new("/home/guten.avi").build2(path: "foo", fname: "bar").should == "foo"
247
- Pa.new("/home/guten.avi").build2(fname: "foo", name: "bar").should == "/home/foo"
248
- Pa.new("/home/guten.avi").build2(fname: "foo", ext: "ogg").should == "/home/foo"
249
- Pa.new("/home/guten.avi").build2(fname: "foo", fext: ".ogg").should == "/home/foo"
250
- Pa.new("/home/guten.avi").build2(fext: ".ogg", ext: "mp3").should == "/home/guten.ogg"
255
+ describe "#change2" do
256
+ before :all do
257
+ @a = Pa("/home/a.txt")
251
258
  end
252
- end
253
259
 
254
- describe "instance DELEGATE_METHODS2" do
255
- it "works" do
256
- Pa.stub(:join2) { "foo" }
257
- Pa.new("foo").join2.should == "foo"
260
+ it do
261
+ expect(@a.change2(path: "foo")).to eq("foo")
262
+ expect(@a.change2(dir: "foo")).to eq("foo/a.txt")
263
+ expect(@a.change2(base: "bar")).to eq("/home/bar")
264
+ expect(@a.change2(name: "bar")).to eq("/home/bar.txt")
265
+ expect(@a.change2(ext: ".epub")).to eq("/home/a.epub")
258
266
  end
259
- end
260
267
 
261
- describe "instance DELEGATE_METHODS" do
262
- it "works" do
263
- Pa.stub(:build2) { "foo" }
268
+ it "(complex)" do
269
+ expect(@a.change2(dir: "foo", base: "bar")).to eq("foo/bar")
270
+ expect(@a.change2(dir: "foo", name: "bar", ext: ".epub")).to eq("foo/bar.epub")
271
+ expect(@a.change2(dir: "foo", name: "bar")).to eq("foo/bar.txt")
272
+ expect(@a.change2(name: "bar", ext: ".epub")).to eq("/home/bar.epub")
273
+ end
264
274
 
265
- Pa.new("foo").build.should == Pa("foo")
275
+ it "has a percudure" do
276
+ expect(@a.change2(path: "foo", dir: "bar")).to eq("foo")
277
+ expect(@a.change2(base: "foo", name: "bar")).to eq("/home/foo")
278
+ expect(@a.change2(base: "foo", ext: ".ogg")).to eq("/home/foo")
266
279
  end
267
280
  end
268
281
  end