Module: LcpRuby

Defined in:
lib/lcp_ruby.rb,
lib/lcp_ruby/cli.rb,
lib/lcp_ruby/menu.rb,
lib/lcp_ruby/engine.rb,
lib/lcp_ruby/export.rb,
lib/lcp_ruby/import.rb,
lib/lcp_ruby/current.rb,
lib/lcp_ruby/dynamic.rb,
lib/lcp_ruby/version.rb,
lib/lcp_ruby/gem_paths.rb,
lib/lcp_ruby/i18n_lint.rb,
lib/lcp_ruby/hash_utils.rb,
lib/lcp_ruby/i18n_check.rb,
lib/lcp_ruby/path_utils.rb,
lib/lcp_ruby/url_safety.rb,
app/models/lcp_ruby/user.rb,
lib/lcp_ruby/array_query.rb,
lib/lcp_ruby/dev_toolbar.rb,
lib/lcp_ruby/pages/setup.rb,
lib/lcp_ruby/roles/setup.rb,
lib/lcp_ruby/asset_copier.rb,
lib/lcp_ruby/bulk_updater.rb,
lib/lcp_ruby/export/setup.rb,
lib/lcp_ruby/groups/setup.rb,
lib/lcp_ruby/import/setup.rb,
lib/lcp_ruby/kanban/board.rb,
lib/lcp_ruby/tasks/doctor.rb,
lib/lcp_ruby/batch_actions.rb,
lib/lcp_ruby/configuration.rb,
lib/lcp_ruby/custom_fields.rb,
lib/lcp_ruby/kanban/column.rb,
lib/lcp_ruby/metrics/setup.rb,
lib/lcp_ruby/search_result.rb,
lib/lcp_ruby/user_snapshot.rb,
lib/lcp_ruby/auditing/setup.rb,
lib/lcp_ruby/authentication.rb,
lib/lcp_ruby/dsl/dsl_loader.rb,
lib/lcp_ruby/pages/registry.rb,
lib/lcp_ruby/pages/resolver.rb,
lib/lcp_ruby/roles/registry.rb,
lib/lcp_ruby/workflow/setup.rb,
lib/lcp_ruby/cli/new_command.rb,
lib/lcp_ruby/cli/run_command.rb,
lib/lcp_ruby/dsl/job_builder.rb,
lib/lcp_ruby/groups/contract.rb,
lib/lcp_ruby/groups/registry.rb,
lib/lcp_ruby/kanban/swimlane.rb,
lib/lcp_ruby/metadata/loader.rb,
lib/lcp_ruby/virtual_columns.rb,
lib/lcp_ruby/workflow/errors.rb,
lib/lcp_ruby/cli/docs_command.rb,
lib/lcp_ruby/data_source/base.rb,
lib/lcp_ruby/data_source/host.rb,
lib/lcp_ruby/dsl/type_builder.rb,
lib/lcp_ruby/services/checker.rb,
lib/lcp_ruby/skills_installer.rb,
lib/lcp_ruby/auditing/registry.rb,
lib/lcp_ruby/controller/search.rb,
lib/lcp_ruby/data_source/setup.rb,
lib/lcp_ruby/dsl/field_builder.rb,
lib/lcp_ruby/dsl/model_builder.rb,
lib/lcp_ruby/events/dispatcher.rb,
lib/lcp_ruby/grouped_query/row.rb,
lib/lcp_ruby/i18n_check/runner.rb,
lib/lcp_ruby/json_item_wrapper.rb,
lib/lcp_ruby/metrics/collector.rb,
lib/lcp_ruby/pages/filter_form.rb,
lib/lcp_ruby/permissions/setup.rb,
lib/lcp_ruby/services/registry.rb,
lib/lcp_ruby/workflow/contract.rb,
lib/lcp_ruby/workflow/registry.rb,
lib/lcp_ruby/workflow/resolver.rb,
lib/lcp_ruby/cli/skills_command.rb,
lib/lcp_ruby/display/icon_badge.rb,
lib/lcp_ruby/display/text_badge.rb,
lib/lcp_ruby/groups/host_loader.rb,
lib/lcp_ruby/groups/yaml_loader.rb,
lib/lcp_ruby/i18n_check/offense.rb,
lib/lcp_ruby/import/auto_mapper.rb,
lib/lcp_ruby/import/file_parser.rb,
lib/lcp_ruby/kanban/move_result.rb,
lib/lcp_ruby/metadata/menu_item.rb,
lib/lcp_ruby/metrics/json_query.rb,
lib/lcp_ruby/metrics/subscriber.rb,
lib/lcp_ruby/presenter/resolver.rb,
app/helpers/lcp_ruby/form_helper.rb,
app/helpers/lcp_ruby/tree_helper.rb,
lib/lcp_ruby/actions/base_action.rb,
lib/lcp_ruby/api_tokens/verifier.rb,
lib/lcp_ruby/association_fk_type.rb,
lib/lcp_ruby/authorization/cache.rb,
lib/lcp_ruby/authorization/codes.rb,
lib/lcp_ruby/condition_evaluator.rb,
lib/lcp_ruby/custom_fields/query.rb,
lib/lcp_ruby/custom_fields/setup.rb,
lib/lcp_ruby/custom_fields/utils.rb,
lib/lcp_ruby/display/count_badge.rb,
lib/lcp_ruby/events/handler_base.rb,
lib/lcp_ruby/groups/model_loader.rb,
lib/lcp_ruby/i18n_check/reporter.rb,
lib/lcp_ruby/metadata/field_path.rb,
lib/lcp_ruby/metadata/i18n_label.rb,
lib/lcp_ruby/metrics/fingerprint.rb,
lib/lcp_ruby/saved_filters/setup.rb,
lib/lcp_ruby/search/quick_search.rb,
lib/lcp_ruby/types/type_registry.rb,
lib/lcp_ruby/view_slots/registry.rb,
lib/lcp_ruby/cli/examples_command.rb,
lib/lcp_ruby/conditions/validator.rb,
lib/lcp_ruby/data_source/registry.rb,
lib/lcp_ruby/dsl/workflow_builder.rb,
lib/lcp_ruby/embed_providers/base.rb,
lib/lcp_ruby/import/row_processor.rb,
lib/lcp_ruby/import/value_coercer.rb,
lib/lcp_ruby/kanban/host_provider.rb,
lib/lcp_ruby/metrics/rate_limiter.rb,
lib/lcp_ruby/pages/change_handler.rb,
lib/lcp_ruby/permissions/registry.rb,
lib/lcp_ruby/presenter/action_set.rb,
lib/lcp_ruby/presenter/column_set.rb,
lib/lcp_ruby/presenter/enrichment.rb,
lib/lcp_ruby/record_aliases/setup.rb,
lib/lcp_ruby/roles/change_handler.rb,
lib/lcp_ruby/search/query_builder.rb,
lib/lcp_ruby/sort/enum_sort_order.rb,
lib/lcp_ruby/types/built_in_types.rb,
lib/lcp_ruby/widgets/date_grouper.rb,
lib/lcp_ruby/workflow/host_source.rb,
app/helpers/lcp_ruby/dialog_helper.rb,
app/helpers/lcp_ruby/layout_helper.rb,
app/helpers/lcp_ruby/search_helper.rb,
lib/lcp_ruby/auditing/audit_writer.rb,
lib/lcp_ruby/authentication/errors.rb,
lib/lcp_ruby/authorized_controller.rb,
lib/lcp_ruby/background_jobs/setup.rb,
lib/lcp_ruby/data_source/rest_json.rb,
lib/lcp_ruby/display/base_renderer.rb,
lib/lcp_ruby/dsl/condition_builder.rb,
lib/lcp_ruby/dsl/presenter_builder.rb,
lib/lcp_ruby/export/data_generator.rb,
lib/lcp_ruby/export/export_handler.rb,
lib/lcp_ruby/grouped_query/builder.rb,
lib/lcp_ruby/groups/change_handler.rb,
lib/lcp_ruby/i18n_check/heuristics.rb,
lib/lcp_ruby/model_factory/builder.rb,
lib/lcp_ruby/types/type_definition.rb,
lib/lcp_ruby/widgets/chart_palette.rb,
lib/lcp_ruby/widgets/data_resolver.rb,
lib/lcp_ruby/workflow/audit_writer.rb,
lib/lcp_ruby/workflow/model_source.rb,
app/helpers/lcp_ruby/display_helper.rb,
lib/generators/lcp_ruby/dsl_to_yaml.rb,
lib/lcp_ruby/background_jobs/errors.rb,
lib/lcp_ruby/custom_fields/registry.rb,
lib/lcp_ruby/display/renderers/code.rb,
lib/lcp_ruby/display/renderers/date.rb,
lib/lcp_ruby/display/renderers/link.rb,
lib/lcp_ruby/display/renderers/text.rb,
lib/lcp_ruby/dsl/view_group_builder.rb,
lib/lcp_ruby/export/value_formatter.rb,
lib/lcp_ruby/i18n_check/key_deriver.rb,
lib/lcp_ruby/metadata/erd_generator.rb,
lib/lcp_ruby/metadata/path_template.rb,
lib/lcp_ruby/metrics/error_recorder.rb,
lib/lcp_ruby/model_factory/registry.rb,
lib/lcp_ruby/pages/scope_filter_set.rb,
lib/lcp_ruby/saved_filters/registry.rb,
lib/lcp_ruby/saved_filters/resolver.rb,
lib/lcp_ruby/search/param_sanitizer.rb,
lib/lcp_ruby/types/transforms/strip.rb,
lib/lcp_ruby/workflow/state_machine.rb,
lib/lcp_ruby/workflow/static_source.rb,
lib/lcp_ruby/actions/action_executor.rb,
lib/lcp_ruby/actions/action_registry.rb,
lib/lcp_ruby/association_join_column.rb,
lib/lcp_ruby/authentication/provider.rb,
lib/lcp_ruby/authorization/page_gate.rb,
lib/lcp_ruby/background_jobs/enqueue.rb,
lib/lcp_ruby/controller/crud_helpers.rb,
lib/lcp_ruby/controller/path_helpers.rb,
lib/lcp_ruby/controller/view_helpers.rb,
lib/lcp_ruby/display/renderers/badge.rb,
lib/lcp_ruby/display/renderers/image.rb,
lib/lcp_ruby/embed_providers/grafana.rb,
lib/lcp_ruby/events/handler_registry.rb,
lib/lcp_ruby/kanban/default_provider.rb,
lib/lcp_ruby/metadata/auth_validator.rb,
lib/lcp_ruby/metadata/reserved_names.rb,
lib/lcp_ruby/presenter/link_resolver.rb,
lib/lcp_ruby/reserved_route_segments.rb,
lib/lcp_ruby/view_slots/slot_context.rb,
lib/lcp_ruby/virtual_columns/builder.rb,
lib/lcp_ruby/widgets/chartkick_check.rb,
lib/lcp_ruby/workflow/approval/setup.rb,
lib/lcp_ruby/workflow/audit_registry.rb,
lib/lcp_ruby/workflow/change_handler.rb,
lib/lcp_ruby/workflow/value_resolver.rb,
app/helpers/lcp_ruby/condition_helper.rb,
app/helpers/lcp_ruby/dashboard_helper.rb,
app/helpers/lcp_ruby/view_slot_helper.rb,
lib/lcp_ruby/aggregates/query_builder.rb,
lib/lcp_ruby/background_jobs/contract.rb,
lib/lcp_ruby/background_jobs/registry.rb,
lib/lcp_ruby/background_jobs/resolver.rb,
lib/lcp_ruby/controller/authorization.rb,
lib/lcp_ruby/controller/impersonation.rb,
lib/lcp_ruby/custom_fields/applicator.rb,
lib/lcp_ruby/display/renderers/avatar.rb,
lib/lcp_ruby/display/renderers/number.rb,
lib/lcp_ruby/display/renderers/rating.rb,
lib/lcp_ruby/embed_providers/metabase.rb,
lib/lcp_ruby/events/async_handler_job.rb,
lib/lcp_ruby/generators/prerequisites.rb,
lib/lcp_ruby/i18n_check/configuration.rb,
lib/lcp_ruby/metadata/contract_result.rb,
lib/lcp_ruby/metadata/menu_definition.rb,
lib/lcp_ruby/metadata/page_definition.rb,
lib/lcp_ruby/metadata/zone_definition.rb,
lib/lcp_ruby/metrics/prometheus_check.rb,
lib/lcp_ruby/model_factory/array_type.rb,
lib/lcp_ruby/pages/contract_validator.rb,
lib/lcp_ruby/presenter/layout_builder.rb,
lib/lcp_ruby/roles/contract_validator.rb,
lib/lcp_ruby/routing/presenter_routes.rb,
lib/lcp_ruby/search/operator_registry.rb,
lib/lcp_ruby/widgets/scope_applicator.rb,
lib/lcp_ruby/workflow/approval/engine.rb,
lib/lcp_ruby/workflow/mermaid_builder.rb,
lib/generators/lcp_ruby/format_support.rb,
lib/lcp_ruby/actions/api_tokens/revoke.rb,
lib/lcp_ruby/authentication/jwks_cache.rb,
lib/lcp_ruby/controller/authentication.rb,
lib/lcp_ruby/controller/error_handling.rb,
lib/lcp_ruby/controller/locale_binding.rb,
lib/lcp_ruby/data_source/api_preloader.rb,
lib/lcp_ruby/display/markdown_sanitize.rb,
lib/lcp_ruby/display/renderer_registry.rb,
lib/lcp_ruby/display/renderers/heading.rb,
lib/lcp_ruby/export/field_tree_builder.rb,
lib/lcp_ruby/groups/contract_validator.rb,
lib/lcp_ruby/import/field_tree_builder.rb,
lib/lcp_ruby/import/import_job_handler.rb,
lib/lcp_ruby/metadata/event_definition.rb,
lib/lcp_ruby/metadata/field_definition.rb,
lib/lcp_ruby/metadata/group_definition.rb,
lib/lcp_ruby/metadata/model_definition.rb,
lib/lcp_ruby/metadata/schema_validator.rb,
lib/lcp_ruby/model_factory/api_builder.rb,
lib/lcp_ruby/presenter/metadata_lookup.rb,
lib/lcp_ruby/types/transforms/downcase.rb,
lib/lcp_ruby/view_slots/slot_component.rb,
lib/lcp_ruby/virtual_columns/collector.rb,
lib/lcp_ruby/workflow/state_definition.rb,
app/helpers/lcp_ruby/dev_toolbar_helper.rb,
app/helpers/lcp_ruby/oidc_button_helper.rb,
lib/generators/lcp_ruby/pages_generator.rb,
lib/lcp_ruby/api_tokens/model_extension.rb,
lib/lcp_ruby/api_tokens/token_generator.rb,
lib/lcp_ruby/authentication/role_mapper.rb,
lib/lcp_ruby/background_jobs/definition.rb,
lib/lcp_ruby/batch_actions/base_service.rb,
lib/lcp_ruby/condition_service_registry.rb,
lib/lcp_ruby/controller/presenter_setup.rb,
lib/lcp_ruby/data_source/cached_wrapper.rb,
lib/lcp_ruby/display/renderers/currency.rb,
lib/lcp_ruby/display/renderers/datetime.rb,
lib/lcp_ruby/display/renderers/markdown.rb,
lib/lcp_ruby/display/renderers/truncate.rb,
lib/lcp_ruby/display/renderers/url_link.rb,
lib/lcp_ruby/i18n_check/registry_walker.rb,
lib/lcp_ruby/metadata/model_hash_merger.rb,
lib/lcp_ruby/metadata/permission_merger.rb,
lib/lcp_ruby/metadata/responsive_policy.rb,
lib/lcp_ruby/metrics/collector_registry.rb,
lib/lcp_ruby/metrics/metric_definitions.rb,
lib/lcp_ruby/pages/definition_validator.rb,
lib/lcp_ruby/permissions/change_handler.rb,
lib/lcp_ruby/search/custom_field_filter.rb,
lib/lcp_ruby/sequences/sequence_manager.rb,
lib/lcp_ruby/services/built_in_defaults.rb,
lib/lcp_ruby/workflow/approval/registry.rb,
lib/lcp_ruby/workflow/transition_result.rb,
app/helpers/lcp_ruby/display/card_helper.rb,
app/helpers/lcp_ruby/i18n_payload_helper.rb,
app/helpers/lcp_ruby/link_through_helper.rb,
lib/generators/lcp_ruby/entity_generator.rb,
lib/generators/lcp_ruby/export_generator.rb,
lib/generators/lcp_ruby/groups_generator.rb,
lib/generators/lcp_ruby/import_generator.rb,
lib/lcp_ruby/association_options_builder.rb,
lib/lcp_ruby/auditing/contract_validator.rb,
lib/lcp_ruby/authentication/devise_setup.rb,
lib/lcp_ruby/authentication/http_fetcher.rb,
lib/lcp_ruby/authentication/test_support.rb,
lib/lcp_ruby/authorization/includes_hint.rb,
lib/lcp_ruby/authorization/scope_builder.rb,
lib/lcp_ruby/background_jobs/host_source.rb,
lib/lcp_ruby/display/renderers/copy_code.rb,
lib/lcp_ruby/display/renderers/file_size.rb,
lib/lcp_ruby/display/renderers/link_list.rb,
lib/lcp_ruby/display/renderers/rich_text.rb,
lib/lcp_ruby/dsl/source_location_capture.rb,
lib/lcp_ruby/dynamic_references/resolver.rb,
lib/lcp_ruby/generators/feature_registry.rb,
lib/lcp_ruby/metadata/menu_item_resolver.rb,
lib/lcp_ruby/pages/filter_form_validator.rb,
lib/lcp_ruby/permissions/source_resolver.rb,
lib/lcp_ruby/presenter/includes_resolver.rb,
lib/lcp_ruby/search/filter_param_builder.rb,
lib/lcp_ruby/search/parameter_definition.rb,
lib/lcp_ruby/services/built_in_accessors.rb,
lib/lcp_ruby/virtual_fields/virtual_form.rb,
lib/lcp_ruby/workflow/contract_validator.rb,
app/helpers/lcp_ruby/grouped_query_helper.rb,
lib/generators/lcp_ruby/install_generator.rb,
lib/lcp_ruby/actions/form_action_pipeline.rb,
lib/lcp_ruby/api_tokens/resolver_registry.rb,
lib/lcp_ruby/authentication/user_resolver.rb,
lib/lcp_ruby/authorization/policy_factory.rb,
lib/lcp_ruby/authorization/scope_resolver.rb,
lib/lcp_ruby/background_jobs/base_handler.rb,
lib/lcp_ruby/background_jobs/executor_job.rb,
lib/lcp_ruby/background_jobs/model_source.rb,
lib/lcp_ruby/display/renderers/collection.rb,
lib/lcp_ruby/display/renderers/email_link.rb,
lib/lcp_ruby/display/renderers/percentage.rb,
lib/lcp_ruby/display/renderers/phone_link.rb,
lib/lcp_ruby/dynamic_references/validator.rb,
lib/lcp_ruby/grouped_query/result_wrapper.rb,
lib/lcp_ruby/import/import_dialog_handler.rb,
lib/lcp_ruby/kanban/provider_test_harness.rb,
lib/lcp_ruby/metadata/enum_label_resolver.rb,
lib/lcp_ruby/model_factory/schema_manager.rb,
lib/lcp_ruby/pages/scope_context_resolver.rb,
lib/lcp_ruby/presenter/breadcrumb_builder.rb,
lib/lcp_ruby/saved_filters/change_handler.rb,
lib/lcp_ruby/search/query_language_parser.rb,
lib/lcp_ruby/services/built_in_transforms.rb,
lib/lcp_ruby/tasks/destroy_order_resolver.rb,
lib/lcp_ruby/virtual_fields/virtual_field.rb,
lib/lcp_ruby/workflow/transition_executor.rb,
lib/lcp_ruby/workflow/workflow_definition.rb,
app/controllers/lcp_ruby/health_controller.rb,
lib/generators/lcp_ruby/auditing_generator.rb,
lib/lcp_ruby/authorization/invariant_error.rb,
lib/lcp_ruby/background_jobs/static_source.rb,
lib/lcp_ruby/batch_actions/destroy_service.rb,
lib/lcp_ruby/batch_actions/restore_service.rb,
lib/lcp_ruby/data_source/api_model_concern.rb,
lib/lcp_ruby/data_source/resilient_wrapper.rb,
lib/lcp_ruby/display/renderers/record_link.rb,
lib/lcp_ruby/generators/entity_menu_writer.rb,
lib/lcp_ruby/metadata/aggregate_definition.rb,
lib/lcp_ruby/metadata/presenter_definition.rb,
lib/lcp_ruby/model_factory/enum_applicator.rb,
lib/lcp_ruby/model_factory/tree_applicator.rb,
lib/lcp_ruby/search/relative_date_expander.rb,
lib/lcp_ruby/services/accessors/json_field.rb,
lib/lcp_ruby/virtual_fields/types/array_of.rb,
app/controllers/lcp_ruby/actions_controller.rb,
app/controllers/lcp_ruby/dialogs_controller.rb,
app/controllers/lcp_ruby/landing_controller.rb,
app/controllers/lcp_ruby/metrics_controller.rb,
lib/lcp_ruby/background_jobs/change_handler.rb,
lib/lcp_ruby/background_jobs/steps_executor.rb,
lib/lcp_ruby/display/renderers/boolean_icon.rb,
lib/lcp_ruby/display/renderers/color_swatch.rb,
lib/lcp_ruby/display/renderers/progress_bar.rb,
lib/lcp_ruby/metadata/permission_definition.rb,
lib/lcp_ruby/metadata/validation_definition.rb,
lib/lcp_ruby/metadata/view_group_definition.rb,
lib/lcp_ruby/model_factory/managed_tracking.rb,
lib/lcp_ruby/model_factory/scope_applicator.rb,
lib/lcp_ruby/permissions/contract_validator.rb,
lib/lcp_ruby/presenter/field_value_resolver.rb,
lib/lcp_ruby/search/filter_metadata_builder.rb,
lib/lcp_ruby/types/transforms/normalize_url.rb,
lib/lcp_ruby/widgets/record_source_resolver.rb,
lib/lcp_ruby/workflow/approval/data_builder.rb,
lib/lcp_ruby/workflow/approval/task_manager.rb,
lib/lcp_ruby/workflow/transition_definition.rb,
app/helpers/lcp_ruby/display_template_helper.rb,
lib/generators/lcp_ruby/api_tokens_generator.rb,
lib/generators/lcp_ruby/entity/color_palette.rb,
lib/generators/lcp_ruby/monitoring_generator.rb,
lib/generators/lcp_ruby/role_model_generator.rb,
lib/lcp_ruby/authentication/audit_subscriber.rb,
lib/lcp_ruby/authentication/omniauth_builder.rb,
lib/lcp_ruby/authorization/impersonated_user.rb,
lib/lcp_ruby/background_jobs/handler_factory.rb,
lib/lcp_ruby/condition_services/feature_flag.rb,
lib/lcp_ruby/display/renderers/internal_link.rb,
lib/lcp_ruby/display/renderers/relative_date.rb,
lib/lcp_ruby/metadata/association_definition.rb,
lib/lcp_ruby/record_aliases/metadata_checker.rb,
lib/lcp_ruby/types/transforms/base_transform.rb,
lib/lcp_ruby/virtual_fields/synthetic_marker.rb,
lib/lcp_ruby/widgets/presenter_zone_resolver.rb,
app/controllers/lcp_ruby/auth/base_controller.rb,
app/controllers/lcp_ruby/resources_controller.rb,
lib/generators/lcp_ruby/agent_setup_generator.rb,
lib/generators/lcp_ruby/entity/role_discovery.rb,
lib/lcp_ruby/authentication/provider_registry.rb,
lib/lcp_ruby/authorization/association_lookup.rb,
lib/lcp_ruby/background_jobs/schedule_adapter.rb,
lib/lcp_ruby/condition_services/impersonating.rb,
lib/lcp_ruby/controller/bearer_authentication.rb,
lib/lcp_ruby/custom_fields/contract_validator.rb,
lib/lcp_ruby/display/renderers/workflow_badge.rb,
lib/lcp_ruby/metadata/configuration_validator.rb,
lib/lcp_ruby/model_factory/default_applicator.rb,
lib/lcp_ruby/model_factory/ransack_applicator.rb,
lib/lcp_ruby/permissions/definition_validator.rb,
lib/lcp_ruby/presenter/breadcrumb_path_helper.rb,
lib/lcp_ruby/saved_filters/contract_validator.rb,
lib/lcp_ruby/search/custom_filter_interceptor.rb,
lib/lcp_ruby/search/query_language_serializer.rb,
lib/lcp_ruby/types/transforms/normalize_phone.rb,
lib/lcp_ruby/workflow/approval/step_evaluator.rb,
lib/generators/lcp_ruby/install_auth_generator.rb,
lib/lcp_ruby/authorization/authorization_error.rb,
lib/lcp_ruby/data_source/api_error_placeholder.rb,
lib/lcp_ruby/data_source/api_filter_translator.rb,
lib/lcp_ruby/display/renderers/attachment_link.rb,
lib/lcp_ruby/display/renderers/attachment_list.rb,
lib/lcp_ruby/model_factory/auditing_applicator.rb,
lib/lcp_ruby/model_factory/callback_applicator.rb,
lib/lcp_ruby/model_factory/computed_applicator.rb,
lib/lcp_ruby/model_factory/sequence_applicator.rb,
lib/lcp_ruby/model_factory/workflow_applicator.rb,
lib/lcp_ruby/workflow/approval/cleanup_handler.rb,
lib/lcp_ruby/workflow/approval/discard_handler.rb,
lib/lcp_ruby/workflow/approval/step_definition.rb,
lib/lcp_ruby/workflow/audit_contract_validator.rb,
app/controllers/lcp_ruby/application_controller.rb,
app/controllers/lcp_ruby/dev_toolbar_controller.rb,
lib/generators/lcp_ruby/claude_skills_generator.rb,
lib/generators/lcp_ruby/custom_fields_generator.rb,
lib/generators/lcp_ruby/entity/field_descriptor.rb,
lib/generators/lcp_ruby/saved_filters_generator.rb,
lib/lcp_ruby/authentication/bearer_jwt_verifier.rb,
lib/lcp_ruby/authorization/permission_evaluator.rb,
lib/lcp_ruby/background_jobs/contract_validator.rb,
lib/lcp_ruby/background_jobs/unique_key_builder.rb,
lib/lcp_ruby/batch_actions/batch_action_handler.rb,
lib/lcp_ruby/metadata/virtual_column_definition.rb,
lib/lcp_ruby/model_factory/aggregate_applicator.rb,
lib/lcp_ruby/model_factory/json_type_applicator.rb,
lib/lcp_ruby/model_factory/label_method_builder.rb,
lib/lcp_ruby/model_factory/transform_applicator.rb,
lib/lcp_ruby/tasks/permission_resolve_formatter.rb,
lib/lcp_ruby/workflow/approval/system_evaluator.rb,
lib/lcp_ruby/workflow/transition_action_builder.rb,
lib/lcp_ruby/workflow/transition_label_resolver.rb,
lib/lcp_ruby/authentication/oidc_bearer_resolver.rb,
lib/lcp_ruby/display/renderers/workflow_timeline.rb,
lib/lcp_ruby/metadata/model_inheritance_resolver.rb,
lib/lcp_ruby/model_factory/array_type_applicator.rb,
lib/lcp_ruby/model_factory/attachment_applicator.rb,
lib/lcp_ruby/model_factory/userstamps_applicator.rb,
lib/lcp_ruby/model_factory/validation_applicator.rb,
lib/lcp_ruby/saved_filters/stale_field_validator.rb,
lib/lcp_ruby/workflow/approval/approver_resolver.rb,
app/controllers/concerns/lcp_ruby/zone_resolution.rb,
app/controllers/lcp_ruby/auth/sessions_controller.rb,
app/controllers/lcp_ruby/custom_fields_controller.rb,
app/controllers/lcp_ruby/impersonation_controller.rb,
app/controllers/lcp_ruby/saved_filters_controller.rb,
lib/generators/lcp_ruby/background_jobs_generator.rb,
lib/generators/lcp_ruby/entity/field_token_parser.rb,
lib/generators/lcp_ruby/host_controller_generator.rb,
lib/lcp_ruby/background_jobs/declarative/registry.rb,
lib/lcp_ruby/condition_services/current_user_role.rb,
lib/lcp_ruby/display/renderers/attachment_preview.rb,
lib/lcp_ruby/metadata/display_template_definition.rb,
lib/lcp_ruby/model_factory/association_applicator.rb,
lib/lcp_ruby/model_factory/positioning_applicator.rb,
lib/lcp_ruby/model_factory/soft_delete_applicator.rb,
lib/lcp_ruby/workflow/approval/activation_handler.rb,
lib/lcp_ruby/workflow/approval/contract_validator.rb,
lib/lcp_ruby/workflow/approval/resolution_handler.rb,
app/controllers/concerns/lcp_ruby/dialog_rendering.rb,
app/controllers/lcp_ruby/approval_tasks_controller.rb,
app/controllers/lcp_ruby/auth/callbacks_controller.rb,
app/controllers/lcp_ruby/auth/passwords_controller.rb,
lib/generators/lcp_ruby/batch_operations_generator.rb,
lib/lcp_ruby/search/parameterized_scope_applicator.rb,
lib/lcp_ruby/workflow/approval/approval_definition.rb,
lib/generators/lcp_ruby/gapfree_sequences_generator.rb,
lib/generators/lcp_ruby/permission_source_generator.rb,
lib/lcp_ruby/authorization/misconfigured_page_error.rb,
lib/lcp_ruby/background_jobs/triggers/event_trigger.rb,
lib/lcp_ruby/batch_actions/custom_action_dispatcher.rb,
app/controllers/concerns/lcp_ruby/page_authorization.rb,
lib/generators/lcp_ruby/oidc_role_mappings_generator.rb,
lib/generators/lcp_ruby/workflow_approvals_generator.rb,
lib/generators/lcp_ruby/workflow_audit_log_generator.rb,
lib/lcp_ruby/background_jobs/declarative/base_action.rb,
lib/lcp_ruby/custom_fields/definition_change_handler.rb,
lib/lcp_ruby/model_factory/virtual_column_applicator.rb,
lib/generators/lcp_ruby/workflow_definition_generator.rb,
lib/lcp_ruby/authorization/inherited_parent_validator.rb,
lib/lcp_ruby/model_factory/api_association_applicator.rb,
app/controllers/lcp_ruby/auth/registrations_controller.rb,
lib/lcp_ruby/authorization/runtime_invariant_validator.rb,
lib/lcp_ruby/batch_actions/permanently_destroy_service.rb,
lib/lcp_ruby/model_factory/service_accessor_applicator.rb,
app/controllers/concerns/lcp_ruby/form_action_execution.rb,
lib/lcp_ruby/background_jobs/triggers/trigger_installer.rb,
lib/lcp_ruby/authorization/invariant_check/configuration.rb,
lib/lcp_ruby/display/renderers/concerns/workflow_helpers.rb,
lib/lcp_ruby/background_jobs/declarative/run_scope_action.rb,
lib/lcp_ruby/presenter/includes_resolver/loading_strategy.rb,
lib/lcp_ruby/background_jobs/declarative/fire_event_action.rb,
lib/lcp_ruby/display/renderers/concerns/attachment_helpers.rb,
lib/lcp_ruby/presenter/includes_resolver/strategy_resolver.rb,
lib/lcp_ruby/background_jobs/declarative/call_webhook_action.rb,
lib/lcp_ruby/presenter/includes_resolver/dependency_collector.rb,
lib/lcp_ruby/presenter/includes_resolver/association_dependency.rb,
lib/lcp_ruby/model_factory/inherited_parent_validator_applicator.rb,
lib/lcp_ruby/background_jobs/declarative/send_notification_action.rb

