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