savon 2.11.0 → 2.11.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0909b11e5dac2bc60b3e2e15f8bf614dff389309
4
- data.tar.gz: bbf115546c00147d8703abada768abd1fa5b1abe
3
+ metadata.gz: 504295cfd93728423a78f8523e082e978008dfe4
4
+ data.tar.gz: 65168159c3236ec262c6c14fc5f177cdf110bccf
5
5
  SHA512:
6
- metadata.gz: ae80080f90960964cf8f71f017193bf454fa5027f6607076942c9144c2cc2bfd1d7ea4d8afcc3013e1fc4a1170588b8693a654f6c0a8d714c61777aa5b48fe37
7
- data.tar.gz: f05c5afce92f799b1cf96c019f51e7cb224f6364e4c82677cfdffd9b1a49de149879c0099b0f535b50257fd8e83b188e62e36e9bb6bfb7bf3a6f45aa8236ad7d
6
+ metadata.gz: efa583a756b8257abf5af2191b4b1eabd4477d4d3486e51bbc468ed9b911c04226416ad87028c7428e1bb0d47374ab8b0ad3488750e6cfc677c50c739a3fde8e
7
+ data.tar.gz: d4f6ac8cbd182f6fb6c3f3c8982ef1834fb852b91102b92286d7215e3ac71a040926d554330dfcf46151ef5862c542400918f35c8ec58edb049044865814d269
@@ -6,5 +6,10 @@ rvm:
6
6
  - 2.1
7
7
  - 2.2
8
8
  - jruby
9
+ - rbx-2
10
+ matrix:
11
+ allow_failures:
12
+ - rvm: rbx-2
13
+ fast_finish: true
9
14
  notifications:
10
15
  irc: "irc.freenode.org#savon"
