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/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/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/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, 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.1.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
-
.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.
489 490 491 |
# File 'lib/lcp_ruby.rb', line 489 def _drain_models_loaded_callbacks!(loader) @models_loaded_callbacks.each { |cb| cb.call(loader) } end |
.booted? ⇒ Boolean
451 452 453 |
# File 'lib/lcp_ruby.rb', line 451 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.
613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 |
# File 'lib/lcp_ruby.rb', line 613 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
594 595 596 |
# File 'lib/lcp_ruby.rb', line 594 def check_services Services::Checker.new(loader.model_definitions).check end |
.check_services! ⇒ Object
598 599 600 601 602 603 604 |
# File 'lib/lcp_ruby.rb', line 598 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
555 556 557 |
# File 'lib/lcp_ruby.rb', line 555 def configuration @configuration ||= Configuration.new end |
.configure {|configuration| ... } ⇒ Object
559 560 561 |
# File 'lib/lcp_ruby.rb', line 559 def configure yield(configuration) end |
.define_model(name, &block) ⇒ Object
571 572 573 574 575 576 |
# File 'lib/lcp_ruby.rb', line 571 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
587 588 589 590 591 592 |
# File 'lib/lcp_ruby.rb', line 587 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
578 579 580 581 582 583 584 585 |
# File 'lib/lcp_ruby.rb', line 578 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
643 644 645 |
# File 'lib/lcp_ruby.rb', line 643 def configuration. end |
.enqueue_job(**args) ⇒ Object
Convenience method for enqueuing background jobs.
667 668 669 |
# File 'lib/lcp_ruby.rb', line 667 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).
659 660 661 662 663 |
# File 'lib/lcp_ruby.rb', line 659 def generator_context? defined?(Rails::Command) && $PROGRAM_NAME.end_with?("/rails") && ARGV.first&.match?(/\Ag(enerate)?\z/) end |
.json_column_type ⇒ Object
651 652 653 |
# File 'lib/lcp_ruby.rb', line 651 def json_column_type postgresql? ? :jsonb : :json end |
.loader ⇒ Object
563 564 565 |
# File 'lib/lcp_ruby.rb', line 563 def loader @loader ||= Metadata::Loader.new(configuration.) 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.
478 479 480 481 482 |
# File 'lib/lcp_ruby.rb', line 478 def on_models_loaded(&block) raise ArgumentError, "on_models_loaded requires a block" unless block_given? @models_loaded_callbacks << block end |
.postgresql? ⇒ Boolean
647 648 649 |
# File 'lib/lcp_ruby.rb', line 647 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.
533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 |
# File 'lib/lcp_ruby.rb', line 533 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
567 568 569 |
# File 'lib/lcp_ruby.rb', line 567 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.
687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 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 |
# File 'lib/lcp_ruby.rb', line 687 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!`.
756 757 758 759 760 761 762 |
# File 'lib/lcp_ruby.rb', line 756 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.
673 674 675 676 |
# File 'lib/lcp_ruby.rb', line 673 def user_roles(user) return [] unless user Array(user.send(configuration.role_method)).map(&:to_s) end |