filename 0.0.3 → 0.0.4
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/VERSION +1 -1
- data/bin/filename-create +132 -0
- data/filename.gemspec +9 -3
- data/lib/filename.rb +123 -5
- data/spec/cache_spec.rb +14 -0
- data/spec/configuration_spec.rb +45 -0
- data/spec/filename_spec.rb +18 -0
- metadata +11 -8
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/filename-create
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/filename")
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
basename = File.basename(__FILE__)
|
7
|
+
help_message =<<HELP
|
8
|
+
Usage: #{basename} <command> [arguments ...] [options ...]
|
9
|
+
|
10
|
+
<command> is 'new', 'cache', 'list_cache', 'delete_cache', 'config', 'list_config', or 'init'.
|
11
|
+
#{basename} new <basename> [options ...]
|
12
|
+
#{basename} cache <cache_key> [options ...]
|
13
|
+
#{basename} list_cache
|
14
|
+
#{basename} delete_cache <cache_key> [...]
|
15
|
+
#{basename} config <config_key> [options ...]
|
16
|
+
#{basename} list_config
|
17
|
+
#{basename} init
|
18
|
+
|
19
|
+
HELP
|
20
|
+
|
21
|
+
Version = '0.0.4'
|
22
|
+
|
23
|
+
options = {}
|
24
|
+
create_cache = false
|
25
|
+
|
26
|
+
begin
|
27
|
+
OptionParser.new(help_message) do |opt|
|
28
|
+
opt.on('-s NUM', '--start NUM', Integer, 'Set the starting number.') do |v|
|
29
|
+
options[:start] = v
|
30
|
+
end
|
31
|
+
opt.on('-i NUM', '--digit NUM', Integer, 'Set the digit of number.') do |v|
|
32
|
+
options[:digit] = v
|
33
|
+
end
|
34
|
+
opt.on('-d STR', '--delimiter STR', String, 'Set the delimiter string: number or time.') do |v|
|
35
|
+
options[:delimiter] = v
|
36
|
+
end
|
37
|
+
opt.on('-t TYPE', '--type TYPE', String, 'Set the type of additional part.') do |v|
|
38
|
+
options[:type] = v.intern
|
39
|
+
end
|
40
|
+
opt.on('-f STR', '--format STR', String, 'Set the format string.') do |v|
|
41
|
+
options[:format] = v
|
42
|
+
end
|
43
|
+
opt.on('-p POS', '--position POS', String, 'Set the position of addition: prefix, suffix, or middle.') do |v|
|
44
|
+
options[:position] = v.intern
|
45
|
+
end
|
46
|
+
opt.on('-P TYPE', '--path TYPE', String, 'Set the type of path: absolute or relative.') do |v|
|
47
|
+
options[:type] = v.intern
|
48
|
+
end
|
49
|
+
opt.on('-e STR', '--extension STR', String, 'Set the extension string.') do |v|
|
50
|
+
options[:extension] = v
|
51
|
+
end
|
52
|
+
opt.on('-a STR', '--add STR', String, 'Change the behavior of addition: always, auto, or prohibit.') do |v|
|
53
|
+
options[:add] = v.intern
|
54
|
+
end
|
55
|
+
opt.on('-D', '--directory', 'Create parant directory.') do |v|
|
56
|
+
options[:directory] = true
|
57
|
+
end
|
58
|
+
opt.on('-c KEY', '--cache KEY', String, 'Create cache for command "new".') do |v|
|
59
|
+
create_cache = v
|
60
|
+
end
|
61
|
+
opt.parse!(ARGV)
|
62
|
+
end
|
63
|
+
|
64
|
+
raise OptionParser::InvalidArgument if ARGV.size == 0
|
65
|
+
|
66
|
+
cmd = ARGV[0]
|
67
|
+
args = ARGV[1..-1]
|
68
|
+
manage = FileName.manage
|
69
|
+
|
70
|
+
case cmd
|
71
|
+
when 'new'
|
72
|
+
raise OptionParser::InvalidArgument if args.size == 0
|
73
|
+
fname = FileName.new(*args, options)
|
74
|
+
if create_cache
|
75
|
+
manage.save_cache(create_cache, fname)
|
76
|
+
else
|
77
|
+
$stdout.puts fname.create
|
78
|
+
end
|
79
|
+
exit(0)
|
80
|
+
when 'cache'
|
81
|
+
raise OptionParser::InvalidArgument if args.size != 1
|
82
|
+
key = args[0]
|
83
|
+
if fname = manage.load_cache(key)
|
84
|
+
$stdout.puts fname.create
|
85
|
+
manage.save_cache(key, fname)
|
86
|
+
exit(0)
|
87
|
+
end
|
88
|
+
exit(1)
|
89
|
+
when 'list_cache'
|
90
|
+
manage.list_cache.each do |name|
|
91
|
+
$stdout.puts name
|
92
|
+
end
|
93
|
+
exit(0)
|
94
|
+
when 'delete_cache'
|
95
|
+
raise OptionParser::InvalidArgument if args.size == 0
|
96
|
+
args.each do |key|
|
97
|
+
manage.delete_cache(key)
|
98
|
+
end
|
99
|
+
exit(0)
|
100
|
+
when 'config'
|
101
|
+
raise OptionParser::InvalidArgument if args.size <= 1
|
102
|
+
if fname = FileName.configuration(*args)
|
103
|
+
if create_cache
|
104
|
+
manage.save_cache(create_cache, fname)
|
105
|
+
else
|
106
|
+
$stdout.puts fname.create(options)
|
107
|
+
end
|
108
|
+
exit(0)
|
109
|
+
end
|
110
|
+
exit(1)
|
111
|
+
when 'list_config'
|
112
|
+
manage.list_configuration.each do |name|
|
113
|
+
$stdout.puts name
|
114
|
+
end
|
115
|
+
exit(0)
|
116
|
+
when 'init'
|
117
|
+
manage.save_configuration_example
|
118
|
+
exit(0)
|
119
|
+
end
|
120
|
+
rescue OptionParser::InvalidOption
|
121
|
+
$stderr.print <<MES
|
122
|
+
error: Invalid Option
|
123
|
+
#{help_message}
|
124
|
+
MES
|
125
|
+
exit(2)
|
126
|
+
rescue OptionParser::InvalidArgument
|
127
|
+
$stderr.print <<MES
|
128
|
+
error: Invalid Argument
|
129
|
+
#{help_message}
|
130
|
+
MES
|
131
|
+
exit(2)
|
132
|
+
end
|
data/filename.gemspec
CHANGED
@@ -5,13 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{filename}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Takayuki YAMAGUCHI"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-04-02}
|
13
13
|
s.description = %q{Create filename with sequential number or time string that is not duplicated.}
|
14
14
|
s.email = %q{d@ytak.info}
|
15
|
+
s.executables = ["filename-create"]
|
15
16
|
s.extra_rdoc_files = [
|
16
17
|
"LICENSE.txt",
|
17
18
|
"README.md"
|
@@ -25,17 +26,22 @@ Gem::Specification.new do |s|
|
|
25
26
|
"README.md",
|
26
27
|
"Rakefile",
|
27
28
|
"VERSION",
|
29
|
+
"bin/filename-create",
|
28
30
|
"filename.gemspec",
|
29
31
|
"lib/filename.rb",
|
32
|
+
"spec/cache_spec.rb",
|
33
|
+
"spec/configuration_spec.rb",
|
30
34
|
"spec/filename_spec.rb",
|
31
35
|
"spec/spec_helper.rb"
|
32
36
|
]
|
33
37
|
s.homepage = %q{http://github.com/ytaka/filename}
|
34
38
|
s.licenses = ["GPLv3"]
|
35
39
|
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version = %q{1.
|
40
|
+
s.rubygems_version = %q{1.7.1}
|
37
41
|
s.summary = %q{Filename generator}
|
38
42
|
s.test_files = [
|
43
|
+
"spec/cache_spec.rb",
|
44
|
+
"spec/configuration_spec.rb",
|
39
45
|
"spec/filename_spec.rb",
|
40
46
|
"spec/spec_helper.rb"
|
41
47
|
]
|
data/lib/filename.rb
CHANGED
@@ -47,11 +47,17 @@ class FileName
|
|
47
47
|
#
|
48
48
|
# [:directory]
|
49
49
|
# Default value of the option of FileName#create.
|
50
|
-
def initialize(basepath,
|
50
|
+
def initialize(basepath, *rest)
|
51
|
+
if Hash === rest[-1]
|
52
|
+
opts = rest.delete_at(-1)
|
53
|
+
else
|
54
|
+
opts = {}
|
55
|
+
end
|
56
|
+
path = File.join(basepath, *rest)
|
51
57
|
if opts[:path] == :relative
|
52
|
-
@basepath =
|
58
|
+
@basepath = path
|
53
59
|
else
|
54
|
-
@basepath = File.expand_path(
|
60
|
+
@basepath = File.expand_path(path)
|
55
61
|
end
|
56
62
|
@number = opts[:start] || 0
|
57
63
|
@digit = opts[:digit] || 2
|
@@ -186,10 +192,122 @@ class FileName
|
|
186
192
|
end
|
187
193
|
end
|
188
194
|
|
195
|
+
# If @format is a Proc object, we can not dump a FileName object.
|
196
|
+
def dump
|
197
|
+
Marshal.dump(self)
|
198
|
+
end
|
199
|
+
|
200
|
+
def save_to(path)
|
201
|
+
open(path, 'w') do |f|
|
202
|
+
f.print dump
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def self.load(str)
|
207
|
+
Marshal.load(str)
|
208
|
+
end
|
209
|
+
|
210
|
+
def self.load_from(path)
|
211
|
+
self.load(File.read(path))
|
212
|
+
end
|
213
|
+
|
189
214
|
# Executing FileName.new and FileName.create, we get new filename.
|
190
215
|
# The same options of FileName.new are available.
|
191
|
-
def self.create(basepath,
|
192
|
-
self.new(basepath,
|
216
|
+
def self.create(basepath, *rest)
|
217
|
+
self.new(basepath, *rest).create
|
218
|
+
end
|
219
|
+
|
220
|
+
@@manage = nil
|
221
|
+
|
222
|
+
def self.manage
|
223
|
+
@@manage = FileName::Manage.new unless @@manage
|
224
|
+
@@manage
|
225
|
+
end
|
226
|
+
|
227
|
+
def self.configuration(*args)
|
228
|
+
self.manage.configuration(*args)
|
229
|
+
end
|
230
|
+
|
231
|
+
class Manage
|
232
|
+
@@filename_directory = File.join(ENV['HOME'], '.filename_gem')
|
233
|
+
@@configuration = nil
|
234
|
+
|
235
|
+
CONF_DIRECTORY = 'conf'
|
236
|
+
CACHE_DIRECTORY = 'cache'
|
237
|
+
SAMPLE_CONF_NAME = 'process.rb.example'
|
238
|
+
|
239
|
+
def configuration_directory
|
240
|
+
File.join(@@filename_directory, CONF_DIRECTORY)
|
241
|
+
end
|
242
|
+
|
243
|
+
def cache_directory(*file)
|
244
|
+
File.join(@@filename_directory, CACHE_DIRECTORY, *file)
|
245
|
+
end
|
246
|
+
|
247
|
+
def load_configuration
|
248
|
+
@@configuration = {}
|
249
|
+
# old_safe_level = $SAFE
|
250
|
+
# $SAFE = 2
|
251
|
+
Dir.glob(configuration_directory + '/*.rb') do |path|
|
252
|
+
if key = path.match(/\/([^\/]*)\.rb$/)[1]
|
253
|
+
@@configuration[key.intern] = eval(File.read(path))
|
254
|
+
end
|
255
|
+
end
|
256
|
+
# $SAFE = old_safe_level
|
257
|
+
end
|
258
|
+
|
259
|
+
def configuration(key, basepath, *rest)
|
260
|
+
load_configuration unless @@configuration
|
261
|
+
if opts = @@configuration[key.intern]
|
262
|
+
return FileName.new(basepath, *rest, opts)
|
263
|
+
end
|
264
|
+
return nil
|
265
|
+
end
|
266
|
+
|
267
|
+
def list_configuration
|
268
|
+
Dir.glob(configuration_directory + "/*.rb").map { |s| File.basename(s).sub(/\.rb$/, '') }.sort
|
269
|
+
end
|
270
|
+
|
271
|
+
def save_cache(key, filename)
|
272
|
+
dir = cache_directory
|
273
|
+
FileUtils.mkdir_p(dir)
|
274
|
+
filename.save_to(File.join(dir, key))
|
275
|
+
end
|
276
|
+
|
277
|
+
def load_cache(key)
|
278
|
+
path = cache_directory(key)
|
279
|
+
if File.exist?(path)
|
280
|
+
return FileName.load_from(path)
|
281
|
+
end
|
282
|
+
return nil
|
283
|
+
end
|
284
|
+
|
285
|
+
def delete_cache(key)
|
286
|
+
path = cache_directory(key)
|
287
|
+
if File.exist?(path)
|
288
|
+
FileUtils.rm(path)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
def list_cache
|
293
|
+
Dir.glob(cache_directory + "/*").map { |s| File.basename(s) }.sort
|
294
|
+
end
|
295
|
+
|
296
|
+
def save_configuration_example
|
297
|
+
dir = configuration_directory
|
298
|
+
FileUtils.mkdir_p(dir)
|
299
|
+
open(File.join(dir, SAMPLE_CONF_NAME), 'w') do |f|
|
300
|
+
f.print <<SAMPLE
|
301
|
+
{
|
302
|
+
:type => :number,
|
303
|
+
:position => :middle,
|
304
|
+
:path => :relative,
|
305
|
+
:format => lambda { |n| sprintf("%05d_%02d", Process.pid, n) }
|
306
|
+
}
|
307
|
+
SAMPLE
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
193
311
|
end
|
194
312
|
|
195
313
|
end
|
data/spec/cache_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe FileName do
|
4
|
+
before(:all) do
|
5
|
+
@filename = FileName.new('abc', 'def.txt')
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should dump and load" do
|
9
|
+
s = @filename.dump
|
10
|
+
s.should be_an_instance_of String
|
11
|
+
FileName.load(s).should be_an_instance_of FileName
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe FileName do
|
4
|
+
context "when saving example of configuration" do
|
5
|
+
before(:all) do
|
6
|
+
@dir = File.join(File.dirname(__FILE__), 'conf.tmp')
|
7
|
+
FileName::Manage.class_variable_set(:@@filename_directory, @dir)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should create directory" do
|
11
|
+
FileName::Manage.new.save_configuration_example
|
12
|
+
File.exist?(@dir).should be_true
|
13
|
+
conf_dir = File.join(@dir, FileName::Manage::CONF_DIRECTORY)
|
14
|
+
File.exist?(conf_dir).should be_true
|
15
|
+
Dir.entries(conf_dir).should include(FileName::Manage::SAMPLE_CONF_NAME)
|
16
|
+
end
|
17
|
+
|
18
|
+
after(:all) do
|
19
|
+
FileUtils.rm_r(@dir) if File.exist?(@dir)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when loading configuration" do
|
24
|
+
before(:all) do
|
25
|
+
@dir = File.join(File.dirname(__FILE__), 'conf.tmp')
|
26
|
+
FileName::Manage.class_variable_set(:@@filename_directory, @dir)
|
27
|
+
FileName::Manage.new.save_configuration_example
|
28
|
+
path = File.join(@dir, FileName::Manage::CONF_DIRECTORY, FileName::Manage::SAMPLE_CONF_NAME)
|
29
|
+
FileUtils.mv(path, path.sub(/\.example$/, ''))
|
30
|
+
@conf = File.basename(path.sub(/\.rb\.example$/, ''))
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return FileName" do
|
34
|
+
FileName.configuration(@conf, 'base.path').should be_an_instance_of(FileName)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return nil" do
|
38
|
+
FileName.configuration(:not_exist, 'base.path').should be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
after(:all) do
|
42
|
+
FileUtils.rm_r(@dir) if File.exist?(@dir)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/spec/filename_spec.rb
CHANGED
@@ -129,6 +129,24 @@ describe FileName do
|
|
129
129
|
check_create_directory(filename, basename, path)
|
130
130
|
end
|
131
131
|
|
132
|
+
it "should conbine a few arguments" do
|
133
|
+
filename = FileName.new('abc', 'def', 'ghi')
|
134
|
+
filename.create.should == File.expand_path('abc/def/ghi')
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should conbine a few arguments with hash option" do
|
138
|
+
filename = FileName.new('abc', 'def', 'ghi', :path => :relative, :add => :prohibit)
|
139
|
+
filename.create.should == 'abc/def/ghi'
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should conbine a few arguments on FileName#create" do
|
143
|
+
FileName.create('abc', 'def', 'ghi').should == File.expand_path('abc/def/ghi')
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should conbine a few arguments on FileName#create with hash option" do
|
147
|
+
FileName.create('abc', 'def', 'ghi', :path => :relative, :add => :prohibit).should == 'abc/def/ghi'
|
148
|
+
end
|
149
|
+
|
132
150
|
context "when we set the default options of FileName#create" do
|
133
151
|
NUMBER_TEST_REPEAT = 3
|
134
152
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: filename
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Takayuki YAMAGUCHI
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-04-02 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: rspec
|
@@ -59,8 +58,8 @@ dependencies:
|
|
59
58
|
version_requirements: *id004
|
60
59
|
description: Create filename with sequential number or time string that is not duplicated.
|
61
60
|
email: d@ytak.info
|
62
|
-
executables:
|
63
|
-
|
61
|
+
executables:
|
62
|
+
- filename-create
|
64
63
|
extensions: []
|
65
64
|
|
66
65
|
extra_rdoc_files:
|
@@ -75,11 +74,13 @@ files:
|
|
75
74
|
- README.md
|
76
75
|
- Rakefile
|
77
76
|
- VERSION
|
77
|
+
- bin/filename-create
|
78
78
|
- filename.gemspec
|
79
79
|
- lib/filename.rb
|
80
|
+
- spec/cache_spec.rb
|
81
|
+
- spec/configuration_spec.rb
|
80
82
|
- spec/filename_spec.rb
|
81
83
|
- spec/spec_helper.rb
|
82
|
-
has_rdoc: true
|
83
84
|
homepage: http://github.com/ytaka/filename
|
84
85
|
licenses:
|
85
86
|
- GPLv3
|
@@ -93,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
94
|
requirements:
|
94
95
|
- - ">="
|
95
96
|
- !ruby/object:Gem::Version
|
96
|
-
hash:
|
97
|
+
hash: -4477579115920714388
|
97
98
|
segments:
|
98
99
|
- 0
|
99
100
|
version: "0"
|
@@ -106,10 +107,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
107
|
requirements: []
|
107
108
|
|
108
109
|
rubyforge_project:
|
109
|
-
rubygems_version: 1.
|
110
|
+
rubygems_version: 1.7.1
|
110
111
|
signing_key:
|
111
112
|
specification_version: 3
|
112
113
|
summary: Filename generator
|
113
114
|
test_files:
|
115
|
+
- spec/cache_spec.rb
|
116
|
+
- spec/configuration_spec.rb
|
114
117
|
- spec/filename_spec.rb
|
115
118
|
- spec/spec_helper.rb
|