Class: RailsAiBridge::Serializers::Providers::Factory

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

Overview

Maps format symbols to serializer instances without hardcoded case/if dispatch.

Defined Under Namespace

Classes: NullSplitRulesStrategy, NullStrategy

Constant Summary collapse

REGISTRY =
{
  json: ->(ctx) { JsonSerializer.new(ctx) },
  claude: ->(ctx) { Providers::ClaudeSerializer.new(ctx) },
  codex: ->(ctx) { Providers::CodexSerializer.new(ctx) },
  cursor: ->(ctx) { Providers::RulesSerializer.new(ctx) },
  windsurf: ->(ctx) { Providers::WindsurfSerializer.new(ctx) },
  gemini: ->(ctx) { Providers::GeminiSerializer.new(ctx) },
  copilot: ->(ctx) { Providers::CopilotSerializer.new(ctx) }
}.freeze
SPLIT_REGISTRY =
{
  claude: ->(ctx) { Providers::ClaudeRulesSerializer.new(ctx) },
  codex: ->(ctx) { Providers::CodexSupportSerializer.new(ctx) },
  cursor: ->(ctx) { Providers::CursorRulesSerializer.new(ctx) },
  windsurf: ->(ctx) { Providers::WindsurfRulesSerializer.new(ctx) },
  copilot: ->(ctx) { Providers::CopilotInstructionsSerializer.new(ctx) }
}.freeze

Class Method Summary collapse

Class Method Details

.for(fmt, context) ⇒ #call

Returns Serializer object for the main context file.

Parameters:

  • fmt (Symbol)

    Format key (e.g. :claude, :cursor).

  • context (Hash)

    Introspection hash.

Returns:

  • (#call)

    Serializer object for the main context file.



42
43
44
# File 'lib/rails_ai_bridge/serializers/providers/factory.rb', line 42

def self.for(fmt, context)
  REGISTRY.fetch(fmt) { ->(ctx) { NullStrategy.new(ctx) } }.call(context)
end

.split_rules_for(fmt, context) ⇒ #call

Returns Split-rules serializer, or NullSplitRulesStrategy when none exists.

Parameters:

  • fmt (Symbol)

    Format key.

  • context (Hash)

    Introspection hash.

Returns:



49
50
51
# File 'lib/rails_ai_bridge/serializers/providers/factory.rb', line 49

def self.split_rules_for(fmt, context)
  SPLIT_REGISTRY.fetch(fmt) { ->(_ctx) { NullSplitRulesStrategy.new } }.call(context)
end