wash_out 0.10.0.beta.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.travis.yml +23 -3
- data/Appraisals +11 -5
- data/Gemfile +2 -2
- data/README.md +66 -2
- data/Rakefile +6 -7
- data/app/helpers/wash_out_helper.rb +49 -18
- data/app/views/{wash_with_soap → wash_out}/document/error.builder +0 -0
- data/app/views/{wash_with_soap → wash_out}/document/response.builder +1 -3
- data/app/views/{wash_with_soap → wash_out}/document/wsdl.builder +15 -15
- data/app/views/{wash_with_soap → wash_out}/rpc/error.builder +0 -0
- data/app/views/{wash_with_soap → wash_out}/rpc/response.builder +1 -3
- data/app/views/{wash_with_soap → wash_out}/rpc/wsdl.builder +16 -16
- data/gemfiles/rails_3.1.3.gemfile +20 -0
- data/gemfiles/rails_3.2.12.gemfile +20 -0
- data/gemfiles/rails_4.0.0.gemfile +19 -0
- data/gemfiles/rails_4.1.0.gemfile +19 -0
- data/gemfiles/rails_4.2.0.gemfile +19 -0
- data/lib/wash_out.rb +48 -16
- data/lib/wash_out/configurable.rb +41 -0
- data/lib/wash_out/dispatcher.rb +212 -0
- data/lib/wash_out/engine.rb +12 -0
- data/lib/wash_out/middleware.rb +41 -0
- data/lib/wash_out/model.rb +29 -0
- data/lib/wash_out/param.rb +43 -16
- data/lib/wash_out/router.rb +95 -0
- data/lib/wash_out/soap.rb +48 -0
- data/lib/wash_out/soap_config.rb +93 -0
- data/lib/wash_out/type.rb +20 -13
- data/lib/wash_out/version.rb +1 -1
- data/lib/wash_out/wsse.rb +29 -10
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/lib/wash_out/dispatcher_spec.rb +28 -13
- data/spec/lib/wash_out/middleware_spec.rb +33 -0
- data/spec/lib/wash_out/param_spec.rb +47 -17
- data/spec/lib/wash_out/router_spec.rb +22 -0
- data/spec/lib/wash_out/type_spec.rb +9 -9
- data/spec/lib/wash_out_spec.rb +139 -87
- data/spec/spec_helper.rb +7 -1
- metadata +32 -25
- data/lib/wash_out/exceptions/programmer_error.rb +0 -10
- data/lib/wash_out/exceptions/soap_error.rb +0 -19
- data/lib/wash_out/middlewares/catcher.rb +0 -42
- data/lib/wash_out/middlewares/router.rb +0 -132
- data/lib/wash_out/rails/active_record.rb +0 -27
- data/lib/wash_out/rails/controller.rb +0 -201
- data/lib/wash_out/rails/engine.rb +0 -74
- data/spec/lib/wash_out/rack_spec.rb +0 -55
@@ -1,74 +0,0 @@
|
|
1
|
-
module WashOut
|
2
|
-
module Rails
|
3
|
-
class Engine < ::Rails::Engine
|
4
|
-
|
5
|
-
def self.defaults
|
6
|
-
{
|
7
|
-
parser: :rexml,
|
8
|
-
namespace: 'urn:WashOut',
|
9
|
-
wsdl_style: 'rpc',
|
10
|
-
snakecase_input: false,
|
11
|
-
camelize_wsdl: false,
|
12
|
-
catch_xml_errors: false,
|
13
|
-
wsse_username: nil,
|
14
|
-
wsse_password: nil
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
config.wash_out = ActiveSupport::OrderedOptions.new.merge!(defaults)
|
19
|
-
|
20
|
-
initializer "wash_out.configuration" do |app|
|
21
|
-
if app.config.wash_out[:catch_xml_errors]
|
22
|
-
app.config.middleware.insert_after 'ActionDispatch::ShowExceptions', WashOut::Middlewares::Catcher
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
initializer "wash_out.responders" do
|
27
|
-
Mime::Type.register "application/soap+xml", :soap
|
28
|
-
|
29
|
-
ActionController::Renderers.add :soap do |what, options|
|
30
|
-
_render_soap(what, options)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
ActionDispatch::Routing::Mapper.class_eval do
|
37
|
-
# Adds the routes for a SOAP endpoint at +controller+.
|
38
|
-
def wash_out(controller_name, options={})
|
39
|
-
options.reverse_merge!(@scope) if @scope
|
40
|
-
controller_path = [options[:module], controller_name].compact.join("/")
|
41
|
-
|
42
|
-
# WSDL Route
|
43
|
-
match "#{controller_name}/wsdl" => "#{controller_name}#_generate_wsdl",
|
44
|
-
via: :get,
|
45
|
-
format: false
|
46
|
-
|
47
|
-
# Responding point
|
48
|
-
match "#{controller_name}/action" => WashOut::Middlewares::Router.new(controller_path),
|
49
|
-
via: [:get, :post],
|
50
|
-
format: false
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
ActionController::Base.class_eval do
|
55
|
-
# Define a SOAP service. The function has no required +options+:
|
56
|
-
# but allow any of :parser, :namespace, :wsdl_style, :snakecase_input,
|
57
|
-
# :camelize_wsdl, :wsse_username, :wsse_password and :catch_xml_errors.
|
58
|
-
#
|
59
|
-
# Any of the the params provided allows for overriding the defaults
|
60
|
-
# (like supporting multiple namespaces instead of application wide such)
|
61
|
-
#
|
62
|
-
def self.soap_service(options={})
|
63
|
-
include WashOut::Rails::Controller
|
64
|
-
self.soap_config = options
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
if defined?(ActiveRecord)
|
69
|
-
ActiveRecord::Base.class_eval do
|
70
|
-
# Turns AR models into WashOut types
|
71
|
-
extend WashOut::Rails::ActiveRecord
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'wash_out/middlewares/catcher'
|
3
|
-
require 'rexml/document'
|
4
|
-
|
5
|
-
describe WashOut::Middlewares::Catcher do
|
6
|
-
context 'catches REXML' do
|
7
|
-
let(:app) { lambda {|env| REXML::Document.new '<hi>' } }
|
8
|
-
let(:rack) { WashOut::Middlewares::Catcher.new(app) }
|
9
|
-
let(:env) { {} }
|
10
|
-
|
11
|
-
it 'passes exceptions through when not in SOAP mode' do
|
12
|
-
lambda { rack.call(env) }.should raise_exception
|
13
|
-
end
|
14
|
-
|
15
|
-
context 'intercepts when in SOAP mode' do
|
16
|
-
subject { rack.call(env) }
|
17
|
-
|
18
|
-
context 'for basic rack servers' do
|
19
|
-
let(:env) do
|
20
|
-
{
|
21
|
-
'HTTP_SOAPACTION' => 'pretend_action',
|
22
|
-
'rack.errors' => double('logger', puts: true),
|
23
|
-
'rack.input' => double('basic-rack-input', string: 'hi')
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
it do
|
28
|
-
subject[0].should == 400
|
29
|
-
subject[1]['Content-Type'].should == 'text/xml'
|
30
|
-
subject[2][0].should include 'Error parsing SOAP Request XML'
|
31
|
-
subject[2][0].should include 'soap:Fault'
|
32
|
-
subject[2][0].should_not include __FILE__
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'for passenger' do
|
37
|
-
let(:env) do
|
38
|
-
{
|
39
|
-
'HTTP_SOAPACTION' => 'pretend_action',
|
40
|
-
'rack.errors' => double('logger', puts: true),
|
41
|
-
'rack.input' => double('basic-rack-input', read: 'hi')
|
42
|
-
}
|
43
|
-
end
|
44
|
-
|
45
|
-
it do
|
46
|
-
subject[0].should == 400
|
47
|
-
subject[1]['Content-Type'].should == 'text/xml'
|
48
|
-
subject[2][0].should include 'Error parsing SOAP Request XML'
|
49
|
-
subject[2][0].should include 'soap:Fault'
|
50
|
-
subject[2][0].should_not include __FILE__
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|