Class: Ace::Review::Molecules::SubjectExtractor
- Inherits:
-
Object
- Object
- Ace::Review::Molecules::SubjectExtractor
- Defined in:
- lib/ace/review/molecules/subject_extractor.rb
Overview
Parses review subjects and returns ace-bundle configuration Delegates actual content extraction to ace-bundle
Config Passthrough API
The primary API returns ace-bundle config hashes that ReviewManager passes directly to ace-bundle via user.context.md:
-
#parse_typed_subject_config - Single typed subject (pr:, diff:, files:, task:)
-
#merge_typed_subject_configs - Multiple subjects merged into one config
This avoids extracting content only to save it to a file and re-read it.
Instance Method Summary collapse
-
#extract(subject_config) ⇒ String
Extract subject from configuration.
-
#initialize(options = {}) ⇒ SubjectExtractor
constructor
A new instance of SubjectExtractor.
-
#merge_typed_subject_configs(subjects) ⇒ Hash?
Merge multiple subjects into unified ace-bundle config Does NOT extract content - returns merged config for direct use with ace-bundle Uses Config.merge() with :coerce_union strategy for consistent merge behavior.
-
#parse_typed_subject_config(input) ⇒ Hash?
Parse typed subject string and return ace-bundle config Does NOT extract content - returns config for direct use with ace-bundle.
Constructor Details
#initialize(options = {}) ⇒ SubjectExtractor
Returns a new instance of SubjectExtractor.
30 31 32 |
# File 'lib/ace/review/molecules/subject_extractor.rb', line 30 def initialize( = {}) @taskflow_timeout = [:taskflow_timeout] || TASKFLOW_TIMEOUT end |
Instance Method Details
#extract(subject_config) ⇒ String
Prefer parse_typed_subject_config or merge_typed_subject_configs for new code
Extract subject from configuration
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/ace/review/molecules/subject_extractor.rb', line 38 def extract(subject_config) return "" unless subject_config case subject_config when String extract_from_string(subject_config) when Hash extract_from_hash(subject_config) else "" end end |
#merge_typed_subject_configs(subjects) ⇒ Hash?
Merge multiple subjects into unified ace-bundle config Does NOT extract content - returns merged config for direct use with ace-bundle Uses Config.merge() with :coerce_union strategy for consistent merge behavior
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/ace/review/molecules/subject_extractor.rb', line 66 def merge_typed_subject_configs(subjects) return nil unless subjects.is_a?(Array) && subjects.any? # Use Config objects with :coerce_union strategy to progressively merge subjects # This enables future per-key merge strategies via _merge directive initial_config = Ace::Support::Config::Models::Config.new({}, merge_strategy: :coerce_union) merged_config = subjects.reduce(initial_config) do |acc, subject| config_hash = resolve_single_subject(subject) acc.merge(config_hash) end merged_config.empty? ? nil : merged_config.to_h end |
#parse_typed_subject_config(input) ⇒ Hash?
Parse typed subject string and return ace-bundle config Does NOT extract content - returns config for direct use with ace-bundle
55 56 57 58 59 |
# File 'lib/ace/review/molecules/subject_extractor.rb', line 55 def parse_typed_subject_config(input) return nil unless input.is_a?(String) parse_typed_subject(input) end |