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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77d2eb6688f2010c1c5d0457fda19e1ef4becf75
4
- data.tar.gz: 02d79ce8f98981bbac840758380bc89e8db7f3d8
3
+ metadata.gz: 0dfc5b6003bad523525eb32060da8062e13c6798
4
+ data.tar.gz: aff816e39d8d0d7cb07e2aa22cda463c7e0b9c82
5
5
  SHA512:
6
- metadata.gz: de1c6349f17be45abe08bd63c53484d5594c6a6ec226b62a1c67a4e8f199c363404dd8339dcc5ea4fc2776b30aae7e9b198765a398dd38db18a3fb725b31c77c
7
- data.tar.gz: 160e46d5561b930ce12d451a1d4789ec735c3b37c896f57be41214fde7a79bcaac3e629c24b1403b4e840efa044ad979b9be21a71c91b095e72dc99244eb4aa4
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: [{format: /\d{10}/, message: 'does not match format'}]
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
@@ -4,6 +4,7 @@ require 'rake/testtask'
4
4
  Rake::TestTask.new do |t|
5
5
  t.libs << 'test'
6
6
  t.pattern = 'test/**/test_*.rb'
7
+ t.warning = false
7
8
  end
8
9
 
9
10
  desc "Run tests"
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, val1, val2|
11
- val2 = [val2] unless val2.is_a? Array
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
- ops = get_operations val2
27
+ def self.handle_merge data_obj, operation_obj
28
+ operation_obj = [operation_obj] unless operation_obj.is_a? Array
14
29
 
15
- yield val1, ops
16
- end
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
@@ -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
- operations.reduce(value) { |val, op| op.call(val) }
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
 
@@ -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
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Rulix
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
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.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-27 00:00:00.000000000 Z
11
+ date: 2016-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler