module Sequel::Plugins::Enum::ClassMethods
Public Instance Methods
enum(column, values, opts=OPTS)
click to toggle source
Define instance and dataset methods in this class to treat column as a enum. See Enum documentation for usage.
Calls superclass method
# File lib/sequel/plugins/enum.rb, line 64 def enum(column, values, opts=OPTS) raise Sequel::Error, "enum column must be a symbol" unless column.is_a?(Symbol) raise Sequel::Error, "enum values must be provided as a hash with symbol keys" unless values.is_a?(Hash) && values.all?{|k,| k.is_a?(Symbol)} if prefix = opts[:prefix] prefix = column if prefix == true prefix = "#{prefix}_" end if suffix = opts[:suffix] suffix = column if suffix == true suffix = "_#{suffix}" end values = Hash[values].freeze inverted = values.invert.freeze unless @enum_methods @enum_methods = Module.new include @enum_methods end @enum_methods.module_eval do unless opts[:override_accessors] == false define_method(column) do v = super() inverted.fetch(v, v) end define_method(:"#{column}=") do |v| super(values.fetch(v, v)) end end values.each do |key, value| define_method(:"#{prefix}#{key}#{suffix}!") do self[column] = value nil end define_method(:"#{prefix}#{key}#{suffix}?") do self[column] == value end end end unless opts[:dataset_methods] == false dataset_module do values.each do |key, value| cond = Sequel[column=>value] where :"#{prefix}#{key}#{suffix}", cond where :"#{prefix}not_#{key}#{suffix}", ~cond end end end end