ezframe 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/asset/css/materialize.min.css +13 -0
  4. data/asset/css/style.css +3 -0
  5. data/{app_template/asset/image/favicon.ico → asset/image/c_e.ico} +0 -0
  6. data/{app_template/asset → asset}/js/ezframe.js +29 -59
  7. data/asset/js/materialize.min.js +6 -0
  8. data/asset/js/mymaterialize.js +38 -0
  9. data/exe/console +2 -2
  10. data/exe/{create_table.rb → create_table} +0 -0
  11. data/exe/dbmigrate +67 -0
  12. data/ezframe.gemspec +3 -0
  13. data/lib/ezframe/auth.rb +7 -2
  14. data/lib/ezframe/column_set.rb +30 -14
  15. data/lib/ezframe/column_type.rb +207 -67
  16. data/lib/ezframe/config.rb +5 -1
  17. data/lib/ezframe/controller.rb +34 -34
  18. data/lib/ezframe/database.rb +2 -2
  19. data/lib/ezframe/editor.rb +41 -41
  20. data/lib/ezframe/email.rb +34 -0
  21. data/lib/ezframe/ht.rb +20 -0
  22. data/lib/ezframe/html.rb +22 -14
  23. data/lib/ezframe/japanese_utils.rb +5 -0
  24. data/lib/ezframe/loader.rb +2 -2
  25. data/lib/ezframe/materialize.rb +3 -4
  26. data/lib/ezframe/message.rb +46 -0
  27. data/lib/ezframe/model.rb +0 -1
  28. data/lib/ezframe/page_base.rb +53 -67
  29. data/lib/ezframe/route.rb +122 -0
  30. data/lib/ezframe/server.rb +1 -1
  31. data/lib/ezframe/template.rb +3 -2
  32. data/lib/ezframe/util.rb +36 -16
  33. data/lib/ezframe/version.rb +1 -1
  34. data/lib/ezframe.rb +2 -1
  35. metadata +57 -14
  36. data/.rubocop.yml +0 -44
  37. data/app_template/config/generic.yml +0 -3
  38. data/app_template/config/materialize.yml +0 -5
  39. data/app_template/config.ru +0 -10
  40. data/app_template/pages/basic.rb +0 -5
  41. data/exe/setup.rb +0 -15
  42. data/lib/ezframe/page_kit.rb +0 -63
data/ezframe.gemspec CHANGED
@@ -34,9 +34,12 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency "minitest", '~> 5.13.0'
35
35
  spec.add_development_dependency "nokogiri", '~> 1.10.7'
36
36
  spec.add_development_dependency "rack-test", '~> 1.1.0'
37
+ spec.add_development_dependency "pry", '~> 0.12.2'
38
+ spec.add_development_dependency "mailcatcher", '~> 0.7.1'
37
39
 
38
40
  spec.add_runtime_dependency "rake", "~> 13.0"
39
41
  spec.add_runtime_dependency 'rack', '~> 2.0.7'
40
42
  spec.add_runtime_dependency 'sequel', '~> 5.27.0'
41
43
  spec.add_runtime_dependency 'sqlite3', '~> 1.4.0'
44
+ spec.add_runtime_dependency 'oj', '~> 3.10.2'
42
45
  end
data/lib/ezframe/auth.rb CHANGED
@@ -39,7 +39,7 @@ module Ezframe
39
39
  def authenticate(env, account, pass)
40
40
  model = env["model"]
41
41
  raise "model is not initialized" unless model
42
- @user = model.db.dataset(:user).where(account: account).first
42
+ @user = model.db.dataset(Config[:login_table]).where(Config[:login_account].to_sym => account ).first
43
43
  if @user
44
44
  mylog "Auth: authenticate: user=#{@user.inspect}"
45
45
  else
@@ -60,7 +60,12 @@ module Ezframe
60
60
 
61
61
  def initialize(model, account)
62
62
  self.account = account