Defined Under Namespace

Modules: Actions, Aggregates, ApiTokens, AssetCopier, AssociationFkType, AssociationJoinColumn, AssociationOptionsBuilder, Auditing, Auth, Authentication, Authorization, AuthorizedController, BackgroundJobs, BatchActions, BulkUpdater, CLI, ConditionHelper, ConditionServices, Conditions, Controller, CustomFields, DashboardHelper, DataSource, DevToolbar, DevToolbarHelper, DialogHelper, DialogRendering, Display, DisplayHelper, DisplayTemplateHelper, Dsl, Dynamic, DynamicReferences, EmbedProviders, Events, Export, FormActionExecution, FormHelper, GemPaths, Generators, GroupedQuery, GroupedQueryHelper, Groups, HashUtils, I18nCheck, I18nPayloadHelper, Import, Kanban, LayoutHelper, LinkThroughHelper, Menu, Metadata, Metrics, ModelFactory, OidcButtonHelper, PageAuthorization, Pages, PathUtils, Permissions, Presenter, RecordAliases, Roles, Routing, SavedFilters, Search, SearchHelper, Sequences, Services, Sort, Tasks, TreeHelper, Types, UrlSafety, UserSnapshot, ViewSlotHelper, ViewSlots, VirtualColumns, VirtualFields, Widgets, Workflow, ZoneResolution Classes: ActionsController, ApplicationController, ApprovalTasksController, ArrayQuery, AssetPipelineError, ConditionError, ConditionEvaluator, ConditionServiceRegistry, Configuration, Current, CustomFieldsController, DevToolbarController, DialogsController, Engine, Error, HealthController, I18nLint, ImpersonatedUser, ImpersonationController, JsonItemWrapper, LandingController, MenuRenderError, MetadataError, MetricsController, ResourcesController, SavedFiltersController, SchemaError, SearchResult, ServiceError, SkillsInstaller, User

