lib/view_model/record/attribute_data.rb



# frozen_string_literal: true

class ViewModel::Record::AttributeData
  attr_reader :name, :model_attr_name, :attribute_viewmodel, :attribute_serializer

  def initialize(name:,
                 model_attr_name:,
                 attribute_viewmodel:,
                 attribute_serializer:,
                 array:,
                 read_only:,
                 write_once:)
    @name                 = name
    @model_attr_name      = model_attr_name
    @attribute_viewmodel  = attribute_viewmodel
    @attribute_serializer = attribute_serializer
    @array                = array
    @read_only            = read_only
    @write_once           = write_once
  end

  def association?
    false
  end

  def array?
    @array
  end

  def read_only?
    @read_only
  end

  def write_once?
    @write_once
  end

  def using_serializer?
    !@attribute_serializer.nil?
  end

  def using_viewmodel?
    !@attribute_viewmodel.nil?
  end

  def map_value(value)
    if array?
      value.map { |v| yield(v) }
    else
      yield(value)
    end
  end
end