Class: Rack::Insight::Database::DataTable
- Inherits:
-
Table
- Object
- Table
- Rack::Insight::Database::DataTable
show all
- Defined in:
- lib/rack/insight/database.rb
Defined Under Namespace
Modules: ErrorWrapper
Classes: DecodingError, EncodingError
Instance Method Summary
collapse
Methods inherited from Table
#count, #create_sql, #db, #execute, #fields_sql, #insert, #keys, #length, #select
Methods included from Logging
logger, verbose, verbosity
Constructor Details
#initialize(name, *keys) ⇒ DataTable
Returns a new instance of DataTable.
184
185
186
|
# File 'lib/rack/insight/database.rb', line 184
def initialize(name, *keys)
super(name, *(%w{request_id} + keys + %w{value}))
end
|
Instance Method Details
#count_entries(key_sql) ⇒ Object
241
242
243
|
# File 'lib/rack/insight/database.rb', line 241
def count_entries(key_sql)
count(key_sql).first.first
end
|
#count_for_request(id) ⇒ Object
249
250
251
|
# File 'lib/rack/insight/database.rb', line 249
def count_for_request(id)
count_entries("request_id = #{id}")
end
|
#create_keys_clause ⇒ Object
188
189
190
191
192
193
|
# File 'lib/rack/insight/database.rb', line 188
def create_keys_clause
non_request_keys = @keys - %w"request_id"
sql = non_request_keys.map{|key| "#{key} varchar"}.join(", ")
sql += ", request_id references requests(id) on delete cascade"
sql
end
|
#decode_value(value) ⇒ Object
229
230
231
232
233
234
235
|
# File 'lib/rack/insight/database.rb', line 229
def decode_value(value)
YAML.load(Base64.decode64(value))
rescue Exception => ex
wrapped = DecodingError.new(ex, "Rack::Insight::Database#decode_value failed with error: ")
logger.error(wrapped)
raise wrapped if Rack::Insight::Config.database[:raise_decoding_errors]
end
|
#encode_value(value) ⇒ Object
221
222
223
224
225
226
227
|
# File 'lib/rack/insight/database.rb', line 221
def encode_value(value)
Base64.encode64(YAML.dump(value))
rescue Exception => ex
wrapped = EncodingError.new(ex, "Rack::Insight::Database#encode_value failed with error: ")
logger.error(wrapped)
raise wrapped if Rack::Insight::Config.database[:raise_encoding_errors]
end
|
#for_request(id) ⇒ Object
245
246
247
|
# File 'lib/rack/insight/database.rb', line 245
def for_request(id)
retrieve("request_id = #{id}")
end
|
#retrieve(key_sql) ⇒ Object
237
238
239
|
# File 'lib/rack/insight/database.rb', line 237
def retrieve(key_sql)
select("value", key_sql).map{|value| decode_value(value.first)}
end
|
#store(request_id, value, keys_sql = "") ⇒ Object
195
196
197
198
199
200
|
# File 'lib/rack/insight/database.rb', line 195
def store(request_id, value, keys_sql = "")
sql = "'#{encode_value(value)}'"
sql = keys_sql + ", " + sql unless keys_sql.empty?
sql = "#{request_id}, #{sql}"
insert(sql)
end
|
#to_a ⇒ Object
253
254
255
256
257
|
# File 'lib/rack/insight/database.rb', line 253
def to_a
super.map do |row|
row[-1] = decode_value(row[-1])
end
end
|