Module: RailsAiBridge::Tools::ModelDetails::NonArModelsAppendix

Defined in:
lib/rails_ai_bridge/tools/model_details/non_ar_models_appendix.rb

Overview

Shared Markdown helpers for appending non-ActiveRecord +app/models+ classes to GetModelDetails output and Claude rules files.

Constant Summary collapse

DEFAULT_TAG =

Fallback tag when a row omits +:tag+.

'POJO/Service'
SECTION_TITLE =

Human-readable subsection title embedded in the generated Markdown heading.

'POJO/Service under app/models'

Class Method Summary collapse

Class Method Details

.append_markdown(section) ⇒ String

Appends a "## Non-ActiveRecord classes (...)" Markdown block when rows exist.

Parameters:

Returns:

  • (String)

    Markdown suffix (empty when there are no rows)



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rails_ai_bridge/tools/model_details/non_ar_models_appendix.rb', line 36

def append_markdown(section)
  rows = entries_from(section)
  return '' if rows.empty?

  lines = ['', "## Non-ActiveRecord classes (#{SECTION_TITLE})", '']
  rows.each do |row|
    name = row[:name] || row['name']
    path = row[:relative_path] || row['relative_path']
    tag = row[:tag] || row['tag'] || DEFAULT_TAG
    lines << "- **[#{tag}]** `#{name}` — `#{path}`"
  end
  lines << ''
  lines.join("\n")
end

.entries_from(section) ⇒ Array<Hash>

Normalizes the +:non_ar_models+ introspector payload into an array of row hashes.

Parameters:

Options Hash (section):

  • :non_ar_models (Array<Hash>)

    rows (String or Symbol keys allowed per row)

  • "non_ar_models" (Array<Hash>)

    same as +:non_ar_models+ when the hash uses string keys (e.g. JSON)

  • :error (String)

    when introspection failed; treated as empty list

  • "error" (String)

    same as +:error+ for string-keyed hashes

Returns:

  • (Array<Hash>)

    rows for append_markdown; each row may include +:name+, +:relative_path+, +:tag+



25
26
27
28
29
30
# File 'lib/rails_ai_bridge/tools/model_details/non_ar_models_appendix.rb', line 25

def entries_from(section)
  return [] unless section.is_a?(Hash)
  return [] if section[:error].present? || section['error'].present?

  Array(section[:non_ar_models] || section['non_ar_models'])
end