Sha256: 2a83b50ff39039e780a27aaf08ee61ebba8498c05f09a27f23c28b8d0edadc3d

Contents?: true

Size: 1.25 KB

Versions: 4

Compression:

Stored size: 1.25 KB

Contents

module FlexibleEnum
  class IdentityConfigurator < AbstractConfigurator
    def apply
      configurator = self

      add_instance_method("#{attribute_name}_details") do
        value = send(configurator.attribute_name)
        configurator.details_for(value)
      end

      add_instance_method("#{attribute_name}_name") do
        value = send(configurator.attribute_name)
        configurator.name_for(value)
      end

      add_class_method("human_#{attribute_name}") do |value|
        configurator.human_name_for(value)
      end

      add_instance_method("human_#{attribute_name}") do
        value = send(configurator.attribute_name)
        configurator.human_name_for(value)
      end
    end

    def name_for(value)
      if value
        element_info(value).first.to_s
      else
        nil
      end
    end

    def details_for(value)
      if value
        element_info(value).try(:last)
      else
        nil
      end
    end

    def human_name_for(value)
      if value
        element_name, element_config = element_info(value)
        element_config[:human_name] || element_name.to_s.humanize
      else
        nil
      end
    end

    private

    def element_info(value)
      elements.select{|e,c| c[:value] == value }.first
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
flexible_enum-0.4.2 lib/flexible_enum/identity_configurator.rb
flexible_enum-0.4.1 lib/flexible_enum/identity_configurator.rb
flexible_enum-0.4.0 lib/flexible_enum/identity_configurator.rb
flexible_enum-0.3.0 lib/flexible_enum/identity_configurator.rb