sequel-pg_defer_constraints 0.0.1 → 1.0.0

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: c9c60a6db2b4ee66abe96418eddc7984d85c09f7
4
- data.tar.gz: e134632718afd33ffd74e2915fc95ed943531ff5
3
+ metadata.gz: 0c701f9fba580cfbd0ea5a3641d7050fffb49cb9
4
+ data.tar.gz: 49252dd0673e43f877e4174d09c12780e2e52b96
5
5
  SHA512:
6
- metadata.gz: 164c3836168ad8ef98261e17c85d9d0319ad25cc20df98ee24f9db6c3e78ad35f49fefd7ef5469c37aa1cd32bd45cbd3f98ccf9073aa3992805d8a59f94b8141
7
- data.tar.gz: a92883af1a9722ec6505e94082bd77f7c254a866e0f49a0b9b3f1e27323c2340261cbe83e702dbe77cf56ca4f572c170fe202ba1cd298af62b5ae9984c7794f9
6
+ metadata.gz: 7259147ef897cb8c7f0d5065533cdaec2ca0dbc5b5c6f1a1519008709742c1e4f8a3787f5489527941551d018f3dad47cd19937939de95a3fbc46c18b5f2123a
7
+ data.tar.gz: bda18270ad24eaaba5f5bd652975fb50bf01a840b83fd52003f49ac768b910c07d889f1c2233d6f6511b58a36cbe378c221182281733a3d75f3a0ea5b56ea6ee
@@ -0,0 +1,2 @@
1
+ service_name: travis-ci
2
+ repo_token: JTD3DGOYYZ6yzYKWXzc8QyTtv6t8iG4fa
@@ -0,0 +1 @@
1
+ sequel-pg_defer_constraints
@@ -0,0 +1 @@
1
+ ruby-2.3.0
@@ -0,0 +1,29 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0
6
+ - 2.1
7
+ - 2.2
8
+ - 2.3.0
9
+ - 2.4.0
10
+ - 2.5.0
11
+ - jruby-1.7.25
12
+ - jruby-9.1.7.0
13
+ - ruby-head
14
+ - jruby-head
15
+
16
+ env:
17
+ - DB=postgresql
18
+
19
+ matrix:
20
+ fast_finish: true
21
+ allow_failures:
22
+ - rvm: ruby-head
23
+ - rvm: jruby-head
24
+
25
+ before_install:
26
+ - gem install bundler
27
+
28
+ before_script:
29
+ - psql -c 'create database pg_defer_constraints_test' -U postgres
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Sequel::Postgres::DeferConstraints
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/sequel-pg_defer_constraints.svg)](https://rubygems.org/gems/sequel-pg_defer_constraints)
4
+ [![Build Status](https://travis-ci.org/gabynaiman/sequel-pg_defer_constraints.svg?branch=master)](https://travis-ci.org/gabynaiman/sequel-pg_defer_constraints)
5
+ [![Coverage Status](https://coveralls.io/repos/github/gabynaiman/sequel-pg_defer_constraints/badge.svg?branch=master)](https://coveralls.io/github/gabynaiman/sequel-pg_defer_constraints?branch=master)
6
+ [![Code Climate](https://codeclimate.com/github/gabynaiman/sequel-pg_defer_constraints.svg)](https://codeclimate.com/github/gabynaiman/sequel-pg_defer_constraints)
7
+ [![Dependency Status](https://gemnasium.com/gabynaiman/sequel-pg_defer_constraints.svg)](https://gemnasium.com/gabynaiman/sequel-pg_defer_constraints)
8
+
3
9
  Disable and enable PG constraints
4
10
 
5
11
  ## Installation
@@ -25,7 +31,7 @@ db = Sequel.connect ...
25
31
 
26
32
  db.extension :pg_defer_constraints
27
33
 
28
- db.defer_constraints :public, :custom_schema do
34
+ db.defer_constraints do
29
35
  ...
30
36
  end
31
37
  ```
data/Rakefile CHANGED
@@ -1,2 +1,17 @@
1
- require "bundler/gem_tasks"
2
- task :default => :spec
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:spec) do |t|
5
+ t.libs << 'spec'
6
+ t.libs << 'lib'
7
+ t.pattern = ENV['DIR'] ? File.join(ENV['DIR'], '**', '*_spec.rb') : 'spec/**/*_spec.rb'
8
+ t.verbose = false
9
+ t.warning = false
10
+ t.loader = nil if ENV['TEST']
11
+ ENV['TEST'], ENV['LINE'] = ENV['TEST'].split(':') if ENV['TEST'] && !ENV['LINE']
12
+ t.options = ''
13
+ t.options << "--name=/#{ENV['NAME']}/ " if ENV['NAME']
14
+ t.options << "-l #{ENV['LINE']} " if ENV['LINE'] && ENV['TEST']
15
+ end
16
+
17
+ task :default => :spec
@@ -2,30 +2,21 @@ module Sequel
2
2
  module Postgres
3
3
  module DeferConstraintsMethods
4
4
 
5
- def defer_constraints(*schemas)
6
- schemas = ['public'] if schemas.empty?
7
-
8
- tables_by_schema = schemas.each_with_object({}) do |schema, h|
9
- h[schema] = self.from(Sequel[:information_schema][:tables])
10
- .where(table_schema: schema, table_type: 'BASE TABLE')
11
- .select_map(:table_name)
12
- end
13
-
14
- tables_by_schema.each do |schema, tables|
15
- tables.each { |t| run "ALTER TABLE \"#{schema}\".\"#{t}\" DISABLE TRIGGER ALL" }
16
- end
17
-
18
- yield
19
-
20
- ensure
21
- tables_by_schema.each do |schema, tables|
22
- tables.each { |t| run "ALTER TABLE \"#{schema}\".\"#{t}\" ENABLE TRIGGER ALL" }
5
+ def defer_constraints
6
+ transaction(savepoint: true) do
7
+ run 'SET CONSTRAINTS ALL DEFERRED'
8
+ result = yield
9
+ run 'SET CONSTRAINTS ALL IMMEDIATE'
10
+ result
23
11
  end
24
12
  end
25
13
 
26
14
  end
27
15
 
28
16
  Database.register_extension(:pg_defer_constraints, Postgres::DeferConstraintsMethods)
29
-
17
+
30
18
  end
31
- end
19
+ end
20
+
21
+
22
+
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'sequel-pg_defer_constraints'
7
- spec.version = '0.0.1'
7
+ spec.version = '1.0.0'
8
8
  spec.authors = ['Gabriel Naiman']
9
9
  spec.email = ['gabynaiman@gmail.com']
10
10
  spec.summary = 'Disable and enable PG constraints'
@@ -18,4 +18,19 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ['lib']
19
19
 
20
20
  spec.add_runtime_dependency 'sequel', '>= 5'
21
+
22
+ if RUBY_ENGINE == 'jruby'
23
+ spec.add_development_dependency 'jdbc-postgres', '~> 9.4'
24
+ else
25
+ spec.add_development_dependency 'pg', '~> 0.18'
26
+ end
27
+
28
+ spec.add_development_dependency 'bundler', '~> 1.12'
29
+ spec.add_development_dependency 'rake', '~> 11.0'
30
+ spec.add_development_dependency 'minitest', '~> 5.0'
31
+ spec.add_development_dependency 'minitest-colorin', '~> 0.1'
32
+ spec.add_development_dependency 'minitest-line', '~> 0.6'
33
+ spec.add_development_dependency 'simplecov', '~> 0.12'
34
+ spec.add_development_dependency 'coveralls', '~> 0.8'
35
+ spec.add_development_dependency 'pry-nav', '~> 0.2'
21
36
  end
@@ -0,0 +1,5 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter]
5
+ SimpleCov.start
@@ -0,0 +1,47 @@
1
+ require 'coverage_helper'
2
+ require 'minitest/autorun'
3
+ require 'minitest/colorin'
4
+ require 'pry-nav'
5
+ require 'logger'
6
+ require 'sequel'
7
+ require 'sequel/extensions/pg_defer_constraints'
8
+
9
+ if RUBY_ENGINE == 'jruby'
10
+ require 'jdbc/postgres'
11
+ else
12
+ require 'pg'
13
+ end
14
+
15
+ adapter = RUBY_ENGINE == 'jruby' ? 'jdbc:postgresql' : 'postgres'
16
+
17
+ DB = Sequel.connect "#{adapter}://localhost/pg_defer_constraints_test?user=postgres&password=password"
18
+
19
+ DB.extension :pg_defer_constraints
20
+
21
+ DB.drop_table? :people
22
+ DB.drop_table? :users
23
+
24
+ DB.create_table :users do
25
+ primary_key :id
26
+ String :name, null: false, unique: true
27
+ end
28
+
29
+ DB.create_table :people do
30
+ String :document_number, null: false, primary_key: true
31
+ String :first_name, null: false
32
+ String :last_name, null: false
33
+ Date :birth_date, null: false
34
+ foreign_key :user_id, :users, null: false, deferrable: :immediate, unique: true
35
+ end
36
+
37
+ class Minitest::Test
38
+
39
+ alias_method :__run__, :run
40
+
41
+ def run(*args)
42
+ DB.transaction(rollback: :always, savepoint: true) do
43
+ __run__(*args)
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,50 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Sequel::Postgres::DeferConstraintsMethods do
4
+
5
+ before do
6
+ (1..5).each do |id|
7
+ DB[:users].insert id: id , name: "user_#{id}"
8
+
9
+ DB[:people].insert document_number: "#{id}",
10
+ first_name: "person_#{id}",
11
+ last_name: 'test',
12
+ birth_date: Time.at(0),
13
+ user_id: id
14
+ end
15
+ end
16
+
17
+ it 'Remove a parent entity and not the child must raise exception on commit deferring constraints' do
18
+ proc do
19
+ DB.defer_constraints do
20
+ (1..5).each { |id| DB[:users].where(id: id.to_s).delete }
21
+ DB[:users].count.must_equal 0
22
+ end
23
+ end.must_raise Sequel::ForeignKeyConstraintViolation
24
+ DB[:users].count.must_equal 5
25
+ end
26
+
27
+ it 'Remove a parent entity and not the child must raise exception on statement execution not deferring constraints' do
28
+ proc do
29
+ DB.transaction(savepoint: true) do
30
+ (1..5).each { |id| DB[:users].where(id: id.to_s).delete }
31
+ end
32
+ end.must_raise Sequel::ForeignKeyConstraintViolation
33
+ DB[:users].count.must_equal 5
34
+ end
35
+
36
+
37
+ it 'Removing parent childs and then the childs deferring constraints not raise exception and is OK' do
38
+ DB.defer_constraints do
39
+ (1..5).each { |id| DB[:users].where(id: id.to_s).delete }
40
+ DB[:users].count.must_equal 0
41
+
42
+ (1..5).each { |id| DB[:people].where(document_number: id.to_s).delete }
43
+ DB[:people].count.must_equal 0
44
+ end
45
+
46
+ DB[:users].count.must_equal 0
47
+ DB[:people].count.must_equal 0
48
+ end
49
+
50
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-pg_defer_constraints
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-19 00:00:00.000000000 Z
11
+ date: 2018-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -24,6 +24,132 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.18'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.18'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '11.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '11.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest-colorin
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest-line
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.6'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.12'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.12'
125
+ - !ruby/object:Gem::Dependency
126
+ name: coveralls
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.8'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.8'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-nav
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.2'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.2'
27
153
  description: Disable and enable PG constraints
28
154
  email:
29
155
  - gabynaiman@gmail.com
@@ -31,13 +157,20 @@ executables: []
31
157
  extensions: []
32
158
  extra_rdoc_files: []
33
159
  files:
160
+ - ".coveralls.yml"
34
161
  - ".gitignore"
162
+ - ".ruby-gemset"
163
+ - ".ruby-version"
164
+ - ".travis.yml"
35
165
  - Gemfile
36
166
  - LICENSE.txt
37
167
  - README.md
38
168
  - Rakefile
39
169
  - lib/sequel/extensions/pg_defer_constraints.rb
40
170
  - sequel-pg_defer_constraints.gemspec
171
+ - spec/coverage_helper.rb
172
+ - spec/minitest_helper.rb
173
+ - spec/pg_defer_constraints_spec.rb
41
174
  homepage: https://github.com/gabynaiman/sequel-pg_defer_constraints
42
175
  licenses:
43
176
  - MIT
@@ -58,8 +191,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
191
  version: '0'
59
192
  requirements: []
60
193
  rubyforge_project:
61
- rubygems_version: 2.6.8
194
+ rubygems_version: 2.5.1
62
195
  signing_key:
63
196
  specification_version: 4
64
197
  summary: Disable and enable PG constraints
65
- test_files: []
198
+ test_files:
199
+ - spec/coverage_helper.rb
200
+ - spec/minitest_helper.rb
201
+ - spec/pg_defer_constraints_spec.rb