class WorkSnaps::Base

Public Class Methods

attr_reader(*attrs) click to toggle source

Define methods that retrieve the value from an initialized instance variable Hash, using the attribute as a key

@param attrs [Array, Set, Symbol]

# File lib/worksnaps/base.rb, line 8
def self.attr_reader(*attrs)
  mod = Module.new do
    attrs.each do |attribute|
      define_method attribute do
        @attrs[attribute.to_sym]
      end
      define_method "#{attribute}?" do
        !!@attrs[attribute.to_sym]
      end
    end
  end
  const_set(:Attributes, mod)
  include mod
end
fetch(attrs) { || ... } click to toggle source

Retrieves an object from the identity map.

@param attrs [Hash] @return [WorkSnaps::Base]

# File lib/worksnaps/base.rb, line 34
def self.fetch(attrs)
  return unless identity_map
  if object = identity_map.fetch(Marshal.dump(attrs))
    return object
  end
  return yield if block_given?
  raise WorkSnaps::Error::IdentityMapKeyError, "key not found"
end
fetch_or_new(attrs={}) click to toggle source

Retrieves an object from the identity map, or stores it in the identity map if it doesn't already exist.

@param attrs [Hash] @return [WorkSnaps::Base]

# File lib/worksnaps/base.rb, line 57
def self.fetch_or_new(attrs={})
  return unless attrs
  return new(attrs) unless identity_map

  fetch(attrs) do
    object = new(attrs)
    store(object)
  end
end
identity_map() click to toggle source

return [WorkSnaps::IdentityMap]

# File lib/worksnaps/base.rb, line 24
def self.identity_map
  return unless WorkSnaps.identity_map
  @identity_map = WorkSnaps.identity_map.new unless defined?(@identity_map) && @identity_map.class == WorkSnaps.identity_map
  @identity_map
end
new(attrs={}) click to toggle source

Initializes a new object

@param attrs [Hash] @return [WorkSnaps::Base]

# File lib/worksnaps/base.rb, line 71
def initialize(attrs={})
  @attrs = attrs
end
store(object) click to toggle source

Stores an object in the identity map.

@param object [Object] @return [WorkSnaps::Base]

# File lib/worksnaps/base.rb, line 47
def self.store(object)
  return object unless identity_map
  identity_map.store(Marshal.dump(object.attrs), object)
end

Public Instance Methods

[](method) click to toggle source

Fetches an attribute of an object using hash notation

@param method [String, Symbol] Message to send to the object

# File lib/worksnaps/base.rb, line 78
def [](method)
  send(method.to_sym)
rescue NoMethodError
  nil
end
attrs() click to toggle source

Retrieve the attributes of an object

@return [Hash]

# File lib/worksnaps/base.rb, line 87
def attrs
  @attrs
end
Also aliased as: to_hash
to_hash()
Alias for: attrs
update(attrs) click to toggle source

Update the attributes of an object

@param attrs [Hash] @return [WorkSnaps::Base]

# File lib/worksnaps/base.rb, line 96
def update(attrs)
  @attrs.update(attrs)
  self
end

Protected Instance Methods

attr_equal(attr, other) click to toggle source

@param attr [Symbol] @param other [WorkSnaps::Base] @return [Boolean]

# File lib/worksnaps/base.rb, line 106
def attr_equal(attr, other)
  self.class == other.class && !other.send(attr).nil? && send(attr) == other.send(attr)
end
attrs_equal(other) click to toggle source

@param other [WorkSnaps::Base] @return [Boolean]

# File lib/worksnaps/base.rb, line 112
def attrs_equal(other)
  self.class == other.class && !other.attrs.empty? && attrs == other.attrs
end