Merge branch 'main' of github.com:broosk1993/outboxable

This commit is contained in:
Brusk Awat 2023-04-05 23:54:26 +03:00
commit e6f41a0cf9
Signed by: broosk1993
GPG Key ID: 5D20F7E02649F74E
16 changed files with 84 additions and 74 deletions

View File

@ -111,3 +111,7 @@ Metrics/CyclomaticComplexity:
Max: 15
Metrics/PerceivedComplexity:
Max: 15
Lint/DuplicateMethods: # Disables duplicate methods warning
Enabled: false
Gemspec/RequiredRubyVersion: # Disables required ruby version warning
Enabled: false

View File

@ -1,15 +1,15 @@
# frozen_string_literal: true
source "https://rubygems.org"
source 'https://rubygems.org'
# Specify your gem's dependencies in outboxable.gemspec
gemspec
gem "rake", "~> 13.0"
gem 'rake', '~> 13.0'
gem "rspec", "~> 3.0"
gem 'rspec', '~> 3.0'
gem "rubocop", "~> 1.21"
gem 'rubocop-rails', '~> 2.18'
group :development, :test do
gem "sidekiq", "~> 7.0", require: true

View File

@ -57,19 +57,23 @@ GEM
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-support (3.12.0)
rubocop (1.45.1)
rubocop (1.48.0)
json (~> 2.3)
parallel (~> 1.10)
parser (>= 3.2.0.0)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.24.1, < 2.0)
rubocop-ast (>= 1.26.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.26.0)
rubocop-ast (1.27.0)
parser (>= 3.2.1.0)
ruby-progressbar (1.11.0)
rubocop-rails (2.18.0)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
ruby-progressbar (1.13.0)
set (1.0.3)
sidekiq (7.0.7)
concurrent-ruby (< 2)
@ -95,7 +99,7 @@ DEPENDENCIES
outboxable!
rake (~> 13.0)
rspec (~> 3.0)
rubocop (~> 1.21)
rubocop-rails (~> 2.18)
sidekiq (~> 7.0)
sidekiq-cron (~> 1.10)

View File

@ -73,7 +73,7 @@ Outboxable.configure do |config|
# RabbitMQ configurations
config.rabbitmq_host = ENV.fetch('RABBITMQ__HOST')
config.rabbitmq_port = ENV.fetch('RABBITMQ__PORT', 5672)
config.rabbitmq_user = ENV.fetch('RABBITMQ__USER')
config.rabbitmq_user = ENV.fetch('RABBITMQ__USERNAME')
config.rabbitmq_password = ENV.fetch('RABBITMQ__PASSWORD')
config.rabbitmq_vhost = ENV.fetch('RABBITMQ__VHOST')
config.rabbitmq_event_bus_exchange = ENV.fetch('EVENTBUS__EXCHANGE_NAME')

View File

@ -1,11 +1,11 @@
# frozen_string_literal: true
require "bundler/gem_tasks"
require "rspec/core/rake_task"
require 'bundler/gem_tasks'
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)
require "rubocop/rake_task"
require 'rubocop/rake_task'
RuboCop::RakeTask.new

View File

@ -2,7 +2,7 @@ module Outboxable
class InstallGenerator < Rails::Generators::Base
include Rails::Generators::Migration
source_root File.expand_path('../../../templates', __FILE__)
source_root File.expand_path('../../templates', __dir__)
# Copy initializer into user app
def copy_initializer
@ -11,26 +11,26 @@ module Outboxable
# Copy user information (model & Migrations) into user app
def create_user_model
target_path = "app/models/outbox.rb"
unless File.exist?(File.join(Rails.root, target_path))
template("outbox.rb", target_path)
target_path = 'app/models/outbox.rb'
if Rails.root.join(target_path).exist?
say_status('skipped', 'Model outbox already exists')
else
say_status('skipped', "Model outbox already exists")
template('outbox.rb', target_path)
end
end
# Copy migrations
def copy_migrations
if self.class.migration_exists?('db/migrate', "create_outboxable_outboxes")
say_status('skipped', "Migration create_outboxable_outboxes already exists")
if self.class.migration_exists?('db/migrate', 'create_outboxable_outboxes')
say_status('skipped', 'Migration create_outboxable_outboxes already exists')
else
migration_template('create_outboxable_outboxes.rb', "db/migrate/create_outboxable_outboxes.rb")
migration_template('create_outboxable_outboxes.rb', 'db/migrate/create_outboxable_outboxes.rb')
end
end
# Use to assign migration time otherwise generator will error
def self.next_migration_number(dir)
Time.now.utc.strftime("%Y%m%d%H%M%S")
def self.next_migration_number(_dir)
Time.now.utc.strftime('%Y%m%d%H%M%S')
end
end
end

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true
require_relative "outboxable/version"
require_relative 'outboxable/version'
require 'outboxable/worker'
require 'outboxable/publishing_manager'

