Class: Woods::Extractors::MailerExtractor
- Inherits:
-
Object
- Object
- Woods::Extractors::MailerExtractor
- Defined in:
- lib/woods/extractors/mailer_extractor.rb
Overview
MailerExtractor handles ActionMailer extraction.
Mailers are important for understanding:
-
What triggers emails (traced via dependencies)
-
What data flows into emails
-
Template associations
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 mailers in the application.
-
#extract_mailer(mailer) ⇒ ExtractedUnit
Extract a single mailer.
-
#initialize ⇒ MailerExtractor
constructor
A new instance of MailerExtractor.
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 ⇒ MailerExtractor
Returns a new instance of MailerExtractor.
29 30 31 32 |
# File 'lib/woods/extractors/mailer_extractor.rb', line 29 def initialize @mailer_base = defined?(ApplicationMailer) ? ApplicationMailer : ActionMailer::Base build_route_helper_map end |
Instance Method Details
#extract_all ⇒ Array<ExtractedUnit>
Extract all mailers in the application
37 38 39 40 41 |
# File 'lib/woods/extractors/mailer_extractor.rb', line 37 def extract_all @mailer_base.descendants.map do |mailer| extract_mailer(mailer) end.compact end |
#extract_mailer(mailer) ⇒ ExtractedUnit
Extract a single mailer
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/woods/extractors/mailer_extractor.rb', line 47 def extract_mailer(mailer) return nil if mailer.name.nil? return nil if mailer == ActionMailer::Base file_path = source_file_for(mailer) unit = ExtractedUnit.new( type: :mailer, identifier: mailer.name, file_path: file_path ) source = file_path && File.exist?(file_path) ? File.read(file_path) : '' unit.namespace = extract_namespace(mailer) unit.source_code = annotate_source(source, mailer) unit. = (mailer, source) unit.dependencies = extract_dependencies(source) # Create chunks for each mail action unit.chunks = build_action_chunks(mailer, source) unit rescue StandardError => e Rails.logger.error("Failed to extract mailer #{mailer.name}: #{e.}") nil end |