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,107 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class FieldDescriptorGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, field_reference, context, force_params = {})
|
|
5
|
+
# Fallback to a simple FieldReference object if a string or a symbol is provided
|
|
6
|
+
field_reference = Habarico::FieldReference.new(name: field_reference.to_s) if field_reference.is_a?(String) || field_reference.is_a?(Symbol)
|
|
7
|
+
|
|
8
|
+
# Validate argument
|
|
9
|
+
raise Eluvia::Errors::StandardError.new('Argument `field_reference` must be a Habarico::FieldReference') unless field_reference.is_a?(Habarico::FieldReference)
|
|
10
|
+
|
|
11
|
+
# Force parameters
|
|
12
|
+
field_reference.assign(force_params)
|
|
13
|
+
|
|
14
|
+
# Create model
|
|
15
|
+
Habarico::FieldDescriptor.new(
|
|
16
|
+
type: 'field',
|
|
17
|
+
name: generate_name(model, field_reference, context),
|
|
18
|
+
label: generate_label(model, field_reference, context),
|
|
19
|
+
short_label: generate_short_label(model, field_reference, context),
|
|
20
|
+
help_text: generate_help_text(model, field_reference, context),
|
|
21
|
+
sortable: generate_sortable(model, field_reference, context),
|
|
22
|
+
sort_by: generate_sort_by(model, field_reference, context),
|
|
23
|
+
read_only: generate_read_only(model, field_reference, context),
|
|
24
|
+
write_only: generate_write_only(model, field_reference, context),
|
|
25
|
+
default_value: generate_default_value(model, field_reference, context),
|
|
26
|
+
action: generate_action(model, field_reference, context),
|
|
27
|
+
wrapper: generate_wrapper(model, field_reference, context),
|
|
28
|
+
options: generate_options(model, field_reference, context)
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
protected
|
|
33
|
+
|
|
34
|
+
def field_options_generator
|
|
35
|
+
@field_options_generator ||= definition.field_options_generator.new(definition, resource_path)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def action_descriptor_generator
|
|
39
|
+
@action_descriptor_generator ||= definition.action_descriptor_generator.new(definition, resource_path)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# ***********************************************************************
|
|
43
|
+
# Attribute generators
|
|
44
|
+
# ***********************************************************************
|
|
45
|
+
|
|
46
|
+
def generate_name(_model, field_reference, _context)
|
|
47
|
+
field_reference.name
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def generate_label(model, field_reference, _context)
|
|
51
|
+
return field_reference.label if field_reference.label.present?
|
|
52
|
+
Habarico::AttributesHelper.generate_attr_variants(model, field_reference.name).each do |attr_name_variant|
|
|
53
|
+
label = I18n.t("#{model.i18n_scope}.attributes.#{model.model_name.i18n_key}.#{attr_name_variant}", default: nil)
|
|
54
|
+
return label if label.present?
|
|
55
|
+
end
|
|
56
|
+
nil # In this case do not define label and use the default one from field schema
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def generate_short_label(_model, field_reference, _context)
|
|
60
|
+
field_reference.short_label
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def generate_help_text(_model, field_reference, _context)
|
|
64
|
+
field_reference.help_text
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def generate_sortable(model, field_reference, context)
|
|
68
|
+
if generate_sort_by(model, field_reference, context).present?
|
|
69
|
+
return true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
field_reference.sortable
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def generate_sort_by(model, field_reference, _context)
|
|
76
|
+
Habarico::SortingHelper.descriptor_sort_by(model, field_reference)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def generate_read_only(_model, field_reference, _context)
|
|
80
|
+
field_reference.read_only
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def generate_write_only(_model, field_reference, _context)
|
|
84
|
+
field_reference.write_only
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def generate_default_value(_model, field_reference, _context)
|
|
88
|
+
field_reference.default_value
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def generate_action(_model, field_reference, context)
|
|
92
|
+
return nil unless field_reference.action.present?
|
|
93
|
+
action_descriptor_generator.generate(field_reference.action, context)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def generate_wrapper(_model, field_reference, _context)
|
|
97
|
+
return nil unless field_reference.wrapper.present?
|
|
98
|
+
raise Eluvia::Errors::StandardError.new('`wrapper` must be a Habarico::FieldWrapperProperties') unless field_reference.wrapper.is_a?(Habarico::FieldWrapperProperties)
|
|
99
|
+
field_reference.wrapper
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def generate_options(model, field_reference, _context)
|
|
103
|
+
field_options_generator.generate(model, nil, field_reference)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class FilterDescriptorGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, filter_reference, context, force_params = {})
|
|
5
|
+
# Fallback to a simple FilterReference object if a string or a symbol is provided
|
|
6
|
+
filter_reference = Habarico::FilterReference.new(name: filter_reference.to_s) if filter_reference.is_a?(String) || filter_reference.is_a?(Symbol)
|
|
7
|
+
|
|
8
|
+
# Validate argument
|
|
9
|
+
raise Eluvia::Errors::StandardError.new('Argument `filter_reference` must be a Habarico::FilterReference') unless filter_reference.is_a?(Habarico::FilterReference)
|
|
10
|
+
|
|
11
|
+
# Force parameters
|
|
12
|
+
filter_reference.assign(force_params)
|
|
13
|
+
|
|
14
|
+
# Create model
|
|
15
|
+
Habarico::FilterDescriptor.new(
|
|
16
|
+
name: generate_name(model, filter_reference, context),
|
|
17
|
+
label: generate_label(model, filter_reference, context),
|
|
18
|
+
help_text: generate_help_text(model, filter_reference, context),
|
|
19
|
+
is_always_on: generate_is_always_on(model, filter_reference, context),
|
|
20
|
+
default_value: generate_default_value(model, filter_reference, context),
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
# ***********************************************************************
|
|
27
|
+
# Attribute generators
|
|
28
|
+
# ***********************************************************************
|
|
29
|
+
|
|
30
|
+
def generate_name(_model, field_reference, _context)
|
|
31
|
+
field_reference.name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def generate_label(model, field_reference, _context)
|
|
35
|
+
return field_reference.label if field_reference.label.present?
|
|
36
|
+
|
|
37
|
+
return nil unless model.respond_to?(:filter_params)
|
|
38
|
+
filter_param = model.filter_params[field_reference.name.to_sym]
|
|
39
|
+
return nil unless filter_param # In this case do not define label and use the default one from filter schema
|
|
40
|
+
|
|
41
|
+
attr_name = filter_param[:attr_name]
|
|
42
|
+
filters_model_class = filter_param[:model] # this is not the same as `model` argument!
|
|
43
|
+
i18n_model_class = resolve_i18n_model_class(filters_model_class)
|
|
44
|
+
|
|
45
|
+
Habarico::AttributesHelper.generate_attr_variants(filters_model_class, attr_name).each do |attr_name_variant|
|
|
46
|
+
label = I18n.t("#{i18n_model_class.i18n_scope}.attributes.#{i18n_model_class.model_name.i18n_key}.#{attr_name_variant}", default: nil)
|
|
47
|
+
return label if label.present?
|
|
48
|
+
end
|
|
49
|
+
nil # In this case do not define label and use the default one from filter schema
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# `filters_model_class` (`filter_param[:model]`) is usually a nested `Eluvia::ActiveRecord::FiltersModel`
|
|
53
|
+
# proxy class (e.g. `Employee::Filters`), not the real AR model — its own i18n_scope/model_name don't match
|
|
54
|
+
# where attribute translations actually live. Resolve back to the real model the same way generate_reference
|
|
55
|
+
# does for class names (strip the `::Filters` suffix), falling back to the proxy class itself if that fails.
|
|
56
|
+
def resolve_i18n_model_class(filters_model_class)
|
|
57
|
+
filters_model_class.name.to_s.delete_suffix('::Filters').constantize
|
|
58
|
+
rescue StandardError
|
|
59
|
+
filters_model_class
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def generate_help_text(_model, field_reference, _context)
|
|
63
|
+
field_reference.help_text
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def generate_is_always_on(_model, field_reference, _context)
|
|
67
|
+
field_reference.is_always_on
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def generate_default_value(_model, field_reference, _context)
|
|
71
|
+
field_reference.default_value
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class GalleryBoxParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(box, context)
|
|
5
|
+
raise Eluvia::Errors::StandardError.new('Argument `box` must be a Habarico::GalleryBox') unless box.is_a?(Habarico::GalleryBox)
|
|
6
|
+
|
|
7
|
+
Habarico::GalleryBoxParameters.new(
|
|
8
|
+
reference: generate_reference(box, context),
|
|
9
|
+
target: generate_target(box, context),
|
|
10
|
+
extra_filters: generate_extra_filters(box, context),
|
|
11
|
+
filters: generate_filters(box, context),
|
|
12
|
+
label: generate_label(box, context),
|
|
13
|
+
image_field: generate_image_field(box, context),
|
|
14
|
+
default_sorting: generate_default_sorting(box, context),
|
|
15
|
+
schema_params: generate_schema_params(box, context),
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
protected
|
|
20
|
+
|
|
21
|
+
def filter_descriptor_generator
|
|
22
|
+
@filter_descriptor_generator ||= definition.filter_descriptor_generator.new(definition, resource_path)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def sort_descriptor_generator
|
|
26
|
+
@sort_descriptor_generator ||= definition.sort_descriptor_generator.new(definition, resource_path)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# ***********************************************************************
|
|
30
|
+
# Attribute generators
|
|
31
|
+
# ***********************************************************************
|
|
32
|
+
|
|
33
|
+
def generate_reference(box, _context)
|
|
34
|
+
box.reference
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def generate_target(box, _context)
|
|
38
|
+
box.target
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def generate_label(box, _context)
|
|
42
|
+
box.label
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def generate_image_field(box, _context)
|
|
46
|
+
box.image_field
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def generate_schema_params(box, _context)
|
|
50
|
+
box.schema_params
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def generate_extra_filters(box, context)
|
|
54
|
+
Habarico::CallableHelper.resolve(box.extra_filters, context)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def generate_filters(box, context)
|
|
58
|
+
referenced_model = Habarico::BoxHelper.get_referenced_model(box) || definition.model
|
|
59
|
+
|
|
60
|
+
filters = box.filters || []
|
|
61
|
+
filters.map do |filter|
|
|
62
|
+
filter_descriptor_generator.generate(referenced_model, filter, context)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def generate_default_sorting(box, context)
|
|
67
|
+
sort_descriptor_generator.generate(box.default_sorting || Habarico::BoxHelper.get_referenced_definition(box)&.default_sorting, context)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class GlobalViewSchemaGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(view)
|
|
5
|
+
# Fallback to a simple View object if a string or symbol is provided
|
|
6
|
+
if view.is_a?(String) || view.is_a?(Symbol)
|
|
7
|
+
view = case view.to_sym
|
|
8
|
+
when :list then Habarico::ListView.new
|
|
9
|
+
when :show then Habarico::ShowView.new
|
|
10
|
+
when :edit then Habarico::EditView.new
|
|
11
|
+
when :create then Habarico::CreateView.new
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Validate arguments
|
|
16
|
+
raise Eluvia::Errors::StandardError.new('Argument `view` must be a Habarico::View') unless view.is_a?(Habarico::View)
|
|
17
|
+
|
|
18
|
+
# Create model
|
|
19
|
+
Habarico::GlobalViewSchema.new(
|
|
20
|
+
type: generate_type(view),
|
|
21
|
+
name: generate_name(view),
|
|
22
|
+
is_detail: generate_is_detail(view),
|
|
23
|
+
mode: generate_mode(view),
|
|
24
|
+
endpoint: generate_endpoint(view)
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
|
|
30
|
+
def view_endpoint_parameters_generator
|
|
31
|
+
@view_endpoint_parameters_generator ||= definition.view_endpoint_parameters_generator.new(definition, resource_path)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# ***********************************************************************
|
|
35
|
+
# Attribute generators
|
|
36
|
+
# ***********************************************************************
|
|
37
|
+
|
|
38
|
+
def generate_type(view)
|
|
39
|
+
view.type
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generate_name(view)
|
|
43
|
+
view.name
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def generate_is_detail(view)
|
|
47
|
+
view.is_detail.nil? ? view.type.to_sym != :list : view.is_detail
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def generate_mode(view)
|
|
51
|
+
view.view_mode
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def generate_endpoint(view)
|
|
55
|
+
view_endpoint_parameters_generator.generate(view, Habarico::Context.new)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class GridItemBoxParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(box, context)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `box` must be a Habarico::GridItemBox') unless box.is_a?(Habarico::GridItemBox)
|
|
7
|
+
|
|
8
|
+
# Create model
|
|
9
|
+
Habarico::GridItemBoxParameters.new(
|
|
10
|
+
xs: generate_xs(box, context),
|
|
11
|
+
sm: generate_sm(box, context),
|
|
12
|
+
md: generate_md(box, context),
|
|
13
|
+
lg: generate_lg(box, context),
|
|
14
|
+
xl: generate_xl(box, context),
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
# ***********************************************************************
|
|
21
|
+
# Attribute generators
|
|
22
|
+
# ***********************************************************************
|
|
23
|
+
|
|
24
|
+
def generate_xs(box, _context)
|
|
25
|
+
box.xs
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def generate_sm(box, _context)
|
|
29
|
+
box.sm
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def generate_md(box, _context)
|
|
33
|
+
box.md
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def generate_lg(box, _context)
|
|
37
|
+
box.lg
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def generate_xl(box, _context)
|
|
41
|
+
box.xl
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class ListBoxParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(box, context)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `box` must be a Habarico::ListBox') unless box.is_a?(Habarico::ListBox)
|
|
7
|
+
raise Eluvia::Errors::StandardError.new('Attributes `reference` of the `box` argument must be set') if box.reference.blank?
|
|
8
|
+
raise Eluvia::Errors::StandardError.new('Attributes `target` or `extra_filters` of the `box` argument must be set') if box.target.blank? && box.extra_filters.blank?
|
|
9
|
+
|
|
10
|
+
# Create model
|
|
11
|
+
Habarico::ListBoxParameters.new(
|
|
12
|
+
reference: generate_reference(box, context),
|
|
13
|
+
target: generate_target(box, context),
|
|
14
|
+
extra_filters: generate_extra_filters(box, context),
|
|
15
|
+
filters: generate_filters(box, context),
|
|
16
|
+
row_actions: generate_row_actions(box, context),
|
|
17
|
+
toolbar_actions: generate_toolbar_actions(box, context),
|
|
18
|
+
list_actions: generate_list_actions(box, context),
|
|
19
|
+
default_sorting: generate_default_sorting(box, context),
|
|
20
|
+
sortable: generate_sortable(box, context),
|
|
21
|
+
schema_params: generate_schema_params(box, context),
|
|
22
|
+
single_click_action: generate_single_click_action(box, context),
|
|
23
|
+
double_click_action: generate_double_click_action(box, context),
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
def filter_descriptor_generator
|
|
30
|
+
@filter_descriptor_generator ||= definition.filter_descriptor_generator.new(definition, resource_path)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def sort_descriptor_generator
|
|
34
|
+
@sort_descriptor_generator ||= definition.sort_descriptor_generator.new(definition, resource_path)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def action_descriptor_generator
|
|
38
|
+
@action_descriptor_generator ||= definition.action_descriptor_generator.new(definition, resource_path)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# ***********************************************************************
|
|
42
|
+
# Attribute generators
|
|
43
|
+
# ***********************************************************************
|
|
44
|
+
|
|
45
|
+
def generate_reference(box, _context)
|
|
46
|
+
box.reference
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def generate_target(box, _context)
|
|
50
|
+
box.target
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def generate_extra_filters(box, context)
|
|
54
|
+
Habarico::CallableHelper.resolve(box.extra_filters, context)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def generate_filters(box, context)
|
|
58
|
+
referenced_model = Habarico::BoxHelper.get_referenced_model(box) || definition.model
|
|
59
|
+
|
|
60
|
+
# Generate filter descriptors
|
|
61
|
+
filters = box.filters || []
|
|
62
|
+
filters.map do |filter|
|
|
63
|
+
filter_descriptor_generator.generate(referenced_model, filter, context)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def generate_row_actions(box, context)
|
|
68
|
+
unless box.row_actions.nil?
|
|
69
|
+
return box.row_actions.map do |action|
|
|
70
|
+
action_descriptor_generator.generate(action, context)
|
|
71
|
+
end.compact
|
|
72
|
+
end
|
|
73
|
+
nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Table's own toolbar (top of the resource list, e.g. create). Fed by the ListBox's `list_toolbar_actions`,
|
|
77
|
+
# separate from the box-level `toolbar_actions` which is emitted at the box root.
|
|
78
|
+
def generate_toolbar_actions(box, context)
|
|
79
|
+
unless box.list_toolbar_actions.nil?
|
|
80
|
+
return box.list_toolbar_actions.map do |action|
|
|
81
|
+
action_descriptor_generator.generate(action, context)
|
|
82
|
+
end.compact
|
|
83
|
+
end
|
|
84
|
+
nil
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Utility actions of the table (export, print, ...) rendered next to the filter bar.
|
|
88
|
+
def generate_list_actions(box, context)
|
|
89
|
+
unless box.list_actions.nil?
|
|
90
|
+
return box.list_actions.map do |action|
|
|
91
|
+
action_descriptor_generator.generate(action, context)
|
|
92
|
+
end.compact
|
|
93
|
+
end
|
|
94
|
+
nil
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def generate_default_sorting(box, context)
|
|
98
|
+
sort_descriptor_generator.generate(box.default_sorting || Habarico::BoxHelper.get_referenced_definition(box)&.default_sorting, context)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def generate_sortable(box, _context)
|
|
102
|
+
return nil unless box.sortable_field_name.present?
|
|
103
|
+
Habarico::SortableParameters.new(
|
|
104
|
+
field_name: box.sortable_field_name,
|
|
105
|
+
sort_for_filters: box.sortable_sort_for_filters,
|
|
106
|
+
)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def generate_schema_params(box, _context)
|
|
110
|
+
box.schema_params
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def generate_single_click_action(box, context)
|
|
114
|
+
return nil if box.single_click_action.nil?
|
|
115
|
+
action_descriptor_generator.generate(box.single_click_action, context)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def generate_double_click_action(box, context)
|
|
119
|
+
return nil if box.double_click_action.nil?
|
|
120
|
+
action_descriptor_generator.generate(box.double_click_action, context)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class ListViewParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(view, context)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `view` must be a Habarico::View') unless view.is_a?(Habarico::View)
|
|
7
|
+
|
|
8
|
+
# Create model
|
|
9
|
+
Habarico::ListViewParameters.new(
|
|
10
|
+
boxes: generate_boxes(view, context),
|
|
11
|
+
filters: generate_filters(view, context),
|
|
12
|
+
row_actions: generate_row_actions(view, context),
|
|
13
|
+
toolbar_actions: generate_toolbar_actions(view, context),
|
|
14
|
+
list_actions: generate_list_actions(view, context),
|
|
15
|
+
default_sorting: generate_default_sorting(view, context),
|
|
16
|
+
single_click_action: generate_single_click_action(view, context),
|
|
17
|
+
double_click_action: generate_double_click_action(view, context),
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
def field_descriptor_generator
|
|
24
|
+
@field_descriptor_generator ||= definition.field_descriptor_generator.new(definition, resource_path)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def filter_descriptor_generator
|
|
28
|
+
@filter_descriptor_generator ||= definition.filter_descriptor_generator.new(definition, resource_path)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def sort_descriptor_generator
|
|
32
|
+
@sort_descriptor_generator ||= definition.sort_descriptor_generator.new(definition, resource_path)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def action_descriptor_generator
|
|
36
|
+
@action_descriptor_generator ||= definition.action_descriptor_generator.new(definition, resource_path)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# ***********************************************************************
|
|
40
|
+
# Attribute generators
|
|
41
|
+
# ***********************************************************************
|
|
42
|
+
|
|
43
|
+
def generate_boxes(view, context)
|
|
44
|
+
boxes = view.boxes
|
|
45
|
+
return nil if boxes.nil? || boxes.empty?
|
|
46
|
+
boxes.map do |field|
|
|
47
|
+
field_descriptor_generator.generate(definition.model, field, context)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def generate_filters(view, context)
|
|
52
|
+
# Toolbar filters (always-on). These take precedence: any standard filter with the
|
|
53
|
+
# same name is dropped below so a filter is never rendered twice.
|
|
54
|
+
toolbar_filters = (view.respond_to?(:toolbar_filters) ? view.toolbar_filters : nil) || []
|
|
55
|
+
toolbar_names = toolbar_filters.map { |filter| filter_reference_name(filter) }
|
|
56
|
+
|
|
57
|
+
# Standard (drawer) filters, falling back to the definition-level filter set. Exclude
|
|
58
|
+
# anything already promoted to the toolbar to avoid duplicates.
|
|
59
|
+
standard_filters = (view.respond_to?(:filters) ? view.filters : nil) || definition.filters || []
|
|
60
|
+
standard_filters = standard_filters.reject { |filter| toolbar_names.include?(filter_reference_name(filter)) }
|
|
61
|
+
|
|
62
|
+
toolbar_descriptors = toolbar_filters.map do |filter|
|
|
63
|
+
filter_descriptor_generator.generate(definition.model, filter, context, is_always_on: true)
|
|
64
|
+
end
|
|
65
|
+
standard_descriptors = standard_filters.map do |filter|
|
|
66
|
+
filter_descriptor_generator.generate(definition.model, filter, context)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
toolbar_descriptors + standard_descriptors
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Normalize a filter entry (Symbol, String or FilterReference) to its name for comparison.
|
|
73
|
+
def filter_reference_name(filter)
|
|
74
|
+
filter.is_a?(Habarico::FilterReference) ? filter.name.to_s : filter.to_s
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def generate_row_actions(view, context)
|
|
78
|
+
unless view.row_actions.nil?
|
|
79
|
+
return view.row_actions.map do |action|
|
|
80
|
+
action_descriptor_generator.generate(action, context)
|
|
81
|
+
end.compact
|
|
82
|
+
end
|
|
83
|
+
nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def generate_toolbar_actions(view, context)
|
|
87
|
+
unless view.toolbar_actions.nil?
|
|
88
|
+
return view.toolbar_actions.map do |action|
|
|
89
|
+
action_descriptor_generator.generate(action, context)
|
|
90
|
+
end.compact
|
|
91
|
+
end
|
|
92
|
+
nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Utility actions of the table (export, print, ...) rendered next to the filter bar.
|
|
96
|
+
def generate_list_actions(view, context)
|
|
97
|
+
unless view.list_actions.nil?
|
|
98
|
+
return view.list_actions.map do |action|
|
|
99
|
+
action_descriptor_generator.generate(action, context)
|
|
100
|
+
end.compact
|
|
101
|
+
end
|
|
102
|
+
nil
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def generate_default_sorting(view, context)
|
|
106
|
+
sort_descriptor_generator.generate(view.default_sorting || definition.default_sorting, context)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def generate_single_click_action(view, context)
|
|
110
|
+
return nil if view.single_click_action.nil?
|
|
111
|
+
action_descriptor_generator.generate(view.single_click_action, context)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def generate_double_click_action(view, context)
|
|
115
|
+
return nil if view.double_click_action.nil?
|
|
116
|
+
action_descriptor_generator.generate(view.double_click_action, context)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class ObjectBoxParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(box, context)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `box` must be a Habarico::ObjectBox') unless box.is_a?(Habarico::ObjectBox)
|
|
7
|
+
raise Eluvia::Errors::StandardError.new('Attribute `target` of the `box` argument must be set') if box.target.blank?
|
|
8
|
+
|
|
9
|
+
# Create model
|
|
10
|
+
Habarico::ObjectBoxParameters.new(
|
|
11
|
+
target: generate_target(box, context)
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
|
|
17
|
+
# ***********************************************************************
|
|
18
|
+
# Attribute generators
|
|
19
|
+
# ***********************************************************************
|
|
20
|
+
|
|
21
|
+
def generate_target(box, _context)
|
|
22
|
+
box.target
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class SortDescriptorGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(sort_descriptor, context)
|
|
5
|
+
# Nothing declared, nothing published - the frontend then sorts by the primary key, which is
|
|
6
|
+
# what the backend orders by too (HAB-915).
|
|
7
|
+
return nil if sort_descriptor.blank?
|
|
8
|
+
|
|
9
|
+
Habarico::SortDescriptor.new(
|
|
10
|
+
field_name: generate_field_name(sort_descriptor, context),
|
|
11
|
+
direction: generate_direction(sort_descriptor, context),
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
|
|
17
|
+
# ***********************************************************************
|
|
18
|
+
# Attribute generators
|
|
19
|
+
# ***********************************************************************
|
|
20
|
+
|
|
21
|
+
def generate_field_name(sort_descriptor, _context)
|
|
22
|
+
Habarico::OrderByHelper.field_name(sort_descriptor)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def generate_direction(sort_descriptor, _context)
|
|
26
|
+
Habarico::OrderByHelper.direction(sort_descriptor)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class TabBoxParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(box, context)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `box` must be a Habarico::TabBox') unless box.is_a?(Habarico::TabBox)
|
|
7
|
+
|
|
8
|
+
# Create model
|
|
9
|
+
Habarico::TabBoxParameters.new(
|
|
10
|
+
show_toolbar_navigation: generate_show_toolbar_navigation(box, context),
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
# ***********************************************************************
|
|
17
|
+
# Attribute generators
|
|
18
|
+
# ***********************************************************************
|
|
19
|
+
|
|
20
|
+
# Defaults to false for tab boxes.
|
|
21
|
+
def generate_show_toolbar_navigation(box, _context)
|
|
22
|
+
box.show_toolbar_navigation.nil? ? false : !!box.show_toolbar_navigation
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|