wash_out 0.5.6 → 0.6.0

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.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.0
4
+
5
+ * Switched to Savon2 family
6
+ * Main spec refactored greatly
7
+
3
8
  ## 0.5.4
4
9
 
5
10
  * Ability to manually specify `response_tag` for `soap_action` [@inossidabile][]
data/Gemfile CHANGED
@@ -1,2 +1,15 @@
1
1
  source "http://rubygems.org"
2
+
2
3
  gemspec
4
+
5
+ gem 'wasabi'
6
+ gem 'savon'
7
+ gem 'httpi', :git => 'git://github.com/savonrb/httpi.git'
8
+
9
+ gem 'rspec-rails'
10
+ gem 'guard'
11
+ gem 'guard-rspec'
12
+ gem 'rb-fsevent'
13
+ gem 'appraisal'
14
+ gem 'tzinfo'
15
+ gem 'pry'
data/Gemfile.lock CHANGED
@@ -1,8 +1,15 @@
1
+ GIT
2
+ remote: git://github.com/savonrb/httpi.git
3
+ revision: 6536d498160ecb0e969bb161ad091c49493f6bc2
4
+ specs:
5
+ httpi (2.0.0)
6
+ rack
7
+
1
8
  PATH
2
9
  remote: .
3
10
  specs:
4
- wash_out (0.5.5)
5
- nori (~> 1.1.0)
11
+ wash_out (0.6.0)
12
+ nori (~> 2.0.0)
6
13
 
7
14
  GEM
8
15
  remote: http://rubygems.org/
@@ -33,8 +40,6 @@ GEM
33
40
  coderay (1.0.8)
34
41
  diff-lcs (1.1.3)
35
42
  erubis (2.7.0)
36
- ffi (1.2.0)
37
- ffi (1.2.0-java)
38
43
  guard (1.6.1)
39
44
  listen (>= 0.6.0)
40
45
  lumberjack (>= 1.0.2)
@@ -46,8 +51,6 @@ GEM
46
51
  gyoku (1.0.0)
47
52
  builder (>= 2.1.2)
48
53
  hike (1.2.1)
49
- httpi (0.9.7)
50
- rack
51
54
  i18n (0.6.1)
52
55
  journey (1.0.4)
53
56
  json (1.7.5)
@@ -58,7 +61,7 @@ GEM
58
61
  multi_json (1.5.0)
59
62
  nokogiri (1.5.6)
60
63
  nokogiri (1.5.6-java)
61
- nori (1.1.3)
64
+ nori (2.0.0)
62
65
  pry (0.9.10)
63
66
  coderay (~> 1.0.5)
64
67
  method_source (~> 0.8)
@@ -84,8 +87,6 @@ GEM
84
87
  thor (>= 0.14.6, < 2.0)
85
88
  rake (10.0.3)
86
89
  rb-fsevent (0.9.2)
87
- rb-inotify (0.8.8)
88
- ffi (>= 0.5.0)
89
90
  rdoc (3.12)
90
91
  json (~> 1.4)
91
92
  rspec (2.12.0)
@@ -103,14 +104,14 @@ GEM
103
104
  rspec-core (~> 2.12.0)
104
105
  rspec-expectations (~> 2.12.0)
105
106
  rspec-mocks (~> 2.12.0)
106
- savon (0.9.9)
107
- akami (~> 1.0)
107
+ savon (2.0.2)
108
+ akami (~> 1.2.0)
108
109
  builder (>= 2.1.2)
109
- gyoku (>= 0.4.0)
110
- httpi (~> 0.9)
110
+ gyoku (~> 1.0.0)
111
+ httpi (~> 2.0.0)
111
112
  nokogiri (>= 1.4.0)
112
- nori (~> 1.1)
113
- wasabi (~> 2.1)
113
+ nori (~> 2.0.0)
114
+ wasabi (~> 3.0.0)
114
115
  slop (3.3.3)
115
116
  spoon (0.0.1)
116
117
  sprockets (2.2.2)
@@ -121,7 +122,8 @@ GEM
121
122
  thor (0.16.0)
122
123
  tilt (1.3.3)
123
124
  tzinfo (0.3.35)
124
- wasabi (2.1.0)
125
+ wasabi (3.0.0)
126
+ httpi (~> 2.0)
125
127
  nokogiri (>= 1.4.0)
126
128
 
127
129
  PLATFORMS
@@ -132,11 +134,11 @@ DEPENDENCIES
132
134
  appraisal
133
135
  guard
134
136
  guard-rspec
137
+ httpi!
135
138
  pry
136
139
  rb-fsevent
137
- rb-inotify
138
140
  rspec-rails
139
- savon (= 0.9.9)
141
+ savon
140
142
  tzinfo
141
- wasabi (= 2.1.0)
143
+ wasabi
142
144
  wash_out!
@@ -12,34 +12,22 @@ module WashOut
12
12
 
13
13
  # This filter parses the SOAP request and puts it into +params+ array.
14
14
  def _parse_soap_parameters
