lacerda 0.14.8 → 1.0.0.beta1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7047209f61c041df067f297d1c5f26305df88289
4
- data.tar.gz: b06b9e0b859cc608c01eb724d57a5be12b8e6a55
3
+ metadata.gz: ba190f9b01d30f9afeb11e942c37982a3dd08ab4
4
+ data.tar.gz: 58a84ea79e3ee495ca67066f7ca7ffa7a5b5f68d
5
5
  SHA512:
6
- metadata.gz: bd1cbd9fc11d8a31817a1c1ce8f97a4a039551e76fb92d70cad5470890e488c34c0c2a0244980ba54a5779365128e2f72f302ac27d7caac4bf8058dc066afcdc
7
- data.tar.gz: 9da8bba5057e0232bc93d10df02479dc993d98719c6589bea0656c49c855ff1b2d5d79adeb9799cdde25c8b5d89210a87325997d234a6a67aea331920044e238
6
+ metadata.gz: d4f7239617c9d9b789b3af53ba83d378e3bbd7de016944816f4910726f80c60e58b595a7888bd67effa8cf9f252d1d6772dc43094ef1162f7621db930812de19
7
+ data.tar.gz: 75401fc75ec919d81a8d998d7ecc876720f7d81d3ec332ad7649123b5d5f6615c97127effd9f0e3eb54ce618359cd5753ca2df922a94c765281c26ae75c85f2a
data/CHANGELOG.markdown CHANGED
@@ -1,6 +1,3 @@
1
- # 0.14.8
2
- - Update redsnow 0.4.3 -> 0.4.4
3
-
4
1
  # 0.14.6
5
2
  - relax rake dependency
6
3
  - relax tins dependency
data/lacerda.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_runtime_dependency "json-schema", ["~> 2.6.2"]
26
26
 
27
- spec.add_runtime_dependency "redsnow", ["~> 0.4.4"]
27
+ spec.add_runtime_dependency "redsnow", ["~> 0.4.3"]
28
28
  spec.add_runtime_dependency "colorize"
29
29
  spec.add_runtime_dependency "blumquist", ["~> 0.5"]
30
30
 
@@ -29,7 +29,7 @@ module Lacerda
29
29
  service_scope = File.dirname(filename).split(File::SEPARATOR).last.underscore
30
30
 
31
31
  # Parse MSON to an apiary blueprint AST
32
- # (see https://github.com/apiaryio/api-blueprint/wiki/API-Blueprint-Map)
32
+ # (see https://github.com/apiaryio/api-blueprint)
33
33
  ast_file = mson_to_ast_json(filename)
34
34
 
35
35
  # Pluck out Data structures from it
@@ -38,6 +38,7 @@ module Lacerda
38
38
  @schema['title'] = @id
39
39
  add_description_to_json_schema
40
40
  add_properties_to_json_schema
41
+ @schema['additionalProperties'] = false
41
42
  end
42
43
 
43
44
  def to_json
@@ -72,8 +73,8 @@ module Lacerda
72
73
  spec = {}
73
74
  name = Lacerda.underscore(content['name']['literal'])
74
75
 
75
- # This is either type: primimtive or $ref: reference_name
76
- spec.merge!(primitive_or_reference(type, is_required))
76
+ # This is either type: primimtive or a oneOf { $ref: reference_name }
77
+ spec.merge!(primitive_or_oneOf(type, is_required))
77
78
 
78
79
  # We might have a description
79
80
  spec['description'] = content['description']
@@ -81,8 +82,7 @@ module Lacerda
81
82
  # If it's an array, we need to pluck out the item types
82
83
  if type == 'array'
83
84
  nestedTypes = type_definition['typeSpecification']['nestedTypes']
84
- # Passing false here, because an empty array is still an array
85
- spec['items'] = nestedTypes.map{|t| primitive_or_reference(t, false) }
85
+ spec['items'] = array_items(nestedTypes)
86
86
 
87
87
  # If it's an object, we need recursion
88
88
  elsif type == 'object'
@@ -101,22 +101,62 @@ module Lacerda
101
101
  end
102
102
  end
103
103
 
104
- def primitive_or_reference(type, is_required)
104
+ # returns the type of an array, given its specified type(s). This will be
105
+ # either exactly one basic type, or a oneOf in case there are 1+ types
106
+ # or exactly 1 non-basic type.
107
+ # As there are specied types in the array, `nil` should not be a valid value
108
+ # and therefore required should be true.
109
+ def array_items(types)
110
+ if types.size == 1 && PRIMITIVES.include?(types.first)
111
+ primitive(types.first, true)
112
+ else
113
+ oneOf(types, true)
114
+ end
115
+ end
116
+
117
+ def primitive_or_oneOf(type, is_required)
105
118
  return { 'type' => 'object' } if type.blank?
119
+ if PRIMITIVES.include?(type)
120
+ primitive(type, is_required)
121
+ else
122
+ oneOf([type], is_required)
123
+ end
124
+ end
106
125
 
126
+ # A basic type is either a primitive type with exactly 1 primitive type
127
+ # {'type' => [boolean] }
128
+ # a reference
129
+ # { '$ref' => "#/definitions/name" }
130
+ # or an object if the type in not there
131
+ # { 'type' => object }
132
+ # Basic types don't care about being required or not.
133
+ def basic_type(type)
134
+ return { 'type' => 'object' } if type.blank?
107
135
  if PRIMITIVES.include?(type)
108
- types = [type]
109
- types << 'null' unless is_required
110
- { 'type' => types }
136
+ primitive(type, true)
111
137
  else
112
- types = [{'$ref' => "#/definitions/#{self.class.scope(@scope, type['literal'])}" }]
113
- types << { 'type' => 'null' } unless is_required
114
- {
115
- 'oneOf' => types
116
- }
138
+ reference(type)
117
139
  end
118
140
  end
119
141
 
142
+ def oneOf(types, is_required)
143
+ types = types.map { |type| basic_type(type) }
144
+ types << { 'type' => 'null' } unless is_required
145
+ {
146
+ 'oneOf' => types.uniq
147
+ }
148
+ end
149
+
150
+ def primitive(type, is_required)
151
+ types = [type]
152
+ types << 'null' unless is_required
153
+ { 'type' => types }
154
+ end
155
+
156
+ def reference(type)
157
+ {'$ref' => "#/definitions/#{self.class.scope(@scope, type['literal'])}" }
158
+ end
159
+
120
160
  def json_schema_blueprint
121
161
  {
122
162
  "type" => "object",
@@ -1,3 +1,3 @@
1
1
  module Lacerda
2
- VERSION = '0.14.8'
2
+ VERSION = '1.0.0.beta1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lacerda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.8
4
+ version: 1.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jannis Hermanns
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-06 00:00:00.000000000 Z
11
+ date: 2016-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.4.4
61
+ version: 0.4.3
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.4.4
68
+ version: 0.4.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: colorize
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -276,9 +276,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
276
276
  version: '0'
277
277
  required_rubygems_version: !ruby/object:Gem::Requirement
278
278
  requirements:
279
- - - ">="
279
+ - - ">"
280
280
  - !ruby/object:Gem::Version
281
- version: '0'
281
+ version: 1.3.1
282
282
  requirements: []
283
283
  rubyforge_project:
284
284
  rubygems_version: 2.5.1