leafcutter 0.0.1

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 +7 -0
  2. data/lib/leafcutter.rb +37 -0
  3. metadata +72 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 794f1e07e1daa7525c59ec30fad409cb7cc9a059
4
+ data.tar.gz: 35dd022827c758fa86e95c0008eeb3883cac77bb
5
+ SHA512:
6
+ metadata.gz: e093e8489624f9ae8d30b809ae9365d6e5dc26c12975bc790e04f90776da5047be7f6a0f2d27cf7d5068cedb70821d5f3982dfcbb0b5bcca64151e4e9052a261
7
+ data.tar.gz: a85edcc83ddaeb5a54959e6391fc578a9e061254ea2ae5747cc2394faece2ec6398b014d03831f32fe659740a789623458df993da70feb1f2a25fbc487c12149
data/lib/leafcutter.rb ADDED
@@ -0,0 +1,37 @@
1
+ class Leafcutter
2
+ def initialize(json)
3
+ @data = json
4
+ end
5
+
6
+ def run(params)
7
+ keys = @data.keys
8
+
9
+ raise 'There should only be one top level key' if keys.length > 1
10
+ raise 'Could not find top level key' if keys.length < 1
11
+
12
+ key = keys[0]
13
+
14
+ explore_branch @data, key, params
15
+ end
16
+
17
+ private
18
+
19
+ def explore_branch data, key, params
20
+ branch = params[key]
21
+
22
+ value = data[key][branch]
23
+ if value == nil
24
+ raise "Error on #{key}. Expecting to explore #{data.keys} on branch '#{branch}'"
25
+ end
26
+
27
+ # If value is an array, return - we've found a leaf
28
+ return value if value.kind_of?(Array)
29
+
30
+ # Otherwise, recursively call using the value as the data for the next one
31
+ keys = value.keys
32
+ raise "Multiple keys at #{key}:#{branch.inspect}" if keys.length > 1
33
+ raise "Could not find keys at #{key}:#{branch.inspect}" if keys.length < 1
34
+
35
+ explore_branch value, keys[0], params
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leafcutter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Peter Hastie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.2'
41
+ description:
42
+ email: pete@sillypog.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/leafcutter.rb
48
+ homepage: http://rubygems.org/gems/leafcutter
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.2.2
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Find leaves in tree-like json structures
72
+ test_files: []