jimmy 0.3 → 0.3.1
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/definitions.rb +4 -0
- data/lib/jimmy/link.rb +3 -0
- data/lib/jimmy/schema.rb +21 -7
- data/lib/jimmy/schema_creation.rb +9 -3
- data/lib/jimmy/schema_type.rb +1 -1
- data/lib/jimmy/schema_types/string.rb +10 -1
- data/lib/jimmy/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e19cc9c83e2881cb849f0e706878b4768171fcf
|
4
|
+
data.tar.gz: b0700ff1202645eb217e13ea2ae65bdccc043f89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00dd76c52214222acca04a4bfe638f4a969c00484969c269d31b436c7cb77c53a2acda9cb61eefff14391d03899f0e12581beba3c3eb60775f0331ad4b13307c
|
7
|
+
data.tar.gz: 5ddeef3280aecdfd8598d027a0d3810dbca2440dce29fc90f599a78668e9f1a5f7310708fdc84a2246a41c09b437e8b740027a094a0b6eab4ae8b474d2570e12
|
data/lib/jimmy/definitions.rb
CHANGED
data/lib/jimmy/link.rb
CHANGED
data/lib/jimmy/schema.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
module Jimmy
|
2
2
|
class Schema
|
3
|
+
JSON_SCHEMA_URI = 'http://json-schema.org/draft-04/schema#'
|
4
|
+
JSON_HYPER_SCHEMA_URI = 'http://json-schema.org/draft-04/hyper-schema#'
|
3
5
|
|
4
|
-
attr_reader :dsl, :attrs, :domain, :type
|
6
|
+
attr_reader :dsl, :attrs, :domain, :type, :parent
|
5
7
|
attr_accessor :name
|
6
8
|
|
7
9
|
@argument_handlers = Hash.new { |hash, key| hash[key] = {} }
|
@@ -46,13 +48,24 @@ module Jimmy
|
|
46
48
|
@links ||= []
|
47
49
|
end
|
48
50
|
|
49
|
-
def
|
50
|
-
@
|
51
|
+
def data
|
52
|
+
@data ||= {}
|
53
|
+
end
|
54
|
+
|
55
|
+
def hyper?
|
56
|
+
links.any?
|
57
|
+
end
|
58
|
+
|
59
|
+
def schema_uri
|
60
|
+
hyper? ? JSON_HYPER_SCHEMA_URI : JSON_SCHEMA_URI
|
51
61
|
end
|
52
62
|
|
53
63
|
def to_h
|
54
|
-
|
55
|
-
|
64
|
+
{'$schema' => schema_uri}.tap do |h|
|
65
|
+
h.merge! data
|
66
|
+
h['id'] = url if name
|
67
|
+
h.merge! compile
|
68
|
+
end
|
56
69
|
end
|
57
70
|
|
58
71
|
def validate(data)
|
@@ -60,11 +73,12 @@ module Jimmy
|
|
60
73
|
raise ValidationError.new(self, data, errors) unless errors.empty?
|
61
74
|
end
|
62
75
|
|
63
|
-
def initialize(type,
|
76
|
+
def initialize(type, parent, locals, *args, &block)
|
64
77
|
@attrs = {}
|
65
78
|
@type = type
|
66
|
-
@domain = domain
|
79
|
+
@domain = parent.domain
|
67
80
|
@dsl = SchemaTypes.dsls[type].new(self)
|
81
|
+
@parent = parent if parent.is_a? self.class
|
68
82
|
args.each do |arg|
|
69
83
|
case arg
|
70
84
|
when Symbol
|
@@ -47,9 +47,15 @@ module Jimmy
|
|
47
47
|
handler = SchemaCreation.handlers[self.class]
|
48
48
|
self.class.__send__ :define_method, method do |*inner_args, &inner_block|
|
49
49
|
handler_args = handler && inner_args.shift(handler.arity - 1)
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
child_schema = Schema.new(
|
51
|
+
method,
|
52
|
+
respond_to?(:schema) ? schema : domain,
|
53
|
+
locals,
|
54
|
+
*inner_args,
|
55
|
+
&inner_block
|
56
|
+
)
|
57
|
+
instance_exec child_schema, *handler_args, &handler if handler
|
58
|
+
child_schema.dsl
|
53
59
|
end
|
54
60
|
return __send__ method, *args, &block
|
55
61
|
end
|
data/lib/jimmy/schema_type.rb
CHANGED
@@ -5,6 +5,15 @@ module Jimmy
|
|
5
5
|
trait :min_length
|
6
6
|
trait :max_length
|
7
7
|
trait(:pattern) { |regex| attrs[:pattern] = regex.is_a?(Regexp) ? regex.inspect.gsub(%r`^/|/[a-z]*$`, '') : regex }
|
8
|
+
trait(:format) { |value| attrs[:format] = value.to_s.gsub('_', '-') }
|
9
|
+
%i[
|
10
|
+
date_time
|
11
|
+
email
|
12
|
+
hostname
|
13
|
+
ipv4
|
14
|
+
ipv6
|
15
|
+
uri
|
16
|
+
].each { |k| trait(k) { format k } }
|
8
17
|
trait(Regexp) { |regex| pattern regex }
|
9
18
|
trait Range do |value|
|
10
19
|
variation = value.exclude_end? ? 1 : 0
|
@@ -20,7 +29,7 @@ module Jimmy
|
|
20
29
|
trait(Array) { |value| attrs[:enum] = value.map(&:to_s) }
|
21
30
|
|
22
31
|
compile do |hash|
|
23
|
-
hash.merge! camelize_attrs(%i[min_length max_length pattern enum])
|
32
|
+
hash.merge! camelize_attrs(%i[min_length max_length pattern enum format])
|
24
33
|
end
|
25
34
|
|
26
35
|
end
|
data/lib/jimmy/version.rb
CHANGED