app/models/ruby_conversations/message_input.rb
# frozen_string_literal: true require 'active_model' module RubyConversations # Represents an input value for a message prompt class MessageInput include ActiveModel::Model # Define attributes attr_accessor :id, :message_prompt_id, :placeholder_name, :value, :created_at, :updated_at # Validations validates :placeholder_name, presence: true validate :value_not_nil # Association-like methods def message_prompt=(prompt) @message_prompt = prompt @message_prompt_id = prompt&.id end attr_reader :message_prompt # Scopes def self.ordered all.sort_by(&:placeholder_name) end def self.all @all ||= [] end # Attributes method for serialization/logging def attributes base_attributes end # Method for API serialization def attributes_for_api { id: id, placeholder_name: placeholder_name, value: value }.compact end private def value_not_nil errors.add(:value, "can't be blank") if value.nil? end def base_attributes { 'id' => id, 'message_prompt_id' => message_prompt_id, 'placeholder_name' => placeholder_name, 'value' => value, 'created_at' => created_at, 'updated_at' => updated_at } end end # Alias for compatibility with Zeitwerk AIMessageInput = MessageInput end