63
- @user = model.db.dataset(:user).where(Sequel.or(account: account, id: account)).first
63
+ dataset = model.db.dataset(Config[:login_table])
64
+ if account.is_a?(Integer)
65
+ @user = dataset.where(id: account).first
66
+ else
67
+ @user = dataset.where(Config[:login_account].to_sym => account).first
68
+ end
64
69
  unless @user
65
70
  mylog "Auth.initialize: This user does not exist: #{account}"
66
71
  end
@@ -16,18 +16,17 @@ module Ezframe
16
16
 
17
17
  def load_one_file(filename)
18
18
  table_name = $1 if filename =~ /(\w+).ya?ml$/
19
- begin
19
+ #begin
20
20
  yaml = YAML.load_file(filename)
21
- rescue
22
- mylog("YAML load error: #{filename}")
23
- return
24
- end
21
+ #rescue
22
+ # raise "YAML load error: #{filename}"
23
+ #end
25
24
  if yaml.length == 0
26
25
  mylog("[ERROR] columns file is empty: #{filename}")
27
26
  return
28
27
  end
29
28
  column_info = yaml.recursively_symbolize_keys
30
- puts "load_one_file: filename=#{filename} column_info=#{column_info.inspect}"
29
+ # puts "load_one_file: filename=#{filename} column_info=#{column_info.inspect}"
31
30
  add(table_name, column_info)
32
31
  end
33
32
 
@@ -61,6 +60,7 @@ module Ezframe
61
60
  end
62
61
  end
63
62
 
63
+ # 配列を初期化する
64
64
  def set(attr_a)
65
65
  @columns[:id] = IdType.new(key: "id", label: "ID", no_edit: true)
66
66
  attr_a.each do |attributes|
@@ -93,12 +93,13 @@ module Ezframe
93
93
  return data
94
94
  end
95
95
 
96
- def save
96
+ # 新規に値を登録する
97
+ def create
97
98
  col_h = get_hash(:value)
98
99
  col_h.delete(:id)
99
100
  col_h.delete(:created_at)
100
101
  col_h[:updated_at] = Time.now
101
- mylog "save: #{col_h.inspect}"
102
+ mylog "create: #{col_h.inspect}"
102
103
  id = @columns[:id]
103
104
  if id.value.to_i > 0
104
105
  dataset.where(id: id.value).update(col_h)
@@ -107,14 +108,28 @@ module Ezframe
107
108
  end
108
109
  end
109
110
 
111
+ # データベース上の値の更新
110
112
  def update(id, value_h)
111
- values = {}
112
- colkeys = @columns.keys
113
- value_h.each do |k, v|
114
- values[k] = v if colkeys.include?(k)
113
+ self.set_from_db(id)
114
+ updated_values = {}
115
+ @columns.each do |colkey, column|
116
+ next if column.no_edit?
117
+ if column.multi_inputs?
118
+ new_value = column.form_to_value(value_h)
119
+ else
120
+ new_value = value_h[colkey]
121
+ end
122
+ prev_value = column.value
123
+ column.value = new_value
124
+ if prev_value != column.value
125
+ updated_values[colkey] = column.value
126
+ end
127
+ end
128
+ mylog "column_set.updated_values = #{updated_values.inspect}"
129
+ if updated_values.length > 0
130
+ updated_values[:updated_at] = Time.now
131
+ dataset.where(id: id).update(updated_values)
115
132
  end
116
- dataset.where(id: id).update(values)
117
- set_values(values)
118
133
  end
119
134
 
120
135
  def values=(value_h)
@@ -125,6 +140,7 @@ module Ezframe
125
140
  def set_values(value_h)
126
141
  return unless value_h
127
142
  value_h.each do |k, v|
143
+ next if k.nil? || k.to_s.empty?
128
144
  col = @columns[k.to_sym]
129
145
  next unless col
130
146
  col.value = v
@@ -26,10 +26,11 @@ module Ezframe
26
26
 
27
27
  def initialize(attr = nil)
