takenoko 0.2.0 → 0.2.1
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/lib/takenoko.rb +2 -74
- data/lib/takenoko/mapping_generator.rb +113 -0
- data/lib/takenoko/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d15b5e30e05ec7639868f1061f6c04b340e837c
|
4
|
+
data.tar.gz: 7e31a25c1fbe2c5d850e59098bda414f5f473271
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4456cdcf48a2bf37b961b655ff9ce561c2c0fdf6cd2a3cfa708377a2d07b9086efb60c3ee303aa2feee1ece66b09d57e326240523d390d1a83925b197b2cca87
|
7
|
+
data.tar.gz: 7d9b34e206e3edb024c5e6c44174c9067656a3c397c9d8dcc6da8bd9ab4972420583d29193950507a1aba0700f7c0a969e930f2cc92db6262466aae7821fb6b2
|
data/lib/takenoko.rb
CHANGED
@@ -48,10 +48,10 @@ module Takenoko
|
|
48
48
|
mattr_accessor :folder_id
|
49
49
|
@@folder_id = nil
|
50
50
|
|
51
|
-
|
52
51
|
require 'takenoko/exporter'
|
53
52
|
require 'takenoko/google_client'
|
54
53
|
require 'takenoko/attach_helper'
|
54
|
+
require 'takenoko/mapping_generator'
|
55
55
|
|
56
56
|
def config
|
57
57
|
yield self
|
@@ -62,14 +62,8 @@ module Takenoko
|
|
62
62
|
return @@google_client
|
63
63
|
end
|
64
64
|
|
65
|
-
def check_config
|
66
|
-
raise "Must specify mapping_file or sheet_id" unless (@@mapping_file || @@sheet_id)
|
67
|
-
raise "file not found:#{@@mapping_file}" if @@mapping_file && !::File.exist?(@@mapping_file)
|
68
|
-
return true
|
69
|
-
end
|
70
|
-
|
71
65
|
def mapping_config
|
72
|
-
|
66
|
+
MappingGenerator.generate
|
73
67
|
end
|
74
68
|
|
75
69
|
def table_config(table_name)
|
@@ -110,72 +104,6 @@ module Takenoko
|
|
110
104
|
end
|
111
105
|
end
|
112
106
|
|
113
|
-
def generate_base_config
|
114
|
-
return unless check_config
|
115
|
-
|
116
|
-
conf = HashWithIndifferentAccess.new
|
117
|
-
|
118
|
-
if @@sheet_id
|
119
|
-
sheet_conf = HashWithIndifferentAccess.new({tables: {}})
|
120
|
-
google_client.spreadsheet.worksheets.each do |ws|
|
121
|
-
next if ws.title.match(/\s*#.*/)
|
122
|
-
sheet_conf[:tables][ws.title] = {
|
123
|
-
worksheet_id: ws.gid,
|
124
|
-
worksheet: ws.title
|
125
|
-
}
|
126
|
-
end
|
127
|
-
conf.deep_merge!(sheet_conf)
|
128
|
-
end
|
129
|
-
|
130
|
-
if @@mapping_file
|
131
|
-
file_conf = YAML.load_file(@@mapping_file).with_indifferent_access
|
132
|
-
raise "tables not exists" if file_conf[:tables].blank?
|
133
|
-
conf.deep_merge!(file_conf)
|
134
|
-
end
|
135
|
-
|
136
|
-
conf[:tables].compact!
|
137
|
-
conf[:tables].each do |t, v|
|
138
|
-
unless conf[:tables][t]
|
139
|
-
conf[:tables][t] = Hash.new
|
140
|
-
end
|
141
|
-
table = conf[:tables][t]
|
142
|
-
raise "#{sheet_id} cannot be blank" unless table[:sheet_id] ||= @@sheet_id
|
143
|
-
table[:worksheet] = t if table[:worksheet].blank? && table[:worksheet_id].blank?
|
144
|
-
table[:find_column] = table[:find_column] || :id
|
145
|
-
table_name = table[:table_name] = t.pluralize if table[:table_name].blank?
|
146
|
-
table[:class_name] = table[:class_name] || (table_name && table_name.singularize.camelize) || table[:table_name].singularize.camelize
|
147
|
-
[
|
148
|
-
:allow_overwrite,
|
149
|
-
:truncate_all_data,
|
150
|
-
:file_extension,
|
151
|
-
:export_file_location,
|
152
|
-
:enable_postprocess,
|
153
|
-
:postprocess_class,
|
154
|
-
:folder_id
|
155
|
-
].each do |f|
|
156
|
-
table[f] = class_variable_get("@@" + f.to_s) unless table.key?(f)
|
157
|
-
end
|
158
|
-
|
159
|
-
if table[:enable_postprocess] && table[:postprocess_class].blank?
|
160
|
-
table[:postprocess_class] = table[:class_name]
|
161
|
-
end
|
162
|
-
|
163
|
-
raise "Not support file extension: #{table[:file_extension]}" unless SUPPORTED_FILE_EXT.include?(table[:file_extension])
|
164
|
-
|
165
|
-
table[:download_location] = table[:download_location] || (@@download_location && (@@download_location +"/"+table[:table_name]))
|
166
|
-
if attach_files = table[:attach_files].present?
|
167
|
-
attach_files = table[:attach_files]
|
168
|
-
attach_files = attach_files.map do |col|
|
169
|
-
raise "column_name must be set" unless col[:column_name]
|
170
|
-
col[:download_location] = col[:download_location].present? ? table[:download_location] + "/" + col[:download_location] : table[:download_location]
|
171
|
-
raise "folder_id should be set" unless col[:folder_id] = col[:folder_id] || table[:folder_id]
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
@@mapping_config = conf
|
176
|
-
end
|
177
|
-
alias reload_config! generate_base_config
|
178
|
-
|
179
107
|
class Railtie < Rails::Railtie
|
180
108
|
railtie_name :takenoko
|
181
109
|
|
@@ -0,0 +1,113 @@
|
|
1
|
+
module Takenoko
|
2
|
+
module MappingGenerator
|
3
|
+
extend self
|
4
|
+
@@mapping_conf = nil
|
5
|
+
ALLOWED_OVERWRITE_FIELD = [
|
6
|
+
:allow_overwrite,
|
7
|
+
:truncate_all_data,
|
8
|
+
:file_extension,
|
9
|
+
:export_file_location,
|
10
|
+
:enable_postprocess,
|
11
|
+
:postprocess_class,
|
12
|
+
:folder_id
|
13
|
+
]
|
14
|
+
|
15
|
+
FILTER = [
|
16
|
+
[:set_worksheet, ->(name, table) {
|
17
|
+
table[:worksheet] = name if table[:worksheet].blank? && table[:worksheet_id].blank?
|
18
|
+
}],
|
19
|
+
|
20
|
+
[:set_sheetid, ->(name, table){
|
21
|
+
raise "#{sheet_id} cannot be blank" unless table[:sheet_id] ||= Takenoko.sheet_id
|
22
|
+
}],
|
23
|
+
|
24
|
+
[:set_find_column, ->(name, table){
|
25
|
+
table[:find_column] ||= :id
|
26
|
+
}],
|
27
|
+
|
28
|
+
[:set_tablename, ->(name, table){
|
29
|
+
table[:table_name] = name.pluralize if table[:table_name].blank?
|
30
|
+
}],
|
31
|
+
|
32
|
+
[:set_class_name, ->(name, table){
|
33
|
+
table[:class_name] ||= table[:table_name] && table[:table_name].singularize.camelize
|
34
|
+
}],
|
35
|
+
|
36
|
+
[:overwrite_global_config, ->(name, table){
|
37
|
+
ALLOWED_OVERWRITE_FIELD.each do |f|
|
38
|
+
table[f] = Takenoko.public_send(f) unless table.key?(f)
|
39
|
+
end
|
40
|
+
}],
|
41
|
+
|
42
|
+
[:set_postprocess_class, ->(name, table){
|
43
|
+
table[:postprocess_class] ||= table[:class_name]
|
44
|
+
}],
|
45
|
+
|
46
|
+
[:check_file_extension, ->(name, table){
|
47
|
+
raise "Not support file extension: #{table[:file_extension]}" unless SUPPORTED_FILE_EXT.include?(table[:file_extension])
|
48
|
+
}],
|
49
|
+
|
50
|
+
[:set_download_location, ->(name, table){
|
51
|
+
table[:download_location] ||= Takenoko.download_location && (Takenoko.download_location + "/" + table[:table_name])
|
52
|
+
}],
|
53
|
+
|
54
|
+
[:set_attach_files, ->(name, table){
|
55
|
+
if (attach_files = table[:attach_files]).present?
|
56
|
+
attach_files = attach_files.map do |col|
|
57
|
+
raise "column_name must be set" unless col[:column_name]
|
58
|
+
raise "folder_id should be set" unless col[:folder_id] ||= table[:folder_id]
|
59
|
+
col[:download_location] ||= col[:download_location].present? ? table[:download_location] + "/" + col[:download_location] : table[:download_location]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
}],
|
63
|
+
]
|
64
|
+
|
65
|
+
def generate
|
66
|
+
return @@mapping_conf if Takenoko.allow_overwrite && @@mapping_conf
|
67
|
+
@@mapping_conf = base_config
|
68
|
+
@@mapping_conf[:tables].each do |name, table|
|
69
|
+
FILTER.each do |f|
|
70
|
+
f[1].call(name, table)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
return @@mapping_conf
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def check_config
|
79
|
+
raise "Must specify mapping_file or sheet_id" unless (Takenoko.mapping_file || Takenoko.sheet_id)
|
80
|
+
raise "file not found:#{Takenoko.mapping_file}" if Takenoko.mapping_file && !::File.exist?(Takenoko.mapping_file)
|
81
|
+
return true
|
82
|
+
end
|
83
|
+
|
84
|
+
def spread_sheet_config
|
85
|
+
sheet_conf = HashWithIndifferentAccess.new({tables: {}})
|
86
|
+
return sheet_conf unless Takenoko.sheet_id
|
87
|
+
Takenoko.google_client.spreadsheet.worksheets.each do |ws|
|
88
|
+
next if ws.title.match(/\s*#.*/)
|
89
|
+
sheet_conf[:tables][ws.title] = {
|
90
|
+
worksheet_id: ws.gid,
|
91
|
+
worksheet: ws.title
|
92
|
+
}
|
93
|
+
end
|
94
|
+
sheet_conf
|
95
|
+
end
|
96
|
+
|
97
|
+
def mapping_file_config
|
98
|
+
return {} unless Takenoko.mapping_file
|
99
|
+
file_conf = YAML.load_file(Takenoko.mapping_file).with_indifferent_access
|
100
|
+
raise "tables not exists" if file_conf[:tables].blank?
|
101
|
+
file_conf
|
102
|
+
end
|
103
|
+
|
104
|
+
def base_config
|
105
|
+
check_config
|
106
|
+
spread_sheet_config
|
107
|
+
conf = spread_sheet_config.deep_merge(mapping_file_config).with_indifferent_access
|
108
|
+
conf[:tables].compact!
|
109
|
+
conf
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
end
|
data/lib/takenoko/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: takenoko
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- KhiemNS
|
@@ -83,11 +83,12 @@ files:
|
|
83
83
|
- lib/takenoko/attach_helper.rb
|
84
84
|
- lib/takenoko/exporter.rb
|
85
85
|
- lib/takenoko/google_client.rb
|
86
|
+
- lib/takenoko/mapping_generator.rb
|
86
87
|
- lib/takenoko/version.rb
|
87
88
|
- lib/tasks/takenoko.rake
|
88
89
|
- test/takenoko_test.rb
|
89
90
|
- test/test_helper.rb
|
90
|
-
homepage: https://github.com/khiemns54/takenoko/tree/release/0.2.
|
91
|
+
homepage: https://github.com/khiemns54/takenoko/tree/release/0.2.1
|
91
92
|
licenses: []
|
92
93
|
metadata: {}
|
93
94
|
post_install_message:
|