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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +82 -0
- data/Rakefile +15 -0
- data/VERSION +1 -0
- data/app/controllers/habarico/action_schema_controller.rb +41 -0
- data/app/controllers/habarico/application_controller.rb +15 -0
- data/app/controllers/habarico/contrib/preferences/user_preferences_controller.rb +105 -0
- data/app/controllers/habarico/global_schema_controller.rb +11 -0
- data/app/controllers/habarico/local_schema_controller.rb +35 -0
- data/app/helpers/habarico/application_helper.rb +4 -0
- data/app/models/habarico/application_record.rb +5 -0
- data/app/views/layouts/habarico/application.html.erb +17 -0
- data/config/locales/cs.yml +39 -0
- data/config/locales/de.yml +39 -0
- data/config/locales/en.yml +39 -0
- data/config/locales/es.yml +39 -0
- data/config/locales/fr.yml +39 -0
- data/config/locales/it.yml +39 -0
- data/config/locales/ja.yml +39 -0
- data/config/locales/nl.yml +39 -0
- data/config/locales/pl.yml +39 -0
- data/config/locales/pt.yml +39 -0
- data/config/locales/ro.yml +39 -0
- data/config/locales/sk.yml +39 -0
- data/config/locales/uk.yml +39 -0
- data/config/routes.rb +1 -0
- data/lib/generators/habarico/preferences/install_generator.rb +27 -0
- data/lib/generators/habarico/preferences/templates/create_habarico_user_preferences.rb.tt +15 -0
- data/lib/habarico/active_model/references.rb +68 -0
- data/lib/habarico/authenticatable.rb +31 -0
- data/lib/habarico/config.rb +71 -0
- data/lib/habarico/context.rb +126 -0
- data/lib/habarico/contrib/preferences/base_preferences.rb +40 -0
- data/lib/habarico/contrib/preferences/config.rb +31 -0
- data/lib/habarico/contrib/preferences/errors.rb +79 -0
- data/lib/habarico/contrib/preferences/locales/cs.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/de.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/en.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/es.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/fr.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/it.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/ja.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/nl.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/pl.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/pt.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/ro.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/sk.yml +8 -0
- data/lib/habarico/contrib/preferences/locales/uk.yml +8 -0
- data/lib/habarico/contrib/preferences/registry.rb +293 -0
- data/lib/habarico/contrib/preferences/routes.rb +17 -0
- data/lib/habarico/contrib/preferences/schemas.rb +129 -0
- data/lib/habarico/contrib/preferences/serializer.rb +19 -0
- data/lib/habarico/contrib/preferences/user_preference.rb +16 -0
- data/lib/habarico/contrib/preferences.rb +32 -0
- data/lib/habarico/controller.rb +584 -0
- data/lib/habarico/definition/action_reference.rb +18 -0
- data/lib/habarico/definition/actions/action.rb +14 -0
- data/lib/habarico/definition/actions/create_action.rb +18 -0
- data/lib/habarico/definition/actions/delete_action.rb +20 -0
- data/lib/habarico/definition/actions/edit_action.rb +18 -0
- data/lib/habarico/definition/actions/link_action.rb +11 -0
- data/lib/habarico/definition/actions/resource_action.rb +12 -0
- data/lib/habarico/definition/actions/save_action.rb +14 -0
- data/lib/habarico/definition/actions/show_action.rb +18 -0
- data/lib/habarico/definition/actions/upload_images_action.rb +11 -0
- data/lib/habarico/definition/actions/view_action.rb +11 -0
- data/lib/habarico/definition/boxes/array_box.rb +10 -0
- data/lib/habarico/definition/boxes/box.rb +32 -0
- data/lib/habarico/definition/boxes/gallery_box.rb +10 -0
- data/lib/habarico/definition/boxes/grid_box.rb +10 -0
- data/lib/habarico/definition/boxes/grid_item_box.rb +10 -0
- data/lib/habarico/definition/boxes/list_box.rb +10 -0
- data/lib/habarico/definition/boxes/object_box.rb +10 -0
- data/lib/habarico/definition/boxes/tab_box.rb +10 -0
- data/lib/habarico/definition/boxes/tab_item_box.rb +10 -0
- data/lib/habarico/definition/boxes/wizard_box.rb +10 -0
- data/lib/habarico/definition/concerns/definition_model.rb +38 -0
- data/lib/habarico/definition/definition.rb +206 -0
- data/lib/habarico/definition/field_reference.rb +9 -0
- data/lib/habarico/definition/filter_reference.rb +7 -0
- data/lib/habarico/definition/menu/link_menu_item.rb +12 -0
- data/lib/habarico/definition/menu/menu_item.rb +9 -0
- data/lib/habarico/definition/menu/text_menu_item.rb +12 -0
- data/lib/habarico/definition/menu/view_menu_item.rb +13 -0
- data/lib/habarico/definition/response.rb +13 -0
- data/lib/habarico/definition/views/action_view.rb +11 -0
- data/lib/habarico/definition/views/create_view.rb +15 -0
- data/lib/habarico/definition/views/edit_view.rb +15 -0
- data/lib/habarico/definition/views/list_view.rb +17 -0
- data/lib/habarico/definition/views/show_view.rb +15 -0
- data/lib/habarico/definition/views/view.rb +10 -0
- data/lib/habarico/engine.rb +6 -0
- data/lib/habarico/file_validations.rb +119 -0
- data/lib/habarico/generators/abstract_generator.rb +21 -0
- data/lib/habarico/generators/action/action_schema_generator.rb +111 -0
- data/lib/habarico/generators/action/confirm_dialog_properties_generator.rb +30 -0
- data/lib/habarico/generators/action/global_resource_action_schema_generator.rb +46 -0
- data/lib/habarico/generators/action/link_action_parameters_generator.rb +31 -0
- data/lib/habarico/generators/action/resource_action_endpoint_parameters_generator.rb +70 -0
- data/lib/habarico/generators/action/resource_action_parameters_generator.rb +40 -0
- data/lib/habarico/generators/action/resource_action_schema_generator.rb +51 -0
- data/lib/habarico/generators/action/save_action_parameters_generator.rb +26 -0
- data/lib/habarico/generators/action/upload_images_action_parameters_generator.rb +41 -0
- data/lib/habarico/generators/action/view_action_endpoint_parameters_generator.rb +37 -0
- data/lib/habarico/generators/action/view_action_parameters_generator.rb +56 -0
- data/lib/habarico/generators/endpoint/dynamic_render_options_generator.rb +26 -0
- data/lib/habarico/generators/endpoint/endpoints_schema_generator.rb +61 -0
- data/lib/habarico/generators/endpoint/enum_type_generator.rb +45 -0
- data/lib/habarico/generators/endpoint/field_options_generator.rb +179 -0
- data/lib/habarico/generators/endpoint/field_schema_generator.rb +381 -0
- data/lib/habarico/generators/endpoint/fields_schema_generator.rb +35 -0
- data/lib/habarico/generators/endpoint/filter_schema_generator.rb +201 -0
- data/lib/habarico/generators/endpoint/filters_schema_generator.rb +25 -0
- data/lib/habarico/generators/endpoint/method_schema_generator.rb +34 -0
- data/lib/habarico/generators/endpoint/number_field_options_generator.rb +45 -0
- data/lib/habarico/generators/endpoint/phone_field_options_generator.rb +29 -0
- data/lib/habarico/generators/endpoint/relation_field_options_generator.rb +90 -0
- data/lib/habarico/generators/endpoint/search_filter_schema_generator.rb +44 -0
- data/lib/habarico/generators/menu/menu_group_schema_generator.rb +63 -0
- data/lib/habarico/generators/menu/menu_link_parameters_generator.rb +31 -0
- data/lib/habarico/generators/menu/menu_schema_generator.rb +105 -0
- data/lib/habarico/generators/menu/menu_view_endpoint_parameters_generator.rb +44 -0
- data/lib/habarico/generators/menu/menu_view_parameters_generator.rb +50 -0
- data/lib/habarico/generators/resource/action_resource_schema_generator.rb +84 -0
- data/lib/habarico/generators/resource/global_resource_schema_generator.rb +70 -0
- data/lib/habarico/generators/resource/local_resource_schema_generator.rb +111 -0
- data/lib/habarico/generators/resource/object_resource_schema_generator.rb +49 -0
- data/lib/habarico/generators/resource/resource_schema_generator.rb +31 -0
- data/lib/habarico/generators/view/action_descriptor_generator.rb +88 -0
- data/lib/habarico/generators/view/array_box_parameters_generator.rb +34 -0
- data/lib/habarico/generators/view/box_options_generator.rb +23 -0
- data/lib/habarico/generators/view/box_schema_generator.rb +194 -0
- data/lib/habarico/generators/view/detail_view_parameters_generator.rb +57 -0
- data/lib/habarico/generators/view/field_descriptor_generator.rb +107 -0
- data/lib/habarico/generators/view/filter_descriptor_generator.rb +75 -0
- data/lib/habarico/generators/view/gallery_box_parameters_generator.rb +71 -0
- data/lib/habarico/generators/view/global_view_schema_generator.rb +59 -0
- data/lib/habarico/generators/view/grid_item_box_parameters_generator.rb +44 -0
- data/lib/habarico/generators/view/list_box_parameters_generator.rb +124 -0
- data/lib/habarico/generators/view/list_view_parameters_generator.rb +120 -0
- data/lib/habarico/generators/view/object_box_parameters_generator.rb +26 -0
- data/lib/habarico/generators/view/sort_descriptor_generator.rb +30 -0
- data/lib/habarico/generators/view/tab_box_parameters_generator.rb +26 -0
- data/lib/habarico/generators/view/view_endpoint_parameters_generator.rb +71 -0
- data/lib/habarico/generators/view/view_schema_generator.rb +87 -0
- data/lib/habarico/generators/view/wizard_box_parameters_generator.rb +32 -0
- data/lib/habarico/helpers/action_helper.rb +9 -0
- data/lib/habarico/helpers/attributes_helper.rb +67 -0
- data/lib/habarico/helpers/box_helper.rb +19 -0
- data/lib/habarico/helpers/callable_helper.rb +15 -0
- data/lib/habarico/helpers/filter_params_helper.rb +49 -0
- data/lib/habarico/helpers/order_by_helper.rb +56 -0
- data/lib/habarico/helpers/reflection_helper.rb +61 -0
- data/lib/habarico/helpers/sorting_helper.rb +136 -0
- data/lib/habarico/schema/action/action_schema.rb +46 -0
- data/lib/habarico/schema/action/confirm_dialog_properties.rb +13 -0
- data/lib/habarico/schema/action/global_resource_action_schema.rb +29 -0
- data/lib/habarico/schema/action/link_action_parameters.rb +15 -0
- data/lib/habarico/schema/action/resource_action_endpoint_parameters.rb +24 -0
- data/lib/habarico/schema/action/resource_action_parameters.rb +17 -0
- data/lib/habarico/schema/action/resource_action_schema.rb +14 -0
- data/lib/habarico/schema/action/save_action_parameters.rb +10 -0
- data/lib/habarico/schema/action/upload_images_action_parameters.rb +23 -0
- data/lib/habarico/schema/action/view_action_endpoint_parameters.rb +16 -0
- data/lib/habarico/schema/action/view_action_parameters.rb +27 -0
- data/lib/habarico/schema/endpoint/ai_field_options.rb +10 -0
- data/lib/habarico/schema/endpoint/box_options.rb +10 -0
- data/lib/habarico/schema/endpoint/choices_field_options.rb +10 -0
- data/lib/habarico/schema/endpoint/dynamic_render_options.rb +14 -0
- data/lib/habarico/schema/endpoint/endpoints_schema.rb +22 -0
- data/lib/habarico/schema/endpoint/enum_type.rb +21 -0
- data/lib/habarico/schema/endpoint/field_options.rb +56 -0
- data/lib/habarico/schema/endpoint/field_schema.rb +65 -0
- data/lib/habarico/schema/endpoint/filter_schema.rb +44 -0
- data/lib/habarico/schema/endpoint/image_field_options.rb +13 -0
- data/lib/habarico/schema/endpoint/key_value.rb +13 -0
- data/lib/habarico/schema/endpoint/method_schema.rb +13 -0
- data/lib/habarico/schema/endpoint/number_field_options.rb +24 -0
- data/lib/habarico/schema/endpoint/phone_field_options.rb +13 -0
- data/lib/habarico/schema/endpoint/relation_field_options.rb +39 -0
- data/lib/habarico/schema/extensible_enum.rb +20 -0
- data/lib/habarico/schema/menu/action_view_choice.rb +13 -0
- data/lib/habarico/schema/menu/menu_group_schema.rb +26 -0
- data/lib/habarico/schema/menu/menu_schema.rb +36 -0
- data/lib/habarico/schema/resource/global_resource_schema.rb +14 -0
- data/lib/habarico/schema/resource/local_resource_schema.rb +14 -0
- data/lib/habarico/schema/resource/object_resource_schema.rb +8 -0
- data/lib/habarico/schema/resource/resource_schema.rb +16 -0
- data/lib/habarico/schema/types.rb +102 -0
- data/lib/habarico/schema/view/action_descriptor.rb +30 -0
- data/lib/habarico/schema/view/array_box_parameters.rb +13 -0
- data/lib/habarico/schema/view/box_schema.rb +67 -0
- data/lib/habarico/schema/view/detail_view_parameters.rb +16 -0
- data/lib/habarico/schema/view/field_descriptor.rb +50 -0
- data/lib/habarico/schema/view/field_wrapper_properties.rb +13 -0
- data/lib/habarico/schema/view/filter_descriptor.rb +24 -0
- data/lib/habarico/schema/view/gallery_box_parameters.rb +31 -0
- data/lib/habarico/schema/view/global_view_schema.rb +25 -0
- data/lib/habarico/schema/view/grid_item_box_parameters.rb +13 -0
- data/lib/habarico/schema/view/list_box_parameters.rb +44 -0
- data/lib/habarico/schema/view/list_view_parameters.rb +31 -0
- data/lib/habarico/schema/view/object_box_parameters.rb +10 -0
- data/lib/habarico/schema/view/sort_descriptor.rb +15 -0
- data/lib/habarico/schema/view/sortable_parameters.rb +13 -0
- data/lib/habarico/schema/view/tab_box_parameters.rb +10 -0
- data/lib/habarico/schema/view/view_action_descriptor_parameters.rb +21 -0
- data/lib/habarico/schema/view/view_endpoint_parameters.rb +22 -0
- data/lib/habarico/schema/view/view_schema.rb +33 -0
- data/lib/habarico/schema/view/wizard_box_parameters.rb +13 -0
- data/lib/habarico/search/field_resolver.rb +138 -0
- data/lib/habarico/search/search_matcher.rb +152 -0
- data/lib/habarico/serializers/meta_serializer.rb +42 -0
- data/lib/habarico/serializers/record_serializer.rb +33 -0
- data/lib/habarico/serializers/serializer.rb +61 -0
- data/lib/habarico/services/resource_service.rb +69 -0
- data/lib/habarico/services/routing_service.rb +160 -0
- data/lib/habarico/services/schema_service.rb +72 -0
- data/lib/habarico/version.rb +5 -0
- data/lib/habarico.rb +262 -0
- metadata +324 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class NumberFieldOptionsGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, attr_name)
|
|
5
|
+
Habarico::NumberFieldOptions.new(
|
|
6
|
+
style: generate_style(model, attr_name),
|
|
7
|
+
currency: generate_currency(model, attr_name),
|
|
8
|
+
unit: generate_unit(model, attr_name),
|
|
9
|
+
minimum_fraction_digits: generate_minimum_fraction_digits(model, attr_name),
|
|
10
|
+
maximum_fraction_digits: generate_maximum_fraction_digits(model, attr_name),
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
# ***********************************************************************
|
|
17
|
+
# Attribute generators
|
|
18
|
+
# ***********************************************************************
|
|
19
|
+
|
|
20
|
+
def generate_style(model, attr_name)
|
|
21
|
+
return 'currency' if Habarico::AttributesHelper.is_amount_major_attr?(model, attr_name)
|
|
22
|
+
nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def generate_currency(model, attr_name)
|
|
26
|
+
return Habarico::Config.currency if Habarico::AttributesHelper.is_amount_major_attr?(model, attr_name)
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def generate_unit(_model, _attr_name)
|
|
31
|
+
# not implemented
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def generate_minimum_fraction_digits(model, attr_name)
|
|
35
|
+
return 2 if Habarico::AttributesHelper.is_amount_major_attr?(model, attr_name)
|
|
36
|
+
nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def generate_maximum_fraction_digits(model, attr_name)
|
|
40
|
+
return 2 if Habarico::AttributesHelper.is_amount_major_attr?(model, attr_name)
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class PhoneFieldOptionsGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, field_reference)
|
|
5
|
+
phone = field_reference.phone
|
|
6
|
+
return nil if phone.blank?
|
|
7
|
+
|
|
8
|
+
Habarico::PhoneFieldOptions.new(
|
|
9
|
+
default_region: generate_default_region(model, phone),
|
|
10
|
+
allowed_regions: generate_allowed_regions(model, phone),
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
# ***********************************************************************
|
|
17
|
+
# Attribute generators
|
|
18
|
+
# ***********************************************************************
|
|
19
|
+
|
|
20
|
+
def generate_default_region(_model, phone)
|
|
21
|
+
phone[:default_region]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def generate_allowed_regions(_model, phone)
|
|
25
|
+
phone[:allowed_regions]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class RelationFieldOptionsGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, field_reference)
|
|
5
|
+
relation = field_reference.relation
|
|
6
|
+
parent = field_reference.parent
|
|
7
|
+
|
|
8
|
+
return nil if relation.present? && !relation.is_a?(Hash)
|
|
9
|
+
return nil if relation.blank? && parent.blank?
|
|
10
|
+
|
|
11
|
+
hash = relation.is_a?(Hash) ? relation : {}
|
|
12
|
+
|
|
13
|
+
Habarico::RelationFieldOptions.new(
|
|
14
|
+
show_link: generate_show_link(model, hash),
|
|
15
|
+
link_mode: generate_link_mode(model, hash),
|
|
16
|
+
dialog_width: generate_dialog_width(model, hash),
|
|
17
|
+
keep_linked_parent: generate_keep_linked_parent(model, hash),
|
|
18
|
+
show_edit_button: generate_show_edit_button(model, hash),
|
|
19
|
+
show_create_button: generate_show_create_button(model, hash),
|
|
20
|
+
preserve_order: generate_preserve_order(model, hash),
|
|
21
|
+
filters: generate_filters(model, hash),
|
|
22
|
+
sort: generate_sort(model, hash),
|
|
23
|
+
parent: generate_parent(model, hash, parent),
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
# ***********************************************************************
|
|
30
|
+
# Attribute generators
|
|
31
|
+
# ***********************************************************************
|
|
32
|
+
|
|
33
|
+
def generate_show_link(_model, hash)
|
|
34
|
+
hash[:show_link]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def generate_link_mode(_model, hash)
|
|
38
|
+
hash[:link_mode]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def generate_dialog_width(_model, hash)
|
|
42
|
+
hash[:dialog_width]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def generate_keep_linked_parent(_model, hash)
|
|
46
|
+
hash[:keep_linked_parent]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def generate_show_edit_button(_model, hash)
|
|
50
|
+
hash[:show_edit_button]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def generate_show_create_button(_model, hash)
|
|
54
|
+
hash[:show_create_button]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def generate_preserve_order(_model, hash)
|
|
58
|
+
hash[:preserve_order]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def generate_filters(_model, hash)
|
|
62
|
+
Array(hash[:filters]).map do |f|
|
|
63
|
+
next f if f.is_a?(Habarico::KeyValue)
|
|
64
|
+
Habarico::KeyValue.new(key: f[:key] || f['key'], value: f[:value] || f['value'])
|
|
65
|
+
end.presence
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def generate_sort(_model, hash)
|
|
69
|
+
sort = hash[:sort]
|
|
70
|
+
if sort.is_a?(String)
|
|
71
|
+
# Support 'field_name:direction' format (e.g. 'email:asc', 'created_at:desc')
|
|
72
|
+
parts = sort.split(':')
|
|
73
|
+
Habarico::SortDescriptor.new(
|
|
74
|
+
field_name: parts[0],
|
|
75
|
+
direction: parts[1] == 'desc' ? 'desc' : 'asc'
|
|
76
|
+
)
|
|
77
|
+
elsif sort.is_a?(Hash)
|
|
78
|
+
Habarico::SortDescriptor.new(
|
|
79
|
+
field_name: sort[:field_name] || sort['field_name'],
|
|
80
|
+
direction: sort[:direction] || sort['direction']
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def generate_parent(_model, hash, field_reference_parent)
|
|
86
|
+
hash[:parent] || field_reference_parent
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class SearchFilterSchemaGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model)
|
|
5
|
+
Habarico::FilterSchema.new(
|
|
6
|
+
name: generate_name(model),
|
|
7
|
+
type: generate_type(model),
|
|
8
|
+
format: generate_format(model),
|
|
9
|
+
label: generate_label(model),
|
|
10
|
+
help_text: generate_help_text(model),
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
# ***********************************************************************
|
|
17
|
+
# Attribute generators
|
|
18
|
+
# ***********************************************************************
|
|
19
|
+
|
|
20
|
+
def generate_name(_model)
|
|
21
|
+
'search'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def generate_type(_model)
|
|
25
|
+
'string'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def generate_format(_model)
|
|
29
|
+
'search'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def generate_label(model)
|
|
33
|
+
# Per-model override first (e.g. "Search by VS or counter-account"), then Habarico's
|
|
34
|
+
# generic translated label, and finally the literal 'search' as a last resort.
|
|
35
|
+
I18n.t("#{model.i18n_scope}.attributes.#{model.model_name.i18n_key}.search",
|
|
36
|
+
default: I18n.t('filters.common.search', default: 'search'))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def generate_help_text(model)
|
|
40
|
+
generate_label(model)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class MenuGroupSchemaGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(menu_path)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `menu_path` must be an array of Habarico::MenuItem objects') unless menu_path.is_a?(::Array) && menu_path.all? { |b| b.is_a?(Habarico::MenuItem) }
|
|
7
|
+
|
|
8
|
+
# Pop last breadcrumb as current menu item
|
|
9
|
+
menu_path_2 = menu_path.dup
|
|
10
|
+
menu_item = menu_path_2.pop
|
|
11
|
+
return nil if menu_item.nil?
|
|
12
|
+
|
|
13
|
+
# Create model
|
|
14
|
+
Habarico::MenuGroupSchema.new(
|
|
15
|
+
name: generate_name(menu_item),
|
|
16
|
+
label: generate_label(menu_item),
|
|
17
|
+
icon: generate_icon(menu_item),
|
|
18
|
+
color: generate_color(menu_item),
|
|
19
|
+
priority: generate_priority(menu_item),
|
|
20
|
+
parent: generate_parent(menu_path_2),
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
def menu_group_schema_generator
|
|
27
|
+
@menu_group_schema_generator ||= definition.menu_group_schema_generator.new(definition, resource_path)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# ***********************************************************************
|
|
31
|
+
# Attribute generators
|
|
32
|
+
# ***********************************************************************
|
|
33
|
+
|
|
34
|
+
def generate_name(menu_item)
|
|
35
|
+
menu_item.name
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def generate_label(menu_item)
|
|
39
|
+
menu_item.label
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generate_icon(menu_item)
|
|
43
|
+
menu_item.icon
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def generate_color(menu_item)
|
|
47
|
+
menu_item.color
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def generate_priority(menu_item)
|
|
51
|
+
menu_item.priority
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def generate_parent(menu_path)
|
|
55
|
+
if menu_path.empty?
|
|
56
|
+
nil
|
|
57
|
+
else
|
|
58
|
+
menu_group_schema_generator.generate(menu_path)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class MenuLinkParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(menu_item)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `menu_item` must be a Habarico::MenuItem') unless menu_item.is_a?(Habarico::MenuItem)
|
|
7
|
+
raise Eluvia::Errors::StandardError.new('Argument `menu_item` must be of :link type') unless menu_item.type.to_sym == :link
|
|
8
|
+
|
|
9
|
+
# Create model
|
|
10
|
+
Habarico::LinkActionParameters.new(
|
|
11
|
+
url: generate_url(menu_item),
|
|
12
|
+
target: generate_target(menu_item)
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
protected
|
|
17
|
+
|
|
18
|
+
# ***********************************************************************
|
|
19
|
+
# Attribute generators
|
|
20
|
+
# ***********************************************************************
|
|
21
|
+
|
|
22
|
+
def generate_url(menu_item)
|
|
23
|
+
menu_item.link_url
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def generate_target(menu_item)
|
|
27
|
+
menu_item.link_target
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class MenuSchemaGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(menu_item, menu_path)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Definition `menu_item` must be a Habarico::MenuItem object') unless menu_item.is_a?(Habarico::MenuItem)
|
|
7
|
+
|
|
8
|
+
# Create model
|
|
9
|
+
Habarico::MenuSchema.new(
|
|
10
|
+
name: generate_name(menu_item),
|
|
11
|
+
label: generate_label(menu_item),
|
|
12
|
+
icon: generate_icon(menu_item),
|
|
13
|
+
color: generate_color(menu_item),
|
|
14
|
+
priority: generate_priority(menu_item),
|
|
15
|
+
type: generate_type(menu_item),
|
|
16
|
+
view: generate_view(menu_item),
|
|
17
|
+
link: generate_link(menu_item),
|
|
18
|
+
parent: generate_parent(menu_path)
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
protected
|
|
23
|
+
|
|
24
|
+
def menu_group_schema_generator
|
|
25
|
+
@menu_group_schema_generator ||= definition.menu_group_schema_generator.new(definition, resource_path)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def menu_view_parameters_generator
|
|
29
|
+
@menu_view_parameters_generator ||= definition.menu_view_parameters_generator.new(definition, resource_path)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def menu_link_parameters_generator
|
|
33
|
+
@menu_link_parameters_generator ||= definition.menu_link_parameters_generator.new(definition, resource_path)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# ***********************************************************************
|
|
37
|
+
# Attribute generators
|
|
38
|
+
# ***********************************************************************
|
|
39
|
+
|
|
40
|
+
def generate_name(menu_item)
|
|
41
|
+
return menu_item.name if menu_item.name
|
|
42
|
+
|
|
43
|
+
# Compute prefix from this or referenced resource
|
|
44
|
+
prefix = nil
|
|
45
|
+
if menu_item.reference.present?
|
|
46
|
+
prefix = Habarico::ResourceService.instance.find_resource_name_by_model_class_or_instance(menu_item.reference)
|
|
47
|
+
end
|
|
48
|
+
if prefix.nil?
|
|
49
|
+
prefix = resource_path.last
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Compute suffix from view name or link url
|
|
53
|
+
suffix = if menu_item.type.to_sym == :view && menu_item.view_name
|
|
54
|
+
menu_item.view_name
|
|
55
|
+
elsif menu_item.type.to_sym == :link && menu_item.link_url
|
|
56
|
+
menu_item.link_url.gsub(/[^a-zA-Z0-9]/, '_')
|
|
57
|
+
else
|
|
58
|
+
'item'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
"#{prefix}-#{suffix}"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def generate_label(menu_item)
|
|
65
|
+
menu_item.label || definition.label || I18n.t("resources.#{resource_path.join('.')}", default: generate_name(menu_item).to_s.humanize)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def generate_icon(menu_item)
|
|
69
|
+
menu_item.icon || definition.icon
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def generate_color(menu_item)
|
|
73
|
+
menu_item.color
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def generate_priority(menu_item)
|
|
77
|
+
menu_item.priority
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def generate_type(menu_item)
|
|
81
|
+
menu_item.type
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def generate_view(menu_item)
|
|
85
|
+
if menu_item.type.to_sym == :view
|
|
86
|
+
menu_view_parameters_generator.generate(menu_item)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def generate_link(menu_item)
|
|
91
|
+
if menu_item.type.to_sym == :link
|
|
92
|
+
menu_link_parameters_generator.generate(menu_item)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def generate_parent(menu_path)
|
|
97
|
+
if menu_path.blank? || menu_path.empty?
|
|
98
|
+
nil
|
|
99
|
+
else
|
|
100
|
+
menu_group_schema_generator.generate(menu_path)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class MenuViewEndpointParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(menu_item)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `menu_item` must be a Habarico::MenuItem') unless menu_item.is_a?(Habarico::MenuItem)
|
|
7
|
+
raise Eluvia::Errors::StandardError.new('Argument `menu_item` must be of :view type') unless menu_item.type.to_sym == :view
|
|
8
|
+
|
|
9
|
+
# Create model
|
|
10
|
+
Habarico::ViewActionEndpointParameters.new(
|
|
11
|
+
reference: generate_reference(menu_item),
|
|
12
|
+
action_name: generate_action_name(menu_item),
|
|
13
|
+
record_pk: generate_record_pk(menu_item)
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
# ***********************************************************************
|
|
20
|
+
# Attribute generators
|
|
21
|
+
# ***********************************************************************
|
|
22
|
+
|
|
23
|
+
def generate_reference(menu_item)
|
|
24
|
+
if menu_item.reference.present?
|
|
25
|
+
return Habarico::ResourceService.instance.find_resource_name_by_model_class_or_instance(menu_item.reference)
|
|
26
|
+
end
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def generate_action_name(menu_item)
|
|
31
|
+
menu_item.reference_action_name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def generate_record_pk(menu_item)
|
|
35
|
+
if menu_item.reference.present?
|
|
36
|
+
if Habarico::ReflectionHelper.is_active_record_instance?(menu_item.reference)
|
|
37
|
+
return menu_item.reference.id
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class MenuViewParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(menu_item)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `menu_item` must be a Habarico::MenuItem') unless menu_item.is_a?(Habarico::MenuItem)
|
|
7
|
+
raise Eluvia::Errors::StandardError.new('Argument `menu_item` must be of :view type') unless menu_item.type.to_sym == :view
|
|
8
|
+
|
|
9
|
+
# Create model
|
|
10
|
+
Habarico::ViewActionParameters.new(
|
|
11
|
+
name: generate_name(menu_item),
|
|
12
|
+
mode: generate_mode(menu_item),
|
|
13
|
+
dialog_width: generate_dialog_width(menu_item),
|
|
14
|
+
endpoint: generate_endpoint(menu_item),
|
|
15
|
+
keep_linked_parent: generate_keep_linked_parent(menu_item)
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
protected
|
|
20
|
+
|
|
21
|
+
def menu_view_endpoint_parameters_generator
|
|
22
|
+
@menu_view_endpoint_parameters_generator ||= definition.menu_view_endpoint_parameters_generator.new(definition, resource_path)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# ***********************************************************************
|
|
26
|
+
# Attribute generators
|
|
27
|
+
# ***********************************************************************
|
|
28
|
+
|
|
29
|
+
def generate_name(menu_item)
|
|
30
|
+
menu_item.view_name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def generate_mode(menu_item)
|
|
34
|
+
menu_item.view_mode
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def generate_dialog_width(menu_item)
|
|
38
|
+
menu_item.dialog_width
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def generate_endpoint(menu_item)
|
|
42
|
+
menu_view_endpoint_parameters_generator.generate(menu_item)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def generate_keep_linked_parent(menu_item)
|
|
46
|
+
menu_item.view_keep_linked_parent
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class ActionResourceSchemaGenerator < ResourceSchemaGenerator
|
|
3
|
+
|
|
4
|
+
def generate(action_name, context)
|
|
5
|
+
view = definition.normalized_views.find { |view| view.endpoint_action_name == action_name }
|
|
6
|
+
action = definition.normalized_actions.find { |action| action.is_a?(Habarico::ResourceAction) && action.endpoint_action_name == action_name }
|
|
7
|
+
if view
|
|
8
|
+
generate_view_action(action_name, view, context)
|
|
9
|
+
elsif action
|
|
10
|
+
generate_resource_action(action_name, action, context)
|
|
11
|
+
else
|
|
12
|
+
Habarico::LocalResourceSchema.new(
|
|
13
|
+
name: generate_name,
|
|
14
|
+
label: generate_label,
|
|
15
|
+
pk_field_name: generate_pk_field_name
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def resource_action_schema_generator
|
|
23
|
+
@resource_action_schema_generator ||= definition.resource_action_schema_generator.new(definition, resource_path)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def view_schema_generator
|
|
27
|
+
@view_schema_generator ||= definition.view_schema_generator.new(definition, resource_path)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def endpoints_schema_generator
|
|
31
|
+
@endpoints_schema_generator ||= definition.endpoints_schema_generator.new(definition, resource_path)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# ***********************************************************************
|
|
35
|
+
# Attribute generators
|
|
36
|
+
# ***********************************************************************
|
|
37
|
+
|
|
38
|
+
def generate_actions(_action_name, _context)
|
|
39
|
+
[]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generate_view_action(action_name, view, context)
|
|
43
|
+
# Generate view schema
|
|
44
|
+
view_schema = view_schema_generator.generate(view, context)
|
|
45
|
+
|
|
46
|
+
# Generate endpoint schema
|
|
47
|
+
model = view.model || definition.model
|
|
48
|
+
read_fields = write_fields = view.boxes
|
|
49
|
+
endpoints_schema = endpoints_schema_generator.generate(model, read_fields, write_fields, [], [view_schema.endpoint.method.to_sym])
|
|
50
|
+
|
|
51
|
+
# Create model
|
|
52
|
+
Habarico::LocalResourceSchema.new(
|
|
53
|
+
name: generate_name,
|
|
54
|
+
label: generate_label,
|
|
55
|
+
pk_field_name: generate_pk_field_name,
|
|
56
|
+
actions: generate_actions(action_name, context),
|
|
57
|
+
views: [view_schema],
|
|
58
|
+
endpoints: endpoints_schema
|
|
59
|
+
)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def generate_resource_action(action_name, action, context)
|
|
63
|
+
# Generate resource action schema
|
|
64
|
+
resource_action_schema = resource_action_schema_generator.generate(action, context)
|
|
65
|
+
raise Eluvia::Errors::StandardError.new("Action `#{action_name}` must be a resource action") unless resource_action_schema.resource&.endpoint
|
|
66
|
+
|
|
67
|
+
# Generate endpoint schema
|
|
68
|
+
endpoints_schema = endpoints_schema_generator.generate(definition.model,
|
|
69
|
+
[], [], [],
|
|
70
|
+
[resource_action_schema.resource.endpoint.method.to_sym])
|
|
71
|
+
|
|
72
|
+
# Create model
|
|
73
|
+
Habarico::LocalResourceSchema.new(
|
|
74
|
+
name: generate_name,
|
|
75
|
+
label: generate_label,
|
|
76
|
+
pk_field_name: generate_pk_field_name,
|
|
77
|
+
actions: generate_actions(action_name, context),
|
|
78
|
+
views: [],
|
|
79
|
+
endpoints: endpoints_schema
|
|
80
|
+
)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class GlobalResourceSchemaGenerator < ResourceSchemaGenerator
|
|
3
|
+
|
|
4
|
+
def generate(context)
|
|
5
|
+
Habarico::GlobalResourceSchema.new(
|
|
6
|
+
name: generate_name,
|
|
7
|
+
label: generate_label,
|
|
8
|
+
pk_field_name: generate_pk_field_name,
|
|
9
|
+
actions: generate_actions(context),
|
|
10
|
+
views: generate_views(context),
|
|
11
|
+
menu: generate_menu(context),
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
|
|
17
|
+
def global_resource_action_schema_generator
|
|
18
|
+
@global_resource_action_schema_generator ||= definition.global_resource_action_schema_generator.new(definition, resource_path)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def global_view_schema_generator
|
|
22
|
+
@global_view_schema_generator ||= definition.global_view_schema_generator.new(definition, resource_path)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def menu_schema_generator
|
|
26
|
+
@menu_schema_generator ||= definition.menu_schema_generator.new(definition, resource_path)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# ***********************************************************************
|
|
30
|
+
# Attribute generators
|
|
31
|
+
# ***********************************************************************
|
|
32
|
+
|
|
33
|
+
def generate_actions(context)
|
|
34
|
+
# Generate and filter actions based on permissions
|
|
35
|
+
definition.normalized_actions.select do |action|
|
|
36
|
+
|
|
37
|
+
# Action must be allowed by permissions
|
|
38
|
+
context.can?(action.permission)
|
|
39
|
+
|
|
40
|
+
end.map do |action|
|
|
41
|
+
|
|
42
|
+
# Generate action schema
|
|
43
|
+
global_resource_action_schema_generator.generate(action)
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def generate_views(context)
|
|
49
|
+
# Generate and filter views based on permissions
|
|
50
|
+
definition.normalized_views.select do |view|
|
|
51
|
+
|
|
52
|
+
# View must be allowed by permissions
|
|
53
|
+
context.can?(view.permission)
|
|
54
|
+
|
|
55
|
+
end.map do |view|
|
|
56
|
+
|
|
57
|
+
# Generate view schema
|
|
58
|
+
global_view_schema_generator.generate(view)
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def generate_menu(context)
|
|
64
|
+
return nil unless context.can?(:read)
|
|
65
|
+
return nil if definition.menu_item == false
|
|
66
|
+
menu_schema_generator.generate(definition.menu_item || Habarico::ViewMenuItem.new(view_name: 'list'), definition.menu_path)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
end
|