Module: RailsAiBridge::Serializers::ProviderDocumentHeader

Defined in:
lib/rails_ai_bridge/serializers/provider_document_header.rb

Overview

Builds shared markdown headers for provider context files (full-mode Markdown output).

Class Method Summary collapse

Class Method Details

.call(context:, document_title:, intro:, layout:) ⇒ String

Renders a document header with title, metadata lines, and intro body.

Parameters:

  • context (Hash)

    must include +:app_name+, +:rails_version+, +:ruby_version+; +:generated_at+ required when +layout+ is +:ai_context+

  • document_title (String)

    text after em dash (e.g. +"AI Context"+, +"Copilot Instructions"+)

  • intro (String)

    one or more paragraphs (no leading blank line)

  • layout (Symbol)

    +:ai_context+ (generator block first) or +:instructions+ (Rails/Ruby line first)

Returns:

  • (String)

Raises:

  • (ArgumentError)

    if +layout+ is unknown



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/rails_ai_bridge/serializers/provider_document_header.rb', line 17

def call(context:, document_title:, intro:, layout:)
  app = context[:app_name]
  rails_v = context[:rails_version]
  ruby_v = context[:ruby_version]
  version = RailsAiBridge::VERSION

  meta_lines =
    case layout
    when :ai_context
      generated = context[:generated_at]
      [
        "> Auto-generated by rails-ai-bridge v#{version}",
        "> Generated: #{generated}",
        "> Rails #{rails_v} | Ruby #{ruby_v}"
      ]
    when :instructions
      [
        "> Rails #{rails_v} | Ruby #{ruby_v}",
        "> Auto-generated by rails-ai-bridge v#{version}"
      ]
    else
      raise ArgumentError, "unknown header layout: #{layout.inspect}"
    end

  <<~MD
    # #{app}#{document_title}

    #{meta_lines.join("\n")}

    #{intro.rstrip}
  MD
end

.rules_banner(context:) ⇒ String

Minimal header for +.cursorrules+ full-mode project rules (no blockquote metadata).

Parameters:

  • context (Hash)

    +:app_name+, +:rails_version+, +:ruby_version+

Returns:

  • (String)


54
55
56
57
58
59
60
# File 'lib/rails_ai_bridge/serializers/provider_document_header.rb', line 54

def rules_banner(context:)
  <<~MD
    # #{context[:app_name]} — Project Rules

    Rails #{context[:rails_version]} | Ruby #{context[:ruby_version]}
  MD
end