Class: Ace::Docs::Molecules::FrontmatterManager
- Inherits:
-
Object
- Object
- Ace::Docs::Molecules::FrontmatterManager
- Defined in:
- lib/ace/docs/molecules/frontmatter_manager.rb
Overview
Updates document frontmatter fields Now delegates to ace-support-markdown’s DocumentEditor for safe operations
Class Method Summary collapse
- .process_updates(updates) ⇒ Object
- .process_value(value) ⇒ Object
-
.update_document(document, updates) ⇒ Boolean
Update frontmatter fields in a document.
-
.update_documents(documents, updates) ⇒ Integer
Update multiple documents.
Class Method Details
.process_updates(updates) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ace/docs/molecules/frontmatter_manager.rb', line 45 def self.process_updates(updates) processed = {} updates.each do |key, value| # Handle special key mappings (convert to dot notation for DocumentEditor) mapped_key = case key when "last-updated", "last_updated" "ace-docs.last-updated" when "last-checked", "last_checked" "ace-docs.last-checked" when "version" "metadata.version" else key end processed[mapped_key] = process_value(value) end processed end |
.process_value(value) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/ace/docs/molecules/frontmatter_manager.rb', line 67 def self.process_value(value) # Handle special values case value when "today" Date.today.strftime("%Y-%m-%d") when "now" Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ") # ISO 8601 UTC format when Atoms::TimestampParser::DATE_ONLY_PATTERN value # Already a date-only string when Atoms::TimestampParser::ISO8601_UTC_PATTERN value # Already ISO 8601 UTC else value end end |
.update_document(document, updates) ⇒ Boolean
Update frontmatter fields in a document
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/ace/docs/molecules/frontmatter_manager.rb', line 18 def self.update_document(document, updates) return false unless document.path && File.exist?(document.path) # Process updates to handle special values and nested keys processed_updates = process_updates(updates) # Use DocumentEditor for safe, atomic updates with backup editor = Ace::Support::Markdown::Organisms::DocumentEditor.new(document.path) editor.update_frontmatter(processed_updates) result = editor.save!(backup: true, validate_before: false) result[:success] rescue => e warn "Error updating #{document.path}: #{e.}" false end |
.update_documents(documents, updates) ⇒ Integer
Update multiple documents
39 40 41 |
# File 'lib/ace/docs/molecules/frontmatter_manager.rb', line 39 def self.update_documents(documents, updates) documents.count { |doc| update_document(doc, updates) } end |