wash_out 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.4
4
+
5
+ * WSDL generation fixed to support complex structures for return values
6
+ * Configuration moved to OrderedOptions with proper Engine binding
7
+ * `snakecase` configuration directive added: if set to false, wash_out won't modify params keys
8
+
3
9
  ## 0.3.3
4
10
 
5
11
  * Tiny fixes in wash_out behavior with inline arrays (#11, #12)
@@ -21,4 +27,4 @@
21
27
 
22
28
  * The syntax for empty set (no input params or output params) changed from [] to nil.
23
29
  * SOAP response format improved. All results are now wrapped into tns:messages instead of soap:Body.
24
- * Arrays (minOccurs/maxOccurs) are now supported with `:foo => [:integer]` syntax.
30
+ * Arrays (minOccurs/maxOccurs) are now supported with `:foo => [:integer]` syntax.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wash_out (0.3.2)
4
+ wash_out (0.3.4)
5
5
  nori
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -122,10 +122,15 @@ result.to_hash # => {:value=>"123abc"}
122
122
 
123
123
  Take a look at [WashOut sample application](https://github.com/roundlake/wash_out-sample).
124
124
 
125
- Namespace
125
+ Configuration
126
126
  ---------
127
127
 
128
- Use `config.action_view.washout_namespace = 'urn:test'` inside your environment configuration to modify default `urn:WashOut` namespace.
128
+ Use `config.wash_out...` inside your environment configuration to setup WashOut.
129
+
130
+ Available properties are:
131
+
132
+ * **namespace**: SOAP namespace to use. Default is `urn:WashOut`.
133
+ * **snakecase**: Determines if WashOut should modify parameters keys to snakecase. Default is true.
129
134
 
130
135
  License
131
136
  -------
@@ -11,7 +11,7 @@ xml.definitions 'xmlns' => 'http://schemas.xmlsoap.org/wsdl/',
11
11
  xml.types do
12
12
  xml.tag! "xsd:schema", :targetNamespace => @namespace do
13
13
  @map.each do |operation, formats|
14
- formats[:in].each do |p|
14
+ (formats[:in] + formats[:out]).each do |p|
15
15
  wsdl_type xml, p
16
16
  end
17
17
  end
@@ -9,11 +9,6 @@ module WashOut
9
9
  # response.
10
10
  class SOAPError < Exception; end
11
11
 
12
- def namespace
13
- namespace = ActionView::Base.washout_namespace if defined?(ActionView::Base)
14
- namespace ||= 'urn:WashOut'
15
- end
16
-
17
12
  # This filter parses the SOAP request and puts it into +params+ array.
18
13
  def _parse_soap_parameters
19
14
  soap_action = request.env['wash_out.soap_action']
@@ -23,10 +18,18 @@ module WashOut
23
18
  strip = Nori.strip_namespaces?
24
19
  convert = Nori.convert_tags?
25
20
  Nori.strip_namespaces = true
26
- Nori.convert_tags_to { |tag| tag.snakecase.to_sym }
21
+
22
+ if WashOut::Engine.snakecase
23
+ Nori.convert_tags_to { |tag| tag.snakecase.to_sym }
24
+ else
25
+ Nori.convert_tags_to { |tag| tag.to_sym }
26
+ end
27
27
 
28
28
  params = Nori.parse(request.body)
29
- xml_data = params[:envelope][:body][soap_action.underscore.to_sym] || {}
29
+
30
+ xml_data = params.values_at(:envelope, :Envelope).compact.first
31
+ xml_data = xml_data.values_at(:body, :Body).compact.first
32
+ xml_data = xml_data.values_at(soap_action.underscore.to_sym, soap_action.to_sym).compact.first || {}
30
33
 
31
34
  strip_empty_nodes = lambda{|hash|
32
35
  hash.each do |key, value|
@@ -64,7 +67,7 @@ module WashOut
64
67
  # This action generates the WSDL for defined SOAP methods.
65
68
  def _generate_wsdl
66
69
  @map = self.class.soap_actions
67
- @namespace = namespace
70
+ @namespace = WashOut::Engine.namespace
68
71
  @name = controller_path.gsub('/', '_')
69
72
 
70
73
  render :template => 'wash_with_soap/wsdl'
@@ -72,9 +75,9 @@ module WashOut
72
75
 
73
76
  # Render a SOAP response.
74
77
  def _render_soap(result, options)
75
- @namespace = namespace
78
+ @namespace = WashOut::Engine.namespace
76
79
  @operation = soap_action = request.env['wash_out.soap_action']
77
- action_spec = self.class.soap_actions[soap_action][:out].clone
80
+ action_spec = self.class.soap_actions[soap_action][:out]
78
81
 
79
82
  result = { 'value' => result } unless result.is_a? Hash
80
83
  result = HashWithIndifferentAccess.new(result)
@@ -1,4 +1,19 @@
1
1
  module WashOut
2
2
  class Engine < ::Rails::Engine
3
+ class << self
4
+ attr_accessor :namespace
5
+ attr_accessor :snakecase
6
+ end
7
+
8
+ self.namespace = 'urn:WashOut'
9
+ self.snakecase = false
10
+
11
+ config.wash_out = ActiveSupport::OrderedOptions.new
12
+
13
+ initializer "wash_out.configuration" do |app|
14
+ app.config.wash_out.each do |key, value|
15
+ self.class.send "#{key}=", value
16
+ end
17
+ end
3
18
  end
4
19
  end
@@ -1,3 +1,3 @@
1
1
  module WashOut
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4"
3
3
  end
@@ -3,6 +3,11 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe WashOut do
6
+ before(:each) do
7
+ WashOut::Engine.snakecase = true
8
+ WashOut::Engine.namespace = false
9
+ end
10
+
6
11
  it "should be valid" do
7
12
  WashOut.should be_a(Module)
8
13
  end
@@ -81,19 +86,19 @@ describe WashOut do
81
86
  client.request(:answer).to_hash[:answer_response][:value].should == "42"
82
87
  end
83
88
 
84
- # it "should answer to request with empty parameter" do
85
- # mock_controller do
86
- # soap_action "answer", :args => {:a => :string}, :return => {:a => :string}
87
- # def answer
88
- # render :soap => {:a => params[:a]}
89
- # end
90
- # end
91
- #
92
- # client = savon_instance
93
- # client.request(:answer) do
94
- # soap.body = { :a => '' }
95
- # end.to_hash[:answer_response][:a].should == ''
96
- # end
89
+ it "should answer to request with empty parameter" do
90
+ mock_controller do
91
+ soap_action "answer", :args => {:a => :string}, :return => {:a => :string}
92
+ def answer
93
+ render :soap => {:a => params[:a]}
94
+ end
95
+ end
96
+
97
+ client = savon_instance
98
+ client.request(:answer) do
99
+ soap.body = { :a => '' }
100
+ end.to_hash[:answer_response][:a].should == {:"@xsi:type"=>"xsd:string"}
101
+ end
97
102
 
98
103
  it "should answer to request with one parameter" do
99
104
  mock_controller do
@@ -112,6 +117,23 @@ describe WashOut do
112
117
  end.to_hash[:check_answer_response][:value].should == false
113
118
  end
114
119
 
120
+ it "should handle snakecase option properly" do
121
+ WashOut::Engine.snakecase = false
122
+
123
+ mock_controller do
124
+ soap_action "rocknroll", :args => {:ZOMG => :string}, :return => nil
125
+ def rocknroll
126
+ params["ZOMG"].should == "yam!"
127
+ render :soap => nil
128
+ end
129
+ end
130
+
131
+ client = savon_instance
132
+ client.request(:rocknroll) do
133
+ soap.body = { "ZOMG" => 'yam!' }
134
+ end
135
+ end
136
+
115
137
  it "should answer to request with two parameter" do
116
138
  mock_controller do
117
139
  soap_action "funky", :args => { :a => :integer, :b => :string }, :return => :string
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wash_out
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-17 00:00:00.000000000 Z
13
+ date: 2012-03-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nori
17
- requirement: &70221734751660 !ruby/object:Gem::Requirement
17
+ requirement: &70189925216220 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70221734751660
25
+ version_requirements: *70189925216220
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rspec-rails
28
- requirement: &70221734751040 !ruby/object:Gem::Requirement
28
+ requirement: &70189925215640 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70221734751040
36
+ version_requirements: *70189925215640
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: appraisal
39
- requirement: &70221734750580 !ruby/object:Gem::Requirement
39
+ requirement: &70189925215120 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70221734750580
47
+ version_requirements: *70189925215120
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: tzinfo
50
- requirement: &70221734750100 !ruby/object:Gem::Requirement
50
+ requirement: &70189925214560 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70221734750100
58
+ version_requirements: *70189925214560
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: savon
61
- requirement: &70221734768560 !ruby/object:Gem::Requirement
61
+ requirement: &70189925214060 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70221734768560
69
+ version_requirements: *70189925214060
70
70
  description: Dead simple Rails 3 SOAP server library
71
71
  email: boris@roundlake.ru
72
72
  executables: []