nogara-wash_out 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. data/.gitignore +9 -0
  2. data/.travis.yml +3 -0
  3. data/Appraisals +7 -0
  4. data/CHANGELOG.md +79 -0
  5. data/Gemfile +5 -0
  6. data/Gemfile.lock +118 -0
  7. data/LICENSE +22 -0
  8. data/README.md +181 -0
  9. data/Rakefile +14 -0
  10. data/app/helpers/wash_out_helper.rb +64 -0
  11. data/app/views/wash_with_soap/error.builder +10 -0
  12. data/app/views/wash_with_soap/response.builder +13 -0
  13. data/app/views/wash_with_soap/wsdl.builder +68 -0
  14. data/gemfiles/rails-3.0.11.gemfile +8 -0
  15. data/gemfiles/rails-3.0.11.gemfile.lock +130 -0
  16. data/gemfiles/rails-3.1.3.gemfile +8 -0
  17. data/gemfiles/rails-3.1.3.gemfile.lock +141 -0
  18. data/init.rb +1 -0
  19. data/lib/wash_out.rb +35 -0
  20. data/lib/wash_out/dispatcher.rb +206 -0
  21. data/lib/wash_out/engine.rb +30 -0
  22. data/lib/wash_out/model.rb +25 -0
  23. data/lib/wash_out/param.rb +176 -0
  24. data/lib/wash_out/router.rb +36 -0
  25. data/lib/wash_out/soap.rb +40 -0
  26. data/lib/wash_out/type.rb +28 -0
  27. data/lib/wash_out/version.rb +3 -0
  28. data/lib/wash_out/wsse.rb +79 -0
  29. data/spec/dummy/Rakefile +7 -0
  30. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  31. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  32. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  33. data/spec/dummy/config.ru +4 -0
  34. data/spec/dummy/config/application.rb +42 -0
  35. data/spec/dummy/config/boot.rb +10 -0
  36. data/spec/dummy/config/environment.rb +5 -0
  37. data/spec/dummy/config/environments/development.rb +23 -0
  38. data/spec/dummy/config/environments/test.rb +30 -0
  39. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  40. data/spec/dummy/config/initializers/inflections.rb +10 -0
  41. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  42. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  43. data/spec/dummy/config/initializers/session_store.rb +8 -0
  44. data/spec/dummy/config/locales/en.yml +5 -0
  45. data/spec/dummy/config/routes.rb +58 -0
  46. data/spec/dummy/public/404.html +26 -0
  47. data/spec/dummy/public/422.html +26 -0
  48. data/spec/dummy/public/500.html +26 -0
  49. data/spec/dummy/public/favicon.ico +0 -0
  50. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  51. data/spec/dummy/script/rails +6 -0
  52. data/spec/spec_helper.rb +51 -0
  53. data/spec/support/httpi-rack.rb +46 -0
  54. data/spec/wash_out/dispatcher_spec.rb +65 -0
  55. data/spec/wash_out/param_spec.rb +26 -0
  56. data/spec/wash_out/type_spec.rb +23 -0
  57. data/spec/wash_out_spec.rb +686 -0
  58. data/wash_out.gemspec +21 -0
  59. metadata +183 -0
