diff --git a/.travis.yml b/.travis.yml index 429adb4..f2a6215 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ script: "bundle exec rspec spec" - +sudo: false language: ruby - rvm: - 1.9.3 - 2.0.0 @@ -9,6 +8,5 @@ rvm: - 2.1.1 - 2.1.2 - jruby-19mode - services: - mongodb diff --git a/lib/mongoid/enum.rb b/lib/mongoid/enum.rb index 20dc37e..f9e41ac 100644 --- a/lib/mongoid/enum.rb +++ b/lib/mongoid/enum.rb @@ -15,7 +15,7 @@ def enum(name, values, options = {}) create_field field_name, options - create_validations field_name, values, options + create_validations name, field_name, options define_value_scopes_and_accessors field_name, values, options define_field_accessor name, field_name, options end @@ -40,12 +40,11 @@ def create_field(field_name, options) field field_name, :type => type, :default => options[:default] end - def create_validations(field_name, values, options) + def create_validations(name, field_name, options) if options[:multiple] && options[:validate] - validates field_name, :'mongoid/enum/validators/multiple' => { :in => values.map(&:to_sym), :allow_nil => !options[:required] } - #FIXME: Shouldn't this be `elsif options[:validate]` ??? - elsif validate - validates field_name, :inclusion => {:in => values.map(&:to_sym)}, :allow_nil => !options[:required] + validates field_name, :'mongoid/enum/validators/multiple' => { :in => self.const_get(name.to_s.upcase), :allow_nil => !options[:required] } + elsif options[:validate] + validates field_name, :inclusion => {:in => self.const_get(name.to_s.upcase)}, :allow_nil => !options[:required] end end @@ -71,12 +70,12 @@ def define_field_accessor(name, field_name, options) def define_array_field_accessor(name, field_name) class_eval "def #{name}=(vals) self.write_attribute(:#{field_name}, Array(vals).compact.map(&:to_sym)) end" - class_eval "def #{name}() self.read_attribute(:#{field_name}) end" + class_eval "def #{name}() self.send(:#{field_name}).map{ |i| i.try(:to_sym) } end" end def define_string_field_accessor(name, field_name) class_eval "def #{name}=(val) self.write_attribute(:#{field_name}, val && val.to_sym || nil) end" - class_eval "def #{name}() self.read_attribute(:#{field_name}) end" + class_eval "def #{name}() self.send(:#{field_name}) end" end def define_array_accessor(field_name, value) diff --git a/mongoid-enum.gemspec b/mongoid-enum.gemspec index bd9465d..725680e 100644 --- a/mongoid-enum.gemspec +++ b/mongoid-enum.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] - spec.add_runtime_dependency "mongoid", "~> 5.0" + spec.add_runtime_dependency "mongoid" spec.add_development_dependency "bundler", "~> 1.3" spec.add_development_dependency "rake"