Constant Summary collapse

VERSION =
"0.2.0"
RESERVED_ROUTE_SEGMENTS =

Route segments that must not be used as record alias names or slug field values. Derived from config/routes.rb — includes both routing-reserved segments (intercepted by explicit GET routes before /:id) and clarity-reserved segments (would create confusing URLs even if technically routable).

Shared between:

  • ModelFactory::Builder (exclusion validation on slug fields)

  • RecordAliases::Setup / ConfigurationValidator (alias name validation)

%w[
  new
  edit
  saved-filters
  custom-fields
  actions
  batch_actions
  select_options
  inline_create
  inline_create_form
  parse_ql
  filter_fields
  batch_count
  batch_selection
  export_fields
  export_profiles
  import_fields
  import_profiles
  evaluate_conditions
  restore
  permanently_destroy
  reorder
  reparent
  zones
  transitions
  approval_tasks
].freeze

Class Method Summary collapse

Class Method Details

._drain_models_loaded_callbacks!(loader) ⇒ Object

Internal: drains registered callbacks. Called from ‘Engine.load_metadata!` once the model build phase is complete. Callbacks are NOT removed from the list — they fire on every subsequent drain too, so initializer-time registrations survive `LcpRuby.reload!` without re-registration.



499
500
501
# File 'lib/lcp_ruby.rb', line 499

def _drain_models_loaded_callbacks!(loader)
  @models_loaded_callbacks.each { |cb| cb.call(loader) }
end

.booted?Boolean

Returns:

  • (Boolean)


461
462
463
# File 'lib/lcp_ruby.rb', line 461

def booted?
  @booted == true
end

.check_action_text_compat!Object

Boot-time guard for #17. ‘lcp new` runs `rails new –skip-action-text`, so apps that subsequently declare `field: name: foo, type: rich_text` silently render the form input as a plain textarea (no WYSIWYG). The underlying schema is still `text`, so nothing crashes — but the editor is invisible until the host explicitly installs Action Text. Surface the gap once at boot, naming each affected field and giving the exact remediation steps.



