Module: Trax::Model::Enum::ClassMethods
- Defined in:
- lib/trax/model/enum.rb
Instance Method Summary collapse
-
#as_enum(enum_name, enum_mapping, options = {}) ⇒ Object
todo: ew need to clean this up.
- #define_scopes_for_trax_enum(enum_name) ⇒ Object
Instance Method Details
#as_enum(enum_name, enum_mapping, options = {}) ⇒ Object
todo: ew need to clean this up
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/trax/model/enum.rb', line 41 def as_enum(enum_name, enum_mapping, = {}) enum_values = enum_mapping.is_a?(Hash) ? enum_mapping.keys : enum_mapping .assert_valid_keys(:prefix, :source, :message, :default, :validate) [:message] ||= "Invalid value selected for #{enum_name}" [:prefix] ||= true [:source] ||= enum_name default_value = .extract!(:default)[:default] if .key?(:default) = { :in => enum_values, :message => .extract!(:message)[:message] } self.validates_inclusion_of(enum_name, ) unless .key?(:validate) && ![:validate] .delete(:validate) if .key?(:validate) define_scopes_for_trax_enum(enum_name) super(enum_name, enum_mapping, ) self.default_value_for(enum_name) { default_value } if default_value end |
#define_scopes_for_trax_enum(enum_name) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/trax/model/enum.rb', line 26 def define_scopes_for_trax_enum(enum_name) scope_method_name = :"by_#{enum_name}" scope_not_method_name = :"by_#{enum_name}_not" self.scope scope_method_name, lambda { |*values| enum_hash = self.__send__("#{enum_name}".pluralize).hash where(enum_name => enum_hash.with_indifferent_access.slice(*values.flatten.compact.uniq).values) } self.scope scope_not_method_name, lambda { |*values| enum_hash = self.__send__("#{enum_name}".pluralize).hash where.not(enum_name => enum_hash.with_indifferent_access.slice(*values.flatten.compact.uniq).values) } end |