engine2 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -0
- data/Rakefile +1 -1
- data/app/{engine2actions.coffee → actions.coffee} +192 -142
- data/app/app.coffee +0 -0
- data/app/app.css +4 -0
- data/app/engine2.coffee +87 -175
- data/app/modal.coffee +133 -0
- data/bower.json +2 -1
- data/conf/message.yaml +0 -0
- data/conf/message_pl.yaml +0 -0
- data/config.coffee +11 -2
- data/engine2.gemspec +2 -2
- data/lib/engine2.rb +12 -10
- data/lib/engine2/action.rb +1290 -134
- data/lib/engine2/{meta/array_meta.rb → action/array.rb} +4 -3
- data/lib/engine2/{meta/decode_meta.rb → action/decode.rb} +16 -15
- data/lib/engine2/action/delete.rb +65 -0
- data/lib/engine2/action/form.rb +16 -0
- data/lib/engine2/{meta/infra_meta.rb → action/infra.rb} +118 -85
- data/lib/engine2/action/link.rb +117 -0
- data/lib/engine2/{meta/list_meta.rb → action/list.rb} +61 -62
- data/lib/engine2/action/save.rb +30 -0
- data/lib/engine2/action/view.rb +8 -0
- data/lib/engine2/action_node.rb +221 -0
- data/lib/engine2/core.rb +120 -77
- data/lib/engine2/handler.rb +9 -10
- data/lib/engine2/model.rb +4 -20
- data/lib/engine2/models/Files.rb +2 -1
- data/lib/engine2/models/UserInfo.rb +6 -3
- data/lib/engine2/post_bootstrap.rb +3 -2
- data/lib/engine2/pre_bootstrap.rb +1 -0
- data/lib/engine2/scheme.rb +98 -47
- data/lib/engine2/templates.rb +1 -0
- data/lib/engine2/type_info.rb +6 -4
- data/lib/engine2/version.rb +2 -1
- data/package.json +12 -10
- data/public/favicon.ico +0 -0
- data/public/img/ajax-loader-dark.gif +0 -0
- data/public/img/ajax-loader.gif +0 -0
- data/views/fields/blob.slim +0 -0
- data/views/fields/bs_select.slim +0 -0
- data/views/fields/bsselect_picker.slim +0 -0
- data/views/fields/bsselect_picker_opt.slim +0 -0
- data/views/fields/checkbox.slim +0 -0
- data/views/fields/checkbox_buttons.slim +0 -0
- data/views/fields/checkbox_buttons_opt.slim +0 -0
- data/views/fields/currency.slim +0 -0
- data/views/fields/date.slim +0 -0
- data/views/fields/date_range.slim +0 -0
- data/views/fields/date_time.slim +0 -0
- data/views/fields/datetime.slim +0 -0
- data/views/fields/decimal.slim +0 -0
- data/views/fields/decimal_date.slim +0 -0
- data/views/fields/decimal_time.slim +0 -0
- data/views/fields/email.slim +0 -0
- data/views/fields/file_store.slim +7 -7
- data/views/fields/input_text.slim +0 -0
- data/views/fields/integer.slim +0 -0
- data/views/fields/list_bsselect.slim +0 -0
- data/views/fields/list_bsselect_opt.slim +0 -0
- data/views/fields/list_buttons.slim +0 -0
- data/views/fields/list_buttons_opt.slim +0 -0
- data/views/fields/list_select.slim +0 -0
- data/views/fields/list_select_opt.slim +0 -0
- data/views/fields/password.slim +0 -0
- data/views/fields/radio_checkbox.slim +0 -0
- data/views/fields/scaffold.slim +0 -0
- data/views/fields/scaffold_picker.slim +0 -0
- data/views/fields/select_picker.slim +0 -0
- data/views/fields/select_picker_opt.slim +0 -0
- data/views/fields/text_area.slim +1 -0
- data/views/fields/time.slim +0 -0
- data/views/fields/typeahead_picker.slim +0 -0
- data/views/index.slim +3 -3
- data/views/infra/index.slim +0 -0
- data/views/infra/inspect.slim +20 -0
- data/views/modals/close_m.slim +0 -0
- data/views/modals/confirm_m.slim +0 -0
- data/views/modals/empty_m.slim +0 -0
- data/views/modals/menu_m.slim +1 -1
- data/views/modals/yes_no_m.slim +0 -0
- data/views/panels/menu_m.slim +1 -1
- data/views/scaffold/confirm.slim +0 -0
- data/views/scaffold/fields.slim +0 -0
- data/views/scaffold/form.slim +0 -0
- data/views/scaffold/form_collapse.slim +0 -0
- data/views/scaffold/form_tabs.slim +0 -0
- data/views/scaffold/list.slim +0 -0
- data/views/scaffold/message.slim +0 -0
- data/views/scaffold/search.slim +0 -0
- data/views/scaffold/search_collapse.slim +0 -0
- data/views/scaffold/search_tabs.slim +0 -0
- data/views/scaffold/view.slim +0 -0
- data/views/scaffold/view_collapse.slim +0 -0
- data/views/scaffold/view_tabs.slim +0 -0
- data/views/search_fields/bsmselect_picker.slim +0 -0
- data/views/search_fields/bsselect_picker.slim +0 -0
- data/views/search_fields/checkbox.slim +0 -0
- data/views/search_fields/checkbox2.slim +0 -0
- data/views/search_fields/checkbox_buttons.slim +0 -0
- data/views/search_fields/date_range.slim +0 -0
- data/views/search_fields/decimal_date_range.slim +0 -0
- data/views/search_fields/input_text.slim +0 -0
- data/views/search_fields/integer.slim +0 -0
- data/views/search_fields/integer_range.slim +0 -0
- data/views/search_fields/list_bsmselect.slim +0 -0
- data/views/search_fields/list_bsselect.slim +0 -0
- data/views/search_fields/list_buttons.slim +0 -0
- data/views/search_fields/list_select.slim +0 -0
- data/views/search_fields/scaffold_picker.slim +0 -0
- data/views/search_fields/select_picker.slim +0 -0
- data/views/search_fields/typeahead_picker.slim +0 -0
- metadata +41 -42
- data/lib/engine2/meta.rb +0 -1216
- data/lib/engine2/meta/delete_meta.rb +0 -60
- data/lib/engine2/meta/form_meta.rb +0 -15
- data/lib/engine2/meta/link_meta.rb +0 -134
- data/lib/engine2/meta/save_meta.rb +0 -50
- data/lib/engine2/meta/view_meta.rb +0 -7
- data/public/__sinatra__/404.png +0 -0
- data/public/__sinatra__/500.png +0 -0
@@ -1,60 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
module Engine2
|
4
|
-
class DeleteMetaBase < Meta
|
5
|
-
|
6
|
-
def invoke_delete_db handler, ids
|
7
|
-
begin
|
8
|
-
model = assets[:model]
|
9
|
-
model.db.transaction do
|
10
|
-
ids.each do |id|
|
11
|
-
keys = split_keys(id)
|
12
|
-
restrict = model.association_reflections.select do |name, rel|
|
13
|
-
case rel[:type]
|
14
|
-
when :one_to_many
|
15
|
-
!model.db[name].where(Hash[rel[:keys].zip(keys)]).empty?
|
16
|
-
when :many_to_many
|
17
|
-
!model.db[rel[:join_table]].where(Hash[rel[:left_keys].zip(keys)]).empty?
|
18
|
-
when :many_to_one
|
19
|
-
when :one_to_one
|
20
|
-
else
|
21
|
-
unsupported_association rel[:type]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
raise Sequel::DestroyFailed.new("Blokujące relacje: #{restrict.map{|name, rel| name}.join(', ')}" ) unless restrict.empty?
|
25
|
-
|
26
|
-
rec = model.call(Hash[model.primary_keys.zip(keys)])
|
27
|
-
rec.destroy(transaction: false)
|
28
|
-
# model.where(model.primary_keys_hash(keys)).delete # model.dataset[model.primary_key => id].delete
|
29
|
-
end
|
30
|
-
end
|
31
|
-
{}
|
32
|
-
rescue Sequel::NoExistingObject
|
33
|
-
handler.halt_not_found LOCS[:no_entry]
|
34
|
-
rescue Sequel::DestroyFailed => failure
|
35
|
-
handler.halt_forbidden failure.error.to_s
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
class DeleteMeta < DeleteMetaBase
|
42
|
-
include MetaDeleteSupport
|
43
|
-
|
44
|
-
def invoke handler
|
45
|
-
handler.permit id = handler.params[:id]
|
46
|
-
invoke_delete_db(handler, [id])
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class BulkDeleteMeta < DeleteMetaBase
|
51
|
-
include MetaBulkDeleteSupport
|
52
|
-
|
53
|
-
def invoke handler
|
54
|
-
ids = handler.param_to_json(:ids)
|
55
|
-
handler.permit ids.is_a?(Array)
|
56
|
-
invoke_delete_db(handler, ids)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
@@ -1,134 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
module Engine2
|
4
|
-
class StarToManyLinkMeta < Meta
|
5
|
-
include MetaModelSupport
|
6
|
-
http_method :post
|
7
|
-
meta_type :star_to_many_link
|
8
|
-
|
9
|
-
def invoke handler
|
10
|
-
json = handler.post_to_json
|
11
|
-
parent = json[:parent_id]
|
12
|
-
ids = json[:ids]
|
13
|
-
handler.permit parent && ids
|
14
|
-
model = assets[:model]
|
15
|
-
assoc = assets[:assoc]
|
16
|
-
case assoc[:type]
|
17
|
-
when :one_to_many
|
18
|
-
model.db.transaction do
|
19
|
-
self.class.one_to_many_link_db model, assoc, split_keys(parent), ids
|
20
|
-
end
|
21
|
-
{}
|
22
|
-
when :many_to_many
|
23
|
-
self.class.many_to_many_link_db model, assoc, split_keys(parent), ids
|
24
|
-
{}
|
25
|
-
else unsupported_association
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.one_to_many_link_db model, assoc, parent, ids
|
30
|
-
pk = Hash[assoc[:keys].zip(parent)]
|
31
|
-
ids.each do |id|
|
32
|
-
model.where(model.primary_keys_hash(Sequel::split_keys(id))).update(pk)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.many_to_many_link_db model, assoc, parent, ids
|
37
|
-
p_pk = Hash[assoc[:left_keys].zip(parent)]
|
38
|
-
values = ids.map do |id|
|
39
|
-
p_pk.merge Hash[assoc[:right_keys].zip(Sequel::split_keys(id))]
|
40
|
-
end
|
41
|
-
model.db[assoc[:join_table]].multi_insert values
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
class StarToManyUnlinkMetaBase < Meta
|
46
|
-
include MetaModelSupport
|
47
|
-
http_method :delete
|
48
|
-
|
49
|
-
def one_to_many_unlink_db handler, ids
|
50
|
-
model = assets[:model]
|
51
|
-
assoc = assets[:assoc]
|
52
|
-
keys = assoc[:keys]
|
53
|
-
if keys.all?{|k|model.db_schema[k][:allow_null] == true}
|
54
|
-
model.db.transaction do
|
55
|
-
self.class.one_to_many_unlink_db model, assoc, ids
|
56
|
-
end
|
57
|
-
{}
|
58
|
-
else
|
59
|
-
handler.halt_method_not_allowed LOCS[:"non_nullable"]
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.one_to_many_unlink_db model, assoc, ids
|
64
|
-
keys = assoc[:keys]
|
65
|
-
ids.each do |id|
|
66
|
-
model.where(model.primary_keys_hash(Sequel::split_keys(id))).update(Hash[keys.zip([nil])])
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def many_to_many_unlink_db parent, ids
|
71
|
-
model = assets[:model]
|
72
|
-
assoc = assets[:assoc]
|
73
|
-
|
74
|
-
model.db.transaction do
|
75
|
-
self.class.many_to_many_unlink_db model, assoc, Sequel::split_keys(parent), ids
|
76
|
-
end
|
77
|
-
{}
|
78
|
-
end
|
79
|
-
|
80
|
-
def self.many_to_many_unlink_db model, assoc, parent, ids
|
81
|
-
p_pk = Hash[assoc[:left_keys].zip(parent)]
|
82
|
-
ds = model.db[assoc[:join_table]]
|
83
|
-
ids.each do |id|
|
84
|
-
ds.where(p_pk, Hash[assoc[:right_keys].zip(Sequel::split_keys(id))]).delete
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
class StarToManyUnlinkMeta < StarToManyUnlinkMetaBase
|
90
|
-
meta_type :star_to_many_unlink
|
91
|
-
|
92
|
-
def pre_run
|
93
|
-
super
|
94
|
-
action.parent.parent.*.menu(:item_menu).option :confirm_unlink, icon: "minus", show: "action.selected_size() == 0", button_loc: false
|
95
|
-
end
|
96
|
-
|
97
|
-
def invoke handler
|
98
|
-
handler.permit id = handler.params[:id]
|
99
|
-
assoc = assets[:assoc]
|
100
|
-
case assoc[:type]
|
101
|
-
when :one_to_many
|
102
|
-
one_to_many_unlink_db(handler, [id])
|
103
|
-
when :many_to_many
|
104
|
-
handler.permit parent = handler.params[:parent_id]
|
105
|
-
many_to_many_unlink_db(parent, [id])
|
106
|
-
else unsupported_association
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
class StarToManyBulkUnlinkMeta < StarToManyUnlinkMetaBase
|
112
|
-
meta_type :star_to_many_bulk_unlink
|
113
|
-
|
114
|
-
def pre_run
|
115
|
-
super
|
116
|
-
action.parent.parent.*.select_toggle_menu
|
117
|
-
action.parent.parent.*.menu(:menu).option_after :default_order, :confirm_bulk_unlink, icon: "minus", show: "action.selected_size() > 0", button_loc: false
|
118
|
-
end
|
119
|
-
|
120
|
-
def invoke handler
|
121
|
-
ids = handler.param_to_json(:ids)
|
122
|
-
handler.permit ids.is_a?(Array)
|
123
|
-
assoc = assets[:assoc]
|
124
|
-
case assoc[:type]
|
125
|
-
when :one_to_many
|
126
|
-
one_to_many_unlink_db(handler, ids)
|
127
|
-
when :many_to_many
|
128
|
-
handler.permit parent = handler.params[:parent_id]
|
129
|
-
many_to_many_unlink_db(parent, ids)
|
130
|
-
else unsupported_association
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
module Engine2
|
4
|
-
|
5
|
-
class SaveMeta < Meta
|
6
|
-
include MetaApproveSupport
|
7
|
-
|
8
|
-
def validate_and_approve handler, record, json
|
9
|
-
record.skip_save_refresh = true
|
10
|
-
record.raise_on_save_failure = false
|
11
|
-
model = assets[:model]
|
12
|
-
assoc = assets[:assoc]
|
13
|
-
mtm_insert = record.new? && assoc && assoc[:type] == :many_to_many
|
14
|
-
|
15
|
-
save = lambda do|c|
|
16
|
-
if super(handler, record, json)
|
17
|
-
result = record.save(transaction: false, validate: false)
|
18
|
-
if result && mtm_insert
|
19
|
-
handler.permit parent_id = json[:parent_id]
|
20
|
-
model.db[assoc[:join_table]].insert(assoc[:left_keys] + assoc[:right_keys], split_keys(parent_id) + record.primary_key_values)
|
21
|
-
end
|
22
|
-
result
|
23
|
-
end
|
24
|
-
end
|
25
|
-
(model.validation_in_transaction || mtm_insert) ? model.db.transaction(&save) : save.(nil)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class InsertMeta < SaveMeta
|
30
|
-
meta_type :approve
|
31
|
-
def allocate_record handler, json
|
32
|
-
record = super(handler, json)
|
33
|
-
record.instance_variable_set(:"@new", true)
|
34
|
-
model = assets[:model]
|
35
|
-
model.primary_keys.each{|k|record.values.delete k} unless model.natural_key
|
36
|
-
handler.permit !record.has_primary_key? unless model.natural_key
|
37
|
-
record
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
class UpdateMeta < SaveMeta
|
42
|
-
meta_type :approve
|
43
|
-
def allocate_record handler, json
|
44
|
-
record = super(handler, json)
|
45
|
-
model = assets[:model]
|
46
|
-
handler.permit record.has_primary_key? unless model.natural_key
|
47
|
-
record
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
data/public/__sinatra__/404.png
DELETED
Binary file
|
data/public/__sinatra__/500.png
DELETED
Binary file
|