Class: Woods::Extractors::ControllerExtractor
- Inherits:
-
Object
- Object
- Woods::Extractors::ControllerExtractor
- Defined in:
- lib/woods/extractors/controller_extractor.rb
Overview
ControllerExtractor handles ActionController extraction with:
-
Route mapping (which HTTP endpoints hit which actions)
-
Before/after action filter chain resolution
-
Per-action chunking for precise retrieval
-
Concern inlining
Controllers are chunked more aggressively than models because queries are often action-specific (“how does the create action work”).
Constant Summary
Constants included from RouteHelperResolver
RouteHelperResolver::IGNORED_HELPER_PREFIXES
Constants included from SharedDependencyScanner
SharedDependencyScanner::FORM_ACTION_HELPER, SharedDependencyScanner::ROUTE_HELPER_PATTERN
Instance Method Summary collapse
-
#extract_all ⇒ Array<ExtractedUnit>
Extract all controllers in the application.
-
#extract_controller(controller) ⇒ ExtractedUnit
Extract a single controller.
-
#initialize ⇒ ControllerExtractor
constructor
A new instance of ControllerExtractor.
Methods included from RouteHelperResolver
#build_route_helper_map, #resolve_route_helper, #safe_rails_application_routes
Methods included from SharedDependencyScanner
#extract_constantize_targets, #scan_common_dependencies, #scan_form_dependencies, #scan_job_dependencies, #scan_mailer_dependencies, #scan_model_dependencies, #scan_navigation_dependencies, #scan_service_dependencies
Methods included from SharedUtilityMethods
#app_source?, #condition_label, #count_loc, #detect_entry_points, #extract_action_filter_actions, #extract_callback_conditions, #extract_class_methods, #extract_class_name, #extract_custom_errors, #extract_initialize_params, #extract_namespace, #extract_parent_class, #extract_public_methods, #resolve_source_location, #skip_file?
Constructor Details
#initialize ⇒ ControllerExtractor
Returns a new instance of ControllerExtractor.
31 32 33 34 |
# File 'lib/woods/extractors/controller_extractor.rb', line 31 def initialize @routes_map = build_routes_map build_route_helper_map end |
Instance Method Details
#extract_all ⇒ Array<ExtractedUnit>
Extract all controllers in the application
39 40 41 42 43 44 45 46 47 |
# File 'lib/woods/extractors/controller_extractor.rb', line 39 def extract_all controllers = ApplicationController.descendants controllers = (controllers + ActionController::API.descendants).uniq if defined?(ActionController::API) controllers.map do |controller| extract_controller(controller) end.compact end |
#extract_controller(controller) ⇒ ExtractedUnit
Extract a single controller
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/woods/extractors/controller_extractor.rb', line 53 def extract_controller(controller) unit = ExtractedUnit.new( type: :controller, identifier: controller.name, file_path: source_file_for(controller) ) source_path = unit.file_path source = source_path && File.exist?(source_path) ? File.read(source_path) : '' unit.namespace = extract_namespace(controller) unit.source_code = build_composite_source(controller, source) unit. = (controller, source) unit.dependencies = extract_dependencies(controller, source) # Controllers benefit from per-action chunks unit.chunks = build_action_chunks(controller, unit) unit rescue StandardError => e Rails.logger.error("[Woods] Failed to extract controller #{controller.name}: #{e.class}: #{e.}") Rails.logger.error("[Woods] #{e.backtrace&.first(5)&.join("\n ")}") nil end |