Class: NetworkCsvMaker
- Inherits:
-
Object
- Object
- NetworkCsvMaker
- Defined in:
- app/workers/concerns/network_csv_maker.rb
Instance Method Summary collapse
- #create_network_snapshot ⇒ Object
- #create_snapshot(network) ⇒ Object
- #edges_snapshot(created_at) ⇒ Object
- #find_records(c, created_at, &block) ⇒ Object
-
#initialize ⇒ NetworkCsvMaker
constructor
A new instance of NetworkCsvMaker.
- #make_edge(source, target, edge) ⇒ Object
- #make_node(node, label, status, created_at, updated_at) ⇒ Object
- #make_node_id(node) ⇒ Object
- #nodes_snapshot(created_at) ⇒ Object
- #update_network_snapshot(network_id) ⇒ Object
Constructor Details
#initialize ⇒ NetworkCsvMaker
Returns a new instance of NetworkCsvMaker.
6 7 8 9 10 |
# File 'app/workers/concerns/network_csv_maker.rb', line 6 def initialize # Defining the attributes @node_attributes = %w{node type label status created_at updated_at} @edge_attributes = %w{source source_type target target_type relation_type value created_at updated_at} end |
Instance Method Details
#create_network_snapshot ⇒ Object
116 117 118 119 |
# File 'app/workers/concerns/network_csv_maker.rb', line 116 def create_network_snapshot network = Network.new create_snapshot(network) end |
#create_snapshot(network) ⇒ Object
108 109 110 111 112 113 114 |
# File 'app/workers/concerns/network_csv_maker.rb', line 108 def create_snapshot(network) nodes_file = nodes_snapshot(network.created_at) edges_file = edges_snapshot(network.created_at) network.node_list.attach(io: File.open(nodes_file), filename: 'network_nodes.csv') network.edge_list.attach(io: File.open(edges_file), filename: 'network_edges.csv') network.save end |
#edges_snapshot(created_at) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/workers/concerns/network_csv_maker.rb', line 90 def edges_snapshot(created_at) # Going over the edges edges_file = './tmp/network_edges.csv' CSV.open(edges_file, 'wb', headers: true) do |csv| csv << @edge_attributes find_records(RecsysDatum, created_at) do |edge| source = edge.sourceable_node target = edge.targetable_node next if source.nil? || target.nil? csv << make_edge(source, target, edge) end end edges_file end |
#find_records(c, created_at, &block) ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'app/workers/concerns/network_csv_maker.rb', line 24 def find_records(c, created_at, &block) # Skill, Ressource and Interest currently do not have a created_at field return c.find_each if [Skill, Ressource, Interest].include?(c) if created_at.nil? c.find_each(&block) else c.where('created_at <= ?', created_at).or(c.where('created_at is null')).find_each(&block) end end |
#make_edge(source, target, edge) ⇒ Object
20 21 22 |
# File 'app/workers/concerns/network_csv_maker.rb', line 20 def make_edge(source, target, edge) [make_node_id(source), source.class.name, make_node_id(target), target.class.name, edge.relation_type, edge.value, edge.created_at, edge.updated_at] end |
#make_node(node, label, status, created_at, updated_at) ⇒ Object
16 17 18 |
# File 'app/workers/concerns/network_csv_maker.rb', line 16 def make_node(node, label, status, created_at, updated_at) [make_node_id(node), node.class.name, label, status, created_at, updated_at] end |
#make_node_id(node) ⇒ Object
12 13 14 |
# File 'app/workers/concerns/network_csv_maker.rb', line 12 def make_node_id(node) node.class.name + '_' + node.id.to_s end |
#nodes_snapshot(created_at) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'app/workers/concerns/network_csv_maker.rb', line 35 def nodes_snapshot(created_at) # Going over all the nodes nodes_file = './tmp/network_nodes.csv' CSV.open(nodes_file, 'wb', headers: true) do |csv| csv << @node_attributes find_records(Skill, created_at) do |skill| csv << make_node(skill, skill.skill_name, "", "", "") end find_records(Ressource, created_at) do |ressource| csv << make_node(ressource, ressource.ressource_name, "", "", "") end find_records(Interest, created_at) do |interest| csv << make_node(interest, interest.interest_name, "", "", "") end find_records(User, created_at) do |user| csv << make_node(user, user.nickname, user.active_status, user.created_at, user.updated_at) end find_records(Post, created_at) do |post| csv << make_node(post, post.id, "", post.created_at, post.updated_at) end find_records(Comment, created_at) do |comment| csv << make_node(comment, comment.id, "", comment.created_at, comment.updated_at) end find_records(Need, created_at) do |need| csv << make_node(need, need.id, need.status, need.created_at, need.updated_at) end find_records(Project, created_at) do |project| csv << make_node(project, project.short_title, project.status, project.created_at, project.updated_at) end find_records(Workgroup, created_at) do |workgroup| csv << make_node(workgroup, workgroup.short_title, workgroup.status, workgroup.created_at, workgroup.updated_at) end find_records(Challenge, created_at) do |challenge| csv << make_node(challenge, challenge.short_title, challenge.status, challenge.created_at, challenge.updated_at) end find_records(Program, created_at) do |program| csv << make_node(program, program.short_title, program.status, program.created_at, program.updated_at) end end nodes_file end |