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