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
-
._drain_models_loaded_callbacks!(loader) ⇒ Object
Internal: drains registered callbacks.
- .booted? ⇒ Boolean
-
.check_action_text_compat! ⇒ Object
Boot-time guard for #17.
- .check_services ⇒ Object
- .check_services! ⇒ Object
- .configuration ⇒ Object
- .configure {|configuration| ... } ⇒ Object
- .define_model(name, &block) ⇒ Object
- .define_presenter(name, &block) ⇒ Object
- .define_type(name, &block) ⇒ Object
- .embed_csp_sources ⇒ Object
-
.enqueue_job(**args) ⇒ Object
Convenience method for enqueuing background jobs.
-
.generator_context? ⇒ Boolean
Returns true when the process was invoked via ‘rails generate`.
- .json_column_type ⇒ Object
- .loader ⇒ Object
-
.mysql? ⇒ Boolean
True for MySQL and MariaDB (both report adapter_name “Mysql2” via the mysql2 gem, “Trilogy” via trilogy).
-
.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.
- .postgresql? ⇒ Boolean
-
.record_error(exception, subsystem:, **context) ⇒ Object
The unified error-recording helper for the platform.
- .registry ⇒ Object
-
.reset! ⇒ Object
Full reset — used by tests for hard isolation between runs.
-
.reset_for_reload! ⇒ Object
Soft reset used by ‘Engine.reload!`.
-
.user_roles(user) ⇒ Object
Returns the user’s roles as an array of strings.
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
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_services ⇒ Object
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 |
.configuration ⇒ Object
565 566 567 |
# File 'lib/lcp_ruby.rb', line 565 def configuration @configuration ||= Configuration.new end |
.configure {|configuration| ... } ⇒ Object
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_sources ⇒ Object
653 654 655 |
# File 'lib/lcp_ruby.rb', line 653 def configuration. 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).
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_type ⇒ Object
669 670 671 |
# File 'lib/lcp_ruby.rb', line 669 def json_column_type postgresql? ? :jsonb : :json end |
.loader ⇒ Object
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).
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.
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
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.
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., 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 |
.registry ⇒ Object
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 |