emailbutler 0.2.2 → 0.2.3

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
  SHA256:
3
- metadata.gz: 07e27b9787bb6f85389d9d6628041cec10a2c422c5806b216c1e8a597a6b65f2
4
- data.tar.gz: 1728e696da05d221df0c990f2248c0bd5e8753f2b8b3569905b054ed624845f5
3
+ metadata.gz: 86c998b3d9e29ae064f2b2881b392661d785534883a28f40cb7fd5e846e5cf69
4
+ data.tar.gz: 4952983e5fc06ea2e90f2d2504d66d6c7ea083281796d30b7e71154096235e1d
5
5
  SHA512:
6
- metadata.gz: 34af5717bd9e42499faa83988388cc65b6ad87e33ff7d31912e120a7e69e7d381c92ad4a4b6e926fe8c845505311bc046114caa00fb9debaceba7f2d5ceed1be
7
- data.tar.gz: f8d56d0c8d13d74f90c32ea95a9edd6eaa3fd064eadb343233f5678389059d4eebcb74e9e1fa3e15c583fccff639371d4389b95511d51875e26c5316667c8618
6
+ metadata.gz: eedddd11e3d27324ceeb712c3f9821ede81fe3a02970166c6d7c67b546333ffdd8ce5ffc9cf885879a8020c966233c6aa51088d683546dda472645156f77c3d2
7
+ data.tar.gz: da1e97498ff6853525d05a8cfe988aef95cccd3b82e39803c966218945904a45c2830b17bd3a5eea5a728b02eb0e47faf0e4d3b9fdd2e503c87423f3d816df6d
@@ -9,20 +9,15 @@ class CreateEmailbutlerTables < ActiveRecord::Migration[7.0]
9
9
  t.string :action, null: false
10
10
  t.jsonb :params, null: false, default: {}
11
11
  t.string :send_to, array: true
12
- t.timestamps
13
- end
14
- add_index :emailbutler_messages, :uuid, unique: true
15
-
16
- create_table :emailbutler_events do |t|
17
- t.integer :emailbutler_message_id, null: false, index: true
18
- t.integer :status, null: false
12
+ t.integer :status, null: false, default: 0
19
13
  t.datetime :timestamp
14
+ t.integer :lock_version
20
15
  t.timestamps
21
16
  end
17
+ add_index :emailbutler_messages, :uuid, unique: true
22
18
  end
23
19
 
24
20
  def self.down
25
21
  drop_table :emailbutler_messages
26
- drop_table :emailbutler_events
27
22
  end
28
23
  end
@@ -13,15 +13,13 @@ module Emailbutler
13
13
  class Emailbutler::Message < Model
14
14
  self.table_name = :emailbutler_messages
15
15
 
16
+ CREATED = 'created'
16
17
  REJECTED = 'rejected'
17
18
  PROCESSED = 'processed'
18
19
  FAILED = 'failed'
19
20
  DELIVERED = 'delivered'
20
21
 
21
- has_many :emailbutler_events,
22
- class_name: 'Emailbutler::Event', dependent: :destroy, foreign_key: :emailbutler_message_id
23
-
24
- enum status: { REJECTED => 0, PROCESSED => 1, FAILED => 2, DELIVERED => 3 }
22
+ enum status: { CREATED => 0, REJECTED => 1, PROCESSED => 2, FAILED => 3, DELIVERED => 4 }
25
23
 
26
24
  after_initialize :generate_uuid
27
25
 
@@ -32,24 +30,16 @@ module Emailbutler
32
30
  end
33
31
  end
34
32
 
35
- class Emailbutler::Event < Model
36
- self.table_name = :emailbutler_events
37
-
38
- belongs_to :emailbutler_message, class_name: 'Emailbutler::Message'
39
- end
40
-
41
33
  # Public: The name of the adapter.
42
- attr_reader :name, :message_class, :event_class
34
+ attr_reader :name, :message_class
43
35
 
44
36
  # Public: Initialize a new ActiveRecord adapter instance.