28
28
  @attribute = attr || {}
29
+ @value = @attribute[:default]
29
30
  end
30
31
 
31
32
  def key
32
- @attribute[:key]
33
+ @attribute[:key].to_sym
33
34
  end
34
35
 
35
36
  def label
@@ -68,10 +69,14 @@ module Ezframe
68
69
  @value
69
70
  end
70
71
 
71
- def validate
72
- if !@value || @value.empty?
73
- if @attribute[:must]
74
- @error = "必須項目です。"
72
+ def normalize(val)
73
+ return val
74
+ end
75
+
76
+ def validate(val)
77
+ if !val || val.empty?
78
+ if @attribute[:required] == "true"
79
+ @error = "required"
75
80
  return @error
76
81
  end
77
82
  end
@@ -85,41 +90,81 @@ module Ezframe
85
90
  def no_view?
86
91
  return (@attribute[:hidden] && !@attribute[:force])
87
92
  end
93
+
94
+ def multi_inputs?
95
+ nil
96
+ end
88
97
  end
89
98
 
90
99
  class TextType < TypeBase
91
- def normalize
92
- return unless @value
93
- @value = @value.to_s
94
- @value.gsub!(/ /, " ")
95
- @value.gsub!(/\s+/, " ")
96
- @value.strip!
100
+ def normalize(val)
101
+ return nil unless val
102
+ val = val.dup.to_s
103
+ val.gsub!(/ /, " ")
104
+ val.gsub!(/\s+/, " ")
105
+ val.strip!
106
+ return val
97
107
  end
98
108
 
99
- def value=(v)
100
- super(v)
101
- normalize
109
+ def value=(val)
110
+ @value = normalize(val)
102
111
  end
103
112
 
104
113
  def form(opts = {})
105
114
  return nil if no_edit? && !opts[:force]
106
- h = { tag: "input", type: "text", name: @attribute[:key], key: @attribute[:key], label: @attribute[:label], value: @value || "" }
107
- h[:size] = @attribute[:size] if @attribute[:size]
108
- h
115
+ if @attribute[:size]
116
+ val = @value
117
+ if val && val.length>0
118
+ val.gsub!(/\n/, "<br>")
119
+ end
120
+ h = Ht.textarea(name: self.key, class: "textarea-size-#{@attribute[:size]}", label: @attribute[:label], child: val)
121
+ else
122
+ h = Ht.input(type: "text", name: self.key, label: @attribute[:label], value: @value || "")
123
+ end
124
+ return h
109
125
  end
110
126
 
111
127
  def db_type
112
- "text"
128
+ return "text"
129
+ end
130
+ end
131
+
132
+ class TextareaType < TextType
133
+ def value=(val)
134
+ val = normalize(val)
135
+ val.gsub!(/<br>/, "\n") if val
136
+ @value = val
137
+ end
138
+
139
+ def form(opts = {})
140
+ return nil if no_edit? && !opts[:force]
141
+ val = @value
142
+ if val && val.length>0
143
+ val.gsub!(/\n/, "<br>")
144
+ end
145
+ h = Ht.textarea(name: self.key, label: @attribute[:label], child: val)
146
+ h[:class] = @attribute[:class] if @attribute[:class]
147
+ return h
113
148
  end
114
149
  end
115
150
 
116
151
  class IntType < TextType
117
152
  def view(opts = {})
118
153
  return nil if no_view? && !opts[:force]
119
- return Util.add_comma(@value.to_i)
154
+ return @value.to_i.add_comma
120
155
  end
121
156
 
122
157
  def value=(v)
158
+ if v.nil?
159
+ default = @attribute[:default]
160
+ if default
161
+ @value = default
162
+ else
163
+ @value = nil
164
+ end
165
+ return
166
+ end
167
+
123
168
  if v.nil?
124
169
  @value = nil
125
170
  return
@@ -132,22 +177,28 @@ module Ezframe
132
177
 
133
178
  def form(opts = {})
