Fixes Rubocop Offenses

This commit is contained in:
Muhammad Nawzad 2023-03-06 16:20:35 +03:00
parent 918d4f9700
commit 8c408fe7f6
No known key found for this signature in database
GPG Key ID: B954B6AAE33940B2
15 changed files with 62 additions and 58 deletions

View File

@ -5,7 +5,7 @@ AllCops:
SuggestExtensions: false SuggestExtensions: false
Layout/SpaceBeforeBrackets: # (new in 1.7) Layout/SpaceBeforeBrackets: # (new in 1.7)
Enabled: true Enabled: true
Layout/LineLength: Layout/LineLength:
Max: 350 Max: 350
Lint/AmbiguousAssignment: # (new in 1.7) Lint/AmbiguousAssignment: # (new in 1.7)
Enabled: true Enabled: true
@ -110,4 +110,8 @@ Metrics/MethodLength:
Metrics/CyclomaticComplexity: Metrics/CyclomaticComplexity:
Max: 15 Max: 15
Metrics/PerceivedComplexity: Metrics/PerceivedComplexity:
Max: 15 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 # frozen_string_literal: true
source "https://rubygems.org" source 'https://rubygems.org'
# Specify your gem's dependencies in outboxable.gemspec # Specify your gem's dependencies in outboxable.gemspec
gemspec gemspec
gem "rake", "~> 13.0" gem 'rake', '~> 13.0'
gem "rspec", "~> 3.0" gem 'rspec', '~> 3.0'
gem "rubocop-rails", "~> 2.18" gem 'rubocop-rails', '~> 2.18'
gem 'sidekiq-cron', '~> 1.9' gem 'sidekiq-cron', '~> 1.9'

View File

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

