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 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