-
Notifications
You must be signed in to change notification settings - Fork 0
/
prepared_data_queue.rb
65 lines (54 loc) · 1.59 KB
/
prepared_data_queue.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
require_relative 'models/prepared_data_row'
require_relative '../shared/pvsw'
module Filial
class PreparedDataQueue
def initialize(stdout = $stdout)
@stdout = stdout
end
def data
PreparedDataRow.all
end
def queue_next_by(trackings_queue)
data_to_queue = get_data_for(trackings_queue.trackings)
saves_data_as_prepared_data_rows(data_to_queue)
trackings_queue.clear!
end
def remove_acknowledged_data!(acknowledged_ids)
acknowledged_ids.each do |id|
PreparedDataRow.get(id).destroy
end
if PreparedDataRow.all.size == 0
PreparedDataRow.clear!
end
end
private
def get_data_for(trackings)
#[[table, rowid, action, json_data], [..]]
data_to_queue = []
ODBC::connect(Pvsw.odbc_alias) do |dbc|
pvsw = Pvsw.new(dbc)
trackings.each do |tr|
elem = []
elem << tr.tblname
elem << tr.rowid
elem << tr.action
json_data = tr.action == 'D' ? "#{pvsw.id_columns[tr.tblname]}" : pvsw.get_json_data_for(tr.tblname, tr.rowid)
elem << json_data
data_to_queue << elem
end
end
data_to_queue
end
def saves_data_as_prepared_data_rows(data_to_queue)
data_to_queue.each do |pdr|
@stdout.puts "saving data as prepared for: #{pdr[0]} #{pdr[1]} #{pdr[2]}"
PreparedDataRow.create!(
tblname: pdr[0],
rowid: pdr[1],
action: pdr[2],
data: pdr[3]
)
end
end
end
end