134
179
  return nil if no_edit? && !opts[:force]
135
- { tag: "input", type: "number", key: @attribute[:key], label: @attribute[:label], value: @value || "" }
180
+ h = Ht.input(type: "number", name: self.key, label: @attribute[:label], value: @value || "")
181
+ h[:class] = @attribute[:class] if @attribute[:class]
182
+ return h
136
183
  end
137
184
 
138
185
  def db_type
139
- "int"
186
+ return "int"
140
187
  end
141
-
142
-
143
188
  end
144
189
 
145
190
  class ForeignType < IntType
191
+ def initialize(attr = nil)
192
+ super
193
+ @attribute[:no_edit] = true
194
+ end
195
+
146
196
  def view(opts = {})
147
197
  return nil if no_view? && !opts[:force]
148
- dataset = @parent.db.dataset[self.type.inner]
149
- data = dataset.get(id: @value)
150
- return data[@attribute[:view]]
198
+ return nil
199
+ # dataset = @parent.parent.model.db.dataset(self.key)
200
+ # data = dataset.get(id: @value)
201
+ # return data[@attribute[:view]]
151
202
  end
152
203
 
153
204
  def form
@@ -169,7 +220,9 @@ module Ezframe
169
220
  class PasswordType < TextType
170
221
  def form(opts = {})
171
222
  return nil if no_edit? && !opts[:force]
172
- return { tag: "input", type: "password", label: @attribute[:label], value: @value || "" }
223
+ h = { tag: "input", type: "password", name: self.key, label: @attribute[:label], value: @value || "" }
224
+ h[:class] = @attribute[:class] if @attribute[:class]
225
+ return h
173
226
  end
174
227
 
175
228
  def db_value
@@ -180,23 +233,33 @@ module Ezframe
180
233
  class SelectType < TypeBase
181
234
  def form(opts = {})
182
235
  return nil if no_edit? && !opts[:force]
183
- # puts "selectType: #{@attribute[:items].inspect}"
184
- return { tag: "select", key: @attribute[:key], label: @attribute[:label], items: @attribute[:items], value: @value }
236
+ # puts "selectType: #{@attribute[:item].inspect}"
237
+ h = { tag: "select", name: self.key, label: @attribute[:label], item: @attribute[:item], value: @value }
238
+ h[:class] = @attribute[:class] if @attribute[:class]
239
+ return h
185
240
  end
186
241
 
187
242
  def db_type
188
243
  return "text"
189
244
  end
245
+
246
+ def view(opts = {})
247
+ return nil if no_view? && !opts[:force]
248
+ item = @attribute[:item]
249
+ return item[@value]
250
+ end
190
251
  end
191
252
 
192
253
  class CheckboxType < TypeBase
193
254
  def form(opts = {})
194
255
  return nil if no_edit? && !opts[:force]
195
- return { tag: "checkbox", key: @attribute[:key], name: @attribute[:key], value: parent[:id].value, label: @attribute[:label] }
256
+ h = Ht.checkbox(name: self.key, value: parent[:id].value, label: @attribute[:label])
257
+ h[:class] = @attribute[:class] if @attribute[:class]
258
+ return h
196
259
  end
197
260
 
198
261
  def db_type
199
- return "int"
262
+ return "text"
200
263
  end
201
264
  end
202
265
 
@@ -205,10 +268,11 @@ module Ezframe
205
268
  return nil if no_edit? && !opts[:force]
206
269
  h = super
207
270
  if h
208
- # h[:type] = 'date'
271
+ # h[:type] = 'date'
209
272
  h[:type] = "text"
210
- h[:class] = "datepicker"
211
- h[:value] = value || ""
273
+ h[:value] = @value || ""
274
+ h[:class] = [ "datepicker" ]
275
+ h[:class].push@attribute[:class] if @attribute[:class]
212
276
  end
213
277
  return h
214
278
  end
@@ -226,7 +290,12 @@ module Ezframe
226
290
 
227
291
  def value=(v)
