Class: Ace::Docs::Molecules::FrontmatterManager

Inherits:
Object
  • Object
show all
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

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

Parameters:

  • document (Document)

    Document to update

  • updates (Hash)

    Fields to update

Returns:

  • (Boolean)

    true if successful



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.message}"
  false
end

.update_documents(documents, updates) ⇒ Integer

Update multiple documents

Parameters:

  • documents (Array<Document>)

    Documents to update

  • updates (Hash)

    Fields to update

Returns:

  • (Integer)

    Number of successfully updated 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