View File

@ -7,7 +7,7 @@ module Outboxable
def to_envelope(resource:)
# throw not implemented method error
raise NotImplementedError, "Please implement the to_envelope method in your own module"
raise NotImplementedError, 'Please implement the to_envelope method in your own module'
end
def publish

View File

@ -29,7 +29,7 @@ Outboxable.configure do |config|
# RabbitMQ configurations
config.rabbitmq_host = ENV.fetch('RABBITMQ__HOST')
config.rabbitmq_port = ENV.fetch('RABBITMQ__PORT', 5672)
config.rabbitmq_user = ENV.fetch('RABBITMQ__USER')
config.rabbitmq_user = ENV.fetch('RABBITMQ__USERNAME')
config.rabbitmq_password = ENV.fetch('RABBITMQ__PASSWORD')
config.rabbitmq_vhost = ENV.fetch('RABBITMQ__VHOST')
config.rabbitmq_event_bus_exchange = ENV.fetch('EVENTBUS__EXCHANGE_NAME')

View File

@ -1,24 +1,24 @@
# frozen_string_literal: true
require_relative "lib/outboxable/version"
require_relative 'lib/outboxable/version'
Gem::Specification.new do |spec|
spec.name = "outboxable"
spec.name = 'outboxable'
spec.version = Outboxable::VERSION
spec.authors = ["Brusk Awat"]
spec.email = ["broosk.edogawa@gmail.com"]
spec.authors = ['Brusk Awat']
spec.email = ['broosk.edogawa@gmail.com']
spec.summary = "An opiniated Gem for Rails applications to implement the transactional outbox pattern."
spec.description = "The Outboxable Gem is tailored for Rails applications to implement the transactional outbox pattern. It currently only supports ActiveRecord."
spec.homepage = "https://githuh.com/broosk1993/outboxable"
spec.license = "MIT"
spec.required_ruby_version = ">= 2.6.0"
spec.summary = 'An opiniated Gem for Rails applications to implement the transactional outbox pattern.'
spec.description = 'The Outboxable Gem is tailored for Rails applications to implement the transactional outbox pattern. It currently only supports ActiveRecord.'
spec.homepage = 'https://github.com/broosk1993/outboxable'
spec.license = 'MIT'
spec.required_ruby_version = '>= 3.1.2'
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
spec.metadata["homepage_uri"] = spec.homepage
spec.metadata["source_code_uri"] = "https://githuh.com/broosk1993/outboxable"
spec.metadata["changelog_uri"] = "https://githuh.com/broosk1993/outboxable/CHANGELOG.md"
spec.metadata['homepage_uri'] = spec.homepage
spec.metadata['source_code_uri'] = 'https://github.com/broosk1993/outboxable'
spec.metadata['changelog_uri'] = 'https://github.com/broosk1993/outboxable/blob/main/CHANGELOG.md'
# Specify which files should be added to the gem when it is released.
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@ -27,10 +27,11 @@ Gem::Specification.new do |spec|
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
end
end
spec.bindir = "exe"
spec.bindir = 'exe'
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]
spec.require_paths = ['lib']
spec.add_dependency 'bunny', '>= 2.19.0'
spec.add_dependency 'connection_pool', '~> 2.3.0'
spec.metadata['rubygems_mfa_required'] = 'true'
end

View File

@ -1,16 +1,17 @@
# frozen_string_literal: true
require 'sidekiq/testing'
RSpec.describe Outboxable do
it "has a version number" do
it 'has a version number' do
expect(Outboxable::VERSION).not_to be nil
end
context 'polling publisher sidekiq worker' do
it "should be able to perform" do
expect {
it 'should be able to perform' do
expect do
Outboxable::PollingPublisherWorker.perform_async
}.to change(Outboxable::PollingPublisherWorker.jobs, :size).by(1)
end.to change(Outboxable::PollingPublisherWorker.jobs, :size).by(1)
end
end
end

View File

@ -1,10 +1,10 @@
# frozen_string_literal: true
require "outboxable"
require 'outboxable'
RSpec.configure do |config|
# Enable flags like --only-failures and --next-failure
config.example_status_persistence_file_path = ".rspec_status"
config.example_status_persistence_file_path = '.rspec_status'
# Disable RSpec exposing methods globally on `Module` and `main`
config.disable_monkey_patching!