wash_out 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.5
4
+
5
+ * Very evil thread-safety bug fixed. You are encouraged to never use anything below this version.
6
+
3
7
  ## 0.3.4
4
8
 
5
9
  * WSDL generation fixed to support complex structures for return values
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'pry'
4
+
3
5
  gemspec
data/Gemfile.lock CHANGED
@@ -29,6 +29,7 @@ GEM
29
29
  bundler
30
30
  rake
31
31
  builder (3.0.0)
32
+ coderay (1.0.5)
32
33
  diff-lcs (1.1.3)
33
34
  erubis (2.7.0)
34
35
  gyoku (0.4.4)
@@ -40,10 +41,15 @@ GEM
40
41
  journey (1.0.3)
41
42
  json (1.6.5)
42
43
  json (1.6.5-java)
44
+ method_source (0.7.1)
43
45
  multi_json (1.1.0)
44
46
  nokogiri (1.5.0)
45
47
  nokogiri (1.5.0-java)
46
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)
47
53
  rack (1.4.1)
48
54
  rack-cache (1.1)
49
55
  rack (>= 0.4)
@@ -82,6 +88,7 @@ GEM
82
88
  nokogiri (>= 1.4.0)
83
89
  nori (~> 1.1)
84
90
  wasabi (~> 2.1)
91
+ slop (2.4.4)
85
92
  sprockets (2.1.2)
86
93
  hike (~> 1.2)
87
94
  rack (~> 1.0)
@@ -98,6 +105,7 @@ PLATFORMS
98
105
 
99
106
  DEPENDENCIES
100
107
  appraisal
108
+ pry
101
109
  rspec-rails
102
110
  savon
103
111
  tzinfo
@@ -82,21 +82,27 @@ module WashOut
82
82
  result = { 'value' => result } unless result.is_a? Hash
83
83
  result = HashWithIndifferentAccess.new(result)
84
84
 
85
- inject = lambda {|data, source_spec|
86
- spec = source_spec.clone
85
+ inject = lambda {|data, map|
86
+ result_spec = []
87
87
 
88
- spec.each_with_index do |param, i|
88
+ map.each_with_index do |param, i|
89
+ result_spec[i] = param.flat_copy
90
+
91
+ # Inline complex structure
89
92
  if param.struct? && !param.multiplied
90
- spec[i].map = inject.call(data[param.name], param.map)
93
+ result_spec[i].map = inject.call(data[param.name], param.map)
94
+
95
+ # Inline array of complex structures
91
96
  elsif param.struct? && param.multiplied
92
- spec[i].map = data[param.name].map{|e| inject.call(e, param.map)}
97
+ result_spec[i].map = data[param.name].map{|e| inject.call(e, param.map)}
98
+
93
99
  else
94
- spec[i] = param.flat_copy
95
- spec[i].value = data[param.name]
100
+ result_spec[i].value = data[param.name]
101
+
96
102
  end
97
103
  end
98
104
 
99
- return spec
105
+ return result_spec
100
106
  }
101
107
 
102
108
  render :template => 'wash_with_soap/response',
@@ -1,3 +1,3 @@
1
1
  module WashOut
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
@@ -361,4 +361,98 @@ describe WashOut do
361
361
  }
362
362
  end
363
363
 
364
+ it "should handle return of structs in structs in arrays" do
365
+ mock_controller do
366
+ soap_action "rumba",
367
+ :args => nil,
368
+ :return => [{:rumbas => {:zombies => :integer}}]
369
+
370
+ def rumba
371
+ render :soap => [{:rumbas => {:zombies => 100000}}, {:rumbas => {:zombies => 2}}]
372
+ end
373
+ end
374
+
375
+ savon_instance.request(:rumba)[:rumba_response].should == {
376
+ :value => [
377
+ {
378
+ :rumbas => {
379
+ :zombies => "100000",
380
+ :"@xsi:type" => "tns:rumbas"
381
+ },
382
+ :"@xsi:type" => "tns:value"
383
+ },
384
+ {
385
+ :rumbas => {
386
+ :zombies => "2",
387
+ :"@xsi:type" => "tns:rumbas"
388
+ },
389
+ :"@xsi:type"=>"tns:value"
390
+ }
391
+ ]
392
+ }
393
+ end
394
+
395
+ it "should handle complex structs/arrays" do
396
+ mock_controller do
397
+ soap_action "rumba",
398
+ :args => nil,
399
+ :return => {
400
+ :rumbas => [
401
+ {
402
+ :zombies => :string,
403
+ :puppies => [
404
+ {:kittens => :integer}
405
+ ]
406
+ }
407
+ ]
408
+ }
409
+
410
+ def rumba
411
+ render :soap => {
412
+ :rumbas => [
413
+ {
414
+ :zombies => "abc",
415
+ :puppies => [
416
+ {:kittens => 1},
417
+ {:kittens => 5},
418
+ ]
419
+ },
420
+ {
421
+ :zombies => "def",
422
+ :puppies => [
423
+ {:kittens => 4}
424
+ ]
425
+ }
426
+ ]
427
+ }
428
+ end
429
+ end
430
+
431
+ savon_instance.request(:rumba)[:rumba_response].should == {
432
+ :rumbas => [
433
+ {
434
+ :zombies => "abc",
435
+ :puppies => [
436
+ {
437
+ :kittens => "1",
438
+ :"@xsi:type" => "tns:puppies"
439
+ },
440
+ {
441
+ :kittens => "5",
442
+ :"@xsi:type" => "tns:puppies"
443
+ }
444
+ ],
445
+ :"@xsi:type"=>"tns:rumbas"
446
+ },
447
+ {
448
+ :zombies => "def",
449
+ :puppies => {
450
+ :kittens => "4",
451
+ :"@xsi:type" => "tns:puppies"
452
+ },
453
+ :"@xsi:type"=>"tns:rumbas"
454
+ }
455
+ ]
456
+ }
457
+ end
364
458
  end
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.4
4
+ version: 0.3.5
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-26 00:00:00.000000000 Z
13
+ date: 2012-03-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nori
17
- requirement: &70189925216220 !ruby/object:Gem::Requirement
17
+ requirement: &70310783969100 !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: *70189925216220
25
+ version_requirements: *70310783969100
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rspec-rails
28
- requirement: &70189925215640 !ruby/object:Gem::Requirement
28
+ requirement: &70310783968680 !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: *70189925215640
36
+ version_requirements: *70310783968680
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: appraisal
39
- requirement: &70189925215120 !ruby/object:Gem::Requirement
39
+ requirement: &70310783968260 !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: *70189925215120
47
+ version_requirements: *70310783968260
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: tzinfo
50
- requirement: &70189925214560 !ruby/object:Gem::Requirement
50
+ requirement: &70310783967840 !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: *70189925214560
58
+ version_requirements: *70310783967840
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: savon
61
- requirement: &70189925214060 !ruby/object:Gem::Requirement
61
+ requirement: &70310783967400 !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: *70189925214060
69
+ version_requirements: *70310783967400
70
70
  description: Dead simple Rails 3 SOAP server library
71
71
  email: boris@roundlake.ru
72
72
  executables: []