Class: Genio::Parser::Format::IODocs

Inherits:
Base
  • Object
show all
Defined in:
lib/genio/parser/format/iodocs.rb

Constant Summary collapse

URIPropertyName =
/{([^}]+)}/

Instance Attribute Summary

Attributes inherited from Base

#data_types, #endpoint, #enum_types, #files, #options, #services

Class Method Summary collapse

Methods inherited from Base

#expand_path, #initialize, #load_files, #open, #read_file, #to_iodocs

Methods included from Logging

#logger

Constructor Details

This class inherits a constructor from Genio::Parser::Format::Base

Class Method Details

.members_for_data_type(data_type, schema) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/genio/parser/format/iodocs.rb', line 68

def members_for_data_type(data_type, schema)
  return [] if members_loaded[data_type]
  members_loaded[data_type] = true
  members = []
  if data_type.extends and schema.data_types[data_type.extends]
    members += members_for_data_type(schema.data_types[data_type.extends], schema)
  end
  data_type.properties.each{|name, property|
    unless property.readonly
      members.push(property_to_iodocs(name, property, schema))
    end
  }
  members_loaded.delete(data_type)
  members
end

.members_loadedObject



64
65
66
# File 'lib/genio/parser/format/iodocs.rb', line 64

def members_loaded
  @members ||= {}
end

.operation_to_iodocs(name, operation, schema) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/genio/parser/format/iodocs.rb', line 34

def operation_to_iodocs(name, operation, schema)
  data = {
    "Name" => name,
    "HTTPMethod" => operation.type,
    "URI" => operation.path.gsub(URIPropertyName,':\1') ,
    "Required" => "Y",
    "Type" => "complex",
    "Parameters" => [],
    "Description" => operation.description || "" }
  if operation.parameters
    data["Parameters"] =
      operation.parameters.map do |name, property|
        property_to_iodocs(name, property.merge( :required => (property.location == "path") ), schema)
      end
  end
  operation.path.scan(URIPropertyName) do |name|
    if operation.parameters.nil? or operation.parameters[$1].nil?
      property = Types::Property.new(:type => "string", :required => true)
      data["Parameters"] << property_to_iodocs($1, property, schema)
    end
  end
  if operation.request_property
    property  = operation.request_property.merge( :required => true )
    parameter = property_to_iodocs(property.type, property, schema)
    data["Parameters"] += [ parameter ]
    data["RequestContentType"] = "application/json"
  end
  data
end

.property_to_iodocs(name, property, schema) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/genio/parser/format/iodocs.rb', line 84

def property_to_iodocs(name, property, schema)
  if property.attribute and schema.options[:attribute]
    name = "@#{name}"
  elsif property.package and schema.options[:namespace]
    name = "#{property.package}:#{name}"
  end
  data = {
    "Name" => name,
    "Type" => property.type,
    "ValidatedClass" => property.type,
  }
  data["Description"] = property.description if property.description
  data["Required"] = "Y" if property.required == true
  data["Default"] = property.default unless property.default.nil?
  if property.enum
    data["Type"] = "enumerated"
    data["EnumeratedList"] = property.enum
  elsif schema.data_types[property.type]
    data["Type"]    = "complex"
    data["Members"] = members_for_data_type(schema.data_types[property.type], schema)
    data["Members"] = [ data["Members"] ] if property.array
  end
  data
end

.service_to_iodocs(name, service, schema) ⇒ Object



28
29
30
31
# File 'lib/genio/parser/format/iodocs.rb', line 28

def service_to_iodocs(name, service, schema)
  { "name" => name,
    "methods" => service.operations.map{|name, operation| operation_to_iodocs(name, operation, schema) } }
end

.to_iodocs(schema) ⇒ Object



24
25
26
# File 'lib/genio/parser/format/iodocs.rb', line 24

def to_iodocs(schema)
  { "endpoints" => schema.services.map{|name, service| service_to_iodocs(name, service, schema) } }
end