temppath 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +29 -1
- data/lib/temppath.rb +153 -30
- data/lib/temppath/version.rb +1 -1
- data/test/spec_temppath.rb +75 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -27,6 +27,7 @@ path.open("w")
|
|
27
27
|
|
28
28
|
```ruby
|
29
29
|
path = Temppath.mkdir
|
30
|
+
path.exist? #=> true
|
30
31
|
path.directory? #=> true
|
31
32
|
"%o" % path.stat.mode #=> "40700"
|
32
33
|
```
|
@@ -35,7 +36,34 @@ path.directory? #=> true
|
|
35
36
|
|
36
37
|
```ruby
|
37
38
|
path = Temppath.touch
|
38
|
-
path.
|
39
|
+
path.exist? #=> true
|
40
|
+
path.file? #=> true
|
41
|
+
"%o" % path.stat.mode #=> "100600"
|
42
|
+
```
|
43
|
+
|
44
|
+
#### Use temporary path generator
|
45
|
+
|
46
|
+
You can use Temppath::Generator when you want to use multiple base
|
47
|
+
directory. Generated paths have same natures as paths from Tempath.create,
|
48
|
+
mkdir, and touch.
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
# make a generator
|
52
|
+
temppath = Temppath::Generator.new("/tmp/other-dir")
|
53
|
+
|
54
|
+
path = temppath.create
|
55
|
+
path.exist? #=> false
|
56
|
+
path.open("w")
|
57
|
+
"%o" % path.stat.mode #=> "100600"
|
58
|
+
|
59
|
+
path = temppath.mkdir
|
60
|
+
path.exist? #=> true
|
61
|
+
path.directory? #=> true
|
62
|
+
"%o" % path.stat.mode #=> "40700"
|
63
|
+
|
64
|
+
path = temppath.touch
|
65
|
+
path.exist? #=> true
|
66
|
+
path.file? #=> true
|
39
67
|
"%o" % path.stat.mode #=> "100600"
|
40
68
|
```
|
41
69
|
|
data/lib/temppath.rb
CHANGED
@@ -16,12 +16,19 @@ require 'fileutils'
|
|
16
16
|
# "%o" % path.stat.mode #=> "100600" (default permission 0600)
|
17
17
|
# @example Touch a temporary file
|
18
18
|
# path = Temppath.touch
|
19
|
-
# path.
|
19
|
+
# path.exist? #=> true
|
20
|
+
# path.file? #=> true
|
20
21
|
# "%o" % path.stat.mode #=> "100600"
|
21
22
|
# @example Create a temporary directory
|
22
23
|
# path = Temppath.mkdir
|
24
|
+
# path.exist? #=> true
|
23
25
|
# path.directory? #=> true
|
24
26
|
# "%o" % path.stat.mode #=> "40700"
|
27
|
+
# @example Use temporary path generator
|
28
|
+
# temppath = Temppath::Generator.new("/tmp/other-dir")
|
29
|
+
# temppath.create
|
30
|
+
# temppath.mkdir
|
31
|
+
# temppath.touch
|
25
32
|
module Temppath
|
26
33
|
# OriginalMethodHolder keeps some original methods of Pathname.
|
27
34
|
module OriginalMethodHolder
|
@@ -72,15 +79,38 @@ module Temppath
|
|
72
79
|
end
|
73
80
|
end
|
74
81
|
|
75
|
-
|
82
|
+
# Generator generates temporary path in the base directory.
|
83
|
+
class Generator
|
76
84
|
# @return [Pathname]
|
77
85
|
# defalut base directory for paths created by Temppath
|
78
86
|
attr_reader :basedir
|
79
87
|
|
88
|
+
# @return [String]
|
89
|
+
# defalut base name
|
90
|
+
attr_accessor :basename
|
91
|
+
|
80
92
|
# @return [Boolean]
|
81
93
|
# true if unlink mode is enabled
|
82
94
|
attr_accessor :unlink
|
83
95
|
|
96
|
+
# @param basedir [Pathname]
|
97
|
+
# generator's base directory
|
98
|
+
# @param option [Hash]
|
99
|
+
# @option option [String] :basename
|
100
|
+
# prefix of filename
|
101
|
+
def initialize(basedir, option={})
|
102
|
+
@basedir = Pathname.new(basedir)
|
103
|
+
@basename = (option[:basename] || "").to_s
|
104
|
+
@unlink = true
|
105
|
+
|
106
|
+
# register a cleaner for temporary directory
|
107
|
+
Kernel.at_exit do
|
108
|
+
if @unlink
|
109
|
+
remove_basedir rescue Errno::ENOENT
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
84
114
|
# Create a temporary path. This method creates no files.
|
85
115
|
#
|
86
116
|
# @param option [Hash]
|
@@ -89,18 +119,42 @@ module Temppath
|
|
89
119
|
# @option option [Pathname] :basedir
|
90
120
|
# pathname of base directory
|
91
121
|
def create(option={})
|
92
|
-
|
93
|
-
_basedir = option[:basedir] || basedir
|
94
|
-
|
122
|
+
_basename = option[:basename] || @basename
|
123
|
+
_basedir = Pathname.new(option[:basedir] || @basedir)
|
124
|
+
|
125
|
+
# init basedir
|
126
|
+
unless _basedir.exist?
|
127
|
+
_basedir.mkdir(0700)
|
128
|
+
end
|
129
|
+
|
130
|
+
# make a path
|
131
|
+
path = Pathname.new(_basedir) + (_basename.to_s + generate_uuid)
|
132
|
+
|
133
|
+
# extend path object with secure methods
|
95
134
|
path.extend OriginalMethodHolder
|
96
135
|
path.extend SecurePermissionMethods
|
97
|
-
|
98
|
-
|
136
|
+
|
137
|
+
# register a file cleaner if the path is not in basedir
|
138
|
+
if _basedir != @basedir
|
139
|
+
Kernel.at_exit do
|
140
|
+
if @unlink
|
141
|
+
FileUtils.remove_entry_secure(path) rescue Errno::ENOENT
|
142
|
+
end
|
143
|
+
end
|
99
144
|
end
|
145
|
+
|
100
146
|
return path
|
101
147
|
end
|
102
148
|
|
103
149
|
# Create a temporary directory.
|
150
|
+
#
|
151
|
+
# @param option [Hash]
|
152
|
+
# @option option [Integer] :mode
|
153
|
+
# mode for the directory permission
|
154
|
+
# @option option [String] :basename
|
155
|
+
# prefix of directory name
|
156
|
+
# @option option [Pathname] :basedir
|
157
|
+
# pathname of base directory
|
104
158
|
def mkdir(option={})
|
105
159
|
mode = option[:mode] || 0700
|
106
160
|
path = create(option)
|
@@ -109,6 +163,14 @@ module Temppath
|
|
109
163
|
end
|
110
164
|
|
111
165
|
# Create a empty file.
|
166
|
+
#
|
167
|
+
# @param option [Hash]
|
168
|
+
# @option option [Integer] :mode
|
169
|
+
# mode for the file permission
|
170
|
+
# @option option [String] :basename
|
171
|
+
# prefix of filename
|
172
|
+
# @option option [Pathname] :basedir
|
173
|
+
# pathname of base directory
|
112
174
|
def touch(option={})
|
113
175
|
mode = option[:mode] || 0600
|
114
176
|
path = create(option)
|
@@ -116,16 +178,6 @@ module Temppath
|
|
116
178
|
return path
|
117
179
|
end
|
118
180
|
|
119
|
-
# Remove current base directory, create a new base directory, and
|
120
|
-
# use it.
|
121
|
-
#
|
122
|
-
# @return [Pathname]
|
123
|
-
# new base directory
|
124
|
-
def update_basedir
|
125
|
-
remove_basedir
|
126
|
-
@basedir = create_basedir
|
127
|
-
end
|
128
|
-
|
129
181
|
# Remove current temporary directory.
|
130
182
|
#
|
131
183
|
# @return [void]
|
@@ -135,6 +187,16 @@ module Temppath
|
|
135
187
|
|
136
188
|
private
|
137
189
|
|
190
|
+
# Generate random UUID for filename of temporary path.
|
191
|
+
#
|
192
|
+
# @return [String]
|
193
|
+
# UUID string
|
194
|
+
def generate_uuid
|
195
|
+
UUIDTools::UUID.random_create.to_s
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
class << self
|
138
200
|
# Create a new base directory.
|
139
201
|
#
|
140
202
|
# @return [Pathname]
|
@@ -142,23 +204,84 @@ module Temppath
|
|
142
204
|
def create_basedir
|
143
205
|
Pathname.new(Dir.mktmpdir("ruby-temppath-"))
|
144
206
|
end
|
207
|
+
private :create_basedir
|
208
|
+
end
|
145
209
|
|
146
|
-
|
210
|
+
# default generator
|
211
|
+
@generator = Generator.new(create_basedir)
|
212
|
+
|
213
|
+
class << self
|
214
|
+
# Return base directory of paths created by Temppath.
|
147
215
|
#
|
148
|
-
# @return [
|
149
|
-
#
|
150
|
-
def
|
151
|
-
|
216
|
+
# @return [Pathname]
|
217
|
+
# base directory
|
218
|
+
def basedir
|
219
|
+
@generator.basedir
|
152
220
|
end
|
153
|
-
end
|
154
221
|
|
155
|
-
|
156
|
-
|
157
|
-
|
222
|
+
# Return true if unlink mode is enabled.
|
223
|
+
#
|
224
|
+
# @return [Boolean]
|
225
|
+
# true if unlink mode is enabled
|
226
|
+
def unlink
|
227
|
+
@generator.unlink
|
228
|
+
end
|
229
|
+
|
230
|
+
# Set true or false unlink mode.
|
231
|
+
#
|
232
|
+
# @param b [Boolean]
|
233
|
+
# unlink mode
|
234
|
+
def unlink=(b)
|
235
|
+
@generator.unlink = b
|
236
|
+
end
|
237
|
+
|
238
|
+
# Create a temporary path. This method creates no files.
|
239
|
+
#
|
240
|
+
# @param option [Hash]
|
241
|
+
# @option option [String] :basename
|
242
|
+
# prefix of filename
|
243
|
+
# @option option [Pathname] :basedir
|
244
|
+
# pathname of base directory
|
245
|
+
def create(option={})
|
246
|
+
@generator.create(option)
|
247
|
+
end
|
248
|
+
|
249
|
+
# Create a temporary directory.
|
250
|
+
#
|
251
|
+
# @param option [Hash]
|
252
|
+
# @option option [Integer] :mode
|
253
|
+
# mode for the directory permission
|
254
|
+
# @option option [String] :basename
|
255
|
+
# prefix of directory name
|
256
|
+
# @option option [Pathname] :basedir
|
257
|
+
# pathname of base directory
|
258
|
+
def mkdir(option={})
|
259
|
+
@generator.mkdir(option)
|
260
|
+
end
|
261
|
+
|
262
|
+
# Create a empty file.
|
263
|
+
def touch(option={})
|
264
|
+
@generator.touch(option)
|
265
|
+
end
|
266
|
+
|
267
|
+
# Remove current base directory and change to use a new base directory.
|
268
|
+
#
|
269
|
+
# @param basedir [Pathname]
|
270
|
+
# new base directory, or nil
|
271
|
+
# @return [Pathname]
|
272
|
+
# new base directory
|
273
|
+
def update_basedir(basedir=nil)
|
274
|
+
@generator.remove_basedir
|
275
|
+
_basedir = basedir || create_basedir
|
276
|
+
@generator = Generator.new(_basedir)
|
277
|
+
return _basedir
|
278
|
+
end
|
158
279
|
|
159
|
-
# Remove
|
160
|
-
|
161
|
-
|
162
|
-
|
280
|
+
# Remove current temporary directory.
|
281
|
+
#
|
282
|
+
# @return [void]
|
283
|
+
def remove_basedir
|
284
|
+
@generator.remove_basedir
|
285
|
+
end
|
163
286
|
end
|
164
287
|
end
|
data/lib/temppath/version.rb
CHANGED
data/test/spec_temppath.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'temppath'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe Temppath do
|
4
4
|
before do
|
5
5
|
Temppath.update_basedir
|
6
6
|
end
|
@@ -28,6 +28,17 @@ describe 'Temppath' do
|
|
28
28
|
new_dir = Temppath.update_basedir
|
29
29
|
old_dir.should != new_dir
|
30
30
|
old_dir.should.not.exist
|
31
|
+
new_dir.should.exist
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should update current base directory to specific directory' do
|
35
|
+
old_dir = Temppath.basedir
|
36
|
+
new_dir = Pathname.new(Dir.mktmpdir("ruby-temppath-test"))
|
37
|
+
_new_dir = Temppath.update_basedir(new_dir)
|
38
|
+
old_dir.should != _new_dir
|
39
|
+
old_dir.should.not.exist
|
40
|
+
_new_dir.should.exist
|
41
|
+
_new_dir.should == new_dir
|
31
42
|
end
|
32
43
|
|
33
44
|
it 'should remove current base directory' do
|
@@ -106,3 +117,66 @@ describe 'Temppath' do
|
|
106
117
|
("%o" % path.stat.mode).should == "100600"
|
107
118
|
end
|
108
119
|
end
|
120
|
+
|
121
|
+
describe Temppath::Generator do
|
122
|
+
before do
|
123
|
+
Temppath.update_basedir
|
124
|
+
@dir = Dir.mktmpdir("ruby-temppath-generator-test")
|
125
|
+
@generator = Temppath::Generator.new(@dir)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should generate a path" do
|
129
|
+
path = @generator.create
|
130
|
+
path.should.kind_of Pathname
|
131
|
+
path.dirname.to_s.should == @dir
|
132
|
+
path.should.not.exist
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should make a directory" do
|
136
|
+
path = @generator.mkdir
|
137
|
+
path.should.kind_of Pathname
|
138
|
+
path.dirname.to_s.should == @dir
|
139
|
+
path.should.exist
|
140
|
+
path.should.directory
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should make a file" do
|
144
|
+
path = @generator.touch
|
145
|
+
path.should.kind_of Pathname
|
146
|
+
path.dirname.to_s.should == @dir
|
147
|
+
path.should.exist
|
148
|
+
path.should.file
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should have own base directory" do
|
152
|
+
Temppath.basedir.should != @generator.basedir
|
153
|
+
|
154
|
+
dir = Dir.mktmpdir("ruby-temppath-generator-test")
|
155
|
+
generator = Temppath::Generator.new(dir)
|
156
|
+
generator.basedir.should != @generator.basedir
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should make base directory with #create if it doesn't exist" do
|
160
|
+
dir = Dir.mktmpdir("ruby-temppath-generator-test")
|
161
|
+
generator = Temppath::Generator.new(dir + "create")
|
162
|
+
generator.basedir.should.not.exist
|
163
|
+
generator.create
|
164
|
+
generator.basedir.should.exist
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should make base directory with #mkdir if it doesn't exist" do
|
168
|
+
dir = Dir.mktmpdir("ruby-temppath-generator-test")
|
169
|
+
generator = Temppath::Generator.new(dir + "mkdir")
|
170
|
+
generator.basedir.should.not.exist
|
171
|
+
generator.create
|
172
|
+
generator.basedir.should.exist
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should make base directory with #touch if it doesn't exist" do
|
176
|
+
dir = Dir.mktmpdir("ruby-temppath-generator-test")
|
177
|
+
generator = Temppath::Generator.new(dir + "touch")
|
178
|
+
generator.basedir.should.not.exist
|
179
|
+
generator.create
|
180
|
+
generator.basedir.should.exist
|
181
|
+
end
|
182
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: temppath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
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-
|
12
|
+
date: 2013-10-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: uuidtools
|
@@ -123,7 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
123
123
|
version: '0'
|
124
124
|
segments:
|
125
125
|
- 0
|
126
|
-
hash:
|
126
|
+
hash: 1725793384501661700
|
127
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
128
|
none: false
|
129
129
|
requirements:
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
segments:
|
134
134
|
- 0
|
135
|
-
hash:
|
135
|
+
hash: 1725793384501661700
|
136
136
|
requirements: []
|
137
137
|
rubyforge_project:
|
138
138
|
rubygems_version: 1.8.25
|