objecheck 0.4.0 → 0.5.0

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