Module: LightModels::QuerySerialized
- Defined in:
- lib/lightmodels/jsonser_nav.rb,
lib/lightmodels/query_serialized.rb
Class Method Summary collapse
- .attrs(root) ⇒ Object
-
.collect_values(el) ⇒ Object
the set of values appearing in the object and its children.
-
.collect_values_with_count(el) ⇒ Object
a counting map values appearing in the object and its children.
- .print_tree(root, depth = 0) ⇒ Object
- .rel_conts(root) ⇒ Object
- .rel_non_conts(root) ⇒ Object
- .traverse(root, depth = 0, &op) ⇒ Object
- .values(root, feat) ⇒ Object
Class Method Details
.attrs(root) ⇒ Object
16 17 18 |
# File 'lib/lightmodels/jsonser_nav.rb', line 16 def self.attrs(root) root.keys.select {|k| k.start_with? 'attr_'} end |
.collect_values(el) ⇒ Object
the set of values appearing in the object and its children
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/lightmodels/query_serialized.rb', line 54 def self.collect_values(el) values = Set.new rel_conts(el).each do |r| values(el,r).each {|c| values.merge(collect_values(c))} end attrs(el).each do |a| values(el,a).each {|v| values.add(v)} end values end |
.collect_values_with_count(el) ⇒ Object
a counting map values appearing in the object and its children
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/lightmodels/query_serialized.rb', line 66 def self.collect_values_with_count(el) values = Hash.new {|h,k| h[k]=0} rel_conts(el).each do |r| values(el,r).each do |ch| collect_values_with_count(ch).each {|v,count| values[v]+=count} end end attrs(el).each do |a| values(el,a).each {|v| values[v]+=1 } end values end |
.print_tree(root, depth = 0) ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/lightmodels/jsonser_nav.rb', line 20 def self.print_tree(root,depth=0) traverse(root) do |n,d| s = "" d.times { s = s + " " } s = s + n['type'] if n s = s + '<NIL>' unless n puts s end end |
.rel_conts(root) ⇒ Object
8 9 10 |
# File 'lib/lightmodels/jsonser_nav.rb', line 8 def self.rel_conts(root) root.keys.select {|k| k.start_with? 'relcont_'} end |
.rel_non_conts(root) ⇒ Object
12 13 14 |
# File 'lib/lightmodels/jsonser_nav.rb', line 12 def self.rel_non_conts(root) root.keys.select {|k| k.start_with? 'relnoncont_'} end |
.traverse(root, depth = 0, &op) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/lightmodels/jsonser_nav.rb', line 37 def self.traverse(root,depth=0,&op) return traverse(root['root'],depth,&op) if root and (root.key? 'root') op.call(root,depth) return unless root rel_conts(root).each do |r| if root[r].is_a? Array root[r].each do |c| raise "expected an object but it is a #{c.class} (relation: #{r})" unless c.is_a? Hash traverse(c,depth+1,&op) end else traverse(root[r],depth+1,&op) end end end |
.values(root, feat) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/lightmodels/jsonser_nav.rb', line 30 def self.values(root,feat) raw = root[feat] return [] if raw==nil return raw if raw.is_a? Array return [raw] end |