Class: DbSpiderReaderNode

Inherits:
Object
  • Object
show all
Defined in:
lib/db_facet/db_spider_reader_node.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rec, data_columns = nil) ⇒ DbSpiderReaderNode

Returns a new instance of DbSpiderReaderNode.



4
5
6
7
8
9
# File 'lib/db_facet/db_spider_reader_node.rb', line 4

def initialize rec, data_columns = nil
  @rec = rec
  @data_columns = data_columns || @rec.class.column_names
  @ref_nodes = {}
  @traversed = false
end

Instance Attribute Details

#recObject (readonly)

Returns the value of attribute rec.



2
3
4
# File 'lib/db_facet/db_spider_reader_node.rb', line 2

def rec
  @rec
end

Instance Method Details

#add_reflection_node(node, ref) ⇒ Object



49
50
51
52
# File 'lib/db_facet/db_spider_reader_node.rb', line 49

def add_reflection_node node, ref
  @ref_nodes[ref.name] ||= []
  @ref_nodes[ref.name] << node
end

#childrenObject



62
63
64
65
66
67
68
# File 'lib/db_facet/db_spider_reader_node.rb', line 62

def children
  reflections
    .map{|ref| @ref_nodes[ref.name].to_a}
    .flatten
    .compact
    .sort_by{|n| n.rec.class.name}
end

#dataObject



58
59
60
# File 'lib/db_facet/db_spider_reader_node.rb', line 58

def data
  @rec.attributes.slice *@data_columns
end

#data_treeObject



23
24
25
26
27
28
29
30
# File 'lib/db_facet/db_spider_reader_node.rb', line 23

def data_tree
  {
    data:        data,
    class_name:  @rec.class.name,
    original_id: @rec.id,
    reflections: reflections_data
  }
end

#eql?(other) ⇒ Boolean

used by Hash to compare keys

Returns:

  • (Boolean)


54
55
56
# File 'lib/db_facet/db_spider_reader_node.rb', line 54

def eql? other # used by Hash to compare keys
  @rec.eql? other
end

#excl_data_cols(excl) ⇒ Object



11
12
13
# File 'lib/db_facet/db_spider_reader_node.rb', line 11

def excl_data_cols excl
  @data_columns -= [excl]
end

#reflection_records(ref) ⇒ Object



44
45
46
47
# File 'lib/db_facet/db_spider_reader_node.rb', line 44

def reflection_records ref
  recs = @rec.send ref.name
  [recs].flatten.compact
end

#reflectionsObject



40
41
42
# File 'lib/db_facet/db_spider_reader_node.rb', line 40

def reflections
  @rec.class.reflections.values
end

#reflections_dataObject



32
33
34
35
36
37
38
# File 'lib/db_facet/db_spider_reader_node.rb', line 32

def reflections_data
  rd = {}
  @ref_nodes.each_pair do |ref_name, nodes|
    rd[ref_name] = nodes.map &:data_tree
  end
  rd
end

#traversed!Object



19
20
21
# File 'lib/db_facet/db_spider_reader_node.rb', line 19

def traversed!
  @traversed = true
end

#traversed?Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/db_facet/db_spider_reader_node.rb', line 15

def traversed?
  @traversed
end