623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
# File 'lib/lcp_ruby.rb', line 623

def check_action_text_compat!
  return if Object.const_defined?(:ActionText)

  affected = []
  loader.model_definitions.each_value do |model|
    model.fields.each do |field|
      next unless field.type == "rich_text"
      affected << "#{model.name}.#{field.name}"
    end
  end
  return if affected.empty?

  Rails.logger.warn(<<~MSG) if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
    [LcpRuby] Action Text is not installed but the following fields use type :rich_text:
      #{affected.map { |f| "- #{f}" }.join("\n  ")}
    These fields render as plain textareas — no WYSIWYG editor will appear in forms.

    To enable rich text editing:
      1. Run: bin/rails action_text:install
      2. Run: bin/rails db:migrate
      3. Restart the server.

    If your config/application.rb uses selective requires (e.g. the app was
    bootstrapped with `--skip-action-text`), also add
    `require "action_text/engine"` to the require list before step 1.

    Or change the affected fields to :text to suppress this warning.
  MSG
end

.check_servicesObject



604
605
606
# File 'lib/lcp_ruby.rb', line 604

def check_services
  Services::Checker.new(loader.model_definitions).check
end

.check_services!Object



608
609
610
611
612
613
614
# File 'lib/lcp_ruby.rb', line 608