View File

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

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
require_relative "outboxable/version" require_relative 'outboxable/version'
require 'outboxable/worker' require 'outboxable/worker'
require 'outboxable/publishing_manager' require 'outboxable/publishing_manager'
@ -10,7 +10,6 @@ require 'outboxable/configuration'
require 'outboxable/rabbitmq/publisher' require 'outboxable/rabbitmq/publisher'
require 'active_support' require 'active_support'
module Outboxable module Outboxable
class Error < StandardError; end class Error < StandardError; end
@ -22,7 +21,7 @@ module Outboxable
has_many :outboxes, as: :outboxable, autosave: false has_many :outboxes, as: :outboxable, autosave: false
def instantiate_outbox(routing_key: ) def instantiate_outbox(routing_key:)
outboxes.new( outboxes.new(
routing_key:, routing_key:,
exchange: Outboxable.configuration.rabbitmq_event_bus_exchange, exchange: Outboxable.configuration.rabbitmq_event_bus_exchange,

View File

@ -12,7 +12,7 @@ module Outboxable
ALLOWED_MESSAGE_BROKERS = %i[rabbitmq].freeze ALLOWED_MESSAGE_BROKERS = %i[rabbitmq].freeze
ALLOWED_ORMS = %i[activerecord].freeze ALLOWED_ORMS = %i[activerecord].freeze
attr_accessor :rabbitmq_host, attr_accessor :rabbitmq_host,
:rabbitmq_port, :rabbitmq_port,
:rabbitmq_user, :rabbitmq_user,
:rabbitmq_password, :rabbitmq_password,
@ -31,7 +31,7 @@ module Outboxable
Sidekiq::Options[:cron_poll_interval] = 5 Sidekiq::Options[:cron_poll_interval] = 5
# Create the cron job for the polling publisher # Create the cron job for the polling publisher
Sidekiq::Cron::Job.create(name: 'OutboxablePollingPublisher', cron: '*/5 * * * * *', class: 'Outboxable::PollingPublisherWorker') Sidekiq::Cron::Job.create(name: 'OutboxablePollingPublisher', cron: '*/5 * * * * *', class: 'Outboxable::PollingPublisherWorker')
end end
def message_broker=(message_broker) def message_broker=(message_broker)

View File

@ -11,4 +11,4 @@ module Outboxable
end end
end end
end end
end end

View File

@ -4,34 +4,34 @@ module Outboxable
def initialize(resource:) def initialize(resource:)
@resource = resource @resource = resource
end end
def to_envelope(resource:) def to_envelope(resource:)
# throw not implemented method error # 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 end
def publish def publish
confirmed = nil confirmed = nil
Outboxable::Connection.instance.channel.with do |channel| Outboxable::Connection.instance.channel.with do |channel|
channel.confirm_select channel.confirm_select
# Declare a exchange # Declare a exchange
exchange = channel.topic(@resource.exchange, durable: true) exchange = channel.topic(@resource.exchange, durable: true)
# Publish the CloudEvent resource to the exchange # Publish the CloudEvent resource to the exchange
exchange.publish(to_envelope(resource: @resource), routing_key: @resource.routing_key, headers: @resource.try(:headers) || {}) exchange.publish(to_envelope(resource: @resource), routing_key: @resource.routing_key, headers: @resource.try(:headers) || {})
# Wait for confirmation # Wait for confirmation
confirmed = channel.wait_for_confirms confirmed = channel.wait_for_confirms
end end
return unless confirmed return unless confirmed
@resource.reload @resource.reload
@resource.increment_attempt @resource.increment_attempt
@resource.update(status: :published, retry_at: nil) @resource.update(status: :published, retry_at: nil)
end end
end end
end end
end end

View File

@ -1,5 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
module Outboxable module Outboxable
VERSION = "0.1.1" VERSION = '0.1.1'
end end

View File

@ -17,7 +17,7 @@ class CreateOutboxableOutboxes < ActiveRecord::Migration[7.0]
t.integer :size, null: false, default: 0 t.integer :size, null: false, default: 0
t.references :outboxable, polymorphic: true, null: true t.references :outboxable, polymorphic: true, null: true
t.timestamps t.timestamps
end end

View File

@ -1,4 +1,4 @@
# This monkey patch allows you to customize the message format that you publish to your broker. # This monkey patch allows you to customize the message format that you publish to your broker.
# By default, Outboxable publishes a CloudEvent message to your broker. # By default, Outboxable publishes a CloudEvent message to your broker.
module Outboxable module Outboxable
module RabbitMq module RabbitMq

View File

@ -29,4 +29,4 @@ class Outbox < ApplicationRecord
def check_publishing def check_publishing
self.allow_publish = false if published? self.allow_publish = false if published?
end end
end end

View File

@ -1,24 +1,24 @@
# frozen_string_literal: true # frozen_string_literal: true
require_relative "lib/outboxable/version" require_relative 'lib/outboxable/version'
Gem::Specification.new do |spec| Gem::Specification.new do |spec|
spec.name = "outboxable" spec.name = 'outboxable'
spec.version = Outboxable::VERSION spec.version = Outboxable::VERSION
spec.authors = ["Brusk Awat"] spec.authors = ['Brusk Awat']
spec.email = ["broosk.edogawa@gmail.com"] spec.email = ['broosk.edogawa@gmail.com']
spec.summary = "An opiniated Gem for Rails applications to implement the transactional outbox pattern." 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.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.homepage = 'https://github.com/broosk1993/outboxable'
spec.license = "MIT" spec.license = 'MIT'
spec.required_ruby_version = ">= 2.6.0" spec.required_ruby_version = '>= 2.6.0'
spec.metadata['allowed_push_host'] = 'https://rubygems.org' spec.metadata['allowed_push_host'] = 'https://rubygems.org'
spec.metadata["homepage_uri"] = spec.homepage spec.metadata['homepage_uri'] = spec.homepage
spec.metadata["source_code_uri"] = "https://github.com/broosk1993/outboxable" spec.metadata['source_code_uri'] = 'https://github.com/broosk1993/outboxable'
spec.metadata["changelog_uri"] = "https://github.com/broosk1993/outboxable/blob/main/CHANGELOG.md" 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. # 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. # 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)}) (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
end end
end end
spec.bindir = "exe" spec.bindir = 'exe'
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) } 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 'bunny', '>= 2.19.0'
spec.add_dependency 'connection_pool', '~> 2.3.0' spec.add_dependency 'connection_pool', '~> 2.3.0'
spec.metadata['rubygems_mfa_required'] = 'true'
end end

View File

@ -1,11 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
RSpec.describe Outboxable do RSpec.describe Outboxable do
it "has a version number" do it 'has a version number' do
expect(Outboxable::VERSION).not_to be nil expect(Outboxable::VERSION).not_to be nil
end end
it "does something useful" do it 'does something useful' do
expect(true).to eq(true) expect(true).to eq(true)
end end
end end

View File

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