45
37
  #
46
38
  # name - The Symbol name for this adapter. Optional (default :active_record)
47
39
  # message_class - The AR class responsible for the messages table.
48
- # event_class - The AR class responsible for the messages events table.
49
40
  def initialize(options={})
50
41
  @name = options.fetch(:name, :active_record)
51
42
  @message_class = options.fetch(:message_class) { Emailbutler::Message }
52
- @event_class = options.fetch(:event_class) { Emailbutler::Event }
53
43
  end
54
44
 
55
45
  # Public: Builds a message.
@@ -72,9 +62,11 @@ module Emailbutler
72
62
  @message_class.find_by(args)
73
63
  end
74
64
 
75
- # Public: Creates a message event.
76
- def create_message_event(message, args={})
77
- @event_class.create(args.merge(emailbutler_message_id: message.id))
65
+ # Public: Updates the message.
66
+ def update_message(message, args={})
67
+ message.update(args) if message.timestamp.nil? || args[:timestamp] > message.timestamp
68
+ rescue ::ActiveRecord::StaleObjectError
69
+ update_message(message.reload, args)
78
70
  end
79
71
  end
80
72
  end
@@ -31,9 +31,9 @@ module Emailbutler
31
31
  adapter.find_message_by(args)
32
32
  end
33
33
 
34
- # Public: Creates a message event.
35
- def create_message_event(message, args={})
36
- adapter.create_message_event(message, args)
34
+ # Public: Updates the message.
35
+ def update_message(message, args={})
36
+ adapter.update_message(message, args)
37
37
  end
38
38
  end
39
39
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Emailbutler
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.3'
5
5
  end
@@ -16,7 +16,7 @@ module Emailbutler
16
16
  .call(payload: payload)
17
17
  .each { |event|
18
18
  message = Emailbutler.find_message_by(uuid: event.delete(:message_uuid))
19
- Emailbutler.create_message_event(message, event)
19
+ Emailbutler.update_message(message, event)
20
20
  }
21
21
  end
22
22
 
data/lib/emailbutler.rb CHANGED
@@ -42,5 +42,5 @@ module Emailbutler
42
42
  # Public: All the methods delegated to instance. These should match the interface of Emailbutler::DSL.
43
43
  def_delegators :instance,
44
44
  :adapter, :build_message, :set_message_attribute, :save_message, :find_message_by,
45
- :create_message_event
45
+ :update_message
46
46
  end
@@ -9,20 +9,15 @@ class CreateEmailbutlerTables < ActiveRecord::Migration<%= migration_version %>
9
9
  t.string :action, null: false
10
10
  t.jsonb :params, null: false, default: {}
11
11
  t.string :send_to, array: true
12
- t.timestamps
13
- end
14
- add_index :emailbutler_messages, :uuid, unique: true
15
-
16
- create_table :emailbutler_events do |t|
17
- t.integer :emailbutler_message_id, null: false, index: true
18
- t.integer :status, null: false
12
+ t.integer :status, null: false, default: 0
19
13
  t.datetime :timestamp
14
+ t.integer :lock_version
20
15
  t.timestamps
21
16
  end
17
+ add_index :emailbutler_messages, :uuid, unique: true
22
18
  end
23
19
 
24
20
  def self.down
25
21
  drop_table :emailbutler_messages
26
- drop_table :emailbutler_events
27
22
  end
28
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emailbutler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bogdanov Anton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-12 00:00:00.000000000 Z
11
+ date: 2022-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -166,7 +166,7 @@ files:
166
166
  - app/controllers/emailbutler/webhooks_controller.rb
167
167
  - app/views/layouts/emailbutler/application.html.erb
168
168
  - config/routes.rb
169
- - db/migrate/20220908180903_create_emailbutler_tables.rb
169
+ - db/migrate/20220916162720_create_emailbutler_tables.rb
170
170
  - lib/emailbutler.rb
171
171
  - lib/emailbutler/adapters/active_record.rb
172
172
  - lib/emailbutler/configuration.rb