Sha256: 427681389d9fd21b46b6fe8f4b216cfc062fe138cbcfda4b6e8ed9211197859c

Contents?: true

Size: 1.44 KB

Versions: 10

Compression:

Stored size: 1.44 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
          if object.respond_to?(:default_display_attribute)
            return object.public_send(object.default_display_attribute)
          end

          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

10 entries across 10 versions & 1 rubygems

Version Path
active_element-0.0.31 lib/active_element/components/util/default_display_value.rb
active_element-0.0.30 lib/active_element/components/util/default_display_value.rb
active_element-0.0.29 lib/active_element/components/util/default_display_value.rb
active_element-0.0.28 lib/active_element/components/util/default_display_value.rb
active_element-0.0.27 lib/active_element/components/util/default_display_value.rb
active_element-0.0.26 lib/active_element/components/util/default_display_value.rb
active_element-0.0.24 lib/active_element/components/util/default_display_value.rb
active_element-0.0.23 lib/active_element/components/util/default_display_value.rb
active_element-0.0.22 lib/active_element/components/util/default_display_value.rb
active_element-0.0.21 lib/active_element/components/util/default_display_value.rb