active_record-sequence 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2043cdec6848e80f36c99347db78eb9d68f879a2
4
+ data.tar.gz: cd9abcd82560fb81592fd8542c30760e89f450fa
5
+ SHA512:
6
+ metadata.gz: 78c26a534695256415675748ba9fa6d2c6b9b2ca617146f226e1d5e447f5940bfb3c45614ba9bebfc0d9ee4e21104a16e9376498529e96fe21483364315d3b84
7
+ data.tar.gz: 7057f3e410367eefded9028303b65993887cc78b1df61d154e0adbd14f920df3e4a3d16c30e70e72882ee6da022a295cf052642c98646c073c819408720a2439
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ inherit_gem:
2
+ spbtv_code_style: .strict_rubocop.yml
3
+
4
+ AllCops:
5
+ Exclude:
6
+ - gemfiles/**/*
data/.travis.yml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ language: ruby
3
+ rvm:
4
+ - 2.2.5
5
+ - 2.3.1
6
+ services:
7
+ - postgresql
8
+ before_script:
9
+ - "./bin/setup"
10
+ script:
11
+ - bundle exec rake spec
12
+ - bundle exec rubocop --fail-level C
13
+ gemfile:
14
+ - gemfiles/rails_4.2.7.gemfile
15
+ - gemfiles/rails_5.0.0.gemfile
data/Appraisals ADDED
@@ -0,0 +1,28 @@
1
+ require 'yaml'
2
+
3
+ ruby_versions = %w(2.2.5 2.3.1)
4
+ rails_versions = %w(4.2.7 5.0.0)
5
+
6
+ rails_versions.each do |rails_version|
7
+ appraise "rails_#{rails_version}" do
8
+ gem 'activerecord', rails_version
9
+ end
10
+ end
11
+
12
+ travis = ::YAML.dump(
13
+ 'language' => 'ruby',
14
+ 'rvm' => ruby_versions,
15
+ 'services' => ['postgresql'],
16
+ 'before_script' => [
17
+ './bin/setup',
18
+ ],
19
+ 'script' => [
20
+ 'bundle exec rake spec',
21
+ 'bundle exec rubocop --fail-level C'
22
+ ],
23
+ 'gemfile' => Dir.glob('gemfiles/*.gemfile'),
24
+ )
25
+
26
+ ::File.open('.travis.yml', 'w+') do |file|
27
+ file.write(travis)
28
+ end
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in active_record-sequence.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,136 @@
1
+ [![Build Status](https://travis-ci.org/bolshakov/active_record-sequence.svg?branch=master)](https://travis-ci.org/bolshakov/active_record-sequence)
2
+
3
+ # ActiveRecord::Sequence
4
+
5
+ Access to [PostgreSQL's Sequences](https://www.postgresql.org/docs/8.1/static/sql-createsequence.html)
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'active_record-sequence'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install active_record-sequence
22
+
23
+ ## Usage
24
+
25
+ By default new sequence starts from `1`:
26
+
27
+ ```ruby
28
+ sequence = ActiveRecord::Sequence.create('numbers')
29
+ ```
30
+
31
+ `#next` returns next value in the sequence:
32
+
33
+ ```ruby
34
+ sequence.next #=> 1
35
+ sequence.next #=> 2
36
+ ```
37
+
38
+ `#peek` returns current value:
39
+
40
+ ```ruby
41
+ sequence.peek #=> 2
42
+ ```
43
+
44
+ You can start a sequence with specific value:
45
+
46
+ ```ruby
47
+ sequence = ActiveRecord::Sequence.create('numbers', start: 42)
48
+ sequence.next #=> 42
49
+ sequence.next #=> 43
50
+ ```
51
+
52
+ Specify custom increment value:
53
+
54
+ ```ruby
55
+ sequence = ActiveRecord::Sequence.create('numbers', increment: 3)
56
+ sequence.next #=> 1
57
+ sequence.next #=> 4
58
+ ```
59
+
60
+ If you pass negative increment, a sequence will be decreasing:
61
+
62
+ ```ruby
63
+ sequence = ActiveRecord::Sequence.create('numbers', increment: -3)
64
+ sequence.next #=> -1
65
+ sequence.next #=> -4
66
+ ```
67
+
68
+ To limit number of elements in a sequence specify `max` value:
69
+
70
+ ```ruby
71
+ sequence = ActiveRecord::Sequence.create('numbers', max: 2)
72
+ sequence.next #=> 1
73
+ sequence.next #=> 2
74
+ sequence.next #=> fail with StopIteration
75
+ ```
76
+
77
+ Decreasing sequence may be limited as well:
78
+
79
+ ```ruby
80
+ sequence = ActiveRecord::Sequence.create('numbers', min: -2, increment: -1)
81
+ sequence.next #=> -1
82
+ sequence.next #=> -2
83
+ sequence.next #=> fail with StopIteration
84
+ ```
85
+
86
+ To define infinite sequence, use `cycle` option:
87
+
88
+ ```ruby
89
+ sequence = ActiveRecord::Sequence.create('numbers', max: 2, cycle: true)
90
+ sequence.next #=> 1
91
+ sequence.next #=> 2
92
+ sequence.next #=> 1
93
+ sequence.next #=> 2
94
+ # etc.
95
+ ```
96
+
97
+ You con use previously created sequence by instantiating `Sequence` class:
98
+
99
+ ```ruby
100
+ ActiveRecord::Sequence.create('numbers', max: 2, cycle: true)
101
+ sequence = ActiveRecord::Sequence.new('numbers')
102
+ sequence.next #=> 1
103
+ sequence.next #=> 2
104
+ sequence.next #=> 1
105
+ ```
106
+
107
+ To destroy a sequence:
108
+
109
+ ```ruby
110
+ ActiveRecord::Sequence.drop('numbers')
111
+ ```
112
+
113
+ ## Development
114
+
115
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake` to run the tests.
116
+ You can also run `bin/console` for an interactive prompt that will allow you to experiment.
117
+
118
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a
119
+ new version, update the version number in `version.rb`, and then run `bundle exec rake release`,
120
+ which will create a git tag for the version, push git commits and tags, and push the `.gem`
121
+ file to [rubygems.org](https://rubygems.org).
122
+
123
+
124
+ We test this gem against different versions of `ActiveRecord` using [appraisal](https://github.com/thoughtbot/appraisal) gem.
125
+ To regenerate gemfiles run:
126
+
127
+ $ appraisal install
128
+
129
+ To run specs against all versions:
130
+
131
+ $ appraisal rake spec
132
+
133
+ ## Contributing
134
+
135
+ Bug reports and pull requests are welcome on GitHub at https://github.com/bolshakov/active_record-sequence.
136
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'active_record/sequence/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'active_record-sequence'
8
+ spec.version = ActiveRecord::Sequence::VERSION
9
+ spec.authors = ['Tema Bolshakov']
10
+ spec.email = ['abolshakov@spbtv.com']
11
+
12
+ spec.summary = "Provide access to PostgreSQL's sequences"
13
+ spec.description = "Provide access to PostgreSQL's sequences"
14
+ spec.homepage = 'https://github.com/bolshakov/active_record-sequence'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = 'exe'
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'activerecord', '>= 3.2', '< 6.0.0'
22
+ spec.add_development_dependency 'appraisal', '2.1.0'
23
+ spec.add_development_dependency 'bundler', '1.13.1'
24
+ spec.add_development_dependency 'pg', '0.19.0'
25
+ spec.add_development_dependency 'rake', '11.3.0'
26
+ spec.add_development_dependency 'rspec', '3.5.0'
27
+ spec.add_development_dependency 'spbtv_code_style', '1.4.1'
28
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'active_record/sequence'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+ psql -c 'create database travis_ci_test;' -U postgres
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "4.2.7"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,88 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ active_record-sequence (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ activemodel (4.2.7)
10
+ activesupport (= 4.2.7)
11
+ builder (~> 3.1)
12
+ activerecord (4.2.7)
13
+ activemodel (= 4.2.7)
14
+ activesupport (= 4.2.7)
15
+ arel (~> 6.0)
16
+ activesupport (4.2.7)
17
+ i18n (~> 0.7)
18
+ json (~> 1.7, >= 1.7.7)
19
+ minitest (~> 5.1)
20
+ thread_safe (~> 0.3, >= 0.3.4)
21
+ tzinfo (~> 1.1)
22
+ appraisal (2.1.0)
23
+ bundler
24
+ rake
25
+ thor (>= 0.14.0)
26
+ arel (6.0.3)
27
+ ast (2.3.0)
28
+ builder (3.2.2)
29
+ diff-lcs (1.2.5)
30
+ i18n (0.7.0)
31
+ json (1.8.3)
32
+ minitest (5.9.0)
33
+ parser (2.3.1.2)
34
+ ast (~> 2.2)
35
+ pg (0.19.0)
36
+ powerpack (0.1.1)
37
+ rainbow (2.1.0)
38
+ rake (11.3.0)
39
+ rspec (3.5.0)
40
+ rspec-core (~> 3.5.0)
41
+ rspec-expectations (~> 3.5.0)
42
+ rspec-mocks (~> 3.5.0)
43
+ rspec-core (3.5.3)
44
+ rspec-support (~> 3.5.0)
45
+ rspec-expectations (3.5.0)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.5.0)
48
+ rspec-mocks (3.5.0)
49
+ diff-lcs (>= 1.2.0, < 2.0)
50
+ rspec-support (~> 3.5.0)
51
+ rspec-support (3.5.0)
52
+ rspec_junit_formatter (0.2.3)
53
+ builder (< 4)
54
+ rspec-core (>= 2, < 4, != 2.12.0)
55
+ rubocop (0.40.0)
56
+ parser (>= 2.3.1.0, < 3.0)
57
+ powerpack (~> 0.1)
58
+ rainbow (>= 1.99.1, < 3.0)
59
+ ruby-progressbar (~> 1.7)
60
+ unicode-display_width (~> 1.0, >= 1.0.1)
61
+ rubocop-checkstyle_formatter (0.3.0)
62
+ rubocop (>= 0.30.1)
63
+ ruby-progressbar (1.8.1)
64
+ spbtv_code_style (1.4.1)
65
+ rspec_junit_formatter
66
+ rubocop (= 0.40.0)
67
+ rubocop-checkstyle_formatter
68
+ thor (0.19.1)
69
+ thread_safe (0.3.5)
70
+ tzinfo (1.2.2)
71
+ thread_safe (~> 0.1)
72
+ unicode-display_width (1.1.1)
73
+
74
+ PLATFORMS
75
+ ruby
76
+
77
+ DEPENDENCIES
78
+ active_record-sequence!
79
+ activerecord (= 4.2.7)
80
+ appraisal (= 2.1.0)
81
+ bundler (= 1.13.1)
82
+ pg (= 0.19.0)
83
+ rake (= 11.3.0)
84
+ rspec (= 3.5.0)
85
+ spbtv_code_style (= 1.4.1)
86
+
87
+ BUNDLED WITH
88
+ 1.13.1
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "5.0.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,86 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ active_record-sequence (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ activemodel (5.0.0)
10
+ activesupport (= 5.0.0)
11
+ activerecord (5.0.0)
12
+ activemodel (= 5.0.0)
13
+ activesupport (= 5.0.0)
14
+ arel (~> 7.0)
15
+ activesupport (5.0.0)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (~> 0.7)
18
+ minitest (~> 5.1)
19
+ tzinfo (~> 1.1)
20
+ appraisal (2.1.0)
21
+ bundler
22
+ rake
23
+ thor (>= 0.14.0)
24
+ arel (7.1.1)
25
+ ast (2.3.0)
26
+ builder (3.2.2)
27
+ concurrent-ruby (1.0.2)
28
+ diff-lcs (1.2.5)
29
+ i18n (0.7.0)
30
+ minitest (5.9.0)
31
+ parser (2.3.1.2)
32
+ ast (~> 2.2)
33
+ pg (0.19.0)
34
+ powerpack (0.1.1)
35
+ rainbow (2.1.0)
36
+ rake (11.3.0)
37
+ rspec (3.5.0)
38
+ rspec-core (~> 3.5.0)
39
+ rspec-expectations (~> 3.5.0)
40
+ rspec-mocks (~> 3.5.0)
41
+ rspec-core (3.5.3)
42
+ rspec-support (~> 3.5.0)
43
+ rspec-expectations (3.5.0)
44
+ diff-lcs (>= 1.2.0, < 2.0)
45
+ rspec-support (~> 3.5.0)
46
+ rspec-mocks (3.5.0)
47
+ diff-lcs (>= 1.2.0, < 2.0)
48
+ rspec-support (~> 3.5.0)
49
+ rspec-support (3.5.0)
50
+ rspec_junit_formatter (0.2.3)
51
+ builder (< 4)
52
+ rspec-core (>= 2, < 4, != 2.12.0)
53
+ rubocop (0.40.0)
54
+ parser (>= 2.3.1.0, < 3.0)
55
+ powerpack (~> 0.1)
56
+ rainbow (>= 1.99.1, < 3.0)
57
+ ruby-progressbar (~> 1.7)
58
+ unicode-display_width (~> 1.0, >= 1.0.1)
59
+ rubocop-checkstyle_formatter (0.3.0)
60
+ rubocop (>= 0.30.1)
61
+ ruby-progressbar (1.8.1)
62
+ spbtv_code_style (1.4.1)
63
+ rspec_junit_formatter
64
+ rubocop (= 0.40.0)
65
+ rubocop-checkstyle_formatter
66
+ thor (0.19.1)
67
+ thread_safe (0.3.5)
68
+ tzinfo (1.2.2)
69
+ thread_safe (~> 0.1)
70
+ unicode-display_width (1.1.1)
71
+
72
+ PLATFORMS
73
+ ruby
74
+
75
+ DEPENDENCIES
76
+ active_record-sequence!
77
+ activerecord (= 5.0.0)
78
+ appraisal (= 2.1.0)
79
+ bundler (= 1.13.1)
80
+ pg (= 0.19.0)
81
+ rake (= 11.3.0)
82
+ rspec (= 3.5.0)
83
+ spbtv_code_style (= 1.4.1)
84
+
85
+ BUNDLED WITH
86
+ 1.13.1
@@ -0,0 +1,11 @@
1
+ module ActiveRecord
2
+ class Sequence
3
+ Error = Class.new(StandardError)
4
+ # Sequence is already exists and thus could not be created.
5
+ AlreadyExist = Class.new(Error)
6
+ # To obtain current value, you have to call `#next` first.
7
+ CurrentValueUndefined = Class.new(Error)
8
+ # Sequence is not exists and thus could not be deleted or accessed.
9
+ NotExist = Class.new(Error)
10
+ end
11
+ end
@@ -0,0 +1,48 @@
1
+ module ActiveRecord
2
+ class Sequence # rubocop:disable Style/Documentation
3
+ # Builds SQL statement for creating sequence
4
+ # @api private
5
+ class SequenceSQLBuilder
6
+ attr_reader :options
7
+ attr_reader :parts
8
+
9
+ def initialize(name, options = {})
10
+ @options = options
11
+ @parts = [format('CREATE SEQUENCE %s', name)]
12
+ end
13
+
14
+ def to_sql
15
+ configure_increment
16
+ configure_min_value
17
+ configure_max_value
18
+ configure_start_value
19
+ configure_cycle
20
+ parts.join(' ')
21
+ end
22
+
23
+ private
24
+
25
+ def configure_increment
26
+ parts << format('INCREMENT BY %s', options[:increment]) if options[:increment]
27
+ end
28
+
29
+ def configure_min_value
30
+ parts << format('MINVALUE %s', options[:min]) if options[:min]
31
+ end
32
+
33
+ def configure_max_value
34
+ parts << format('MAXVALUE %s', options[:max]) if options[:max]
35
+ end
36
+
37
+ def configure_start_value
38
+ parts << format('START %s', options[:start]) if options[:start]
39
+ end
40
+
41
+ def configure_cycle
42
+ parts << (options.fetch(:cycle, false) ? 'CYCLE' : 'NO CYCLE')
43
+ end
44
+ end
45
+
46
+ private_constant(:SequenceSQLBuilder)
47
+ end
48
+ end
@@ -0,0 +1,5 @@
1
+ module ActiveRecord
2
+ class Sequence
3
+ VERSION = '0.1.0'.freeze
4
+ end
5
+ end
@@ -0,0 +1,117 @@
1
+ require 'active_record'
2
+ require 'active_record/sequence/version'
3
+ require 'active_record/sequence/error'
4
+ require 'active_support/core_ext/module/delegation'
5
+
6
+ module ActiveRecord
7
+ # Usage
8
+ # sequence = Sequence.new('numbers')
9
+ # sequence.next #=> 1
10
+ # sequence.peek #=> 1
11
+ # sequence.next #=> 2
12
+ #
13
+ class Sequence
14
+ autoload :SequenceSQLBuilder, 'active_record/sequence/sequence_sql_builder'
15
+
16
+ class << self
17
+ CREATE_ERRORS = {
18
+ 'PG::DuplicateTable' => ActiveRecord::Sequence::AlreadyExist,
19
+ }.freeze
20
+ # Create sequence
21
+ # @param name [String]
22
+ # @param options [{}]
23
+ # @option options [Integer] :start (1)
24
+ # @option options [Integer] :increment (1) specifies which value is added to
25
+ # the current sequence value to create a new value. A positive value will
26
+ # make an ascending sequence, a negative one a descending sequence.
27
+ # @option options [Integer] :min determines the minimum value a sequence can generate.
28
+ # The defaults are 1 and -2^63-1 for ascending and descending sequences, respectively.
29
+ # @option options [Integer] :max determines the maximum value for the sequence.
30
+ # The defaults are 2^63-1 and -1 for ascending and descending sequences, respectively.
31
+ # @option options [Boolean] :cycle (false) allows the sequence to wrap around when the
32
+ # max value or min value has been reached by an ascending or descending sequence respectively.
33
+ # If the limit is reached, the next number generated will be the min value or max value, respectively.
34
+ # @return [Sequence]
35
+ # @see https://www.postgresql.org/docs/8.1/static/sql-createsequence.html
36
+ def create(name, options = {})
37
+ create_sql = SequenceSQLBuilder.new(name, options).to_sql
38
+ handle_postgres_errors(CREATE_ERRORS) do
39
+ connection.execute(create_sql)
40
+ end
41
+ new(name)
42
+ end
43
+
44
+ DROP_ERRORS = {
45
+ 'PG::UndefinedTable' => NotExist,
46
+ }.freeze
47
+
48
+ # @param name [String]
49
+ # @return [void]
50
+ def drop(name)
51
+ drop_sql = format('DROP SEQUENCE %s', name)
52
+ handle_postgres_errors(DROP_ERRORS) do
53
+ connection.execute(drop_sql)
54
+ end
55
+ end
56
+
57
+ def connection
58
+ @connection ||= ActiveRecord::Base.retrieve_connection
59
+ end
60
+
61
+ # @param mappings [{}] from PG errors to library errors
62
+ # @api private
63
+ def handle_postgres_errors(mappings)
64
+ yield
65
+ rescue ActiveRecord::StatementInvalid => error
66
+ library_error = mappings.fetch(error.cause.class.name) { raise }
67
+ raise library_error
68
+ end
69
+ end
70
+
71
+ attr_reader :name
72
+
73
+ # @param name [String]
74
+ def initialize(name)
75
+ @name = name
76
+ @connection = self.class.connection
77
+ end
78
+
79
+ NEXT_ERRORS = {
80
+ 'PG::ObjectNotInPrerequisiteState' => StopIteration,
81
+ 'PG::UndefinedTable' => ActiveRecord::Sequence::NotExist,
82
+ }.freeze
83
+
84
+ # @return [Integer]
85
+ def next
86
+ next_sql = 'SELECT nextval(%s)'.freeze
87
+ handle_postgres_errors(NEXT_ERRORS) do
88
+ execute(next_sql, name)
89
+ end
90
+ end
91
+
92
+ PEEK_ERRORS = {
93
+ 'PG::ObjectNotInPrerequisiteState' => ActiveRecord::Sequence::CurrentValueUndefined,
94
+ 'PG::UndefinedTable' => ActiveRecord::Sequence::NotExist,
95
+ }.freeze
96
+
97
+ # @return [Integer]
98
+ def peek
99
+ current_sql = 'SELECT currval(%s)'.freeze
100
+ handle_postgres_errors(PEEK_ERRORS) do
101
+ execute(current_sql, name)
102
+ end
103
+ end
104
+
105
+ private
106
+
107
+ attr_reader :connection
108
+ delegate :handle_postgres_errors, to: :class
109
+
110
+ def execute(sql, *args)
111
+ quoted_args = args.map { |arg| connection.quote(arg) }
112
+ formatted_sql = format(sql, *quoted_args)
113
+
114
+ connection.select_value(formatted_sql).to_i
115
+ end
116
+ end
117
+ end
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_record-sequence
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tema Bolshakov
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-09-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.2'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 6.0.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 6.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: appraisal
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '='
38
+ - !ruby/object:Gem::Version
39
+ version: 2.1.0
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '='
45
+ - !ruby/object:Gem::Version
46
+ version: 2.1.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.13.1
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '='
59
+ - !ruby/object:Gem::Version
60
+ version: 1.13.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: pg
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '='
66
+ - !ruby/object:Gem::Version
67
+ version: 0.19.0
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '='
73
+ - !ruby/object:Gem::Version
74
+ version: 0.19.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '='
80
+ - !ruby/object:Gem::Version
81
+ version: 11.3.0
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '='
87
+ - !ruby/object:Gem::Version
88
+ version: 11.3.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '='
94
+ - !ruby/object:Gem::Version
95
+ version: 3.5.0
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '='
101
+ - !ruby/object:Gem::Version
102
+ version: 3.5.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: spbtv_code_style
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.4.1
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '='
115
+ - !ruby/object:Gem::Version
116
+ version: 1.4.1
117
+ description: Provide access to PostgreSQL's sequences
118
+ email:
119
+ - abolshakov@spbtv.com
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - ".gitignore"
125
+ - ".rspec"
126
+ - ".rubocop.yml"
127
+ - ".travis.yml"
128
+ - Appraisals
129
+ - Gemfile
130
+ - README.md
131
+ - Rakefile
132
+ - active_record-sequence.gemspec
133
+ - bin/console
134
+ - bin/setup
135
+ - gemfiles/rails_4.2.7.gemfile
136
+ - gemfiles/rails_4.2.7.gemfile.lock
137
+ - gemfiles/rails_5.0.0.gemfile
138
+ - gemfiles/rails_5.0.0.gemfile.lock
139
+ - lib/active_record/sequence.rb
140
+ - lib/active_record/sequence/error.rb
141
+ - lib/active_record/sequence/sequence_sql_builder.rb
142
+ - lib/active_record/sequence/version.rb
143
+ homepage: https://github.com/bolshakov/active_record-sequence
144
+ licenses: []
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 2.5.1
163
+ signing_key:
164
+ specification_version: 4
165
+ summary: Provide access to PostgreSQL's sequences
166
+ test_files: []