soap-object 0.6.3 → 0.6.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,128 +1,100 @@
1
- require 'savon'
2
- require 'cgi'
3
- require 'soap-object/version'
4
- require 'soap-object/class_methods'
5
- require 'soap-object/factory'
6
-
7
- #
8
- # module to make it simpler to tests SOAP web services. The goal is
9
- # to abstract all information about how your call and parse results
10
- # from the web service within the soap objects.
11
- #
12
- # @example
13
- # class ZipCodeService
14
- # include SoapObject
15
- #
16
- # wsdl 'http://www.webservicex.net/uszip.asmx?WSDL'
17
- #
18
- # def get_zipcode_info(zip_code)
19
- # get_info_by_zip 'USZip' => zip_code
20
- # end
21
- #
22
- # def state
23
- # message[:state]
24
- # end
25
- #
26
- # message
27
- # response.body[:get_info_by_zip_response][:get_info_by_zip_result][:new_data_set][:table]
28
- # end
29
- # end
30
- #
31
- # There are many additional properties that can be set to configure
32
- # the service calls. See the comments for SoapObject::ClassMethods to
33
- # view all of the options.
34
- #
35
- module SoapObject
36
- attr_reader :wsdl, :response
37
-
38
- def initialize
39
- @client = Savon.client(client_properties)
40
- end
41
-
42
- def self.included(cls)
43
- cls.extend SoapObject::ClassMethods
44
- end
45
-
46
- #
47
- # Returns true if the service has established communication with the
48
- # remote server.
49
- #
50
- def connected?
51
- not @client.nil?
52
- end
53
-
54
- #
55
- # Returns an array of operations that can be called on the remote
56
- # service.
57
- #
58
- def operations
59
- @client.operations
60
- end
61
-
62
- #
63
- # Return the xml response
64
- #
65
- def to_xml
66
- response.to_xml
67
- end
68
-
69
- #
70
- # Return value at xpath
71
- #
72
- def xpath(path)
73
- response.xpath(path)
74
- end
75
-
76
- #
77
- # Return the response as a Hash
78
- #
79
- def to_hash
80
- response.hash
81
- end
82
-
83
- #
84
- # Return the body of the message as a Hash
85
- #
86
- def body
87
- response.body
88
- end
89
-
90
- #
91
- # Return the response as a Nokogiri document
92
- #
93
- def doc
94
- response.doc
95
- end
96
-
97
- private
98
-
99
- def method_missing(*args)
100
- operation =args.shift
101
- message = args.shift
102
- type = message.is_a?(String) ? :xml : :message
103
- call(operation, {type => message})
104
- end
105
-
106
- def call(operation, data)
107
- @response = @client.call(operation, data)
108
- response.to_xml
109
- end
110
-
111
- def client_properties
112
- properties = { log: false }
113
- [:with_wsdl,
114
- :with_proxy,
115
- :with_open_timeout,
116
- :with_read_timeout,
117
- :with_soap_header,
118
- :with_encoding,
119
- :with_basic_auth,
120
- :with_digest_auth,
121
- :with_log_level,
122
- :with_ssl_verification].each do |sym|
123
- properties = properties.merge(self.send sym) if self.respond_to? sym
124
- end
125
- properties
126
- end
127
-
128
- end
1
+ require 'savon'
2
+ require 'soap-object/version'
3
+ require 'soap-object/class_methods'
4
+ require 'soap-object/ssl_options'
5
+ require 'soap-object/factory'
6
+ require 'soap-object/response'
7
+
8
+ #
9
+ # module to make it simpler to tests SOAP web services. The goal is
10
+ # to abstract all information about how your call and parse results
11
+ # from the web service within the soap objects.
12
+ #
13
+ # @example
14
+ # class ZipCodeService
15
+ # include SoapObject
16
+ #
17
+ # wsdl 'http://www.webservicex.net/uszip.asmx?WSDL'
18
+ #
19
+ # def get_zipcode_info(zip_code)
20
+ # get_info_by_zip 'USZip' => zip_code
21
+ # end
22
+ #
23
+ # def state
24
+ # message[:state]
25
+ # end
26
+ #
27
+ # message
28
+ # response.body[:get_info_by_zip_response][:get_info_by_zip_result][:new_data_set][:table]
29
+ # end
30
+ # end
31
+ #
32
+ # There are many additional properties that can be set to configure
33
+ # the service calls. See the comments for SoapObject::ClassMethods to
34
+ # view all of the options.
35
+ #
36
+ module SoapObject
37
+ include Response
38
+
39
+ attr_reader :wsdl, :response
40
+
41
+ def initialize(platform)
42
+ @client = platform.client(client_properties)
43
+ end
44
+
45
+ def self.included(cls)
46
+ cls.extend SoapObject::ClassMethods
47
+ end
48
+
49
+ #
50
+ # Returns true if the service has established communication with the
51
+ # remote server.
52
+ #
53
+ def connected?
54
+ not @client.nil?
55
+ end
56
+
57
+ #
58
+ # Returns an array of operations that can be called on the remote
59
+ # service.
60
+ #
61
+ def operations
62
+ @client.operations
63
+ end
64
+
65
+ private
66
+ DEFAULT_PROPERTIES = {log: false,
67
+ ssl_verify_mode: :none,
68
+ ssl_version: :SSLv3}
69
+
70
+ def method_missing(operation, body)
71
+ request = build_request(body)
72
+ @response = @client.call(operation, request)
73
+ response.to_xml
74
+ end
75
+
76
+ def build_request(body)
77
+ type = body.is_a?(Hash) ? :message : :xml
78
+ {type => body}
79
+ end
80
+
81
+ def client_properties
82
+ properties = DEFAULT_PROPERTIES
83
+ [:with_wsdl,
84
+ :with_endpoint,
85
+ :with_proxy,
86
+ :with_open_timeout,
87
+ :with_read_timeout,
88
+ :with_soap_header,
89
+ :with_encoding,
90
+ :with_basic_auth,
91
+ :with_digest_auth,
92
+ :with_log_level,
93
+ :with_soap_version,
94
+ :with_ssl_options].each do |sym|
95
+ properties = properties.merge(self.send sym) if self.respond_to? sym
96
+ end
97
+ properties
98
+ end
99
+
100
+ end
@@ -1,125 +1,143 @@
1
-
2
- module SoapObject
3
- module ClassMethods
4
-
5
- #
6
- # Sets the url for the wsdl. It can be a path to a local file or
7
- # a url to a remote server containing the file.
8
- #
9
- # @param [String] either the local path to or the remote url to
10
- # the wsdl to use for all requests.
11
- #
12
- def wsdl(url)
13
- define_method(:with_wsdl) do
14
- @wsdl ||= url
15
- {wsdl: @wsdl}
16
- end
17
- end
18
-
19
- #
20
- # Set a proxy server to be used. This will be used for retrieving
21
- # the wsdl as well as making the remote requests.
22
- #
23
- # @param [String] the url for the proxy server
24
- #
25
- def proxy(url)
26
- define_method(:with_proxy) do
27
- {proxy: url}
28
- end
29
- end
30
-
31
- #
32
- # Sets the open timeout for retrieving the wsdl and making remote
33
- # requests.
34
- #
35
- # @param [Fixnum] the number of seconds for the timeout value
36
- #
37
- def open_timeout(timeout)
38
- define_method(:with_open_timeout) do
39
- {open_timeout: timeout}
40
- end
41
- end
42
-
43
- #
44
- # Sets the read timeout for retrieving the wsdl and reading the
45
- # results of remote requests.
46
- #
47
- # @param [Fixnum] the number of seconds for the timeout value
48
- #
49
- def read_timeout(timeout)
50
- define_method(:with_read_timeout) do
51
- {read_timeout: timeout}
52
- end
53
- end
54
-
55
- #
56
- # Add custom XML to the soap header.
57
- #
58
- # @param [Hash] will be converted into xml and placed in the soap
59
- # header
60
- #
61
- def soap_header(hsh)
62
- define_method(:with_soap_header) do
63
- {soap_header: hsh}
64
- end
65
- end
66
-
67
- #
68
- # Set the encoding for the message
69
- #
70
- # @param [String] the encoding to use
71
- #
72
- def encoding(enc)
73
- define_method(:with_encoding) do
74
- {encoding: enc}
75
- end
76
- end
77
-
78
- #
79
- # Use basic authentication for all requests
80
- #
81
- # @param [Array] username and password
82
- #
83
- def basic_auth(*name_password)
84
- define_method(:with_basic_auth) do
85
- {basic_auth: name_password}
86
- end
87
- end
88
-
89
- #
90
- # Use digest authentiation for all requests
91
- #
92
- # @param [Array] username and password
93
- #
94
- def digest_auth(*name_password)
95
- define_method(:with_digest_auth) do
96
- {digest_auth: name_password}
97
- end
98
- end
99
-
100
- #
101
- # Set the log level used for logging
102
- #
103
- # [Symbol] valid values are :info, :debug, :warn, :error, and :fatal
104
- #
105
- def log_level(level)
106
- define_method(:with_log_level) do
107
- {log: true, log_level: level}
108
- end
109
- end
110
-
111
- #
112
- # Enable/Disable SSL verification when calling services over HTTPS (Default is true)
113
- #
114
- # @param [Boolean] valid values are true, false
115
- #
116
- def ssl_verification(enable)
117
- unless enable
118
- define_method(:with_ssl_verification) do
119
- {ssl_verify_mode: :none}
120
- end
121
- end
122
- end
123
-
124
- end
125
- end
1
+
2
+ module SoapObject
3
+ module ClassMethods
4
+
5
+ #
6
+ # Sets the url for the wsdl. It can be a path to a local file or
7
+ # a url to a remote server containing the file.
8
+ #
9
+ # @param [String] either the local path to or the remote url to
10
+ # the wsdl to use for all requests.
11
+ #
12
+ def wsdl(url)
13
+ define_method(:with_wsdl) do
14
+ @wsdl ||= url
15
+ {wsdl: @wsdl}
16
+ end
17
+ end
18
+
19
+ #
20
+ # Override the endpoint binding in the WSDL
21
+ #
22
+ # @param [String] The target namespace is used to namespace the SOAP message.
23
+ #
24
+ def endpoint(url)
25
+ define_method(:with_endpoint) do
26
+ {endpoint: url}
27
+ end
28
+ end
29
+
30
+
31
+ #
32
+ # Set a proxy server to be used. This will be used for retrieving
33
+ # the wsdl as well as making the remote requests.
34
+ #
35
+ # @param [String] the url for the proxy server
36
+ #
37
+ def proxy(url)
38
+ define_method(:with_proxy) do
39
+ {proxy: url}
40
+ end
41
+ end
42
+
43
+ #
44
+ # Sets the open timeout for retrieving the wsdl and making remote
45
+ # requests.
46
+ #
47
+ # @param [Fixnum] the number of seconds for the timeout value
48
+ #
49
+ def open_timeout(timeout)
50
+ define_method(:with_open_timeout) do
51
+ {open_timeout: timeout}
52
+ end
53
+ end
54
+
55
+ #
56
+ # Sets the read timeout for retrieving the wsdl and reading the
57
+ # results of remote requests.
58
+ #
59
+ # @param [Fixnum] the number of seconds for the timeout value
60
+ #
61
+ def read_timeout(timeout)
62
+ define_method(:with_read_timeout) do
63
+ {read_timeout: timeout}
64
+ end
65
+ end
66
+
67
+ #
68
+ # Add custom XML to the soap header.
69
+ #
70
+ # @param [Hash] will be converted into xml and placed in the soap
71
+ # header
72
+ #
73
+ def soap_header(hsh)
74
+ define_method(:with_soap_header) do
75
+ {soap_header: hsh}
76
+ end
77
+ end
78
+
79
+ #
80
+ # Set the encoding for the message
81
+ #
82
+ # @param [String] the encoding to use
83
+ #
84
+ def encoding(enc)
85
+ define_method(:with_encoding) do
86
+ {encoding: enc}
87
+ end
88
+ end
89
+
90
+ #
91
+ # Use basic authentication for all requests
92
+ #
93
+ # @param [Array] username and password
94
+ #
95
+ def basic_auth(*name_password)
96
+ define_method(:with_basic_auth) do
97
+ {basic_auth: name_password}
98
+ end
99
+ end
100
+
101
+ #
102
+ # Use digest authentiation for all requests
103
+ #
104
+ # @param [Array] username and password
105
+ #
106
+ def digest_auth(*name_password)
107
+ define_method(:with_digest_auth) do
108
+ {digest_auth: name_password}
109
+ end
110
+ end
111
+
112
+ #
113
+ # Set the log level used for logging
114
+ #
115
+ # [Symbol] valid values are :info, :debug, :warn, :error, and :fatal
116
+ #
117
+ def log_level(level)
118
+ define_method(:with_log_level) do
119
+ {log: true, log_level: level, pretty_print_xml: true}
120
+ end
121
+ end
122
+
123
+ #
124
+ # Set the ssl options
125
+ #
126
+ # @param [block] Available options in SslOptions class
127
+ #
128
+ def ssl_options(&block)
129
+ ssl = SslOptions.new(&block)
130
+
131
+ define_method(:with_ssl_options) do
132
+ ssl.options
133
+ end
134
+ end
135
+
136
+ def soap_version(version)
137
+ define_method(:with_soap_version) do
138
+ {soap_version: version}
139
+ end
140
+ end
141
+
142
+ end
143
+ end