altair 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/lib/altair.rb +2 -0
- data/lib/altair/document.rb +26 -4
- data/lib/altair/field.rb +4 -4
- data/lib/altair/schema.rb +27 -0
- data/lib/utils.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13d64e2a23cad244436c6240bc23bdcbdd2cf8bc7103ccdb69c81dab9a2302ab
|
4
|
+
data.tar.gz: 664e4188da6eca6eb6b2c500b53fe483a23531f25ab8e05def994a108c3d5ba1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4b6766b3c0153246fb9c4dd0796d0bf8835953da282c7c764b43fd22fb0e490ef0aa7c6a68cada8d594f231d53fc7ae7a10f2b96207a1a710cdaf022f36028a
|
7
|
+
data.tar.gz: dbb23aecc815dde06aeb09b7f63727c1efef2f9f5deed0f101658a46076a166ec2071841864d3aad7265b0cad51447fe8190fcbacfbea672eb2ca53c2646c8d4
|
data/lib/altair.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'boolean'
|
2
2
|
require 'altair/field'
|
3
3
|
require 'altair/document'
|
4
|
+
require 'altair/schema'
|
4
5
|
require 'altair/validation_error'
|
5
6
|
require 'altair/conversion_error'
|
6
7
|
|
@@ -18,6 +19,7 @@ module Altair
|
|
18
19
|
|
19
20
|
def default_validators
|
20
21
|
{
|
22
|
+
required: Proc.new { |flag, value| flag == !value.nil? },
|
21
23
|
min: Proc.new { |bound, value| bound <= value },
|
22
24
|
max: Proc.new { |bound, value| value <= bound },
|
23
25
|
more_than: Proc.new { |bound, value| bound < value },
|
data/lib/altair/document.rb
CHANGED
@@ -4,19 +4,30 @@ module Altair
|
|
4
4
|
class Document < IndifferentHash
|
5
5
|
attr_accessor :fields
|
6
6
|
|
7
|
-
def initialize(fields, data =
|
7
|
+
def initialize(fields, data = IndifferentHash.new)
|
8
8
|
@fields = fields
|
9
9
|
|
10
10
|
fields.each do |key, field|
|
11
11
|
case field
|
12
12
|
when Hash
|
13
13
|
define_singleton_method(:"#{key}") { get(key) }
|
14
|
-
self[key] = Document.new(field, data[key] ||
|
14
|
+
self[key] = Document.new(field, data[key] || IndifferentHash.new)
|
15
15
|
when Field
|
16
16
|
define_singleton_method(:"#{key}") { get(key) }
|
17
17
|
define_singleton_method(:"#{key}=") { |value| set(key, value) }
|
18
|
-
|
19
|
-
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
apply(data)
|
22
|
+
end
|
23
|
+
|
24
|
+
def apply(data)
|
25
|
+
data.each do |key, value|
|
26
|
+
case fields[key]
|
27
|
+
when Hash
|
28
|
+
self[key].apply data[key]
|
29
|
+
when Field
|
30
|
+
set(key, value)
|
20
31
|
end
|
21
32
|
end
|
22
33
|
end
|
@@ -28,5 +39,16 @@ module Altair
|
|
28
39
|
def set(key, value)
|
29
40
|
self[key] = fields[key].parse! value
|
30
41
|
end
|
42
|
+
|
43
|
+
def validate! (options = {})
|
44
|
+
fields.each do |key, field|
|
45
|
+
case field
|
46
|
+
when Hash
|
47
|
+
self[key].validate! options
|
48
|
+
when Field
|
49
|
+
field.validate! self[key], options
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
31
53
|
end
|
32
54
|
end
|
data/lib/altair/field.rb
CHANGED
@@ -11,15 +11,15 @@ module Altair
|
|
11
11
|
@options = options
|
12
12
|
end
|
13
13
|
|
14
|
-
def parse!(value)
|
15
|
-
|
16
|
-
Altair.converter[value.class][type]
|
14
|
+
def parse!(value, args = {})
|
15
|
+
begin
|
16
|
+
resolve_proc(Altair.converter[value.class][type], value)
|
17
17
|
rescue
|
18
18
|
raise ConversionError.new(type, value)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def validate!(value)
|
22
|
+
def validate!(value, args = {})
|
23
23
|
Altair.validators.each do |name, validator|
|
24
24
|
if options.has_key? name
|
25
25
|
raise ValidationError.new(name, value) unless validator.call(resolve_proc(options[name]), value)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'altair'
|
2
|
+
require 'indifferent-hash'
|
3
|
+
|
4
|
+
module Altair
|
5
|
+
class Schema < IndifferentHash
|
6
|
+
def initialize(fields)
|
7
|
+
Schema.parse fields, self
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.parse(fields, result = IndifferentHash.new)
|
11
|
+
fields.each do |key, field|
|
12
|
+
result[key] = case field
|
13
|
+
when Hash
|
14
|
+
if field.has_key? :type
|
15
|
+
Altair::Field.new(field)
|
16
|
+
else
|
17
|
+
parse field
|
18
|
+
end
|
19
|
+
else
|
20
|
+
Altair::Field.new(type: field)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/utils.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: altair
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felipe Cabrera
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: indifferent-hash
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- lib/altair/conversion_error.rb
|
35
35
|
- lib/altair/document.rb
|
36
36
|
- lib/altair/field.rb
|
37
|
+
- lib/altair/schema.rb
|
37
38
|
- lib/altair/validation_error.rb
|
38
39
|
- lib/boolean.rb
|
39
40
|
- lib/utils.rb
|