@@ -1,3 +1,7 @@
1
+ # 2.11.1 (2015-05-27)
2
+
3
+ * Replace dependency on [uuid](https://rubygems.org/gems/uuid), using SecureRandom.uuid instead.
4
+
1
5
  # 2.11.0 (2015-03-31)
2
6
 
3
7
  * Formally drop support for 1.8.7.
data/Gemfile CHANGED
@@ -5,7 +5,6 @@ gem "httpclient", "~> 2.3.4"
5
5
 
6
6
  gem "simplecov", :require => false
7
7
  gem "coveralls", :require => false
8
- gem "uuid"
9
8
 
10
9
  platform :rbx do
11
10
  gem 'json'
@@ -1,6 +1,6 @@
1
1
  require "akami"
2
2
  require "gyoku"
3
- require "uuid"
3
+ require "securerandom"
4
4
 
5
5
  module Savon
6
6
  class Header
@@ -61,7 +61,7 @@ module Savon
61
61
  convert_to_xml({
62
62
  'wsa:Action' => @locals[:soap_action],
63
63
  'wsa:To' => @globals[:endpoint],
64
- 'wsa:MessageID' => "urn:uuid:#{UUID.new.generate}",
64
+ 'wsa:MessageID' => "urn:uuid:#{SecureRandom.uuid}",
65
65
  attributes!: {
66
66
  'wsa:MessageID' => {
67
67
  "xmlns:wsa" => "http://schemas.xmlsoap.org/ws/2004/08/addressing"
@@ -55,7 +55,7 @@ module Savon
55
55
 
56
56
  def verify_message!
57
57
  return if @expected[:message].eql? :any
58
- unless @expected[:message] === @actual[:message]
58
+ unless equals_except_any(@expected[:message], @actual[:message])
59
59
  expected_message = " with this message: #{@expected[:message].inspect}" if @expected[:message]
60
60
  expected_message ||= " with no message."
61
61
 
@@ -63,9 +63,18 @@ module Savon
63
63
  actual_message ||= " with no message."
64
64
 
65
65
  raise ExpectationError, "Expected a request to the #{@expected[:operation_name].inspect} operation\n#{expected_message}\n" \
66
- "Received a request to the #{@actual[:operation_name].inspect} operation\n#{actual_message}"
66
+ "Received a request to the #{@actual[:operation_name].inspect} operation\n#{actual_message}"
67
67
  end
68
68
  end
69
69
 
70
+ def equals_except_any(msg_expected, msg_real)
71
+ return true if msg_expected === msg_real
72
+ return false if (msg_expected.nil? || msg_real.nil?) # If both are nil has returned true
73
+ msg_expected.each do |key, expected_value|
74
+ next if (expected_value == :any && msg_real.include?(key))
75
+ return false if expected_value != msg_real[key]
76
+ end
77
+ return true
78
+ end
70
79
  end
71
80
  end
@@ -126,7 +126,13 @@ module Savon
126
126
  end
127
127
 
128
128
  def endpoint
129
- @globals[:endpoint] || @wsdl.endpoint
129
+ @globals[:endpoint] || @wsdl.endpoint.tap do |url|
130
+ if @globals[:host]
131
+ host_url = URI.parse(@globals[:host])
132
+ url.host = host_url.host
133
+ url.port = host_url.port
134
+ end
135
+ end
130
136
  end
131
137
 
132
138
  def raise_expected_httpi_response!
@@ -89,7 +89,8 @@ module Savon
89
89
  :use_wsa_headers => false,
90
90
  :no_message_tag => false,
91
91
  :follow_redirects => false,
92
- :unwrap => false
92
+ :unwrap => false,
93
+ :host => nil
93
94
  }
94
95
 
95
96
  options = defaults.merge(options)
@@ -108,6 +109,11 @@ module Savon
108
109
  @options[:wsdl] = wsdl_address
109
110
  end
110
111
 
112
+ # set different host for actions in WSDL
113
+ def host(host)
114
+ @options[:host] = host
115
+ end
116
+
111
117
  # SOAP endpoint.
112
118
  def endpoint(endpoint)
113
119
  @options[:endpoint] = endpoint
@@ -1,3 +1,3 @@
1
1
  module Savon
2
- VERSION = '2.11.0'
2
+ VERSION = '2.11.1'
3
3
  end
@@ -22,7 +22,6 @@ Gem::Specification.new do |s|
22
22
  s.add_dependency "wasabi", "~> 3.4"
23
23
  s.add_dependency "akami", "~> 1.2"
24
24
  s.add_dependency "gyoku", "~> 1.2"
25
- s.add_dependency "uuid", "~> 2.3.7"
26
25
  s.add_dependency "builder", ">= 2.1.2"
27
26
  s.add_dependency "nokogiri", ">= 1.4.0"
28
27
 
@@ -83,10 +83,19 @@ describe Savon::Builder do
83
83
  end
84
84
 
85
85
  describe "#wsse_signature" do
86
- let(:private_key) { "spec/fixtures/ssl/client_key.pem" }
87
- let(:cert) { "spec/fixtures/ssl/client_cert.pem" }
88
- let(:signature) { Akami::WSSE::Signature.new(Akami::WSSE::Certs.new(:cert_file => cert, :private_key_file => private_key))}
89
- let(:globals) { Savon::GlobalOptions.new(wsse_signature: signature) }
86
+ fixture_dir = File.join(File.dirname(__FILE__), '..', 'fixtures', 'ssl')
87
+
88
+ let(:cert) { File.join(fixture_dir, 'client_cert.pem') }
89
+ let(:private_key) { File.join(fixture_dir, 'client_key.pem') }
90
+ let(:signature) do
91
+ Akami::WSSE::Signature.new(
92
+ Akami::WSSE::Certs.new(
93
+ :cert_file => cert,
94
+ :private_key_file => private_key
95
+ )
96
+ )
97
+ end
98
+ let(:globals) { Savon::GlobalOptions.new(wsse_signature: signature) }
90
99
 
91
100
  subject(:signed_message_nn) {Nokogiri::XML(builder.to_s).remove_namespaces!}
92
101
  subject(:signed_message) {Nokogiri::XML(builder.to_s)}
@@ -23,6 +23,17 @@ describe "Savon's mock interface" do
23
23
  expect(response.http.body).to eq("<fixture/>")
24
24
  end
25
25
 
26
+ it "can verify a request with any parameters and return a fixture response" do
27
+ message = { :username => "luke", :password => :any }
28
+ savon.expects(:authenticate).with(:message => message).returns("<fixture/>")
29
+
30
+ response = new_client.call(:authenticate) do
31
+ message(:username => "luke", :password => "secret")
32
+ end
33
+
34
+ expect(response.http.body).to eq("<fixture/>")
35
+ end
36
+
26
37
  it "accepts a Hash to specify the response code, headers and body" do
27
38
  soap_fault = Fixture.response(:soap_fault)
28
39
  response = { :code => 500, :headers => { "X-Result" => "invalid" }, :body => soap_fault }
@@ -114,6 +114,15 @@ describe "Options" do
114
114
  end
115
115
  end
116
116
 
117
+ context "global :host" do
118
+ it "overrides the WSDL endpoint host" do
119
+ client = new_client(:wsdl => Fixture.wsdl(:no_message_tag), host: "https://example.com:8080")
120
+
121
+ request = client.build_request(:update_orders)
122
+ expect(request.url.to_s).to eq "https://example.com:8080/webserviceexternal/contracts.asmx"
123
+ end
124
+ end
125
+
117
126
  context "global :headers" do
118
127
  it "sets the HTTP headers for the next request" do
119
128
  client = new_client(:endpoint => @server.url(:inspect_request), :headers => { "X-Token" => "secret" })
@@ -578,7 +587,7 @@ describe "Options" do
578
587
  expect(request).to include("<wsse:Username>#{username}</wsse:Username>")
579
588
 
580
589
  # the nonce node
581
- expect(request).to match(/<wsse:Nonce.*>.+\n<\/wsse:Nonce>/)
590
+ expect(request).to match(/<wsse:Nonce.*>.+\n?<\/wsse:Nonce>/)
582
591
 
583
592
  # the created node with a timestamp
584
593
  expect(request).to match(/<wsu:Created>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*<\/wsu:Created>/)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: savon
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.11.0
4
+ version: 2.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Harrington
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nori
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.2'
83
- - !ruby/object:Gem::Dependency
84
- name: uuid
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 2.3.7
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 2.3.7
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: builder
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -323,7 +309,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
323
309
  version: '0'
324
310
  requirements: []
325
311
  rubyforge_project: savon
326
- rubygems_version: 2.2.2
312
+ rubygems_version: 2.4.6
327
313
  signing_key:
328
314
  specification_version: 4
329
315
  summary: Heavy metal SOAP client