washout_builder 0.16.1 → 0.16.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.
- checksums.yaml +4 -4
- data/app/helpers/washout_builder_fault_type_helper.rb +1 -0
- data/app/helpers/washout_builder_method_arguments_helper.rb +1 -0
- data/app/helpers/washout_builder_method_list_helper.rb +1 -0
- data/app/helpers/washout_builder_method_return_type_helper.rb +3 -2
- data/lib/washout_builder.rb +1 -1
- data/lib/washout_builder/document/complex_type.rb +79 -0
- data/lib/washout_builder/document/exception_model.rb +56 -0
- data/lib/washout_builder/document/generator.rb +109 -0
- data/lib/washout_builder/document/shared_complex_type.rb +6 -0
- data/lib/washout_builder/engine.rb +1 -0
- data/lib/washout_builder/soap.rb +11 -0
- data/lib/washout_builder/type.rb +17 -0
- data/lib/washout_builder/version.rb +10 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e587370fb93a81cf2456594507efcc1f055cb379
|
|
4
|
+
data.tar.gz: 5feb9b3e018a09518eaa46fa6470ece3e9493637
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1d0cca80bd2c5b310f5ec5be814ba0d3b1e92532ef412ddfb36485937b1094674b5cf6270a63ef0c830245261157fa6ec62da6eb73269bd92ce3417389cd5e3c
|
|
7
|
+
data.tar.gz: dd9fae3d9ca7521a48d8b6f07f9b8691be58edda88807b214cde181632ca401b31d2c242da04aec11ef4410661ee5938dd2a9bc6cb66dcfedaf2d5da0598acb0
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# method that is used to show that a method can raise a exception in HTML documentation
|
|
1
2
|
module WashoutBuilderFaultTypeHelper
|
|
2
3
|
# checks if a complex attribute of a complex type SoapFault is array or not
|
|
3
4
|
# if the attribute is an array will print also the type of the elements contained in the array
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# helper that is used to create the return types of methods in HTML documentation
|
|
1
2
|
module WashoutBuilderMethodReturnTypeHelper
|
|
2
3
|
# this method will print the return type next to the method name
|
|
3
4
|
# @see WashoutBuilder::Document::ComplexType#find_complex_class_name
|
|
@@ -30,8 +31,8 @@ module WashoutBuilderMethodReturnTypeHelper
|
|
|
30
31
|
# @param [Array] pre The array that contains the html that will be appended to xml
|
|
31
32
|
# @param [Array<WashOut::Param>] output An array of params that need to be displayed, will check the type of each and will display it accordingly if is complex type or not
|
|
32
33
|
# @param [Class] complex_class the name of the complex class
|
|
33
|
-
|
|
34
|
-
# @return [
|
|
34
|
+
#
|
|
35
|
+
# @return [void]
|
|
35
36
|
#
|
|
36
37
|
# @api public
|
|
37
38
|
def html_public_method_complex_type(pre, output, complex_class)
|
data/lib/washout_builder.rb
CHANGED
|
@@ -40,7 +40,7 @@ end
|
|
|
40
40
|
WashOut::Param.class_eval do
|
|
41
41
|
def self.parse_builder_def(soap_config, definition)
|
|
42
42
|
raise '[] should not be used in your params. Use nil if you want to mark empty set.' if definition == []
|
|
43
|
-
return [] if definition.
|
|
43
|
+
return [] if definition.blank?
|
|
44
44
|
|
|
45
45
|
# the following lines was removed because when generating the documentation
|
|
46
46
|
# the "source_class" attrtibute of the object was not the name of the class of the complex tyoe
|
|
@@ -49,6 +49,11 @@ module WashoutBuilder
|
|
|
49
49
|
classified? ? get_class_ancestors(config, complex_class, defined) : nil
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
+
# iterates through all the elements of the current object
|
|
53
|
+
# and constructs a hash that has as keys the element names and as value their type
|
|
54
|
+
|
|
55
|
+
# @return [Hash] THe hash that contains information about the structure of the current object as complex type
|
|
56
|
+
# @api public
|
|
52
57
|
def find_param_structure
|
|
53
58
|
map.each_with_object({}) do|item, memo|
|
|
54
59
|
memo[item.name] = item.type
|
|
@@ -56,10 +61,25 @@ module WashoutBuilder
|
|
|
56
61
|
end
|
|
57
62
|
end
|
|
58
63
|
|
|
64
|
+
# removes from this current object the elements that are inherited from other objects
|
|
65
|
+
# and set the map of the curent object to the new value
|
|
66
|
+
#
|
|
67
|
+
# @param [Array<String>] keys An array with the keys that need to be removed from current object
|
|
68
|
+
# @return [void]
|
|
69
|
+
# @api public
|
|
59
70
|
def remove_type_inheritable_elements(keys)
|
|
60
71
|
self.map = map.delete_if { |element| keys.include?(element.name) }
|
|
61
72
|
end
|
|
62
73
|
|
|
74
|
+
# Dirty hack to fix the first washout param type.
|
|
75
|
+
# This only applies if the first complex type is inheriting WashOutType
|
|
76
|
+
# its name should be set to its descendant and the map of the current object will be set to its descendant
|
|
77
|
+
# @see WashOut::Param#parse_builder_def
|
|
78
|
+
#
|
|
79
|
+
# @param [WashOut::SoapConfig] config an object that holds the soap configuration
|
|
80
|
+
# @param [Class, String] complex_class the name of the complex type either as a string or a class
|
|
81
|
+
# @return [void]
|
|
82
|
+
# @api public
|
|
63
83
|
def fix_descendant_wash_out_type(config, complex_class)
|
|
64
84
|
param_class = begin
|
|
65
85
|
complex_class.is_a?(Class) ? complex_class : complex_class.constantize
|
|
@@ -72,6 +92,14 @@ module WashoutBuilder
|
|
|
72
92
|
self.map = descendant.map
|
|
73
93
|
end
|
|
74
94
|
|
|
95
|
+
# Method that is used to check if the current object has exactly same structure as one of his ancestors
|
|
96
|
+
# if it is true, will return true, otherwise will first remove the inheritated elements from his ancestor and then return false
|
|
97
|
+
# @see #find_param_structure
|
|
98
|
+
# @see #remove_type_inheritable_elements
|
|
99
|
+
#
|
|
100
|
+
# @param [WasOut::Param] ancestor The complex type that is used to compare to the current complex type
|
|
101
|
+
# @return [Boolean] returns true if both objects have same structure, otherwise will first remove the inheritated elements from his ancestor and then return false
|
|
102
|
+
# @api public
|
|
75
103
|
def same_structure_as_ancestor?(ancestor)
|
|
76
104
|
param_structure = find_param_structure
|
|
77
105
|
ancestor_structure = ancestor.find_param_structure
|
|
@@ -83,6 +111,14 @@ module WashoutBuilder
|
|
|
83
111
|
end
|
|
84
112
|
end
|
|
85
113
|
|
|
114
|
+
# Mehod that is used to get the ancestors of the current complex type
|
|
115
|
+
# the method will not filter the results by rejecting the classes 'ActiveRecord::Base', 'Object', 'BasicObject', 'WashOut::Type'
|
|
116
|
+
# @see WashoutBuilder::Document::SharedComplexType#get_complex_type_ancestors
|
|
117
|
+
#
|
|
118
|
+
# @param [Class, String] class_name the name of the on object that is used to fetch his ancestors
|
|
119
|
+
# @return [Array<Class>] Returns an array with all the classes from each the object inherits from but filters the results and removes the classes
|
|
120
|
+
# 'ActiveRecord::Base', 'Object', 'BasicObject', 'WashOut::Type'
|
|
121
|
+
# @api public
|
|
86
122
|
def get_ancestors(class_name)
|
|
87
123
|
param_class = begin
|
|
88
124
|
class_name.is_a?(Class) ? class_name : class_name.constantize
|
|
@@ -96,6 +132,14 @@ module WashoutBuilder
|
|
|
96
132
|
end
|
|
97
133
|
end
|
|
98
134
|
|
|
135
|
+
# Method used to fetch the descendants of the current object
|
|
136
|
+
# @see #get_nested_complex_types
|
|
137
|
+
# @see WashOutParam#struct?
|
|
138
|
+
#
|
|
139
|
+
# @param [WashOut::SoapConfig] config an object that holds the soap configuration
|
|
140
|
+
# @param [Array<Hash>] defined An Array with all the complex types that have been detected till now
|
|
141
|
+
# @return [Array<Hash>] An array with all the complex types that
|
|
142
|
+
# @api public
|
|
99
143
|
def complex_type_descendants(config, defined)
|
|
100
144
|
if struct?
|
|
101
145
|
c_names = []
|
|
@@ -105,6 +149,17 @@ module WashoutBuilder
|
|
|
105
149
|
defined
|
|
106
150
|
end
|
|
107
151
|
|
|
152
|
+
# Recursive method that tries to identify all the nested descendants of the current object
|
|
153
|
+
# @see #find_complex_class_name
|
|
154
|
+
# @see #fix_descendant_wash_out_type
|
|
155
|
+
# @see #complex_type_hash
|
|
156
|
+
# @see #complex_type_ancestors
|
|
157
|
+
# @see #complex_type_descendants
|
|
158
|
+
#
|
|
159
|
+
# @param [WashOut::SoapConfig] config holds the soap configuration
|
|
160
|
+
# @param [Array<Hash>] defined An array with all the complex type structures that have been detected so far
|
|
161
|
+
# @return [Array<Hash>] An array with all the complex type that have been detected while iterating to all the descendants of the current object and also contains the previous ones
|
|
162
|
+
# @api public
|
|
108
163
|
def get_nested_complex_types(config, defined)
|
|
109
164
|
defined = [] if defined.blank?
|
|
110
165
|
complex_class = find_complex_class_name(defined)
|
|
@@ -116,10 +171,23 @@ module WashoutBuilder
|
|
|
116
171
|
defined.sort_by { |hash| hash[:class].to_s.downcase }.uniq unless defined.blank?
|
|
117
172
|
end
|
|
118
173
|
|
|
174
|
+
# method that constructs the a hash with the name of the ancestor ( the class name) and as value its elemen structure
|
|
175
|
+
# @see WashOut::Type#wash_out_param_map
|
|
176
|
+
#
|
|
177
|
+
# @param [WashoutType] ancestors The class that inherits from WashoutType
|
|
178
|
+
# @return [Hash] A hash that has as a key the class name in downcase letters and as value the mapping of the class attributes
|
|
179
|
+
# @api public
|
|
119
180
|
def ancestor_structure(ancestors)
|
|
120
181
|
{ ancestors[0].to_s.downcase => ancestors[0].wash_out_param_map }
|
|
121
182
|
end
|
|
122
183
|
|
|
184
|
+
# Constructs the complex type information wuth its name, with the object itself and his ancestors
|
|
185
|
+
#
|
|
186
|
+
# @param [Class] class_name The name of the class
|
|
187
|
+
# @param [WashOut::Param] object The object itself
|
|
188
|
+
# @param [Array<Class>] ancestors An array with all the ancestors that the object inherits from
|
|
189
|
+
# @return [Hash] A hash with that contains the params sent to the method
|
|
190
|
+
# @api public
|
|
123
191
|
def complex_type_hash(class_name, object, ancestors)
|
|
124
192
|
{
|
|
125
193
|
class: class_name,
|
|
@@ -128,6 +196,17 @@ module WashoutBuilder
|
|
|
128
196
|
}
|
|
129
197
|
end
|
|
130
198
|
|
|
199
|
+
# A recursive method that fetches the ancestors of a given class (that inherits from WashoutType)
|
|
200
|
+
# @see #get_ancestors
|
|
201
|
+
# @see WashOut::Param#parse_def
|
|
202
|
+
# @see #same_structure_as_ancestor?
|
|
203
|
+
# @see #complex_type_hash
|
|
204
|
+
#
|
|
205
|
+
# @param [WashOut::SoapConfig] config holds the soap configuration
|
|
206
|
+
# @param [Class] class_name The name of the class that is used for fetching the ancestors
|
|
207
|
+
# @param [Array<Hash>] defined An Array with all the complex types that have been detected so far
|
|
208
|
+
# @return [Array<Class>] An Array of classes from which the class that is sent as parameter inherits from
|
|
209
|
+
# @api public
|
|
131
210
|
def get_class_ancestors(config, class_name, defined)
|
|
132
211
|
ancestors = get_ancestors(class_name)
|
|
133
212
|
return if ancestors.blank?
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require_relative './shared_complex_type'
|
|
2
2
|
module WashoutBuilder
|
|
3
3
|
module Document
|
|
4
|
+
# the class that is used for soap exceptions to build structure and find ancestors and descendants
|
|
4
5
|
module ExceptionModel
|
|
5
6
|
extend ActiveSupport::Concern
|
|
6
7
|
include WashoutBuilder::Document::SharedComplexType
|
|
@@ -9,6 +10,16 @@ module WashoutBuilder
|
|
|
9
10
|
base.send :include, WashoutBuilder::Document::SharedComplexType
|
|
10
11
|
end
|
|
11
12
|
|
|
13
|
+
# A recursive function that retrives all the ancestors of the current exception class
|
|
14
|
+
# @see #fault_ancestors
|
|
15
|
+
# @see #fault_ancestor_hash
|
|
16
|
+
# @see #find_fault_model_structure
|
|
17
|
+
# @see #fault_without_inheritable_elements
|
|
18
|
+
#
|
|
19
|
+
# @param [Array<Hash>] defined An array that contains all the information about all the exception classes found so far
|
|
20
|
+
# @param [Boolean] _debug = false An optional parameter used for debugging purposes
|
|
21
|
+
# @return [Array<Class>] Array with all the exception classes from which the current exception class inherits from
|
|
22
|
+
# @api public
|
|
12
23
|
def get_fault_class_ancestors(defined, _debug = false)
|
|
13
24
|
bool_the_same = false
|
|
14
25
|
ancestors = fault_ancestors
|
|
@@ -21,22 +32,52 @@ module WashoutBuilder
|
|
|
21
32
|
ancestors unless bool_the_same
|
|
22
33
|
end
|
|
23
34
|
|
|
35
|
+
# Removes the inheritable elements from current object that are inherited from the class send as argument
|
|
36
|
+
# @see #remove_fault_type_inheritable_elements
|
|
37
|
+
#
|
|
38
|
+
# @param [Class] ancestors describe ancestors
|
|
39
|
+
# @return [Type] description of returned object
|
|
40
|
+
# @api public
|
|
24
41
|
def fault_without_inheritable_elements(ancestors)
|
|
25
42
|
remove_fault_type_inheritable_elements(ancestors[0].find_fault_model_structure.keys)
|
|
26
43
|
end
|
|
27
44
|
|
|
45
|
+
# Retrieves all the ancestors of the current exception class except ActiveRecord::Base', 'Object', 'BasicObject', 'Exception'
|
|
46
|
+
#
|
|
47
|
+
# @return [Array<Class>] Returns an array with all the classes from which the current exception class inherits from
|
|
48
|
+
# @api public
|
|
28
49
|
def fault_ancestors
|
|
29
50
|
get_complex_type_ancestors(self, ['ActiveRecord::Base', 'Object', 'BasicObject', 'Exception'])
|
|
30
51
|
end
|
|
31
52
|
|
|
53
|
+
# constructs the structure of the current exception class by holding the instance, the structure, and its ancestors
|
|
54
|
+
#
|
|
55
|
+
# @param [Hash] structure A hash that contains the structure of the current exception class (@see #find_fault_model_structure)
|
|
56
|
+
# @param [Array<Class>] ancestors An array with all the exception classes from which the current object inherits from
|
|
57
|
+
# @return [Hash] options The hash that contains information about the current exception class
|
|
58
|
+
# @option options [WashoutBuilder::Document::ExceptionModel] :fault The current exception class that extends WashoutBuilder::Document::ExceptionModel
|
|
59
|
+
# @option options [Hash]:structure An hash that contains as keys the atribute names and as value the primitive and member type of that attributre
|
|
60
|
+
# @option options [Array<Class>] :ancestors An array with all the classes from which current class is inheriting from
|
|
61
|
+
# @api public
|
|
32
62
|
def fault_ancestor_hash(structure, ancestors)
|
|
33
63
|
{ fault: self, structure: structure, ancestors: ancestors }
|
|
34
64
|
end
|
|
35
65
|
|
|
66
|
+
# Removes the atributes that are send as argument
|
|
67
|
+
# @see #find_fault_model_structure
|
|
68
|
+
#
|
|
69
|
+
# @param [Array<String>] keys The keys that have to be removed from the model structure
|
|
70
|
+
# @return [Hash] An hash that contains as keys the atribute names and as value the primitive and member type of that attribute
|
|
71
|
+
# @api public
|
|
36
72
|
def remove_fault_type_inheritable_elements(keys)
|
|
37
73
|
find_fault_model_structure.delete_if { |key, _value| keys.include?(key) }
|
|
38
74
|
end
|
|
39
75
|
|
|
76
|
+
# Dirty hack to determine if a method has both a setter and a getter and not basic method inherited from Object class
|
|
77
|
+
#
|
|
78
|
+
# @param [String] method The method thats needs to be verified
|
|
79
|
+
# @return [Boolean] Returns true if current class responds to the method and has both a setter and a getter for that method and the method is not inherited from Object class
|
|
80
|
+
# @api public
|
|
40
81
|
def check_valid_fault_method?(method)
|
|
41
82
|
method != :== && method != :! &&
|
|
42
83
|
(instance_methods.include?(:"#{method}=") ||
|
|
@@ -44,6 +85,10 @@ module WashoutBuilder
|
|
|
44
85
|
)
|
|
45
86
|
end
|
|
46
87
|
|
|
88
|
+
# tries to fins all instance methods that have both a setter and a getter of the curent class
|
|
89
|
+
# @see #check_valid_fault_method?
|
|
90
|
+
# @return [Array<String>] An array with all the atrributes and instance methods that have both a setter and a getter
|
|
91
|
+
# @api public
|
|
47
92
|
def find_fault_attributes
|
|
48
93
|
attrs = []
|
|
49
94
|
attrs = instance_methods(nil).map do |method|
|
|
@@ -53,6 +98,11 @@ module WashoutBuilder
|
|
|
53
98
|
attrs.concat(%w(message backtrace))
|
|
54
99
|
end
|
|
55
100
|
|
|
101
|
+
# Dirty hack to get the type of an atribute. Considering all other attributes as string type
|
|
102
|
+
#
|
|
103
|
+
# @param [String] method_name The name of the attribute to use
|
|
104
|
+
# @return [String] Returns the type of the attribute , Currently returns "integer" for attribute "code" and "string" for all others
|
|
105
|
+
# @api public
|
|
56
106
|
def get_fault_type_method(method_name)
|
|
57
107
|
case method_name.to_s.downcase
|
|
58
108
|
when 'code'
|
|
@@ -64,6 +114,12 @@ module WashoutBuilder
|
|
|
64
114
|
end
|
|
65
115
|
end
|
|
66
116
|
|
|
117
|
+
# Description of method
|
|
118
|
+
# @see #find_fault_attributes
|
|
119
|
+
# @see #get_fault_type_method
|
|
120
|
+
#
|
|
121
|
+
# @return [Hash] An hash that contains as keys the atribute names and as value the primitive and member type of that attribute
|
|
122
|
+
# @api public
|
|
67
123
|
def find_fault_model_structure
|
|
68
124
|
h = {}
|
|
69
125
|
find_fault_attributes.each do |method_name|
|
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
require_relative './exception_model'
|
|
2
2
|
module WashoutBuilder
|
|
3
3
|
module Document
|
|
4
|
+
# class that is used to generate HTML documentation for a soap service
|
|
4
5
|
class Generator
|
|
6
|
+
# class that is used to generate HTML documentation for a soap service
|
|
7
|
+
#
|
|
8
|
+
# @!attribute soap_actions
|
|
9
|
+
# @return [Hash] Hash that contains all the actions to which the web service responds to and information about them
|
|
10
|
+
#
|
|
11
|
+
# @!attribute config
|
|
12
|
+
# @return [WashOut::SoapConfig] holds the soap configuration for the soap service
|
|
13
|
+
#
|
|
14
|
+
# @!attribute controller_name
|
|
15
|
+
# @return [String] The name of the controller that acts like a soap service
|
|
5
16
|
attr_accessor :soap_actions, :config, :controller_name
|
|
6
17
|
|
|
18
|
+
# Method used to initialize the instance of object
|
|
19
|
+
# @see #controller_class
|
|
20
|
+
#
|
|
21
|
+
# @param [String] controller The name of the controller that acts like a soap service
|
|
22
|
+
# @return [void]
|
|
23
|
+
# @api public
|
|
7
24
|
def initialize(controller)
|
|
8
25
|
controller_class_name = controller_class(controller)
|
|
9
26
|
self.config = controller_class_name.soap_config
|
|
@@ -11,34 +28,69 @@ module WashoutBuilder
|
|
|
11
28
|
self.controller_name = controller
|
|
12
29
|
end
|
|
13
30
|
|
|
31
|
+
# Returns the namespace used for the controller by using the soap configuration of the controller
|
|
32
|
+
#
|
|
33
|
+
# @return [String] description of returned object
|
|
34
|
+
# @api public
|
|
14
35
|
def namespace
|
|
15
36
|
config.respond_to?(:namespace) ? config.namespace : nil
|
|
16
37
|
end
|
|
17
38
|
|
|
39
|
+
# Retrives the class of the controller by using its name
|
|
40
|
+
#
|
|
41
|
+
# @param [String] controller The name of the controller
|
|
42
|
+
# @return [Class] Returns the class of the controller
|
|
43
|
+
# @api public
|
|
18
44
|
def controller_class(controller)
|
|
19
45
|
"#{controller}_controller".camelize.constantize
|
|
20
46
|
end
|
|
21
47
|
|
|
48
|
+
# Retrieves the endpoint of the soap service based on its namespace
|
|
49
|
+
# @see #namespace
|
|
50
|
+
#
|
|
51
|
+
# @return [String] Returns the current soap service's endpoint based on its namespace
|
|
52
|
+
# @api public
|
|
22
53
|
def endpoint
|
|
23
54
|
namespace.blank? ? nil : namespace.gsub('/wsdl', '/action')
|
|
24
55
|
end
|
|
25
56
|
|
|
57
|
+
# Returns the service name using camelcase letter
|
|
58
|
+
#
|
|
59
|
+
# @return [String] Returns the service name using camelcase letter
|
|
60
|
+
# @api public
|
|
26
61
|
def service
|
|
27
62
|
controller_name.blank? ? nil : controller_name.camelize
|
|
28
63
|
end
|
|
29
64
|
|
|
65
|
+
# Returns the service description if the service can respond to description method
|
|
66
|
+
#
|
|
67
|
+
# @return [String] Returns the service description if the service can respond to description method
|
|
68
|
+
# @api public
|
|
30
69
|
def service_description
|
|
31
70
|
config.respond_to?(:description) ? config.description : nil
|
|
32
71
|
end
|
|
33
72
|
|
|
73
|
+
# returns a collection of all operation that the service responds to
|
|
74
|
+
#
|
|
75
|
+
# @return [Array<String>] returns a collection of all operation that the service responds to
|
|
76
|
+
# @api public
|
|
34
77
|
def operations
|
|
35
78
|
soap_actions.map { |operation, _formats| operation }
|
|
36
79
|
end
|
|
37
80
|
|
|
81
|
+
# returns the operations of a service by sorting them alphabetically and removes duplicates
|
|
82
|
+
#
|
|
83
|
+
# @return [Array<String>] returns a collection of all operation that the service responds to sorted alphabetically
|
|
84
|
+
# @api public
|
|
38
85
|
def sorted_operations
|
|
39
86
|
soap_actions.sort_by { |operation, _formats| operation.downcase }.uniq unless soap_actions.blank?
|
|
40
87
|
end
|
|
41
88
|
|
|
89
|
+
# Returns the exceptions that a specific operation can raise
|
|
90
|
+
#
|
|
91
|
+
# @param [String] operation_name describe operation_name
|
|
92
|
+
# @return [Array<Class>] returns an array with all the exception classes that the operation send as argument can raise
|
|
93
|
+
# @api public
|
|
42
94
|
def operation_exceptions(operation_name)
|
|
43
95
|
hash_object = soap_actions.find { |operation, _formats| operation.to_s.downcase == operation_name.to_s.downcase }
|
|
44
96
|
return if hash_object.blank?
|
|
@@ -47,10 +99,23 @@ module WashoutBuilder
|
|
|
47
99
|
faults.select { |x| WashoutBuilder::Type.valid_fault_class?(x) }
|
|
48
100
|
end
|
|
49
101
|
|
|
102
|
+
# Sorts a hash by a key alphabetically
|
|
103
|
+
#
|
|
104
|
+
# @param [Hash] types Any kind of hash
|
|
105
|
+
# @option types [String, Symbol] :type The name of the key should be the same as the second argument
|
|
106
|
+
# @param [String, Symbol] type The key that is used for sorting alphabetically
|
|
107
|
+
# @return [Hash] options Same hash sorted alphabetically by the specified key and without duplicates
|
|
108
|
+
# @option options [String, Symbol] :type The name of the key should be the same as the second argument
|
|
109
|
+
# @api public
|
|
50
110
|
def sort_complex_types(types, type)
|
|
51
111
|
types.sort_by { |hash| hash[type.to_sym].to_s.downcase }.uniq { |hash| hash[type.to_sym] } unless types.blank?
|
|
52
112
|
end
|
|
53
113
|
|
|
114
|
+
# Returns either the input arguments of a operation or the output types of that operation depending on the argument
|
|
115
|
+
#
|
|
116
|
+
# @param [String] type The type of the arguments that need to be returned ("input" or anything else )
|
|
117
|
+
# @return [Array<WashOutParam>, Array<Error>] If the argument is "input" will return the arguments of the operation , ottherwise the return type
|
|
118
|
+
# @api public
|
|
54
119
|
def argument_types(type)
|
|
55
120
|
format_type = (type == 'input') ? 'builder_in' : 'builder_out'
|
|
56
121
|
types = []
|
|
@@ -64,18 +129,35 @@ module WashoutBuilder
|
|
|
64
129
|
types
|
|
65
130
|
end
|
|
66
131
|
|
|
132
|
+
# Returns the arguments of all operations
|
|
133
|
+
# @see #argument_types
|
|
134
|
+
# @return [Array<WashOut::Param>] An array with all the arguments types of all operations the service responds to
|
|
135
|
+
# @api public
|
|
67
136
|
def input_types
|
|
68
137
|
argument_types('input')
|
|
69
138
|
end
|
|
70
139
|
|
|
140
|
+
# Returns the arguments of all operations
|
|
141
|
+
# @see #argument_types
|
|
142
|
+
# @return [Array<Error>] An array with all the exceptions that all operations can raise
|
|
143
|
+
# @api public
|
|
71
144
|
def output_types
|
|
72
145
|
argument_types('output')
|
|
73
146
|
end
|
|
74
147
|
|
|
148
|
+
# Returns the names of all operations sorted alphabetically
|
|
149
|
+
#
|
|
150
|
+
# @return [Array<String>] An array with all the names of all operations sorted alphabetically
|
|
151
|
+
# @api public
|
|
75
152
|
def all_soap_action_names
|
|
76
153
|
operations.map(&:to_s).sort_by(&:downcase).uniq unless soap_actions.blank?
|
|
77
154
|
end
|
|
78
155
|
|
|
156
|
+
# Returns all the complex types sorted alphabetically
|
|
157
|
+
# @see WashoutBuilder::Document::ComplexType#get_nested_complex_types
|
|
158
|
+
|
|
159
|
+
# @return [Array<WashOut::Param>] Returns an array with all the complex types sorted alphabetically
|
|
160
|
+
# @api public
|
|
79
161
|
def complex_types
|
|
80
162
|
defined = []
|
|
81
163
|
(input_types + output_types).each do |p|
|
|
@@ -84,18 +166,38 @@ module WashoutBuilder
|
|
|
84
166
|
defined = sort_complex_types(defined, 'class')
|
|
85
167
|
end
|
|
86
168
|
|
|
169
|
+
# Returns an array with all the operations that can raise an exception at least or more
|
|
170
|
+
#
|
|
171
|
+
# @return [Array<String>] Returns an array with all the names of all operations that can raise an exception or more
|
|
172
|
+
# @api public
|
|
87
173
|
def actions_with_exceptions
|
|
88
174
|
soap_actions.select { |_operation, formats| !formats[:raises].blank? }
|
|
89
175
|
end
|
|
90
176
|
|
|
177
|
+
# Returns all the exception raised by all operations
|
|
178
|
+
# @see #actions_with_exceptions
|
|
179
|
+
#
|
|
180
|
+
# @return [Array<Class>] Returns an array with all the exception classes that are raised by all operations
|
|
181
|
+
# @api public
|
|
91
182
|
def exceptions_raised
|
|
92
183
|
actions_with_exceptions.map { |_operation, formats| formats[:raises].is_a?(Array) ? formats[:raises] : [formats[:raises]] }.flatten
|
|
93
184
|
end
|
|
94
185
|
|
|
186
|
+
# Fiters the exceptions raised by checking if they classes inherit from WashOout::SoapError
|
|
187
|
+
# @see #exceptions_raised
|
|
188
|
+
# @return [Array<Class>] returns the exceptions that are raised by all operations filtering only the ones that inherit from WashOut::SoapError
|
|
189
|
+
# @api public
|
|
95
190
|
def filter_exceptions_raised
|
|
96
191
|
exceptions_raised.select { |x| WashoutBuilder::Type.valid_fault_class?(x) } unless actions_with_exceptions.blank?
|
|
97
192
|
end
|
|
98
193
|
|
|
194
|
+
# Retuens all the exception classes that can be raised by all operations with their ancestors also
|
|
195
|
+
# @see #filter_exceptions_raised
|
|
196
|
+
# @see WashoutBuilder::Document::ExceptionModel#get_fault_class_ancestors
|
|
197
|
+
#
|
|
198
|
+
# @param [Array<Class>] base_fault_array An array with the base exception classes from which we try to identify their ancestors
|
|
199
|
+
# @return [Array>Class>] Returns all the exception classes that can be raised by all operations with their ancestors also
|
|
200
|
+
# @api public
|
|
99
201
|
def get_complex_fault_types(base_fault_array)
|
|
100
202
|
fault_types = []
|
|
101
203
|
defined = filter_exceptions_raised
|
|
@@ -104,6 +206,13 @@ module WashoutBuilder
|
|
|
104
206
|
fault_types
|
|
105
207
|
end
|
|
106
208
|
|
|
209
|
+
# Returns all the exception classes raised by all operations sorted alphabetically
|
|
210
|
+
# @see WashoutBuilder::Type#all_fault_classes
|
|
211
|
+
# @see #get_complex_fault_types
|
|
212
|
+
# @see #sort_complex_types
|
|
213
|
+
#
|
|
214
|
+
# @return [Array<Class>] Returns all the exception classes that can be raised by all operations with their ancestors also sorted alphabetically
|
|
215
|
+
# @api public
|
|
107
216
|
def fault_types
|
|
108
217
|
base_fault = [WashoutBuilder::Type.all_fault_classes.first]
|
|
109
218
|
fault_types = get_complex_fault_types(base_fault)
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
module WashoutBuilder
|
|
2
2
|
module Document
|
|
3
|
+
# module that is used for both complex types and exception class to find their ancestors and filter out some of the ancestors
|
|
3
4
|
module SharedComplexType
|
|
5
|
+
# Method that is used to fetch the ancestors of a class and fiter the ancestors that are present in the second argument
|
|
6
|
+
#
|
|
7
|
+
# @param [Class] class_name The class that is used to fetch the ancestors for
|
|
8
|
+
# @param [Array<Class>] array The array of classes that should be fitered from the ancestors if they are present
|
|
9
|
+
# @return [Array<Class>] The classes from which the class given as first argument inherits from but filtering the classes passed as second argument
|
|
4
10
|
def get_complex_type_ancestors(class_name, array)
|
|
5
11
|
(class_name.ancestors - class_name.included_modules).delete_if { |x| x.to_s.downcase == class_name.to_s.downcase || array.include?(x.to_s) }
|
|
6
12
|
end
|
data/lib/washout_builder/soap.rb
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
require 'active_support/concern'
|
|
2
2
|
|
|
3
3
|
module WashoutBuilder
|
|
4
|
+
# the module that is used for soap actions to parse their definition and hold the infoirmation about
|
|
5
|
+
# their arguments and return types
|
|
4
6
|
module SOAP
|
|
5
7
|
extend ActiveSupport::Concern
|
|
6
8
|
include WashOut::SOAP if defined?(WashOut::SOAP)
|
|
7
9
|
include WashOut::Rails::Controller if defined?(WashOut::Rails::Controller)
|
|
8
10
|
|
|
11
|
+
# module that is used to define a soap action for a controller
|
|
9
12
|
module ClassMethods
|
|
13
|
+
# module that is used to define a soap action for a controller
|
|
14
|
+
#
|
|
15
|
+
# @!attribute soap_actions
|
|
16
|
+
# @return [Hash] Hash that contains all the actions to which the web service responds to and information about them
|
|
17
|
+
#
|
|
18
|
+
# @!attribute washout_builder_action
|
|
19
|
+
# @return [String] holds the action of the controller
|
|
10
20
|
attr_accessor :soap_actions, :washout_builder_action
|
|
21
|
+
|
|
11
22
|
# Define a SOAP action +action+. The function has two required +options+:
|
|
12
23
|
# :args and :return. Each is a type +definition+ of format described in
|
|
13
24
|
# WashOut::Param#parse_def.
|
data/lib/washout_builder/type.rb
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
module WashoutBuilder
|
|
2
|
+
# class that is used to define the basic types and the basic exception classes that should be considered
|
|
2
3
|
class Type
|
|
4
|
+
# the basic types that are considered when checking an object type
|
|
3
5
|
BASIC_TYPES = %w(string integer double boolean date datetime float time int)
|
|
4
6
|
|
|
7
|
+
# returns all the exception classes that should be considered to be detected
|
|
8
|
+
#
|
|
9
|
+
# @return [Array<Class>] returns all the exception classes that should be considered to be detected
|
|
10
|
+
# @api public
|
|
5
11
|
def self.all_fault_classes
|
|
6
12
|
faults = []
|
|
7
13
|
faults << WashOut::SOAPError if defined?(WashOut::SOAPError)
|
|
@@ -10,10 +16,21 @@ module WashoutBuilder
|
|
|
10
16
|
faults
|
|
11
17
|
end
|
|
12
18
|
|
|
19
|
+
# Checks if a exception class inherits from the basic ones
|
|
20
|
+
# @see #all_fault_classes
|
|
21
|
+
#
|
|
22
|
+
# @param [Class] fault_class the exception class that needs to be checks if has as ancestor one of the base classes
|
|
23
|
+
# @return [Boolean] Returns true if the class inherits from the basic classes or false otherwise
|
|
24
|
+
# @api public
|
|
13
25
|
def self.ancestor_fault?(fault_class)
|
|
14
26
|
fault_class.ancestors.find { |fault| all_fault_classes.include?(fault) }.present?
|
|
15
27
|
end
|
|
16
28
|
|
|
29
|
+
# Checks if a exception class is valid, by checking if either is a basic exception class or has as ancerstor one ot the base classes
|
|
30
|
+
#
|
|
31
|
+
# @param [Class] fault The exception class that needs to be checks if has as ancestor one of the base classes or is one of them
|
|
32
|
+
# @return [Boolean] Returns true if the class inherits from the basic classes or is one of them, otherwise false
|
|
33
|
+
# @api public
|
|
17
34
|
def self.valid_fault_class?(fault)
|
|
18
35
|
fault.is_a?(Class) && (ancestor_fault?(fault) || all_fault_classes.include?(fault))
|
|
19
36
|
end
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
# Returns the version of the currently loaded gem as a <tt>Gem::Version</tt>
|
|
2
|
+
module WashoutBuilder
|
|
3
|
+
# Returns the version of the currently loaded gem as a <tt>Gem::Version</tt>
|
|
2
4
|
def self.gem_version
|
|
3
5
|
Gem::Version.new VERSION::STRING
|
|
4
6
|
end
|
|
5
7
|
|
|
8
|
+
# the module that is used to generate the gem version
|
|
6
9
|
module VERSION
|
|
10
|
+
# the major version of the gem
|
|
7
11
|
MAJOR = 0
|
|
12
|
+
# the minor version of the gem
|
|
8
13
|
MINOR = 16
|
|
9
|
-
|
|
14
|
+
# the tiny version of the gem
|
|
15
|
+
TINY = 2
|
|
16
|
+
# if the version should be a e
|
|
10
17
|
PRE = nil
|
|
11
18
|
|
|
19
|
+
# the full version of the gem composed from major minor tiny and prerelease versions
|
|
12
20
|
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
|
13
21
|
end
|
|
14
22
|
end
|