active_outbox 0.0.5 → 0.1.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 +4 -4
- data/README.md +4 -12
- data/lib/active_outbox/adapter_helper.rb +12 -2
- data/lib/active_outbox/outboxable.rb +2 -0
- data/lib/active_outbox.rb +0 -1
- data/lib/generators/active_outbox/install/install_generator.rb +17 -0
- data/lib/generators/active_outbox/model/model_generator.rb +47 -0
- data/lib/generators/active_outbox/templates/initializer.rb +14 -0
- data/lib/generators/active_outbox/templates/migration.rb +15 -0
- metadata +6 -4
- data/lib/active_outbox/generators/active_outbox_generator.rb +0 -29
- data/lib/active_outbox/generators/templates/migration.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2e8f16f629c433d2963d5e96dfc3e1b12031fafa5ea58ab4dc215a01a2f3517
|
4
|
+
data.tar.gz: 23d0bee29bb81d3bebf53f8e63efb1cb3356f365e6e662a2b0c1fb575843f347
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ffb5a506f89addc09301f10401319de0aaccb6531a0a3532104fb62172a899cbbd36d08e56cf92297cacd999494b41f1ca22c0f6a4d579f7d3f29b47c2d1d5a
|
7
|
+
data.tar.gz: 0caa250db4098bbf5ad294da3fa487d75c5e6f58c0678933e4314ecc72f69e7600e747ed1149cdc89f892485a24da3381c0a9195242f1b4a9a61d8480271e8c7
|
data/README.md
CHANGED
@@ -37,21 +37,13 @@ gem install active_outbox
|
|
37
37
|
|
38
38
|
## Usage
|
39
39
|
### Setup
|
40
|
-
Create an `Outbox` table using the provided generator and corresponding model.
|
40
|
+
Create an `Outbox` table using the provided generator and corresponding model. Any model name can be passed as an argument but if empty it will default to just `Outobx`. The generated table name will be `model_name_outboxes`.
|
41
41
|
```bash
|
42
|
-
rails g active_outbox
|
42
|
+
rails g active_outbox:model <optional model_name>
|
43
43
|
```
|
44
44
|
After running the migration, create an initializer under `config/initializers/active_outbox.rb` and setup the default outbox class to the new `Outbox` model you just created.
|
45
|
-
```
|
46
|
-
|
47
|
-
|
48
|
-
Rails.application.reloader.to_prepare do
|
49
|
-
ActiveOutbox.configure do |config|
|
50
|
-
config.outbox_mapping = {
|
51
|
-
'default' => 'Outbox'
|
52
|
-
}
|
53
|
-
end
|
54
|
-
end
|
45
|
+
```bash
|
46
|
+
rails g active_outbox:install
|
55
47
|
```
|
56
48
|
|
57
49
|
To allow models to store Outbox records on changes, you will have to include the `Outboxable` concern.
|
@@ -3,15 +3,25 @@
|
|
3
3
|
module ActiveOutbox
|
4
4
|
module AdapterHelper
|
5
5
|
def self.uuid_type
|
6
|
-
|
6
|
+
return 'uuid' if postgres?
|
7
|
+
return 'string' if mysql?
|
8
|
+
|
9
|
+
'string'
|
7
10
|
end
|
8
11
|
|
9
12
|
def self.json_type
|
10
|
-
|
13
|
+
return 'jsonb' if postgres?
|
14
|
+
return 'json' if mysql?
|
15
|
+
|
16
|
+
'string'
|
11
17
|
end
|
12
18
|
|
13
19
|
def self.postgres?
|
14
20
|
ActiveRecord::Base.connection.adapter_name.downcase == 'postgresql'
|
15
21
|
end
|
22
|
+
|
23
|
+
def self.mysql?
|
24
|
+
ActiveRecord::Base.connection.adapter_name.downcase == 'mysql2'
|
25
|
+
end
|
16
26
|
end
|
17
27
|
end
|
data/lib/active_outbox.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/base'
|
4
|
+
|
5
|
+
module ActiveOutbox
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
source_root File.expand_path('../templates', __dir__)
|
9
|
+
|
10
|
+
desc 'Creates an initializer file at config/initializers/active_outbox.rb'
|
11
|
+
|
12
|
+
def create_initializer_file
|
13
|
+
copy_file('initializer.rb', Rails.root.join('config', 'initializers', 'active_outbox.rb'))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
require 'rails/generators/active_record'
|
5
|
+
require 'rails/generators/base'
|
6
|
+
require 'rails/generators/migration'
|
7
|
+
|
8
|
+
module ActiveOutbox
|
9
|
+
module Generators
|
10
|
+
class ModelGenerator < Rails::Generators::Base
|
11
|
+
source_root File.expand_path('../templates', __dir__)
|
12
|
+
|
13
|
+
include ActiveOutbox::AdapterHelper
|
14
|
+
include Rails::Generators::Migration
|
15
|
+
|
16
|
+
class << self
|
17
|
+
delegate :next_migration_number, to: ActiveRecord::Generators::Base
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Creates the Outbox model migration'
|
21
|
+
|
22
|
+
argument :model_name, type: :string, default: ''
|
23
|
+
class_option :component_path, type: :string, desc: 'Indicates where to create the outbox migration'
|
24
|
+
|
25
|
+
def create_migration_file
|
26
|
+
migration_path = "#{root_path}/db/migrate"
|
27
|
+
migration_template(
|
28
|
+
'migration.rb',
|
29
|
+
"#{migration_path}/active_outbox_create_#{table_name}.rb",
|
30
|
+
migration_version: migration_version
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def root_path
|
35
|
+
options['component_path'] || Rails.root
|
36
|
+
end
|
37
|
+
|
38
|
+
def migration_version
|
39
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
40
|
+
end
|
41
|
+
|
42
|
+
def table_name
|
43
|
+
model_name.blank? ? 'outboxes' : "#{model_name}_outboxes"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Rails.application.reloader.to_prepare do
|
4
|
+
ActiveOutbox.configure do |config|
|
5
|
+
# To configure which Outbox class maps to which domain
|
6
|
+
# See https://github.com/rootstrap/active_outbox#advanced-usage for advanced examples
|
7
|
+
config.outbox_mapping = {
|
8
|
+
'default' => 'Outbox'
|
9
|
+
}
|
10
|
+
|
11
|
+
# Configure database adapter
|
12
|
+
# config.adapter = :postgresql
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveOutboxCreate<%= table_name.camelize.singularize %> < ActiveRecord::Migration<%= migration_version %>
|
4
|
+
def change
|
5
|
+
create_table :<%= table_name %> do |t|
|
6
|
+
t.<%= ActiveOutbox::AdapterHelper.uuid_type %> :identifier, null: false, index: { unique: true }
|
7
|
+
t.string :event, null: false
|
8
|
+
t.<%= ActiveOutbox::AdapterHelper.json_type %> :payload
|
9
|
+
t.string :aggregate, null: false
|
10
|
+
t.<%= ActiveOutbox::AdapterHelper.uuid_type %> :aggregate_identifier, null: false, index: true
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_outbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillermo Aguirre
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-configurable
|
@@ -50,10 +50,12 @@ files:
|
|
50
50
|
- lib/active_outbox.rb
|
51
51
|
- lib/active_outbox/adapter_helper.rb
|
52
52
|
- lib/active_outbox/errors.rb
|
53
|
-
- lib/active_outbox/generators/active_outbox_generator.rb
|
54
|
-
- lib/active_outbox/generators/templates/migration.rb
|
55
53
|
- lib/active_outbox/outboxable.rb
|
56
54
|
- lib/active_outbox/railtie.rb
|
55
|
+
- lib/generators/active_outbox/install/install_generator.rb
|
56
|
+
- lib/generators/active_outbox/model/model_generator.rb
|
57
|
+
- lib/generators/active_outbox/templates/initializer.rb
|
58
|
+
- lib/generators/active_outbox/templates/migration.rb
|
57
59
|
homepage: https://rubygems.org/gems/active_outbox
|
58
60
|
licenses:
|
59
61
|
- MIT
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails'
|
4
|
-
require 'rails/generators'
|
5
|
-
require 'rails/generators/active_record'
|
6
|
-
|
7
|
-
class ActiveOutboxGenerator < ActiveRecord::Generators::Base
|
8
|
-
include ActiveOutbox::AdapterHelper
|
9
|
-
source_root File.expand_path('templates', __dir__)
|
10
|
-
|
11
|
-
class_option :root_components_path, type: :string, default: Rails.root
|
12
|
-
|
13
|
-
def create_migration_files
|
14
|
-
migration_path = "#{options['root_components_path']}/db/migrate"
|
15
|
-
migration_template(
|
16
|
-
'migration.rb',
|
17
|
-
"#{migration_path}/outbox_create_#{table_name}.rb",
|
18
|
-
migration_version: migration_version
|
19
|
-
)
|
20
|
-
end
|
21
|
-
|
22
|
-
def migration_version
|
23
|
-
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
24
|
-
end
|
25
|
-
|
26
|
-
def table_name
|
27
|
-
"#{name}_outboxes"
|
28
|
-
end
|
29
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class OutboxCreate<%= table_name.camelize.singularize %> < ActiveRecord::Migration<%= migration_version %>
|
4
|
-
def change
|
5
|
-
create_table :<%= table_name %> do |t|
|
6
|
-
t.<%= uuid_type %> :identifier, null: false, index: { unique: true }
|
7
|
-
t.string :event, null: false
|
8
|
-
t.<%= json_type %> :payload
|
9
|
-
t.string :aggregate, null: false
|
10
|
-
t.<%= uuid_type %> :aggregate_identifier, null: false, index: true
|
11
|
-
|
12
|
-
t.timestamps
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|