rulix 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 +4 -4
- data/README.md +2 -2
- data/Rakefile +1 -0
- data/lib/rulix/base.rb +27 -5
- data/lib/rulix/core_ext/hash.rb +7 -1
- data/lib/rulix/mutator.rb +5 -1
- data/lib/rulix/registry.rb +6 -4
- data/lib/rulix/validator.rb +3 -1
- data/lib/rulix/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0dfc5b6003bad523525eb32060da8062e13c6798
|
|
4
|
+
data.tar.gz: aff816e39d8d0d7cb07e2aa22cda463c7e0b9c82
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 91855fe7857dcb58a96f7f6320e9af6656c48c6622336ff7d88c4a44b04988b14329b3a9ba4420e890b8d1ebd1d73cbb90e04f4e879608927708794998185974
|
|
7
|
+
data.tar.gz: dff4e0508e5bc9b2fb643571b6e92d4c205b7c627fe4a67779791f0a43a5710af70e9734ed77fbae6124243fa39ab137189482c4addcc7c9c11084a22e35f978
|
data/README.md
CHANGED
|
@@ -195,7 +195,7 @@ dataset = {
|
|
|
195
195
|
|
|
196
196
|
ruleset = {
|
|
197
197
|
phone: {
|
|
198
|
-
number: [
|
|
198
|
+
number: [format: /\d{10}/]
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
|
|
@@ -216,7 +216,7 @@ class User < ActiveRecord::Base
|
|
|
216
216
|
validates :email, uniqueness: true
|
|
217
217
|
|
|
218
218
|
validates_with Rulix::ActiveRecordValidator, ruleset: {
|
|
219
|
-
email: { format: /.*@.*/, message: 'is not an email address' }
|
|
219
|
+
email: { format: { pattern: /.*@.*/, message: 'is not an email address' } }
|
|
220
220
|
}
|
|
221
221
|
end
|
|
222
222
|
|
data/Rakefile
CHANGED
data/lib/rulix/base.rb
CHANGED
|
@@ -7,13 +7,29 @@ module Rulix
|
|
|
7
7
|
|
|
8
8
|
dataset = data_for_ruleset dataset, ruleset
|
|
9
9
|
|
|
10
|
-
dataset.deep_merge ruleset do |key,
|
|
11
|
-
|
|
10
|
+
dataset.deep_merge ruleset do |key, data_obj, operation_obj|
|
|
11
|
+
if (data_obj.is_a?(Array) && data_obj.all? { |o| o.respond_to?(:deep_merge) })
|
|
12
|
+
data_obj.map do |data|
|
|
13
|
+
data.deep_merge operation_obj.first do |k, d, o|
|
|
14
|
+
yield *handle_merge(d, o)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
elsif data_obj.is_a?(Array)
|
|
18
|
+
data_obj.map do |obj|
|
|
19
|
+
yield *handle_merge(obj, operation_obj)
|
|
20
|
+
end.flatten
|
|
21
|
+
else
|
|
22
|
+
yield *handle_merge(data_obj, operation_obj)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
12
26
|
|
|
13
|
-
|
|
27
|
+
def self.handle_merge data_obj, operation_obj
|
|
28
|
+
operation_obj = [operation_obj] unless operation_obj.is_a? Array
|
|
14
29
|
|
|
15
|
-
|
|
16
|
-
|
|
30
|
+
ops = get_operations operation_obj
|
|
31
|
+
|
|
32
|
+
[data_obj, ops]
|
|
17
33
|
end
|
|
18
34
|
|
|
19
35
|
def self.data_for_ruleset dataset, ruleset
|
|
@@ -32,6 +48,12 @@ module Rulix
|
|
|
32
48
|
seed = {}
|
|
33
49
|
|
|
34
50
|
data_hash[key] = reduce_into_hash seed, nested_value, rule_val
|
|
51
|
+
elsif nested_value.is_a?(Array) && nested_value.all? { |val| val.is_a?(Hash) }
|
|
52
|
+
seed = {}
|
|
53
|
+
|
|
54
|
+
data_hash[key] = nested_value.map do |nested_val|
|
|
55
|
+
reduce_into_hash seed, nested_val, rule_val.first
|
|
56
|
+
end
|
|
35
57
|
else
|
|
36
58
|
data_hash[key] = nested_value
|
|
37
59
|
end
|
data/lib/rulix/core_ext/hash.rb
CHANGED
|
@@ -85,8 +85,14 @@ class Hash
|
|
|
85
85
|
if this_value.respond_to?(:empty?)
|
|
86
86
|
if this_value.empty?
|
|
87
87
|
self.delete current_key
|
|
88
|
-
elsif this_value.is_a?(Hash)
|
|
88
|
+
elsif this_value.is_a?(Hash)
|
|
89
89
|
self[current_key] = this_value.deep_compact
|
|
90
|
+
elsif this_value.is_a?(Array)
|
|
91
|
+
if this_value.all? { |v| v.respond_to?(:empty?) && v.empty? }
|
|
92
|
+
self.delete current_key
|
|
93
|
+
elsif this_value.all? { |v| v.respond_to?(:deep_compact) }
|
|
94
|
+
self[current_key] = this_value.map(&:deep_compact)
|
|
95
|
+
end
|
|
90
96
|
end
|
|
91
97
|
else
|
|
92
98
|
self.delete current_key if this_value.nil?
|
data/lib/rulix/mutator.rb
CHANGED
|
@@ -4,7 +4,11 @@ module Rulix
|
|
|
4
4
|
|
|
5
5
|
def self.run dataset, ruleset
|
|
6
6
|
super dataset, ruleset do |value, operations|
|
|
7
|
-
|
|
7
|
+
if value.is_a? Array
|
|
8
|
+
value.map { |val| operations.reduce(val) { |v, op| op.call(v) } }
|
|
9
|
+
else
|
|
10
|
+
operations.reduce(value) { |val, op| op.call(val) }
|
|
11
|
+
end
|
|
8
12
|
end
|
|
9
13
|
end
|
|
10
14
|
|
data/lib/rulix/registry.rb
CHANGED
|
@@ -5,6 +5,8 @@ module Rulix
|
|
|
5
5
|
@registry ||= {}
|
|
6
6
|
|
|
7
7
|
def self.register symbol, procable = nil, &block
|
|
8
|
+
symbol = symbol.to_sym unless symbol.is_a? Symbol
|
|
9
|
+
|
|
8
10
|
return register_block symbol, &block if block_given?
|
|
9
11
|
|
|
10
12
|
if !procable.respond_to?(:to_proc)
|
|
@@ -30,8 +32,8 @@ module Rulix
|
|
|
30
32
|
|
|
31
33
|
def self.get_operation operation
|
|
32
34
|
case operation
|
|
33
|
-
when Symbol
|
|
34
|
-
registered_op = @registry[operation]
|
|
35
|
+
when Symbol, String
|
|
36
|
+
registered_op = @registry[operation.to_sym]
|
|
35
37
|
|
|
36
38
|
if registered_op
|
|
37
39
|
return registered_op.to_proc if registered_op.respond_to?(:to_proc)
|
|
@@ -42,12 +44,12 @@ module Rulix
|
|
|
42
44
|
end
|
|
43
45
|
when Hash
|
|
44
46
|
# If you're passing a hash as a rule argument, we assume that it's been registered
|
|
45
|
-
# The registered rule must be instantiatable, and we assume the args passed
|
|
47
|
+
# The registered rule must be instantiatable or a proc, and we assume the args passed
|
|
46
48
|
# should be passed to the object as config options
|
|
47
49
|
key = operation.keys.first
|
|
48
50
|
arguments = operation[key]
|
|
49
51
|
|
|
50
|
-
registered_procable = @registry[key]
|
|
52
|
+
registered_procable = @registry[key.to_sym]
|
|
51
53
|
|
|
52
54
|
raise ArgumentError, "You've supplied a hash argument for a rule, but there's no rule registered for #{key}!" unless registered_procable
|
|
53
55
|
|
data/lib/rulix/validator.rb
CHANGED
|
@@ -3,7 +3,7 @@ module Rulix
|
|
|
3
3
|
include Rulix::Registry
|
|
4
4
|
|
|
5
5
|
def self.run dataset, ruleset
|
|
6
|
-
super dataset, ruleset do |value, operations|
|
|
6
|
+
result = super dataset, ruleset do |value, operations|
|
|
7
7
|
success, errors = operations.reduce([true, []]) do |result, op|
|
|
8
8
|
success, errors = result
|
|
9
9
|
|
|
@@ -14,6 +14,8 @@ module Rulix
|
|
|
14
14
|
|
|
15
15
|
errors
|
|
16
16
|
end
|
|
17
|
+
|
|
18
|
+
result
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
def self.valid? dataset, ruleset
|
data/lib/rulix/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rulix
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mitch Monsen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-06-
|
|
11
|
+
date: 2016-06-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|