app/models/ruby_conversations/concerns/message_attributes.rb



# frozen_string_literal: true

module RubyConversations
  module Concerns
    # Handles attribute-related functionality for Message
    module MessageAttributes
      extend ActiveSupport::Concern

      ATTRIBUTE_NAMES = %w[
        id ai_conversation_id request response model_identifier
        tool change_description llm created_at updated_at
      ].freeze

      included do
        # Define core message attributes
        attr_accessor :request, :response, :model_identifier, :change_description

        # Define relationship attributes
        attr_accessor :ai_conversation, :message_prompts, :prompts

        # Common validations
        validates :llm, presence: true
        validates :request, presence: true

        # Override initialize to ensure arrays are initialized
        def initialize(attributes = {})
          @message_prompts = []
          @prompts = []
          super
        end
      end

      def remote_attributes
        base_attributes.compact
      end

      private

      def base_attributes
        ATTRIBUTE_NAMES.each_with_object({}) do |attr_name, attrs|
          attrs[attr_name] = public_send(attr_name)
        end
      end
    end
  end
end