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,56 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class ViewActionParametersGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(action, context)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new('Argument `action` must be a Habarico::Action') unless action.is_a?(Habarico::Action)
|
|
7
|
+
raise Eluvia::Errors::StandardError.new('Argument `action` must be of :view type') unless action.type.to_sym == :view
|
|
8
|
+
|
|
9
|
+
# Create model
|
|
10
|
+
Habarico::ViewActionParameters.new(
|
|
11
|
+
name: generate_name(action, context),
|
|
12
|
+
mode: generate_mode(action, context),
|
|
13
|
+
dialog_width: generate_dialog_width(action, context),
|
|
14
|
+
parameters: generate_parameters(action, context),
|
|
15
|
+
endpoint: generate_endpoint(action, context),
|
|
16
|
+
keep_linked_parent: generate_keep_linked_parent(action, context)
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def view_action_endpoint_parameters_generator
|
|
23
|
+
@view_action_endpoint_parameters_generator ||= definition.view_action_endpoint_parameters_generator.new(definition, resource_path)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# ***********************************************************************
|
|
27
|
+
# Attribute generators
|
|
28
|
+
# ***********************************************************************
|
|
29
|
+
|
|
30
|
+
def generate_name(action, _context)
|
|
31
|
+
action.view_name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def generate_mode(action, _context)
|
|
35
|
+
action.view_mode
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def generate_dialog_width(action, _context)
|
|
39
|
+
action.dialog_width
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generate_parameters(action, context)
|
|
43
|
+
Habarico::CallableHelper.resolve(action.view_parameters, context)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def generate_endpoint(action, context)
|
|
47
|
+
return nil if Habarico::ActionHelper.is_standard_action?(action)
|
|
48
|
+
view_action_endpoint_parameters_generator.generate(action, context)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def generate_keep_linked_parent(action, _context)
|
|
52
|
+
action.view_keep_linked_parent
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class DynamicRenderOptionsGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, box_or_field_reference)
|
|
5
|
+
Habarico::DynamicRenderOptions.new(
|
|
6
|
+
show_query: generate_show_query(model, box_or_field_reference),
|
|
7
|
+
required_query: generate_required_query(model, box_or_field_reference),
|
|
8
|
+
)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
# ***********************************************************************
|
|
14
|
+
# Attribute generators
|
|
15
|
+
# ***********************************************************************
|
|
16
|
+
|
|
17
|
+
def generate_show_query(_model, box_or_field_reference)
|
|
18
|
+
box_or_field_reference.show_query
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def generate_required_query(_model, box_or_field_reference)
|
|
22
|
+
box_or_field_reference.required_query
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class EndpointsSchemaGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, read_fields, write_fields, filters, methods)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
validate_fields_argument!('read_fields', read_fields)
|
|
7
|
+
validate_fields_argument!('write_fields', write_fields)
|
|
8
|
+
raise Eluvia::Errors::StandardError.new('Argument `filters` must be an Array of String or Symbol instances') unless filters.is_a?(::Array) && filters.all? { |f| f.is_a?(::String) || f.is_a?(::Symbol) }
|
|
9
|
+
raise Eluvia::Errors::StandardError.new('Argument `methods` must be an array of String or Symbol instances') unless methods.is_a?(::Array) && methods.all? { |m| m.is_a?(::String) || m.is_a?(::Symbol) }
|
|
10
|
+
|
|
11
|
+
# Create model
|
|
12
|
+
Habarico::EndpointsSchema.new(
|
|
13
|
+
get: methods.include?(:get) || methods.include?('get') ? generate_get(model, read_fields, write_fields, filters) : nil,
|
|
14
|
+
post: methods.include?(:post) || methods.include?('post') ? generate_post(model, read_fields, write_fields, filters) : nil,
|
|
15
|
+
put: methods.include?(:put) || methods.include?('put') ? generate_put(model, read_fields, write_fields, filters) : nil,
|
|
16
|
+
patch: methods.include?(:patch) || methods.include?('patch') ? generate_patch(model, read_fields, write_fields, filters) : nil,
|
|
17
|
+
delete: methods.include?(:delete) || methods.include?('delete') ? generate_delete(model, read_fields, write_fields, filters) : nil
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
def validate_fields_argument!(name, fields)
|
|
24
|
+
valid = fields.is_a?(::Array) && fields.all? do |f|
|
|
25
|
+
f.is_a?(::String) || f.is_a?(::Symbol) || f.is_a?(::Hash) || f.is_a?(Habarico::FieldReference)
|
|
26
|
+
end
|
|
27
|
+
return if valid
|
|
28
|
+
|
|
29
|
+
raise Eluvia::Errors::StandardError.new("Argument `#{name}` must be an Array of String, Symbol, Hash or Habarico::FieldReference instances")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def method_schema_generator
|
|
33
|
+
@method_schema_generator ||= definition.method_schema_generator.new(definition, resource_path)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# ***********************************************************************
|
|
37
|
+
# Attribute generators
|
|
38
|
+
# ***********************************************************************
|
|
39
|
+
|
|
40
|
+
def generate_get(model, read_fields, _write_fields, filters)
|
|
41
|
+
method_schema_generator.generate(model, read_fields, filters)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def generate_post(model, _read_fields, write_fields, _filters)
|
|
45
|
+
method_schema_generator.generate(model, write_fields, [])
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def generate_put(model, _read_fields, write_fields, _filters)
|
|
49
|
+
method_schema_generator.generate(model, write_fields, [])
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def generate_patch(model, _read_fields, write_fields, _filters)
|
|
53
|
+
method_schema_generator.generate(model, write_fields, [])
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def generate_delete(model, _read_fields, _write_fields, _filters)
|
|
57
|
+
method_schema_generator.generate(model, [], [])
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class EnumTypeGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, attr_name, value)
|
|
5
|
+
# Validate arguments
|
|
6
|
+
raise Eluvia::Errors::StandardError.new("Model `#{model.model_name}` does not have enum attribute `#{attr_name}`") unless model.has_enum_attr?(attr_name)
|
|
7
|
+
raise Eluvia::Errors::StandardError.new("Enum attribute `#{attr_name}` of model `#{model.model_name}` does not have a choice with value `#{value}`") unless model.find_enum_attr(attr_name).fetch(value.to_s, nil)
|
|
8
|
+
|
|
9
|
+
# Create model
|
|
10
|
+
Habarico::EnumType.new(
|
|
11
|
+
value: generate_value(model, attr_name, value),
|
|
12
|
+
label: generate_label(model, attr_name, value),
|
|
13
|
+
color: generate_color(model, attr_name, value),
|
|
14
|
+
icon: generate_icon(model, attr_name, value)
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
# ***********************************************************************
|
|
21
|
+
# Attribute generators
|
|
22
|
+
# ***********************************************************************
|
|
23
|
+
|
|
24
|
+
def generate_value(model, attr_name, value)
|
|
25
|
+
choice = model.find_enum_attr(attr_name).fetch(value.to_s, nil)
|
|
26
|
+
choice[:value].to_s
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def generate_label(model, attr_name, value)
|
|
30
|
+
choice = model.find_enum_attr(attr_name).fetch(value.to_s, nil)
|
|
31
|
+
choice[:label].to_s
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def generate_color(model, attr_name, value)
|
|
35
|
+
choice = model.find_enum_attr(attr_name).fetch(value.to_s, nil)
|
|
36
|
+
choice[:color].to_s
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def generate_icon(model, attr_name, value)
|
|
40
|
+
choice = model.find_enum_attr(attr_name).fetch(value.to_s, nil)
|
|
41
|
+
choice[:icon]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
module Habarico
|
|
2
|
+
class FieldOptionsGenerator < AbstractGenerator
|
|
3
|
+
|
|
4
|
+
def generate(model, attr_name, field_reference)
|
|
5
|
+
if field_reference.present?
|
|
6
|
+
return Habarico::FieldOptions.new(
|
|
7
|
+
prefix: generate_prefix_fr(model, field_reference),
|
|
8
|
+
postfix: generate_postfix_fr(model, field_reference),
|
|
9
|
+
text_align: generate_text_align_fr(model, field_reference),
|
|
10
|
+
target: generate_target_fr(model, field_reference),
|
|
11
|
+
number: generate_number_fr(model, field_reference),
|
|
12
|
+
dynamic_render: generate_dynamic_render_fr(model, field_reference),
|
|
13
|
+
relation: generate_relation_fr(model, field_reference),
|
|
14
|
+
phone: generate_phone_fr(model, field_reference),
|
|
15
|
+
choices: generate_choices_fr(model, field_reference),
|
|
16
|
+
image: generate_image_fr(model, field_reference),
|
|
17
|
+
ai: generate_ai_fr(model, field_reference),
|
|
18
|
+
max_size: generate_max_size_fr(model, field_reference),
|
|
19
|
+
accept: generate_accept_fr(model, field_reference),
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
if attr_name.present?
|
|
23
|
+
return Habarico::FieldOptions.new(
|
|
24
|
+
prefix: generate_prefix_at(model, attr_name),
|
|
25
|
+
postfix: generate_postfix_at(model, attr_name),
|
|
26
|
+
text_align: generate_text_align_at(model, attr_name),
|
|
27
|
+
target: generate_target_at(model, attr_name),
|
|
28
|
+
number: generate_number_at(model, attr_name),
|
|
29
|
+
dynamic_render: generate_dynamic_render_at(model, attr_name),
|
|
30
|
+
max_size: generate_max_size_at(model, attr_name),
|
|
31
|
+
accept: generate_accept_at(model, attr_name),
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
protected
|
|
38
|
+
|
|
39
|
+
# ***********************************************************************
|
|
40
|
+
# Schema generators
|
|
41
|
+
# ***********************************************************************
|
|
42
|
+
|
|
43
|
+
def number_field_options_generator
|
|
44
|
+
@number_field_options_generator ||= definition.number_field_options_generator.new(definition, resource_path)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def dynamic_render_options_generator
|
|
48
|
+
@dynamic_render_options_generator ||= definition.dynamic_render_options_generator.new(definition, resource_path)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def relation_field_options_generator
|
|
52
|
+
@relation_field_options_generator ||= definition.relation_field_options_generator.new(definition, resource_path)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Memoized per `(model, attr_name)` so `generate_max_size_*` and `generate_accept_*` - two
|
|
56
|
+
# independent generator methods, called separately for the same field - derive it only once
|
|
57
|
+
# instead of each re-running `model.validators_on(attachment)` and the Marcel content-type
|
|
58
|
+
# guess for the half of the result the other one does not need.
|
|
59
|
+
def file_validation_rules(model, attr_name)
|
|
60
|
+
@file_validation_rules ||= {}
|
|
61
|
+
@file_validation_rules[[model, attr_name]] ||= Habarico::FileValidations.for_model(model, attr_name)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def phone_field_options_generator
|
|
65
|
+
@phone_field_options_generator ||= definition.phone_field_options_generator.new(definition, resource_path)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# ***********************************************************************
|
|
69
|
+
# Attribute generators
|
|
70
|
+
# ***********************************************************************
|
|
71
|
+
|
|
72
|
+
def generate_prefix_at(_model, _attr_name)
|
|
73
|
+
# not implemented yet
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def generate_postfix_at(_model, _attr_name)
|
|
77
|
+
# not implemented yet
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def generate_text_align_at(model, attr_name)
|
|
81
|
+
return 'right' if Habarico::AttributesHelper.is_amount_major_attr?(model, attr_name)
|
|
82
|
+
nil
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def generate_target_at(_model, _attr_name)
|
|
86
|
+
# not implemented yet
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def generate_number_at(model, attr_name)
|
|
90
|
+
number_field_options_generator.generate(model, attr_name)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def generate_dynamic_render_at(_model, _attr_name)
|
|
94
|
+
nil # not possible to generate dynamic render without FieldReference
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Largest file (bytes) this `file_attr` accepts, derived from its own
|
|
98
|
+
# `active_storage_validations` size declaration (HAB-966). `habarico_enterprise.uploads`, when
|
|
99
|
+
# installed, additionally folds in the project-wide upload size ceiling for a field a
|
|
100
|
+
# chunked-upload provider serves - see `Habarico::FileValidations.for_model`.
|
|
101
|
+
#
|
|
102
|
+
# A bare symbol declaration has no `FieldReference` to set an explicit override on - see
|
|
103
|
+
# `generate_max_size_fr` for that.
|
|
104
|
+
def generate_max_size_at(model, attr_name)
|
|
105
|
+
file_validation_rules(model, attr_name).max_size
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# File types this `file_attr` accepts, derived from its own `active_storage_validations`
|
|
109
|
+
# content-type declaration (HAB-966).
|
|
110
|
+
def generate_accept_at(model, attr_name)
|
|
111
|
+
Habarico::FileValidations.accept_for(file_validation_rules(model, attr_name).allowed_content_types)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def generate_prefix_fr(_model, _field_reference)
|
|
115
|
+
# not implemented yet
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def generate_postfix_fr(_model, _field_reference)
|
|
119
|
+
# not implemented yet
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def generate_text_align_fr(_model, field_reference)
|
|
123
|
+
field_reference.text_align
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def generate_target_fr(_model, field_reference)
|
|
127
|
+
field_reference.target
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def generate_number_fr(_model, _field_reference)
|
|
131
|
+
# not implemented yet
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def generate_dynamic_render_fr(model, field_reference)
|
|
135
|
+
dynamic_render_options_generator.generate(model, field_reference)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def generate_relation_fr(model, field_reference)
|
|
139
|
+
relation_field_options_generator.generate(model, field_reference)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def generate_phone_fr(model, field_reference)
|
|
143
|
+
phone_field_options_generator.generate(model, field_reference)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def generate_choices_fr(_model, field_reference)
|
|
147
|
+
icons_key = field_reference.icons_key
|
|
148
|
+
return nil if icons_key.blank?
|
|
149
|
+
Habarico::ChoicesFieldOptions.new(icons_key: icons_key)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def generate_image_fr(_model, field_reference)
|
|
153
|
+
resize_width = field_reference.resize_width
|
|
154
|
+
crop_aspect_ratio = field_reference.crop_aspect_ratio
|
|
155
|
+
return nil if resize_width.blank? && crop_aspect_ratio.blank?
|
|
156
|
+
Habarico::ImageFieldOptions.new(resize_width: resize_width, crop_aspect_ratio: crop_aspect_ratio)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def generate_ai_fr(_model, field_reference)
|
|
160
|
+
source_fields = field_reference.ai_source_fields
|
|
161
|
+
return nil if source_fields.blank?
|
|
162
|
+
Habarico::AiFieldOptions.new(source_fields: source_fields)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# `field_reference.max_size` is a deliberate override, the same way `resize_width` /
|
|
166
|
+
# `icons_key` above are - set by hand it always wins over what the attachment's own validators
|
|
167
|
+
# imply.
|
|
168
|
+
def generate_max_size_fr(model, field_reference)
|
|
169
|
+
return field_reference.max_size if field_reference.max_size.present?
|
|
170
|
+
file_validation_rules(model, field_reference.name).max_size
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def generate_accept_fr(model, field_reference)
|
|
174
|
+
return field_reference.accept if field_reference.accept.present?
|
|
175
|
+
Habarico::FileValidations.accept_for(file_validation_rules(model, field_reference.name).allowed_content_types)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
end
|