defoker 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/README.md +35 -0
- data/bin/defoker +17 -6
- data/lib/date_base_name.rb +6 -6
- data/lib/defoker/version.rb +1 -1
- data/lib/defoker_core.rb +43 -30
- data/lib/defoker_dsl.rb +2 -1
- data/lib/defoker_dsl_model.rb +4 -2
- data/spec/date_base_name_spec.rb +482 -482
- data/spec/defoker_core_spec.rb +21 -33
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34c984f9722b99072fdbb1315c5d155e581d0deb
|
4
|
+
data.tar.gz: 988dd38c8690bd0381f215b5c795f006a395b7a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d67be9576e0ea9f93a1dde73fa5b85b85c7639760b49d4e507c5c6ea71a8c829c6b15e8d998adde2e495d218ca34c2c58e17093e5a1c58b5073117057dbb29ef
|
7
|
+
data.tar.gz: 0332c256d22c4f09b79a1579451a914b065d0b5ec21eab62d3f4dc01f0874c9d796bbcaf908ea7327b004f2787855285018b66e13816733fff20ab5305895851
|
data/README.md
CHANGED
@@ -339,7 +339,42 @@ $ ls -F | grep /
|
|
339
339
|
201410_monthly_report_hoge/
|
340
340
|
~~~
|
341
341
|
|
342
|
+
* edit Defokerfile with callback.(type = previous_month, base = monthly_report)
|
343
|
+
|
344
|
+
~~~bash
|
345
|
+
$ cat Defokerfile
|
346
|
+
type :previous_month
|
347
|
+
base 'monthly_report'
|
348
|
+
callback ->(dir) {
|
349
|
+
p dir
|
350
|
+
File.open("#{dir}/template.txt", 'w:utf-8') { |e|e.puts "template for #{dir}" }
|
351
|
+
File.open("#{dir}/template.rb'" 'w:utf-8') { |e|e.puts "puts '#{dir}'" }
|
352
|
+
}
|
353
|
+
|
354
|
+
$ tree
|
355
|
+
# execute at 20141006
|
356
|
+
$ defoker rule -a hige
|
357
|
+
"20141006_hige"
|
358
|
+
# execute at 20141007
|
359
|
+
$ defoker rule -a hoge
|
360
|
+
"20141007_hoge"
|
361
|
+
# execute at 20141008
|
362
|
+
$ defoker rule -a hage
|
363
|
+
"20141008_hage"
|
364
|
+
$ tree
|
365
|
+
┣ 20141006_hige
|
366
|
+
┃ ┣ template.rb
|
367
|
+
┃ ┗ template.txt
|
368
|
+
┣ 20141007_hoge
|
369
|
+
┃ ┣ template.rb
|
370
|
+
┃ ┗ template.txt
|
371
|
+
┗ 20141008_hage
|
372
|
+
┣ template.rb
|
373
|
+
┗ template.txt
|
374
|
+
~~~
|
375
|
+
|
342
376
|
## History
|
377
|
+
* version 0.0.6 : Add callback in Defokerfile.
|
343
378
|
* version 0.0.5 : Fix typo in Defokerfile Template.
|
344
379
|
* version 0.0.4 : Add init/rule command for rule-output.
|
345
380
|
* version 0.0.3 : Fix typo in gemspec.
|
data/bin/defoker
CHANGED
@@ -6,6 +6,7 @@ require 'defoker/version'
|
|
6
6
|
require 'thor'
|
7
7
|
require 'fileutils'
|
8
8
|
|
9
|
+
# rubocop:disable ClassLength
|
9
10
|
module Defoker
|
10
11
|
# = Defoker CLI
|
11
12
|
class CLI < Thor
|
@@ -14,7 +15,7 @@ module Defoker
|
|
14
15
|
|
15
16
|
desc 'init', 'generate Defokerfile template'
|
16
17
|
def init
|
17
|
-
Defoker::Core.
|
18
|
+
Defoker::Core.init
|
18
19
|
exit(true)
|
19
20
|
rescue
|
20
21
|
exit(false)
|
@@ -98,7 +99,14 @@ module Defoker
|
|
98
99
|
option :additional, aliases: 'a'
|
99
100
|
desc 'rule', 'create folder by Defokerfile''s rule.'
|
100
101
|
def rule
|
101
|
-
|
102
|
+
additional = options[:additional] ? options[:additional] : ''
|
103
|
+
dir, callback = Defoker::Core.rule(additional: additional)
|
104
|
+
FileUtils.mkdir_p(dir)
|
105
|
+
callback[dir] unless callback.nil?
|
106
|
+
exit(true)
|
107
|
+
rescue => e
|
108
|
+
STDERR.puts(e.backtrace)
|
109
|
+
exit(false)
|
102
110
|
end
|
103
111
|
|
104
112
|
desc 'version', 'version'
|
@@ -109,23 +117,26 @@ module Defoker
|
|
109
117
|
private
|
110
118
|
def defoker_core_single_caller(method_name)
|
111
119
|
additional = options[:additional] ? options[:additional] : ''
|
112
|
-
dir = Defoker::Core.
|
120
|
+
dir = Defoker::Core.send(method_name, additional: additional)
|
113
121
|
FileUtils.mkdir_p(dir)
|
114
122
|
exit(true)
|
115
|
-
rescue
|
123
|
+
rescue => e
|
124
|
+
STDERR.puts(e.backtrace)
|
116
125
|
exit(false)
|
117
126
|
end
|
118
127
|
|
119
128
|
def defoker_core_multi_caller(date, method_name)
|
120
129
|
count = options[:count] ? options[:count].to_i : 3
|
121
130
|
additional = options[:additional] ? options[:additional] : ''
|
122
|
-
dirs = Defoker::Core.
|
131
|
+
dirs = Defoker::Core.send(method_name, date, count: count, additional: additional)
|
123
132
|
FileUtils.mkdir_p(dirs)
|
124
133
|
exit(true)
|
125
|
-
rescue
|
134
|
+
rescue => e
|
135
|
+
STDERR.puts(e.backtrace)
|
126
136
|
exit(false)
|
127
137
|
end
|
128
138
|
end
|
129
139
|
end
|
130
140
|
|
131
141
|
Defoker::CLI.start(ARGV)
|
142
|
+
# rubocop:enable ClassLength
|
data/lib/date_base_name.rb
CHANGED
@@ -19,7 +19,7 @@ module Defoker
|
|
19
19
|
# If you want to get only date, you can omit this option.
|
20
20
|
# @return [String] date-based formated name
|
21
21
|
#
|
22
|
-
def to_yyyymmdd(date, additional: '')
|
22
|
+
def self.to_yyyymmdd(date, additional: '')
|
23
23
|
DateBaseNameValidators.validate_date(date)
|
24
24
|
v = date.strftime('%Y%m%d')
|
25
25
|
return v if additional.empty?
|
@@ -45,7 +45,7 @@ module Defoker
|
|
45
45
|
# @param [String] additional additional text.
|
46
46
|
# If you want count get only date, you can omit this option.
|
47
47
|
# @return [Array(String)] date-based formated names
|
48
|
-
def to_yyyymmdd_list(day, count: nil, additional: '')
|
48
|
+
def self.to_yyyymmdd_list(day, count: nil, additional: '')
|
49
49
|
DateBaseNameValidators.validate_date(day)
|
50
50
|
count.times.with_object([]) do |i, memo|
|
51
51
|
memo << to_yyyymmdd(day + i, additional: additional)
|
@@ -66,7 +66,7 @@ module Defoker
|
|
66
66
|
# If you want to get only month, you can omit this option.
|
67
67
|
# @return [String] month-based formated name
|
68
68
|
#
|
69
|
-
def to_yyyymm(month, additional: '')
|
69
|
+
def self.to_yyyymm(month, additional: '')
|
70
70
|
DateBaseNameValidators.validate_date(month)
|
71
71
|
v = month.strftime('%Y%m')
|
72
72
|
return v if additional.empty?
|
@@ -92,7 +92,7 @@ module Defoker
|
|
92
92
|
# @param [String] additional additional text.
|
93
93
|
# If you want to get only month, you can omit this option.
|
94
94
|
# @return [Array(String)] month-based formated names
|
95
|
-
def to_yyyymm_list(month, count: 3, additional: '')
|
95
|
+
def self.to_yyyymm_list(month, count: 3, additional: '')
|
96
96
|
DateBaseNameValidators.validate_date(month)
|
97
97
|
count.times.with_object([]) do |i, memo|
|
98
98
|
memo << to_yyyymm(month >> i, additional: additional)
|
@@ -113,7 +113,7 @@ module Defoker
|
|
113
113
|
# If you want to get only year, you can omit this option.
|
114
114
|
# @return [String] year-based formated name
|
115
115
|
#
|
116
|
-
def to_yyyy(year, additional: '')
|
116
|
+
def self.to_yyyy(year, additional: '')
|
117
117
|
DateBaseNameValidators.validate_date(year)
|
118
118
|
v = year.strftime('%Y')
|
119
119
|
return v if additional.empty?
|
@@ -139,7 +139,7 @@ module Defoker
|
|
139
139
|
# @param [String] additional additional text.
|
140
140
|
# If you want to get only year, you can omit this option.
|
141
141
|
# @return [Array(String)] year-based formated names
|
142
|
-
def to_yyyy_list(year, count: 3, additional: '')
|
142
|
+
def self.to_yyyy_list(year, count: 3, additional: '')
|
143
143
|
DateBaseNameValidators.validate_date(year)
|
144
144
|
count.times.with_object([]) do |i, memo|
|
145
145
|
memo << to_yyyy(year >> (i * 12), additional: additional)
|
data/lib/defoker/version.rb
CHANGED
data/lib/defoker_core.rb
CHANGED
@@ -14,16 +14,28 @@ module Defoker
|
|
14
14
|
# example
|
15
15
|
# type :this_month
|
16
16
|
type :today
|
17
|
+
|
17
18
|
# base is optional.
|
18
19
|
# example
|
19
20
|
# base 'ruby'
|
20
21
|
base ''
|
22
|
+
|
23
|
+
# callback is ruby's callback(it will call after create folder).
|
24
|
+
# Block parameter is foldername string.
|
25
|
+
# If you want some action after create folder,
|
26
|
+
# comment out following lines and edit your logic.
|
27
|
+
|
28
|
+
# callback ->(dir) {
|
29
|
+
# p dir
|
30
|
+
# # create File in your dir
|
31
|
+
# File.open("\#{dir}/some_template_file.txt", "w:utf-8") { |e|e.puts 'some template'}
|
32
|
+
# }
|
21
33
|
EOS
|
22
34
|
|
23
35
|
# Defoker Core
|
24
36
|
class Core
|
25
37
|
# Generate Defokerfile template
|
26
|
-
def init
|
38
|
+
def self.init
|
27
39
|
File.open(DEFOKERFILE_PATH, 'w:utf-8') { |f|f.puts DEFOKERFILE_TEMPLATE }
|
28
40
|
end
|
29
41
|
|
@@ -31,24 +43,24 @@ base ''
|
|
31
43
|
#
|
32
44
|
# @param [String] additional additional name
|
33
45
|
# @return [String] today folder name
|
34
|
-
def today(additional: '')
|
35
|
-
DateBaseName.
|
46
|
+
def self.today(additional: '')
|
47
|
+
DateBaseName.to_yyyymmdd(Date.today, additional: additional)
|
36
48
|
end
|
37
49
|
|
38
50
|
# Get tomorrow folder name
|
39
51
|
#
|
40
52
|
# @param [String] additional additional name
|
41
53
|
# @return [String] tomorrow folder name
|
42
|
-
def tomorrow(additional: '')
|
43
|
-
DateBaseName.
|
54
|
+
def self.tomorrow(additional: '')
|
55
|
+
DateBaseName.to_yyyymmdd(Date.today + 1, additional: additional)
|
44
56
|
end
|
45
57
|
|
46
58
|
# Get yesterday folder name
|
47
59
|
#
|
48
60
|
# @param [String] additional additional name
|
49
61
|
# @return [String] yesterday folder name
|
50
|
-
def yesterday(additional: '')
|
51
|
-
DateBaseName.
|
62
|
+
def self.yesterday(additional: '')
|
63
|
+
DateBaseName.to_yyyymmdd(Date.today - 1, additional: additional)
|
52
64
|
end
|
53
65
|
|
54
66
|
# Get days folder name list
|
@@ -56,33 +68,33 @@ base ''
|
|
56
68
|
# @param [String] date yyyymmdd format string
|
57
69
|
# @param [String] additional additional name
|
58
70
|
# @return [String] yesterday folder name
|
59
|
-
def days(date, count: 3, additional: '')
|
71
|
+
def self.days(date, count: 3, additional: '')
|
60
72
|
date = Date.new(date[0..3].to_i, date[4..5].to_i, date[6..7].to_i)
|
61
|
-
DateBaseName.
|
73
|
+
DateBaseName.to_yyyymmdd_list(date, count: count, additional: additional)
|
62
74
|
end
|
63
75
|
|
64
76
|
# Get this month folder name
|
65
77
|
#
|
66
78
|
# @param [String] additional additional name
|
67
79
|
# @return [String] this month folder name
|
68
|
-
def this_month(additional: '')
|
69
|
-
DateBaseName.
|
80
|
+
def self.this_month(additional: '')
|
81
|
+
DateBaseName.to_yyyymm(Date.today, additional: additional)
|
70
82
|
end
|
71
83
|
|
72
84
|
# Get next month folder name
|
73
85
|
#
|
74
86
|
# @param [String] additional additional name
|
75
87
|
# @return [String] next month folder name
|
76
|
-
def next_month(additional: '')
|
77
|
-
DateBaseName.
|
88
|
+
def self.next_month(additional: '')
|
89
|
+
DateBaseName.to_yyyymm(Date.today >> 1, additional: additional)
|
78
90
|
end
|
79
91
|
|
80
92
|
# Get previous month folder name
|
81
93
|
#
|
82
94
|
# @param [String] additional additional name
|
83
95
|
# @return [String] previous month folder name
|
84
|
-
def previous_month(additional: '')
|
85
|
-
DateBaseName.
|
96
|
+
def self.previous_month(additional: '')
|
97
|
+
DateBaseName.to_yyyymm(Date.today << 1, additional: additional)
|
86
98
|
end
|
87
99
|
|
88
100
|
# Get months folder name list
|
@@ -90,33 +102,33 @@ base ''
|
|
90
102
|
# @param [String] month yyyymmdd format string
|
91
103
|
# @param [String] additional additional name
|
92
104
|
# @return [String] yesterday folder name
|
93
|
-
def months(month, count: 3, additional: '')
|
105
|
+
def self.months(month, count: 3, additional: '')
|
94
106
|
month = Date.new(month[0..3].to_i, month[4..5].to_i)
|
95
|
-
DateBaseName.
|
107
|
+
DateBaseName.to_yyyymm_list(month, count: count, additional: additional)
|
96
108
|
end
|
97
109
|
|
98
110
|
# Get this year folder name
|
99
111
|
#
|
100
112
|
# @param [String] additional additional name
|
101
113
|
# @return [String] this year folder name
|
102
|
-
def this_year(additional: '')
|
103
|
-
DateBaseName.
|
114
|
+
def self.this_year(additional: '')
|
115
|
+
DateBaseName.to_yyyy(Date.today, additional: additional)
|
104
116
|
end
|
105
117
|
|
106
118
|
# Get next year folder name
|
107
119
|
#
|
108
120
|
# @param [String] additional additional name
|
109
121
|
# @return [String] next year folder name
|
110
|
-
def next_year(additional: '')
|
111
|
-
DateBaseName.
|
122
|
+
def self.next_year(additional: '')
|
123
|
+
DateBaseName.to_yyyy(Date.today >> 12, additional: additional)
|
112
124
|
end
|
113
125
|
|
114
126
|
# Get previous year folder name
|
115
127
|
#
|
116
128
|
# @param [String] additional additional name
|
117
129
|
# @return [String] previous year folder name
|
118
|
-
def previous_year(additional: '')
|
119
|
-
DateBaseName.
|
130
|
+
def self.previous_year(additional: '')
|
131
|
+
DateBaseName.to_yyyy(Date.today << 12, additional: additional)
|
120
132
|
end
|
121
133
|
|
122
134
|
# Get years folder name list
|
@@ -124,25 +136,25 @@ base ''
|
|
124
136
|
# @param [String] year yyyymmdd format string
|
125
137
|
# @param [String] additional additional name
|
126
138
|
# @return [String] yesterday folder name
|
127
|
-
def years(year, count: 3, additional: '')
|
139
|
+
def self.years(year, count: 3, additional: '')
|
128
140
|
year = Date.new(year[0..3].to_i)
|
129
|
-
DateBaseName.
|
141
|
+
DateBaseName.to_yyyy_list(year, count: count, additional: additional)
|
130
142
|
end
|
131
143
|
|
132
144
|
# Create folder by Defokerfile's rule.
|
133
145
|
#
|
134
146
|
# @param [String] additional additional name
|
135
147
|
# @return [String] folder name
|
136
|
-
def rule(additional: '')
|
148
|
+
def self.rule(additional: '')
|
137
149
|
dsl = read_dsl
|
138
150
|
base = dsl.defoker.base
|
151
|
+
callback = dsl.defoker.callback
|
139
152
|
adds = [base, additional].reject(&:empty?)
|
140
|
-
send(dsl.defoker.type, additional: adds.join('_'))
|
153
|
+
dir = send(dsl.defoker.type, additional: adds.join('_'))
|
154
|
+
[dir, callback]
|
141
155
|
end
|
142
156
|
|
143
|
-
|
144
|
-
|
145
|
-
def read_dsl
|
157
|
+
def self.read_dsl
|
146
158
|
dsl = Defoker::Dsl.new
|
147
159
|
unless File.exist?(DEFOKERFILE_PATH)
|
148
160
|
fail DslNotExistError, "#{DEFOKERFILE_PATH} not exist"
|
@@ -151,6 +163,7 @@ base ''
|
|
151
163
|
dsl.instance_eval(src)
|
152
164
|
dsl
|
153
165
|
end
|
166
|
+
private_class_method :read_dsl
|
154
167
|
end
|
155
168
|
|
156
169
|
class DslNotExistError < StandardError; end
|
data/lib/defoker_dsl.rb
CHANGED
@@ -7,7 +7,7 @@ module Defoker
|
|
7
7
|
attr_accessor :defoker
|
8
8
|
|
9
9
|
# String Define
|
10
|
-
[:type, :base].each do |f|
|
10
|
+
[:type, :base, :callback].each do |f|
|
11
11
|
define_method f do |value|
|
12
12
|
@defoker.send("#{f}=", value)
|
13
13
|
end
|
@@ -17,6 +17,7 @@ module Defoker
|
|
17
17
|
@defoker = Defoker::DslModel.new
|
18
18
|
@defoker.type = ''
|
19
19
|
@defoker.base = ''
|
20
|
+
@defoker.callback = nil
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|