class ObStore::Data

Attributes

data[R]
expiry[RW]
updated[R]

Public Class Methods

new(data=nil, options={}) click to toggle source
# File lib/obstore/data.rb, line 19
def initialize(data=nil, options={})
  @expiry = options[:expiry] # in seconds
  @data = {}
  store_data_by_key :data, data
  @updated = Time.now
  if options[:metadata]
    options[:metadata].each do |key, value|
      store_data_by_key key, value
    end
  end
end

Public Instance Methods

data=(data) click to toggle source

custom setter for data attribute that sets the update time

# File lib/obstore/data.rb, line 52
def data=(data)
  store_data_by_key(:data, data)
end
fetch() click to toggle source

returns the object you had saved

# File lib/obstore/data.rb, line 32
def fetch
  fetch_data_by_key(:data)
end
save(data) click to toggle source

Saves the object

# File lib/obstore/data.rb, line 47
def save(data)
  self.data=data
end
stale?() click to toggle source

returns boolean value if data has expired

# File lib/obstore/data.rb, line 37
def stale?
  if @expiry
    if ts < Time.now.to_i - @expiry
      return true
    end
  end
  return false
end
ts() click to toggle source

helper method to return the timestamp as an int

# File lib/obstore/data.rb, line 62
def ts
  with_mutex { @updated.to_i }
end

Private Instance Methods

fetch_data_by_key(key) click to toggle source

method used by method_missing to fetch meta data

# File lib/obstore/data.rb, line 77
def fetch_data_by_key(key)
  with_mutex { @data[key.to_sym] }
end
method_missing(meth, *args, &block) click to toggle source
Calls superclass method
# File lib/obstore/data.rb, line 81
def method_missing(meth, *args, &block)
  if meth.to_s =~ /^(.+)=$/
    store_data_by_key($1, *args)
  elsif meth.to_s =~ /^(.+)$/
    fetch_data_by_key($1)
  else
    super
  end
end
store_data_by_key(key, value) click to toggle source

method used by method_missing to store meta data

# File lib/obstore/data.rb, line 69
def store_data_by_key(key, value)
  with_mutex {
    @data.store key.to_sym, value
    @updated = Time.now
  }
end