class Blackbeard::Storable

Attributes

id[R]
new_record[RW]

Public Class Methods

all() click to toggle source
# File lib/blackbeard/storable.rb, line 97
def self.all
  all_keys.map{ |key| new_from_key(key) }
end
all_keys() click to toggle source
# File lib/blackbeard/storable.rb, line 75
def self.all_keys
  db.hash_keys(master_key)
end
count() click to toggle source
# File lib/blackbeard/storable.rb, line 79
def self.count
  db.hash_length(master_key)
end
create(id, attributes = {}) click to toggle source
# File lib/blackbeard/storable.rb, line 60
def self.create(id, attributes = {})
  key = key_for(id)
  raise StorableDuplicateKey if db.hash_field_exists(master_key, key)
  storable = new(id)
  storable.save
  storable.update_attributes(attributes) unless attributes.empty?
  storable
end
find(id) click to toggle source
# File lib/blackbeard/storable.rb, line 52
def self.find(id)
  key = key_for(id)
  return nil unless db.hash_field_exists(master_key, key)
  storable = new(id)
  storable.new_record = false
  storable
end
find_or_create(id) click to toggle source
# File lib/blackbeard/storable.rb, line 69
def self.find_or_create(id)
  storable = new(id)
  storable.save
  storable
end
key_for(id) click to toggle source
# File lib/blackbeard/storable.rb, line 123
def self.key_for(id)
  "#{master_key}::#{ id.to_s.downcase }"
end
master_key() click to toggle source
# File lib/blackbeard/storable.rb, line 15
def master_key
  return @master_key if defined? @master_key
  return self.superclass.master_key if self.superclass.respond_to?(:master_key)
  raise StorableMasterKeyUndefined, "define master key in the class that inherits from storable"
end
new(id) click to toggle source
# File lib/blackbeard/storable.rb, line 47
def initialize(id)
  @id = id.to_s.downcase
  @new_record = true
end
new_from_key(key) click to toggle source
# File lib/blackbeard/storable.rb, line 87
def self.new_from_key(key)
  if key =~ /^#{master_key}::(.+)$/
    storable = new($1)
    storable.new_record = false
    storable
  else
    nil
  end
end
new_from_keys(*keys) click to toggle source
# File lib/blackbeard/storable.rb, line 83
def self.new_from_keys(*keys)
  keys.flatten.map{ |key| new_from_key(key) }
end
on_reload(method) click to toggle source
# File lib/blackbeard/storable.rb, line 30
def on_reload(method)
  on_reload_methods.push(method)
end
on_reload_methods() click to toggle source
# File lib/blackbeard/storable.rb, line 34
def on_reload_methods
  @on_reload_methods ||= self.superclass.on_reload_methods.dup if self.superclass.respond_to?(:on_reload_methods)
  @on_reload_methods ||= []
end
on_save(method) click to toggle source
# File lib/blackbeard/storable.rb, line 21
def on_save(method)
  on_save_methods.push(method)
end
on_save_methods() click to toggle source
# File lib/blackbeard/storable.rb, line 25
def on_save_methods
  @on_save_methods ||= self.superclass.on_save_methods.dup if self.superclass.respond_to?(:on_save_methods)
  @on_save_methods ||= []
end
set_master_key(master_key) click to toggle source
# File lib/blackbeard/storable.rb, line 11
def set_master_key(master_key)
  @master_key = master_key.to_s
end

Public Instance Methods

==(o) click to toggle source
# File lib/blackbeard/storable.rb, line 119
def ==(o)
  o.class == self.class && o.id == self.id
end
key() click to toggle source
# File lib/blackbeard/storable.rb, line 127
def key
  self.class.key_for(id)
end
master_key() click to toggle source
# File lib/blackbeard/storable.rb, line 131
def master_key
  self.class.master_key
end
new_record?() click to toggle source
# File lib/blackbeard/storable.rb, line 115
def new_record?
  @new_record
end
reload() click to toggle source
# File lib/blackbeard/storable.rb, line 110
def reload
  self.class.on_reload_methods.each{ |m| self.send(m) }
  self
end
save() click to toggle source
# File lib/blackbeard/storable.rb, line 101
def save
  if new_record?
    db.hash_key_set_if_not_exists(master_key, key, tz.now.to_date)
    @new_record = false
  end
  self.class.on_save_methods.each{ |m| self.send(m) }
  true
end