altair 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0902fce40d561d547f971d15c31b80c550b5d5468b7e7c64626e5a5575036893'
4
- data.tar.gz: a6f21dfa539d694e8dc990d07cb5c686d4d404cdf9bbf4d5bfeebadc07b3c66b
3
+ metadata.gz: 13d64e2a23cad244436c6240bc23bdcbdd2cf8bc7103ccdb69c81dab9a2302ab
4
+ data.tar.gz: 664e4188da6eca6eb6b2c500b53fe483a23531f25ab8e05def994a108c3d5ba1
5
5
  SHA512:
6
- metadata.gz: f0456b48dd5bb4e6d8e5f0f778154249275157a483ed6397da64b16af2410017923f9d2768e2f7d13a3fd9727e5d41b6a067c594b84f03d418535efc64168454
7
- data.tar.gz: 7cc62af703ef1425ab49bde4fd903aaca715cc77826416cf633a6153488d5bad32dc01489d564f87b7a290a06cbf63db09584f6157ddd2e7a8185a52faa7dbec
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 },
@@ -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
- set(key, data[key])
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
- validate! begin
16
- Altair.converter[value.class][type].call(value)
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
@@ -1,7 +1,7 @@
1
- def resolve_proc(value)
1
+ def resolve_proc(value, *args)
2
2
  case value
3
3
  when Proc
4
- value.call
4
+ value.call(*args)
5
5
  else
6
6
  value
7
7
  end
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.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-26 00:00:00.000000000 Z
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