From 25e7ef265538f512eeec3f8bda0fcb7ad7517a25 Mon Sep 17 00:00:00 2001 From: Boris Staal Date: Fri, 9 Dec 2016 14:27:43 +0100 Subject: [PATCH] Fix wsdl route lookup (closes #215); Tick to stable release --- Appraisals | 6 ------ Rakefile | 1 - lib/wash_out/router.rb | 32 +++++++++++++------------------- lib/wash_out/version.rb | 2 +- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/Appraisals b/Appraisals index 72c92129..3da841e6 100644 --- a/Appraisals +++ b/Appraisals @@ -1,9 +1,3 @@ -appraise "rails-3.2.13" do - gem "rails", "3.2.13" - gem "test-unit" - gem "listen", "< 3.1.0" -end - appraise "rails-4.0.0" do gem "rails", "4.0.0" gem "listen", "< 3.1.0" diff --git a/Rakefile b/Rakefile index 546d6922..6799f21c 100644 --- a/Rakefile +++ b/Rakefile @@ -3,7 +3,6 @@ require 'bundler/gem_tasks' require 'appraisal' require 'rspec/core/rake_task' - RSpec::Core::RakeTask.new task :console do diff --git a/lib/wash_out/router.rb b/lib/wash_out/router.rb index 632c83b7..6f219317 100644 --- a/lib/wash_out/router.rb +++ b/lib/wash_out/router.rb @@ -4,41 +4,35 @@ module WashOut # This class is a Rack middleware used to route SOAP requests to a proper # action of a given SOAP controller. class Router - def self.lookup_soap_routes(controller_name, routes) - results = [] - + def self.lookup_soap_routes(controller_name, routes, path: [], &block) routes.each do |x| defaults = x.defaults defaults = defaults[:defaults] if defaults.include?(:defaults) # Rails 5 if defaults[:controller] == controller_name && defaults[:action] == 'soap' - results << x + yield path + [x] end app = x.app app = app.app if app.respond_to?(:app) if app.respond_to?(:routes) - results += lookup_soap_routes(controller_name, app.routes.routes) + lookup_soap_routes(controller_name, app.routes.routes, path: path+[x], &block) end end - - results end def self.url(request, controller_name) - route = lookup_soap_routes(controller_name, Rails.application.routes.routes).first - - path = if route.respond_to?(:optimized_path) # Rails 4 - route.optimized_path - elsif route.path.respond_to?(:build_formatter) # Rails 5 - route.path.build_formatter.evaluate(nil) - else - route.format({}) # Rails 3.2 - end + lookup_soap_routes(controller_name, Rails.application.routes.routes) do |routes| + path = if routes.first.respond_to?(:optimized_path) # Rails 4 + routes.map(&:optimized_path) + elsif routes.first.path.respond_to?(:build_formatter) # Rails 5 + routes.map{|x| x.path.build_formatter.evaluate(nil)} + else + routes.map{|x| x.format({})} # Rails 3.2 + end - path = path.join('') if path.is_a?(Array) - - request.protocol + request.host_with_port + path + return request.protocol + request.host_with_port + path.flatten.join('') + end end def initialize(controller_name) diff --git a/lib/wash_out/version.rb b/lib/wash_out/version.rb index f7cba4d6..2b82656e 100644 --- a/lib/wash_out/version.rb +++ b/lib/wash_out/version.rb @@ -1,3 +1,3 @@ module WashOut - VERSION = "0.11.0.beta.2" + VERSION = "0.11.0" end