habarico 7.2.0.pre.beta.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 (221) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +82 -0
  4. data/Rakefile +15 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/habarico/action_schema_controller.rb +41 -0
  7. data/app/controllers/habarico/application_controller.rb +15 -0
  8. data/app/controllers/habarico/contrib/preferences/user_preferences_controller.rb +105 -0
  9. data/app/controllers/habarico/global_schema_controller.rb +11 -0
  10. data/app/controllers/habarico/local_schema_controller.rb +35 -0
  11. data/app/helpers/habarico/application_helper.rb +4 -0
  12. data/app/models/habarico/application_record.rb +5 -0
  13. data/app/views/layouts/habarico/application.html.erb +17 -0
  14. data/config/locales/cs.yml +39 -0
  15. data/config/locales/de.yml +39 -0
  16. data/config/locales/en.yml +39 -0
  17. data/config/locales/es.yml +39 -0
  18. data/config/locales/fr.yml +39 -0
  19. data/config/locales/it.yml +39 -0
  20. data/config/locales/ja.yml +39 -0
  21. data/config/locales/nl.yml +39 -0
  22. data/config/locales/pl.yml +39 -0
  23. data/config/locales/pt.yml +39 -0
  24. data/config/locales/ro.yml +39 -0
  25. data/config/locales/sk.yml +39 -0
  26. data/config/locales/uk.yml +39 -0
  27. data/config/routes.rb +1 -0
  28. data/lib/generators/habarico/preferences/install_generator.rb +27 -0
  29. data/lib/generators/habarico/preferences/templates/create_habarico_user_preferences.rb.tt +15 -0
  30. data/lib/habarico/active_model/references.rb +68 -0
  31. data/lib/habarico/authenticatable.rb +31 -0
  32. data/lib/habarico/config.rb +71 -0
  33. data/lib/habarico/context.rb +126 -0
  34. data/lib/habarico/contrib/preferences/base_preferences.rb +40 -0
  35. data/lib/habarico/contrib/preferences/config.rb +31 -0
  36. data/lib/habarico/contrib/preferences/errors.rb +79 -0
  37. data/lib/habarico/contrib/preferences/locales/cs.yml +8 -0
  38. data/lib/habarico/contrib/preferences/locales/de.yml +8 -0
  39. data/lib/habarico/contrib/preferences/locales/en.yml +8 -0
  40. data/lib/habarico/contrib/preferences/locales/es.yml +8 -0
  41. data/lib/habarico/contrib/preferences/locales/fr.yml +8 -0
  42. data/lib/habarico/contrib/preferences/locales/it.yml +8 -0
  43. data/lib/habarico/contrib/preferences/locales/ja.yml +8 -0
  44. data/lib/habarico/contrib/preferences/locales/nl.yml +8 -0
  45. data/lib/habarico/contrib/preferences/locales/pl.yml +8 -0
  46. data/lib/habarico/contrib/preferences/locales/pt.yml +8 -0
  47. data/lib/habarico/contrib/preferences/locales/ro.yml +8 -0
  48. data/lib/habarico/contrib/preferences/locales/sk.yml +8 -0
  49. data/lib/habarico/contrib/preferences/locales/uk.yml +8 -0
  50. data/lib/habarico/contrib/preferences/registry.rb +293 -0
  51. data/lib/habarico/contrib/preferences/routes.rb +17 -0
  52. data/lib/habarico/contrib/preferences/schemas.rb +129 -0
  53. data/lib/habarico/contrib/preferences/serializer.rb +19 -0
  54. data/lib/habarico/contrib/preferences/user_preference.rb +16 -0
  55. data/lib/habarico/contrib/preferences.rb +32 -0
  56. data/lib/habarico/controller.rb +584 -0
  57. data/lib/habarico/definition/action_reference.rb +18 -0
  58. data/lib/habarico/definition/actions/action.rb +14 -0
  59. data/lib/habarico/definition/actions/create_action.rb +18 -0
  60. data/lib/habarico/definition/actions/delete_action.rb +20 -0
  61. data/lib/habarico/definition/actions/edit_action.rb +18 -0
  62. data/lib/habarico/definition/actions/link_action.rb +11 -0
  63. data/lib/habarico/definition/actions/resource_action.rb +12 -0
  64. data/lib/habarico/definition/actions/save_action.rb +14 -0
  65. data/lib/habarico/definition/actions/show_action.rb +18 -0
  66. data/lib/habarico/definition/actions/upload_images_action.rb +11 -0
  67. data/lib/habarico/definition/actions/view_action.rb +11 -0
  68. data/lib/habarico/definition/boxes/array_box.rb +10 -0
  69. data/lib/habarico/definition/boxes/box.rb +32 -0
  70. data/lib/habarico/definition/boxes/gallery_box.rb +10 -0
  71. data/lib/habarico/definition/boxes/grid_box.rb +10 -0
  72. data/lib/habarico/definition/boxes/grid_item_box.rb +10 -0
  73. data/lib/habarico/definition/boxes/list_box.rb +10 -0
  74. data/lib/habarico/definition/boxes/object_box.rb +10 -0
  75. data/lib/habarico/definition/boxes/tab_box.rb +10 -0
  76. data/lib/habarico/definition/boxes/tab_item_box.rb +10 -0
  77. data/lib/habarico/definition/boxes/wizard_box.rb +10 -0
  78. data/lib/habarico/definition/concerns/definition_model.rb +38 -0
  79. data/lib/habarico/definition/definition.rb +206 -0
  80. data/lib/habarico/definition/field_reference.rb +9 -0
  81. data/lib/habarico/definition/filter_reference.rb +7 -0
  82. data/lib/habarico/definition/menu/link_menu_item.rb +12 -0
  83. data/lib/habarico/definition/menu/menu_item.rb +9 -0
  84. data/lib/habarico/definition/menu/text_menu_item.rb +12 -0
  85. data/lib/habarico/definition/menu/view_menu_item.rb +13 -0
  86. data/lib/habarico/definition/response.rb +13 -0
  87. data/lib/habarico/definition/views/action_view.rb +11 -0
  88. data/lib/habarico/definition/views/create_view.rb +15 -0
  89. data/lib/habarico/definition/views/edit_view.rb +15 -0
  90. data/lib/habarico/definition/views/list_view.rb +17 -0
  91. data/lib/habarico/definition/views/show_view.rb +15 -0
  92. data/lib/habarico/definition/views/view.rb +10 -0
  93. data/lib/habarico/engine.rb +6 -0
  94. data/lib/habarico/file_validations.rb +119 -0
  95. data/lib/habarico/generators/abstract_generator.rb +21 -0
  96. data/lib/habarico/generators/action/action_schema_generator.rb +111 -0
  97. data/lib/habarico/generators/action/confirm_dialog_properties_generator.rb +30 -0
  98. data/lib/habarico/generators/action/global_resource_action_schema_generator.rb +46 -0
  99. data/lib/habarico/generators/action/link_action_parameters_generator.rb +31 -0
  100. data/lib/habarico/generators/action/resource_action_endpoint_parameters_generator.rb +70 -0
  101. data/lib/habarico/generators/action/resource_action_parameters_generator.rb +40 -0
  102. data/lib/habarico/generators/action/resource_action_schema_generator.rb +51 -0
  103. data/lib/habarico/generators/action/save_action_parameters_generator.rb +26 -0
  104. data/lib/habarico/generators/action/upload_images_action_parameters_generator.rb +41 -0
  105. data/lib/habarico/generators/action/view_action_endpoint_parameters_generator.rb +37 -0
  106. data/lib/habarico/generators/action/view_action_parameters_generator.rb +56 -0
  107. data/lib/habarico/generators/endpoint/dynamic_render_options_generator.rb +26 -0
  108. data/lib/habarico/generators/endpoint/endpoints_schema_generator.rb +61 -0
  109. data/lib/habarico/generators/endpoint/enum_type_generator.rb +45 -0
  110. data/lib/habarico/generators/endpoint/field_options_generator.rb +179 -0
  111. data/lib/habarico/generators/endpoint/field_schema_generator.rb +381 -0
  112. data/lib/habarico/generators/endpoint/fields_schema_generator.rb +35 -0
  113. data/lib/habarico/generators/endpoint/filter_schema_generator.rb +201 -0
  114. data/lib/habarico/generators/endpoint/filters_schema_generator.rb +25 -0
  115. data/lib/habarico/generators/endpoint/method_schema_generator.rb +34 -0
  116. data/lib/habarico/generators/endpoint/number_field_options_generator.rb +45 -0
  117. data/lib/habarico/generators/endpoint/phone_field_options_generator.rb +29 -0
  118. data/lib/habarico/generators/endpoint/relation_field_options_generator.rb +90 -0
  119. data/lib/habarico/generators/endpoint/search_filter_schema_generator.rb +44 -0
  120. data/lib/habarico/generators/menu/menu_group_schema_generator.rb +63 -0
  121. data/lib/habarico/generators/menu/menu_link_parameters_generator.rb +31 -0
  122. data/lib/habarico/generators/menu/menu_schema_generator.rb +105 -0
  123. data/lib/habarico/generators/menu/menu_view_endpoint_parameters_generator.rb +44 -0
  124. data/lib/habarico/generators/menu/menu_view_parameters_generator.rb +50 -0
  125. data/lib/habarico/generators/resource/action_resource_schema_generator.rb +84 -0
  126. data/lib/habarico/generators/resource/global_resource_schema_generator.rb +70 -0
  127. data/lib/habarico/generators/resource/local_resource_schema_generator.rb +111 -0
  128. data/lib/habarico/generators/resource/object_resource_schema_generator.rb +49 -0
  129. data/lib/habarico/generators/resource/resource_schema_generator.rb +31 -0
  130. data/lib/habarico/generators/view/action_descriptor_generator.rb +88 -0
  131. data/lib/habarico/generators/view/array_box_parameters_generator.rb +34 -0
  132. data/lib/habarico/generators/view/box_options_generator.rb +23 -0
  133. data/lib/habarico/generators/view/box_schema_generator.rb +194 -0
  134. data/lib/habarico/generators/view/detail_view_parameters_generator.rb +57 -0
  135. data/lib/habarico/generators/view/field_descriptor_generator.rb +107 -0
  136. data/lib/habarico/generators/view/filter_descriptor_generator.rb +75 -0
  137. data/lib/habarico/generators/view/gallery_box_parameters_generator.rb +71 -0
  138. data/lib/habarico/generators/view/global_view_schema_generator.rb +59 -0
  139. data/lib/habarico/generators/view/grid_item_box_parameters_generator.rb +44 -0
  140. data/lib/habarico/generators/view/list_box_parameters_generator.rb +124 -0
  141. data/lib/habarico/generators/view/list_view_parameters_generator.rb +120 -0
  142. data/lib/habarico/generators/view/object_box_parameters_generator.rb +26 -0
  143. data/lib/habarico/generators/view/sort_descriptor_generator.rb +30 -0
  144. data/lib/habarico/generators/view/tab_box_parameters_generator.rb +26 -0
  145. data/lib/habarico/generators/view/view_endpoint_parameters_generator.rb +71 -0
  146. data/lib/habarico/generators/view/view_schema_generator.rb +87 -0
  147. data/lib/habarico/generators/view/wizard_box_parameters_generator.rb +32 -0
  148. data/lib/habarico/helpers/action_helper.rb +9 -0
  149. data/lib/habarico/helpers/attributes_helper.rb +67 -0
  150. data/lib/habarico/helpers/box_helper.rb +19 -0
  151. data/lib/habarico/helpers/callable_helper.rb +15 -0
  152. data/lib/habarico/helpers/filter_params_helper.rb +49 -0
  153. data/lib/habarico/helpers/order_by_helper.rb +56 -0
  154. data/lib/habarico/helpers/reflection_helper.rb +61 -0
  155. data/lib/habarico/helpers/sorting_helper.rb +136 -0
  156. data/lib/habarico/schema/action/action_schema.rb +46 -0
  157. data/lib/habarico/schema/action/confirm_dialog_properties.rb +13 -0
  158. data/lib/habarico/schema/action/global_resource_action_schema.rb +29 -0
  159. data/lib/habarico/schema/action/link_action_parameters.rb +15 -0
  160. data/lib/habarico/schema/action/resource_action_endpoint_parameters.rb +24 -0
  161. data/lib/habarico/schema/action/resource_action_parameters.rb +17 -0
  162. data/lib/habarico/schema/action/resource_action_schema.rb +14 -0
  163. data/lib/habarico/schema/action/save_action_parameters.rb +10 -0
  164. data/lib/habarico/schema/action/upload_images_action_parameters.rb +23 -0
  165. data/lib/habarico/schema/action/view_action_endpoint_parameters.rb +16 -0
  166. data/lib/habarico/schema/action/view_action_parameters.rb +27 -0
  167. data/lib/habarico/schema/endpoint/ai_field_options.rb +10 -0
  168. data/lib/habarico/schema/endpoint/box_options.rb +10 -0
  169. data/lib/habarico/schema/endpoint/choices_field_options.rb +10 -0
  170. data/lib/habarico/schema/endpoint/dynamic_render_options.rb +14 -0
  171. data/lib/habarico/schema/endpoint/endpoints_schema.rb +22 -0
  172. data/lib/habarico/schema/endpoint/enum_type.rb +21 -0
  173. data/lib/habarico/schema/endpoint/field_options.rb +56 -0
  174. data/lib/habarico/schema/endpoint/field_schema.rb +65 -0
  175. data/lib/habarico/schema/endpoint/filter_schema.rb +44 -0
  176. data/lib/habarico/schema/endpoint/image_field_options.rb +13 -0
  177. data/lib/habarico/schema/endpoint/key_value.rb +13 -0
  178. data/lib/habarico/schema/endpoint/method_schema.rb +13 -0
  179. data/lib/habarico/schema/endpoint/number_field_options.rb +24 -0
  180. data/lib/habarico/schema/endpoint/phone_field_options.rb +13 -0
  181. data/lib/habarico/schema/endpoint/relation_field_options.rb +39 -0
  182. data/lib/habarico/schema/extensible_enum.rb +20 -0
  183. data/lib/habarico/schema/menu/action_view_choice.rb +13 -0
  184. data/lib/habarico/schema/menu/menu_group_schema.rb +26 -0
  185. data/lib/habarico/schema/menu/menu_schema.rb +36 -0
  186. data/lib/habarico/schema/resource/global_resource_schema.rb +14 -0
  187. data/lib/habarico/schema/resource/local_resource_schema.rb +14 -0
  188. data/lib/habarico/schema/resource/object_resource_schema.rb +8 -0
  189. data/lib/habarico/schema/resource/resource_schema.rb +16 -0
  190. data/lib/habarico/schema/types.rb +102 -0
  191. data/lib/habarico/schema/view/action_descriptor.rb +30 -0
  192. data/lib/habarico/schema/view/array_box_parameters.rb +13 -0
  193. data/lib/habarico/schema/view/box_schema.rb +67 -0
  194. data/lib/habarico/schema/view/detail_view_parameters.rb +16 -0
  195. data/lib/habarico/schema/view/field_descriptor.rb +50 -0
  196. data/lib/habarico/schema/view/field_wrapper_properties.rb +13 -0
  197. data/lib/habarico/schema/view/filter_descriptor.rb +24 -0
  198. data/lib/habarico/schema/view/gallery_box_parameters.rb +31 -0
  199. data/lib/habarico/schema/view/global_view_schema.rb +25 -0
  200. data/lib/habarico/schema/view/grid_item_box_parameters.rb +13 -0
  201. data/lib/habarico/schema/view/list_box_parameters.rb +44 -0
  202. data/lib/habarico/schema/view/list_view_parameters.rb +31 -0
  203. data/lib/habarico/schema/view/object_box_parameters.rb +10 -0
  204. data/lib/habarico/schema/view/sort_descriptor.rb +15 -0
  205. data/lib/habarico/schema/view/sortable_parameters.rb +13 -0
  206. data/lib/habarico/schema/view/tab_box_parameters.rb +10 -0
  207. data/lib/habarico/schema/view/view_action_descriptor_parameters.rb +21 -0
  208. data/lib/habarico/schema/view/view_endpoint_parameters.rb +22 -0
  209. data/lib/habarico/schema/view/view_schema.rb +33 -0
  210. data/lib/habarico/schema/view/wizard_box_parameters.rb +13 -0
  211. data/lib/habarico/search/field_resolver.rb +138 -0
  212. data/lib/habarico/search/search_matcher.rb +152 -0
  213. data/lib/habarico/serializers/meta_serializer.rb +42 -0
  214. data/lib/habarico/serializers/record_serializer.rb +33 -0
  215. data/lib/habarico/serializers/serializer.rb +61 -0
  216. data/lib/habarico/services/resource_service.rb +69 -0
  217. data/lib/habarico/services/routing_service.rb +160 -0
  218. data/lib/habarico/services/schema_service.rb +72 -0
  219. data/lib/habarico/version.rb +5 -0
  220. data/lib/habarico.rb +262 -0
  221. metadata +324 -0
