engine2 1.0.4 → 1.0.5
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 +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
|