kwatable 0.2.0 → 0.3.0
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/ChangeLog +46 -0
- data/MIT-LICENSE +20 -0
- data/README.txt +4 -2
- data/bin/kwatable +4 -4
- data/examples/ex1/Makefile +40 -14
- data/examples/ex1/{example1.yaml → tabledef.yaml} +42 -11
- data/examples/ex2/Makefile +41 -14
- data/examples/ex2/{example2.yaml → tabledef.yaml} +45 -30
- data/examples/ex3/Makefile +52 -0
- data/examples/ex3/tabledef.yaml +136 -0
- data/kwatable.gemspec +11 -10
- data/lib/kwatable.rb +24 -18
- data/lib/kwatable/kwatable.schema.yaml +95 -5
- data/lib/kwatable/main.rb +331 -0
- data/lib/kwatable/manipulator.rb +320 -192
- data/lib/kwatable/messages.rb +59 -0
- data/lib/kwatable/template/ddl-mysql.eruby +202 -0
- data/lib/kwatable/{templates → template}/ddl-postgresql.eruby +71 -45
- data/lib/kwatable/{templates → template}/defaults.yaml +2 -2
- data/lib/kwatable/template/dictionary.en.yaml +70 -0
- data/lib/kwatable/template/dictionary.ja.yaml +165 -0
- data/lib/kwatable/template/dto-java.eruby +77 -0
- data/lib/kwatable/template/dto-java.sub.eruby +259 -0
- data/lib/kwatable/template/dto-ruby.eruby +63 -0
- data/lib/kwatable/template/dto-ruby.sub.eruby +213 -0
- data/lib/kwatable/template/helper/column.rb +70 -0
- data/lib/kwatable/template/helper/common.rb +151 -0
- data/lib/kwatable/template/helper/java.rb +83 -0
- data/lib/kwatable/template/helper/label.rb +90 -0
- data/lib/kwatable/template/helper/ruby.rb +36 -0
- data/lib/kwatable/template/helper/table.rb +62 -0
- data/lib/kwatable/template/hibernate.eruby +139 -0
- data/lib/kwatable/template/rails-controller.eruby +66 -0
- data/lib/kwatable/template/rails-controller.sub.eruby +114 -0
- data/lib/kwatable/template/rails-kwartz.eruby +164 -0
- data/lib/kwatable/template/rails-kwartz/_attr.plogic.eruby +56 -0
- data/lib/kwatable/template/rails-kwartz/_form.plogic.eruby +81 -0
- data/lib/kwatable/template/rails-kwartz/_link.plogic.eruby +36 -0
- data/lib/kwatable/template/rails-kwartz/edit.cfg.yaml.eruby +16 -0
- data/lib/kwatable/template/rails-kwartz/edit.html.eruby +46 -0
- data/lib/kwatable/template/rails-kwartz/edit.plogic.eruby +20 -0
- data/lib/kwatable/template/rails-kwartz/layout.html.eruby +39 -0
- data/lib/kwatable/template/rails-kwartz/layout.plogic.eruby +32 -0
- data/lib/kwatable/template/rails-kwartz/list.html.eruby +94 -0
- data/lib/kwatable/template/rails-kwartz/list.plogic.eruby +41 -0
- data/lib/kwatable/template/rails-kwartz/new.html.eruby +100 -0
- data/lib/kwatable/template/rails-kwartz/new.plogic.eruby +26 -0
- data/lib/kwatable/template/rails-kwartz/show.html.eruby +51 -0
- data/lib/kwatable/template/rails-kwartz/show.plogic.eruby +9 -0
- data/lib/kwatable/template/rails-model.eruby +35 -0
- data/lib/kwatable/template/rails-model.sub.eruby +136 -0
- data/lib/kwatable/{templates → template}/validator-ruby.eruby +18 -11
- data/lib/kwatable/util.rb +133 -0
- data/lib/kwatable/util/assert-text-equal.rb +47 -0
- data/lib/kwatable/util/assertion.rb +115 -0
- data/lib/kwatable/validator.rb +50 -0
- data/test/assert-diff.rb +1 -1
- data/test/test-ex.rb +306 -0
- data/test/test.rb +37 -127
- metadata +66 -17
- data/COPYING +0 -340
- data/ChangeLog.txt +0 -65
- data/lib/kwatable/error-msg.rb +0 -38
- data/lib/kwatable/main-program.rb +0 -216
- data/lib/kwatable/templates/ddl-mysql.eruby +0 -172
- data/lib/kwatable/templates/dto-java.eruby +0 -260
- data/lib/kwatable/templates/dto-ruby.eruby +0 -185
@@ -0,0 +1,63 @@
|
|
1
|
+
<%
|
2
|
+
|
3
|
+
##
|
4
|
+
## kwatable template file for Ruby DTO class
|
5
|
+
##
|
6
|
+
## $Rev: 40 $
|
7
|
+
## $Release: 0.3.0 $
|
8
|
+
## copyright(c) 2005 kuwata-lab.com all rights reserved.
|
9
|
+
##
|
10
|
+
## <template-desc>generate DTO classes for Ruby</template-desc>
|
11
|
+
## <template-properties>
|
12
|
+
## --module=name : module name
|
13
|
+
## --parent=name : parent class
|
14
|
+
## --reqpath=path : require path
|
15
|
+
## --populate : define populate method
|
16
|
+
## --symbolkey : use symbol as hash key
|
17
|
+
## </template-properties>
|
18
|
+
##
|
19
|
+
|
20
|
+
require 'kwatable/template/helper/common'
|
21
|
+
require 'kwatable/template/helper/table'
|
22
|
+
require 'kwatable/template/helper/column'
|
23
|
+
require 'kwatable/template/helper/ruby'
|
24
|
+
extend Kwatable::CommonHelper
|
25
|
+
extend Kwatable::TableHelper
|
26
|
+
extend Kwatable::ColumnHelper
|
27
|
+
extend Kwatable::RubyHelper
|
28
|
+
|
29
|
+
require 'active_support/inflector'
|
30
|
+
#extend Inflector
|
31
|
+
|
32
|
+
|
33
|
+
## context check
|
34
|
+
context_var_required('@tables')
|
35
|
+
|
36
|
+
|
37
|
+
## use '_' as escape function
|
38
|
+
alias _ escape_ruby_keyword
|
39
|
+
|
40
|
+
|
41
|
+
##
|
42
|
+
## apply template
|
43
|
+
##
|
44
|
+
basename = File.basename(@template_filename)
|
45
|
+
subtemplate_filename = basename.sub(/\.eruby\z/, '.sub.eruby')
|
46
|
+
subtemplate_filepath = Util.find_file(subtemplate_filename, @template_pathlist)
|
47
|
+
unless subtemplate_filepath
|
48
|
+
raise "#{basename}: subtemplate `#{subtemplate_filename}' not found."
|
49
|
+
end
|
50
|
+
@output_files = []
|
51
|
+
context = self
|
52
|
+
encoding = @properties[:encoding] || @properties[:charset]
|
53
|
+
each_table(@tables) do |table|p
|
54
|
+
@table = table
|
55
|
+
output = Util.eval_template(subtemplate_filepath, context)
|
56
|
+
output = Util.encode(output, encoding) if encoding
|
57
|
+
outfile = @output_filename # set in subtemplate
|
58
|
+
@output_files << [outfile, output, :create]
|
59
|
+
end
|
60
|
+
@table = nil
|
61
|
+
|
62
|
+
|
63
|
+
%>
|
@@ -0,0 +1,213 @@
|
|
1
|
+
<%
|
2
|
+
|
3
|
+
##
|
4
|
+
## sub-template of dto-ruby.eruby
|
5
|
+
##
|
6
|
+
## $Rev: 38 $
|
7
|
+
## $Release: 0.3.0 $
|
8
|
+
## copyright(c) 2005 kuwata-lab.com all rights reserved.
|
9
|
+
##
|
10
|
+
|
11
|
+
|
12
|
+
#
|
13
|
+
# context check
|
14
|
+
#
|
15
|
+
context_var_required('@tables')
|
16
|
+
|
17
|
+
|
18
|
+
#
|
19
|
+
# output file name
|
20
|
+
#
|
21
|
+
@output_filename = Inflector.underscore(table_class(@table)) + ".rb"
|
22
|
+
|
23
|
+
|
24
|
+
#
|
25
|
+
# class definition
|
26
|
+
#
|
27
|
+
klass = {
|
28
|
+
:name => table_class(@table),
|
29
|
+
:module => @table['module'] || @properties[:module],
|
30
|
+
:parent => @table['parent'] || @properties[:parent],
|
31
|
+
:desc => @table['desc'],
|
32
|
+
}
|
33
|
+
|
34
|
+
|
35
|
+
#
|
36
|
+
# instance variables
|
37
|
+
#
|
38
|
+
variables = []
|
39
|
+
for column in @table['columns']
|
40
|
+
hash = {
|
41
|
+
:name => column_attr(column),
|
42
|
+
:type => column['class'] || column['type'],
|
43
|
+
:desc => column['desc'],
|
44
|
+
}
|
45
|
+
variables << hash
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
#
|
50
|
+
# relations
|
51
|
+
#
|
52
|
+
relations = []
|
53
|
+
for relation in @table['relations']
|
54
|
+
kind = relation['kind']
|
55
|
+
attr = Inflector.underscore(table_class(relation['table']))
|
56
|
+
attr = Inflector.pluralize(attr) unless kind == '1:1'
|
57
|
+
hash = {
|
58
|
+
:kind => kind,
|
59
|
+
:attr => relation['attr'] || attr,
|
60
|
+
}
|
61
|
+
relations << hash
|
62
|
+
end if @table['relations']
|
63
|
+
|
64
|
+
|
65
|
+
%>
|
66
|
+
##
|
67
|
+
## DTO for Ruby
|
68
|
+
## generated by kwatable with template 'dto-ruby.eruby'
|
69
|
+
## at <%= Time.now.to_s %>
|
70
|
+
|
71
|
+
##
|
72
|
+
<%
|
73
|
+
#
|
74
|
+
# require other dto file
|
75
|
+
#
|
76
|
+
refclass_table = {}
|
77
|
+
coltypes = {}
|
78
|
+
for column in @table['columns']
|
79
|
+
coltypes[column['type']] = true
|
80
|
+
next unless column['ref']
|
81
|
+
refclass = table_class(column['ref']['table'])
|
82
|
+
reqpath = @properties[:reqpath]
|
83
|
+
next if refclass_table[refclass]
|
84
|
+
refclass_table[refclass] = true
|
85
|
+
libname = Inflector.underscore(refclass)
|
86
|
+
%>
|
87
|
+
require '<%= reqpath %><%= reqpath ? '/' : '' %><%= libname %>'
|
88
|
+
<%
|
89
|
+
end
|
90
|
+
%>
|
91
|
+
<% if @properties[:populate] %>
|
92
|
+
<% if coltypes['date'] || coltypes['datetime'] || coltypes['timestamp'] %>
|
93
|
+
require 'date'
|
94
|
+
<% end %>
|
95
|
+
<% if coltypes['time'] %>
|
96
|
+
require 'time'
|
97
|
+
<% end %>
|
98
|
+
<% end %>
|
99
|
+
|
100
|
+
<%
|
101
|
+
#
|
102
|
+
# class definition start
|
103
|
+
#
|
104
|
+
mod = klass[:module] ? "#{klass[:module]}::" : ""
|
105
|
+
extends = klass[:parent] ? " < #{klass[:parent]}" : ""
|
106
|
+
|
107
|
+
%>
|
108
|
+
<%= klass[:desc].gsub(/^/, '## ') %>
|
109
|
+
|
110
|
+
class <%= mod %><%= klass[:name] %><%= extends %>
|
111
|
+
|
112
|
+
|
113
|
+
<%
|
114
|
+
#
|
115
|
+
# accessor
|
116
|
+
#
|
117
|
+
%>
|
118
|
+
<% for var in variables %>
|
119
|
+
attr_accessor :<%= '%-14s' % var[:name] %> # <%= var[:desc] %>
|
120
|
+
|
121
|
+
<% end %>
|
122
|
+
|
123
|
+
<%
|
124
|
+
#
|
125
|
+
# set all values
|
126
|
+
#
|
127
|
+
%>
|
128
|
+
<% if @properties[:populate] %>
|
129
|
+
def populate(_hash={})
|
130
|
+
<%
|
131
|
+
flag_symbol = @properties[:symbolkey]
|
132
|
+
flag_date = flag_datetime = false
|
133
|
+
for var in variables
|
134
|
+
key = flag_symbol ? ":#{var[:name]}" : "'#{var[:name]}'"
|
135
|
+
case var[:type]
|
136
|
+
when 'str', 'string'
|
137
|
+
expr = "_hash[#{key}]"
|
138
|
+
when 'int', 'integer', 'short', 'long'
|
139
|
+
expr = "_hash[#{key}].to_i"
|
140
|
+
when 'float', 'double'
|
141
|
+
expr = "_hash[#{key}].to_f"
|
142
|
+
when 'char'
|
143
|
+
expr = "_hash[#{key}]"
|
144
|
+
when 'bool', 'boolean'
|
145
|
+
expr = "! _hash[#{key}].empty?"
|
146
|
+
when 'date'
|
147
|
+
expr = "Date.parse(_hash[#{key}])"
|
148
|
+
when 'time'
|
149
|
+
expr = "Time.parse(_hash[#{key}])"
|
150
|
+
when 'timestamp', 'datetime'
|
151
|
+
expr = "DateTime.parse(_hash[#{key}])"
|
152
|
+
when 'money'
|
153
|
+
expr = "_hash[#{key}].to_f"
|
154
|
+
else
|
155
|
+
raise "*** internal error: var=#{var.inspect}"
|
156
|
+
end
|
157
|
+
%>
|
158
|
+
<%= "@%-14s = %-25s if _hash.key?(%s)" % [var[:name], expr, key] %>
|
159
|
+
|
160
|
+
<%
|
161
|
+
end
|
162
|
+
%>
|
163
|
+
end
|
164
|
+
|
165
|
+
<% end %>
|
166
|
+
<%
|
167
|
+
#
|
168
|
+
# foreign keys
|
169
|
+
#
|
170
|
+
count = 0
|
171
|
+
for column in @table['columns']
|
172
|
+
if column['ref']
|
173
|
+
count += 1
|
174
|
+
refname = column_refname(column)
|
175
|
+
varname = column_name(column)
|
176
|
+
if refname == varname
|
177
|
+
raise "table #{@table['name']}: column #{column['name']}: proper ref-name is required."
|
178
|
+
end
|
179
|
+
reftype = table_class(column['ref']['table'])
|
180
|
+
argname = Inflector.underscore(reftype)
|
181
|
+
%>
|
182
|
+
<% if count == 1 %>
|
183
|
+
# accessors via foreign keys
|
184
|
+
<% end %>
|
185
|
+
attr_reader :<%= refname %>
|
186
|
+
|
187
|
+
def <%= refname %>=(<%=_ argname %>)
|
188
|
+
@<%= refname %> = <%=_ argname %>
|
189
|
+
|
190
|
+
self.<%= varname %> = <%=_ argname %>.<%= column_name(column['ref']) %>
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
<%
|
195
|
+
end
|
196
|
+
end
|
197
|
+
%>
|
198
|
+
<%
|
199
|
+
#
|
200
|
+
# relations
|
201
|
+
#
|
202
|
+
if !relations.empty?
|
203
|
+
%>
|
204
|
+
# relations
|
205
|
+
<% for relation in relations %>
|
206
|
+
attr_accessor :<%= '%-15s' % relation[:attr] %> # <%= relation[:kind] %>
|
207
|
+
|
208
|
+
<% end %>
|
209
|
+
|
210
|
+
<%
|
211
|
+
end
|
212
|
+
%>
|
213
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
###
|
2
|
+
### $Rev: 39 $
|
3
|
+
### $Release: 0.3.0 $
|
4
|
+
### copyright(c) 2005 kuwata-lab.com all rights reserved.
|
5
|
+
###
|
6
|
+
|
7
|
+
module Kwatable
|
8
|
+
|
9
|
+
module ColumnHelper
|
10
|
+
|
11
|
+
module_function
|
12
|
+
|
13
|
+
##
|
14
|
+
def column_attr(column)
|
15
|
+
return column['attr'] || column['name']
|
16
|
+
end
|
17
|
+
|
18
|
+
alias column_name column_attr
|
19
|
+
|
20
|
+
##
|
21
|
+
def column_refname(column)
|
22
|
+
attr = column_attr(column)
|
23
|
+
return column['ref-name'] || \
|
24
|
+
(column['ref'] ? attr.sub(/_#{column['ref']['name']}\z/, '') : attr)
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
def column_label(column)
|
29
|
+
return column['label'] || column_refname(column)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
##
|
34
|
+
def column_showable?(column)
|
35
|
+
#return column_control_type(column) ? true : false
|
36
|
+
name = column['name']
|
37
|
+
return false if name == 'id'
|
38
|
+
return false if name == 'password' || name == 'passwd'
|
39
|
+
return true
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
def column_editable?(column)
|
44
|
+
name = column['name']
|
45
|
+
return false if name == 'id'
|
46
|
+
return false if name =~ /\A(created|updated)_(on|at)\z/
|
47
|
+
return true
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
def column_control_type(column)
|
52
|
+
type = column['type']
|
53
|
+
name = column['name']
|
54
|
+
if name == 'id' ; return nil
|
55
|
+
elsif column['ref'] ; return 'select'
|
56
|
+
elsif column['enum'] ; return 'radio'
|
57
|
+
elsif %w[created_on created_at].include?(name) ; return nil
|
58
|
+
elsif %w[modified_on modified_at].include?(name) ; return nil
|
59
|
+
elsif %w[date timestamp datetime].include?(type) ; return 'select'
|
60
|
+
elsif %w[boolean bool].include?(type) ; return 'checkbox'
|
61
|
+
elsif %w[text].include?(type) ; return 'text_area'
|
62
|
+
elsif %w[password passwd].include?(name) ; return 'password_field'
|
63
|
+
else ; return 'text_field'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,151 @@
|
|
1
|
+
##
|
2
|
+
## $Rev: 43 $
|
3
|
+
## $Release: 0.3.0 $
|
4
|
+
## copyright(c) 2005 kuwata-lab.com all rights reserved.
|
5
|
+
##
|
6
|
+
|
7
|
+
require 'kwatable/util'
|
8
|
+
|
9
|
+
module Kwatable
|
10
|
+
|
11
|
+
|
12
|
+
module CommonHelper
|
13
|
+
|
14
|
+
|
15
|
+
##
|
16
|
+
def context_var_required(var_name)
|
17
|
+
value = instance_variable_get(var_name)
|
18
|
+
return if value
|
19
|
+
template_name = File.basename(@template_filename).sub(/\.\w+$/, '')
|
20
|
+
msg = case var_name
|
21
|
+
when '@tables' ; "don't use '-m' option with '%s'." % template_name
|
22
|
+
when '@table' ; "option '-m' is required when using '%s'." % template_name
|
23
|
+
else ; "context value '%s' required but not found." % var_name
|
24
|
+
end
|
25
|
+
err = StandardError.new(msg)
|
26
|
+
err.set_backtrace(caller())
|
27
|
+
raise err
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
## convert 'foo_bar_baz' into 'FooBarBaz'
|
32
|
+
def camel_case(name, flag_all=true)
|
33
|
+
s = ''
|
34
|
+
name.split('_').each_with_index do |word, i|
|
35
|
+
s << (!flag_all && i == 0 ? word.downcase : word.capitalize)
|
36
|
+
end
|
37
|
+
#s = name.split('_').collect { |w| w.capitalize }.join()
|
38
|
+
#s[0] = s[0].to_s.upcase.chr unless flag_all
|
39
|
+
return s
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
## quote by single-quoation
|
44
|
+
def q(obj)
|
45
|
+
return "'#{obj.to_s.gsub(/['\\]/, '\\\\\1')}'"
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
## find file from path_list
|
50
|
+
def find_file(filename, path_list, find_in_currdir=true)
|
51
|
+
return Util.find_file(filename, path_list, find_in_currdir)
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
## find subtemplate
|
56
|
+
def find_subtemplate(template_filename=@template_filename, template_pathlist=@template_pathlist)
|
57
|
+
basename = File.basename(template_filename)
|
58
|
+
subtemplate_filename = basename.sub(/\.eruby\z/, '.sub.eruby')
|
59
|
+
subtemplate_filepath = Util.find_file(subtemplate_filename, template_pathlist)
|
60
|
+
unless subtemplate_filepath
|
61
|
+
raise "#{basename}: subtemplate `#{subtemplate_filepath}' not found."
|
62
|
+
end
|
63
|
+
return subtemplate_filepath
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
## read user custom code from output filename and apply template with it.
|
68
|
+
## return output string and action symbol(:create, :update, or :identical).
|
69
|
+
def eval_template_with_custom_code(template_filename, context, output_filename, options={})
|
70
|
+
# options
|
71
|
+
encoding = options[:encoding]
|
72
|
+
template = options[:template]
|
73
|
+
# get user custom code
|
74
|
+
if test(?f, output_filename)
|
75
|
+
content = File.read(output_filename)
|
76
|
+
custom_code = user_custom_code(content)
|
77
|
+
else
|
78
|
+
content = custom_code = nil
|
79
|
+
end
|
80
|
+
# eval template and get output
|
81
|
+
context.instance_variable_set("@user_custom_code", custom_code)
|
82
|
+
output = Util.eval_template(template_filename, context, template)
|
83
|
+
output = encode(output, encoding) if encoding
|
84
|
+
context.instance_variable_set("@user_custom_code", nil)
|
85
|
+
# detect action
|
86
|
+
action = content.nil? ? :create : (content == output ? :identical : :update)
|
87
|
+
return output, action
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
## get user custom code
|
92
|
+
def user_custom_code(content)
|
93
|
+
pattern = /^.*<user-custom-code>(?:.|\n)*<\/user-custom-code>.*\n/
|
94
|
+
return content =~ pattern ? $& : nil
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
## encode string
|
99
|
+
def encode(str, encoding)
|
100
|
+
require 'kconv'
|
101
|
+
out_code = case encoding
|
102
|
+
when /\Aeuc-jp\z/i ; Kconv::EUC
|
103
|
+
when /\As(hift[-_])?jis\z/i ; Kconv::SJIS
|
104
|
+
when /\Autf8\z/i ; Kconv::UTF8
|
105
|
+
when /\Autf16\z/i ; Kconv::UTF16
|
106
|
+
when /\Aiso-2022-jp\z/i ; Kconv::JIS
|
107
|
+
else ; nil
|
108
|
+
end
|
109
|
+
return Kconv.kconv(str, out_code)
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
##
|
114
|
+
def each_table(tables, &block)
|
115
|
+
tables.each do |table|
|
116
|
+
reason = table_check_modeling(table)
|
117
|
+
if reason
|
118
|
+
msg = "*** table '#{table['name']}' skipped. (reason: #{reason})"
|
119
|
+
$stderr.puts msg unless @options[?q]
|
120
|
+
else
|
121
|
+
yield(table)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
## apply subtemplate for each tables
|
128
|
+
def apply_subtemplate_for_each_tables(tables, opthash={}, &block)
|
129
|
+
subtemplate_filepath = find_subtemplate()
|
130
|
+
subtemplate = File.read(subtemplate_filepath)
|
131
|
+
encoding = @properties[:encoding] || @properties[:charset]
|
132
|
+
context = self
|
133
|
+
output_files = []
|
134
|
+
opts = { :encoding=>encoding, :template=>subtemplate }
|
135
|
+
each_table(@tables) do |table|
|
136
|
+
output_filename = yield(table)
|
137
|
+
dir = @options[?d]
|
138
|
+
output_filename = "#{dir}/#{output_filename}" if dir
|
139
|
+
@table = table
|
140
|
+
output, action = eval_template_with_custom_code(subtemplate_filepath, context, output_filename, opts)
|
141
|
+
@table = nil
|
142
|
+
output_files << [output_filename, output, action]
|
143
|
+
end
|
144
|
+
return output_files
|
145
|
+
end
|
146
|
+
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
end
|