Class: RailsAiBridge::Serializers::Providers::DevinRulesSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_ai_bridge/serializers/providers/devin_rules_serializer.rb

Overview

Generates .devin/rules/*.md files for Devin rule discovery. Each file is hard-capped at MAX_CHARS_PER_FILE characters (under Devin's 6K limit).

Constant Summary collapse

MAX_CHARS_PER_FILE =

Per-file character cap before truncation.

5_800

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context) ⇒ DevinRulesSerializer

Returns a new instance of DevinRulesSerializer.

Parameters:



16
17
18
# File 'lib/rails_ai_bridge/serializers/providers/devin_rules_serializer.rb', line 16

def initialize(context)
  @context = context
end

Instance Attribute Details

#context ⇒ Hash (readonly)

Returns Introspection context passed to serializers.

Returns:

  • (Hash) —

    Introspection context passed to serializers.



13
14
15
# File 'lib/rails_ai_bridge/serializers/providers/devin_rules_serializer.rb', line 13

def context
  @context
end

Instance Method Details

#call(output_dir) ⇒ Hash<Symbol, Array<String>>

Writes rule markdown files under .devin/rules/ when content changes.

Parameters:

  • output_dir (String) —

    Root directory (typically the Rails app root) where .devin/rules is created.

Returns:

  • (Hash<Symbol, Array<String>>) —

    :written and :skipped arrays of absolute file paths.



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rails_ai_bridge/serializers/providers/devin_rules_serializer.rb', line 24

def call(output_dir)
  files = {
    'rails-context.md' => render_context_rule,
    'rails-mcp-tools.md' => render_mcp_tools_rule
  }

  # Enforce Devin's 6K limit
  files.transform_values! { |content| content && content[0...MAX_CHARS_PER_FILE] }

  RuleFileWriter.new(File.join(output_dir, '.devin', 'rules')).call(files)
end