228
292
  if v.nil?
229
- @value = nil
293
+ default = @attribute[:default]
294
+ if default
295
+ @value = default
296
+ else
297
+ @value = nil
298
+ end
230
299
  return
231
300
  end
232
301
  if v.is_a?(String)
@@ -235,7 +304,6 @@ module Ezframe
235
304
  return
236
305
  end
237
306
  y, m, d = v.split(/[\-\/]/)
238
- # puts "date=#{v.inspect}"
239
307
  @value = Date.new(y.to_i, m.to_i, d.to_i)
240
308
  return
241
309
  end
@@ -265,23 +333,50 @@ module Ezframe
265
333
  end
266
334
  end
267
335
 
268
- class BirthdayType < DateType
336
+ class BirthdayType < TextType
269
337
  def form(opts = {})
270
338
  return nil if no_edit? && !opts[:force]
271
- prefix = @attribute[:key]
339
+ prefix = self.key
272
340
  now = Time.now
273
341
  year_list = []
274
342
  110.times do |y|
275
343
  year = now.year - y - 10
276
344
  year_list.push [year, "#{year}年 (#{Japanese.convert_wareki(year)})"]
277
345
  end
346
+
347
+ year, mon, mday = parse_date(@value)
278
348
  mon_list = (1..12).map { |m| [m, "#{m}月"] }
279
349
  mon_list.unshift([0, "(月)"])
280
350
  mday_list = (1..31).map { |d| [d, "#{d}日"] }
281
351
  mday_list.unshift([0, "(日)"])
282
- return [Ht.select(name: "#{prefix}_year", items: year_list),
283
- Ht.select(name: "#{prefix}_mon", items: mon_list),
284
- Ht.select(name: "#{prefix}_mday", items: mday_list)]
352
+ return [Ht.select(name: "#{prefix}_year", item: year_list, value: year),
353
+ Ht.select(name: "#{prefix}_mon", item: mon_list, value: mon),
354
+ Ht.select(name: "#{prefix}_mday", item: mday_list, value: mday)]
355
+ end
356
+
357
+ def view(opts = {})
358
+ return nil if no_view? && !opts[:force]
359
+ return nil unless @value
360
+ year, mon, mday = parse_date(@value)
361
+ mon = "?" if mon == 0
362
+ mday = "?" if mday == 0
363
+ return "#{year}年 #{mon}月 #{mday}日"
364
+ end
365
+
366
+ def parse_date(date)
367
+ if date && date =~ /(\d+)\-(\d+)\-(\d+)/
368
+ return [ $1.to_i,$2.to_i,$3.to_i ]
369
+ end
370
+ return nil
371
+ end
372
+
373
+ def multi_inputs?
374
+ true
375
+ end
376
+
377
+ def form_to_value(form)
378
+ y, m, d = form["#{self.key}_year".to_sym], form["#{self.key}_mon".to_sym], form["#{self.key}_mday".to_sym]
379
+ return "#{y.to_i}-#{m.to_i}-#{d.to_i}"
285
380
  end
286
381
  end
287
382
 
@@ -290,62 +385,93 @@ module Ezframe
290
385
  return nil if no_edit? && !opts[:force]
291
386
  h = super
292
387
  h[:type] = "email" if h
388
+ h[:class] = @attribute[:class] if @attribute[:class]
293
389
  return h
294
390
  end
295
391
 
296
- def normalize
297
- return unless @value
298
- @value = NKF.nkf('-w -Z4', @value)
392
+ def normalize(val)
393
+ return nil unless val
394
+ return NKF.nkf('-w -Z4', val)
299
395
  end
300
396
 
301
- def validate
302
- super
397
+ def validate(val)
398
+ super(val)
303
399
  return @error if @error
304
- if email_format?
305
- @error = "形式が正しくありません"
400
+ if email_format?(val)
401
+ @error = :invalid_value
306
402
  return @error
307
403
  end
308
404
  return nil
309
405
  end
