emailbutler 0.2.2 → 0.2.3

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
  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