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