Compare commits
31 Commits
plainprogr
...
master
Author | SHA1 | Date | |
---|---|---|---|
599e82a106 | |||
6eea09d8eb | |||
de414b0ee7 | |||
|
b57fb616cb | ||
|
0ae62f1816 | ||
|
589b5598a4 | ||
|
546fc91cb1 | ||
|
b902d662c6 | ||
|
75822dae4f | ||
|
2288ee6cec | ||
|
1c3d10e407 | ||
|
288bfcc978 | ||
|
3429216331 | ||
|
781f05f707 | ||
|
c2f9bfda27 | ||
|
5a956c67e2 | ||
|
1f43e0d4d8 | ||
|
a04acec0da | ||
|
a0892df6d5 | ||
|
a0ebd468aa | ||
|
3fda46a9a8 | ||
|
97bc810bff | ||
|
fd8063da6d | ||
|
d07e5c55be | ||
|
8b5b23bb45 | ||
|
42cd5a0d51 | ||
|
58825a4f20 | ||
|
41c95e0370 | ||
|
fde35639d8 | ||
|
d4280d3eca | ||
|
9144fab09a |
1
.gitignore
vendored
1
.gitignore
vendored
@ -15,3 +15,4 @@ spec/reports
|
|||||||
test/tmp
|
test/tmp
|
||||||
test/version_tmp
|
test/version_tmp
|
||||||
tmp
|
tmp
|
||||||
|
.idea
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
script: "bundle exec rspec spec"
|
script: "bundle exec rspec spec"
|
||||||
|
|
||||||
language: ruby
|
language: ruby
|
||||||
|
|
||||||
rvm:
|
rvm:
|
||||||
- 1.9.3
|
- 1.9.3
|
||||||
- 2.0.0
|
- 2.0.0
|
||||||
|
8
Guardfile
Normal file
8
Guardfile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# A sample Guardfile
|
||||||
|
# More info at https://github.com/guard/guard#readme
|
||||||
|
|
||||||
|
guard :rspec, cmd: "bundle exec rspec" do
|
||||||
|
watch(%r{^spec/.+_spec\.rb$})
|
||||||
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
||||||
|
watch('spec/spec_helper.rb') { "spec" }
|
||||||
|
end
|
13
README.md
13
README.md
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
[](https://travis-ci.org/thetron/mongoid-enum)
|
Status](https://travis-ci.org/thetron/mongoid-enum.png)](https://travis-ci.org/thetron/mongoid-enum)
|
||||||
|
[](https://codeclimate.com/github/thetron/mongoid-enum)
|
||||||
|
|
||||||
Heavily inspired by [DHH's
|
Heavily inspired by [DHH's
|
||||||
ActiveRecord::Enum](https://github.com/rails/rails/commit/db41eb8a6ea88b854bf5cd11070ea4245e1639c5), this little library is
|
ActiveRecord::Enum](https://github.com/rails/rails/commit/db41eb8a6ea88b854bf5cd11070ea4245e1639c5), this little library is
|
||||||
@ -126,7 +127,7 @@ Sometimes you'll need to store multiple values from your list, this
|
|||||||
couldn't be easier:
|
couldn't be easier:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
enum, :roles => [:basic, :manager, :administrator], :multiple => true
|
enum :roles, [:basic, :manager, :administrator], :multiple => true
|
||||||
|
|
||||||
# ...
|
# ...
|
||||||
|
|
||||||
@ -140,6 +141,14 @@ user.administrator? # => false
|
|||||||
user.roles # => [:basic, :manager]
|
user.roles # => [:basic, :manager]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Since the underlying datatype for storing values is an array, if you
|
||||||
|
need to specify default(s), ensure you use an array:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
enum :roles, [:noob, :author, :editor], :multiple => true, :default => [:author, :editor] # two defaults
|
||||||
|
enum :roles, [:noob, :author, :editor], :multiple => true, :default => [] # no default
|
||||||
|
```
|
||||||
|
|
||||||
## Validations
|
## Validations
|
||||||
|
|
||||||
Validations are baked in by default, and ensure that the value(s) set in
|
Validations are baked in by default, and ensure that the value(s) set in
|
||||||
@ -148,7 +157,7 @@ complex validations, or you just want to throw caution to the wind, you
|
|||||||
can turn them off:
|
can turn them off:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
enum :status => [:up, :down], :validate => false
|
enum :status, [:up, :down], :validate => false
|
||||||
```
|
```
|
||||||
|
|
||||||
# Issues and Feature Requests
|
# Issues and Feature Requests
|
||||||
|
@ -1,42 +1,93 @@
|
|||||||
require "mongoid/enum/version"
|
require "mongoid/enum/version"
|
||||||
require "mongoid/enum/validators/multiple_validator"
|
require "mongoid/enum/validators/multiple_validator"
|
||||||
|
require "mongoid/enum/configuration"
|
||||||
|
|
||||||
module Mongoid
|
module Mongoid
|
||||||
module Enum
|
module Enum
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
|
|
||||||
def enum(name, values, options = {})
|
def enum(name, values, options = {})
|
||||||
field_name = :"_#{name}"
|
field_name = :"#{Mongoid::Enum.configuration.field_name_prefix}#{name}"
|
||||||
|
options = default_options(values).merge(options)
|
||||||
|
|
||||||
|
set_values_constant name, values
|
||||||
|
|
||||||
|
create_field field_name, options
|
||||||
|
|
||||||
|
create_validations field_name, values, options
|
||||||
|
define_value_scopes_and_accessors field_name, values, options
|
||||||
|
define_field_accessor name, field_name, options
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def default_options(values)
|
||||||
|
{
|
||||||
|
:multiple => false,
|
||||||
|
:default => values.first,
|
||||||
|
:required => true,
|
||||||
|
:validate => true
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_values_constant(name, values)
|
||||||
const_name = name.to_s.upcase
|
const_name = name.to_s.upcase
|
||||||
multiple = options[:multiple] || false
|
|
||||||
default = options[:default].nil? && values.first || options[:default]
|
|
||||||
required = options[:required].nil? || options[:required]
|
|
||||||
validate = options[:validate].nil? || options[:validate]
|
|
||||||
|
|
||||||
const_set const_name, values
|
const_set const_name, values
|
||||||
|
end
|
||||||
|
|
||||||
type = multiple && Array || Symbol
|
def create_field(field_name, options)
|
||||||
field field_name, :type => type, :default => default
|
type = options[:multiple] && Array || Symbol
|
||||||
alias_attribute name, field_name
|
field field_name, :type => type, :default => options[:default]
|
||||||
|
end
|
||||||
|
|
||||||
if multiple && validate
|
def create_validations(field_name, values, options)
|
||||||
validates field_name, :'mongoid/enum/validators/multiple' => { :in => values, :allow_nil => !required }
|
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
|
elsif validate
|
||||||
validates field_name, :inclusion => {:in => values}, :allow_nil => !required
|
validates field_name, :inclusion => {:in => values.map(&:to_sym)}, :allow_nil => !options[:required]
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def define_value_scopes_and_accessors(field_name, values, options)
|
||||||
values.each do |value|
|
values.each do |value|
|
||||||
scope value, ->{ where(field_name => value) }
|
scope value, ->{ where(field_name => value) }
|
||||||
|
|
||||||
if multiple
|
if options[:multiple]
|
||||||
class_eval "def #{value}?() self.#{field_name}.include?(:#{value}) end"
|
define_array_accessor(field_name, value)
|
||||||
class_eval "def #{value}!() update_attributes! :#{field_name} => (self.#{field_name} || []) + [:#{value}] end"
|
|
||||||
else
|
else
|
||||||
class_eval "def #{value}?() self.#{field_name} == :#{value} end"
|
define_string_accessor(field_name, value)
|
||||||
class_eval "def #{value}!() update_attributes! :#{field_name} => :#{value} end"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def define_field_accessor(name, field_name, options)
|
||||||
|
if options[:multiple]
|
||||||
|
define_array_field_accessor name, field_name
|
||||||
|
else
|
||||||
|
define_string_field_accessor name, field_name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
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"
|
||||||
|
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"
|
||||||
|
end
|
||||||
|
|
||||||
|
def define_array_accessor(field_name, value)
|
||||||
|
class_eval "def #{value}?() self.#{field_name}.include?(:#{value}) end"
|
||||||
|
class_eval "def #{value}!() update_attributes! :#{field_name} => (self.#{field_name} || []) + [:#{value}] end"
|
||||||
|
end
|
||||||
|
|
||||||
|
def define_string_accessor(field_name, value)
|
||||||
|
class_eval "def #{value}?() self.#{field_name} == :#{value} end"
|
||||||
|
class_eval "def #{value}!() update_attributes! :#{field_name} => :#{value} end"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
19
lib/mongoid/enum/configuration.rb
Normal file
19
lib/mongoid/enum/configuration.rb
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
module Mongoid
|
||||||
|
module Enum
|
||||||
|
class Configuration
|
||||||
|
attr_accessor :field_name_prefix
|
||||||
|
|
||||||
|
def initialize
|
||||||
|
self.field_name_prefix = "_"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.configuration
|
||||||
|
@configuration ||= Configuration.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.configure
|
||||||
|
yield(configuration) if block_given?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,5 +1,5 @@
|
|||||||
module Mongoid
|
module Mongoid
|
||||||
module Enum
|
module Enum
|
||||||
VERSION = "0.1.1"
|
VERSION = "0.4.6"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -6,11 +6,11 @@ require 'mongoid/enum/version'
|
|||||||
Gem::Specification.new do |spec|
|
Gem::Specification.new do |spec|
|
||||||
spec.name = "mongoid-enum"
|
spec.name = "mongoid-enum"
|
||||||
spec.version = Mongoid::Enum::VERSION
|
spec.version = Mongoid::Enum::VERSION
|
||||||
spec.authors = ["Nicholas Bruning"]
|
spec.authors = ["Mike Sutton"]
|
||||||
spec.email = ["nicholas@bruning.com.au"]
|
spec.email = ["tech@wizewerx.com"]
|
||||||
spec.description = %q{Heavily inspired by DDH's ActiveRecord::Enum, this little library is there to help you cut down the cruft in your models and make the world a happier place at the same time.}
|
spec.description = %q{Forked from https://github.com/thetron/mongoid-enum/commits?author=thetron.}
|
||||||
spec.summary = %q{Sweet enum sugar for your Mongoid documents}
|
spec.summary = %q{Sweet enum sugar for your Mongoid documents}
|
||||||
spec.homepage = "https://github.com/thetron/mongoid-enum"
|
spec.homepage = "https://git.wizewerx.tech/foss/mongoid-enum"
|
||||||
spec.license = "MIT"
|
spec.license = "MIT"
|
||||||
|
|
||||||
spec.files = `git ls-files`.split($/)
|
spec.files = `git ls-files`.split($/)
|
||||||
@ -18,12 +18,10 @@ Gem::Specification.new do |spec|
|
|||||||
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
||||||
spec.require_paths = ["lib"]
|
spec.require_paths = ["lib"]
|
||||||
|
|
||||||
spec.add_runtime_dependency "mongoid", "~> 4.0"
|
spec.add_runtime_dependency "mongoid", "~> 8.0"
|
||||||
|
|
||||||
spec.add_development_dependency "bundler", "~> 1.3"
|
spec.add_development_dependency "bundler", "~> 1.3"
|
||||||
spec.add_development_dependency "rake"
|
spec.add_development_dependency "rake"
|
||||||
spec.add_development_dependency "rspec", "~> 2.14"
|
spec.add_development_dependency "rspec", "~> 3.1"
|
||||||
spec.add_development_dependency "guard-rspec", "~> 4.0.3"
|
spec.add_development_dependency "guard-rspec", "~> 4.6.2"
|
||||||
spec.add_development_dependency "database_cleaner", "~> 1.2.0"
|
spec.add_development_dependency "mongoid-rspec", "~> 3.0"
|
||||||
spec.add_development_dependency "mongoid-rspec", "~> 1.5.1"
|
|
||||||
end
|
end
|
||||||
|
11
spec/mongoid/configuration_spec.rb
Normal file
11
spec/mongoid/configuration_spec.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Mongoid::Enum::Configuration do
|
||||||
|
subject { Mongoid::Enum::Configuration.new }
|
||||||
|
|
||||||
|
describe "field_name_prefix" do
|
||||||
|
it "has '_' as default value" do
|
||||||
|
expect(subject.field_name_prefix).to eq "_"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -16,14 +16,14 @@ describe Mongoid::Enum::Validators::MultipleValidator do
|
|||||||
context "and value is nil" do
|
context "and value is nil" do
|
||||||
before(:each) { validator.validate_each(record, attribute, nil) }
|
before(:each) { validator.validate_each(record, attribute, nil) }
|
||||||
it "validates" do
|
it "validates" do
|
||||||
expect(record.errors[attribute].empty?).to be_true
|
expect(record.errors[attribute].empty?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "and value is []" do
|
context "and value is []" do
|
||||||
before(:each) { validator.validate_each(record, attribute, []) }
|
before(:each) { validator.validate_each(record, attribute, []) }
|
||||||
it "validates" do
|
it "validates" do
|
||||||
expect(record.errors[attribute].empty?).to be_true
|
expect(record.errors[attribute].empty?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -32,14 +32,14 @@ describe Mongoid::Enum::Validators::MultipleValidator do
|
|||||||
context "and value is nil" do
|
context "and value is nil" do
|
||||||
before(:each) { validator.validate_each(record, attribute, nil) }
|
before(:each) { validator.validate_each(record, attribute, nil) }
|
||||||
it "won't validate" do
|
it "won't validate" do
|
||||||
expect(record.errors[attribute].any?).to be_true
|
expect(record.errors[attribute].any?).to be true
|
||||||
expect(record.errors[attribute]).to eq ["is not in #{values.join ", "}"]
|
expect(record.errors[attribute]).to eq ["is not in #{values.join ", "}"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context "and value is []" do
|
context "and value is []" do
|
||||||
before(:each) { validator.validate_each(record, attribute, []) }
|
before(:each) { validator.validate_each(record, attribute, []) }
|
||||||
it "won't validate" do
|
it "won't validate" do
|
||||||
expect(record.errors[attribute].any?).to be_true
|
expect(record.errors[attribute].any?).to be true
|
||||||
expect(record.errors[attribute]).to eq ["is not in #{values.join ", "}"]
|
expect(record.errors[attribute]).to eq ["is not in #{values.join ", "}"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -49,7 +49,7 @@ describe Mongoid::Enum::Validators::MultipleValidator do
|
|||||||
let(:allow_nil) { rand(2).zero? }
|
let(:allow_nil) { rand(2).zero? }
|
||||||
before(:each) { validator.validate_each(record, attribute, [values.sample]) }
|
before(:each) { validator.validate_each(record, attribute, [values.sample]) }
|
||||||
it "validates" do
|
it "validates" do
|
||||||
expect(record.errors[attribute].empty?).to be_true
|
expect(record.errors[attribute].empty?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ describe Mongoid::Enum::Validators::MultipleValidator do
|
|||||||
let(:allow_nil) { rand(2).zero? }
|
let(:allow_nil) { rand(2).zero? }
|
||||||
before(:each) { validator.validate_each(record, attribute, [:amet]) }
|
before(:each) { validator.validate_each(record, attribute, [:amet]) }
|
||||||
it "won't validate" do
|
it "won't validate" do
|
||||||
expect(record.errors[attribute].any?).to be_true
|
expect(record.errors[attribute].any?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ describe Mongoid::Enum::Validators::MultipleValidator do
|
|||||||
let(:allow_nil) { rand(2).zero? }
|
let(:allow_nil) { rand(2).zero? }
|
||||||
before(:each) { validator.validate_each(record, attribute, [values.first, values.last]) }
|
before(:each) { validator.validate_each(record, attribute, [values.first, values.last]) }
|
||||||
it "validates" do
|
it "validates" do
|
||||||
expect(record.errors[attribute].empty?).to be_true
|
expect(record.errors[attribute].empty?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ describe Mongoid::Enum::Validators::MultipleValidator do
|
|||||||
let(:allow_nil) { rand(2).zero? }
|
let(:allow_nil) { rand(2).zero? }
|
||||||
before(:each) { validator.validate_each(record, attribute, [values.first, values.last, :amet]) }
|
before(:each) { validator.validate_each(record, attribute, [values.first, values.last, :amet]) }
|
||||||
it "won't validate" do
|
it "won't validate" do
|
||||||
expect(record.errors[attribute].any?).to be_true
|
expect(record.errors[attribute].any?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
require 'mongoid/enum/configuration'
|
||||||
|
|
||||||
class User
|
class User
|
||||||
include Mongoid::Document
|
include Mongoid::Document
|
||||||
@ -21,10 +22,27 @@ describe Mongoid::Enum do
|
|||||||
expect(klass).to have_field(field_name)
|
expect(klass).to have_field(field_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "uses prefix defined in configuration" do
|
||||||
|
old_field_name_prefix = Mongoid::Enum.configuration.field_name_prefix
|
||||||
|
Mongoid::Enum.configure do |config|
|
||||||
|
config.field_name_prefix = "___"
|
||||||
|
end
|
||||||
|
UserWithoutPrefix = Class.new do
|
||||||
|
include Mongoid::Document
|
||||||
|
include Mongoid::Enum
|
||||||
|
|
||||||
|
enum :status, [:awaiting_approval, :approved, :banned]
|
||||||
|
end
|
||||||
|
expect(UserWithoutPrefix).to have_field "___status"
|
||||||
|
Mongoid::Enum.configure do |config|
|
||||||
|
config.field_name_prefix = old_field_name_prefix
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "is aliased" do
|
it "is aliased" do
|
||||||
expect(instance).to respond_to alias_name
|
expect(instance).to respond_to alias_name
|
||||||
expect(instance).to respond_to :"#{alias_name}="
|
expect(instance).to respond_to :"#{alias_name}="
|
||||||
expect(instance).to respond_to :"#{alias_name}?"
|
expect(instance).to respond_to :"#{alias_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "type" do
|
describe "type" do
|
||||||
@ -50,14 +68,42 @@ describe Mongoid::Enum do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "'required' option" do
|
||||||
|
context "when true" do
|
||||||
|
let(:instance) { User.new status: nil }
|
||||||
|
it "is not valid with nil value" do
|
||||||
|
expect(instance).to_not be_valid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when false" do
|
||||||
|
let(:instance) { User.new roles: nil }
|
||||||
|
it "is valid with nil value" do
|
||||||
|
expect(instance).to be_valid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "constant" do
|
describe "constant" do
|
||||||
it "is set to the values" do
|
it "is set to the values" do
|
||||||
expect(klass::STATUS).to eq values
|
expect(klass::STATUS).to eq values
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "accessors"do
|
describe "accessors" do
|
||||||
context "when singular" do
|
context "when singular" do
|
||||||
|
describe "setter" do
|
||||||
|
it "accepts strings" do
|
||||||
|
instance.status = 'banned'
|
||||||
|
expect(instance.status).to eq :banned
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accepts symbols" do
|
||||||
|
instance.status = :banned
|
||||||
|
expect(instance.status).to eq :banned
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "{{value}}!" do
|
describe "{{value}}!" do
|
||||||
it "sets the value" do
|
it "sets the value" do
|
||||||
instance.save
|
instance.save
|
||||||
@ -85,6 +131,33 @@ describe Mongoid::Enum do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "when multiple" do
|
context "when multiple" do
|
||||||
|
describe "setter" do
|
||||||
|
it "accepts strings" do
|
||||||
|
instance.roles = "author"
|
||||||
|
expect(instance.roles).to eq [:author]
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accepts symbols" do
|
||||||
|
instance.roles = :author
|
||||||
|
expect(instance.roles).to eq [:author]
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accepts arrays of strings" do
|
||||||
|
instance.roles = ['author', 'editor']
|
||||||
|
instance.save
|
||||||
|
puts instance.errors.full_messages
|
||||||
|
instance.reload
|
||||||
|
expect(instance.roles).to include(:author)
|
||||||
|
expect(instance.roles).to include(:editor)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "accepts arrays of symbols" do
|
||||||
|
instance.roles = [:author, :editor]
|
||||||
|
expect(instance.roles).to include(:author)
|
||||||
|
expect(instance.roles).to include(:editor)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "{{value}}!" do
|
describe "{{value}}!" do
|
||||||
context "when field is nil" do
|
context "when field is nil" do
|
||||||
it "creates an array containing the value" do
|
it "creates an array containing the value" do
|
||||||
@ -111,15 +184,15 @@ describe Mongoid::Enum do
|
|||||||
instance.save
|
instance.save
|
||||||
instance.author!
|
instance.author!
|
||||||
instance.editor!
|
instance.editor!
|
||||||
expect(instance.editor?).to be_true
|
expect(instance.editor?).to be true
|
||||||
expect(instance.author?).to be_true
|
expect(instance.author?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when {{enum}} does not contain {{value}}" do
|
context "when {{enum}} does not contain {{value}}" do
|
||||||
it "returns false" do
|
it "returns false" do
|
||||||
instance.save
|
instance.save
|
||||||
expect(instance.author?).to be_false
|
expect(instance.author?).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -174,4 +247,21 @@ describe Mongoid::Enum do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".configuration" do
|
||||||
|
it "returns Configuration object" do
|
||||||
|
expect(Mongoid::Enum.configuration)
|
||||||
|
.to be_instance_of Mongoid::Enum::Configuration
|
||||||
|
end
|
||||||
|
it "returns same object when called multiple times" do
|
||||||
|
expect(Mongoid::Enum.configuration).to be Mongoid::Enum.configuration
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe ".configure" do
|
||||||
|
it "yields configuration if block is given" do
|
||||||
|
expect { |b| Mongoid::Enum.configure &b }
|
||||||
|
.to yield_with_args Mongoid::Enum.configuration
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,22 +1,18 @@
|
|||||||
$: << File.expand_path("../../lib", __FILE__)
|
$: << File.expand_path("../../lib", __FILE__)
|
||||||
|
|
||||||
require 'database_cleaner'
|
|
||||||
require 'mongoid'
|
require 'mongoid'
|
||||||
require 'mongoid-rspec'
|
require "mongoid/rspec"
|
||||||
require 'mongoid/enum'
|
require 'mongoid/enum'
|
||||||
|
|
||||||
ENV['MONGOID_ENV'] = "test"
|
ENV['MONGOID_ENV'] = "test"
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.include Mongoid::Matchers
|
config.include Mongoid::Matchers
|
||||||
config.before(:suite) do
|
|
||||||
DatabaseCleaner.strategy = :truncation
|
|
||||||
end
|
|
||||||
|
|
||||||
config.after(:each) do
|
config.before(:each) do
|
||||||
DatabaseCleaner.clean
|
|
||||||
Mongoid.purge!
|
Mongoid.purge!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Mongoid.load!(File.expand_path("../support/mongoid.yml", __FILE__), :test)
|
Mongoid.load!(File.expand_path("../support/mongoid.yml", __FILE__), :test)
|
||||||
|
Mongo::Logger.logger.level = ::Logger::INFO
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
test:
|
test:
|
||||||
sessions:
|
clients:
|
||||||
default:
|
default:
|
||||||
database: mongoid-enum_test
|
database: mongoid-enum_test
|
||||||
hosts:
|
hosts:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user