pa 1.3.0 → 1.3.1

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.
@@ -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