saseo 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ace1b2a4acc3bc9335423feaa6ac2683d316c05
4
- data.tar.gz: 539126fd909b07cb23d26775b9925892d7b0d078
3
+ metadata.gz: 870d97ea47c29c3c88bc485148418518159c1223
4
+ data.tar.gz: b53a277d7db97fec52f4844d298af35bc3b01abf
5
5
  SHA512:
6
- metadata.gz: 2477b4227cf676ae414d8d42fbc2a306b46aa48ed53d2b14b2d9542db00d6b08093d2f597b5ee71b6fbd080d579060483d4caa4148a06038c007ad25570395bf
7
- data.tar.gz: 28a75ce72cffcb90be7b39307b73f8230c4223b53265f64f8a7e84283b968ca02c11b9fe8ce3246c600b5932f1e9faacae1cead6caf1016c919ae2a2a80faae5
6
+ metadata.gz: dbdef412fd9e9b1d0a539178016a6687efd44293e560fb05fb12955819ffa36e25d91e97617491b382649aa3d05a3b448276f525b4f8e08764200198b3ae1f2f
7
+ data.tar.gz: 83ee5c66b3a9d72cf594072999efc04de69ebc5434b04a3dcaefac23ecdadc8f844c4098d9f156f0c3c1d0e6621f6db920fc957fa845a19b2f0582755c52ff8f
@@ -0,0 +1,55 @@
1
+ require 'active_record/base'
2
+
3
+ module Saseo
4
+ module Extensions
5
+ module ActiveRecord
6
+ module AdapterMixin
7
+ extend self
8
+
9
+ def begin_db_transaction
10
+ execute 'BEGIN'
11
+ Saseo::Whodunnit.set_db_whodunnit
12
+ end
13
+
14
+ def notify(channel, payload)
15
+ conn = instance_variable_get(:@connection)
16
+ conn.async_exec "SELECT pg_notify('#{channel}', '#{payload.to_s}')"
17
+ end
18
+
19
+ # Heavily cribbed from Sequel:
20
+ # https://github.com/jeremyevans/sequel/blob/c6678741ce34aac52cff966ff6a6288ccb8d5b75/lib/sequel/adapters/postgres.rb#L440
21
+ def listen(channels:, after_listen: nil, timeout: nil, loop: false, &block)
22
+ if loop && !block
23
+ raise ArgumentError, 'calling #listen with :loop requires a block'
24
+ end
25
+ channels = Array(channels)
26
+
27
+ timeout_block = timeout.respond_to?(:call) ? timeout : proc { timeout }
28
+ loop_callable = loop.respond_to?(:call)
29
+ begin
30
+ conn = instance_variable_get(:@connection)
31
+ channels.each do |channel|
32
+ conn.async_exec "LISTEN \"#{channel}\""
33
+ ::ActiveRecord::Base.logger.try(:debug) { "listening to #{channel}..." }
34
+
35
+ end
36
+ after_listen.call(conn) if after_listen
37
+
38
+ if loop
39
+ catch(:stop) do
40
+ loop do
41
+ conn.wait_for_notify(timeout_block.call, &block)
42
+ loop.call(conn) if loop_callable
43
+ end
44
+ end
45
+ else
46
+ conn.wait_for_notify(timeout_block.call, &block)
47
+ end
48
+ ensure
49
+ conn.async_exec 'UNLISTEN *'
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,9 +1,8 @@
1
1
  require 'saseo/extensions/active_record/detector'
2
- require 'saseo/extensions/active_record/patcher'
3
2
 
4
- module Saseo
5
- module Extensions
6
- module ActiveRecord
7
- end
8
- end
9
- end
3
+ if Saseo::Extensions::ActiveRecord::Detector.active_record_detected? && Saseo::Extensions::ActiveRecord::Detector.active_record_version >= 3
4
+ require 'active_record/connection_adapters/postgresql_adapter'
5
+ require 'saseo/extensions/active_record/adapter_mixin'
6
+
7
+ ::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend ::Saseo::Extensions::ActiveRecord::AdapterMixin
8
+ end
@@ -1,4 +1,5 @@
1
1
  require 'active_record'
2
+ require 'saseo/extensions/active_record'
2
3
  require 'saseo/config'
3
4
  require 'saseo/publishing/data_change_message'
4
5
  require 'saseo/models/source/version'
@@ -36,7 +37,7 @@ module Saseo
36
37
 
37
38
  def run(channels: :all, loop: true, timeout: nil)
38
39
  self.channels = channels
39
- listen channels: self.channels, loop: loop, timeout: timeout do |channel, pid, payload|
40
+ db_connection.listen channels: self.channels, loop: loop, timeout: timeout do |channel, pid, payload|
40
41
  uuid = payload
41
42
  logger.debug { "received NOTIFY for source version: #{uuid}" }
42
43
 
@@ -50,48 +51,6 @@ module Saseo
50
51
  def db_connection
51
52
  Saseo::Models::Source::Base.connection
52
53
  end
