Class: AgentX::Cache::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/agentx/cache.rb

Constant Summary collapse

INSERT_SQL =
"  INSERT OR REPLACE INTO responses (\n    request_cache_key, \n    request_host, \n    request_base_url,\n    response_code,\n    response_headers,\n    response_content_length,\n    response_expires_at,\n    response_body) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n"
SELECT_BY_CACHE_KEY_SQL =
"  SELECT * FROM responses WHERE request_cache_key = ?\n"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename = File.join(AgentX.root, 'cache.sqlite3')) ⇒ Database

Returns a new instance of Database.



48
49
50
51
52
# File 'lib/agentx/cache.rb', line 48

def initialize(filename=File.join(AgentX.root, 'cache.sqlite3'))
  @filename = filename

  create
end

Instance Attribute Details

#filenameObject (readonly)

Returns the value of attribute filename.



46
47
48
# File 'lib/agentx/cache.rb', line 46

def filename
  @filename
end

Instance Method Details

#createObject



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
# File 'lib/agentx/cache.rb', line 54

def create
  if File.exists?(filename)
    return @db = SQLite3::Database.new(filename)
  end

  @db = SQLite3::Database.new(filename)

  @db.execute("    CREATE TABLE responses (\n      request_cache_key       STRING PRIMARY KEY,\n      request_host            STRING,\n      request_base_url        STRING,\n      response_code           INTEGER,\n      response_headers        TEXT,\n      response_content_length INTEGER,\n      response_expires_at     INTEGER,\n      response_body           BLOB)\n  SQL\n\n  @db.execute(<<-SQL)\n    CREATE INDEX responses_expires_at ON responses (response_expires_at)\n  SQL\n\n  @db.execute(<<-SQL)\n    CREATE INDEX responses_host ON responses (request_host)\n  SQL\n\n  @db\nend\n")

#read(cache_key) ⇒ Object



114
115
116
117
118
119
# File 'lib/agentx/cache.rb', line 114

def read(cache_key)
  @prepared_read ||= @db.prepare(SELECT_BY_CACHE_KEY_SQL)

  rs = @prepared_read.execute(cache_key)
  rs.next_hash
end

#write(opts = {}) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/agentx/cache.rb', line 96

def write(opts={})
  @prepared_write ||= @db.prepare(INSERT_SQL)

  @prepared_write.execute(
    opts[:request_cache_key],
    opts[:request_host],
    opts[:request_base_url],
    opts[:response_code],
    opts[:response_headers],
    opts[:response_content_length],
    opts[:response_expires_at].to_i,
    opts[:response_body])
end