brujula 0.1.0 → 0.2.0
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/SPEC_SUPPORT.md +30 -0
- data/lib/brujula.rb +1 -0
- data/lib/brujula/data_transformers/property_declaration.rb +3 -1
- data/lib/brujula/map_object.rb +2 -0
- data/lib/brujula/object_parser.rb +12 -7
- data/lib/brujula/raml/exceptions.rb +1 -0
- data/lib/brujula/raml/v1_0/property.rb +6 -6
- data/lib/brujula/raml/v1_0/raml_type.rb +7 -7
- data/lib/brujula/scheme.rb +2 -5
- data/lib/brujula/type_extender/raml_type.rb +60 -0
- data/lib/brujula/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4432f8e3a02056bf3d4699197c82e6036168af26
|
4
|
+
data.tar.gz: 973ed2b40689295a17239237cdfc37b099919688
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d08750f73c2ac6f611b001be7b38a34b5da31ddd18d95f47bcecf05147863ca01315329929da65465fc02c4422f7f29183710a72115446999218b3b9fe843547
|
7
|
+
data.tar.gz: 04c58c3ef43821a9050139c0652d642e9cb11efd854a6a27248fd400931658021cceb6868428f3c2586dc036d3f88f95197a71bc41a6ca651acabc970fe43432
|
data/SPEC_SUPPORT.md
CHANGED
@@ -31,6 +31,36 @@ securedBy? | :warning: | Definition and merging support. Not fully tested though
|
|
31
31
|
|
32
32
|
* [Raml Data Types](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md/#raml-data-types)
|
33
33
|
|
34
|
+
Property | Status | Comments
|
35
|
+
---|---|---
|
36
|
+
schema? | :white_check_mark: :warning: | Show deprecation notice when using RAML 1.0
|
37
|
+
type? | :white_check_mark: :warning: | Some inheritance and merging strategies might not work
|
38
|
+
example? | :white_check_mark: :warning: | Should complain if both example and examples are present
|
39
|
+
examples? | :white_check_mark: :warning: | Should complain if both example and examples are present
|
40
|
+
displayName? | :white_check_mark: |
|
41
|
+
description? | :white_check_mark: |
|
42
|
+
(<annotationName>)? | :x: |
|
43
|
+
|
44
|
+
* [Object Data Types](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md/#object-types)
|
45
|
+
|
46
|
+
|
47
|
+
Property | Status | Comments
|
48
|
+
---|---|---
|
49
|
+
properties? | :white_check_mark: :warning: | Some property limitations. See properties
|
50
|
+
minProperties? | :warning: | Not fully tested. Need examples
|
51
|
+
maxProperties? | :warning: | Not fully tested. Need examples
|
52
|
+
additionalProperties? | :warning: | Declaration works. Not fully tested
|
53
|
+
patternProperties? | :warning: | Declaration works. Not fully tested
|
54
|
+
discriminator? | :x: |
|
55
|
+
|
56
|
+
Extra Feature | Status
|
57
|
+
---|--
|
58
|
+
[Alternative Syntax](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md/#alternative-syntax) | :white_check_mark:
|
59
|
+
[Inheritance](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md/#inheritance) | :warning: See inheritance
|
60
|
+
[Map types](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md/#map-types) | :x:
|
61
|
+
|
62
|
+
* [Array Types](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md/#array-types)
|
63
|
+
|
34
64
|
_TBC_
|
35
65
|
|
36
66
|
* [Base URI and Base URI Parameters](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md#base-uri-and-base-uri-parameters)
|
data/lib/brujula.rb
CHANGED
@@ -34,6 +34,7 @@ require_relative 'brujula/mergers/map_object_merger'
|
|
34
34
|
require_relative 'brujula/type_extender/resource'
|
35
35
|
require_relative 'brujula/type_extender/resource_type'
|
36
36
|
require_relative 'brujula/type_extender/method'
|
37
|
+
require_relative 'brujula/type_extender/raml_type'
|
37
38
|
|
38
39
|
# Definitions
|
39
40
|
require_relative 'brujula/raml/definition'
|
@@ -17,7 +17,9 @@ module Brujula
|
|
17
17
|
def call
|
18
18
|
data.each_with_object({}) do |(key, property), object|
|
19
19
|
if property.is_a?(String) # data as type
|
20
|
-
object.merge!(key
|
20
|
+
object.merge!(key.gsub(/\?$/, "") => {
|
21
|
+
"type" => property, "required" => !key.to_s.end_with?("?")
|
22
|
+
})
|
21
23
|
else
|
22
24
|
object.merge!(key => property)
|
23
25
|
end
|
data/lib/brujula/map_object.rb
CHANGED
@@ -70,6 +70,8 @@ module Brujula
|
|
70
70
|
Brujula::TypeExtender::Method.new(definition: child).call
|
71
71
|
when Brujula::Raml::V1_0::ResourceType
|
72
72
|
Brujula::TypeExtender::ResourceType.new(definition: child).call
|
73
|
+
when Brujula::Raml::V1_0::RamlType
|
74
|
+
Brujula::TypeExtender::RamlType.new(definition: child).call
|
73
75
|
else
|
74
76
|
child
|
75
77
|
end
|
@@ -33,12 +33,22 @@ module Brujula
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def normalized_data
|
36
|
+
@normalized_data ||= apply_default_type(node_data)
|
37
|
+
end
|
38
|
+
|
39
|
+
def node_data
|
36
40
|
return data unless external_data?
|
37
41
|
|
38
|
-
# TODO
|
39
42
|
data.load_external_data(definition.root.base_dir)
|
40
43
|
end
|
41
44
|
|
45
|
+
def apply_default_type(data)
|
46
|
+
return data unless scheme.typed?
|
47
|
+
return data if data.key?("type")
|
48
|
+
|
49
|
+
data.merge("type" => scheme.default_type.to_s)
|
50
|
+
end
|
51
|
+
|
42
52
|
def external_data?
|
43
53
|
data.is_a?(Brujula::YamlInclude)
|
44
54
|
end
|
@@ -47,15 +57,10 @@ module Brujula
|
|
47
57
|
@scheme ||= definition.class.scheme
|
48
58
|
end
|
49
59
|
|
50
|
-
# Typed schemas must provide a type
|
51
|
-
def data_type
|
52
|
-
normalized_data.fetch('type', scheme.default_type)
|
53
|
-
end
|
54
|
-
|
55
60
|
def scheme_keys
|
56
61
|
return scheme.key_collection unless scheme.typed?
|
57
62
|
|
58
|
-
scheme.typed_keys(
|
63
|
+
scheme.typed_keys(normalized_data.fetch('type'))
|
59
64
|
end
|
60
65
|
|
61
66
|
def object_builder(key)
|
@@ -17,15 +17,15 @@ module Brujula
|
|
17
17
|
key :enum, as: :array, unless_type_is: %w( file )
|
18
18
|
|
19
19
|
# When Property is integer
|
20
|
-
key :minimum, as: :number, for_types: %( number integer )
|
21
|
-
key :maximum, as: :number, for_types: %( number integer )
|
20
|
+
key :minimum, as: :number, for_types: %w( number integer )
|
21
|
+
key :maximum, as: :number, for_types: %w( number integer )
|
22
22
|
key :format, as: :string,
|
23
|
-
in: %( int32 int64 int long float double int16 int8 )
|
23
|
+
in: %w( int32 int64 int long float double int16 int8 )
|
24
24
|
|
25
25
|
# When Property is string
|
26
|
-
key :pattern, as: :regexp, for_types: %( string )
|
27
|
-
key :min_length, as: :number, for_types: %( string )
|
28
|
-
key :max_length, as: :number, for_types: %( string )
|
26
|
+
key :pattern, as: :regexp, for_types: %w( string )
|
27
|
+
key :min_length, as: :number, for_types: %w( string )
|
28
|
+
key :max_length, as: :number, for_types: %w( string )
|
29
29
|
|
30
30
|
end
|
31
31
|
end
|
@@ -3,7 +3,7 @@ module Brujula
|
|
3
3
|
module V1_0
|
4
4
|
class RamlType < Brujula::Object
|
5
5
|
scheme typed: true, default_type: :object do
|
6
|
-
key :type, as: :
|
6
|
+
key :type, as: :any
|
7
7
|
key :schema, as: :string, deprecated: true
|
8
8
|
|
9
9
|
key :properties, as: :map_object, children: :property,
|
@@ -17,15 +17,15 @@ module Brujula
|
|
17
17
|
key :examples, as: :any
|
18
18
|
|
19
19
|
# When Property is integer
|
20
|
-
key :minimum, as: :number, for_types: %( number integer )
|
21
|
-
key :maximum, as: :number, for_types: %( number integer )
|
20
|
+
key :minimum, as: :number, for_types: %w( number integer )
|
21
|
+
key :maximum, as: :number, for_types: %w( number integer )
|
22
22
|
key :format, as: :string,
|
23
|
-
in: %( int32 int64 int long float double int16 int8 )
|
23
|
+
in: %w( int32 int64 int long float double int16 int8 )
|
24
24
|
|
25
25
|
# When Property is string
|
26
|
-
key :pattern, as: :regexp, for_types: %( string )
|
27
|
-
key :min_length, as: :number, for_types: %( string )
|
28
|
-
key :max_length, as: :number, for_types: %( string )
|
26
|
+
key :pattern, as: :regexp, for_types: %w( string )
|
27
|
+
key :min_length, as: :number, for_types: %w( string )
|
28
|
+
key :max_length, as: :number, for_types: %w( string )
|
29
29
|
|
30
30
|
|
31
31
|
# include_type_keys
|
data/lib/brujula/scheme.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
module Brujula
|
2
2
|
class Scheme
|
3
|
-
attr_reader :keys, :typed, :default_type, :reference,
|
4
|
-
:store_for_reference, :allow_any
|
3
|
+
attr_reader :keys, :typed, :default_type, :reference, :allow_any
|
5
4
|
|
6
5
|
alias :typed? :typed
|
7
|
-
alias :store_object_for_reference? :store_for_reference
|
8
6
|
alias :allow_any? :allow_any
|
9
7
|
|
10
8
|
def initialize(klass, options = {}, block = nil)
|
@@ -13,7 +11,6 @@ module Brujula
|
|
13
11
|
@keys = {}
|
14
12
|
@typed = !!options[:typed]
|
15
13
|
@default_type = options[:default_type] || :string
|
16
|
-
@store_for_reference = !!options[:store_for_reference]
|
17
14
|
@allow_any = !!options[:allow_any]
|
18
15
|
|
19
16
|
if options[:as]
|
@@ -33,7 +30,7 @@ module Brujula
|
|
33
30
|
valid_keys?(data) || raise(Brujula::Raml::RequiredProperty) # && enough_data?(data))
|
34
31
|
end
|
35
32
|
|
36
|
-
def typed_keys(type)
|
33
|
+
def typed_keys(type) # TODO
|
37
34
|
keys.values.select do |brujula_key|
|
38
35
|
brujula_key.valid_for_type?(type)
|
39
36
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Brujula
|
2
|
+
module TypeExtender
|
3
|
+
class RamlType
|
4
|
+
|
5
|
+
RAML_TYPES = %w( object number string integer boolean date file array )
|
6
|
+
|
7
|
+
attr_reader :definition
|
8
|
+
|
9
|
+
def initialize(definition:)
|
10
|
+
@definition = definition
|
11
|
+
end
|
12
|
+
|
13
|
+
def call
|
14
|
+
return definition unless custom_type?
|
15
|
+
|
16
|
+
expand_object
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def expand_object
|
22
|
+
superinstances.inject(definition) do |instance, superinstance|
|
23
|
+
Brujula::Mergers::ObjectMerger.new(
|
24
|
+
superinstance: superinstance, instance: instance
|
25
|
+
).call
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def superinstances
|
30
|
+
case definition.type
|
31
|
+
when Array
|
32
|
+
definition.type.map { |type| get_reference(type) }
|
33
|
+
when String
|
34
|
+
[ get_reference(definition.type) ]
|
35
|
+
else
|
36
|
+
raise_invalid_reference(definition.type)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def raise_invalid_reference(reference)
|
41
|
+
raise Brujula::Raml::InvalidTypeReference,
|
42
|
+
"The referenced type #{ reference } cannot be processed"
|
43
|
+
end
|
44
|
+
|
45
|
+
def custom_type?
|
46
|
+
! RAML_TYPES.include?(definition.type)
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_reference(reference)
|
50
|
+
if definition.parent.name == "types" # root types, not preloaded
|
51
|
+
definition.parent.fetch(reference)
|
52
|
+
else
|
53
|
+
definition.root.types.fetch(reference)
|
54
|
+
end
|
55
|
+
rescue KeyError
|
56
|
+
raise_invalid_reference(reference)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/brujula/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brujula
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Tapiador
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inflecto
|
@@ -197,6 +197,7 @@ files:
|
|
197
197
|
- lib/brujula/scheme.rb
|
198
198
|
- lib/brujula/transformer_functions.rb
|
199
199
|
- lib/brujula/type_extender/method.rb
|
200
|
+
- lib/brujula/type_extender/raml_type.rb
|
200
201
|
- lib/brujula/type_extender/resource.rb
|
201
202
|
- lib/brujula/type_extender/resource_type.rb
|
202
203
|
- lib/brujula/version.rb
|