leafcutter 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/leafcutter.rb +40 -0
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7b0b9ac2d509599f7c5affae112945d15ecf5538
4
- data.tar.gz: 70bf0d4e0a086d4179c750fcbf7e9dbfed69f3c3
3
+ metadata.gz: e8a92c7d2bf14a3da4e7fb5e81b88dfdcb01af76
4
+ data.tar.gz: 06d24317660b3245f04f08672672c9cdb171c519
5
5
  SHA512:
6
- metadata.gz: 0a2d30e8c303b126b0bc838c30ae0ff64f964090d8fa8306946f0cfd79848b8994ebdef08110cd565550eb8efcedeafa1bb90070b8fe97be9563612164c5cdf8
7
- data.tar.gz: 77549009f32c5719a4222b0a4163e929ab55cec81bfdb244545f2c11dcb7930706ec5b25ae0dcc2081b443091ad0ad87647bfdca64eb5d1ccd44454f06e3119d
6
+ metadata.gz: 511a4587b8f872efe0978e37c737c8796118f727b9431de1033eef48a4a40fad343cf414fa6f9e6519f263f8cf0dfab4c22b34fdc5babbc6f124f584ee54320c
7
+ data.tar.gz: 82a093973506f9ecded46a6acd2feddd90ab9b655c1536b07a121c380d85f21203c29d5eb94c74759d9b3ba66fca540e2d60dfdafd648f9fa8e77ec26c77860f
data/lib/leafcutter.rb CHANGED
@@ -3,6 +3,15 @@ class Leafcutter
3
3
  @data = json
4
4
  end
5
5
 
6
+ def validate
7
+ status = { valid: true, errors: [] }
8
+
9
+ # This is like run except we don't know which routes we want
10
+ # Instead we want to explore all branches and report all the errors we find
11
+
12
+ return validate_branch @data, :condition, status
13
+ end
14
+
6
15
  def run(params)
7
16
  keys = @data.keys
8
17
 
@@ -16,6 +25,37 @@ class Leafcutter
16
25
 
17
26
  private
18
27
 
28
+ def validate_branch data, node_type, status
29
+ keys = data.kind_of?(Hash) ? data.keys : []
30
+
31
+ unless keys.empty?
32
+ if node_type == :condition && keys.length > 1
33
+ status[:valid] = false
34
+ status[:errors].push('multiple_conditions')
35
+ elsif node_type == :option && keys.length < 2
36
+ status[:valid] = false
37
+ status[:errors].push('single_option')
38
+ end
39
+
40
+ keys.each do |key|
41
+ next_node_type = node_type == :condition ? :option : :condition
42
+ validate_branch data[key], next_node_type, status
43
+ end
44
+ else
45
+ if data.kind_of?(Array)
46
+ if data.empty?
47
+ status[:valid] = false
48
+ status[:errors].push('empty_leaf')
49
+ end
50
+ else
51
+ status[:valid] = false
52
+ status[:errors].push('non_array_leaf')
53
+ end
54
+ end
55
+
56
+ return status
57
+ end
58
+
19
59
  def explore_branch data, key, params
20
60
  branch = params[key]
21
61
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leafcutter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Hastie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-17 00:00:00.000000000 Z
11
+ date: 2015-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json