mongoid_auto_increment 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|