Class: Juno::Adapters::Sequel

Inherits:
Base
  • Object
show all
Defined in:
lib/juno/adapters/sequel.rb

Overview

Sequel backend

Instance Method Summary collapse

Methods inherited from Base

#[], #[]=, #close, #fetch

Constructor Details

#initialize(options = {}) ⇒ Sequel

Constructor

Options:

  • :db - Sequel database

  • :table - Table name (default :juno)

  • All other options passed to Sequel#connect

Parameters:

  • options (Hash) (defaults to: {})

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
23
24
# File 'lib/juno/adapters/sequel.rb', line 16

def initialize(options = {})
  raise ArgumentError, 'Option :db is required' unless db = options.delete(:db)
  @table = options.delete(:table) || :juno
  @db = ::Sequel.connect(db, options)
  @db.create_table?(@table) do
    String :k, :null => false, :primary_key => true
    String :v
  end
end

Instance Method Details

#clear(options = {}) ⇒ Object



55
56
57
58
# File 'lib/juno/adapters/sequel.rb', line 55

def clear(options = {})
  sequel_table.delete
  self
end

#delete(key, options = {}) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/juno/adapters/sequel.rb', line 46

def delete(key, options = {})
  @db.transaction do
    if value = load(key, options)
      sequel_table.filter(:k => key).delete
      value
    end
  end
end

#key?(key, options = {}) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/juno/adapters/sequel.rb', line 26

def key?(key, options = {})
  !!sequel_table[:k => key]
end

#load(key, options = {}) ⇒ Object



30
31
32
33
# File 'lib/juno/adapters/sequel.rb', line 30

def load(key, options = {})
  result = sequel_table[:k => key]
  result ? result[:v] : nil
end

#store(key, value, options = {}) ⇒ Object



35
36
37
38
39
40
41
42
43
44
# File 'lib/juno/adapters/sequel.rb', line 35

def store(key, value, options = {})
  @db.transaction do
    if key?(key, options)
      sequel_table.update(:k => key, :v => value)
    else
      sequel_table.insert(:k => key, :v => value)
    end
    value
  end
end