mongoid_auto_increment 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +21 -18
- data/Gemfile +2 -2
- data/README.rdoc +11 -5
- data/Rakefile +19 -21
- data/VERSION +1 -1
- data/lib/mongoid_auto_increment.rb +3 -3
- data/lib/mongoid_auto_increment/incrementor.rb +36 -18
- data/mongoid_auto_increment.gemspec +42 -40
- data/spec/models/ingredient.rb +12 -0
- data/spec/models/invoice.rb +1 -2
- data/spec/models/order.rb +1 -1
- data/spec/models/post.rb +1 -1
- data/spec/models/recipe.rb +11 -0
- data/spec/mongoid_auto_increment_spec.rb +75 -19
- data/spec/spec_helper.rb +11 -11
- metadata +25 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77dd586502e69cdc067f0f2fdc5da493e35eacd3
|
4
|
+
data.tar.gz: 5f0df34d657c6c41bf7cebfd167f44ffe428f801
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e26e7739728adb0c52754fd7b7b35332f1d3e232935c39219d0fe6b95638d22615e09585102b032eb3467aa531404eac49636c8b5c0c4fda1a6f663a05684fe5
|
7
|
+
data.tar.gz: e690b7afaa740c79d8efa64eaf46761031d8eaa6977a33126c24292043f1ee0e6692cffbaa419f20ef077210d9144ee4f4b35c7ca0d07cb6b6d2f3bbe2458ca7
|
data/.travis.yml
CHANGED
@@ -5,24 +5,27 @@ language: ruby
|
|
5
5
|
|
6
6
|
cache: bundler
|
7
7
|
|
8
|
-
rvm:
|
9
|
-
- 2.
|
10
|
-
- 2.
|
11
|
-
- 2.
|
12
|
-
-
|
8
|
+
rvm:
|
9
|
+
- 2.3
|
10
|
+
- 2.2
|
11
|
+
- 2.1.1
|
12
|
+
- 2.0.0
|
13
13
|
|
14
|
-
env:
|
15
|
-
- MONGOID_VERSION=2
|
16
|
-
- MONGOID_VERSION=3
|
17
|
-
- MONGOID_VERSION=4
|
18
|
-
- MONGOID_VERSION=5
|
19
|
-
- MONGOID_VERSION=6
|
14
|
+
env:
|
15
|
+
- MONGOID_VERSION=2
|
16
|
+
- MONGOID_VERSION=3
|
17
|
+
- MONGOID_VERSION=4
|
18
|
+
- MONGOID_VERSION=5
|
19
|
+
- MONGOID_VERSION=6
|
20
|
+
- MONGOID_VERSION=7
|
20
21
|
|
21
22
|
matrix:
|
22
|
-
exclude:
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
exclude:
|
24
|
+
- rvm: 2.0.0
|
25
|
+
env: MONGOID_VERSION=6
|
26
|
+
- rvm: 2.1.1
|
27
|
+
env: MONGOID_VERSION=6
|
28
|
+
- rvm: 2.0.0
|
29
|
+
env: MONGOID_VERSION=7
|
30
|
+
- rvm: 2.1.1
|
31
|
+
env: MONGOID_VERSION=7
|
data/Gemfile
CHANGED
@@ -8,11 +8,11 @@ gem 'mongoid', '>= 2.0'
|
|
8
8
|
# Include everything needed to run rake, tests, features, etc.
|
9
9
|
group :development do
|
10
10
|
gem 'bundler'
|
11
|
+
gem 'database_cleaner', '>= 0.8.0'
|
11
12
|
gem 'jeweler', '~> 2.1.1'
|
12
|
-
gem 'rake'
|
13
13
|
gem 'rack', '~> 1.6.4'
|
14
|
+
gem 'rake'
|
14
15
|
gem 'rdoc'
|
15
16
|
gem 'rspec', '>= 2.0.0'
|
16
17
|
gem 'simplecov', '>= 0.4.0', require: false
|
17
|
-
gem 'database_cleaner', '>= 0.8.0'
|
18
18
|
end
|
data/README.rdoc
CHANGED
@@ -4,6 +4,7 @@ Add SQL like auto-incrementing fields to your Mongoid documents.
|
|
4
4
|
This gem is inspired by http://ihswebdesign.com/blog/autoincrement-in-mongodb-with-ruby/ and the mongomapper_id2[https://github.com/phstc/mongomapper_id2] gem.
|
5
5
|
|
6
6
|
{<img src="https://secure.travis-ci.org/proton/mongoid_auto_increment.png" />}[http://travis-ci.org/proton/mongoid_auto_increment]
|
7
|
+
{<img src="https://www.codetriage.com/proton/mongoid_auto_increment/badges/users.svg" />}[https://www.codetriage.com/proton/mongoid_auto_increment]
|
7
8
|
|
8
9
|
== Installation
|
9
10
|
|
@@ -31,17 +32,22 @@ You can add more than one auto-incremented field per model.
|
|
31
32
|
|
32
33
|
=== Options
|
33
34
|
|
34
|
-
auto_increment :sequence, :
|
35
|
+
auto_increment :sequence, collection: :some_collection
|
35
36
|
|
36
37
|
<tt>mongoid_auto_inc</tt> keeps track of the current number in the sequence by creating a separate document mongoDB to query and update. By default <tt>auto_increment</tt> will save this document to a mongoDB collection called <tt>sequences</tt>. If you wish to save to a different collection use the <tt>:collection</tt> option to specify its name.
|
37
38
|
|
38
|
-
auto_increment :sequence, :
|
39
|
+
auto_increment :sequence, step: 5
|
39
40
|
|
40
41
|
If desired, you can override the <tt>:step</tt>, or increment amount (default is 1).
|
41
42
|
|
42
|
-
auto_increment :sequence, :
|
43
|
+
auto_increment :sequence, seed: 3333
|
43
44
|
|
44
|
-
Use the <tt>:seed</tt> option to set the initial value of the auto-incremented field. The first number assigned from the sequence will be the next number after the seed value (including the step - so for <tt
|
45
|
+
Use the <tt>:seed</tt> option to set the initial value of the auto-incremented field. The first number assigned from the sequence will be the next number after the seed value (including the step - so for <tt>seed: 1000, step: 5</tt>, first value will be 1005).
|
46
|
+
|
47
|
+
auto_increment :sequence, scope: :some_field_or_relation
|
48
|
+
auto_increment :sequence, scope: [ :some_field_or_relation, :another_field_or_relation ]
|
49
|
+
|
50
|
+
Use the <tt>:scope</tt> option to scope an auto-incremented field to a query. Similar to Mongoid, the scope may contain one or many fields or relations. Each unique scope will result in it's own stream of incremented values.
|
45
51
|
|
46
52
|
== Contributing to Mongoid::AutoIncrement
|
47
53
|
|
@@ -61,7 +67,7 @@ Use the <tt>:seed</tt> option to set the initial value of the auto-incremented f
|
|
61
67
|
|
62
68
|
== Copyright
|
63
69
|
|
64
|
-
(c) 2011 Peter Savichev (proton)
|
70
|
+
(c) 2011-2018 Peter Savichev (proton)
|
65
71
|
(c) 2010-2011 Jeff Smith
|
66
72
|
|
67
73
|
See LICENSE.txt for further details.
|
data/Rakefile
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
require 'rake'
|
5
3
|
require 'bundler'
|
@@ -8,21 +6,21 @@ Bundler::GemHelper.install_tasks
|
|
8
6
|
begin
|
9
7
|
Bundler.setup(:default, :development)
|
10
8
|
rescue Bundler::BundlerError => e
|
11
|
-
|
12
|
-
|
9
|
+
warn e.message
|
10
|
+
warn 'Run `bundle install` to install missing gems'
|
13
11
|
exit e.status_code
|
14
12
|
end
|
15
13
|
|
16
14
|
require 'jeweler'
|
17
15
|
Jeweler::Tasks.new do |gem|
|
18
16
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
19
|
-
gem.name =
|
20
|
-
gem.homepage =
|
21
|
-
gem.license =
|
22
|
-
gem.summary =
|
23
|
-
gem.description =
|
24
|
-
gem.email =
|
25
|
-
gem.authors = [
|
17
|
+
gem.name = 'mongoid_auto_increment'
|
18
|
+
gem.homepage = 'http://github.com/proton/mongoid_auto_increment'
|
19
|
+
gem.license = 'MIT'
|
20
|
+
gem.summary = 'Auto-incrementing fields for Mongoid documents'
|
21
|
+
gem.description = 'Add SQL like auto-incrementing fields to your Mongoid documents.'
|
22
|
+
gem.email = 'psavichev@gmail.com'
|
23
|
+
gem.authors = ['Peter Savichev (proton)']
|
26
24
|
# dependencies defined in Gemfile
|
27
25
|
end
|
28
26
|
Jeweler::RubygemsDotOrgTasks.new
|
@@ -33,11 +31,11 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
33
31
|
spec.pattern = 'spec/**/*_spec.rb'
|
34
32
|
end
|
35
33
|
|
36
|
-
task :
|
34
|
+
task default: :spec
|
37
35
|
|
38
36
|
require 'rdoc/task'
|
39
37
|
RDoc::Task.new do |rdoc|
|
40
|
-
version = File.exist?('VERSION') ? File.read('VERSION') :
|
38
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
41
39
|
|
42
40
|
rdoc.rdoc_dir = 'rdoc'
|
43
41
|
rdoc.title = "mongoid_auto_increment #{version}"
|
@@ -45,15 +43,15 @@ RDoc::Task.new do |rdoc|
|
|
45
43
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
46
44
|
end
|
47
45
|
|
48
|
-
desc
|
46
|
+
desc 'Build gem'
|
49
47
|
task :build do
|
50
|
-
|
51
|
-
system
|
52
|
-
|
53
|
-
system
|
48
|
+
puts 'Regenerating gemspec'
|
49
|
+
system 'rake gemspec'
|
50
|
+
puts 'Building'
|
51
|
+
system 'gem build mongoid_auto_increment.gemspec'
|
54
52
|
end
|
55
53
|
|
56
|
-
desc
|
57
|
-
task :
|
58
|
-
|
54
|
+
desc 'Release gem'
|
55
|
+
task release: :build do
|
56
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
59
57
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
@@ -4,8 +4,8 @@ module MongoidAutoIncrement
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
module ClassMethods
|
7
|
-
def auto_increment(name, options={})
|
8
|
-
field name, :
|
7
|
+
def auto_increment(name, options = {})
|
8
|
+
field name, type: Integer
|
9
9
|
|
10
10
|
unless defined? @@incrementor
|
11
11
|
@@incrementor = MongoidAutoIncrement::Incrementor.new
|
@@ -15,7 +15,7 @@ module MongoidAutoIncrement
|
|
15
15
|
seq_name = options[:name] || "#{self.name.downcase}_#{name}"
|
16
16
|
|
17
17
|
before_create do
|
18
|
-
send("#{name}=", @@incrementor.inc(seq_name, options))
|
18
|
+
send("#{name}=", @@incrementor.inc(seq_name, options, self))
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -1,35 +1,36 @@
|
|
1
1
|
# This is a modified version of the code found on this blog post:
|
2
|
-
#
|
2
|
+
# http://ihswebdesign.com/blog/autoincrement-in-mongodb-with-ruby/
|
3
3
|
module MongoidAutoIncrement
|
4
4
|
class Incrementor
|
5
5
|
class Sequence
|
6
|
-
def initialize(sequence, collection_name, seed, step)
|
6
|
+
def initialize(sequence, collection_name, seed, step, scope)
|
7
7
|
@sequence = sequence.to_s
|
8
8
|
@collection = collection_name.to_s
|
9
|
+
@scope = scope || {}
|
9
10
|
exists? || create(seed)
|
10
11
|
@step = step.to_i
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
+
def inc
|
14
15
|
if defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '5'
|
15
16
|
collection.find(query).find_one_and_update({ '$inc' => { number: @step } }, new: true, upsert: true, return_document: :after)['number']
|
16
17
|
elsif defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '3'
|
17
18
|
collection.find(query).modify({ '$inc' => { number: @step } }, new: true, upsert: true)['number']
|
18
19
|
else
|
19
20
|
opts = {
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
'query' => query,
|
22
|
+
'update' => { '$inc' => { 'number' => @step } },
|
23
|
+
'new' => true # return the modified document
|
23
24
|
}
|
24
|
-
collection.find_and_modify(opts)[
|
25
|
+
collection.find_and_modify(opts)['number']
|
25
26
|
end
|
26
|
-
|
27
|
+
end
|
27
28
|
|
28
29
|
def current
|
29
30
|
if defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '3'
|
30
|
-
collection.find(query).one[
|
31
|
+
collection.find(query).one['number']
|
31
32
|
else
|
32
|
-
collection.find_one(query)[
|
33
|
+
collection.find_one(query)['number']
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -41,9 +42,9 @@ module MongoidAutoIncrement
|
|
41
42
|
|
42
43
|
def create(number)
|
43
44
|
if ::Mongoid::VERSION >= '5'
|
44
|
-
collection.insert_one(query.merge(
|
45
|
+
collection.insert_one(query.merge('number' => number))
|
45
46
|
else
|
46
|
-
collection.insert(query.merge(
|
47
|
+
collection.insert(query.merge('number' => number))
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
@@ -58,18 +59,35 @@ module MongoidAutoIncrement
|
|
58
59
|
end
|
59
60
|
|
60
61
|
def query
|
61
|
-
|
62
|
+
@scope.merge('seq_name' => @sequence)
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
65
|
-
def initialize(options=nil)
|
66
|
-
end
|
66
|
+
def initialize(options = nil); end
|
67
67
|
|
68
|
-
def inc(sequence, options)
|
69
|
-
collection = options[:collection] ||
|
68
|
+
def inc(sequence, options, record)
|
69
|
+
collection = options[:collection] || 'sequences'
|
70
70
|
seed = options[:seed].to_i
|
71
71
|
step = options[:step] || 1
|
72
|
-
|
72
|
+
scope = resolve_scope(record, options[:scope])
|
73
|
+
|
74
|
+
Sequence.new(sequence, collection, seed, step, scope).inc
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def resolve_scope(record, scope)
|
80
|
+
Array(scope).each_with_object({}) do |scope_item, query|
|
81
|
+
reflection = record.class.reflect_on_association(scope_item)
|
82
|
+
|
83
|
+
if reflection
|
84
|
+
scope_value = record.send(reflection.foreign_key)
|
85
|
+
scope_item = reflection.foreign_key
|
86
|
+
query[scope_item] = scope_value
|
87
|
+
else
|
88
|
+
query[scope_item] = record.read_attribute(scope_item)
|
89
|
+
end
|
90
|
+
end
|
73
91
|
end
|
74
92
|
end
|
75
93
|
end
|
@@ -2,18 +2,18 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: mongoid_auto_increment 0.1.
|
5
|
+
# stub: mongoid_auto_increment 0.1.5 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
|
-
s.name = "mongoid_auto_increment"
|
9
|
-
s.version = "0.1.
|
8
|
+
s.name = "mongoid_auto_increment".freeze
|
9
|
+
s.version = "0.1.5"
|
10
10
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
-
s.require_paths = ["lib"]
|
13
|
-
s.authors = ["Peter Savichev (proton)"]
|
14
|
-
s.date = "
|
15
|
-
s.description = "Add SQL like auto-incrementing fields to your Mongoid documents."
|
16
|
-
s.email = "psavichev@gmail.com"
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Peter Savichev (proton)".freeze]
|
14
|
+
s.date = "2018-11-07"
|
15
|
+
s.description = "Add SQL like auto-incrementing fields to your Mongoid documents.".freeze
|
16
|
+
s.email = "psavichev@gmail.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE",
|
19
19
|
"README.rdoc"
|
@@ -31,52 +31,54 @@ Gem::Specification.new do |s|
|
|
31
31
|
"mongoid_auto_increment.gemspec",
|
32
32
|
"spec/models/book.rb",
|
33
33
|
"spec/models/comment.rb",
|
34
|
+
"spec/models/ingredient.rb",
|
34
35
|
"spec/models/invoice.rb",
|
35
36
|
"spec/models/order.rb",
|
36
37
|
"spec/models/post.rb",
|
38
|
+
"spec/models/recipe.rb",
|
37
39
|
"spec/models/record.rb",
|
38
40
|
"spec/mongoid_auto_increment_spec.rb",
|
39
41
|
"spec/spec_helper.rb"
|
40
42
|
]
|
41
|
-
s.homepage = "http://github.com/proton/mongoid_auto_increment"
|
42
|
-
s.licenses = ["MIT"]
|
43
|
-
s.rubygems_version = "2.
|
44
|
-
s.summary = "Auto-incrementing fields for Mongoid documents"
|
43
|
+
s.homepage = "http://github.com/proton/mongoid_auto_increment".freeze
|
44
|
+
s.licenses = ["MIT".freeze]
|
45
|
+
s.rubygems_version = "2.6.14".freeze
|
46
|
+
s.summary = "Auto-incrementing fields for Mongoid documents".freeze
|
45
47
|
|
46
48
|
if s.respond_to? :specification_version then
|
47
49
|
s.specification_version = 4
|
48
50
|
|
49
51
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
|
-
s.add_runtime_dependency(%q<mongoid
|
51
|
-
s.add_development_dependency(%q<bundler
|
52
|
-
s.add_development_dependency(%q<
|
53
|
-
s.add_development_dependency(%q<
|
54
|
-
s.add_development_dependency(%q<rack
|
55
|
-
s.add_development_dependency(%q<
|
56
|
-
s.add_development_dependency(%q<
|
57
|
-
s.add_development_dependency(%q<
|
58
|
-
s.add_development_dependency(%q<
|
52
|
+
s.add_runtime_dependency(%q<mongoid>.freeze, [">= 2.0"])
|
53
|
+
s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
|
54
|
+
s.add_development_dependency(%q<database_cleaner>.freeze, [">= 0.8.0"])
|
55
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.1.1"])
|
56
|
+
s.add_development_dependency(%q<rack>.freeze, ["~> 1.6.4"])
|
57
|
+
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
58
|
+
s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
|
59
|
+
s.add_development_dependency(%q<rspec>.freeze, [">= 2.0.0"])
|
60
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0.4.0"])
|
59
61
|
else
|
60
|
-
s.add_dependency(%q<mongoid
|
61
|
-
s.add_dependency(%q<bundler
|
62
|
-
s.add_dependency(%q<
|
63
|
-
s.add_dependency(%q<
|
64
|
-
s.add_dependency(%q<rack
|
65
|
-
s.add_dependency(%q<
|
66
|
-
s.add_dependency(%q<
|
67
|
-
s.add_dependency(%q<
|
68
|
-
s.add_dependency(%q<
|
62
|
+
s.add_dependency(%q<mongoid>.freeze, [">= 2.0"])
|
63
|
+
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
64
|
+
s.add_dependency(%q<database_cleaner>.freeze, [">= 0.8.0"])
|
65
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.1.1"])
|
66
|
+
s.add_dependency(%q<rack>.freeze, ["~> 1.6.4"])
|
67
|
+
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
68
|
+
s.add_dependency(%q<rdoc>.freeze, [">= 0"])
|
69
|
+
s.add_dependency(%q<rspec>.freeze, [">= 2.0.0"])
|
70
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0.4.0"])
|
69
71
|
end
|
70
72
|
else
|
71
|
-
s.add_dependency(%q<mongoid
|
72
|
-
s.add_dependency(%q<bundler
|
73
|
-
s.add_dependency(%q<
|
74
|
-
s.add_dependency(%q<
|
75
|
-
s.add_dependency(%q<rack
|
76
|
-
s.add_dependency(%q<
|
77
|
-
s.add_dependency(%q<
|
78
|
-
s.add_dependency(%q<
|
79
|
-
s.add_dependency(%q<
|
73
|
+
s.add_dependency(%q<mongoid>.freeze, [">= 2.0"])
|
74
|
+
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
75
|
+
s.add_dependency(%q<database_cleaner>.freeze, [">= 0.8.0"])
|
76
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.1.1"])
|
77
|
+
s.add_dependency(%q<rack>.freeze, ["~> 1.6.4"])
|
78
|
+
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
79
|
+
s.add_dependency(%q<rdoc>.freeze, [">= 0"])
|
80
|
+
s.add_dependency(%q<rspec>.freeze, [">= 2.0.0"])
|
81
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0.4.0"])
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Ingredient
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Attributes::Dynamic if defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '4'
|
4
|
+
|
5
|
+
field :name
|
6
|
+
field :type
|
7
|
+
|
8
|
+
belongs_to :recipe
|
9
|
+
|
10
|
+
auto_increment :order, scope: :recipe
|
11
|
+
auto_increment :cost, scope: %i[recipe type]
|
12
|
+
end
|
data/spec/models/invoice.rb
CHANGED
data/spec/models/order.rb
CHANGED
data/spec/models/post.rb
CHANGED
@@ -1,25 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'mongoid_auto_increment' do
|
4
|
-
|
5
4
|
before(:each) do
|
6
|
-
@book1 = Book.create :
|
7
|
-
@book2 = Book.create :
|
8
|
-
@book3 = Book.create :
|
9
|
-
@order1 = Order.create :
|
10
|
-
@order2 = Order.create :
|
11
|
-
@order3 = Order.create :
|
12
|
-
@post1 = Post.create :
|
13
|
-
@post2 = Post.create :
|
14
|
-
@post3 = Post.create :
|
15
|
-
@comment1 = @post1.comments.create :
|
16
|
-
@comment2 = @post1.comments.create :
|
17
|
-
@invoice1 = Invoice.create :
|
18
|
-
@invoice2 = Invoice.create :
|
19
|
-
@invoice3 = Invoice.create :
|
20
|
-
@record1 = Record.create :
|
21
|
-
@record2 = Record.create :
|
22
|
-
@record3 = Record.create :
|
5
|
+
@book1 = Book.create name: 'The Rails Way'
|
6
|
+
@book2 = Book.create name: 'The Ruby Programming Language '
|
7
|
+
@book3 = Book.create name: 'Metaprogramming Ruby'
|
8
|
+
@order1 = Order.create name: 'First Order'
|
9
|
+
@order2 = Order.create name: 'Second Order'
|
10
|
+
@order3 = Order.create name: 'Last Order'
|
11
|
+
@post1 = Post.create name: 'First Post'
|
12
|
+
@post2 = Post.create name: 'Second Post'
|
13
|
+
@post3 = Post.create name: 'Last Post'
|
14
|
+
@comment1 = @post1.comments.create name: 'First Comment'
|
15
|
+
@comment2 = @post1.comments.create name: 'Second Comment'
|
16
|
+
@invoice1 = Invoice.create name: 'First invoice'
|
17
|
+
@invoice2 = Invoice.create name: 'Second invoice'
|
18
|
+
@invoice3 = Invoice.create name: 'Third invoice'
|
19
|
+
@record1 = Record.create name: 'First record'
|
20
|
+
@record2 = Record.create name: 'Second record'
|
21
|
+
@record3 = Record.create name: 'Third record'
|
23
22
|
end
|
24
23
|
|
25
24
|
describe 'single auto-increment field' do
|
@@ -120,7 +119,64 @@ describe 'mongoid_auto_increment' do
|
|
120
119
|
end
|
121
120
|
|
122
121
|
it 'should have a sequence name of "Record"' do
|
123
|
-
expect(collection.find(:
|
122
|
+
expect(collection.find(seq_name: 'Record').first).not_to eq nil
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe 'auto-increment with scope' do
|
127
|
+
context 'when scope is a relation' do
|
128
|
+
before do
|
129
|
+
@recipe1 = Recipe.create
|
130
|
+
@recipe2 = Recipe.create
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'should have multiple with the same value' do
|
134
|
+
expect(@recipe1.ingredients.create.order).to eq 1
|
135
|
+
expect(@recipe2.ingredients.create.order).to eq 1
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should increment each scope separately' do
|
139
|
+
3.times.each { |n| @recipe1.ingredients.create(name: n + 1) }
|
140
|
+
9.times.each { |n| @recipe2.ingredients.create(name: n + 1) }
|
141
|
+
expect(Ingredient.find_by(recipe: @recipe2, name: 3).order).to eq 3
|
142
|
+
expect(Ingredient.find_by(recipe: @recipe2, name: 9).order).to eq 9
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'when scope is a field' do
|
147
|
+
it 'should have multiple with the same value' do
|
148
|
+
expect(Recipe.create(chef: 'Jack').rank).to eq 1
|
149
|
+
expect(Recipe.create(chef: 'Jill').rank).to eq 1
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'should increment each scope separately' do
|
153
|
+
3.times.each { |n| Recipe.create(chef: 'Jack', name: n + 1) }
|
154
|
+
9.times.each { |n| Recipe.create(chef: 'Jill', name: n + 1) }
|
155
|
+
expect(Recipe.find_by(chef: 'Jack', name: 3).rank).to eq 3
|
156
|
+
expect(Recipe.find_by(chef: 'Jill', name: 9).rank).to eq 9
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'when scope is an array' do
|
161
|
+
before do
|
162
|
+
@recipe1 = Recipe.create
|
163
|
+
@recipe2 = Recipe.create
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'should have multiple with the same value' do
|
167
|
+
expect(Ingredient.create(recipe: @recipe1, type: 'greens').cost).to eq 1
|
168
|
+
expect(Ingredient.create(recipe: @recipe1, type: 'meats').cost).to eq 1
|
169
|
+
expect(Ingredient.create(recipe: @recipe2, type: 'greens').cost).to eq 1
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'should increment each scope separately' do
|
173
|
+
2.times.each { |n| Ingredient.create(recipe: @recipe1, type: 'greens', name: n + 1) }
|
174
|
+
3.times.each { |n| Ingredient.create(recipe: @recipe1, type: 'meats', name: n + 1) }
|
175
|
+
5.times.each { |n| Ingredient.create(recipe: @recipe2, type: 'greens', name: n + 1) }
|
176
|
+
expect(Ingredient.find_by(recipe: @recipe1, type: 'greens', name: 2).cost).to eq 2
|
177
|
+
expect(Ingredient.find_by(recipe: @recipe1, type: 'meats', name: 3).cost).to eq 3
|
178
|
+
expect(Ingredient.find_by(recipe: @recipe2, type: 'greens', name: 5).cost).to eq 5
|
179
|
+
end
|
124
180
|
end
|
125
181
|
end
|
126
182
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
3
|
|
4
|
-
MODELS = File.join(File.dirname(__FILE__),
|
4
|
+
MODELS = File.join(File.dirname(__FILE__), 'models')
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
6
|
+
require 'rubygems'
|
7
|
+
require 'mongoid'
|
8
|
+
require 'mongoid_auto_increment'
|
9
|
+
require 'database_cleaner'
|
10
|
+
require 'simplecov'
|
11
11
|
|
12
12
|
SimpleCov.start
|
13
13
|
|
@@ -15,14 +15,14 @@ Dir["#{MODELS}/*.rb"].each { |f| require f }
|
|
15
15
|
|
16
16
|
if defined?(::Mongoid::VERSION) && ::Mongoid::VERSION > '3'
|
17
17
|
Mongoid.configure do |config|
|
18
|
-
config.connect_to
|
18
|
+
config.connect_to 'mongoid_auto_increment_test'
|
19
19
|
end
|
20
20
|
else
|
21
|
-
Mongoid.config.master = Mongo::Connection.new.db(
|
21
|
+
Mongoid.config.master = Mongo::Connection.new.db('mongoid_auto_increment_test')
|
22
22
|
end
|
23
23
|
Mongoid.logger = Logger.new($stdout)
|
24
24
|
|
25
|
-
DatabaseCleaner.orm =
|
25
|
+
DatabaseCleaner.orm = 'mongoid'
|
26
26
|
|
27
27
|
RSpec.configure do |config|
|
28
28
|
config.before(:all) do
|
@@ -36,4 +36,4 @@ RSpec.configure do |config|
|
|
36
36
|
config.after(:each) do
|
37
37
|
DatabaseCleaner.clean
|
38
38
|
end
|
39
|
-
end
|
39
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_auto_increment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Savichev (proton)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -39,33 +39,33 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: database_cleaner
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.8.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.8.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: jeweler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 2.1.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 2.1.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rack
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.6.4
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,47 +95,47 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rdoc
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 2.0.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 2.0.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: simplecov
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.4.0
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.4.0
|
139
139
|
description: Add SQL like auto-incrementing fields to your Mongoid documents.
|
140
140
|
email: psavichev@gmail.com
|
141
141
|
executables: []
|
@@ -156,9 +156,11 @@ files:
|
|
156
156
|
- mongoid_auto_increment.gemspec
|
157
157
|
- spec/models/book.rb
|
158
158
|
- spec/models/comment.rb
|
159
|
+
- spec/models/ingredient.rb
|
159
160
|
- spec/models/invoice.rb
|
160
161
|
- spec/models/order.rb
|
161
162
|
- spec/models/post.rb
|
163
|
+
- spec/models/recipe.rb
|
162
164
|
- spec/models/record.rb
|
163
165
|
- spec/mongoid_auto_increment_spec.rb
|
164
166
|
- spec/spec_helper.rb
|
@@ -182,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
184
|
version: '0'
|
183
185
|
requirements: []
|
184
186
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.
|
187
|
+
rubygems_version: 2.6.14
|
186
188
|
signing_key:
|
187
189
|
specification_version: 4
|
188
190
|
summary: Auto-incrementing fields for Mongoid documents
|