genio-parser 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,71 @@
1
+ module Genio
2
+ module Parser
3
+ module Format
4
+ class Wsdl < Wadl
5
+ def xslt
6
+ @xslt ||= Nokogiri::XSLT(File.read(File.expand_path("../../../../../data/wsdl2meta.xsl", __FILE__)))
7
+ end
8
+
9
+ def parse_schema(schema)
10
+ super
11
+
12
+ schema.css("services service").each do |service|
13
+ parse_service(service)
14
+ end
15
+ end
16
+
17
+ def parse_service(service)
18
+ name = service.attr("name")
19
+
20
+ self.services[name] ||= Types::Service.new( :operations => {} )
21
+
22
+ service_binding = service.css("binding").first
23
+ if service_binding
24
+ type = service_binding.attr("type")
25
+ self.services[name].package = self.namespaces.find{|k,v| v == type }.try(:first) || type
26
+ end
27
+
28
+ service.css("functions function").each do |func|
29
+ options = Hash[func.attributes.map{|k,v| [k, v.value] }]
30
+ operation = Types::Operation.new(options.merge(:path => "/", :type => "POST"))
31
+
32
+ request = func.css("parameters variable[part=body]").first
33
+ if request
34
+ operation.request_property = operation_property(request)
35
+ operation.request = operation.request_property.type
36
+ end
37
+
38
+ header = func.css("parameters variable[part=header]").first
39
+ if header
40
+ operation.header_property = operation_property(header)
41
+ operation.header = operation.header_property.type
42
+ end
43
+
44
+ response = func.css("returns variable[part=body]").first
45
+ if response
46
+ operation.response_property = operation_property(response)
47
+ operation.response = operation.response_property.type
48
+ end
49
+
50
+ fault = func.css("throws variable").first
51
+ if fault
52
+ operation.fault_property = operation_property(fault)
53
+ operation.fault = operation.fault_property.type
54
+ self.data_types[operation.fault].fault = true if self.data_types[operation.fault]
55
+ end
56
+
57
+ self.services[name].operations[func.attr("name")] = operation
58
+ end
59
+ end
60
+
61
+ def operation_property(type)
62
+ property = Types::Property.new(type.attributes.map{|k,v| [k, v.value] })
63
+ property.type = valid_type(property.type)
64
+ element = current_schema.css("elements element[name=#{property.type}]").first
65
+ property.type = valid_type(element.attr("type")) if element and element.attr("type").present?
66
+ property
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,16 @@
1
+ require 'logger'
2
+
3
+ module Genio
4
+ module Parser
5
+ class << self
6
+ attr_accessor :logger
7
+ end
8
+ self.logger = Logger.new(STDERR)
9
+
10
+ module Logging
11
+ def logger
12
+ Genio::Parser.logger
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,58 @@
1
+ module Genio
2
+ module Parser
3
+ module Types
4
+ class Base < Hash
5
+ def initialize(options = {})
6
+ options.each do |name, value|
7
+ self[name] = value
8
+ end
9
+ end
10
+
11
+ def merge(hash)
12
+ dup.merge!(hash)
13
+ end
14
+
15
+ def merge!(hash)
16
+ hash.each{|name, value| self[name] = value }
17
+ self
18
+ end
19
+
20
+ def [](name)
21
+ name = name.to_s if name.is_a?(Symbol)
22
+ super(name)
23
+ end
24
+
25
+ def []=(name, value)
26
+ name = name.to_s if name.is_a?(Symbol)
27
+ super(name, convert(value))
28
+ end
29
+
30
+ def convert(value)
31
+ value = Base.new(value) if !value.is_a? Base and value.is_a? Hash
32
+ value
33
+ end
34
+
35
+ def method_missing(name, *values)
36
+ if values.size == 0
37
+ self[name]
38
+ elsif values.size == 1 and name =~ /^(.*)=$/
39
+ self[$1] = values.first
40
+ else
41
+ super
42
+ end
43
+ end
44
+
45
+ class << self
46
+ def attr_accessor(name)
47
+ define_method name do
48
+ self[name]
49
+ end
50
+ define_method "#{name}=" do |value|
51
+ self[name] = value
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,37 @@
1
+ require "genio/parser/types/base"
2
+
3
+ module Genio
4
+ module Parser
5
+ module Types
6
+ class Service < Base
7
+ attr_accessor :base_path
8
+ attr_accessor :operations
9
+ end
10
+
11
+ class Operation < Base
12
+ attr_accessor :type
13
+ attr_accessor :path
14
+ attr_accessor :parameters
15
+ attr_accessor :request
16
+ attr_accessor :response
17
+ end
18
+
19
+ class DataType < Base
20
+ attr_accessor :extends
21
+ attr_accessor :properties
22
+ end
23
+
24
+ class Property < Base
25
+ attr_accessor :type
26
+ attr_accessor :array
27
+ attr_accessor :min
28
+ attr_accessor :max
29
+ attr_accessor :enum
30
+ end
31
+
32
+ class EnumType < Base
33
+ attr_accessor :values
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,5 @@
1
+ module Genio
2
+ module Parser
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ require 'genio/parser/version'
2
+ require 'genio/parser/logging'
3
+
4
+ module Genio
5
+ module Parser
6
+ autoload :Types, 'genio/parser/types'
7
+ module Format
8
+ autoload :Base, 'genio/parser/format/base'
9
+ autoload :JsonSchema, 'genio/parser/format/json_schema'
10
+ autoload :IODocs, 'genio/parser/format/iodocs'
11
+ autoload :Wadl, 'genio/parser/format/wadl'
12
+ autoload :Wsdl, 'genio/parser/format/wsdl'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ require 'genio/parser'
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: genio-parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - siddick
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: vcr
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Parse different schema and generate common object
126
+ email:
127
+ - mebramsha@paypal.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - LICENSE.txt
133
+ - README.md
134
+ - data/wadl2meta.xsl
135
+ - data/wsdl2meta.xsl
136
+ - lib/genio-parser.rb
137
+ - lib/genio/parser.rb
138
+ - lib/genio/parser/format/base.rb
139
+ - lib/genio/parser/format/iodocs.rb
140
+ - lib/genio/parser/format/json_schema.rb
141
+ - lib/genio/parser/format/wadl.rb
142
+ - lib/genio/parser/format/wsdl.rb
143
+ - lib/genio/parser/logging.rb
144
+ - lib/genio/parser/types.rb
145
+ - lib/genio/parser/types/base.rb
146
+ - lib/genio/parser/version.rb
147
+ homepage: ''
148
+ licenses:
149
+ - MIT
150
+ metadata: {}
151
+ post_install_message:
152
+ rdoc_options: []
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ required_rubygems_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ requirements: []
166
+ rubyforge_project:
167
+ rubygems_version: 2.4.1
168
+ signing_key:
169
+ specification_version: 4
170
+ summary: Parse different schema and generate common object
171
+ test_files: []