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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e52be8ea6565f7e0aa8568608b2a475e5f7a24b
4
- data.tar.gz: 847afa9a1c993683742629c35b6065a2c9629a10
3
+ metadata.gz: 77dd586502e69cdc067f0f2fdc5da493e35eacd3
4
+ data.tar.gz: 5f0df34d657c6c41bf7cebfd167f44ffe428f801
5
5
  SHA512:
6
- metadata.gz: 5af0b3fb0a4f675069befa779baa3c6e5b5c7ef916afeda0d89fd6cb06a7ac5b238ca7c554ff33b19da30657d6d08edf99249b582398a4803e267f1916681ab1
7
- data.tar.gz: 90d05e81ce3542f11726b974c9200cc8769100087ae37ae39f06c9091a35d1291834b54ca311f663c71349dbc7ed23df290ecd2e77d47bf60e75677ef4805f65
6
+ metadata.gz: e26e7739728adb0c52754fd7b7b35332f1d3e232935c39219d0fe6b95638d22615e09585102b032eb3467aa531404eac49636c8b5c0c4fda1a6f663a05684fe5
7
+ data.tar.gz: e690b7afaa740c79d8efa64eaf46761031d8eaa6977a33126c24292043f1ee0e6692cffbaa419f20ef077210d9144ee4f4b35c7ca0d07cb6b6d2f3bbe2458ca7
@@ -5,24 +5,27 @@ language: ruby
5
5
 
6
6
  cache: bundler
7
7
 
8
- rvm:
9
- - 2.2
10
- - 2.1.1
11
- - 2.0.0
12
- - 1.9.3
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
- - rvm: 1.9.3
24
- env: MONGOID_VERSION=6
25
- - rvm: 2.0.0
26
- env: MONGOID_VERSION=6
27
- - rvm: 2.1.1
28
- env: MONGOID_VERSION=6
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
@@ -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, :collection => :some_collection
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, :step => 5
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, :seed => 3333
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>:seed => 1000, :step => 5</tt>, first value will be 1005).
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
- $stderr.puts e.message
12
- $stderr.puts "Run `bundle install` to install missing gems"
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 = "mongoid_auto_increment"
20
- gem.homepage = "http://github.com/proton/mongoid_auto_increment"
21
- gem.license = "MIT"
22
- gem.summary = %q{Auto-incrementing fields for Mongoid documents}
23
- gem.description = %q{Add SQL like auto-incrementing fields to your Mongoid documents.}
24
- gem.email = "psavichev@gmail.com"
25
- gem.authors = ["Peter Savichev (proton)"]
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 :default => :spec
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 "Build gem"
46
+ desc 'Build gem'
49
47
  task :build do
50
- puts "Regenerating gemspec"
51
- system "rake gemspec"
52
- puts "Building"
53
- system "gem build mongoid_auto_increment.gemspec"
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 "Release gem"
57
- task :release => :build do
58
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
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.4
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, :type => Integer
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
- # http://ihswebdesign.com/blog/autoincrement-in-mongodb-with-ruby/
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
- def inc
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
- "query" => query,
21
- "update" => {"$inc" => { "number" => @step }},
22
- "new" => true # return the modified document
21
+ 'query' => query,
22
+ 'update' => { '$inc' => { 'number' => @step } },
23
+ 'new' => true # return the modified document
23
24
  }
24
- collection.find_and_modify(opts)["number"]
25
+ collection.find_and_modify(opts)['number']
25
26
  end
26
- end
27
+ end
27
28
 
28
29
  def current
29
30
  if defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '3'
30
- collection.find(query).one["number"]
31
+ collection.find(query).one['number']
31
32
  else
32
- collection.find_one(query)["number"]
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({ "number" => number }))
45
+ collection.insert_one(query.merge('number' => number))
45
46
  else
