module WrapIt::Enums
Adds enums functionality
@author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
Public Class Methods
included(base)
click to toggle source
# File lib/wrap_it/enums.rb, line 16 def self.included(base) base == Base || fail( TypeError, "#{self.class.name} can be included only into WrapIt::Base" ) base.class_eval do extend ClassMethods before_initialize { @enums = {} } before_capture do self.class.collect_derived(:@enums, {}, :merge).each do |name, e| next unless e.key?(:default) && !@enums.key?(name) send("#{name}=", e[:default]) end end end end
Private Class Methods
setter(name, &block)
click to toggle source
# File lib/wrap_it/enums.rb, line 112 def self.setter(name, &block) ->(value) do opts = self.class.collect_derived(:@enums, {}, :merge)[name] v = value if opts[:values].include?(value) v ||= opts[:default] if opts.key?(:default) @enums[name] = v block.nil? || instance_exec(v, &block) if opts.key?(:regexp) html_class.delete(opts[:regexp]) v.nil? || html_class << "#{opts[:html_class_prefix]}#{v}" end end end