Class: AgentX::Cache::Database

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

Constant Summary collapse

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

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(<<-SQL)
    CREATE TABLE responses (
      request_cache_key       STRING PRIMARY KEY,
      request_host            STRING,
      request_base_url        STRING,
      response_code           INTEGER,
      response_headers        TEXT,
      response_content_length INTEGER,
      response_expires_at     INTEGER,
      response_body           BLOB)
  SQL

  @db.execute(<<-SQL)
    CREATE INDEX responses_expires_at ON responses (response_expires_at)
  SQL

  @db.execute(<<-SQL)
    CREATE INDEX responses_host ON responses (request_host)
  SQL

  @db
end

#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