Sha256: 57824d1a7cff51adb987d56e7fa1457d8afcbda6a8f235a0c80c20ddf8596e2f

Contents?: true

Size: 1.57 KB

Versions: 2

Compression:

Stored size: 1.57 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Tables
    module Collection
      module Type
        class Enum < Value
          include Helpers::Multiple

          def initialize(multiple: true, **)
            super
          end

          def type
            :enum
          end

          def examples_for(scope, attribute)
            _, model, column = model_and_column_for(scope, attribute)

            raise ArgumentError, "Unknown enum #{column} for #{model}" unless model.defined_enums.has_key?(column)

            keys = model.defined_enums[column].keys

            if attribute.value_before_type_cast.present?
              keys = keys.select { |key| key.include?(attribute.value_before_type_cast.last) }
            end

            keys.map { |key| example(key, describe_key(model, attribute, key)) }
          end

          private

          def cast_value(value)
            value.to_s
          end

          def describe_key(model, attribute, key)
            label = model.human_attribute_name(attribute.name).downcase
            value = model.human_attribute_name("#{attribute.name}.#{key}").downcase

            description = "#{model.model_name.human} #{label} is #{value}"
            description += " (default)" if default?(attribute, key)
            description
          end

          def default?(attribute, value)
            if multiple?
              attribute.original_value&.intersection(cast(value))&.any?
            else
              attribute.default_value.eql?(cast(value))
            end
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
katalyst-tables-3.4.6 lib/katalyst/tables/collection/type/enum.rb
katalyst-tables-3.4.5 lib/katalyst/tables/collection/type/enum.rb