class Utracker::MongoDB::Drawer
Constants
- EDGE_MAP_FN
- EDGE_REDUCE_FN
Attributes
database[R]
Public Class Methods
new(database_name: "utracker", collection_name: "entries")
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 6 def initialize(database_name: "utracker", collection_name: "entries") @client = Mongo::MongoClient.new @database = @client[database_name] @collection_name = collection_name end
Protected Instance Methods
build_graph()
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 14 def build_graph nodes.values.each do |node| node.edges = edges_for(node) end end
Private Instance Methods
collection()
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 56 def collection @collection ||= database[@collection_name] end
edge_collection()
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 48 def edge_collection @edge_collection ||= collection.map_reduce( EDGE_MAP_FN, EDGE_REDUCE_FN, out: { replace: "#{@collection_name}_drawer" } ) end
edges()
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 37 def edges @edges ||= edge_collection.aggregate([ { "$unwind" => "$value.handled_by" }, { "$group" => { "_id" => { "service" => "$value.authored_by" }, "edges" => { "$addToSet" => "$value.handled_by" }, }, }, ]) end
edges_for(node)
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 32 def edges_for(node) aggregate = edges.find { |agg| agg["_id"]["service"] == node.service } aggregate && aggregate["edges"].map{ |service_name| nodes[service_name] } end
nodes()
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 22 def nodes @nodes ||= service_names.each_with_object({}) do |service_name, directory| directory[service_name] = Utracker::Drawer::Node.new(service_name, nil) end end
service_names()
click to toggle source
# File lib/utracker/mongodb/drawer.rb, line 28 def service_names collection.distinct('service') end