Sha256: 2e2c54caf25771bfeb31bb19e78152291bce20103030e36c3add61e2a25e2398

Contents?: true

Size: 879 Bytes

Versions: 1

Compression:

Stored size: 879 Bytes

Contents

require "cereal_box/version"

module CerealBox

  def self.included(base)
    base.send(:attr_accessor, :cereal_box_base_instance)
    base.send(:attr_accessor, :cereal_box_previous_filter)
  end

  def initialize(base)
    @cereal_box_base_instance = base
  end

  def cereal_box_node_name
    self.class.to_s.split(/(?=[A-Z])/).map{ |w| w.downcase }[0...-1].join("_").to_sym
  end

  def serializable_hash(options = {})
    apply(:serializable_hash, options)
  end

  def as_json(options = {}) 
    apply(:as_json, options)
  end

  def as_xml(options = {}) 
    apply(:as_xml, options)
  end

  def apply(message, options = {})
    target = @cereal_box_previous_filter ? @cereal_box_previous_filter : @cereal_box_base_instance
    target.send(message.to_sym, options).merge(
      { cereal_box_node_name => self.send(:attributes, @cereal_box_base_instance) }
    )
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cereal_box-0.0.2 lib/cereal_box.rb