diff --git a/.travis.yml b/.travis.yml index 5bf7457..acddd4a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,6 @@ services: before_script: - unset BUNDLE_GEMFILE - docker-compose run app bundle install - - docker-compose run app bundle exec appraisal install script: - - docker-compose run app bundle exec appraisal rspec + - docker-compose run app bundle exec rspec - docker-compose run app bundle exec rubocop diff --git a/lib/logux/action_caller.rb b/lib/logux/action_caller.rb index 751e0cb..da784c3 100644 --- a/lib/logux/action_caller.rb +++ b/lib/logux/action_caller.rb @@ -14,15 +14,19 @@ def initialize(action:, meta:) end def call! - logger.debug( - "Searching action for Logux action: #{action}, meta: #{meta}" - ) - format(action_controller.public_send(action.action_type)) + Logux.watch_action { call_action } rescue Logux::UnknownActionError, Logux::UnknownChannelError => e logger.warn(e) format(nil) end + protected + + def call_action + logger.debug("Searching Logux action: #{action}, meta: #{meta}") + format(action_controller.public_send(action.action_type)) + end + private def format(response) diff --git a/lib/logux/action_watcher.rb b/lib/logux/action_watcher.rb new file mode 100644 index 0000000..c65062d --- /dev/null +++ b/lib/logux/action_watcher.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Logux + class ActionWatcher + def self.call(options = {}, &block) + new(options).call(&block) + end + + attr_reader :options + + def initialize(options = {}) + raise ArgumentError, :options unless options.is_a?(Hash) + + @options = options + end + + def call + yield + end + end +end diff --git a/lib/logux/rack.rb b/lib/logux/rack.rb index 7ecb4d2..8c2db50 100644 --- a/lib/logux/rack.rb +++ b/lib/logux/rack.rb @@ -50,8 +50,11 @@ def initialize(msg, meta: nil) autoload :Test, 'logux/test' autoload :ErrorRenderer, 'logux/error_renderer' autoload :Utils, 'logux/utils' + autoload :ActionWatcher, 'logux/action_watcher' configurable %i[ + action_watcher + action_watcher_options auth_rule logger logux_host @@ -68,6 +71,8 @@ def initialize(msg, meta: nil) config.on_error = proc {} config.auth_rule = proc { false } config.render_backtrace_on_error = true + config.action_watcher = Logux::ActionWatcher + config.action_watcher_options = {} end module Rack @@ -113,6 +118,14 @@ def logger configuration.logger end + def action_watcher + configuration.action_watcher.new(configuration.action_watcher_options) + end + + def watch_action + action_watcher.call { yield } + end + def application Logux::Rack::App end diff --git a/lib/logux/rack/app.rb b/lib/logux/rack/app.rb index f8f90d4..47adb30 100644 --- a/lib/logux/rack/app.rb +++ b/lib/logux/rack/app.rb @@ -41,7 +41,7 @@ def meta_params end def handle_processing_errors(logux_stream, exception) - Logux.configuration.on_error.call(exception) + Logux.configuration.on_error&.call(exception) Logux.logger.error("#{exception}\n#{exception.backtrace.join("\n")}") ensure logux_stream.write(Logux::ErrorRenderer.new(exception).message) diff --git a/lib/logux/version.rb b/lib/logux/rack/version.rb similarity index 53% rename from lib/logux/version.rb rename to lib/logux/rack/version.rb index 8cbfbab..d2f7598 100644 --- a/lib/logux/version.rb +++ b/lib/logux/rack/version.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true module Logux - VERSION = '0.1.0' + module Rack + VERSION = '0.1.0' + end end diff --git a/logux-rack.gemspec b/logux-rack.gemspec index c1a5f3a..3015886 100644 --- a/logux-rack.gemspec +++ b/logux-rack.gemspec @@ -2,11 +2,11 @@ lib = File.expand_path('lib', __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'logux/version' +require 'logux/rack/version' Gem::Specification.new do |spec| spec.name = 'logux-rack' - spec.version = Logux::VERSION + spec.version = Logux::Rack::VERSION spec.authors = ['WildDima'] spec.email = ['dtopornin@gmail.com'] spec.summary = 'Rack application backend for Logux proxy server' @@ -49,12 +49,11 @@ Gem::Specification.new do |spec| spec.add_dependency 'configurations' spec.add_dependency 'nanoid' spec.add_dependency 'rack', '~> 2.0' - spec.add_dependency 'rest-client' + spec.add_dependency 'rest-client', '>= 1.7.3', '< 3' spec.add_dependency 'sinatra', '>= 2.0', '< 3' spec.add_development_dependency 'bundler', '~> 1.16' spec.add_development_dependency 'coveralls' spec.add_development_dependency 'factory_bot' - spec.add_development_dependency 'pg' spec.add_development_dependency 'pry' spec.add_development_dependency 'pry-byebug' spec.add_development_dependency 'puma'