def check_services!
  result = check_services
  unless result.valid?
    raise ServiceError, "Missing service references:\n#{result.errors.map { |e| "  - #{e}" }.join("\n")}"
  end
  result
end

.configurationObject



565
566
567
# File 'lib/lcp_ruby.rb', line 565

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



569
570
571
# File 'lib/lcp_ruby.rb', line 569

def configure
  yield(configuration)
end

.define_model(name, &block) ⇒ Object



581
582
583
584
585
586
# File 'lib/lcp_ruby.rb', line 581

def define_model(name, &block)
  builder = Dsl::ModelBuilder.new(name)
  builder.instance_eval(&block)
  hash = builder.to_hash
  Metadata::ModelDefinition.from_hash(hash)
end

.define_presenter(name, &block) ⇒ Object



597
598
599
600
601
602
# File 'lib/lcp_ruby.rb', line 597

def define_presenter(name, &block)
  builder = Dsl::PresenterBuilder.new(name)
  builder.instance_eval(&block)
  hash = builder.to_hash
  Metadata::PresenterDefinition.from_hash(hash)
end

.define_type(name, &block) ⇒ Object



588
589
590
591
592
593
594
595
# File 'lib/lcp_ruby.rb', line 588

def define_type(name, &block)
  builder = Dsl::TypeBuilder.new(name)
  builder.instance_eval(&block)
  hash = builder.to_hash
  type_def = Types::TypeDefinition.from_hash(hash)
  Types::TypeRegistry.register(type_def.name, type_def)
  type_def
