raml_ruby 0.1.1 → 0.1.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/.travis.yml +2 -0
- data/README.md +1 -9
- data/Rakefile +7 -0
- data/lib/raml.rb +6 -26
- data/lib/raml/exceptions.rb +1 -0
- data/lib/raml/mixin/bodies.rb +3 -3
- data/lib/raml/mixin/documentable.rb +3 -8
- data/lib/raml/mixin/global.rb +14 -10
- data/lib/raml/mixin/headers.rb +1 -1
- data/lib/raml/mixin/merge.rb +4 -4
- data/lib/raml/mixin/secured_by.rb +27 -0
- data/lib/raml/mixin/validation.rb +27 -27
- data/lib/raml/node.rb +22 -80
- data/lib/raml/node/abstract_method.rb +7 -7
- data/lib/raml/node/abstract_resource.rb +17 -7
- data/lib/raml/node/body.rb +12 -10
- data/lib/raml/node/documentation.rb +0 -8
- data/lib/raml/node/method.rb +5 -7
- data/lib/raml/node/parameter/abstract_parameter.rb +22 -24
- data/lib/raml/node/parametized_reference.rb +3 -3
- data/lib/raml/node/resource.rb +0 -2
- data/lib/raml/node/resource_type.rb +9 -9
- data/lib/raml/node/resource_type_reference.rb +2 -2
- data/lib/raml/node/response.rb +0 -2
- data/lib/raml/node/root.rb +66 -57
- data/lib/raml/node/schema.rb +3 -9
- data/lib/raml/node/schema_reference.rb +2 -2
- data/lib/raml/node/security_scheme.rb +47 -0
- data/lib/raml/node/security_scheme_reference.rb +5 -0
- data/lib/raml/node/trait.rb +8 -8
- data/lib/raml/node/trait_reference.rb +2 -2
- data/lib/raml/parser.rb +25 -16
- data/lib/raml/version.rb +1 -1
- data/raml_ruby.gemspec +3 -7
- data/test/apis/box-api.raml +1447 -1447
- data/test/apis/instagram-api.raml +48 -48
- data/test/apis/stripe-api.raml +4266 -4266
- data/test/apis/twilio-rest-api.raml +47 -47
- data/test/apis/twitter-rest-api.raml +1883 -1883
- data/test/raml/body_spec.rb +22 -39
- data/test/raml/documentation_spec.rb +2 -12
- data/test/raml/method_spec.rb +112 -93
- data/test/raml/parameter/abstract_parameter_spec.rb +9 -34
- data/test/raml/parameter/query_parameter_spec.rb +0 -15
- data/test/raml/parameter/uri_parameter_spec.rb +1 -16
- data/test/raml/resource_spec.rb +59 -41
- data/test/raml/resource_type_spec.rb +13 -13
- data/test/raml/response_spec.rb +23 -36
- data/test/raml/root_spec.rb +85 -18
- data/test/raml/security_scheme_spec.rb +71 -0
- data/test/raml/spec_helper.rb +2 -1
- data/test/raml/template_spec.rb +92 -92
- data/test/raml/trait_spec.rb +7 -7
- metadata +14 -74
- data/templates/abstract_parameter.slim +0 -68
- data/templates/body.slim +0 -15
- data/templates/collapse.slim +0 -10
- data/templates/documentation.slim +0 -2
- data/templates/method.slim +0 -38
- data/templates/resource.slim +0 -33
- data/templates/response.slim +0 -13
- data/templates/root.slim +0 -39
- data/templates/style.sass +0 -119
@@ -9,6 +9,7 @@ module Raml
|
|
9
9
|
include Validation
|
10
10
|
include Bodies
|
11
11
|
include Headers
|
12
|
+
include SecuredBy
|
12
13
|
|
13
14
|
# @!attribute [rw] protocols
|
14
15
|
# @return [Array<String>, nil] the supported protocols. Nil or an array of up to two string
|
@@ -28,9 +29,14 @@ module Raml
|
|
28
29
|
|
29
30
|
children_by :query_parameters , :name , Parameter::QueryParameter
|
30
31
|
children_by :responses , :name , Response
|
32
|
+
children_by :secured_by , :name , SecuritySchemeReference
|
31
33
|
|
32
34
|
private
|
33
|
-
|
35
|
+
|
36
|
+
def validate
|
37
|
+
_validate_secured_by
|
38
|
+
end
|
39
|
+
|
34
40
|
def validate_protocols
|
35
41
|
if @protocols
|
36
42
|
validate_array :protocols, @protocols, String
|
@@ -51,11 +57,5 @@ module Raml
|
|
51
57
|
validate_hash 'responses', value, [Integer, String], Hash
|
52
58
|
value.map { |r_name, r_data| Response.new r_name, r_data, self }
|
53
59
|
end
|
54
|
-
|
55
|
-
def parse_secured_by(data)
|
56
|
-
# XXX ignored for now
|
57
|
-
[]
|
58
|
-
end
|
59
|
-
|
60
60
|
end
|
61
61
|
end
|
@@ -7,6 +7,7 @@ module Raml
|
|
7
7
|
include Merge
|
8
8
|
include Parent
|
9
9
|
include Validation
|
10
|
+
include SecuredBy
|
10
11
|
|
11
12
|
# @!attribute [r] base_uri_parameters
|
12
13
|
# @return [Hash<String, Raml::Parameter::BaseUriParameter>] the base URI parameters, keyed
|
@@ -28,6 +29,7 @@ module Raml
|
|
28
29
|
children_by :methods , :name, Raml::Method
|
29
30
|
children_by :base_uri_parameters, :name, Parameter::BaseUriParameter, true
|
30
31
|
children_by :uri_parameters , :name, Parameter::UriParameter , true
|
32
|
+
children_by :secured_by , :name, SecuritySchemeReference
|
31
33
|
|
32
34
|
children_of :traits, [ Raml::Trait, Raml::TraitReference ]
|
33
35
|
|
@@ -77,8 +79,21 @@ module Raml
|
|
77
79
|
@parent.resource_path + self.name
|
78
80
|
end
|
79
81
|
|
82
|
+
|
83
|
+
# Returns the last non regex resource name
|
84
|
+
# @return [String] the last non request resource name
|
85
|
+
def resource_path_name
|
86
|
+
resource_path.split('/').reverse.detect do |pathPart|
|
87
|
+
!pathPart.match(/[{}]/)
|
88
|
+
end || ""
|
89
|
+
end
|
90
|
+
|
80
91
|
private
|
81
|
-
|
92
|
+
|
93
|
+
def validate
|
94
|
+
_validate_secured_by
|
95
|
+
end
|
96
|
+
|
82
97
|
def validate_parent
|
83
98
|
raise InvalidParent, "Parent of resource cannot be nil." if @parent.nil?
|
84
99
|
end
|
@@ -145,15 +160,10 @@ module Raml
|
|
145
160
|
end
|
146
161
|
end
|
147
162
|
|
148
|
-
def parse_secured_by(data)
|
149
|
-
# XXX ignored for now
|
150
|
-
[]
|
151
|
-
end
|
152
|
-
|
153
163
|
def instantiate_resource_type
|
154
164
|
reserved_params = {
|
155
165
|
'resourcePath' => resource_path,
|
156
|
-
'resourcePathName' =>
|
166
|
+
'resourcePathName' => resource_path_name
|
157
167
|
}
|
158
168
|
if ResourceTypeReference === type
|
159
169
|
resource_type_declarations[type.name].instantiate type.parameters.merge reserved_params
|
data/lib/raml/node/body.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Raml
|
2
2
|
class Body < PropertiesNode
|
3
3
|
inherit_class_attributes
|
4
|
-
|
4
|
+
|
5
5
|
include Global
|
6
6
|
include Merge
|
7
7
|
include Parent
|
@@ -25,15 +25,13 @@ module Raml
|
|
25
25
|
# @!attribute [r] media\_type
|
26
26
|
# @return [String] media type of the of body. An alias for #name.
|
27
27
|
|
28
|
-
scalar_property :example
|
28
|
+
scalar_property :example
|
29
29
|
non_scalar_property :form_parameters, :schema
|
30
30
|
|
31
31
|
alias_method :media_type, :name
|
32
|
-
|
33
|
-
self.doc_template = relative_path 'body.slim'
|
34
|
-
|
32
|
+
|
35
33
|
children_by :form_parameters, :name, Parameter::FormParameter
|
36
|
-
|
34
|
+
|
37
35
|
child_of :schema, [ Schema, SchemaReference ]
|
38
36
|
|
39
37
|
# Returns whether the body is a web form. Returns true for "application/x-www-form-urlencoded" and
|
@@ -42,11 +40,11 @@ module Raml
|
|
42
40
|
def web_form?
|
43
41
|
[ 'application/x-www-form-urlencoded', 'multipart/form-data' ].include? media_type
|
44
42
|
end
|
45
|
-
|
43
|
+
|
46
44
|
# @private
|
47
45
|
def merge(other)
|
48
46
|
raise MergeError, "Media types don't match." if media_type != other.media_type
|
49
|
-
|
47
|
+
|
50
48
|
super
|
51
49
|
|
52
50
|
merge_properties other, :form_parameters
|
@@ -60,9 +58,13 @@ module Raml
|
|
60
58
|
end
|
61
59
|
|
62
60
|
private
|
63
|
-
|
61
|
+
|
64
62
|
def validate_name
|
65
|
-
raise InvalidMediaType, 'body media type is invalid' unless
|
63
|
+
raise InvalidMediaType, 'body media type is invalid' unless valid_media_type?
|
64
|
+
end
|
65
|
+
|
66
|
+
def valid_media_type?
|
67
|
+
media_type =~ Body::MEDIA_TYPE_RE || media_type == '*/*'
|
66
68
|
end
|
67
69
|
|
68
70
|
def parse_form_parameters(value)
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'kramdown'
|
2
|
-
|
3
1
|
module Raml
|
4
2
|
class Documentation < PropertiesNode
|
5
3
|
|
@@ -12,17 +10,11 @@ module Raml
|
|
12
10
|
scalar_property :content
|
13
11
|
alias_method :title, :name
|
14
12
|
|
15
|
-
self.doc_template = relative_path 'documentation.slim'
|
16
|
-
|
17
13
|
private
|
18
14
|
|
19
15
|
def validate
|
20
16
|
raise InvalidProperty, 'document title cannot be empty.' if title.nil? or title.empty?
|
21
17
|
raise InvalidProperty, 'document content cannot be empty.' if content.nil? or content.empty?
|
22
18
|
end
|
23
|
-
|
24
|
-
def html_content
|
25
|
-
Kramdown::Document.new(content, input: :GFM).to_html
|
26
|
-
end
|
27
19
|
end
|
28
20
|
end
|
data/lib/raml/node/method.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Raml
|
2
2
|
class Method < AbstractMethod
|
3
3
|
inherit_class_attributes
|
4
|
-
|
4
|
+
|
5
5
|
NAMES = %w(options get head post put delete trace connect patch)
|
6
6
|
|
7
7
|
# @!attribute [r] traits
|
@@ -11,8 +11,6 @@ module Raml
|
|
11
11
|
|
12
12
|
children_of :traits, [ Trait, TraitReference ]
|
13
13
|
|
14
|
-
self.doc_template = relative_path 'method.slim'
|
15
|
-
|
16
14
|
# @private
|
17
15
|
def apply_traits
|
18
16
|
# We apply resource traits before method traits, and apply traits at each level in
|
@@ -48,8 +46,8 @@ module Raml
|
|
48
46
|
false
|
49
47
|
else # TraitReference
|
50
48
|
self.traits.any? do |self_trait|
|
51
|
-
self_trait.is_a?(TraitReference) &&
|
52
|
-
self_trait.name == other_trait.name &&
|
49
|
+
self_trait.is_a?(TraitReference) &&
|
50
|
+
self_trait.name == other_trait.name &&
|
53
51
|
self_trait.parameters == other_trait.parameters
|
54
52
|
end
|
55
53
|
end
|
@@ -76,7 +74,7 @@ module Raml
|
|
76
74
|
value.map do |trait|
|
77
75
|
if trait.is_a? Hash
|
78
76
|
if trait.keys.size == 1 and trait_declarations.include? trait.keys.first
|
79
|
-
raise InvalidProperty, 'is property with map of trait name but params are not a map' unless
|
77
|
+
raise InvalidProperty, 'is property with map of trait name but params are not a map' unless
|
80
78
|
trait.values[0].is_a? Hash
|
81
79
|
TraitReference.new( *trait.first, self )
|
82
80
|
else
|
@@ -93,7 +91,7 @@ module Raml
|
|
93
91
|
def instantiate_trait(trait)
|
94
92
|
reserved_params = {
|
95
93
|
'resourcePath' => @parent.resource_path,
|
96
|
-
'resourcePathName' => @parent.
|
94
|
+
'resourcePathName' => @parent.resource_path_name,
|
97
95
|
'methodName' => self.name
|
98
96
|
}
|
99
97
|
if TraitReference === trait
|
@@ -48,8 +48,8 @@ module Raml
|
|
48
48
|
# @return [Hash<String, Raml::Parameter::AbstractParameter>] if the parameter supports multiple types,
|
49
49
|
# the type alternatives, keyed by the type.
|
50
50
|
|
51
|
-
scalar_property :type , :enum , :pattern , :min_length ,
|
52
|
-
:max_length , :minimum , :maximum , :example ,
|
51
|
+
scalar_property :type , :enum , :pattern , :min_length ,
|
52
|
+
:max_length , :minimum , :maximum , :example ,
|
53
53
|
:repeat , :required , :default
|
54
54
|
|
55
55
|
attr_reader_default :type , 'string'
|
@@ -58,8 +58,6 @@ module Raml
|
|
58
58
|
|
59
59
|
children_by :types, :type, AbstractParameter
|
60
60
|
|
61
|
-
self.doc_template = relative_path 'abstract_parameter.slim'
|
62
|
-
|
63
61
|
# @param name [String] the parameter name.
|
64
62
|
# @param parameter_data [Hash, Array<Hash>] the parameter data. If the parameter supports multiple types,
|
65
63
|
# it should be an array of hashes, one hash each for each type.
|
@@ -80,7 +78,7 @@ module Raml
|
|
80
78
|
def has_multiple_types?
|
81
79
|
not children.empty?
|
82
80
|
end
|
83
|
-
|
81
|
+
|
84
82
|
# @private
|
85
83
|
def merge(other)
|
86
84
|
raise MergeError, "#{self.class} names don't match." if name != other.name
|
@@ -124,7 +122,7 @@ module Raml
|
|
124
122
|
end
|
125
123
|
|
126
124
|
private
|
127
|
-
|
125
|
+
|
128
126
|
def validate_type
|
129
127
|
raise InvalidParameterType unless VALID_TYPES.include? type
|
130
128
|
end
|
@@ -139,7 +137,7 @@ module Raml
|
|
139
137
|
end
|
140
138
|
end
|
141
139
|
end
|
142
|
-
|
140
|
+
|
143
141
|
def validate_pattern
|
144
142
|
if pattern
|
145
143
|
if type == 'string'
|
@@ -153,10 +151,10 @@ module Raml
|
|
153
151
|
end
|
154
152
|
else
|
155
153
|
raise InapplicableParameterAttribute, 'pattern attribute is only applicable to string parameters.'
|
156
|
-
end
|
154
|
+
end
|
157
155
|
end
|
158
156
|
end
|
159
|
-
|
157
|
+
|
160
158
|
def validate_min_length
|
161
159
|
if min_length
|
162
160
|
if type != 'string'
|
@@ -166,7 +164,7 @@ module Raml
|
|
166
164
|
end
|
167
165
|
end
|
168
166
|
end
|
169
|
-
|
167
|
+
|
170
168
|
def validate_max_length
|
171
169
|
if max_length
|
172
170
|
if type != 'string'
|
@@ -176,68 +174,68 @@ module Raml
|
|
176
174
|
end
|
177
175
|
end
|
178
176
|
end
|
179
|
-
|
177
|
+
|
180
178
|
def validate_minimum
|
181
179
|
if minimum
|
182
180
|
if %w(integer number).include? type
|
183
181
|
raise InvalidParameterAttribute, 'minimum attribute must be numeric' unless minimum.is_a? Numeric
|
184
182
|
else
|
185
|
-
raise InapplicableParameterAttribute,
|
183
|
+
raise InapplicableParameterAttribute,
|
186
184
|
'minimum attribute applicable only to number or integer parameters.'
|
187
185
|
end
|
188
186
|
end
|
189
187
|
end
|
190
|
-
|
188
|
+
|
191
189
|
def validate_maximum
|
192
190
|
if maximum
|
193
191
|
if %w(integer number).include? type
|
194
192
|
raise InvalidParameterAttribute, 'maximum attribute must be numeric' unless maximum.is_a? Numeric
|
195
193
|
else
|
196
|
-
raise InapplicableParameterAttribute,
|
194
|
+
raise InapplicableParameterAttribute,
|
197
195
|
'maximum attribute applicable only to number or integer parameters.'
|
198
196
|
end
|
199
197
|
end
|
200
198
|
end
|
201
|
-
|
199
|
+
|
202
200
|
def validate_example
|
203
201
|
validate_value :example
|
204
202
|
end
|
205
|
-
|
203
|
+
|
206
204
|
def validate_repeat
|
207
205
|
unless [true, false].include?(repeat)
|
208
206
|
raise InvalidParameterAttribute, 'repeat attribute must be true or false.'
|
209
207
|
end
|
210
208
|
end
|
211
|
-
|
209
|
+
|
212
210
|
def validate_required
|
213
211
|
unless [true, false].include?(required)
|
214
212
|
raise InvalidParameterAttribute, "required attribute must be true or false: #{required} (#{required.class})"
|
215
213
|
end
|
216
214
|
end
|
217
|
-
|
215
|
+
|
218
216
|
def validate_default
|
219
217
|
validate_value :default
|
220
218
|
end
|
221
|
-
|
219
|
+
|
222
220
|
def validate_value(which)
|
223
221
|
val = send which
|
224
222
|
if val
|
225
223
|
err_msg = "#{which} attribute for a %s parameter must be a %s: #{val} (#{val.class})"
|
226
224
|
case type
|
227
225
|
when 'string'
|
228
|
-
raise InvalidParameterAttribute,
|
226
|
+
raise InvalidParameterAttribute,
|
229
227
|
( err_msg % [ 'string' , 'string' ] ) unless val.is_a? String
|
230
228
|
when 'number'
|
231
|
-
raise InvalidParameterAttribute,
|
229
|
+
raise InvalidParameterAttribute,
|
232
230
|
( err_msg % [ 'number' , 'number' ] ) unless val.is_a? Numeric
|
233
231
|
when 'integer'
|
234
|
-
raise InvalidParameterAttribute,
|
232
|
+
raise InvalidParameterAttribute,
|
235
233
|
( err_msg % [ 'integer', 'integer' ] ) unless val.is_a? Integer
|
236
234
|
when 'date'
|
237
|
-
raise InvalidParameterAttribute,
|
235
|
+
raise InvalidParameterAttribute,
|
238
236
|
( err_msg % [ 'date' , 'string' ] ) unless val.is_a? String
|
239
237
|
when 'boolean'
|
240
|
-
raise InvalidParameterAttribute,
|
238
|
+
raise InvalidParameterAttribute,
|
241
239
|
( err_msg % [ 'boolean', 'boolean' ] ) unless [TrueClass, FalseClass].include? val.class
|
242
240
|
end
|
243
241
|
end
|
@@ -8,8 +8,8 @@ module Raml
|
|
8
8
|
# @param parameters [Hash<String,String>] parameters to interpolate when instantiating the resouce type or trait.
|
9
9
|
# @param parent [Raml::Node] the parent node.
|
10
10
|
def initialize(name, parameters={}, parent)
|
11
|
-
|
12
|
-
|
11
|
+
super name, parent
|
12
|
+
@parameters = parameters
|
13
13
|
end
|
14
14
|
end
|
15
|
-
end
|
15
|
+
end
|
data/lib/raml/node/resource.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
module Raml
|
2
2
|
class ResourceType < Template
|
3
|
-
|
4
|
-
|
3
|
+
class Instance < AbstractResource
|
4
|
+
inherit_class_attributes
|
5
5
|
|
6
6
|
# @!attribute [rw] usage
|
7
7
|
# @return [String,nil] how the resource type should be used.
|
8
|
-
|
9
|
-
|
8
|
+
scalar_property :usage
|
9
|
+
end
|
10
10
|
|
11
11
|
# Instantiate a new resource type with the given parameters.
|
12
12
|
# @param params [Hash] the parameters to interpolate in the resource type.
|
13
13
|
# @return [Raml::ResourceType::Instance] the instantiated resouce type.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
def instantiate(params)
|
15
|
+
instance = Instance.new( *interpolate(params), @parent )
|
16
|
+
instance.apply_resource_type
|
17
|
+
instance
|
18
|
+
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/raml/node/response.rb
CHANGED
data/lib/raml/node/root.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'sass'
|
2
1
|
require 'uri'
|
3
2
|
require 'uri_template'
|
4
3
|
|
@@ -9,6 +8,7 @@ module Raml
|
|
9
8
|
|
10
9
|
include Parent
|
11
10
|
include Validation
|
11
|
+
include SecuredBy
|
12
12
|
|
13
13
|
# @!attribute [rw] title
|
14
14
|
# @return [String] API title.
|
@@ -31,7 +31,7 @@ module Raml
|
|
31
31
|
|
32
32
|
# @!attribute [r] base_uri_parameters
|
33
33
|
# @return [Hash<String, Raml::Parameter::BaseUriParameter>] the base URI parameters, keyed
|
34
|
-
# by the parameter name.
|
34
|
+
# by the parameter name.
|
35
35
|
|
36
36
|
# @!attribute [r] schemas
|
37
37
|
# @return [Hash<String, Raml::Schema>] the schema definitions, keyed by the schema name.
|
@@ -45,28 +45,33 @@ module Raml
|
|
45
45
|
# @!attribute [r] resource_types
|
46
46
|
# @return [Hash<String, Raml::ResourceType>] the resource type definitions, keyed by the resource type name.
|
47
47
|
|
48
|
+
# @!attribute [r] security_schemes
|
49
|
+
# @return [Hash<String, Raml::SecurityScheme>] the security scheme definitions, keyed by the security scheme name.
|
50
|
+
|
48
51
|
scalar_property :title , :version , :base_uri ,
|
49
52
|
:protocols , :media_type
|
50
53
|
|
51
|
-
non_scalar_property :base_uri_parameters, :documentation , :schemas, :secured_by,
|
52
|
-
:security_schemes , :resource_types, :traits
|
54
|
+
non_scalar_property :base_uri_parameters, :documentation , :schemas, :secured_by,
|
55
|
+
:security_schemes , :resource_types, :traits, :security_schemes
|
53
56
|
|
54
57
|
regexp_property( /\A\//, ->(key,value) { Resource.new key, value, self } )
|
55
58
|
|
56
59
|
children_of :documents, Documentation
|
57
60
|
|
58
|
-
children_by :base_uri_parameters, :name, Parameter::BaseUriParameter
|
61
|
+
children_by :base_uri_parameters, :name, Parameter::BaseUriParameter
|
59
62
|
children_by :resources , :name, Resource
|
60
63
|
children_by :schemas , :name, Schema
|
61
64
|
children_by :traits , :name, Trait
|
62
65
|
children_by :resource_types , :name, ResourceType
|
66
|
+
children_by :security_schemes , :name, SecurityScheme
|
67
|
+
children_by :secured_by , :name, SecuritySchemeReference
|
63
68
|
|
64
|
-
alias :default_media_type
|
65
|
-
alias :trait_declarations
|
66
|
-
alias :resource_type_declarations
|
67
|
-
alias :
|
68
|
-
|
69
|
-
|
69
|
+
alias :default_media_type :media_type
|
70
|
+
alias :trait_declarations :traits
|
71
|
+
alias :resource_type_declarations :resource_types
|
72
|
+
alias :security_scheme_declarations :security_schemes
|
73
|
+
alias :schema_declarations :schemas
|
74
|
+
alias :secured_by_declarations :secured_by
|
70
75
|
|
71
76
|
def initialize(root_data)
|
72
77
|
super nil, root_data, self
|
@@ -79,7 +84,7 @@ module Raml
|
|
79
84
|
resources.values.each(&:apply_resource_type)
|
80
85
|
resources.values.each(&:apply_traits)
|
81
86
|
inline_reference SchemaReference, schemas, @children
|
82
|
-
@expanded = true
|
87
|
+
@expanded = true
|
83
88
|
end
|
84
89
|
end
|
85
90
|
|
@@ -94,104 +99,113 @@ module Raml
|
|
94
99
|
raise RequiredPropertyMissing, 'Missing root title property.' if title.nil?
|
95
100
|
raise RequiredPropertyMissing, 'Missing root baseUri property' if base_uri.nil?
|
96
101
|
_validate_base_uri
|
102
|
+
_validate_secured_by
|
97
103
|
end
|
98
104
|
|
99
105
|
def validate_title
|
100
106
|
validate_string :title, title
|
101
107
|
end
|
102
|
-
|
108
|
+
|
103
109
|
def _validate_base_uri
|
104
110
|
validate_string :base_uri, base_uri
|
105
|
-
|
111
|
+
|
106
112
|
# Check whether its a URL.
|
107
113
|
uri = parse_uri base_uri
|
108
|
-
|
114
|
+
|
109
115
|
# If the parser doesn't think its a URL or the URL is not for HTTP or HTTPS,
|
110
116
|
# try to parse it as a URL template.
|
111
117
|
if uri.nil? and not uri.kind_of? URI::HTTP
|
112
118
|
template = parse_template
|
113
|
-
|
119
|
+
|
114
120
|
# The template parser did not complain, but does it generate valid URLs?
|
115
121
|
uri = template.expand Hash[ template.variables.map {|var| [ var, 'a'] } ]
|
116
122
|
uri = parse_uri uri
|
117
123
|
raise InvalidProperty, 'baseUri property is not a URL or a URL template.' unless
|
118
124
|
uri and uri.kind_of? URI::HTTP
|
119
|
-
|
125
|
+
|
120
126
|
raise RequiredPropertyMissing, 'version property is required when baseUri template has version parameter' if
|
121
127
|
template.variables.include? 'version' and version.nil?
|
122
128
|
end
|
123
129
|
end
|
124
|
-
|
130
|
+
|
125
131
|
def validate_protocols
|
126
132
|
if protocols
|
127
133
|
validate_array :protocols, protocols, String
|
128
|
-
|
134
|
+
|
129
135
|
@protocols.map!(&:upcase)
|
130
|
-
|
131
|
-
raise InvalidProperty, 'protocols property elements must be HTTP or HTTPS' unless
|
136
|
+
|
137
|
+
raise InvalidProperty, 'protocols property elements must be HTTP or HTTPS' unless
|
132
138
|
protocols.all? { |p| [ 'HTTP', 'HTTPS'].include? p }
|
133
139
|
end
|
134
140
|
end
|
135
|
-
|
141
|
+
|
136
142
|
def validate_media_type
|
137
143
|
if media_type
|
138
144
|
validate_string :media_type, media_type
|
139
145
|
raise InvalidProperty, 'mediaType property is malformed' unless media_type =~ Body::MEDIA_TYPE_RE
|
140
146
|
end
|
141
147
|
end
|
142
|
-
|
148
|
+
|
143
149
|
def parse_schemas(schemas)
|
144
150
|
validate_array :schemas, schemas, Hash
|
145
|
-
|
146
|
-
raise InvalidProperty, 'schemas property must be an array of maps with string keys' unless
|
151
|
+
|
152
|
+
raise InvalidProperty, 'schemas property must be an array of maps with string keys' unless
|
147
153
|
schemas.all? {|s| s.keys.all? {|k| k.is_a? String }}
|
148
|
-
|
149
|
-
raise InvalidProperty, 'schemas property must be an array of maps with string values' unless
|
154
|
+
|
155
|
+
raise InvalidProperty, 'schemas property must be an array of maps with string values' unless
|
150
156
|
schemas.all? {|s| s.values.all? {|v| v.is_a? String }}
|
151
|
-
|
152
|
-
raise InvalidProperty, 'schemas property contains duplicate schema names' unless
|
157
|
+
|
158
|
+
raise InvalidProperty, 'schemas property contains duplicate schema names' unless
|
153
159
|
schemas.map(&:keys).flatten.uniq!.nil?
|
154
160
|
|
155
161
|
schemas.reduce({}) { |memo, map | memo.merge! map }.
|
156
162
|
map { |name, data| Schema.new name, data, self }
|
157
163
|
end
|
158
|
-
|
164
|
+
|
159
165
|
def parse_base_uri_parameters(base_uri_parameters)
|
160
166
|
validate_hash :base_uri_parameters, base_uri_parameters, String, Hash
|
161
|
-
|
167
|
+
|
162
168
|
raise InvalidProperty, 'baseUriParameters property can\'t contain reserved "version" parameter' if
|
163
169
|
base_uri_parameters.include? 'version'
|
164
170
|
|
165
171
|
base_uri_parameters.map { |name, data| Parameter::BaseUriParameter.new name, data, self }
|
166
172
|
end
|
167
|
-
|
173
|
+
|
168
174
|
def parse_documentation(documentation)
|
169
175
|
validate_array :documentation, documentation
|
170
|
-
|
171
|
-
raise InvalidProperty, 'documentation property must include at least one document or not be included' if
|
176
|
+
|
177
|
+
raise InvalidProperty, 'documentation property must include at least one document or not be included' if
|
172
178
|
documentation.empty?
|
173
179
|
|
174
180
|
documentation.map { |doc| doc = doc.dup; Documentation.new doc.delete("title"), doc, self }
|
175
181
|
end
|
176
|
-
|
177
|
-
def parse_secured_by(data)
|
178
|
-
# XXX ignored for now
|
179
|
-
end
|
180
182
|
|
181
183
|
def parse_security_schemes(data)
|
182
|
-
|
184
|
+
validate_array :security_schemes, data, Hash
|
185
|
+
|
186
|
+
raise InvalidProperty, 'securitySchemes property must be an array of maps with string keys' unless
|
187
|
+
data.all? {|t| t.keys.all? {|k| k.is_a? String }}
|
188
|
+
|
189
|
+
raise InvalidProperty, 'securitySchemes property must be an array of maps with map values' unless
|
190
|
+
data.all? {|t| t.values.all? {|v| v.is_a? Hash }}
|
191
|
+
|
192
|
+
raise InvalidProperty, 'securitySchemes property contains duplicate type names' unless
|
193
|
+
data.map(&:keys).flatten.uniq!.nil?
|
194
|
+
|
195
|
+
data.reduce({}) { |memo, map | memo.merge! map }.
|
196
|
+
map { |name, data| SecurityScheme.new name, data, self }
|
183
197
|
end
|
184
198
|
|
185
199
|
def parse_resource_types(types)
|
186
200
|
validate_array :resource_types, types, Hash
|
187
|
-
|
188
|
-
raise InvalidProperty, 'resourceTypes property must be an array of maps with string keys' unless
|
201
|
+
|
202
|
+
raise InvalidProperty, 'resourceTypes property must be an array of maps with string keys' unless
|
189
203
|
types.all? {|t| t.keys.all? {|k| k.is_a? String }}
|
190
|
-
|
191
|
-
raise InvalidProperty, 'resourceTypes property must be an array of maps with map values' unless
|
204
|
+
|
205
|
+
raise InvalidProperty, 'resourceTypes property must be an array of maps with map values' unless
|
192
206
|
types.all? {|t| t.values.all? {|v| v.is_a? Hash }}
|
193
|
-
|
194
|
-
raise InvalidProperty, 'resourceTypes property contains duplicate type names' unless
|
207
|
+
|
208
|
+
raise InvalidProperty, 'resourceTypes property contains duplicate type names' unless
|
195
209
|
types.map(&:keys).flatten.uniq!.nil?
|
196
210
|
|
197
211
|
types.reduce({}) { |memo, map | memo.merge! map }.
|
@@ -200,14 +214,14 @@ module Raml
|
|
200
214
|
|
201
215
|
def parse_traits(traits)
|
202
216
|
validate_array :traits, traits, Hash
|
203
|
-
|
204
|
-
raise InvalidProperty, 'traits property must be an array of maps with string keys' unless
|
217
|
+
|
218
|
+
raise InvalidProperty, 'traits property must be an array of maps with string keys' unless
|
205
219
|
traits.all? {|t| t.keys.all? {|k| k.is_a? String }}
|
206
|
-
|
207
|
-
raise InvalidProperty, 'traits property must be an array of maps with map values' unless
|
220
|
+
|
221
|
+
raise InvalidProperty, 'traits property must be an array of maps with map values' unless
|
208
222
|
traits.all? {|t| t.values.all? {|v| v.is_a? Hash }}
|
209
|
-
|
210
|
-
raise InvalidProperty, 'traits property contains duplicate trait names' unless
|
223
|
+
|
224
|
+
raise InvalidProperty, 'traits property contains duplicate trait names' unless
|
211
225
|
traits.map(&:keys).flatten.uniq!.nil?
|
212
226
|
|
213
227
|
traits.reduce({}) { |memo, map | memo.merge! map }.
|
@@ -219,7 +233,7 @@ module Raml
|
|
219
233
|
rescue URI::InvalidURIError
|
220
234
|
nil
|
221
235
|
end
|
222
|
-
|
236
|
+
|
223
237
|
def parse_template
|
224
238
|
URITemplate::RFC6570.new base_uri
|
225
239
|
rescue URITemplate::RFC6570::Invalid
|
@@ -237,10 +251,5 @@ module Raml
|
|
237
251
|
end
|
238
252
|
end
|
239
253
|
|
240
|
-
def style_sheet
|
241
|
-
File.open(self.class.relative_path('style.sass'), 'r') do |file|
|
242
|
-
Sass::Engine.new(file.read, syntax: :scss).render
|
243
|
-
end
|
244
|
-
end
|
245
254
|
end
|
246
255
|
end
|