Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 21 additions & 17 deletions lib/twirp/rails.rb
Original file line number Diff line number Diff line change
@@ -1,38 +1,39 @@
# frozen_string_literal: true
require "twirp/rails/rails_ext/rack/logger"
require "twirp/rails/logging/formatters/json"
require "twirp/rails/logging/formatters/key_value"
require "twirp/rails/configurations/logging"
require "twirp/rails/configuration"
require 'twirp/rails/logging/adapter'
require 'twirp/rails/logging/subscriber'
require "twirp/rails/service_wrapper"
require "twirp/rails/helpers/hooks"
require "twirp/rails/helpers/services"
require "twirp/rails/routes"
require "twirp/rails/engine"
require "twirp/rails/version"
require 'active_support'

module Twirp
module Rails
class << self
attr_accessor :application

def configuration
@configuration ||= Configuration.new
end

def configure(&block)
yield configuration if block_given?
setup
configuration
end

def setup
if configuration.logging.log_twirp_calls
if configuration.logging.log_twirp_calls.is_a?(Proc)
log_twirp_calls!(&configuration.logging.log_twirp_calls)
else
log_twirp_calls!
end
def setup_logging(app)
@application = app

require "twirp/rails/rails_ext/rack/logger"

if application.config.twirp.logging.log_writer.is_a?(Proc)
log_twirp_calls!(&app.config.twirp.logging.log_writer)
else
log_twirp_calls!
end
end

Expand All @@ -59,19 +60,22 @@ def log_twirp_calls!(&log_writer)

def load_handlers
configuration.handlers_paths.each do |handlers_path|
::Rails.application.reloader.to_prepare do
Dir[File.join(handlers_path.to_s, '**', '*.rb')].sort.each { |f| require f }
end
Dir[File.join(handlers_path.to_s, '**', '*.rb')].sort.each {|f| require f }
end
end

def load_hooks
configuration.hooks_paths.each do |hooks_path|
::Rails.application.reloader.to_prepare do
Dir[File.join(hooks_path.to_s, '**', '*.rb')].sort.each { |f| require f }
end
Dir[File.join(hooks_path.to_s, '**', '*.rb')].sort.each { |f| require f }
end
end

def application_config
application.config.twirp
end
end
end
end


require "twirp/rails/railtie" if defined?(Rails)
3 changes: 1 addition & 2 deletions lib/twirp/rails/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
module Twirp
module Rails
class Configuration
attr_reader :handlers_paths, :hooks_paths, :logging
attr_accessor :handlers_paths, :hooks_paths

def initialize
@handlers_paths = []
@hooks_paths = []
@logging = Twirp::Rails::Configurations::Logging.new
end

def add_handlers_path(path)
Expand Down
30 changes: 0 additions & 30 deletions lib/twirp/rails/configurations/logging.rb

This file was deleted.

15 changes: 0 additions & 15 deletions lib/twirp/rails/engine.rb

This file was deleted.

9 changes: 6 additions & 3 deletions lib/twirp/rails/logging/subscriber.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'active_support'
require 'active_support/log_subscriber'

module Twirp
module Rails
module Logging
Expand All @@ -20,13 +23,13 @@ def default_log_writer(event)
**base_log_info(event)
}

twirp_call_info[:params] = event.payload[:env][:input].to_h if Twirp::Rails.configuration.logging.log_params
twirp_call_info[:params] = event.payload[:env][:input].to_h if Twirp::Rails.application_config.logging.log_params

if (exception = event.payload[:env][:exception]) && Twirp::Rails.configuration.logging.log_exceptions
if (exception = event.payload[:env][:exception]) && Twirp::Rails.application_config.logging.log_exceptions
twirp_call_info[:exception] = exception
end

data = Twirp::Rails.configuration.logging.log_formatter.call(twirp_call_info)
data = Twirp::Rails.application_config.logging.log_formatter.call(twirp_call_info)
logger.info data
end

Expand Down
27 changes: 27 additions & 0 deletions lib/twirp/rails/railtie.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true


require 'active_support'
require 'active_support/ordered_options'
require "rails/railtie"

module Twirp
module Rails
class Railtie < ::Rails::Railtie
config.twirp = ActiveSupport::OrderedOptions.new
config.twirp.logging = ActiveSupport::OrderedOptions.new
config.twirp.logging.enabled = true
config.twirp.logging.log_exceptions = false
config.twirp.logging.log_params = false
config.twirp.logging.log_formatter = Twirp::Rails::Logging::Formatters::KeyValue.new


config.after_initialize do |app|
Twirp::Rails.load_hooks
Twirp::Rails.load_handlers
Twirp::Rails::Routes.install!
Twirp::Rails.setup_logging(app) if app.config.twirp.logging.enabled
end
end
end
end
20 changes: 15 additions & 5 deletions lib/twirp/rails/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module Twirp
module Rails
class Routes # :nodoc:
module Helper
def use_twirp(namespace, options = {})
def use_twirp(namespace, options={})
services = Twirp::Rails.services
Twirp::Rails::Routes.new(self, services).generate_routes!(namespace, options)
end
Expand Down Expand Up @@ -46,9 +46,17 @@ def initialize(routes, services)
@services = services
end

def generate_routes!(mount_namespace, options)
def generate_routes!(mount_namespace, options={})
routes.scope options[:scope] || 'twirp' do
@services.each do |service_wrapper:, namespace:, context: nil, hooks: []|
@services.each do |service_options|
service_wrapper = service_options[:service_wrapper]
namespace = service_options[:namespace]
context = service_options[:context]
hooks = service_options[:hooks] || []

raise ArgumentError.new("service_wrapper must be set before binding a service.") if service_wrapper.nil?
raise ArgumentError.new("namespace must be set before binding a service.") if namespace.nil?

next unless mount_namespace.to_sym == namespace

service = service_wrapper.service
Expand All @@ -71,8 +79,10 @@ def generate_routes!(mount_namespace, options)
end

def attach_service_hooks!(service_wrapper, hooks)
hooks.each do |hook_klass:, only: [], except: [], options: {}|
hook_klass.attach(service_wrapper, only: only, except: except, **options)
hooks.each do |hook_options|
hook_klass = hook_options[:hook_klass]
options = hook_options[:options] || {}
hook_klass.attach(service_wrapper, **options)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/twirp/rails/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module Twirp
module Rails
VERSION = "0.5.2"
VERSION = "0.6.0"
end
end
1 change: 1 addition & 0 deletions twirp-rails.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Gem::Specification.new do |spec|

spec.required_ruby_version = '>= 2.0.0'

spec.add_dependency "actionpack", ">= 4.2"
spec.add_dependency "activesupport", ">= 4.2"
spec.add_dependency "railties", ">= 4.2"
spec.add_dependency "twirp", "~> 1.7"
Expand Down