46
- collection.insert(query.merge({ "number" => number }))
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
- { "seq_name" => @sequence }
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] || "sequences"
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
- Sequence.new(sequence, collection, seed, step).inc
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.4 ruby lib
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.4"
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 = "2016-12-05"
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.4.8"
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>, [">= 2.0"])
51
- s.add_development_dependency(%q<bundler>, [">= 0"])
52
- s.add_development_dependency(%q<jeweler>, ["~> 2.1.1"])
53
- s.add_development_dependency(%q<rake>, [">= 0"])
54
- s.add_development_dependency(%q<rack>, ["~> 1.6.4"])
55
- s.add_development_dependency(%q<rdoc>, [">= 0"])
56
- s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
57
- s.add_development_dependency(%q<simplecov>, [">= 0.4.0"])
58
- s.add_development_dependency(%q<database_cleaner>, [">= 0.8.0"])
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>, [">= 2.0"])
61
- s.add_dependency(%q<bundler>, [">= 0"])
62
- s.add_dependency(%q<jeweler>, ["~> 2.1.1"])
63
- s.add_dependency(%q<rake>, [">= 0"])
64
- s.add_dependency(%q<rack>, ["~> 1.6.4"])
65
- s.add_dependency(%q<rdoc>, [">= 0"])
66
- s.add_dependency(%q<rspec>, [">= 2.0.0"])
67
- s.add_dependency(%q<simplecov>, [">= 0.4.0"])
68
- s.add_dependency(%q<database_cleaner>, [">= 0.8.0"])
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>, [">= 2.0"])
72
- s.add_dependency(%q<bundler>, [">= 0"])
73
- s.add_dependency(%q<jeweler>, ["~> 2.1.1"])
74
- s.add_dependency(%q<rake>, [">= 0"])
75
- s.add_dependency(%q<rack>, ["~> 1.6.4"])
76
- s.add_dependency(%q<rdoc>, [">= 0"])
77
- s.add_dependency(%q<rspec>, [">= 2.0.0"])
78
- s.add_dependency(%q<simplecov>, [">= 0.4.0"])
79
- s.add_dependency(%q<database_cleaner>, [">= 0.8.0"])
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
@@ -4,6 +4,5 @@ class Invoice
4
4
 
5
5
  field :name
6
6
 
7
- auto_increment :num, :seed => 1000, :step => 5
7
+ auto_increment :num, seed: 1000, step: 5
8
8
  end
9
-
@@ -4,5 +4,5 @@ class Order
4
4
 
5
5
  field :title
6
6
 
7
- auto_increment :num, :seed => 1000
7
+ auto_increment :num, seed: 1000
8
8
  end
@@ -4,7 +4,7 @@ class Post
4
4
 
5
5
  field :title
6
6
 
7
- auto_increment :key, :seed => 500
7
+ auto_increment :key, seed: 500
8
8
  auto_increment :num
9
9
 
10
10
  embeds_many :comments
@@ -0,0 +1,11 @@
1
+ class Recipe
2
+ include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic if defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '4'
4
+
5
+ field :name
6
+ field :chef
7
+
8
+ has_many :ingredients
9
+
10
+ auto_increment :rank, scope: :chef
11
+ end
@@ -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 :name => 'The Rails Way'
7
- @book2 = Book.create :name => 'The Ruby Programming Language '
8
- @book3 = Book.create :name => 'Metaprogramming Ruby'
9
- @order1 = Order.create :name => 'First Order'
10
- @order2 = Order.create :name => 'Second Order'
11
- @order3 = Order.create :name => 'Last Order'
12
- @post1 = Post.create :name => 'First Post'
13
- @post2 = Post.create :name => 'Second Post'
14
- @post3 = Post.create :name => 'Last Post'
15
- @comment1 = @post1.comments.create :name => 'First Comment'
16
- @comment2 = @post1.comments.create :name => 'Second Comment'
17
- @invoice1 = Invoice.create :name => 'First invoice'
18
- @invoice2 = Invoice.create :name => 'Second invoice'
19
- @invoice3 = Invoice.create :name => 'Third invoice'
20
- @record1 = Record.create :name => 'First record'
21
- @record2 = Record.create :name => 'Second record'
22
- @record3 = Record.create :name => 'Third record'
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(:seq_name => 'Record').first).not_to eq nil
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
@@ -1,13 +1,13 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
 
4
- MODELS = File.join(File.dirname(__FILE__), "models")
4
+ MODELS = File.join(File.dirname(__FILE__), 'models')
5
5
 
6
- require "rubygems"
7
- require "mongoid"
8
- require "mongoid_auto_increment"
9
- require "database_cleaner"
10
- require "simplecov"
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 "mongoid_auto_increment_test"
18
+ config.connect_to 'mongoid_auto_increment_test'
19
19
  end
20
20
  else
21
- Mongoid.config.master = Mongo::Connection.new.db("mongoid_auto_increment_test")
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 = "mongoid"
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
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: 2016-12-05 00:00:00.000000000 Z
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: jeweler
42
+ name: database_cleaner
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 2.1.1
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: 2.1.1
54
+ version: 0.8.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: jeweler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
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: '0'
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: rdoc
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: rspec
98
+ name: rdoc
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 2.0.0
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: 2.0.0
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: simplecov
112
+ name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 0.4.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.4.0
124
+ version: 2.0.0
125
125
  - !ruby/object:Gem::Dependency
126
- name: database_cleaner
126
+ name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 0.8.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.8.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.4.8
187
+ rubygems_version: 2.6.14
186
188
  signing_key:
187
189
  specification_version: 4
188
190
  summary: Auto-incrementing fields for Mongoid documents