Class: RailsAiBridge::Serializers::Providers::DevinRulesSerializer
- Inherits:
-
Object
- Object
- RailsAiBridge::Serializers::Providers::DevinRulesSerializer
- 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
-
#context ⇒ Hash
readonly
Introspection context passed to serializers.
Instance Method Summary collapse
-
#call(output_dir) ⇒ Hash<Symbol, Array<String>>
Writes rule markdown files under
.devin/rules/when content changes. -
#initialize(context) ⇒ DevinRulesSerializer
constructor
A new instance of DevinRulesSerializer.
Constructor Details
#initialize(context) ⇒ DevinRulesSerializer
Returns a new instance of DevinRulesSerializer.
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.
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.
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 49 50 51 52 |
# File 'lib/rails_ai_bridge/serializers/providers/devin_rules_serializer.rb', line 24 def call(output_dir) rules_dir = File.join(output_dir, '.devin', 'rules') FileUtils.mkdir_p(rules_dir) written = [] skipped = [] files = { 'rails-context.md' => render_context_rule, 'rails-mcp-tools.md' => render_mcp_tools_rule } files.each do |filename, content| next unless content # Enforce Devin's 6K limit content = content[0...MAX_CHARS_PER_FILE] if content.length > MAX_CHARS_PER_FILE filepath = File.join(rules_dir, filename) if File.exist?(filepath) && File.read(filepath) == content skipped << filepath else File.write(filepath, content) written << filepath end end { written: written, skipped: skipped } end |