event_sourcery-postgres 0.5.0 → 0.6.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: 54611962fa99a62b63f2a97d432614e43aa2b10e
4
- data.tar.gz: d4b6413ce323e94e950fb1d3276eaebacdb6dedd
3
+ metadata.gz: c2860efca21f5ae2a7a8ae316ea70db1fcb1aa1e
4
+ data.tar.gz: 56fe6bc5b9233ffc8795ba6b37cff8763bf1b166
5
5
  SHA512:
6
- metadata.gz: 55e76d3c6300f678ddfefe9c4dc9be6cd1fa365ace92ebce6cc6be432e2d19553cc9313da54923307fc264bb6b4582fc23022349dfc3e70df56261756a021c6d
7
- data.tar.gz: 12e02831936b8fe0203ba1f0c7908a00fbff4e74308d5a879f22f0a02e311f1a2aac1b3b068df80ad81f68a4029b0b31436362a9a815d10cba32b290dfeb9f01
6
+ metadata.gz: 8b1ef120a33fa76da1698f68a063c07293d82ff1a8310682dbf7be812156216c18061ad7fb5706d412d03f60a67dc1dbd33d05637c12891018fb2cdd7cfbbd42
7
+ data.tar.gz: 9310dbd856abac2ffe24f9a6b78f1fc3b6baf23ecfdf087fa5e2349210c343a1f4533c876df9fb5e21107cd5e7bf5fd197fe8cc8fbe4a5eea56ce96aa67c7f37
data/CHANGELOG.md CHANGED
@@ -4,8 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
- ## [Unreleased]
7
+ ## [0.6.0] - 2018-1-2
8
+ ### Changed
9
+
10
+ - Only send info log after processing a group of events
8
11
 
