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 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