Sha256: 8c22cabd030181a49a54c1771cfa8f9c5cb87ae9817635962dd875652d2ccbfe

Contents?: true

Size: 922 Bytes

Versions: 1

Compression:

Stored size: 922 Bytes

Contents

# frozen_string_literal: true

module FoxTail::Concerns::Placeholderable
  extend ActiveSupport::Concern

  included do
    has_option :placeholder
  end

  def placeholder?
    !!placeholder.presence
  end

  def before_render
    super

    html_attributes[:placeholder] = retrieve_placeholder if placeholder?
  end

  protected

  def retrieve_placeholder
    return placeholder if placeholder.is_a? String
    return nil unless object_name? && method_name?

    value = placeholder unless placeholder.is_a? TrueClass
    placeholder_translator(value: value).translate || default_placeholder
  end

  def default_placeholder
    object = convert_to_model self.object
    return object.class.human_attribute_name(method_name) if object.class.respond_to?(:human_attribute_name)

    method_name&.humanize
  end

  def placeholder_translator(value: nil)
    translator value: value, scope: "helpers.placeholder"
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fox_tail-0.1.0 app/components/fox_tail/concerns/placeholderable.rb