Class: WashoutBuilder::Document::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/washout_builder/document/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(attrs = {}) ⇒ Generator

Returns a new instance of Generator.



10
11
12
13
14
# File 'lib/washout_builder/document/generator.rb', line 10

def initialize(attrs = {})
  self.config = attrs[:config]
  self.service_class = attrs[:service_class]
  self.soap_actions = attrs[:soap_actions]
end

Instance Method Details

#complex_typesObject



67
68
69
70
71
72
73
# File 'lib/washout_builder/document/generator.rb', line 67

def complex_types
  defined = []
  (input_types + output_types).each do |p|
    defined.concat(p.get_nested_complex_types(config,  defined))
  end
  defined.sort_by { |hash| hash[:class].to_s.downcase }.uniq{|hash| hash[:class] } unless defined.blank?
end

#endpointObject



21
22
23
# File 'lib/washout_builder/document/generator.rb', line 21

def endpoint 
  namespace.gsub("/wsdl", "/action")
end

#extract_nested_complex_types_from_exceptions(fault_types) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/washout_builder/document/generator.rb', line 93

def extract_nested_complex_types_from_exceptions(fault_types)
  complex_types = []
  fault_types.each do |hash| 
    hash[:structure].each do |attribute, attr_details|
      complex_class = hash[:fault].get_virtus_member_type_primitive(attr_details)
      unless complex_class.nil?
        param_class = complex_class.is_a?(Class) ? complex_class : complex_class.constantize rescue nil
        if !param_class.nil? && param_class.ancestors.include?(Virtus::Model::Core)
          param_class.send :extend, WashoutBuilder::Document::VirtusModel
          param_class.get_fault_class_ancestors( complex_types)
        elsif !param_class.nil? && !param_class.ancestors.include?(Virtus::Model::Core)
          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."
        end 
      end
    end 
  end
  complex_types
end

#fault_typesObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/washout_builder/document/generator.rb', line 76

def fault_types
  defined = soap_actions.select{|operation, formats| !formats[:raises].blank? }
  defined = defined.collect {|operation, formats|  formats[:raises].is_a?(Array)  ? formats[:raises] : [formats[:raises]] }.flatten.select { |x| (x.is_a?(Class) && x.ancestors.detect{ |fault|  WashoutBuilder::Type.get_fault_classes.include?(fault)  }.present?) || (x.is_a?(Class) && WashoutBuilder::Type.get_fault_classes.include?(x)) }  unless defined.blank?
  fault_types = []
  if defined.blank?
    defined = [WashoutBuilder::Type.get_fault_classes.first]
  else
    defined  << WashoutBuilder::Type.get_fault_classes.first
  end
  defined.each{ |exception_class|  exception_class.get_fault_class_ancestors( fault_types, true)}  unless   defined.blank?
  complex_types = extract_nested_complex_types_from_exceptions(fault_types)
  complex_types.delete_if{ |hash|  fault_types << hash if  (hash[:fault].is_a?(Class) && hash[:fault].ancestors.detect{ |fault|  WashoutBuilder::Type.get_fault_classes.include?(fault)  }.present?) || (hash[:fault].is_a?(Class) && WashoutBuilder::Type.get_fault_classes.include?(hash[:fault]))  } unless complex_types.blank?
  fault_types = fault_types.sort_by { |hash| hash[:fault].to_s.downcase }.uniq {|hash| hash[:fault] } unless fault_types.blank?  
  complex_types = complex_types.sort_by { |hash| hash[:fault].to_s.downcase }.uniq {|hash| hash[:fault] } unless complex_types.blank?
  [fault_types, complex_types]
end

#get_soap_action_namesObject



62
63
64
# File 'lib/washout_builder/document/generator.rb', line 62

def get_soap_action_names
  operations.map(&:to_s).sort_by { |name| name.downcase }.uniq unless soap_actions.blank?
end

#input_typesObject



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/washout_builder/document/generator.rb', line 38

def input_types
  types = []
  unless soap_actions.blank?
    soap_actions.each do |operation, formats|
      (formats[:builder_in]).each do |p|
        types << p
      end
    end
  end
  types
end

#namespaceObject



16
17
18
# File 'lib/washout_builder/document/generator.rb', line 16

def namespace
  config.namespace
end

#operationsObject



33
34
35
# File 'lib/washout_builder/document/generator.rb', line 33

def operations
  soap_actions.map { |operation, formats| operation }
end

#output_typesObject



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/washout_builder/document/generator.rb', line 50

def output_types
  types = []
  unless soap_actions.blank?
    soap_actions.each do |operation, formats|
      (formats[:builder_out]).each do |p|
        types << p
      end
    end
  end
  types
end

#serviceObject



25
26
27
# File 'lib/washout_builder/document/generator.rb', line 25

def service 
  service_class.name.underscore.gsub("_controller", "").camelize
end

#service_descriptionObject



29
30
31
# File 'lib/washout_builder/document/generator.rb', line 29

def service_description
  config.respond_to?(:description) ? config.description : nil
end