end

.embed_csp_sourcesObject



653
654
655
# File 'lib/lcp_ruby.rb', line 653

def embed_csp_sources
  configuration.embed_csp_sources
end

.enqueue_job(**args) ⇒ Object

Convenience method for enqueuing background jobs.



685
686
687
# File 'lib/lcp_ruby.rb', line 685

def enqueue_job(**args)
  BackgroundJobs::Enqueue.call(**args)
end

.generator_context?Boolean

Returns true when the process was invoked via ‘rails generate`. Used by Setup modules to downgrade hard errors to warnings so generators can boot the app and create the missing files (chicken-and-egg problem).

Returns:

  • (Boolean)


677
678
679
680
681
# File 'lib/lcp_ruby.rb', line 677

def generator_context?
  defined?(Rails::Command) &&
    $PROGRAM_NAME.end_with?("/rails") &&
    ARGV.first&.match?(/\Ag(enerate)?\z/)
end

.json_column_typeObject



669
670
671
# File 'lib/lcp_ruby.rb', line 669

def json_column_type
  postgresql? ? :jsonb : :json
end

.loaderObject



573
574
575
# File 'lib/lcp_ruby.rb', line 573

def loader
  @loader ||= Metadata::Loader.new(configuration.)
end

.mysql?Boolean

True for MySQL and MariaDB (both report adapter_name “Mysql2” via the mysql2 gem, “Trilogy” via trilogy). Used to pick MySQL-flavoured SQL where it differs from SQLite (e.g. DATE_FORMAT vs strftime).

Returns:

  • (Boolean)


664
665
666
667
# File 'lib/lcp_ruby.rb', line 664

def mysql?
  name = ActiveRecord::Base.connection.adapter_name.downcase
  name.include?("mysql") || name.include?("trilogy")
end

.on_models_loaded(&block) ⇒ Object

Register a callback fired on every ‘Engine.load_metadata!`, after all dynamic models have been built and per-model `on_model_ready` hooks have run. The list is drained inside `Engine.load_metadata!` immediately before `Authorization::RuntimeInvariantValidator` runs, so any host code that registers late-bound scopes in this hook is guaranteed to have executed before AUTH-001 checks `klass.respond_to?(method)`.