12
+ ### Removed
13
+ - Remove `processes_events` and `projects_events` as these have been [removed
14
+ in event_sourcery](https://github.com/envato/event_sourcery/pull/161).
9
15
 
10
16
  ## [0.5.0] - 2017-7-27
11
17
  - First Version of YARD documentation.
data/README.md CHANGED
@@ -22,7 +22,6 @@ gem 'event_sourcery-postgres'
22
22
  EventSourcery::Postgres.configure do |config|
23
23
  config.event_store_database = Sequel.connect(...)
24
24
  config.projections_database = Sequel.connect(...)
25
- config.use_optimistic_concurrency = true
26
25
  config.write_events_function_name = 'writeEvents'
27
26
  config.events_table_name = :events
28
27
  config.aggregates_table_name = :aggregates
@@ -1,19 +1,21 @@
1
1
  module EventSourcery
2
2
  module Postgres
3
3
  class Config
4
- attr_accessor :event_store_database,
5
- :lock_table_to_guarantee_linear_sequence_id_growth,
4
+ attr_accessor :lock_table_to_guarantee_linear_sequence_id_growth,
6
5
  :write_events_function_name,
7
6
  :events_table_name,
8
7
  :aggregates_table_name,
9
8
  :tracker_table_name,
10
9
  :callback_interval_if_no_new_events,
11
10
  :auto_create_projector_tracker,
12
- :event_tracker,
13
- :projections_database,
14
- :event_store,
15
- :event_source,
16
- :event_sink
11
+ :event_tracker
12
+
13
+ attr_writer :event_store,
14
+ :event_source,
15
+ :event_sink
16
+
17
+ attr_reader :event_store_database,
18
+ :projections_database
17
19
 
18
20
  def initialize
19
21
  @lock_table_to_guarantee_linear_sequence_id_growth = true
@@ -38,25 +40,25 @@ module EventSourcery
38
40
  @event_sink ||= ::EventSourcery::EventStore::EventSink.new(event_store)
39
41
  end
40
42
 
41
- def event_store_database=(sequel_connection)
42
- setup_connection(sequel_connection)
43
+ def event_store_database=(db_connection)
44
+ setup_connection(db_connection)
43
45
 
44
- @event_store_database = sequel_connection
46
+ @event_store_database = db_connection
45
47
  end
46
48
 
47
- def projections_database=(sequel_connection)
48
- setup_connection(sequel_connection)
49
+ def projections_database=(db_connection)
50
+ setup_connection(db_connection)
49
51
 
50
- @projections_database = sequel_connection
51
- @event_tracker = Postgres::Tracker.new(sequel_connection)
52
+ @projections_database = db_connection
53
+ @event_tracker = Postgres::Tracker.new(db_connection)
52
54
  end
53
55
 
54
56
  private
55
57
 
56
- def setup_connection(sequel_connection)
57
- return unless sequel_connection
58
+ def setup_connection(db_connection)
59
+ return unless db_connection
58
60
 
59
- sequel_connection.extension :pg_json
61
+ db_connection.extension :pg_json
60
62
  end
61
63
  end
62
64
  end
@@ -3,19 +3,19 @@ module EventSourcery
3
3
  class EventStore
4
4
  include EventSourcery::EventStore::EachByRange
5
5
 
6
- def initialize(pg_connection,
6
+ def initialize(db_connection,
7
7
  events_table_name: EventSourcery::Postgres.config.events_table_name,
8
8
  lock_table: EventSourcery::Postgres.config.lock_table_to_guarantee_linear_sequence_id_growth,
9
9
  write_events_function_name: EventSourcery::Postgres.config.write_events_function_name,
10
10
  event_builder: EventSourcery.config.event_builder)
11
- @pg_connection = pg_connection
11
+ @db_connection = db_connection
12
12
  @events_table_name = events_table_name
13
13
  @write_events_function_name = write_events_function_name
14
14
  @lock_table = lock_table
15
15
  @event_builder = event_builder
16
16
  end
17
17
 
18
- # Like water flowing into a sink evenually it will go down the drain
18
+ # Like water flowing into a sink eventually it will go down the drain
19
19
  # into the goodness of the plumbing system.
20
20
  # So to will the given events you put in this 'sink'. Except the plumbing
21
21
  # system is the data base events table.
@@ -31,7 +31,7 @@ module EventSourcery
31
31
  aggregate_ids = events.map(&:aggregate_id).uniq
32
32
  raise AtomicWriteToMultipleAggregatesNotSupported unless aggregate_ids.count == 1
33
33
  sql = write_events_sql(aggregate_ids.first, events, expected_version)
34
- @pg_connection.run(sql)
34
+ @db_connection.run(sql)
35
35
  log_events_saved(events)
36
36
  true
37
37
  rescue Sequel::DatabaseError => e
@@ -43,10 +43,10 @@ module EventSourcery
43
43
  end
44
44
 
45
45
  # Get the next set of events from the given event id. You can
46
- # specify event typs and a limit.
46
+ # specify event types and a limit.
47
47
  # Default limit is 1000 and the default event types will be all.
48
48
  #
49
- # @param id the event id to get next envents from
49
+ # @param id the event id to get next events from
50
50
  # @param event_types the event types to filter, default nil = all
51
51
  # @param limit the limit to the results, default 1000
52
52
  #
@@ -94,7 +94,7 @@ module EventSourcery
94
94
  # @param after_listen the after listen call back block. default nil.
95
95
  # @param subscription_master the subscription master block
96
96
  def subscribe(from_id:, event_types: nil, after_listen: nil, subscription_master:, &block)
97
- poll_waiter = OptimisedEventPollWaiter.new(pg_connection: @pg_connection, after_listen: after_listen)
97
+ poll_waiter = OptimisedEventPollWaiter.new(db_connection: @db_connection, after_listen: after_listen)
98
98
  args = {
99
99
  poll_waiter: poll_waiter,
100
100
  event_store: self,
@@ -110,7 +110,7 @@ module EventSourcery
110
110
  private
111
111
 
112
112
  def events_table
113
- @pg_connection[@events_table_name]
113
+ @db_connection[@events_table_name]
114
114
  end
115
115
 
116
116
  def build_event(data)
@@ -159,7 +159,7 @@ module EventSourcery
159
159
  else
160
160
  value
161
161
  end
162
- @pg_connection.literal(wrapped_value)
162
+ @db_connection.literal(wrapped_value)
163
163
  end
164
164
 
165
165
  def log_events_saved(events)
@@ -4,8 +4,8 @@ module EventSourcery
4
4
  class OptimisedEventPollWaiter
5
5
  ListenThreadDied = Class.new(StandardError)
6
6
 
7
- def initialize(pg_connection:, timeout: 30, after_listen: proc {})
8
- @pg_connection = pg_connection
7
+ def initialize(db_connection:, timeout: 30, after_listen: proc {})
8
+ @db_connection = db_connection
9
9
  @timeout = timeout
10
10
  @events_queue = QueueWithIntervalCallback.new
11
11
  @after_listen = after_listen
@@ -65,7 +65,7 @@ module EventSourcery
65
65
  end
66
66
 
67
67
  def listen_for_new_events(loop: true, after_listen: nil, timeout: 30)
68
- @pg_connection.listen('new_event',
68
+ @db_connection.listen('new_event',
69
69
  loop: loop,
70
70
  after_listen: after_listen,
71
71
  timeout: timeout) do |_channel, _pid, _payload|
@@ -10,7 +10,6 @@ module EventSourcery
10
10
 
11
11
  class << self
12
12
  alias_method :project, :process
13
- alias_method :projects_events, :processes_events
14
13
  alias_method :projector_name, :processor_name
15
14
  end
16
15
  end
@@ -33,8 +32,8 @@ module EventSourcery
33
32
  tracker.processed_event(processor_name, event.id)
34
33
  end
35
34
  EventSourcery.logger.debug { "[#{processor_name}] Processed event: #{event.inspect}" }
36
- EventSourcery.logger.info { "[#{processor_name}] Processed up to event id: #{events.last.id}" }
37
35
  end
36
+ EventSourcery.logger.info { "[#{processor_name}] Processed up to event id: #{events.last.id}" }
38
37
  end
39
38
  end
40
39
  end
@@ -58,7 +58,7 @@ module EventSourcery
58
58
  end
59
59
  end
60
60
 
61
- # Create the 'create or update' fucntions.
61
+ # Create the 'create or update' functions.
62
62
  # Needs the database, table name, function name and aggregates table name.
63
63
  # The defaults will be whats specified in config.
64
64
  #
@@ -9,14 +9,14 @@ module EventSourcery
9
9
  end
10
10
 
11
11
  module ClassMethods
12
- # Hash of the tables and thier corresponding blocks.
12
+ # Hash of the tables and their corresponding blocks.
13
13
  #
14
14
  # @return [Hash] hash keyed by table names and block values
15
15
  def tables
16
16
  @tables ||= {}
17
17
  end
18
18
 
19
- # For the givent table name assign to give block as the value.
19
+ # For the given table name assign to give block as the value.
20
20
  #
21
21
  # @param name the name of the table
22
22
  # @param block the block of code to assign for the table
@@ -3,19 +3,19 @@ module EventSourcery
3
3
  # This will set up a persisted event id tracker for processors.
4
4
  class Tracker
5
5
 
6
- def initialize(connection = EventSourcery::Postgres.config.projections_database,
6
+ def initialize(db_connection = EventSourcery::Postgres.config.projections_database,
7
7
  table_name: EventSourcery::Postgres.config.tracker_table_name,
8
8
  obtain_processor_lock: true)
9
- @connection = connection
9
+ @db_connection = db_connection
10
10
  @table_name = table_name.to_sym
11
11
  @obtain_processor_lock = obtain_processor_lock
12
12
  end
13
13
 
14
14
  # Set up the given processor.
15
- # This will create the projector tracker table if it does not exits.
15
+ # This will create the projector tracker table if it does not exist.
16
16
  # If given a processor_name it will then attempt to get a lock on the db.
17
17
  #
18
- # @param processor_name the name of the procerror
18
+ # @param processor_name the name of the processor
19
19
  def setup(processor_name = nil)
20
20
  create_table_if_not_exists if EventSourcery::Postgres.config.auto_create_projector_tracker
21
21
 
@@ -34,7 +34,7 @@ module EventSourcery
34
34
  # This will updated the tracker table to the given event id value
35
35
  # for the given processor name.
36
36
  #
37
- # @param processor_name the name of the processor to udpate
37
+ # @param processor_name the name of the processor to update
38
38
  # @param event_id the event id number to update to
39
39
  def processed_event(processor_name, event_id)
40
40
  table.
@@ -44,13 +44,13 @@ module EventSourcery
44
44
  end
45
45
 
46
46
  # This allows you to process an event and update the tracker table in
47
- # a single transaction. Will yeild the given block first then update the
47
+ # a single transaction. Will yield the given block first then update the
48
48
  # the tracker table to the give event id for the given processor name.
49
49
  #
50
50
  # @param processor_name the name of the processor to update
51
51
  # @param event_id the event id number to update to
52
52
  def processing_event(processor_name, event_id)
53
- @connection.transaction do
53
+ @db_connection.transaction do
54
54
  yield
55
55
  processed_event(processor_name, event_id)
56
56
  end
@@ -82,7 +82,7 @@ module EventSourcery
82
82
  private
83
83
 
84
84
  def obtain_global_lock_on_processor(processor_name)
85
- lock_obtained = @connection.fetch("select pg_try_advisory_lock(#{@track_entry_id})").to_a.first[:pg_try_advisory_lock]
85
+ lock_obtained = @db_connection.fetch("select pg_try_advisory_lock(#{@track_entry_id})").to_a.first[:pg_try_advisory_lock]
86
86
  if lock_obtained == false
87
87
  raise UnableToLockProcessorError, "Unable to get a lock on #{processor_name} #{@track_entry_id}"
88
88
  end
@@ -91,7 +91,7 @@ module EventSourcery
91
91
  def create_table_if_not_exists
92
92
  unless tracker_table_exists?
93
93
  EventSourcery.logger.info { "Projector tracker missing - attempting to create 'projector_tracker' table" }
94
- EventSourcery::Postgres::Schema.create_projector_tracker(db: @connection, table_name: @table_name)
94
+ EventSourcery::Postgres::Schema.create_projector_tracker(db: @db_connection, table_name: @table_name)
95
95
  end
96
96
  end
97
97
 
@@ -105,11 +105,11 @@ module EventSourcery
105
105
  end
106
106
 
107
107
  def table
108
- @connection[@table_name]
108
+ @db_connection[@table_name]
109
109
  end
110
110
 
111
111
  def tracker_table_exists?
112
- @connection.table_exists?(@table_name)
112
+ @db_connection.table_exists?(@table_name)
113
113
  end
114
114
  end
115
115
  end
@@ -1,5 +1,5 @@
1
1
  module EventSourcery
2
2
  module Postgres
3
- VERSION = '0.5.0'.freeze
3
+ VERSION = '0.6.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_sourcery-postgres
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Envato
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-27 00:00:00.000000000 Z
11
+ date: 2018-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel