Skip to content

Commit bca038c

Browse files
committed
Implements dojo_event_services:upsert task
1 parent cc248ed commit bca038c

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

lib/tasks/dojo_event_services.rake

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
namespace :dojo_event_services do
2+
desc '現在のyamlファイルを元にデータベースを更新します'
3+
task upsert: :environment do
4+
puts 'Task as `dojo_event_services:upsert` starting...'
5+
6+
result = { inserted: [], updated: [], kept: [], skipped: [] }
7+
8+
list = YAML.load_file(Rails.root.join('db','dojo_event_services.yaml'))
9+
list.each do |des|
10+
unless DojoEventService.names.keys.include?(des['name'])
11+
event_names = DojoEventService.names.keys.map {|s| "`#{s}`" }
12+
result[:skipped] << [des['dojo_name'], "Not used #{event_names.join(' or ')}"]
13+
next
14+
end
15+
16+
dojo = Dojo.find_by(name: des['dojo_name'])
17+
unless dojo
18+
result[:skipped] << [des['dojo_name'], 'Not found record in `dojos` table']
19+
next
20+
end
21+
22+
insert = false
23+
unless dojo.dojo_event_service
24+
dojo.build_dojo_event_service
25+
insert = true
26+
end
27+
28+
dojo.dojo_event_service.assign_attributes(des.except('dojo_name'))
29+
if dojo.dojo_event_service.changed?
30+
changes = dojo.dojo_event_service.changes
31+
dojo.dojo_event_service.save!
32+
(insert ? result[:inserted] : result[:updated]) << [des['dojo_name'], changes]
33+
else
34+
result[:kept] << [des['dojo_name']]
35+
end
36+
end
37+
38+
# Dump result
39+
sorted = result.sort_by {|_, v| v.length }.reverse.to_h
40+
puts
41+
sorted.each do |k, v|
42+
puts "#{k.to_s.camelcase}: #{v.length}"
43+
v.each {|x| puts " #{x.join(': ')}"}
44+
end
45+
end
46+
end

0 commit comments

Comments
 (0)