auto_increment 1.3.0 → 1.5.2

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
- SHA1:
3
- metadata.gz: de47f750eacb36eb55191fedfa48c4171fbb76c9
4
- data.tar.gz: 19e51a34cb362de1f4e7943f53c46725cc0e4965
2
+ SHA256:
3
+ metadata.gz: f19f9f54c7b8a7641d6adb7527d9f9054ad131d015af8aec346cac61711129f7
4
+ data.tar.gz: 6ac27b9292e3003db26a709ac7b4c78f18b1e5d7c0c35c0f9f1e47a7f7132763
5
5
  SHA512:
6
- metadata.gz: 4ee67e7884c39f127c8df23b6bbd25b25ceee9b6de60a81c328f79d1ed191a61efdd07980afd0a8e4476c7333ee22e89e7d31007a65fc8a0ccfac042fee68b9e
7
- data.tar.gz: ba0e2b25e96905833c11b9d4be7f00de95e2bbeda2fe15693adf3c5ab78c3260d5309628f8655a4f006877e8a6e34098cf6e2d0c0ad8e4ef59aae4e6c405aa03
6
+ metadata.gz: 85ac0c4b0cd645f05703685bfcf3d64158a409db01d37eda4bf85c0e65c57029a2d656a1830fce754b150a901533ee5f4f60e152fce632926805c8f88ccd0e3b
7
+ data.tar.gz: bab85c29b564da957bb9088000bf4da689e937ba86caacbc4290d910480d4bf620e44ba68c0f1f9acc6eccaca57a5513474bbf553ba402d70d0709f8a9a76c37
@@ -2,10 +2,13 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.3.1
6
- - 2.2.5
5
+ - 2.6.6
6
+ before_install:
7
+ - gem update --system
7
8
  gemfile:
8
- - gemfiles/rails_5.gemfile
9
- - gemfiles/rails_4.gemfile
10
-
11
- script: 'bundle exec rake'
9
+ - gemfiles/rails_4.2.11.1.gemfile
10
+ - gemfiles/rails_5.0.7.2.gemfile
11
+ - gemfiles/rails_5.1.6.2.gemfile
12
+ - gemfiles/rails_5.2.2.1.gemfile
13
+ - gemfiles/rails_6.0.3.4.gemfile
14
+ - gemfiles/rails_6.1.0.gemfile
data/Appraisals CHANGED
@@ -1,9 +1,18 @@
1
- appraise 'rails-4' do
2
- gem 'activerecord', '~> 4.0'
3
- gem 'activesupport', '~> 4.0'
4
- end
1
+ RAILS_VERSIONS = %w(
2
+ 4.2.11.1
3
+ 5.0.7.2
4
+ 5.1.6.2
5
+ 5.2.2.1
6
+ 6.0.3.4
7
+ 6.1.0
8
+ )
5
9
 
6
- appraise 'rails-5' do
7
- gem 'activerecord', '~> 5.0'
8
- gem 'activesupport', '~> 5.0'
10
+ RAILS_VERSIONS.each do |version|
11
+ appraise "rails_#{version}" do
12
+ gem 'activerecord', version
13
+ gem 'activesupport', version
14
+ if version.split('.').first.to_i < 6
15
+ gem 'sqlite3', '1.3.13'
16
+ end
17
+ end
9
18
  end
data/Gemfile CHANGED
@@ -1,8 +1,3 @@
1
- source 'http://rubygems.org'
1
+ source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in auto_increment.gemspec
4
3
  gemspec
5
-
6
- group :development do
7
- gem 'appraisal'
8
- end
data/README.md CHANGED
@@ -8,50 +8,58 @@ auto_increment provides automatic incrementation for a integer or string fields
8
8
 
9
9
  ## Installation
10
10
 
11
- You can use auto_increment as a gem in Rails 4 and Rails 5.
11
+ You can use auto_increment as a gem from Rails 4.2 to Rails 6.1.
12
12
 
13
13
  To use the gem version, put the following gem requirement in your `Gemfile`:
14
14
 
15
- gem "auto_increment"
16
-
15
+ ```rb
16
+ gem "auto_increment"
17
+ ```
17
18
 
18
19
  ## Usage
19
20
 
20
21
  To work with a auto increment column you used to do something like this in your model:
21
22
 