@@ -0,0 +1,20 @@
1
+ module Habarico
2
+ class DeleteAction < ResourceAction
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @name = 'delete'
7
+ @icon = 'Delete'
8
+ @color = 'error'
9
+ @is_detail = true # -> tied to a single resource item
10
+ @show_in_detail = false # -> do not show in detail views
11
+ @show_in_list = true # -> show in list views (for each item in the list)
12
+ @endpoint_method = :delete # -> use HTTP DELETE method
13
+ @confirm_dialog_title = I18n.t('confirmations.common.delete.title', default: nil)
14
+ @confirm_dialog_message = I18n.t('confirmations.common.delete.message', default: nil)
15
+ @permission = :delete
16
+ super(params)
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ module Habarico
2
+ class EditAction < ViewAction
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @name = 'edit'
7
+ @icon = 'Edit'
8
+ @is_detail = true # -> tied to a single resource item
9
+ @show_in_detail = true # -> show in detail views (on top of the detail)
10
+ @show_in_list = true # -> show in list views (for each item in the list)
11
+ @view_name = 'edit' # -> connect it to the Habarico::EditView or any other view named 'edit'
12
+ @view_mode = :redirect # -> open the view on the new page
13
+ @permission = :update
14
+ super(params)
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ module Habarico
2
+ class LinkAction < Action
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :link
7
+ super(params)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Habarico
2
+ class ResourceAction < Action
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :resource
7
+ @is_background = false
8
+ super(params)
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module Habarico
2
+ class SaveAction < Action
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :save
7
+ @name = 'save'
8
+ @icon = 'Check'
9
+ @color = :primary
10
+ super(params)
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ module Habarico
2
+ class ShowAction < ViewAction
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @name = 'show'
7
+ @icon = 'Visibility'
8
+ @is_detail = true # -> tied to a single resource item
9
+ @show_in_detail = true # -> show in detail views (on top of the detail)
10
+ @show_in_list = true # -> show in list views (for each item in the list)
11
+ @view_name = 'show' # -> connect it to the Habarico::ShowView or any other view named 'show'
12
+ @view_mode = :redirect # -> open the view on the new page
13
+ @permission = :read
14
+ super(params)
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ module Habarico
2
+ class UploadImagesAction < Action
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :"upload-images"
7
+ super(params)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Habarico
2
+ class ViewAction < Action
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :view
7
+ super(params)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class ArrayBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'array'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,32 @@
1
+ module Habarico
2
+ class Box
3
+ include DefinitionModel
4
+
5
+ attr_accessor :type, :label, :name, :read_only, :card, :collapsible, :boxes, :show_query, :required_query, :toolbar_actions, :bottom_actions
6
+
7
+ # Gallery
8
+ attr_accessor :reference, :target, :image_field, :schema_params, :extra_filters
9
+
10
+ # Array
11
+ attr_accessor :target, :inline # rubocop:disable Lint/DuplicateMethods -- intentional for readability
12
+
13
+ # Grid Item
14
+ attr_accessor :xs, :sm, :md, :lg, :xl
15
+
16
+ # List
17
+ attr_accessor :reference, :target, :extra_filters, :row_actions, :list_toolbar_actions, :list_actions, :filters, :default_sorting, # rubocop:disable Lint/DuplicateMethods -- intentional for readability
18
+ :sortable_field_name, :sortable_sort_for_filters, :single_click_action, :double_click_action
19
+
20
+ # Object
21
+ attr_accessor :target # rubocop:disable Lint/DuplicateMethods -- intentional for readability
22
+
23
+ # Tab / Wizard
24
+ attr_accessor :show_toolbar_navigation, :validate_steps
25
+
26
+ def initialize(params = {})
27
+ super(params)
28
+ @type = 'simple'
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class GalleryBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'gallery'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class GridBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'grid'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class GridItemBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'grid-item'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class ListBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'list'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class ObjectBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'object'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class TabBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'tab'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class TabItemBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'tab-item'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Habarico
2
+ class WizardBox < Box
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ super(params)
7
+ @type = 'wizard'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,38 @@
1
+ module Habarico
2
+ module DefinitionModel
3
+ extend ActiveSupport::Concern
4
+
5
+ def initialize(params = {})
6
+ self.class.attrs.each do |attr|
7
+ if params.key?(attr)
8
+ self.send("#{attr}=", params[attr])
9
+ end
10
+ end
11
+ end
12
+
13
+ def assign(params = {})
14
+ self.class.attrs.each do |attr|
15
+ if params.key?(attr)
16
+ self.send("#{attr}=", params[attr])
17
+ end
18
+ end
19
+ end
20
+
21
+ class_methods do
22
+
23
+ def attrs
24
+ if @attrs.nil?
25
+ @attrs = []
26
+ @attrs.concat(self.superclass.attrs) if self.superclass.respond_to?(:attrs)
27
+ end
28
+ @attrs
29
+ end
30
+
31
+ def attr_accessor(*attrs)
32
+ self.attrs.concat(attrs)
33
+ super(*attrs)
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,206 @@
1
+ module Habarico
2
+ class Definition
3
+ include DefinitionModel
4
+
5
+ attr_accessor :model, :default_sorting, :force_sorting, :default_filter, :includes, :prefetch, :scopes,
6
+
7
+ # Metadata
8
+ :tags,
9
+
10
+ # Navigation
11
+ :icon, :label, :fields, :menu_path, :menu_item, :breadcrumbs,
12
+
13
+ # Search (per-resource; the cross-resource spotlight search adds
14
+ # `global_fulltext_search_enabled` from habarico-enterprise - HAB-812)
15
+ :search_fields,
16
+
17
+ # Fields and filters
18
+ :sorting_fields, :read_only_fields, :write_only_fields, :filters,
19
+
20
+ # Pagination (per resource; `nil` falls back to `Habarico::Config` and then to
21
+ # the eluvia-base defaults - see `Habarico::Controller#set_list_pagination`)
22
+ :default_page_limit, :max_page_limit,
23
+
24
+ # Aggregation and dashboard are paid: habarico-enterprise adds
25
+ # `aggregate_enabled`, `aggregate_max_buckets`, `aggregate_fields`,
26
+ # `aggregate_schema_generator` and `dashboard_enabled` here (HAB-812).
27
+
28
+ # Views and actions
29
+ :views, :actions,
30
+
31
+ # Permissions
32
+ :can, :can_read, :can_create, :can_update, :can_delete, :allow_read_by_id,
33
+ :policy_scope,
34
+
35
+ # Generator classes - action
36
+ :link_action_parameters_generator, :resource_action_endpoint_parameters_generator,
37
+ :resource_action_parameters_generator, :save_action_parameters_generator, :action_schema_generator,
38
+ :view_action_endpoint_parameters_generator, :view_action_parameters_generator,
39
+ :confirm_dialog_properties_generator, :global_resource_action_schema_generator,
40
+ :resource_action_schema_generator, :upload_images_action_parameters_generator,
41
+
42
+ # Generator classes - endpoint
43
+ :dynamic_render_options_generator, :method_schema_generator, :endpoints_schema_generator,
44
+ :enum_type_generator, :field_options_generator, :field_schema_generator,
45
+ :fields_schema_generator, :filter_schema_generator, :filters_schema_generator,
46
+ :number_field_options_generator, :phone_field_options_generator, :relation_field_options_generator,
47
+ :search_filter_schema_generator,
48
+
49
+ # Generator classes - menu
50
+ :menu_group_schema_generator, :menu_link_parameters_generator, :menu_schema_generator,
51
+ :menu_view_endpoint_parameters_generator, :menu_view_parameters_generator,
52
+
53
+ # Generator classes - resource
54
+ :action_resource_schema_generator, :global_resource_schema_generator,
55
+ :local_resource_schema_generator, :object_resource_schema_generator,
56
+
57
+ # Generator classes - view
58
+ :action_descriptor_generator, :array_box_parameters_generator, :box_options_generator,
59
+ :box_schema_generator, :field_descriptor_generator, :filter_descriptor_generator,
60
+ :gallery_box_parameters_generator, :global_view_schema_generator, :grid_item_box_parameters_generator,
61
+ :list_box_parameters_generator, :object_box_parameters_generator, :sort_descriptor_generator,
62
+ :tab_box_parameters_generator, :wizard_box_parameters_generator, :detail_view_parameters_generator,
63
+ :view_endpoint_parameters_generator, :list_view_parameters_generator, :view_schema_generator
64
+
65
+ def initialize
66
+
67
+ # No column is assumed to exist. Without a declaration the list is ordered by the primary
68
+ # key alone, which `Habarico::Controller#append_order_by_tiebreaker` appends anyway
69
+ # (HAB-915).
70
+ @default_sorting = nil
71
+ @force_sorting = false
72
+ @default_filter = {}
73
+ @includes = []
74
+ @scopes = []
75
+
76
+ # Fields and filters
77
+ @fields = []
78
+ @read_only_fields = []
79
+ @write_only_fields = []
80
+ @sorting_fields = []
81
+ @filters = []
82
+
83
+ # Aggregation
84
+
85
+ # Dashboard
86
+
87
+ # Views and actions
88
+ @views = %i[list show]
89
+ @actions = [:show]
90
+
91
+ # Search
92
+ @search_fields = []
93
+
94
+ # ***********************************************************************
95
+ # Permissions
96
+ # ***********************************************************************
97
+
98
+ @can_read = true
99
+ @can_create = false
100
+ @can_update = false
101
+ @can_delete = false
102
+ # Explicit opt-in for ID-based reads without `can_read`: `show` by ID and the id__in-only
103
+ # `index` mode. Cross-service reference resources (resolved via `ReferenceField`) need this.
104
+ @allow_read_by_id = false
105
+
106
+ # ***********************************************************************
107
+ # Generator classes
108
+ # ***********************************************************************
109
+
110
+ # Action
111
+ @link_action_parameters_generator = Habarico::LinkActionParametersGenerator
112
+ @resource_action_endpoint_parameters_generator = Habarico::ResourceActionEndpointParametersGenerator
113
+ @resource_action_parameters_generator = Habarico::ResourceActionParametersGenerator
114
+ @save_action_parameters_generator = Habarico::SaveActionParametersGenerator
115
+ @action_schema_generator = Habarico::ActionSchemaGenerator
116
+ @view_action_endpoint_parameters_generator = Habarico::ViewActionEndpointParametersGenerator
117
+ @view_action_parameters_generator = Habarico::ViewActionParametersGenerator
118
+ @confirm_dialog_properties_generator = Habarico::ConfirmDialogPropertiesGenerator
119
+ @global_resource_action_schema_generator = Habarico::GlobalResourceActionSchemaGenerator
120
+ @resource_action_schema_generator = Habarico::ResourceActionSchemaGenerator
121
+ @upload_images_action_parameters_generator = Habarico::UploadImagesActionParametersGenerator
122
+
123
+ # Endpoint
124
+ @dynamic_render_options_generator = Habarico::DynamicRenderOptionsGenerator
125
+ @method_schema_generator = Habarico::MethodSchemaGenerator
126
+ @endpoints_schema_generator = Habarico::EndpointsSchemaGenerator
127
+ @enum_type_generator = Habarico::EnumTypeGenerator
128
+ @field_options_generator = Habarico::FieldOptionsGenerator
129
+ @field_schema_generator = Habarico::FieldSchemaGenerator
130
+ @fields_schema_generator = Habarico::FieldsSchemaGenerator
131
+ @filter_schema_generator = Habarico::FilterSchemaGenerator
132
+ @filters_schema_generator = Habarico::FiltersSchemaGenerator
133
+ @number_field_options_generator = Habarico::NumberFieldOptionsGenerator
134
+ @phone_field_options_generator = Habarico::PhoneFieldOptionsGenerator
135
+ @relation_field_options_generator = Habarico::RelationFieldOptionsGenerator
136
+ @search_filter_schema_generator = Habarico::SearchFilterSchemaGenerator
137
+
138
+ # Aggregate
139
+
140
+ # Menu
141
+ @menu_group_schema_generator = Habarico::MenuGroupSchemaGenerator
142
+ @menu_link_parameters_generator = Habarico::MenuLinkParametersGenerator
143
+ @menu_schema_generator = Habarico::MenuSchemaGenerator
144
+ @menu_view_endpoint_parameters_generator = Habarico::MenuViewEndpointParametersGenerator
145
+ @menu_view_parameters_generator = Habarico::MenuViewParametersGenerator
146
+
147
+ # Resource
148
+ @action_resource_schema_generator = Habarico::ActionResourceSchemaGenerator
149
+ @global_resource_schema_generator = Habarico::GlobalResourceSchemaGenerator
150
+ @local_resource_schema_generator = Habarico::LocalResourceSchemaGenerator
151
+ @object_resource_schema_generator = Habarico::ObjectResourceSchemaGenerator
152
+
153
+ # View
154
+ @action_descriptor_generator = Habarico::ActionDescriptorGenerator
155
+ @array_box_parameters_generator = Habarico::ArrayBoxParametersGenerator
156
+ @box_options_generator = Habarico::BoxOptionsGenerator
157
+ @box_schema_generator = Habarico::BoxSchemaGenerator
158
+ @field_descriptor_generator = Habarico::FieldDescriptorGenerator
159
+ @filter_descriptor_generator = Habarico::FilterDescriptorGenerator
160
+ @gallery_box_parameters_generator = Habarico::GalleryBoxParametersGenerator
161
+ @global_view_schema_generator = Habarico::GlobalViewSchemaGenerator
162
+ @grid_item_box_parameters_generator = Habarico::GridItemBoxParametersGenerator
163
+ @list_box_parameters_generator = Habarico::ListBoxParametersGenerator
164
+ @object_box_parameters_generator = Habarico::ObjectBoxParametersGenerator
165
+ @sort_descriptor_generator = Habarico::SortDescriptorGenerator
166
+ @tab_box_parameters_generator = Habarico::TabBoxParametersGenerator
167
+ @wizard_box_parameters_generator = Habarico::WizardBoxParametersGenerator
168
+ @detail_view_parameters_generator = Habarico::DetailViewParametersGenerator
169
+ @view_endpoint_parameters_generator = Habarico::ViewEndpointParametersGenerator
170
+ @list_view_parameters_generator = Habarico::ListViewParametersGenerator
171
+ @view_schema_generator = Habarico::ViewSchemaGenerator
172
+
173
+ end
174
+
175
+ def normalized_actions
176
+ @actions.map do |action|
177
+ if action.is_a?(String) || action.is_a?(Symbol)
178
+ case action.to_sym
179
+ when :show then Habarico::ShowAction.new
180
+ when :edit then Habarico::EditAction.new
181
+ when :create then Habarico::CreateAction.new
182
+ when :delete then Habarico::DeleteAction.new
183
+ end
184
+ elsif action.is_a?(Habarico::Action)
185
+ action
186
+ end
187
+ end.compact
188
+ end
189
+
190
+ def normalized_views
191
+ @views.map do |view|
192
+ if view.is_a?(String) || view.is_a?(Symbol)
193
+ case view.to_sym
194
+ when :list then Habarico::ListView.new
195
+ when :show then Habarico::ShowView.new
196
+ when :edit then Habarico::EditView.new
197
+ when :create then Habarico::CreateView.new
198
+ end
199
+ elsif view.is_a?(Habarico::View)
200
+ view
201
+ end
202
+ end.compact
203
+ end
204
+
205
+ end
206
+ end
@@ -0,0 +1,9 @@
1
+ module Habarico
2
+ class FieldReference
3
+ include DefinitionModel
4
+
5
+ attr_accessor :name, :label, :short_label, :help_text, :sortable, :sort_by, :read_only, :write_only, :default_value,
6
+ :show_query, :required_query, :text_align, :target, :action, :wrapper, :phone, :icons_key,
7
+ :resize_width, :crop_aspect_ratio, :parent, :ai_source_fields, :relation, :format, :max_size, :accept
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module Habarico
2
+ class FilterReference
3
+ include DefinitionModel
4
+
5
+ attr_accessor :name, :label, :help_text, :is_always_on, :default_value
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ module Habarico
2
+ class LinkMenuItem < MenuItem
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :link
7
+ @priority = 1
8
+ super(params)
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module Habarico
2
+ class MenuItem
3
+ include DefinitionModel
4
+
5
+ attr_accessor :name, :label, :type, :icon, :color, :priority, :view_name, :view_mode, :dialog_width, :view_keep_linked_parent, :link_url, :link_target,
6
+ :reference, :reference_action_name
7
+
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ module Habarico
2
+ class TextMenuItem < MenuItem
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :text
7
+ @priority = 1
8
+ super(params)
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Habarico
2
+ class ViewMenuItem < MenuItem
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :view
7
+ @view_mode = :redirect # -> open the view on the new page
8
+ @priority = 1
9
+ super(params)
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Habarico
2
+ class Response
3
+ include DefinitionModel
4
+
5
+ attr_accessor :message, :state, :action
6
+
7
+ def initialize(params = {})
8
+ @state = :success
9
+ super(params)
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Habarico
2
+ class ActionView < View
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :action
7
+ super(params)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Habarico
2
+ class CreateView < View
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :create
7
+ @name = 'create'
8
+ @is_detail = false
9
+ @endpoint_method = :post
10
+ @permission = :create
11
+ super(params)
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Habarico
2
+ class EditView < View
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :edit
7
+ @name = 'edit'
8
+ @is_detail = true
9
+ @endpoint_method = :patch
10
+ @permission = :update
11
+ super(params)
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module Habarico
2
+ class ListView < View
3
+ include DefinitionModel
4
+
5
+ attr_accessor :filters
6
+
7
+ def initialize(params = {})
8
+ @type = :list
9
+ @name = 'list'
10
+ @is_detail = false
11
+ @endpoint_method = :get
12
+ @permission = :read
13
+ super(params)
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Habarico
2
+ class ShowView < View
3
+ include DefinitionModel
4
+
5
+ def initialize(params = {})
6
+ @type = :show
7
+ @name = 'show'
8
+ @is_detail = true
9
+ @endpoint_method = :get
10
+ @permission = :read
11
+ super(params)
12
+ end
13
+
14
+ end
15
+ end