· 10 years ago · Sep 07, 2016, 07:54 AM
1require 'sqlite3'
2require 'singleton'
3require 'securerandom'
4
5module InterModRequest
6 def self.fetch id
7 if DatabaseStorage.instance.exist? id
8 DatabaseStorage.instance.get_response id
9 else
10 raise KeyError, "key not found: #{id}"
11 end
12 end
13
14 def create id
15 DatabaseStorage.instance.save_request id
16 end
17
18 def self.update id, value
19 DatabaseStorage.instance.set_response id, value
20 end
21
22 def self.delete id
23 DatabaseStorage.instance.delete_request id
24 end
25
26 def self.generate
27 DatabaseStorage.instance.save_request
28 end
29
30 class DatabaseStorage
31 DB_NAME = "./db.#{Rails.env}.sqlite3"
32
33 attr_reader :db
34
35 include Singleton
36
37 def initialize
38 @db = SQLite3::Database.new(DB_NAME)
39 db.execute('CREATE TABLE IF NOT EXISTS requests (id text primary key, response text)')
40 end
41
42 def save_request request_id = nil
43 request_id = request_id || SecureRandom.uuid
44 db.execute('INSERT INTO requests VALUES (?, null)', [request_id])
45 request_id
46 end
47
48 def set_response(request_id, response)
49 db.execute('UPDATE requests SET response = ? WHERE id = ?', [response.to_s, request_id])
50 end
51
52 def exist? request_id
53 rows = db.execute('SELECT COUNT(1) FROM requests WHERE id = ?', [request_id])
54 rows[0][0] > 0
55 end
56
57 def get_response(request_id)
58 rows = db.execute('SELECT RESPONSE FROM requests WHERE id = ?', [request_id])
59 (rows.empty? || rows[0][0].blank?) ? {} : eval(rows[0][0])
60 end
61
62 def delete_request(request_id)
63 db.execute('DELETE FROM requests WHERE id = ?', [request_id])
64 end
65 end
66end