22
- before_create :set_code
23
- def set_code
24
- max_code = Operation.maximum(:code)
25
- self.code = max_code.to_i + 1
26
- end
23
+ ```rb
24
+ before_create :set_code
25
+ def set_code
26
+ max_code = Operation.maximum(:code)
27
+ self.code = max_code.to_i + 1
28
+ end
29
+ ```
27
30
 
28
31
  Looks fine, but not when you need to do it over and over again. In fact auto_increment does it under the cover.
29
32
 
30
33
  All you need to do is this:
31
34
 
32
- auto_increment :code
35
+ ```rb
36
+ auto_increment :code
37
+ ```
33
38
 
34
39
  And your code field will be incremented
35
40
 
36
-
37
41
  ## Customizing
38
42
 
39
43
  So you have a different column or need a scope. auto_increment provides options. You can use it like this:
40
44
 
41
- auto_increment :letter, scope: [:account_id, :job_id], initial: 'C', force: true, lock: false
45
+ ```rb
46
+ auto_increment :letter, scope: [:account_id, :job_id], model_scope: :in_account, initial: 'C', force: true, lock: false, before: :create
47
+ ```
42
48
 
43
49
  First argument is the column that will be incremented. Can be integer or string.
44
50
 
45
51
  * scope: you can define columns that will be scoped and you can use as many as you want (default: nil)
52
+ * model_scope: you can define model scopes that will be executed and you can use as many as you want (default: nil)
46
53
  * initial: initial value of column (default: 1)
47
54
  * force: you can set a value before create and auto_increment will not change that, but if you do want this, set force to true (default: false)
48
55
  * lock: you can set a lock on the max query. (default: false)
56
+ * before: you can choose a different callback to be used (:create, :save, :validation) (default: create)
49
57
 
50
58
 
51
59
  ## Compatibility
52
60
 
53
- Tested with Rails 4 and Rails 5 in Ruby 2.2.5 and Ruby 2.3.1
61
+ Tested with Rails 6.1.0, 6.0.3.4, 5.2.2.1, 5.1.6.2, 5.0.7.2 and 4.2.11.1 in Ruby 2.6.6.
54
62
 
55
63
  ## License
56
64
 
57
- MIT License. Copyright 2011 29sul Tecnologia da Informação <http://www.29sul.com.br/>
65
+ [MIT License](LICENSE.txt)
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.licenses = 'MIT'
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.authors = ['Felipe Diesel']
11
- s.email = ['felipediesel@gmail.com']
11
+ s.email = ['diesel@hey.com']
12
12
  s.homepage = 'http://github.com/felipediesel/auto_increment'
13
13
  s.summary = 'Auto increment a string or integer field'
14
14
  s.description = 'Automaticaly increments a string or integer field ' \
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.require_paths = ['lib']
20
20
 
21
- s.add_dependency 'activerecord', '>= 4.0', '< 5.1'
22
- s.add_dependency 'activesupport', '>= 4.0', '< 5.1'
21
+ s.add_dependency 'activerecord', '>= 4.0'
22
+ s.add_dependency 'activesupport', '>= 4.0'
23
23
 
24
24
  s.add_development_dependency 'bundler'
25
25
  s.add_development_dependency 'rake'
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  s.add_development_dependency 'fuubar'
32
32
  s.add_development_dependency 'coveralls'
33
33
  s.add_development_dependency 'database_cleaner'
34
+ s.add_development_dependency 'appraisal'
34
35
 
35
- s.add_development_dependency 'sqlite3'
36
+ s.add_development_dependency 'sqlite3', '>= 1.3.13'
36
37
  end
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "4.2.11.1"
6
+ gem "activesupport", "4.2.11.1"
7
+ gem "sqlite3", "1.3.13"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "5.0.7.2"
6
+ gem "activesupport", "5.0.7.2"
7
+ gem "sqlite3", "1.3.13"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "5.1.6.2"
6
+ gem "activesupport", "5.1.6.2"
7
+ gem "sqlite3", "1.3.13"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "5.2.2.1"
6
+ gem "activesupport", "5.2.2.1"
7
+ gem "sqlite3", "1.3.13"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "6.0.3.4"
6
+ gem "activesupport", "6.0.3.4"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "6.1.0"
6
+ gem "activesupport", "6.1.0"
7
+
8
+ gemspec path: "../"
@@ -6,7 +6,11 @@ module AutoIncrement
6
6
  # +AutoIncrement::ActiveRecord::ClassMethods+
7
7
  module ClassMethods
8
8
  def auto_increment(column = nil, options = {})
9
- before_create Incrementor.new(column, options)
9
+ options.reverse_merge! before: :create
10
+
11
+ callback = "before_#{options[:before]}"
12
+
13
+ send callback, Incrementor.new(column, options)
10
14
  end
11
15
  end
12
16
  end
@@ -9,8 +9,9 @@ module AutoIncrement
9
9
  end
10
10
 
11
11
  @column = column || options[:column] || :code
12
- @options = options.reverse_merge scope: nil, initial: 1, force: false
12
+ @options = options.reverse_merge initial: 1, force: false
13
13
  @options[:scope] = [@options[:scope]] unless @options[:scope].is_a? Array
14
+ @options[:model_scope] = [@options[:model_scope]] unless @options[:model_scope].is_a? Array
14
15
  end
15
16
 
16
17
  def before_create(record)
@@ -18,6 +19,9 @@ module AutoIncrement
18
19
  write if can_write?
19
20
  end
20
21
 
22
+ alias before_validation before_create
23
+ alias before_save before_create
24
+
21
25
  private
22
26
 
23
27
  def can_write?
@@ -38,14 +42,22 @@ module AutoIncrement
38
42
  query
39
43
  end
40
44
 
45
+ def build_model_scope(query)
46
+ @options[:model_scope].reject(&:nil?).each do |scope|
47
+ query = query.send(scope)
48
+ end
49
+
50
+ query
51
+ end
52
+
41
53
  def maximum
42
- query = build_scopes @record.class
54
+ query = build_scopes(build_model_scope(@record.class))
43
55
  query.lock if lock?
44
56
 
45
57
  if string?
46
58
  query.select("#{@column} max")
47
- .order("LENGTH(#{@column}) DESC, #{@column} DESC")
48
- .first.try :max
59
+ .order(Arel.sql("LENGTH(#{@column}) DESC, #{@column} DESC"))
60
+ .first.try :max
49
61
  else
50
62
  query.maximum @column
51
63
  end
@@ -1,4 +1,4 @@
1
1
  # +AutoIncrement::VERSION+
2
2
  module AutoIncrement
3
- VERSION = '1.3.0'
3
+ VERSION = '1.5.2'.freeze
4
4
  end
Binary file
@@ -7,17 +7,19 @@ describe AutoIncrement do
7
7
  @account1 = Account.create name: 'My Account'
8
8
  @account2 = Account.create name: 'Another Account', code: 50
9
9
 
10
- @user_account1 = @account1.users.create name: 'Felipe', letter_code: 'Z'
11
- @user_account2 = @account2.users.create name: 'Daniel'
10
+ @user1_account1 = @account1.users.create name: 'Felipe', letter_code: 'Z'
11
+ @user1_account2 = @account2.users.create name: 'Daniel'
12
+ @user2_account2 = @account2.users.create name: 'Mark'
13
+ @user3_account2 = @account2.users.create name: 'Robert'
12
14
  end
13
15
 
14
16
  describe 'initial' do
15
17
  it { expect(@account1.code).to eq 1 }
16
- it { expect(@user_account1.letter_code).to eq 'A' }
18
+ it { expect(@user1_account1.letter_code).to eq 'A' }
17
19
  end
18
20
 
19
21
  describe 'do not increment outside scope' do
20
- it { expect(@user_account2.letter_code).to eq 'A' }
22
+ it { expect(@user1_account2.letter_code).to eq 'A' }
21
23
  end
22
24
 
23
25
  describe 'not set column if is already set' do
@@ -25,7 +27,7 @@ describe AutoIncrement do
25
27
  end
26
28
 
27
29
  describe 'set column if option force is used' do
28
- it { expect(@user_account1.letter_code).to eq 'A' }
30
+ it { expect(@user1_account1.letter_code).to eq 'A' }
29
31
  end
30
32
 
31
33
  describe 'locks query for increment' do
@@ -53,4 +55,15 @@ describe AutoIncrement do
53
55
  it { expect(@accounts.size).to eq 25 }
54
56
  it { expect(account_last_letter_code).to eq 'Y' }