310
406
 
311
- def email_format?
312
- return nil unless @value
313
- return @value =~ /^[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
407
+ def email_format?(val)
408
+ return nil unless val
409
+ return val.to_s =~ /^[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
314
410
  end
315
411
  end
316
412
 
317
413
  class TelType < TextType
318
- def validate
319
- super
414
+ def validate(val)
415
+ super(val)
320
416
  return @error if @error
321
- unless /^0\d{9,10}$/ =~ @value
322
- @error = "形式が正しくありません"
417
+ unless /^0\d{9,10}$/ =~ val.to_s
418
+ @error = :invalid_value
323
419
  return @error
324
420
  end
421
+ return nil
422
+ end
423
+
424
+ def normalize(val)
425
+ return nil unless val
426
+ val = super(val)
427
+ val = val.tr("0-9", "0-9")
428
+ val = val.gsub(/\D+/, "")
429
+ return val
325
430
  end
326
431
  end
327
432
 
328
433
  class JpnameType < TextType
329
434
  end
330
435
 
331
- class JpnameKanaType < TextType
332
- def normalize
333
- return unless @value
334
- super
335
- @value.tr!("ァ-ン", "ぁ-ん")
436
+ class KatakanaType < TextType
437
+ def normalize(val)
438
+ val = super(val)
439
+ return val.tr("ァ-ン", "ぁ-ん")
336
440
  end
337
441
 
338
- def validation
339
- unless /^[ぁ-ん ]+$/ =~ @value
340
- "ひらがなのみで入力してください。"
442
+ def validate(val)
443
+ super(val)
444
+ return @error if @error
445
+ unless /^[ぁ-ん ]+$/ =~ val.to_s
446
+ @error = :hiragana_only
447
+ return @error
448
+ end
449
+ return nil
450
+ end
451
+ end
452
+
453
+ class KatakanaType < TextType
454
+ def normalize(val)
455
+ return nil unless val
456
+ val = super(val)
457
+ return val.tr("ぁ-ん", "ァ-ン")
458
+ end
459
+
460
+ def validate(val)
461
+ super(val)
462
+ return @error if @error
463
+ unless /^[ァ-ン ]+$/ =~ val
464
+ @error = :katakana_only
465
+ return @error
341
466
  end
467
+ return nil
342
468
  end
343
469
  end
344
470
 
345
471
  class PrefectureType < SelectType
346
472
  def initialize(attr)
347
473
  super(attr)
348
- @pref_a = %w[選択してください 北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県
474
+ @pref_a = %w[() 北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県
349
475
  茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県
350
476
  新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県
351
477
  三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県
@@ -359,11 +485,12 @@ module Ezframe
359
485
  def form(opts = {})
360
486
  return nil if no_edit? && !opts[:force]
361
487
  h = super
362
- h[:items] = @pref_h
488
+ h[:item] = @pref_h
363
489
  return h
364
490
  end
365
491
 
366
492
  def view
493
+ return nil if no_view? && !opts[:force]
367
494
  return @pref_h[@value.to_i]
368
495
  end
369
496
  end
@@ -376,8 +503,21 @@ module Ezframe
376
503
  return @value.to_s.gsub(/(\d{3})(\d{4})/) { "#{$1}-#{$2}" }
377
504
  end
378
505
 
379
- def db_type
380
- return "text"
506
+ def normalize(val)
507
+ val = super(val)
508
+ return nil unless val
509
+ val = val.tr("0-9", "0-9")
510
+ return val
511
+ end
512
+
513
+ def validate(val)
514
+ super(val)
515
+ return @error if @error
516
+ unless /^\d{7}$/ =~ val.to_s
517
+ @error = :invalid_value
518
+ return @error
519
+ end
520
+ return nil
381
521
  end
382
522
  end
383
523
  end
@@ -12,8 +12,12 @@ module Ezframe
12
12
  end
13
13
 
14
14
  def load_one_file(filename)
15
+ instr = File.open(filename, &:read)
16
+ if instr.index("\#{")
17
+ instr = Template.fill_in_text(instr)
18
+ end
15
19
  begin
16
- yaml = YAML.load_file(filename)
20
+ yaml = YAML.load(instr)
17
21
  rescue
18
22
  mylog("YAML load error: #{filename}")
19
23
  return
@@ -1,60 +1,60 @@
1
1
  # frozen_string_literal: true
2
+ require "oj"
2
3
 
3
4
  module Ezframe
4
- class Boot
5
+ class Controller
5
6
  class << self
6
- def exec(request, response)
7
- @request = request
7
+ def init
8
8
  Config.load_files("./config")
9
9
  Model.init
10
- model = Model.get_clone
10
+ Message.init
11
11
  Auth.init_warden if defined?(Warden)
12
+ end
13
+
14
+ def exec(request, response)
15
+ @request = request
16
+ model = Model.get_clone
12
17
  @request.env["model"] = model
13
18
 
14
19
  mylog("exec: path=#{request.path_info} params=#{request.params}")
15
- klass, method = PageBase::decide_route(request.path_info)
16
- unless klass
17
- response.status = 404
18
- response['Content-Type'] = 'text/html; charset=utf-8'
19
- response.body = [ Html.convert(Ht.p("file not found")) ]
20
+ page_instance, method, url_params = Route::choose(request)
21
+ mylog "page: #{page_instance.class}, method=#{method}, url_params=#{url_params}"
22
+ if !page_instance || page_instance == 404
23
+ file_not_found(response)
20
24
  return
21
25
  end
22
- method = "default" if !method || method=="undefined"
23
- page = klass.new(request, model)
24
- if request.post?
25
- method_full_name = "public_#{method}_post"
26
- else
27
- method_full_name = "public_#{method}_page"
28
- end
29
- if page.auth
30
- warden.authenticate!
31
- end
32
- # request.env["rack.session"]["kamatest"]="usable"
33
- # mylog "method: #{klass}.#{method_full_name}"
34
- #mylog "rack.session.id=#{request.env['rack.session'].id}"
26
+ @request.env["url_params"] = url_params
27
+ warden.authenticate! if page_instance.auth
35
28
  mylog "rack.session.keys=#{request.env['rack.session'].keys}"
36
- #mylog "warden=#{request.env['warden'].inspect}"
37
- mylog "klass=#{klass}, method=#{method_full_name}"
38
- body = if page.respond_to?(method_full_name)
39
- page.send(method_full_name)
40
- else
41
- mylog "no such method: #{method_full_name}"
42
- page.public_default_page
43
- end
29
+ page_instance.set_request(@request)
30
+ body = page_instance.send(method)
31
+
32
+ # 戻り値によるレスポンス生成
44
33
  if body.is_a?(Hash) || body.is_a?(Array)
34
+ # puts "Controller: body = #{body}"
45
35
  response.body = [ JSON.generate(body) ]
36
+ # response.body = [ Oj.dump(body) ]
46
37
  response['Content-Type'] = 'application/json; charset=utf-8'
47
38
  else
48
39
  response.body = [ body ]
49
40
  response['Content-Type'] = 'text/html; charset=utf-8'
50
41
  end
51
42
  response.status = 200
43
+ # puts response.body
52
44
  end
53
45
 
54
- # def file_not_found(response)
55
- # response.body = ['path not found']
56
- # response.status = 404
57
- # end
46
+ def file_not_found(response)
47
+ response.status = 404
48
+ response['Content-Type'] = 'text/html; charset=utf-8'
49
+ template_file = ("#{Config[:template_dir]}/404.html")
50
+ # puts template_file
51
+ if File.exist?(template_file)
52
+ body = File.read(template_file)
53
+ else
54
+ body = Html.convert(Ht.p("file not found"))
55
+ end
56
+ response.body = [ body ]
57
+ end
58
58
 
59
59
  def warden
60
60
  @request.env["warden"]