Skip to main content

Custom Schema Generators

Every generator can be replaced with a subclass, per resource. That is the seam for shaping the schema when the DSL does not reach far enough.

class ProductFieldSchemaGenerator < Habarico::FieldSchemaGenerator
# Override generate_label, generate_type, generate_format, generate_options, … as needed
end

class Apps::Admin::ProductsController < ApplicationController
include Habarico::Controller

model Product

field_schema_generator ProductFieldSchemaGenerator
endpoints_schema_generator ProductEndpointsSchemaGenerator
end

Every generator descends from Habarico::AbstractGenerator, which gives it the definition and resource_path of the resource being generated.

The generator attributes​

The DSL exposes one attribute per generator class. They are grouped the same way the classes are:

GroupAttributes
Endpoint / fieldsfield_schema_generator, fields_schema_generator, field_options_generator, filter_schema_generator, filters_schema_generator, search_filter_schema_generator, enum_type_generator, number_field_options_generator, phone_field_options_generator, relation_field_options_generator, dynamic_render_options_generator, method_schema_generator, endpoints_schema_generator
Viewview_schema_generator, global_view_schema_generator, view_endpoint_parameters_generator, list_view_parameters_generator, detail_view_parameters_generator, box_schema_generator, box_options_generator, field_descriptor_generator, filter_descriptor_generator, action_descriptor_generator, sort_descriptor_generator, and a *_box_parameters_generator for each of the seven box types that carry a parameters block (array, gallery, grid_item, list, object, tab, wizard)
Actionaction_schema_generator, resource_action_schema_generator, global_resource_action_schema_generator, link_action_parameters_generator, resource_action_parameters_generator, resource_action_endpoint_parameters_generator, save_action_parameters_generator, view_action_parameters_generator, view_action_endpoint_parameters_generator, upload_images_action_parameters_generator, confirm_dialog_properties_generator
Menumenu_schema_generator, menu_group_schema_generator, menu_link_parameters_generator, menu_view_parameters_generator, menu_view_endpoint_parameters_generator
Resourcelocal_resource_schema_generator, global_resource_schema_generator, object_resource_schema_generator, action_resource_schema_generator
caution

The endpoint one is endpoints_schema_generator — plural. It generates the whole endpoints block (one MethodSchema per HTTP method), which is why the name is not endpoint_….

See also​

  • Controller setup — where these attributes are set
  • Views — the higher-level DSL most cases need instead
  • Field types — what generate_type / generate_format decide