Class: Ace::Review::Molecules::FeedbackFileReader
- Inherits:
-
Object
- Object
- Ace::Review::Molecules::FeedbackFileReader
- Defined in:
- lib/ace/review/molecules/feedback_file_reader.rb
Overview
Reads feedback files from disk and parses them into FeedbackItem instances.
Handles YAML frontmatter parsing and markdown section extraction. Returns error hashes for malformed files rather than raising exceptions.
Constant Summary collapse
- FRONTMATTER_PATTERN =
YAML frontmatter pattern: content between — markers at start of file
/\A---\n(.*?)\n---\n/m- SECTION_PATTERN =
Section header pattern: ## Section Name
/^## (\w+)\n/
Instance Method Summary collapse
-
#read(file_path) ⇒ Hash
Read a single feedback file.
-
#read_all(directory) ⇒ Array<Models::FeedbackItem>
Read all .s.md files in a directory.
-
#read_by_status(directory, status) ⇒ Array<Models::FeedbackItem>
Read feedback files filtered by status.
Instance Method Details
#read(file_path) ⇒ Hash
Read a single feedback file
35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ace/review/molecules/feedback_file_reader.rb', line 35 def read(file_path) validate_file_path(file_path) content = File.read(file_path) parse_content(content, file_path) rescue Errno::ENOENT {success: false, error: "File not found: #{file_path}"} rescue Errno::EACCES {success: false, error: "Permission denied: #{file_path}"} rescue ArgumentError => e {success: false, error: e.} rescue SystemCallError, IOError => e {success: false, error: "Failed to read file: #{e.}"} end |
#read_all(directory) ⇒ Array<Models::FeedbackItem>
Read all .s.md files in a directory
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ace/review/molecules/feedback_file_reader.rb', line 54 def read_all(directory) return [] unless Dir.exist?(directory) files = Dir.glob(File.join(directory, "*.s.md")) items = [] files.each do |file_path| result = read(file_path) items << result[:feedback_item] if result[:success] end items end |
#read_by_status(directory, status) ⇒ Array<Models::FeedbackItem>
Read feedback files filtered by status
73 74 75 |
# File 'lib/ace/review/molecules/feedback_file_reader.rb', line 73 def read_by_status(directory, status) read_all(directory).select { |item| item.status == status } end |