Sha256: dbf9b7d4386149d38eec596db26527560db3c45858ab1ebf8a505b466a33af3a

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

require 'riak'

class RiakRecord
  attr_reader :riak_object

  def initialize(r = nil)
    r = self.class.bucket.new(r) if r.nil? || r.is_a?(String)
    raise ArgumentError unless r.is_a? Riak::RObject
    @riak_object = r
  end

  def data
    riak_object.data
  end

  def save
    riak_object.store
  end

  def self.bucket_name(name = :not_a_name)
    @bucket_name = name unless name == :not_a_name
    @bucket_name
  end

  def self.bucket
    @bucket ||= client.bucket(@bucket_name)
  end

  def self.record_attributes(*attributes)
    attributes.each do |method_name|
      define_method(method_name) do
          data[method_name]
      end

      define_method("#{method_name}=".to_sym) do |value|
        data[method_name] = value
      end
    end
  end

  def self.find(key_or_keys)
    return find_many(key_or_keys) if key_or_keys.is_a?(Array)

    begin
      self.new(bucket.get(key_or_keys.to_s))
    rescue Riak::FailedRequest => e
      if e.not_found?
        nil
      else
        raise e
      end
    end
  end

  def self.find_many(keys)
    hash = bucket.get_many(keys.map(&:to_s))
    keys.map{ |k| hash[k] }
  end

  def self.client=(client)
    @@client = client
  end

  def self.client
    @@client
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
riak-record-0.0.3 lib/riak-record.rb