**Persistent across reload.** Callbacks registered here are NOT consumed on drain — they re-fire on every subsequent ‘Engine.load_metadata!` call. This means a host registers once in `config/initializers/lcp_ruby.rb` and the registration survives `LcpRuby.reload!` cleanly. Re-firing is what makes the install-generator pattern (host’s ‘Actions::ActionRegistry.discover!` / `Events::HandlerRegistry.discover!`) repopulate registries that `LcpRuby.reset!` cleared.

See docs/design/authorization_hardening.md § “Boot lifecycle: ‘LcpRuby.on_models_loaded`” and docs/design/boot_reload_lifecycle.md § Q7.

Mirrors ‘LcpRuby::Configuration#on_model_ready` (per-model hook) but at the global “every model is now built” level.

Raises:

  • (ArgumentError)


488
489
490
491
492
# File 'lib/lcp_ruby.rb', line 488

def on_models_loaded(&block)
  raise ArgumentError, "on_models_loaded requires a block" unless block_given?

  @models_loaded_callbacks << block
end

.postgresql?Boolean

Returns:

  • (Boolean)


657
658
659
# File 'lib/lcp_ruby.rb', line 657

def postgresql?
  ActiveRecord::Base.connection.adapter_name.downcase.include?("postgresql")
end

.record_error(exception, subsystem:, **context) ⇒ Object

The unified error-recording helper for the platform. ALWAYS prefer this over ‘Rails.logger.error` for any swallowed exception or detected invariant violation that should be observable in production:

- Increments Prometheus counter `lcp_ruby_errors_total{error_class, subsystem}`
- Persists to `lcp_error_logs` with SHA256 fingerprint dedup +
  1-second rate-limit window (no DB write storms)
- Captures request URL/user_id/IP if `error_log_capture_request_context = true`
- Surfaces in the monitoring dashboard (KPI card + recent-errors list)
- Available to host-app subscribers via
  `ActiveSupport::Notifications.subscribe("error.lcp_ruby")`

Canonical 3-line idiom (see CLAUDE.md “Error Handling” and docs/design/monitoring.md:333-345) — raise in dev/test, record in production, return fallback:

rescue SpecificError => e
  raise unless Rails.env.production?
  LcpRuby.record_error(e, subsystem: "data_source", model: model_name)
  fallback_value
end

For invariant detection (not rescue), construct the error and pass it:

unless invariant_holds?
  error = MySubsystemError.new("...")
  raise error unless defined?(Rails) && Rails.env.production?
  LcpRuby.record_error(error, subsystem: "...", **context)
  return safe_fallback
end

Known ‘subsystem` values are listed in docs/design/monitoring.md:239-251. When adding a new subsystem, update that table.

