Sha256: 4adff7c00363e3b69908dc3793d62c4de3998f97aa8b22be86812233354edc08

Contents?: true

Size: 1.29 KB

Versions: 5

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

module ActiveElement
  module Components
    module Util
      # Infers a default display value from any given object using multiple strategies.
      class DefaultDisplayValue
        DEFAULT_FIELDS = %i[display_name email name username].freeze

        def initialize(object:)
          @object = object
        end

        def value
          DEFAULT_FIELDS.each do |field|
            return object.public_send(field) if active_record_value?(field)
            return object[field] if hash_key(field) if hash_value?(field)
          end
        end

        private

        attr_reader :object

        def associated_model
          object.model
        end

        def active_record_value?(field)
          return false unless object.is_a?(ActiveRecord::Base)
          return false unless object.respond_to?(field)
          return false unless object.public_send(field).present?

          true
        end

        def hash_value?(field)
          return false unless object.respond_to?(:[])
          return false unless object[field].present? || object[field.to_s].present?

          true
        end

        def hash_key(field)
          return field if object[field].present?
          return field.to_s if object[field.to_s].present?
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
active_element-0.0.19 lib/active_element/components/util/default_display_value.rb
active_element-0.0.18 lib/active_element/components/util/default_display_value.rb
active_element-0.0.17 lib/active_element/components/util/default_display_value.rb
active_element-0.0.16 lib/active_element/components/util/default_display_value.rb
active_element-0.0.15 lib/active_element/components/util/default_display_value.rb