Class: RailsAiBridge::Services::ContextGenerationService

Inherits:
RailsAiBridge::Service show all
Defined in:
lib/rails_ai_bridge/services/context_generation_service.rb

Overview

Application service for generating context files from introspection data.

Delegates to a serializer (default RailsAiBridge::Serializers::ContextFileSerializer) and normalizes successful results to a stable data shape: { written: Array, skipped: Array }, even when the serializer returns a partial hash, a non-hash, or nil. Failures are returned as a failed RailsAiBridge::Service::Result rather than raised.

Examples:

Generate all context files

result = Services::ContextGenerationService.call(introspection_data)
if result.success?
  puts "Generated #{result.data[:written].count} files"
end

Generate specific format

result = Services::ContextGenerationService.call(introspection_data, format: :claude)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context_data, serializer_class: Serializers::ContextFileSerializer, format: :all) ⇒ ContextGenerationService

Returns a new instance of ContextGenerationService.

Parameters:

  • context_data (Hash)

    Introspection data to serialize

  • serializer_class (Class) (defaults to: Serializers::ContextFileSerializer)

    Serializer class (see call)

  • format (Symbol) (defaults to: :all)

    Output format passed to the serializer



36
37
38
39
40
41
# File 'lib/rails_ai_bridge/services/context_generation_service.rb', line 36

def initialize(context_data, serializer_class: Serializers::ContextFileSerializer, format: :all)
  super()
  @context_data = context_data
  @serializer_class = serializer_class
  @format = format
end

Class Method Details

.call(context_data, format: :all, serializer_class: Serializers::ContextFileSerializer) ⇒ RailsAiBridge::Service::Result

Class-level entry point with explicit serializer and format.

Parameters:

  • context_data (Hash)

    Introspection data to pass to the serializer

  • format (Symbol) (defaults to: :all)

    Output format (e.g. :all, :claude, :cursor)

  • serializer_class (Class) (defaults to: Serializers::ContextFileSerializer)

    Serializer class; must respond to #new(context_data, format:) and instances must respond to #call

Returns:

  • (RailsAiBridge::Service::Result)

    On success, data is { written: Array, skipped: Array }; on StandardError, success? is false and errors contains the message



29
30
31
# File 'lib/rails_ai_bridge/services/context_generation_service.rb', line 29

def self.call(context_data, format: :all, serializer_class: Serializers::ContextFileSerializer)
  new(context_data, serializer_class: serializer_class, format: format).call
end

Instance Method Details

#callRailsAiBridge::Service::Result

Runs the serializer and wraps the outcome in a RailsAiBridge::Service::Result.

Successful data always uses symbol keys :written and :skipped with array values, derived only from symbol keys on a Hash return value from the serializer.

Returns:



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rails_ai_bridge/services/context_generation_service.rb', line 49

def call
  serializer = @serializer_class.new(@context_data, format: @format)
  serialization_result = serializer.call

  normalized = {
    written: Array(serialization_result.is_a?(Hash) ? serialization_result[:written] : nil),
    skipped: Array(serialization_result.is_a?(Hash) ? serialization_result[:skipped] : nil)
  }

  Service::Result.new(true, data: normalized)
rescue StandardError => error
  Service::Result.new(false, errors: [error.message])
end