sequence_on 0.0.3 → 0.0.4
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/lib/sequence_on/sequenced_on.rb +50 -0
- data/lib/sequence_on.rb +2 -35
- metadata +45 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 435e96d6c211ac5457fd9281370e48645fbce435
|
4
|
+
data.tar.gz: c43524bd0d6fe081b126040c096b8ce8720fc982
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b15f347b9b90370735c8c23ec15ea88fdf12652654ae07c006c02602b3788d1b88c63a29e6b340e73ca8eb811b0119da01b3d2d8f1c029d6caecb67da8823d0b
|
7
|
+
data.tar.gz: 58cc6f67aca213d3d5af2cb309fdf068b4184ebe8ba9ed388fb3b51041dc265b968ab0fbdd525aea0961f9d18141ddce29b93476e6e5b85fe8eb39acec0498bb
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'active_support/core_ext/hash/slice'
|
2
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
3
|
+
|
4
|
+
module SequenceOn
|
5
|
+
|
6
|
+
module SequencedOn
|
7
|
+
|
8
|
+
DEFAULT_OPTIONS = {
|
9
|
+
column: :sequential_id,
|
10
|
+
start_at: 1
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
module InstanceMethods
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def postgresql?
|
18
|
+
defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) &&
|
19
|
+
self.class.connection.instance_of?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
20
|
+
end
|
21
|
+
|
22
|
+
def generate_sequence_id
|
23
|
+
options = self.class.sequence_options
|
24
|
+
self.class.connection.execute("LOCK TABLE #{self.class.table_name} IN EXCLUSIVE MODE") if postgresql?
|
25
|
+
last_record = self.class.class_exec(self, &options[:lmd]).
|
26
|
+
order("#{options[:column]} DESC").
|
27
|
+
first
|
28
|
+
self.sequential_id = if last_record
|
29
|
+
last_record.send(options[:column]) + 1
|
30
|
+
else
|
31
|
+
options[:start_at]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module ClassMethods
|
37
|
+
|
38
|
+
def sequenced_on(lmd, options = {})
|
39
|
+
include InstanceMethods
|
40
|
+
mattr_accessor :sequence_options, instance_accessor: false
|
41
|
+
before_create :generate_sequence_id, prepend: true
|
42
|
+
self.sequence_options = DEFAULT_OPTIONS.merge(options).merge(lmd: lmd)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.included(base)
|
47
|
+
base.extend(ClassMethods)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/sequence_on.rb
CHANGED
@@ -1,36 +1,3 @@
|
|
1
|
-
|
2
|
-
extend ActiveSupport::Concern
|
1
|
+
require 'sequence_on/sequenced_on'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
def sequence_on(l, opts={})
|
7
|
-
@@seq_on = l
|
8
|
-
@@seq_on_opts = opts
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
included do
|
13
|
-
before_create :generate_sequence_id, prepend: true
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def postgresql?
|
18
|
-
defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) &&
|
19
|
-
self.class.connection.instance_of?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
20
|
-
end
|
21
|
-
|
22
|
-
def generate_sequence_id
|
23
|
-
if postgresql?
|
24
|
-
self.class.connection.execute("LOCK TABLE #{self.class.table_name} IN EXCLUSIVE MODE")
|
25
|
-
end
|
26
|
-
last_record = self.class.class_exec(self, &@@seq_on).
|
27
|
-
order("sequential_id DESC").
|
28
|
-
first
|
29
|
-
self.sequential_id = if last_record
|
30
|
-
last_record.sequential_id + 1
|
31
|
-
else
|
32
|
-
@@seq_on_opts[:starts_at] || 1
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
3
|
+
ActiveRecord::Base.send(:include, SequenceOn::SequencedOn)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequence_on
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy SEBAN
|
@@ -9,7 +9,49 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2017-05-18 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.1'
|
13
55
|
description: Flexible acts_as_sequenced replacement
|
14
56
|
email: tech@qonto.eu
|
15
57
|
executables: []
|
@@ -17,6 +59,7 @@ extensions: []
|
|
17
59
|
extra_rdoc_files: []
|
18
60
|
files:
|
19
61
|
- lib/sequence_on.rb
|
62
|
+
- lib/sequence_on/sequenced_on.rb
|
20
63
|
homepage: https://github.com/qonto/sequence_on
|
21
64
|
licenses:
|
22
65
|
- MIT
|