jimmy 0.3.3 → 0.3.4
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/lib/jimmy/combination.rb +1 -0
- data/lib/jimmy/definitions.rb +1 -0
- data/lib/jimmy/domain.rb +10 -0
- data/lib/jimmy/link.rb +1 -1
- data/lib/jimmy/schema.rb +21 -12
- data/lib/jimmy/schema_creation.rb +26 -4
- data/lib/jimmy/schema_type.rb +4 -16
- data/lib/jimmy/schema_types/object.rb +2 -1
- data/lib/jimmy/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa577a95bf9548660e2354097ef6777df04ed9b0
|
4
|
+
data.tar.gz: 6f229b95ec4d14465d439a9e2fea644a0088d1a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35a2afb25ad10e4bc5bdf15b509d3a48973c948fc42faf4e20a9035f7d2fa899080edb24ae9146fe779ed6f5419314206902648aa6c2c1b2aaafbde509214840
|
7
|
+
data.tar.gz: 06cfcc5aacaf030fac97db89d5ae976bf74828b195825e35b442663659cc379de74bfadf31c64c23ca7b7c13674e4b76b8abf0dedf15443846093febe96d2e18
|
data/lib/jimmy/combination.rb
CHANGED
data/lib/jimmy/definitions.rb
CHANGED
data/lib/jimmy/domain.rb
CHANGED
@@ -16,6 +16,7 @@ module Jimmy
|
|
16
16
|
@types = {}
|
17
17
|
@partials = {}
|
18
18
|
@import_paths = []
|
19
|
+
@uri_formatter = -> _, name { @root + "#{name}.json#" }
|
19
20
|
end
|
20
21
|
|
21
22
|
def domain
|
@@ -65,6 +66,14 @@ module Jimmy
|
|
65
66
|
@types.each { |name, schema| export_schema schema, path + 'types' + "#{name.to_s}.json" }
|
66
67
|
end
|
67
68
|
|
69
|
+
def uri_for(name)
|
70
|
+
@uri_formatter.call root, name
|
71
|
+
end
|
72
|
+
|
73
|
+
def uri_format(&block)
|
74
|
+
@uri_formatter = block
|
75
|
+
end
|
76
|
+
|
68
77
|
private
|
69
78
|
|
70
79
|
def glob(base_path, only: '.', ignore: nil, &block)
|
@@ -80,6 +89,7 @@ module Jimmy
|
|
80
89
|
end
|
81
90
|
|
82
91
|
def load_schema_from_path(path, name)
|
92
|
+
@schema_name = name
|
83
93
|
instance_eval(path.read, path.to_s).schema.tap do |schema|
|
84
94
|
schema.name = name.to_s
|
85
95
|
JSON::Validator.add_schema JSON::Schema.new(schema.to_h, nil)
|
data/lib/jimmy/link.rb
CHANGED
data/lib/jimmy/schema.rb
CHANGED
@@ -4,7 +4,8 @@ module Jimmy
|
|
4
4
|
JSON_HYPER_SCHEMA_URI = 'http://json-schema.org/draft-04/hyper-schema#'
|
5
5
|
|
6
6
|
attr_reader :dsl, :attrs, :domain, :type, :parent
|
7
|
-
|
7
|
+
attr_writer :name
|
8
|
+
attr_accessor :nullable
|
8
9
|
|
9
10
|
@argument_handlers = Hash.new { |hash, key| hash[key] = {} }
|
10
11
|
|
@@ -29,16 +30,21 @@ module Jimmy
|
|
29
30
|
compiler ||= SchemaTypes.compilers[schema_class]
|
30
31
|
schema_class = schema_class.superclass
|
31
32
|
end
|
32
|
-
{
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
hash = {}
|
34
|
+
hash['type'] = nullable ? ['null', type.to_s] : type.to_s
|
35
|
+
hash['definitions'] = definitions.compile unless definitions.empty?
|
36
|
+
hash['links'] = links.map &:compile unless links.empty?
|
37
|
+
hash.merge! data
|
38
|
+
dsl.evaluate compiler, hash if compiler
|
39
|
+
hash
|
40
|
+
end
|
41
|
+
|
42
|
+
def name
|
43
|
+
@name || (parent && parent.name)
|
38
44
|
end
|
39
45
|
|
40
|
-
def
|
41
|
-
|
46
|
+
def uri
|
47
|
+
domain.uri_for name
|
42
48
|
end
|
43
49
|
|
44
50
|
def definitions
|
@@ -63,22 +69,25 @@ module Jimmy
|
|
63
69
|
|
64
70
|
def to_h
|
65
71
|
{'$schema' => schema_uri}.tap do |h|
|
66
|
-
h['id'] =
|
72
|
+
h['id'] = uri.to_s if name
|
67
73
|
h.merge! compile
|
68
74
|
end
|
69
75
|
end
|
70
76
|
|
71
77
|
def validate(data)
|
72
|
-
errors = JSON::Validator.fully_validate(JSON::Validator.schema_for_uri(
|
78
|
+
errors = JSON::Validator.fully_validate(JSON::Validator.schema_for_uri(uri).schema, data, errors_as_objects: true)
|
73
79
|
raise ValidationError.new(self, data, errors) unless errors.empty?
|
74
80
|
end
|
75
81
|
|
76
|
-
def initialize(type, parent
|
82
|
+
def initialize(type, parent)
|
77
83
|
@attrs = {}
|
78
84
|
@type = type
|
79
85
|
@domain = parent.domain
|
80
86
|
@dsl = SchemaTypes.dsls[type].new(self)
|
81
87
|
@parent = parent if parent.is_a? self.class
|
88
|
+
end
|
89
|
+
|
90
|
+
def setup(*args, **locals, &block)
|
82
91
|
args.each do |arg|
|
83
92
|
case arg
|
84
93
|
when Symbol
|
@@ -29,6 +29,29 @@ module Jimmy
|
|
29
29
|
%i[title description default].each { |k| define_method(k) { |v| set k => v } }
|
30
30
|
end
|
31
31
|
|
32
|
+
module Referencing
|
33
|
+
def method_missing(name, *args, &block)
|
34
|
+
if schema.definitions[name]
|
35
|
+
ref *args, definition(name)
|
36
|
+
else
|
37
|
+
super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def respond_to_missing?(name, *)
|
42
|
+
schema.definitions.key?(name) || super
|
43
|
+
end
|
44
|
+
|
45
|
+
def definition(id)
|
46
|
+
"/#{schema.name}#/definitions/#{id}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def ref(*args, uri)
|
50
|
+
handler = SchemaCreation.handlers[self.class]
|
51
|
+
instance_exec(Reference.new(uri), *args, &handler) if handler
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
32
55
|
module DefiningMethods
|
33
56
|
include MetadataMethods
|
34
57
|
|
@@ -58,11 +81,10 @@ module Jimmy
|
|
58
81
|
handler_args = handler && inner_args.shift(handler.arity - 1)
|
59
82
|
child_schema = Schema.new(
|
60
83
|
method,
|
61
|
-
respond_to?(:schema) ? schema : domain
|
62
|
-
locals,
|
63
|
-
*inner_args,
|
64
|
-
&inner_block
|
84
|
+
respond_to?(:schema) ? schema : domain
|
65
85
|
)
|
86
|
+
child_schema.name = @schema_name if is_a? Domain
|
87
|
+
child_schema.setup *inner_args, **locals, &inner_block
|
66
88
|
instance_exec child_schema, *handler_args, &handler if handler
|
67
89
|
child_schema.dsl
|
68
90
|
end
|
data/lib/jimmy/schema_type.rb
CHANGED
@@ -37,6 +37,7 @@ module Jimmy
|
|
37
37
|
|
38
38
|
class DSL
|
39
39
|
extend Forwardable
|
40
|
+
include SchemaCreation::Referencing
|
40
41
|
include SchemaCreation::MetadataMethods
|
41
42
|
|
42
43
|
attr_reader :schema
|
@@ -76,27 +77,14 @@ module Jimmy
|
|
76
77
|
schema.data
|
77
78
|
end
|
78
79
|
|
79
|
-
def ref(*args, uri)
|
80
|
-
handler = SchemaCreation.handlers[self.class]
|
81
|
-
instance_exec(Reference.new(uri), *args, &handler) if handler
|
82
|
-
end
|
83
|
-
|
84
80
|
def link(rel_and_href, &block)
|
85
|
-
link = Link.new(
|
81
|
+
link = Link.new(schema, *rel_and_href.first)
|
86
82
|
schema.links << link
|
87
83
|
link.dsl.evaluate &block if block
|
88
84
|
end
|
89
85
|
|
90
|
-
def
|
91
|
-
|
92
|
-
ref *args, "#/definitions/#{name}"
|
93
|
-
else
|
94
|
-
super
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def respond_to_missing?(name, *)
|
99
|
-
schema.definitions.key?(name) || super
|
86
|
+
def nullable
|
87
|
+
schema.nullable = true
|
100
88
|
end
|
101
89
|
|
102
90
|
private
|
@@ -34,7 +34,8 @@ module Jimmy
|
|
34
34
|
hash[collection] ||= {}
|
35
35
|
hash[collection][key] = value.compile
|
36
36
|
end
|
37
|
-
|
37
|
+
required = attrs[:required]
|
38
|
+
hash['required'] = required.to_a if required && !required.empty?
|
38
39
|
hash['additionalProperties'] = !!attrs[:additional_properties]
|
39
40
|
end
|
40
41
|
|
data/lib/jimmy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jimmy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neil E. Pearson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|