15
- # Do not interfere with project-space Nori setup
16
- strip = Nori.strip_namespaces?
17
- convert = Nori.convert_tags?
18
- typecast = Nori.advanced_typecasting?
19
-
20
- Nori.strip_namespaces = true
21
- Nori.advanced_typecasting = false
22
-
23
- if WashOut::Engine.snakecase_input
24
- Nori.convert_tags_to { |tag| tag.snakecase.to_sym }
25
- else
26
- Nori.convert_tags_to { |tag| tag.to_sym }
27
- end
28
-
29
- request_body = request.body.read
30
- @_params = Nori.parse(request_body)
31
-
15
+ parser = Nori.new(
16
+ :strip_namespaces => true,
17
+ :advanced_typecasting => true,
18
+ :convert_tags_to => (
19
+ WashOut::Engine.snakecase_input ? lambda { |tag| tag.snakecase.to_sym }
20
+ : lambda { |tag| tag.to_sym }
21
+ )
22
+ )
23
+
24
+ @_params = parser.parse(request.body.read)
32
25
  references = WashOut::Dispatcher.deep_select(@_params){|k,v| v.is_a?(Hash) && v.has_key?(:@id)}
33
26
 
34
27
  unless references.blank?
35
28
  replaces = {}; references.each{|r| replaces['#'+r[:@id]] = r}
36
29
  @_params = WashOut::Dispatcher.deep_replace_href(@_params, replaces)
37
30
  end
38
-
39
- # Reset Nori setup to project-space
40
- Nori.strip_namespaces = strip
41
- Nori.advanced_typecasting = typecast
42
- Nori.convert_tags_to convert
43
31
  end
44
32
 
45
33
  def _authenticate_wsse
@@ -63,7 +63,7 @@ module WashOut
63
63
  when 'string'; :to_s
64
64
  when 'integer'; :to_i
65
65
  when 'double'; :to_f
66
- when 'boolean'; lambda { |v| v == 'true' }
66
+ when 'boolean'; nil
67
67
  when 'date'; :to_date
68
68
  when 'datetime'; :to_datetime
69
69
  when 'time'; :to_time
@@ -1,3 +1,3 @@
1
1
  module WashOut
2
- VERSION = "0.5.6"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/wash_out/wsse.rb CHANGED
@@ -36,7 +36,7 @@ module WashOut
36
36
 
37
37
  # Token should not be accepted if timestamp is older than 5 minutes ago
38
38
  # http://www.oasis-open.org/committees/download.php/16782/wss-v1.1-spec-os-UsernameTokenProfile.pdf
39
- offset_in_minutes = ((DateTime.now - DateTime.parse(timestamp))* 24 * 60).to_i
39
+ offset_in_minutes = ((DateTime.now - timestamp)* 24 * 60).to_i
40
40
  return false if offset_in_minutes >= 5
41
41
 
42
42
  # There are a few different implementations of the digest calculation
@@ -44,11 +44,11 @@ module WashOut
44
44
  flavors = Array.new
45
45
 
46
46
  # Ruby / Savon
47
- token = nonce + timestamp + expected_password
47
+ token = nonce + timestamp.to_s + expected_password
48
48
  flavors << Base64.encode64(Digest::SHA1.hexdigest(token)).chomp!
49
49
 
50
50
  # Java
51
- token = Base64.decode64(nonce) + timestamp + expected_password
51
+ token = Base64.decode64(nonce) + timestamp.to_s + expected_password
52
52
  flavors << Base64.encode64(Digest::SHA1.digest(token)).chomp!
53
53
 
54
54
  flavors.each do |f|
@@ -4,22 +4,12 @@ require 'spec_helper'
4
4
 
5
5
  describe WashOut::Dispatcher do
6
6
 
7
- class TestBody
8
- attr_accessor :read
9
- def initialize(read); @read = read; end
10
- end
11
-
12
- class TestRequest
13
- attr_accessor :body
14
- def initialize(body); @body = body; end
15
- end
16
-
17
7
  class Dispatcher < ApplicationController
18
8
  include WashOut::SOAP
19
9
 
20
10
  def self.mock(text="")
21
11
  dispatcher = self.new
22
- dispatcher.request = TestRequest.new(TestBody.new(text))
12
+ dispatcher.request = OpenStruct.new(:body => OpenStruct.new(:read => text))
23
13
  dispatcher
24
14
  end
25
15
 
@@ -46,20 +36,26 @@ describe WashOut::Dispatcher do
46
36
 
47
37
  it "parses href request" do
48
38
  dispatcher = Dispatcher.mock <<-XML
49
- <request>
50
- <entities href="#id1">
51
- </entities>
52
- </request>
53
- <entity id="id1">
54
- <foo><bar>1</bar></foo>
55
- <sub href="#id2" />
56
- </entity>
57
- <ololo id="id2">
58
- <foo>1</foo>
59
- </ololo>
39
+ <root>
40
+ <request>
41
+ <entities href="#id1">
42
+ </entities>
43
+ </request>
44
+ <entity id="id1">
45
+ <foo><bar>1</bar></foo>
46
+ <sub href="#id2" />
47
+ </entity>
48
+ <ololo id="id2">
49
+ <foo>1</foo>
50
+ </ololo>
51
+ </root>
60
52
  XML
61
53
  dispatcher._parse_soap_parameters
62
- dispatcher.params[:request][:entities].should == {:foo=>{:bar=>"1"}, :sub=>{:foo=>"1", :@id=>"id2"}, :@id=>"id1"}
54
+ dispatcher.params[:root][:request][:entities].should == {
55
+ :foo => {:bar=>"1"},
56
+ :sub => {:foo=>"1", :@id=>"id2"},
57
+ :@id => "id1"
58
+ }
63
59
  end
64
60
 
65
61
  end