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.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -0
  3. data/Rakefile +1 -1
  4. data/app/{engine2actions.coffee → actions.coffee} +192 -142
  5. data/app/app.coffee +0 -0
  6. data/app/app.css +4 -0
  7. data/app/engine2.coffee +87 -175
  8. data/app/modal.coffee +133 -0
  9. data/bower.json +2 -1
  10. data/conf/message.yaml +0 -0
  11. data/conf/message_pl.yaml +0 -0
  12. data/config.coffee +11 -2
  13. data/engine2.gemspec +2 -2
  14. data/lib/engine2.rb +12 -10
  15. data/lib/engine2/action.rb +1290 -134
  16. data/lib/engine2/{meta/array_meta.rb → action/array.rb} +4 -3
  17. data/lib/engine2/{meta/decode_meta.rb → action/decode.rb} +16 -15
  18. data/lib/engine2/action/delete.rb +65 -0
  19. data/lib/engine2/action/form.rb +16 -0
  20. data/lib/engine2/{meta/infra_meta.rb → action/infra.rb} +118 -85
  21. data/lib/engine2/action/link.rb +117 -0
  22. data/lib/engine2/{meta/list_meta.rb → action/list.rb} +61 -62
  23. data/lib/engine2/action/save.rb +30 -0
  24. data/lib/engine2/action/view.rb +8 -0
  25. data/lib/engine2/action_node.rb +221 -0
  26. data/lib/engine2/core.rb +120 -77
  27. data/lib/engine2/handler.rb +9 -10
  28. data/lib/engine2/model.rb +4 -20
  29. data/lib/engine2/models/Files.rb +2 -1
  30. data/lib/engine2/models/UserInfo.rb +6 -3
  31. data/lib/engine2/post_bootstrap.rb +3 -2
  32. data/lib/engine2/pre_bootstrap.rb +1 -0
  33. data/lib/engine2/scheme.rb +98 -47
  34. data/lib/engine2/templates.rb +1 -0
  35. data/lib/engine2/type_info.rb +6 -4
  36. data/lib/engine2/version.rb +2 -1
  37. data/package.json +12 -10
  38. data/public/favicon.ico +0 -0
  39. data/public/img/ajax-loader-dark.gif +0 -0
  40. data/public/img/ajax-loader.gif +0 -0
  41. data/views/fields/blob.slim +0 -0
  42. data/views/fields/bs_select.slim +0 -0
  43. data/views/fields/bsselect_picker.slim +0 -0
  44. data/views/fields/bsselect_picker_opt.slim +0 -0
  45. data/views/fields/checkbox.slim +0 -0
  46. data/views/fields/checkbox_buttons.slim +0 -0
  47. data/views/fields/checkbox_buttons_opt.slim +0 -0
  48. data/views/fields/currency.slim +0 -0
  49. data/views/fields/date.slim +0 -0
  50. data/views/fields/date_range.slim +0 -0
  51. data/views/fields/date_time.slim +0 -0
  52. data/views/fields/datetime.slim +0 -0
  53. data/views/fields/decimal.slim +0 -0
  54. data/views/fields/decimal_date.slim +0 -0
  55. data/views/fields/decimal_time.slim +0 -0
  56. data/views/fields/email.slim +0 -0
  57. data/views/fields/file_store.slim +7 -7
  58. data/views/fields/input_text.slim +0 -0
  59. data/views/fields/integer.slim +0 -0
  60. data/views/fields/list_bsselect.slim +0 -0
  61. data/views/fields/list_bsselect_opt.slim +0 -0
  62. data/views/fields/list_buttons.slim +0 -0
  63. data/views/fields/list_buttons_opt.slim +0 -0
  64. data/views/fields/list_select.slim +0 -0
  65. data/views/fields/list_select_opt.slim +0 -0
  66. data/views/fields/password.slim +0 -0
  67. data/views/fields/radio_checkbox.slim +0 -0
  68. data/views/fields/scaffold.slim +0 -0
  69. data/views/fields/scaffold_picker.slim +0 -0
  70. data/views/fields/select_picker.slim +0 -0
  71. data/views/fields/select_picker_opt.slim +0 -0
  72. data/views/fields/text_area.slim +1 -0
  73. data/views/fields/time.slim +0 -0
  74. data/views/fields/typeahead_picker.slim +0 -0
  75. data/views/index.slim +3 -3
  76. data/views/infra/index.slim +0 -0
  77. data/views/infra/inspect.slim +20 -0
  78. data/views/modals/close_m.slim +0 -0
  79. data/views/modals/confirm_m.slim +0 -0
  80. data/views/modals/empty_m.slim +0 -0
  81. data/views/modals/menu_m.slim +1 -1
  82. data/views/modals/yes_no_m.slim +0 -0
  83. data/views/panels/menu_m.slim +1 -1
  84. data/views/scaffold/confirm.slim +0 -0
  85. data/views/scaffold/fields.slim +0 -0
  86. data/views/scaffold/form.slim +0 -0
  87. data/views/scaffold/form_collapse.slim +0 -0
  88. data/views/scaffold/form_tabs.slim +0 -0
  89. data/views/scaffold/list.slim +0 -0
  90. data/views/scaffold/message.slim +0 -0
  91. data/views/scaffold/search.slim +0 -0
  92. data/views/scaffold/search_collapse.slim +0 -0
  93. data/views/scaffold/search_tabs.slim +0 -0
  94. data/views/scaffold/view.slim +0 -0
  95. data/views/scaffold/view_collapse.slim +0 -0
  96. data/views/scaffold/view_tabs.slim +0 -0
  97. data/views/search_fields/bsmselect_picker.slim +0 -0
  98. data/views/search_fields/bsselect_picker.slim +0 -0
  99. data/views/search_fields/checkbox.slim +0 -0
  100. data/views/search_fields/checkbox2.slim +0 -0
  101. data/views/search_fields/checkbox_buttons.slim +0 -0
  102. data/views/search_fields/date_range.slim +0 -0
  103. data/views/search_fields/decimal_date_range.slim +0 -0
  104. data/views/search_fields/input_text.slim +0 -0
  105. data/views/search_fields/integer.slim +0 -0
  106. data/views/search_fields/integer_range.slim +0 -0
  107. data/views/search_fields/list_bsmselect.slim +0 -0
  108. data/views/search_fields/list_bsselect.slim +0 -0
  109. data/views/search_fields/list_buttons.slim +0 -0
  110. data/views/search_fields/list_select.slim +0 -0
  111. data/views/search_fields/scaffold_picker.slim +0 -0
  112. data/views/search_fields/select_picker.slim +0 -0
  113. data/views/search_fields/typeahead_picker.slim +0 -0
  114. metadata +41 -42
  115. data/lib/engine2/meta.rb +0 -1216
  116. data/lib/engine2/meta/delete_meta.rb +0 -60
  117. data/lib/engine2/meta/form_meta.rb +0 -15
  118. data/lib/engine2/meta/link_meta.rb +0 -134
  119. data/lib/engine2/meta/save_meta.rb +0 -50
  120. data/lib/engine2/meta/view_meta.rb +0 -7
  121. data/public/__sinatra__/404.png +0 -0
  122. 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,15 +0,0 @@
1
- # coding: utf-8
2
-
3
- module Engine2
4
- class FormMeta < Meta
5
- include MetaQuerySupport
6
- end
7
-
8
- class CreateMeta < FormMeta
9
- include MetaCreateSupport
10
- end
11
-
12
- class ModifyMeta < FormMeta
13
- include MetaModifySupport
14
- end
15
- 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
@@ -1,7 +0,0 @@
1
- # coding: utf-8
2
-
3
- module Engine2
4
- class ViewMeta < Meta
5
- include MetaViewSupport, MetaQuerySupport
6
- end
7
- end
Binary file
Binary file