@@ -0,0 +1,9 @@
1
+ .bundle/
2
+ .idea/
3
+ log/*.log
4
+ pkg/
5
+ spec/dummy/db/*.sqlite3
6
+ spec/dummy/log/*.log
7
+ spec/dummy/tmp/
8
+ gemfiles/rails-3.1.0.gemfile.lock b/gemfiles/rails-3.1.0.gemfile.lock
9
+ gemfiles/rails-3.1.0.gemfile.lock b/gemfiles/rails-3.0.10.gemfile.lock
@@ -0,0 +1,3 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - jruby-19mode
@@ -0,0 +1,7 @@
1
+ appraise "rails-3.1.3" do
2
+ gem "rails", "3.1.3"
3
+ end
4
+
5
+ appraise "rails-3.0.11" do
6
+ gem "rails", "3.0.11"
7
+ end
@@ -0,0 +1,79 @@
1
+ # Changelog
2
+
3
+ ## 0.5.2
4
+
5
+ * .NET-compliant response tags [@ebeigarts][]
6
+ * Tiny fixes [@ebeigarts][]
7
+
8
+ ## 0.5.1
9
+
10
+ * Better routing points [@inossidabile][]
11
+
12
+ ## 0.5.0
13
+
14
+ * WSSE password authentication [@dhinus][]
15
+ * Ruby 1.8 compatibility restores [@dhinus][]
16
+
17
+ ## 0.4.2
18
+
19
+ * SOAP hrefs are now supported [@inossidabile][]
20
+ * Better camelization: reusable types and methods are now supported [@inossidabile][]
21
+
22
+ ## 0.4.1
23
+
24
+ * .NET-compliant :integer type WSDL [@inossidabile][]
25
+
26
+ ## 0.4.0
27
+
28
+ * Better content-type for the response (#33) [@inossidabile][]
29
+ * Date type support (#18) [@inossidabile][]
30
+ * Avoid duplication of inner types [@inossidabile][]
31
+ * Output camelization support [@inossidabile][]
32
+ * External types declaration support (#21, #41) [@inossidabile][]
33
+
34
+ ## 0.3.7
35
+
36
+ * Better empty parameters handling (#26, #30) [@rngtng][]
37
+
38
+ ## 0.3.6
39
+
40
+ * Unicorn stream reading bug (#20)
41
+ * .NET minOccurs/maxOccurs basic WSDL compatibility (#22, #23)
42
+
43
+ ## 0.3.5
44
+
45
+ * Very evil thread-safety bug fixed. You are encouraged to never use anything below this version.
46
+
47
+ ## 0.3.4
48
+
49
+ * WSDL generation fixed to support complex structures for return values
50
+ * Configuration moved to OrderedOptions with proper Engine binding
51
+ * `snakecase` configuration directive added: if set to false, wash_out won't modify params keys
52
+
53
+ ## 0.3.3
54
+
55
+ * Tiny fixes in wash_out behavior with inline arrays (#11, #12)
56
+ * Ability to change namespace
57
+
58
+ ## 0.3.2
59
+
60
+ * WashOut doesn't check existance of parameters anymore you should do it yourself from now
61
+ * Proper handling of blank parameters (#10)
62
+ * Proper handling of complex structures inside arrays (#9)
63
+ * Response performance improved
64
+
65
+ ## 0.3.1
66
+
67
+ * Support of complex structures inside array
68
+ * Better Nori handling (no more dependency on Savon hijacking)
69
+
70
+ ## 0.3.0
71
+
72
+ * The syntax for empty set (no input params or output params) changed from [] to nil.
73
+ * SOAP response format improved. All results are now wrapped into tns:messages instead of soap:Body.
74
+ * Arrays (minOccurs/maxOccurs) are now supported with `:foo => [:integer]` syntax.
75
+
76
+ [@inossidabile]: https://twitter.com/#!/_inossidabile
77
+ [@rngtng]: https://github.com/rngtng
78
+ [@dhinus]: https://github.com/dhinus
79
+ [@ebeigarts]: https://github.com/ebeigarts
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'pry'
4
+
5
+ gemspec
@@ -0,0 +1,118 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ wash_out (0.5.2)
5
+ nori
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ actionpack (3.2.1)
11
+ activemodel (= 3.2.1)
12
+ activesupport (= 3.2.1)
13
+ builder (~> 3.0.0)
14
+ erubis (~> 2.7.0)
15
+ journey (~> 1.0.1)
16
+ rack (~> 1.4.0)
17
+ rack-cache (~> 1.1)
18
+ rack-test (~> 0.6.1)
19
+ sprockets (~> 2.1.2)
20
+ activemodel (3.2.1)
21
+ activesupport (= 3.2.1)
22
+ builder (~> 3.0.0)
23
+ activesupport (3.2.1)
24
+ i18n (~> 0.6)
25
+ multi_json (~> 1.0)
26
+ akami (1.0.0)
27
+ gyoku (>= 0.4.0)
28
+ appraisal (0.4.1)
29
+ bundler
30
+ rake
31
+ builder (3.0.0)
32
+ coderay (1.0.5)
33
+ diff-lcs (1.1.3)
34
+ erubis (2.7.0)
35
+ gyoku (0.4.4)
36
+ builder (>= 2.1.2)
37
+ hike (1.2.1)
38
+ httpi (0.9.6)
39
+ rack
40
+ i18n (0.6.0)
41
+ journey (1.0.3)
42
+ json (1.6.5)
43
+ json (1.6.5-java)
44
+ method_source (0.7.1)
45
+ multi_json (1.1.0)
46
+ nokogiri (1.5.0)
47
+ nokogiri (1.5.0-java)
48
+ nori (1.1.0)
49
+ pry (0.9.8.4)
50
+ coderay (~> 1.0.5)
51
+ method_source (~> 0.7.1)
52
+ slop (>= 2.4.4, < 3)
53
+ pry (0.9.8.4-java)
54
+ coderay (~> 1.0.5)
55
+ method_source (~> 0.7.1)
56
+ slop (>= 2.4.4, < 3)
57
+ spoon (~> 0.0)
58
+ rack (1.4.1)
59
+ rack-cache (1.1)
60
+ rack (>= 0.4)
61
+ rack-ssl (1.3.2)
62
+ rack
63
+ rack-test (0.6.1)
64
+ rack (>= 1.0)
65
+ railties (3.2.1)
66
+ actionpack (= 3.2.1)
67
+ activesupport (= 3.2.1)
68
+ rack-ssl (~> 1.3.2)
69
+ rake (>= 0.8.7)
70
+ rdoc (~> 3.4)
71
+ thor (~> 0.14.6)
72
+ rake (0.9.2.2)
73
+ rdoc (3.12)
74
+ json (~> 1.4)
75
+ rspec (2.8.0)
76
+ rspec-core (~> 2.8.0)
77
+ rspec-expectations (~> 2.8.0)
78
+ rspec-mocks (~> 2.8.0)
79
+ rspec-core (2.8.0)
80
+ rspec-expectations (2.8.0)
81
+ diff-lcs (~> 1.1.2)
82
+ rspec-mocks (2.8.0)
83
+ rspec-rails (2.8.1)
84
+ actionpack (>= 3.0)
85
+ activesupport (>= 3.0)
86
+ railties (>= 3.0)
87
+ rspec (~> 2.8.0)
88
+ savon (0.9.9)
89
+ akami (~> 1.0)
90
+ builder (>= 2.1.2)
91
+ gyoku (>= 0.4.0)
92
+ httpi (~> 0.9)
93
+ nokogiri (>= 1.4.0)
94
+ nori (~> 1.1)
95
+ wasabi (~> 2.1)
96
+ slop (2.4.4)
97
+ spoon (0.0.1)
98
+ sprockets (2.1.2)
99
+ hike (~> 1.2)
100
+ rack (~> 1.0)
101
+ tilt (~> 1.1, != 1.3.0)
102
+ thor (0.14.6)
103
+ tilt (1.3.3)
104
+ tzinfo (0.3.31)
105
+ wasabi (2.1.0)
106
+ nokogiri (>= 1.4.0)
107
+
108
+ PLATFORMS
109
+ java
110
+ ruby
111
+
112
+ DEPENDENCIES
113
+ appraisal
114
+ pry
115
+ rspec-rails
116
+ savon
117
+ tzinfo
118
+ wash_out!
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2012 Round Lake, inc.,
4
+ Peter Zotov <whitequark@whitequark.org>.
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
@@ -0,0 +1,181 @@
1
+ # WashOut
2
+
3
+ WashOut is a gem that greatly simplifies creation of SOAP service providers.
4
+
5
+ But if you have a chance, please [http://stopsoap.com/](http://stopsoap.com/).
6
+
7
+ ## Compatibility
8
+
9
+ Rails >3.0 only.
10
+
11
+ WashOut should work like a charm on CRuby 1.9.x.
12
+
13
+ ![Travis CI](https://secure.travis-ci.org/roundlake/wash_out.png)
14
+
15
+ We do support CRuby 1.8.7. However it is not a goal and it is not well supported by our specs. According to
16
+ this fact it maybe sometimes broken from the start on major releases. You are welcome to hold on an old
17
+ version and give us enough issues and pull-requests to make it work.
18
+
19
+ All dependencies are JRuby-compatible so again it will work well in --1.9 mode but it can fail with
20
+ fresh releases if you go --1.8.
21
+
22
+ ## Installation
23
+
24
+ In your Gemfile, add this line:
25
+
26
+ gem 'wash_out'
27
+
28
+ ## Usage
29
+
30
+ A SOAP endpoint in WashOut is simply a Rails controller which includes the module WashOut::SOAP. Each SOAP
31
+ action corresponds to a certain controller method; this mapping, as well as the argument definition, is defined
32
+ by [soap_action][] method. Check the method documentation for complete info; here, only a few examples will be
33
+ demonstrated.
34
+
35
+ [soap_action]: http://rubydoc.info/gems/wash_out/WashOut/SOAP/ClassMethods#soap_action-instance_method
36
+
37
+ ```ruby
38
+ # app/controllers/rumbas_controller.rb
39
+ class RumbasController < ApplicationController
40
+ include WashOut::SOAP
41
+
42
+ # Simple case
43
+ soap_action "integer_to_string",
44
+ :args => :integer,
45
+ :return => :string
46
+ def integer_to_string
47
+ render :soap => params[:value].to_s
48
+ end
49
+
50
+ soap_action "concat",
51
+ :args => { :a => :string, :b => :string },
52
+ :return => :string
53
+ def concat
54
+ render :soap => (params[:a] + params[:b])
55
+ end
56
+
57
+ # Complex structures
58
+ soap_action "AddCircle",
59
+ :args => { :circle => { :center => { :x => :integer,
60
+ :y => :integer },
61
+ :radius => :double } },
62
+ :return => nil, # [] for wash_out below 0.3.0
63
+ :to => :add_circle
64
+ def add_circle
65
+ circle = params[:circle]
66
+
67
+ raise SOAPError, "radius is too small" if circle[:radius] < 3.0
68
+
69
+ Circle.new(circle[:center][:x], circle[:center][:y], circle[:radius])
70
+
71
+ render :soap => nil
72
+ end
73
+
74
+ # Arrays
75
+ soap_action "integers_to_boolean",
76
+ :args => { :data => [:integer] },
77
+ :return => [:boolean]
78
+ def integers_to_boolean
79
+ render :soap => params[:data].map{|x| x ? 1 : 0}
80
+ end
81
+
82
+ # You can use all Rails features like filtering, too. A SOAP controller
83
+ # is just like a normal controller with a special routing.
84
+ before_filter :dump_parameters
85
+ def dump_parameters
86
+ Rails.logger.debug params.inspect
87
+ end
88
+ end
89
+ ```
90
+
91
+ ```ruby
92
+ # config/routes.rb
93
+ WashOutSample::Application.routes.draw do
94
+ wash_out :rumbas
95
+ end
96
+ ```
97
+
98
+ In such a setup, the generated WSDL may be queried at path `/api/wsdl`. So, with a
99
+ gem like Savon, a request can be done using this path:
100
+
101
+ ```ruby
102
+ require 'savon'
103
+
104
+ client = Savon::Client.new("http://localhost:3000/rumbas/wsdl")
105
+
106
+ client.wsdl.soap_actions # => [:integer_to_string, :concat, :add_circle]
107
+
108
+ result = client.request(:concat) do
109
+ soap.body = { :a => "123", :b => "abc" }
110
+ end
111
+
112
+ # actual wash_out
113
+ result.to_hash # => {:concat_reponse => {:value=>"123abc"}}
114
+
115
+ # wash_out below 0.3.0 (and this is malformed response so please update)
116
+ result.to_hash # => {:value=>"123abc"}
117
+ ```
118
+
119
+ Take a look at [WashOut sample application](https://github.com/roundlake/wash_out-sample).
120
+
121
+ ## Reusable types
122
+
123
+ Basic inline types definition is fast and furious for the simple cases. You have an option to describe SOAP types
124
+ inside separate classes for the complex ones. Here's the way to do that:
125
+
126
+ ```ruby
127
+ class Fluffy < WashOut::Type
128
+ map :universe => {
129
+ :name => :string,
130
+ :age => :int
131
+ }
132
+ end
133
+
134
+ class FluffyContainer < WashOut::Type
135
+ type_name 'fluffy_con'
136
+ map :fluffy => Fluffy
137
+ end
138
+ ```
139
+
140
+ To use defined type inside your inline declaration, pass the class instead of type symbol (`:fluffy => Fluffy`).
141
+
142
+ Note that WashOut extends the `ActiveRecord` so every model you use is already a WashOut::Type and can be used
143
+ inside your interface declarations.
144
+
145
+ ## Configuration
146
+
147
+ Use `config.wash_out...` inside your environment configuration to setup WashOut.
148
+
149
+ Available properties are:
150
+
151
+ * **namespace**: SOAP namespace to use. Default is `urn:WashOut`.
152
+ * **snakecase**: *(DEPRECATED SINCE 0.4.0)* Determines if WashOut should modify parameters keys to snakecase. Default is `false`.
153
+ * **snakecase_input**: Determines if WashOut should modify parameters keys to snakecase. Default is `false`.
154
+ * **camelize_wsdl**: Determinse if WashOut should camelize types within WSDL and responses. Default is `false`.
155
+
156
+ ### Camelization
157
+
158
+ Note that WSDL camelization will affect method names but only if they were given as a symbol:
159
+
160
+ ```ruby
161
+ soap_action :foo # this will be affected
162
+ soap_action "foo" # this will be passed as is
163
+ ```
164
+
165
+ ## Credits
166
+
167
+ <img src="http://roundlake.ru/assets/logo.png" align="right" />
168
+
169
+ * Boris Staal ([@_inossidabile](http://twitter.com/#!/_inossidabile))
170
+ * Peter Zotov ([@whitequark](http://twitter.com/#!/whitequark))
171
+
172
+ ## Contributors
173
+
174
+ * Björn Nilsson ([@Bjorn-Nilsson](https://github.com/Bjorn-Nilsson))
175
+ * Tobias Bielohlawek ([@rngtng](https://github.com/rngtng))
176
+ * Francesco Negri ([@dhinus](https://github.com/dhinus))
177
+ * Edgars Beigarts ([@ebeigarts](https://github.com/ebeigarts))
178
+
179
+ ## LICENSE
180
+
181
+ It is free software, and may be redistributed under the terms of MIT license.
@@ -0,0 +1,14 @@
1
+ require 'bundler/setup'
2
+ require 'bundler/gem_tasks'
3
+ require 'appraisal'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ desc "Default: run the unit tests."
9
+ task :default => [:all]
10
+
11
+ desc 'Test the plugin under all supported Rails versions.'
12
+ task :all => ["appraisal:install"] do |t|
13
+ exec('rake appraisal spec')
14
+ end