55
57
  end
58
+
59
+ describe 'set before validation' do
60
+ account3 = Account.new
61
+ account3.valid?
62
+
63
+ it { expect(account3.code).not_to be_nil }
64
+ end
65
+
66
+ describe 'uses model scopes' do
67
+ it { expect(@user3_account2.letter_code).to eq('C') }
68
+ end
56
69
  end
@@ -1,6 +1,6 @@
1
1
  # Spec +Account+
2
2
  class Account < ActiveRecord::Base
3
- auto_increment :code
3
+ auto_increment :code, before: :validation
4
4
 
5
5
  has_many :users
6
6
  end
@@ -1,7 +1,11 @@
1
1
  # + Spec +User+
2
2
  class User < ActiveRecord::Base
3
3
  auto_increment :letter_code, scope: :account_id, initial: 'A', force: true,
4
- lock: true
4
+ lock: true, model_scope: :with_mark
5
5
 
6
6
  belongs_to :account
7
+
8
+ default_scope -> { where 'name <> ?', 'Mark' }
9
+
10
+ scope :with_mark, -> { unscoped }
7
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auto_increment
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felipe Diesel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-19 00:00:00.000000000 Z
11
+ date: 2020-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '5.1'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +24,6 @@ dependencies:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '4.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '5.1'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -37,9 +31,6 @@ dependencies:
37
31
  - - ">="
38
32
  - !ruby/object:Gem::Version
39
33
  version: '4.0'
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '5.1'
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
@@ -47,9 +38,6 @@ dependencies:
47
38
  - - ">="
48
39
  - !ruby/object:Gem::Version
49
40
  version: '4.0'
50
- - - "<"
51
- - !ruby/object:Gem::Version
52
- version: '5.1'
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: bundler
55
43
  requirement: !ruby/object:Gem::Requirement
@@ -177,7 +165,7 @@ dependencies:
177
165
  - !ruby/object:Gem::Version
178
166
  version: '0'
179
167
  - !ruby/object:Gem::Dependency
180
- name: sqlite3
168
+ name: appraisal
181
169
  requirement: !ruby/object:Gem::Requirement
182
170
  requirements:
183
171
  - - ">="
@@ -190,9 +178,23 @@ dependencies:
190
178
  - - ">="
191
179
  - !ruby/object:Gem::Version
192
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: sqlite3
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 1.3.13
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 1.3.13
193
195
  description: Automaticaly increments a string or integer field in ActiveRecord.
194
196
  email:
195
- - felipediesel@gmail.com
197
+ - diesel@hey.com
196
198
  executables: []
197
199
  extensions: []
198
200
  extra_rdoc_files: []
@@ -208,8 +210,13 @@ files:
208
210
  - README.md
209
211
  - Rakefile
210
212
  - auto_increment.gemspec
211
- - gemfiles/rails_4.gemfile
212
- - gemfiles/rails_5.gemfile
213
+ - gemfiles/.bundle/config
214
+ - gemfiles/rails_4.2.11.1.gemfile
215
+ - gemfiles/rails_5.0.7.2.gemfile
216
+ - gemfiles/rails_5.1.6.2.gemfile
217
+ - gemfiles/rails_5.2.2.1.gemfile
218
+ - gemfiles/rails_6.0.3.4.gemfile
219
+ - gemfiles/rails_6.1.0.gemfile
213
220
  - lib/auto_increment.rb
214
221
  - lib/auto_increment/active_record.rb
215
222
  - lib/auto_increment/incrementor.rb
@@ -241,8 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
248
  - !ruby/object:Gem::Version
242
249
  version: '0'
243
250
  requirements: []
244
- rubyforge_project:
245
- rubygems_version: 2.5.1
251
+ rubygems_version: 3.1.4
246
252
  signing_key:
247
253
  specification_version: 4
248
254
  summary: Auto increment a string or integer field
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "activerecord", "~> 4.0"
6
- gem "activesupport", "~> 4.0"
7
-
8
- group :development do
9
- gem "appraisal"
10
- end
11
-
12
- gemspec :path => "../"
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "activerecord", "~> 5.0"
6
- gem "activesupport", "~> 5.0"
7
-
8
- group :development do
9
- gem "appraisal"
10
- end
11
-
12
- gemspec :path => "../"