objecheck 0.4.0 → 0.5.0

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: 29c7a9581a27191aa05d1df83b5743bb7ad31b82cc4bad3e14c88730e65ffcd5
4
- data.tar.gz: a58f1b7f322487a8211ab49ddb2188e5fa88729378bdcdc5740c4ab96ea12a1a
3
+ metadata.gz: 79e158220b8faff0033bfa2456ef1ac7bd10f4556261659f1217a052a2c42aef
4
+ data.tar.gz: 2c45f51bc1cbb634e8027f78ec1c42b472e99c241a80f422abdcc09c8c9eb2c2
5
5
  SHA512:
6
- metadata.gz: c6ad10d126d6b66c26c6c5c4d8e9ee8c1ff44ec93a69dbb4a0b509af64f1f5a421b85b2f8f8d7200653a95764cf905bb758ce5a7a0e7e339238d3431acd1044a
7
- data.tar.gz: 1f21d8d7f8245f9a0e4c640b91740e8adc44cc3da1bfd3750936af45b2d6c4b52278d9d3b80c16115501c4ed6086cd23ff5a7d4d6e860b83060a141097e91872
6
+ metadata.gz: 07f0b91db2957dbebdca3008c352750febb414ab96fb46dd37247a9799e43b3e3d8d9828fd063a3806372c7c29375f07bb8bad01c92d1806ace43ae1f125d3ab
7
+ data.tar.gz: 6cc64f317e3ce3feaf859282c2db9317a81388e9b69e465c0b7123105c0d0bb9f252f08fbad9153b2a97e19fa789a465d6142c9f1cafa749d4316268b9e0cb3d
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## v0.5.0
4
+
5
+ ### New features
6
+
7
+ - Add validation mechanism for parameters of rule
8
+ - Validate parameters of each builtin rule in `Validator#initialize`
9
+
10
+ ### Bug fixes
11
+
12
+ - Add `eq` to builtin rules map
13
+
3
14
  ## v0.4.0
4
15
 
5
16
  - Add `AnyRule` as `any`
@@ -30,11 +30,14 @@ class Objecheck::Validator
30
30
  each_key: EachKeyRule,
31
31
  each_value: EachValueRule,
32
32
  key_value: KeyValueRule,
33
+ eq: EqRule,
33
34
  any: AnyRule
34
35
  }.freeze
35
36
 
36
- def initialize(schema, rule_map = DEFAULT_RULES)
37
+ def initialize(schema, rule_map = DEFAULT_RULES, schema_validation = true)
37
38
  @rule_map = rule_map
39
+ @schema_validation = schema_validation
40
+ @param_validators = {} if schema_validation
38
41
  @rules = compile_schema(schema)
39
42
  end
40
43
 
@@ -48,7 +51,19 @@ class Objecheck::Validator
48
51
 
49
52
  def compile_schema(schema)
50
53
  schema.each_with_object({}) do |(rule_name, param), rules|
51
- rules[rule_name] = @rule_map[rule_name].new(self, param)
54
+ rule_class = @rule_map[rule_name]
55
+ if @schema_validation && rule_class.respond_to?(:schema)
56
+ param_validator = @param_validators[rule_name]
57
+ if !param_validator
58
+ param_schema, param_rule_map = rule_class.schema
59
+ param_validator = Objecheck::Validator.new(param_schema, param_rule_map || DEFAULT_RULES, false)
60
+ @param_validators[:rule_name] = param_validator
61
+ end
62
+ if !(errors = param_validator.validate(param)).empty?
63
+ raise Objecheck::Error, "paramters for #{rule_name} rule is invalid\n #{errors.join("\n ")}"
64
+ end
65
+ end
66
+ rules[rule_name] = rule_class.new(self, param)
52
67
  end
53
68
  end
54
69
  end
@@ -39,4 +39,8 @@ class Objecheck::Validator::AnyRule
39
39
  collector.commit(t)
40
40
  end
41
41
  end
42
+
43
+ def self.schema
44
+ [{ each: { type: Hash } }]
45
+ end
42
46
  end
@@ -33,4 +33,8 @@ class Objecheck::Validator::EachKeyRule
33
33
  end
34
34
  end
35
35
  end
36
+
37
+ def self.schema
38
+ [{ type: Hash }]
39
+ end
36
40
  end
@@ -33,4 +33,8 @@ class Objecheck::Validator::EachRule
33
33
  end
34
34
  end
35
35
  end
36
+
37
+ def self.schema
38
+ [{ type: Hash }]
39
+ end
36
40
  end
@@ -33,4 +33,8 @@ class Objecheck::Validator::EachValueRule
33
33
  end
34
34
  end
35
35
  end
36
+
37
+ def self.schema
38
+ [{ type: Hash }]
39
+ end
36
40
  end
@@ -42,4 +42,19 @@ class Objecheck::Validator::KeyValueRule
42
42
  end
43
43
  end
44
44
  end
45
+
46
+ def self.schema
47
+ [
48
+ {
49
+ type: Hash,
50
+ each_value: {
51
+ type: Hash,
52
+ key_value: {
53
+ required: { required: false, value: { type: :bool } },
54
+ value: { value: { type: Hash } }
55
+ }
56
+ }
57
+ }
58
+ ]
59
+ end
45
60
  end
@@ -28,4 +28,8 @@ class Objecheck::Validator::TypeRule
28
28
  collector.add_error("should be a #{@type} (got #{target.class})")
29
29
  end
30
30
  end
31
+
32
+ def self.schema
33
+ [{ any: [{ type: Module }, { eq: :bool }] }]
34
+ end
31
35
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'objecheck'
3
- spec.version = '0.4.0'
3
+ spec.version = '0.5.0'
4
4
  spec.authors = ['autopp']
5
5
  spec.email = ['autopp.inc@gmail.com']
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: objecheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - autopp
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-03 00:00:00.000000000 Z
11
+ date: 2018-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler