-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRakefile-ext.rb
142 lines (119 loc) · 3.42 KB
/
Rakefile-ext.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
namespace :report do
TXT_DIR = "#{Dir.pwd}/works/"
OUTPUT_DIR = "#{Dir.pwd}/reports/"
OUTPUT_FILE = OUTPUT_DIR + "report_#{Time.now.strftime('%Y%m%d')}.txt"
FILE_EXT = '.txt'
WORKS = [
{name: 'desgin' , label: '設計'},
{name: 'code' , label: 'コーディング'},
{name: 'test' , label: 'テスト'}
]
TXT_FILES = WORKS.map {|m| TXT_DIR + m[:name] + FILE_EXT}
desc '一日の作業記録を作成する'
task :daily_report => [:check, :report] do
puts '一日の作業記録を作成しました'
end
task :check => [:create_output_directory,:create_files] do
end
task :create_output_directory => TXT_DIR do
end
directory TXT_DIR
task :create_output_directory => OUTPUT_DIR do
end
directory OUTPUT_DIR
task :create_files => TXT_FILES do
end
TXT_FILES.each do |file_name|
file file_name do
puts "#{file_name}がありません"
puts "#{file_name}を作成します"
sh "touch #{file_name}" # Windowsの場合は "type null > #{file_name}" に置き換えてください
end
end
task :report => [:create_output_directory] do
date_str = Time.now.strftime('%Y/%m/%d')
output_str = "#{date_str}の作業記録\n\n"
WORKS.each do |work|
file_name = work[:name] + FILE_EXT
full_path = TXT_DIR + file_name
description = <<DESC
#{work[:label]}
#{File.read(full_path, :encoding => Encoding::UTF_8)}
DESC
output_str += description
end
File.open(OUTPUT_FILE, 'w') {|f|
f.write output_str
}
end
require 'yaml'
LOG_DIR = "#{Dir.pwd}/logs/"
LOG_EXT = '.log'
LOGS = [
{name:'daily'},
{name:'sunday'},
{name:'monday'},
{name:'tuesday'},
{name:'wednesday'},
{name:'thursday'},
{name:'friday'},
{name:'saturday'}
]
DAILY_LOG_FILE = LOG_DIR + LOGS[0][:name] + LOG_EXT
LOG_FILES = LOGS.map { |m| LOG_DIR + m[:name] + LOG_EXT}
end
namespace :log do
desc 'ログファイル生成'
task :create_log => [:create_log_directory,:create_log_file] do
description = <<DESC
desgin,8h
coding,20h
DESC
LOG_FILES.each do |log|
File.open log , 'w' do |f|
f.write description
end
end
end
task :create_log_directory => LOG_DIR do
end
directory LOG_DIR
task :create_log_file => LOG_FILES do
end
LOG_FILES.each do |log_name|
file log_name do
puts "#{log_name}がありません"
puts "#{log_name}を作成します"
sh "touch #{log_name}"
end
end
desc '今までの作業の名前と作業時間ファイルを作成'
file 'work_history.yml' => DAILY_LOG_FILE do |t|
sh "cat #{t.prerequisites.join(' ')} >> #{LOG_DIR}/#{t.name}" # Windowsの場合はcatをtypeに変更
end
rule '.yml' => '.log' do |t|
data = {}
File.open(t.source).each do |line|
data.merge!(Hash[*line.chomp!.split(/,/)])
end
File.open(t.name, 'w') {|f|
f.write data.to_yaml
}
end
desc '一週間の作業の名前と作業時間履歴ファイルを作成'
file 'weekly_work_history.yml' => LOG_FILES do |t|
sh "cat #{t.prerequisites.join(' ')} >> #{LOG_DIR}/#{t.name}"
end
end
namespace :housekeeping do
require 'rake/clean'
CLEAN.include('works/*')
CLEAN.include('logs/*')
CLOBBER.include('reports/*')
BACKUP_DIR = 'backups'
desc 'レポートをバックアップする'
task :backup => BACKUP_DIR do
sh 'cp reports/* backups/'
end
directory BACKUP_DIR
end