washout_builder 0.12.2 → 0.12.3
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 +8 -8
- data/app/controllers/washout_builder/washout_builder_controller.rb +1 -11
- data/lib/washout_builder.rb +1 -1
- data/lib/washout_builder/document/complex_type.rb +1 -1
- data/lib/washout_builder/document/generator.rb +26 -40
- data/lib/washout_builder/document/virtus_model.rb +12 -0
- data/lib/washout_builder/type.rb +9 -0
- data/lib/washout_builder/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjNjZTU3M2FjMjU1NDg3NjNiZWZmYWNiMjJiZmQ0NzFmYTIxOTFiZg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZGRmY2YwNWQ3NDc0YzZiODY5ZDA0OTlmNjliMDFmZmVkOTk4YzFlNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2RjOWJlYzMxNTU3NWE4OWFkZjAwMGFkYzUwMWIyYThlYTg4Nzg3NmNmNDg4
|
10
|
+
ZGMxZWU2ZmE1NDQ1MjBlNWI2OWYxY2UzYTU1MjYzZjUzZDEwNWFmZjg1MWZi
|
11
|
+
NzQyYTNkMWUxYTQ4ODJmOWE5OTEzMzAwZDg3MWJhM2MyOTRiZTA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MGE1ZDFiOWQ3NDJiOTdiOTY4MjM0ZTVmNTBmYzM5N2IyMzU0YjJkNTgxNGQ2
|
14
|
+
N2I5NDU5N2QyM2M3YzFiMjk0MjE0NjNmZmUxOWQ1MTRiYjBkYWJlMGQ4ZjZj
|
15
|
+
YWNhOWJkYjZhY2UwNzZkZTgwNDJhODY3MzhjOGQ5NmZlODY1NDQ=
|
@@ -5,7 +5,7 @@ class WashoutBuilder::WashoutBuilderController < ActionController::Base
|
|
5
5
|
def all
|
6
6
|
route = params[:name].present? ? controller_is_a_service?(params[:name]) : nil
|
7
7
|
if route.present?
|
8
|
-
@document =
|
8
|
+
@document = WashoutBuilder::Document::Generator.new(route.defaults[:controller])
|
9
9
|
render :template => "wash_with_html/doc", :layout => false,
|
10
10
|
:content_type => 'text/html'
|
11
11
|
else
|
@@ -17,16 +17,6 @@ class WashoutBuilder::WashoutBuilderController < ActionController::Base
|
|
17
17
|
private
|
18
18
|
|
19
19
|
|
20
|
-
def initialize_service_generator(route)
|
21
|
-
controller_class_name = controller_class(route.defaults[:controller])
|
22
|
-
WashoutBuilder::Document::Generator.new(
|
23
|
-
:config => controller_class_name.soap_config,
|
24
|
-
:service_class => controller_class_name,
|
25
|
-
:soap_actions => controller_class_name.soap_actions
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
20
|
def all_services
|
31
21
|
@map_controllers = map_controllers
|
32
22
|
@services = @map_controllers.blank? ? [] : @map_controllers.map do |controller_name|
|
data/lib/washout_builder.rb
CHANGED
@@ -14,7 +14,7 @@ require 'washout_builder/version'
|
|
14
14
|
Virtus::InstanceMethods::Constructor.class_eval do
|
15
15
|
alias_method :original_initialize,:initialize
|
16
16
|
def initialize(attributes = nil)
|
17
|
-
if
|
17
|
+
if WashoutBuilder::Type.valid_fault_class?(self.class)
|
18
18
|
attributes = {:message => attributes} unless attributes.is_a?(Hash)
|
19
19
|
end
|
20
20
|
original_initialize(attributes)
|
@@ -42,7 +42,7 @@ module WashoutBuilder
|
|
42
42
|
|
43
43
|
def fix_descendant_wash_out_type(config, complex_class)
|
44
44
|
param_class = complex_class.is_a?(Class) ? complex_class : complex_class.constantize rescue nil
|
45
|
-
if
|
45
|
+
if param_class.present? && param_class.ancestors.include?(WashOut::Type) && map[0].present?
|
46
46
|
descendant = WashOut::Param.parse_builder_def(config, param_class.wash_out_param_map)[0]
|
47
47
|
self.name = descendant.name
|
48
48
|
self.map = descendant.map
|
@@ -1,29 +1,34 @@
|
|
1
|
+
require_relative "./virtus_model"
|
1
2
|
module WashoutBuilder
|
2
3
|
module Document
|
3
4
|
class Generator
|
4
5
|
|
5
|
-
@attrs = [:soap_actions, :config, :
|
6
|
+
@attrs = [:soap_actions, :config, :controller_name]
|
6
7
|
|
7
8
|
attr_reader *@attrs
|
8
9
|
attr_accessor *@attrs
|
9
10
|
|
10
|
-
def initialize(
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
def initialize(controller)
|
12
|
+
controller_class_name = controller_class(controller)
|
13
|
+
self.config =controller_class_name.soap_config
|
14
|
+
self.soap_actions = controller_class_name.soap_actions
|
15
|
+
self.controller_name = controller
|
14
16
|
end
|
15
17
|
|
16
18
|
def namespace
|
17
|
-
config.namespace
|
19
|
+
config.respond_to?(:namespace) ? config.namespace : nil
|
18
20
|
end
|
19
21
|
|
20
|
-
|
22
|
+
def controller_class(controller)
|
23
|
+
"#{controller}_controller".camelize.constantize
|
24
|
+
end
|
25
|
+
|
21
26
|
def endpoint
|
22
|
-
namespace.gsub("/wsdl", "/action")
|
27
|
+
namespace.blank? ? nil : namespace.gsub("/wsdl", "/action")
|
23
28
|
end
|
24
29
|
|
25
30
|
def service
|
26
|
-
|
31
|
+
controller_name.blank? ? nil : controller_name.camelize
|
27
32
|
end
|
28
33
|
|
29
34
|
def service_description
|
@@ -35,7 +40,7 @@ module WashoutBuilder
|
|
35
40
|
end
|
36
41
|
|
37
42
|
def sort_complex_types(types, type)
|
38
|
-
|
43
|
+
types.sort_by { |hash| hash[type.to_sym].to_s.downcase }.uniq {|hash| hash[type.to_sym] } unless types.blank?
|
39
44
|
end
|
40
45
|
|
41
46
|
|
@@ -75,35 +80,24 @@ module WashoutBuilder
|
|
75
80
|
|
76
81
|
|
77
82
|
def actions_with_exceptions
|
78
|
-
|
83
|
+
soap_actions.select{|operation, formats| !formats[:raises].blank? }
|
79
84
|
end
|
80
85
|
|
81
86
|
def exceptions_raised
|
82
|
-
|
83
|
-
end
|
84
|
-
|
85
|
-
def fault_classes
|
86
|
-
WashoutBuilder::Type.get_fault_classes
|
87
|
-
end
|
88
|
-
|
89
|
-
def has_ancestor_fault?(fault_class)
|
90
|
-
fault_class.ancestors.detect{ |fault| fault_classes.include?(fault) }.present?
|
91
|
-
end
|
92
|
-
|
93
|
-
def valid_fault_class?(fault)
|
94
|
-
fault.is_a?(Class) && ( has_ancestor_fault?(fault) || fault_classes.include?(fault))
|
87
|
+
actions_with_exceptions.collect {|operation, formats| formats[:raises].is_a?(Array) ? formats[:raises] : [formats[:raises]] }.flatten
|
95
88
|
end
|
96
|
-
|
89
|
+
|
90
|
+
|
97
91
|
def filter_exceptions_raised
|
98
|
-
exceptions_raised.select { |x| valid_fault_class?(x) } unless actions_with_exceptions.blank?
|
92
|
+
exceptions_raised.select { |x| WashoutBuilder::Type.valid_fault_class?(x) } unless actions_with_exceptions.blank?
|
99
93
|
end
|
100
94
|
|
101
95
|
def get_complex_fault_types(fault_types)
|
102
96
|
defined = filter_exceptions_raised
|
103
97
|
if defined.blank?
|
104
|
-
defined = [
|
98
|
+
defined = [WashoutBuilder::Type.get_fault_classes.first]
|
105
99
|
else
|
106
|
-
defined <<
|
100
|
+
defined << WashoutBuilder::Type.get_fault_classes.first
|
107
101
|
end
|
108
102
|
defined.each{ |exception_class| exception_class.get_fault_class_ancestors( fault_types, true)} unless defined.blank?
|
109
103
|
fault_types
|
@@ -112,7 +106,7 @@ module WashoutBuilder
|
|
112
106
|
def fault_types
|
113
107
|
fault_types = get_complex_fault_types([])
|
114
108
|
complex_types = extract_nested_complex_types_from_exceptions(fault_types)
|
115
|
-
complex_types.delete_if{ |hash| fault_types << hash if valid_fault_class?(hash[:fault]) } unless complex_types.blank?
|
109
|
+
complex_types.delete_if{ |hash| fault_types << hash if WashoutBuilder::Type.valid_fault_class?(hash[:fault]) } unless complex_types.blank?
|
116
110
|
fault_types = sort_complex_types(fault_types, "fault")
|
117
111
|
complex_types = sort_complex_types(complex_types, "fault")
|
118
112
|
[fault_types, complex_types]
|
@@ -123,20 +117,12 @@ module WashoutBuilder
|
|
123
117
|
fault_types.each do |hash|
|
124
118
|
hash[:structure].each do |attribute, attr_details|
|
125
119
|
complex_class = hash[:fault].get_virtus_member_type_primitive(attr_details)
|
126
|
-
|
127
|
-
|
128
|
-
if !param_class.nil? && param_class.ancestors.include?(Virtus::Model::Core)
|
129
|
-
param_class.send :extend, WashoutBuilder::Document::VirtusModel
|
130
|
-
param_class.get_fault_class_ancestors( complex_types)
|
131
|
-
elsif !param_class.nil? && !param_class.ancestors.include?(Virtus::Model::Core)
|
132
|
-
raise RuntimeError, "Non-existent use of `#{param_class}` type name or this class does not use Virtus.model. Consider using classified types that include Virtus.mode for exception atribute types."
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
120
|
+
WashoutBuilder::Document::VirtusModel.extract_nested_complex_types(complex_class, complex_types)
|
121
|
+
end
|
136
122
|
end
|
137
123
|
complex_types
|
138
124
|
end
|
139
|
-
|
125
|
+
|
140
126
|
|
141
127
|
|
142
128
|
|
@@ -62,6 +62,18 @@ module WashoutBuilder
|
|
62
62
|
end
|
63
63
|
|
64
64
|
|
65
|
+
def self.extract_nested_complex_types(complex_class, complex_types)
|
66
|
+
unless complex_class.nil?
|
67
|
+
param_class = complex_class.is_a?(Class) ? complex_class : complex_class.constantize rescue nil
|
68
|
+
if param_class.present? && param_class.ancestors.include?(Virtus::Model::Core)
|
69
|
+
param_class.send :extend, WashoutBuilder::Document::VirtusModel
|
70
|
+
param_class.get_fault_class_ancestors( complex_types)
|
71
|
+
elsif param_class.present? && !param_class.ancestors.include?(Virtus::Model::Core)
|
72
|
+
raise RuntimeError, "Non-existent use of `#{param_class}` type name or this class does not use Virtus.model. Consider using classified types that include Virtus.mode for exception atribute types."
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
65
77
|
end
|
66
78
|
end
|
67
79
|
end
|
data/lib/washout_builder/type.rb
CHANGED
@@ -21,6 +21,15 @@ module WashoutBuilder
|
|
21
21
|
return faults
|
22
22
|
end
|
23
23
|
|
24
|
+
|
25
|
+
def self.has_ancestor_fault?(fault_class)
|
26
|
+
fault_class.ancestors.detect{ |fault| get_fault_classes.include?(fault) }.present?
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.valid_fault_class?(fault)
|
30
|
+
fault.is_a?(Class) && ( has_ancestor_fault?(fault) || get_fault_classes.include?(fault))
|
31
|
+
end
|
32
|
+
|
24
33
|
|
25
34
|
end
|
26
35
|
end
|