Module: ReuseQueryResults

Defined in:
lib/reuse_query_results.rb,
lib/reuse_query_results/railtie.rb,
lib/reuse_query_results/storage.rb,
lib/reuse_query_results/version.rb,
lib/reuse_query_results/active_record_monkey_patch.rb

Defined Under Namespace

Modules: Cache Classes: Railtie, Storage

Constant Summary collapse

VERSION =
"0.1"

Class Method Summary collapse

Class Method Details

.cache(connection, sql, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/reuse_query_results.rb', line 15

def cache(connection, sql, &block)
  database = connection.instance_variable_get(:'@config')[:database]
  case sql.strip
  when (/\AINSERT INTO (?:\.*[`"]?([^.\s`"]+)[`"]?)*/i)
    return storage.clear_and_execute(database, $1, &block)
  when (/\ADELETE FROM (?:\.*[`"]?([^.\s`"]+)[`"]?)*/i)
    return storage.clear_and_execute(database, $1, &block)
  when (/\AUPDATE (?:\.*[`"]?([^.\s`"]+)[`"]?)*/i)
    return storage.clear_and_execute(database, $1, &block)
  when (/\ASELECT\s+.*FROM\s+"?([^\.\s'"]+)"?/im)
    return storage.fetch_or_execute(database, tables(sql), sql, &block)
  end
  block.call
end

.storageObject



6
7
8
# File 'lib/reuse_query_results.rb', line 6

def storage
  @storage ||= Storage.new
end

.storage=(storage) ⇒ Object



10
11
12
# File 'lib/reuse_query_results.rb', line 10

def storage=(storage)
  @storage = storage
end

.tables(sql) ⇒ Object



30
31
32
# File 'lib/reuse_query_results.rb', line 30

def tables(sql)
  sql.scan(/(?:FROM|JOIN)\s+[`"]?([^\.\s'`"]+)(?:[`"]?)/).flatten.sort
end