diff --git a/app/helpers/washout_builder_helper.rb b/app/helpers/washout_builder_helper.rb
index cc8e5f7..c8fd4f3 100644
--- a/app/helpers/washout_builder_helper.rb
+++ b/app/helpers/washout_builder_helper.rb
@@ -90,19 +90,19 @@ def create_html_public_methods(xml, map)
def create_html_public_method(xml, operation, formats)
- # raise YAML::dump(formats[:in])
+ # raise YAML::dump(formats[:builder_in])
xml.h3 "#{operation}"
xml.a("name" => "#{operation}") {}
xml.p("class" => "pre"){ |pre|
- unless formats[:out].nil?
- complex_class = formats[:out][0].get_complex_class_name
- if WashoutBuilder::Type::BASIC_TYPES.include?(formats[:out][0].type)
- xml.span("class" => "blue") { |y| y<< "#{formats[:out][0].type}" }
+ unless formats[:builder_out].nil?
+ complex_class = formats[:builder_out][0].get_complex_class_name
+ if WashoutBuilder::Type::BASIC_TYPES.include?(formats[:builder_out][0].type)
+ xml.span("class" => "blue") { |y| y<< "#{formats[:builder_out][0].type}" }
else
unless complex_class.nil?
- if formats[:out][0].multiplied == false
+ if formats[:builder_out][0].multiplied == false
pre << "#{complex_class}"
else
pre << "Array of #{complex_class}"
@@ -114,13 +114,13 @@ def create_html_public_method(xml, operation, formats)
end
xml.span("class" => "bold") {|y| y << "#{operation} (" }
- mlen = formats[:in].size
+ mlen = formats[:builder_in].size
xml.br if mlen > 1
spacer = " "
if mlen > 0
j=0
while j 1 ? true : false
if WashoutBuilder::Type::BASIC_TYPES.include?(param.type)
@@ -156,9 +156,9 @@ def create_html_public_method(xml, operation, formats)
xml.ul {
j=0
- mlen = formats[:in].size
+ mlen = formats[:builder_in].size
while j "pre") { |pre|
if WashoutBuilder::Type::BASIC_TYPES.include?(param.type)
@@ -181,13 +181,13 @@ def create_html_public_method(xml, operation, formats)
xml.p "Return value:"
xml.ul {
xml.li {
- unless formats[:out].nil?
- complex_class = formats[:out][0].get_complex_class_name
- if WashoutBuilder::Type::BASIC_TYPES.include?(formats[:out][0].type)
- xml.span("class" => "pre") { |xml| xml.span("class" => "blue") { |sp| sp << "#{formats[:out][0].type}" } }
+ unless formats[:builder_out].nil?
+ complex_class = formats[:builder_out][0].get_complex_class_name
+ if WashoutBuilder::Type::BASIC_TYPES.include?(formats[:builder_out][0].type)
+ xml.span("class" => "pre") { |xml| xml.span("class" => "blue") { |sp| sp << "#{formats[:builder_out][0].type}" } }
else
unless complex_class.nil?
- if formats[:out][0].multiplied == false
+ if formats[:builder_out][0].multiplied == false
xml.span("class" => "pre") { xml.a("href" => "##{complex_class}") { |xml| xml.span("class" => "lightBlue") { |y| y<<"#{complex_class}" } } }
else
xml.span("class" => "pre") { xml.a("href" => "##{complex_class}") { |xml| xml.span("class" => "lightBlue") { |y| y<<"Array of #{complex_class}" } } }
diff --git a/lib/washout_builder.rb b/lib/washout_builder.rb
index 0f5b1a4..49af1c8 100644
--- a/lib/washout_builder.rb
+++ b/lib/washout_builder.rb
@@ -43,16 +43,50 @@ def initialize(attributes = nil)
[WashOut::SOAPError, SOAPError].each do |exception_class|
exception_class.class_eval do
extend WashoutBuilder::Document::VirtusModel
- include Virtus.model
- attribute :code, Integer
- attribute :message, String
- attribute :backtrace, String
+ include Virtus.model
+ attribute :code, Integer
+ attribute :message, String
+ attribute :backtrace, String
end
end
+if defined?(WashOut::SOAP)
+ WashOut::SOAP::ClassMethods.class_eval do
+ alias_method :original_soap_action, :soap_action
+ end
+end
+
+
+if defined?(WashOut::Rails::Controller)
+ WashOut::Rails::Controller::ClassMethods.class_eval do
+ alias_method :original_soap_action, :soap_action
+ end
+end
+
+WashOut::Param.class_eval do
+
+ def self.parse_builder_def(soap_config, definition)
+ raise RuntimeError, "[] should not be used in your params. Use nil if you want to mark empty set." if definition == []
+ return [] if definition == nil
+
+ definition = { :value => definition } unless definition.is_a?(Hash)
+
+ definition.collect do |name, opt|
+ if opt.is_a? WashOut::Param
+ opt
+ elsif opt.is_a? Array
+ WashOut::Param.new(soap_config, name, opt[0], true)
+ else
+ WashOut::Param.new(soap_config, name, opt)
+ end
+ end
+ end
+
+end
+
ActionController::Base.class_eval do
# Define a SOAP service. The function has no required +options+:
diff --git a/lib/washout_builder/document/generator.rb b/lib/washout_builder/document/generator.rb
index 91f981e..dad2b86 100644
--- a/lib/washout_builder/document/generator.rb
+++ b/lib/washout_builder/document/generator.rb
@@ -39,7 +39,7 @@ def input_types
types = []
unless soap_actions.blank?
soap_actions.each do |operation, formats|
- (formats[:in]).each do |p|
+ (formats[:builder_in]).each do |p|
types << p
end
end
@@ -51,7 +51,7 @@ def output_types
types = []
unless soap_actions.blank?
soap_actions.each do |operation, formats|
- (formats[:out]).each do |p|
+ (formats[:builder_out]).each do |p|
types << p
end
end
diff --git a/lib/washout_builder/soap.rb b/lib/washout_builder/soap.rb
index 13e4955..1c3b8f6 100644
--- a/lib/washout_builder/soap.rb
+++ b/lib/washout_builder/soap.rb
@@ -3,13 +3,43 @@
module WashoutBuilder
module SOAP
extend ActiveSupport::Concern
- include WashOut::Rails::Controller
+ include WashOut::SOAP if defined?(WashOut::SOAP)
+ include WashOut::Rails::Controller if defined?(WashOut::Rails::Controller)
-
+ module ClassMethods
+ attr_accessor :soap_actions
+ # Define a SOAP action +action+. The function has two required +options+:
+ # :args and :return. Each is a type +definition+ of format described in
+ # WashOut::Param#parse_def.
+ #
+ # An optional option :to can be passed to allow for names of SOAP actions
+ # which are not valid Ruby function names.
+ def soap_action(action, options={})
+ original_soap_action(action, options)
+
+ if action.is_a?(Symbol)
+ if soap_config.camelize_wsdl.to_s == 'lower'
+ action = action.to_s.camelize(:lower)
+ elsif soap_config.camelize_wsdl
+ action = action.to_s.camelize
+ end
+ end
+
+
+ current_action = self.soap_actions[action]
+ current_action[:builder_in] = WashOut::Param.parse_builder_def(soap_config, options[:args])
+ current_action[:builder_out] = WashOut::Param.parse_builder_def(soap_config, options[:return])
+
+ end
+ end
+
included do
+ include WashOut::Configurable if defined?(WashOut::Configurable)
+ include WashOut::Dispatcher if defined?(WashOut::Dispatcher)
include WashoutBuilder::Dispatcher
+ self.soap_actions = {}
end
end
end
diff --git a/lib/washout_builder/version.rb b/lib/washout_builder/version.rb
index 0c77931..76354ae 100644
--- a/lib/washout_builder/version.rb
+++ b/lib/washout_builder/version.rb
@@ -1,3 +1,3 @@
module WashoutBuilder
- VERSION = "0.10.4"
+ VERSION = "0.11.0"
end
diff --git a/spec/lib/washout_builder/dispatcher_spec.rb b/spec/lib/washout_builder/dispatcher_spec.rb
index d8d2f4c..33400a8 100644
--- a/spec/lib/washout_builder/dispatcher_spec.rb
+++ b/spec/lib/washout_builder/dispatcher_spec.rb
@@ -24,7 +24,7 @@ def dispatcher_method
:config => ApiController.soap_config,
:service_class => ApiController,
:soap_actions => {'dispatcher_method' =>
- {:args => nil, :return => nil, :in => [], :out => [], :to => 'dispatcher_method'}
+ {:args => nil, :return => nil, :in => [], :out => [],:builder_in => [], :builder_out => [], :to => 'dispatcher_method'}
}
)
get :_generate_doc
diff --git a/spec/lib/washout_builder/document/generator_spec.rb b/spec/lib/washout_builder/document/generator_spec.rb
index 44f45cf..d7b2f16 100644
--- a/spec/lib/washout_builder/document/generator_spec.rb
+++ b/spec/lib/washout_builder/document/generator_spec.rb
@@ -12,7 +12,7 @@
let(:soap_actions) {
{'dispatcher_method' =>
- {:args => nil, :return => nil, :in => [], :out => [], :to => 'dispatcher_method'}
+ {:args => nil, :return => nil, :in => [], :out => [], :builder_in => [], :builder_out => [], :to => 'dispatcher_method'}
}
}
let(:service_class) { ApiController }
@@ -68,7 +68,7 @@
context "input types" do
let(:expected) { types = []
soap_actions.each do |operation, formats|
- (formats[:in]).each do |p|
+ (formats[:builder_in]).each do |p|
types << p
end
end
@@ -81,7 +81,7 @@
context "output types" do
let(:expected) { types = []
soap_actions.each do |operation, formats|
- (formats[:out]).each do |p|
+ (formats[:builder_out]).each do |p|
types << p
end
end
diff --git a/spec/lib/washout_builder_spec.rb b/spec/lib/washout_builder_spec.rb
index 85e95fd..4358e7a 100644
--- a/spec/lib/washout_builder_spec.rb
+++ b/spec/lib/washout_builder_spec.rb
@@ -7,7 +7,8 @@
before(:each) do
WashOut::Rails::Engine.config.wash_out[:wsdl_style] = 'rpc'
WashOut::Rails::Engine.config.wash_out[:parser] = :nokogiri
- WashOut::Rails::Engine.config.wash_out[:catch_xml_errors] = true
+ WashOut::Rails::Engine.config.wash_out[:catch_xml_errors] = true
+ WashOut::Rails::Engine.config.wash_out[:camelize_wsdl] = "lower"
end
let :nori do
diff --git a/washout_builder.gemspec b/washout_builder.gemspec
index 5943862..01bd348 100644
--- a/washout_builder.gemspec
+++ b/washout_builder.gemspec
@@ -15,6 +15,6 @@ Gem::Specification.new do |s|
s.files = `git ls-files`.split("\n")
s.test_files = s.files.grep(/^(spec)/)
s.require_paths = ["lib"]
- s.add_dependency("wash_out", ">= 0.10.0.beta.1")
+ s.add_dependency("wash_out", ">= 0.9.0")
s.add_dependency("virtus", ">= 1.0.0")
end