ezframe 0.0.4 → 0.4.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.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/README.md +1 -1
- data/asset/css/materialize.min.css +13 -0
- data/asset/css/style.css +3 -0
- data/asset/html/index.html +1 -0
- data/{app_template/asset/image/favicon.ico → asset/image/c_e.ico} +0 -0
- data/asset/js/ezframe.js +387 -0
- data/exe/check_column_yml +64 -0
- data/exe/console +2 -2
- data/exe/{create_table.rb → create_table} +7 -4
- data/exe/dbmigrate +174 -0
- data/exe/html2ruby +61 -0
- data/ezframe.gemspec +10 -8
- data/lib/ezframe.rb +9 -3
- data/lib/ezframe/auth.rb +50 -31
- data/lib/ezframe/column_set.rb +314 -103
- data/lib/ezframe/column_type.rb +456 -99
- data/lib/ezframe/config.rb +27 -6
- data/lib/ezframe/controller.rb +41 -38
- data/lib/ezframe/database.rb +171 -52
- data/lib/ezframe/editor_common.rb +74 -0
- data/lib/ezframe/email.rb +34 -0
- data/lib/ezframe/ezlog.rb +40 -0
- data/lib/ezframe/ht.rb +42 -17
- data/lib/ezframe/html.rb +47 -31
- data/lib/ezframe/japanese_utils.rb +15 -0
- data/lib/ezframe/jquery-ui.rb +29 -0
- data/lib/ezframe/loader.rb +4 -4
- data/lib/ezframe/main_editor.rb +19 -0
- data/lib/ezframe/main_page_kit.rb +226 -0
- data/lib/ezframe/materialize.rb +10 -14
- data/lib/ezframe/message.rb +46 -0
- data/lib/ezframe/page_base.rb +59 -71
- data/lib/ezframe/route.rb +126 -0
- data/lib/ezframe/server.rb +16 -5
- data/lib/ezframe/single_page_editor.rb +22 -0
- data/lib/ezframe/single_page_kit.rb +199 -0
- data/lib/ezframe/sub_editor.rb +25 -0
- data/lib/ezframe/sub_page_kit.rb +213 -0
- data/lib/ezframe/template.rb +5 -4
- data/lib/ezframe/util.rb +45 -23
- data/lib/ezframe/version.rb +1 -1
- metadata +74 -34
- data/.rubocop.yml +0 -44
- data/app_template/asset/js/ezframe.js +0 -288
- data/app_template/config.ru +0 -10
- data/app_template/config/generic.yml +0 -3
- data/app_template/config/materialize.yml +0 -5
- data/app_template/pages/basic.rb +0 -5
- data/exe/setup.rb +0 -15
- data/lib/ezframe/editor.rb +0 -188
- data/lib/ezframe/model.rb +0 -52
- data/lib/ezframe/page_kit.rb +0 -63
data/app_template/config.ru
DELETED
data/app_template/pages/basic.rb
DELETED
data/exe/setup.rb
DELETED
data/lib/ezframe/editor.rb
DELETED
@@ -1,188 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ezframe
|
4
|
-
class DataEditor < PageBase
|
5
|
-
|
6
|
-
def initialize(request=nil, model=nil)
|
7
|
-
super(request, model)
|
8
|
-
decide_target
|
9
|
-
if model
|
10
|
-
@column_set = @model.column_sets[@target]
|
11
|
-
unless @column_set
|
12
|
-
raise "[ERROR] no such column set: #{@target}"
|
13
|
-
end
|
14
|
-
@dataset = @column_set.dataset
|
15
|
-
end
|
16
|
-
if @json
|
17
|
-
@event = @json[:event] || {}
|
18
|
-
@target_id = @event[@target]
|
19
|
-
end
|
20
|
-
@auth = false
|
21
|
-
init_vars
|
22
|
-
end
|
23
|
-
|
24
|
-
def init_vars
|
25
|
-
end
|
26
|
-
|
27
|
-
def decide_target
|
28
|
-
@target = self.class.to_s
|
29
|
-
if @target.index("::")
|
30
|
-
@target = $1 if /::(\w+)$/ =~ @target
|
31
|
-
end
|
32
|
-
@target.downcase!
|
33
|
-
@target = @target.to_sym
|
34
|
-
return @target
|
35
|
-
end
|
36
|
-
|
37
|
-
def public_login_page
|
38
|
-
flash_area = ""
|
39
|
-
mylog "public_login_page: #{@request}"
|
40
|
-
if @request
|
41
|
-
mylog "flash=#{@request.env['x-rack.flash']}"
|
42
|
-
flash_area = Ht.div(class: %w[teal], child: @request['env']['x-rack.flash'].error)
|
43
|
-
end
|
44
|
-
form = Ht.multi_div([ %w[container], %w[row]],
|
45
|
-
Ht.form(class: "col s6 offset-s3", action: "/#{@target}/login", method: "post", child: [
|
46
|
-
Materialize.input(type: "text", name: "account", label: "User ID"),
|
47
|
-
Materialize.input(type: "password", name: "password", label: "Password"),
|
48
|
-
Ht.button(type: "submit", class: %w[btn], child: "login")
|
49
|
-
]))
|
50
|
-
common_page(title: "Login", body: Html.convert(Materialize.convert([flash_area, form])))
|
51
|
-
end
|
52
|
-
|
53
|
-
def public_login_post
|
54
|
-
mylog "public_login_post: #{@params.inspect}, #{@json}"
|
55
|
-
warden.authenticate
|
56
|
-
public_index_page
|
57
|
-
end
|
58
|
-
|
59
|
-
#--------------------------------------------------------------------------------------------------------
|
60
|
-
# add new parts
|
61
|
-
def public_new_page
|
62
|
-
matrix = @column_set.map do |column|
|
63
|
-
[column.label, column.form]
|
64
|
-
end
|
65
|
-
matrix.push([Ht.button(child: "送信", class: %w[btn], event: "on=click:branch=add_new:url=/#{@target}/new:with=form")])
|
66
|
-
tb = Ht::Table.new(matrix)
|
67
|
-
layout = main_layout(left: sidenav, center: Ht.form(child: tb.to_h))
|
68
|
-
common_page(title: "新規登録", body: Html.convert(Materialize.convert(layout)))
|
69
|
-
end
|
70
|
-
|
71
|
-
def public_new_post
|
72
|
-
@column_set.values = @event[:form]
|
73
|
-
@column_set[:id].value = @target_id = @column_set.save
|
74
|
-
{ redirect: "/#{@target}/detail?id=#{@target_id}" }
|
75
|
-
end
|
76
|
-
|
77
|
-
#--------------------------------------------------------------------------------------------------------
|
78
|
-
# index parts
|
79
|
-
def public_index_page
|
80
|
-
data_a = @dataset.all
|
81
|
-
htb = make_index_table(data_a)
|
82
|
-
layout = index_layout(left: sidenav, center: Ht.form(child: htb))
|
83
|
-
common_page(title: "データ一覧", body: Html.convert(Materialize.convert(layout)))
|
84
|
-
end
|
85
|
-
|
86
|
-
def make_index_table(data_a)
|
87
|
-
column_header = [:id, :name, :email, :zipcode, :prefecture]
|
88
|
-
@column_set.each { |col| col.attribute.delete(:hidden) }
|
89
|
-
a_element = Proc.new { |key, id, text|
|
90
|
-
# mylog "proc executed"
|
91
|
-
if key == :name
|
92
|
-
Ht.a(href: "/#{@target}/detail?id=#{id}", child: text)
|
93
|
-
else
|
94
|
-
text
|
95
|
-
end
|
96
|
-
}
|
97
|
-
table = PageKit::IndexTable.new(column_header: column_header, column_set: @column_set, add_checkbox: :id,
|
98
|
-
decorate_column: a_element)
|
99
|
-
table.make_table(data_a)
|
100
|
-
end
|
101
|
-
|
102
|
-
alias_method :public_default_page, :public_index_page
|
103
|
-
|
104
|
-
#--------------------------------------------------------------------------------------------------------
|
105
|
-
# search parts
|
106
|
-
def public_search_post
|
107
|
-
mylog "public_search_post: #{@json.inspect}"
|
108
|
-
word = @event[:form][:word]
|
109
|
-
pattern = "%#{word}%"
|
110
|
-
data_a = @dataset.where(Sequel.|(Sequel.like(:name_kana, pattern), Sequel.like(:name, pattern))).all
|
111
|
-
make_index_table(data_a)
|
112
|
-
end
|
113
|
-
|
114
|
-
#--------------------------------------------------------------------------------------------------------
|
115
|
-
# detail parts
|
116
|
-
def public_detail_page
|
117
|
-
mylog "pubilc_detail_page: #{@request.params.inspect}"
|
118
|
-
@target_id ||= @request.params["id"]
|
119
|
-
data = @column_set.set_from_db(@target_id)
|
120
|
-
return common_page(title: "no data", body: "no customer data: #{@target_id}") unless data
|
121
|
-
common_page(title: "データ一覧", body: Html.convert(make_detail_page))
|
122
|
-
end
|
123
|
-
|
124
|
-
def make_detail_page
|
125
|
-
layout = main_layout( left: sidenav, center: detail_table )
|
126
|
-
@request.env['rack.session'][@target] = @target_id
|
127
|
-
layout[:event] = "on=load:branch=set_global@target=#{@target_id}"
|
128
|
-
Materialize.convert(layout)
|
129
|
-
end
|
130
|
-
|
131
|
-
def public_detail_post
|
132
|
-
mylog "public_detail_post: #{@request.params.inspect}: #{@json}"
|
133
|
-
if @json[:global]
|
134
|
-
@target_id ||= @json[:global][@target]
|
135
|
-
end
|
136
|
-
@column_set.set_from_db(@target_id)
|
137
|
-
case @event[:branch]
|
138
|
-
when "update_value"
|
139
|
-
update_value
|
140
|
-
end
|
141
|
-
{ inject: "#center-panel", is_html: true, body: Html.convert(Materialize.convert(detail_table)) }
|
142
|
-
end
|
143
|
-
|
144
|
-
private
|
145
|
-
|
146
|
-
def update_value
|
147
|
-
form = @event[:form]
|
148
|
-
@column_set.update(@target_id, form)
|
149
|
-
end
|
150
|
-
|
151
|
-
def detail_table
|
152
|
-
row_a = @column_set.map do |column|
|
153
|
-
# column.attribute.delete(:hidden) # Todo: remove this
|
154
|
-
Ht.tr(class: %w[hover-button-box], child: [
|
155
|
-
Ht.td(child: column.label),
|
156
|
-
Ht.td(child: Ht.div(class: %w[switch-box], child: [ detail_value_part(column), detail_form_part(column)].compact))
|
157
|
-
])
|
158
|
-
end
|
159
|
-
return Ht.table(child: row_a)
|
160
|
-
end
|
161
|
-
|
162
|
-
def detail_value_part(column)
|
163
|
-
return Ht.span(class: %w[switch-element], child: [ Ht.span(child: column.view) , edit_button(column)])
|
164
|
-
end
|
165
|
-
|
166
|
-
def detail_form_part(column)
|
167
|
-
return nil if column.attribute[:no_edit]
|
168
|
-
form = column.form
|
169
|
-
if (form)
|
170
|
-
form = Ht.form(class: %w[switch-element hide], child: [ Ht.span(child: column.form) , edit_ok_button(column), edit_cancel_button ])
|
171
|
-
end
|
172
|
-
return form
|
173
|
-
end
|
174
|
-
|
175
|
-
def edit_button(column)
|
176
|
-
return nil if column.attribute[:no_edit]
|
177
|
-
return Ht.button(class: %w[btn-floating switch-button hover-button hide right], child: Ht.icon("edit"))
|
178
|
-
end
|
179
|
-
|
180
|
-
def edit_ok_button(column)
|
181
|
-
return Ht.span(class: %w[btn small teal waves-effect waves-light], event: "on=click:branch=update_value:url=/#{@target}/detail:key=#{column.key}:with=form", child: Ht.icon("check"))
|
182
|
-
end
|
183
|
-
|
184
|
-
def edit_cancel_button
|
185
|
-
Ht.span(class: %w[btn red small waves-effect waves-light switch-button], child: Ht.icon("clear"))
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
data/lib/ezframe/model.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ezframe
|
4
|
-
class Model
|
5
|
-
class << self
|
6
|
-
|
7
|
-
def init_column_sets
|
8
|
-
@base_column_sets = ColumnSets.new
|
9
|
-
@base_column_sets.load_files('./columns')
|
10
|
-
end
|
11
|
-
|
12
|
-
def init_db
|
13
|
-
@base_db = Database.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def init
|
17
|
-
unless @base_column_sets
|
18
|
-
init_column_sets
|
19
|
-
init_db
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def get_clone
|
24
|
-
new(@base_column_sets.deep_dup, @base_db)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
attr_accessor :column_sets, :db
|
29
|
-
|
30
|
-
def initialize(column_sets, db)
|
31
|
-
@column_sets, @db = column_sets, db
|
32
|
-
@column_sets.model = self
|
33
|
-
# @column_sets.each {|name, colset| colset.model = self }
|
34
|
-
end
|
35
|
-
|
36
|
-
def create_tables
|
37
|
-
@column_sets.tables.each do |table_name, column_set|
|
38
|
-
begin
|
39
|
-
create_one_table(table_name, column_set)
|
40
|
-
rescue => e
|
41
|
-
mylog("*** #{e.inspect}\n#{$@.inspect}")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def create_one_table(table_name, column_set)
|
47
|
-
col_h = column_set.get_hash(:db_type)
|
48
|
-
mylog "create_one_table: col_h=#{col_h.inspect}"
|
49
|
-
@db.create_table(table_name, col_h)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/lib/ezframe/page_kit.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ezframe
|
4
|
-
module PageKit
|
5
|
-
class IndexTable
|
6
|
-
def initialize(attr = {})
|
7
|
-
@attribute = attr
|
8
|
-
end
|
9
|
-
|
10
|
-
def make_table(row_a)
|
11
|
-
column_set = @attribute[:column_set]
|
12
|
-
table_a = row_a.map do |row_h|
|
13
|
-
column_set.values = row_h
|
14
|
-
id = column_set[:id].value
|
15
|
-
value_a = (@attribute[:column_header]||[]).map do |key|
|
16
|
-
col = column_set[key]
|
17
|
-
unless col
|
18
|
-
mylog "undefined key: #{key}"
|
19
|
-
next
|
20
|
-
end
|
21
|
-
checkbox_key = @attribute[:add_checkbox]
|
22
|
-
if checkbox_key && key == checkbox_key
|
23
|
-
text = add_checkbox(col)
|
24
|
-
else
|
25
|
-
text = col.view
|
26
|
-
end
|
27
|
-
deco = @attribute[:decorate_column]
|
28
|
-
if deco
|
29
|
-
text = deco.call(key, id, text)
|
30
|
-
# mylog "deco: #{text}"
|
31
|
-
end
|
32
|
-
Ht.td(child: text)
|
33
|
-
end
|
34
|
-
tr = Ht.tr(child: value_a)
|
35
|
-
if @attribute[:onclick_rows]
|
36
|
-
tr[:id] = elem_id = "tr_#{id}"
|
37
|
-
end
|
38
|
-
tr
|
39
|
-
end
|
40
|
-
Ht.table(child: [make_header, table_a])
|
41
|
-
end
|
42
|
-
|
43
|
-
def add_checkbox(col)
|
44
|
-
Ht.checkbox(name: "checkbox_#{col.key}_#{col.value}", value: col.value, label: col.view)
|
45
|
-
end
|
46
|
-
|
47
|
-
def make_header
|
48
|
-
column_set = @attribute[:column_set]
|
49
|
-
th_a = (@attribute[:column_header]||[]).map do |key|
|
50
|
-
col = column_set[key]
|
51
|
-
if col
|
52
|
-
Ht.th(child: col.label)
|
53
|
-
else
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
end
|
57
|
-
if @attribute[:add_checkbox]
|
58
|
-
end
|
59
|
-
Ht.tr(child: th_a)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|