53
-
54
- def notify(channel, payload)
55
- conn = db_connection.instance_variable_get(:@connection)
56
- conn.async_exec "SELECT pg_notify('#{channel}', '#{payload.to_s}')"
57
- end
58
-
59
- # Heavily cribbed from Sequel:
60
- # https://github.com/jeremyevans/sequel/blob/c6678741ce34aac52cff966ff6a6288ccb8d5b75/lib/sequel/adapters/postgres.rb#L440
61
- def listen(channels:, after_listen: nil, timeout: nil, loop: false, &block)
62
- if loop && !block
63
- raise ArgumentError, 'calling #listen with :loop requires a block'
64
- end
65
- channels = Array(channels)
66
-
67
- timeout_block = timeout.respond_to?(:call) ? timeout : proc { timeout }
68
- loop_callable = loop.respond_to?(:call)
69
- Saseo::Models::Source::Base.connection_pool.with_connection do |connection|
70
- begin
71
- conn = connection.instance_variable_get(:@connection)
72
- channels.each do |channel|
73
- conn.async_exec "LISTEN \"#{channel}\""
74
- logger.debug { "listening to #{channel}..." }
75
-
76
- end
77
- after_listen.call(conn) if after_listen
78
-
79
- if loop
80
-
81
- catch(:stop) do
82
- loop do
83
- conn.wait_for_notify(timeout_block.call, &block)
84
- loop.call(conn) if loop_callable
85
- end
86
- end
87
- else
88
- conn.wait_for_notify(timeout_block.call, &block)
89
- end
90
- ensure
91
- conn.async_exec 'UNLISTEN *'
92
- end
93
- end
94
- end
95
54
  end
96
55
  end
97
56
  end
data/lib/saseo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Saseo
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saseo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Keyes
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-08 00:00:00.000000000 Z
11
+ date: 2015-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -218,12 +218,8 @@ files:
218
218
  - lib/saseo/config/saseo_source_database.yml
219
219
  - lib/saseo/extensions.rb
220
220
  - lib/saseo/extensions/active_record.rb
221
+ - lib/saseo/extensions/active_record/adapter_mixin.rb
221
222
  - lib/saseo/extensions/active_record/detector.rb
222
- - lib/saseo/extensions/active_record/patcher.rb
223
- - lib/saseo/extensions/active_record/v_3.rb
224
- - lib/saseo/extensions/active_record/v_3/connection_adapters/postgresql_adapter.rb
225
- - lib/saseo/extensions/active_record/v_4.rb
226
- - lib/saseo/extensions/active_record/v_4/connection_adapters/postgresql/database_statements.rb
227
223
  - lib/saseo/models/base.rb
228
224
  - lib/saseo/models/source/base.rb
229
225
  - lib/saseo/models/source/version.rb
@@ -1,32 +0,0 @@
1
- require 'saseo/extensions/active_record/detector'
2
-
3
- module Saseo
4
- module Extensions
5
- module ActiveRecord
6
- module Patcher
7
- extend self
8
-
9
- UnsupportedActiveRecordVersion = Class.new(RuntimeError)
10
-
11
- EXTENSIONS = {
12
- 3 => ['saseo/extensions/active_record/v_3'],
13
- 4 => ['saseo/extensions/active_record/v_4'],
14
- }
15
-
16
- def patch_active_record!
17
- return false unless Saseo::Extensions::ActiveRecord::Detector.active_record_detected?
18
- version = Saseo::Extensions::ActiveRecord::Detector.active_record_version
19
-
20
- raise UnsupportedActiveRecordVersion.new unless EXTENSIONS.keys.include? version
21
- EXTENSIONS[version].each do |version_extension|
22
- require version_extension
23
- end
24
- true
25
- end
26
-
27
-
28
- patch_active_record!
29
- end
30
- end
31
- end
32
- end
@@ -1,26 +0,0 @@
1
- require 'saseo/extensions/active_record/detector'
2
-
3
- require 'saseo/whodunnit'
4
-
5
- module Saseo
6
- module Extensions
7
- module ActiveRecord
8
- module V3
9
- module ConnectionAdapters
10
- module PostgreSQLAdapter
11
- extend self
12
- def begin_db_transaction
13
- execute "BEGIN"
14
- Saseo::Whodunnit.set_db_whodunnit
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
22
-
23
- if Saseo::Extensions::ActiveRecord::Detector.active_record_version == 3
24
- require 'active_record/connection_adapters/postgresql_adapter'
25
- ::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend ::Saseo::Extensions::ActiveRecord::V3::ConnectionAdapters::PostgreSQLAdapter
26
- end
@@ -1,11 +0,0 @@
1
- require 'saseo/extensions/active_record/v_3/connection_adapters/postgresql_adapter'
2
-
3
- module Saseo
4
- module Extensions
5
- module ActiveRecord
6
- module V3
7
-
8
- end
9
- end
10
- end
11
- end
@@ -1,29 +0,0 @@
1
- require 'saseo/extensions/active_record/detector'
2
-
3
- require 'saseo/whodunnit'
4
-
5
- module Saseo
6
- module Extensions
7
- module ActiveRecord
8
- module V4
9
- module ConnectionAdapters
10
- module PostgreSQL
11
- module DatabaseStatements
12
- extend self
13
-
14
- def begin_db_transaction
15
- execute "BEGIN"
16
- Saseo::Whodunnit.set_db_whodunnit
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
-
26
- if Saseo::Extensions::ActiveRecord::Detector.active_record_version == 3
27
- require 'active_record/connection_adapters/postgresql_adapter'
28
- ::ActiveRecord::ConnectionAdapters::PostgreSQL::DatabaseStatements.prepend ::Saseo::Extensions::ActiveRecord::V4::ConnectionAdapters::PostgreSQL::DatabaseStatements
29
- end
@@ -1,11 +0,0 @@
1
- require 'saseo/extensions/active_record/v_4/connection_adapters/postgresql/database_statements'
2
-
3
- module Saseo
4
- module Extensions
5
- module ActiveRecord
6
- module V4
7
-
8
- end
9
- end
10
- end
11
- end