module NoBrainer::Enum::NoBrainerExtensions
Constants
- InvalidType
Public Class Methods
method_name(value, attr, options)
click to toggle source
# File lib/no_brainer/document/types/enum.rb, line 57 def self.method_name(value, attr, options) [options[:prefix] == true ? attr : options[:prefix], value, options[:suffix] == true ? attr : options[:suffix]].compact.join("_") end
Public Instance Methods
nobrainer_cast_db_to_model(value)
click to toggle source
# File lib/no_brainer/document/types/enum.rb, line 14 def nobrainer_cast_db_to_model(value) Symbol.nobrainer_cast_db_to_model(value) end
nobrainer_cast_user_to_model(value)
click to toggle source
# File lib/no_brainer/document/types/enum.rb, line 10 def nobrainer_cast_user_to_model(value) Symbol.nobrainer_cast_user_to_model(value) end
nobrainer_field_defined(model, attr, options={})
click to toggle source
# File lib/no_brainer/document/types/enum.rb, line 18 def nobrainer_field_defined(model, attr, options={}) NoBrainer::Document::Types.load_type_extensions(Symbol) unless options[:in].present? raise "When using Enum on `#{model}.#{attr}', you must provide the `:in` option to specify values" end unless options[:in].all? { |v| v.is_a?(Symbol) } raise "The `:in` option must specify symbol values" end model.inject_in_layer :enum do extend ActiveSupport::Concern const_set(:ClassMethods, Module.new) unless const_defined?(:ClassMethods) options[:in].each do |value| method = NoBrainer::Enum::NoBrainerExtensions.method_name(value, attr, options) if method_defined?("#{method}?") raise "The method `#{method}' is already taken. You may specify a :prefix or :suffix option" end define_method("#{method}?") { read_attribute(attr) == value } define_method("#{method}!") { write_attribute(attr, value) } const_get(:ClassMethods).__send__(:define_method, "#{method}") { where(attr => value) } end end end
nobrainer_field_undefined(model, attr, options={})
click to toggle source
# File lib/no_brainer/document/types/enum.rb, line 46 def nobrainer_field_undefined(model, attr, options={}) model.inject_in_layer :enum do model.fields[attr][:in].each do |value| method = NoBrainer::Enum::NoBrainerExtensions.method_name(value, attr, model.fields[attr]) remove_method("#{method}?") remove_method("#{method}!") const_get(:ClassMethods).__send__(:remove_method, "#{method}") end end end