Module: Sequel::Plugins::Enum::ClassMethods
- Defined in:
- lib/sequel/plugins/enum.rb
Instance Method Summary collapse
- 
  
    
      #enum(column, values, opts = OPTS)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Define instance and dataset methods in this class to treat column as a enum. 
Instance Method Details
#enum(column, values, opts = OPTS) ⇒ Object
Define instance and dataset methods in this class to treat column as a enum. See Enum documentation for usage.
| 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | # File 'lib/sequel/plugins/enum.rb', line 65 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 = Sequel.set_temp_name(Module.new){"#{name}::@enum_methods"} 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 |