module Sequel::Plugins::EnumValues::ClassMethods

Module for class methods

Public Instance Methods

enum_values(field) click to toggle source

Get enum values for specific field @param field [Symbol] name of enum field @return [Array<String>] values of enum @example Get enum values for `status` field of `Item` model

Item.enum_values(:status)
# File lib/sequel/plugins/enum_values.rb, line 56
def enum_values(field)
        if @enum_values_caching && (cached_values = @enum_values_cache[field])
                return cached_values
        end

        field_schema = all_enum_fields[field]
        raise_field_nonexistent(field) if field_schema.nil?

        enum_values = field_schema[:enum_values]
        @enum_values_cache[field] = enum_values if @enum_values_caching
        enum_values
end

Private Instance Methods

all_enum_fields() click to toggle source
# File lib/sequel/plugins/enum_values.rb, line 88
def all_enum_fields
        if @enum_values_caching && defined?(@all_enum_fields)
                return @all_enum_fields
        end
        @all_enum_fields =
                db.schema(table_name).to_h
                        .select { |_field, schema| schema.key?(:enum_values) }
end
define_predicate_method(field, enum_value) click to toggle source
# File lib/sequel/plugins/enum_values.rb, line 82
def define_predicate_method(field, enum_value)
        define_method "#{enum_value}?" do
                public_send(field) == enum_value
        end
end
raise_field_nonexistent(field) click to toggle source
# File lib/sequel/plugins/enum_values.rb, line 97
def raise_field_nonexistent(field)
        raise(
                ArgumentError,
                "'#{table_name}' table does not have '#{field}' column"
        )
end
transform_predicate_methods_to_enum_fields(predicate_methods) click to toggle source
# File lib/sequel/plugins/enum_values.rb, line 71
def transform_predicate_methods_to_enum_fields(predicate_methods)
        case predicate_methods
        when TrueClass
                all_enum_fields.keys
        when FalseClass
                []
        else
                Array(predicate_methods)
        end
end