Parameters:

  • exception (Exception)

    the exception to record (may be freshly constructed for invariant-detection cases — ‘backtrace` may be nil, which is handled gracefully)

  • subsystem (String)

    the subsystem that caught the error (e.g., “data_source”, “renderer”, “scope_builder”)

  • context (Hash)

    additional context (model, field, record_id, etc.)



543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
# File 'lib/lcp_ruby.rb', line 543

def record_error(exception, subsystem:, **context)
  payload = {
    exception: exception,
    error_class: exception.class.name,
    message: exception.message,
    stacktrace: exception.backtrace&.first(20) || [],
    subsystem: subsystem.to_s
  }.merge(context)

  # Inject request context when enabled and available
  if configuration.error_log_capture_request_context && defined?(ActionDispatch::Request)
    request = Thread.current[:lcp_ruby_current_request]
    if request
      payload[:request_url] = request.original_url
      payload[:user_id] = Thread.current[:lcp_ruby_current_user_id]
      payload[:ip] = request.remote_ip
    end
  end

  ActiveSupport::Notifications.instrument("error.lcp_ruby", payload)
end

.registryObject



577
578
579
# File 'lib/lcp_ruby.rb', line 577

def registry
  @registry ||= ModelFactory::Registry.new
end

.reset!Object

Full reset — used by tests for hard isolation between runs. Blanks ‘@configuration` (host settings) and `@models_loaded_callbacks` so the next `LcpRuby.configuration` access returns a fresh defaults- only Configuration. Production reload paths (`Engine.reload!`) call the softer `reset_for_reload!` instead, which preserves host settings — Rails initializers fire only once per process, so blanking `@configuration` on every reload would lose everything the host set in `config/initializers/lcp_ruby.rb`. See docs/design/boot_reload_lifecycle.md § Q7.



705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
# File 'lib/lcp_ruby.rb', line 705

def reset!
  @booted = false
  @configuration = nil
  @loader = nil
  @registry = nil
  @models_loaded_callbacks = []
  Authorization::RuntimeInvariantValidator.last_run = nil if defined?(Authorization::RuntimeInvariantValidator)
  Types::TypeRegistry.clear!
  ConditionServiceRegistry.clear!
  Events::HandlerRegistry.clear!
  Actions::ActionRegistry.clear!
  Display::RendererRegistry.clear!
  Authorization::PolicyFactory.clear!
  Services::Registry.clear!
  CustomFields::Registry.clear!
  Roles::Registry.clear!
  Permissions::Registry.clear!
  Groups::Registry.clear!
  Auditing::Registry.clear!
  Auditing::AuditWriter.clear_cache!
  SavedFilters::Registry.clear!
  DataSource::Registry.clear!
  ViewSlots::Registry.clear!
  Pages::Resolver.clear!
  Pages::Registry.clear!
  Widgets::PresenterZoneResolver.reset_cache!
  Workflow::Registry.clear!
  Workflow::AuditRegistry.clear!
  Workflow::AuditWriter.clear_cache!
  Workflow::Approval::Registry.clear!
  BackgroundJobs::Registry.clear!
  BackgroundJobs::Declarative::Registry.clear!
  BatchActions.instance_variable_set(:@background_job_registered, nil)
  Metrics::Subscriber.clear!
  Metrics::CollectorRegistry.clear!
  Metrics::RateLimiter.clear!
  # NOTE: ModelFactory::ManagedTracking is intentionally NOT reset here.
  # The tracking summary represents process-lifetime state ("which AR
  # macros / columns LCP installed on which host class in this process"),
  # not per-boot state. Wiping it would defeat the already_managed?
  # reload guard — the next apply! pass would re-execute belongs_to and
  # stack a duplicate set of callbacks alongside the originals.
  # Call ManagedTracking.reset_all! explicitly from tests that need a
  # clean slate.

  # Remove dynamic constants to avoid "already initialized" warnings
  Dynamic.constants.each do |const|
    Dynamic.send(:remove_const, const)
  end
end

.reset_for_reload!Object

Soft reset used by ‘Engine.reload!`. Mirrors `reset!` for everything that’s metadata-derived (registries, dynamic constants, registries that are fully repopulated by ‘load_metadata!` and the `on_models_loaded` drain) — but preserves state that came from host code in `config/initializers/lcp_ruby.rb`:

  • ‘@configuration` — host’s ‘LcpRuby.configure { … }` block fires only once per Rails process, so blanking it on every reload would lose `metadata_path`, `role_method`, `auth_*`, on_model_ready callbacks, registered embed providers, etc.

  • ‘@models_loaded_callbacks` — host’s ‘LcpRuby.on_models_loaded { … }` block from the install-generator pattern is registered once at boot; the non-consuming drain semantics (see `_drain_models_loaded_callbacks!`) make it re-fire on every reload. Blanking the list here would defeat that.

See docs/design/boot_reload_lifecycle.md § Q7 for the full rationale of why ‘Engine.reload!` cannot use the test-grade `reset!`.



774
775
776
777
778
779
780
# File 'lib/lcp_ruby.rb', line 774

def reset_for_reload!
  preserved_configuration = @configuration
  preserved_callbacks = @models_loaded_callbacks
  reset!
  @configuration = preserved_configuration
  @models_loaded_callbacks = preserved_callbacks
end

.user_roles(user) ⇒ Object

Returns the user’s roles as an array of strings. Centralises the role-resolution pattern used across controllers, helpers, and lib classes.



691
692
693
694
# File 'lib/lcp_ruby.rb', line 691

def user_roles(user)
  return [] unless user
  Array(user.send(configuration.role_method)).map(&:to_s)
end