Sha256: e087d1d2c4fc3ba133e66531eedf9bd156632eb05066f2e0e7b0dea981f4e6ae

Contents?: true

Size: 824 Bytes

Versions: 1

Compression:

Stored size: 824 Bytes

Contents

class DelegatedPresenter::Base < SimpleDelegator

  @@presentable = {}

  def initialize(object)
    raise Presenter::NotPresentable, "#{self.presenter_class} cannot present a #{object.class}" unless self.presentable.include?(object.class.name)
    super(object)
    freeze
  end

  alias_method :presenter_class, :class

  def class
    __getobj__.class
  end

  def presentable
    (@@presentable[self.presenter_class.name] || [])
  end

  def self.presents(*objects)
    @@presentable[name] ||= []
    @@presentable[name] += objects.flatten.collect{ |i| i.to_s.camelize.singularize }
  end

  def self.inherited(subclass)
    presentable_class = subclass.name.gsub(/Presenter$/,'')
    presentable_class.constantize rescue nil
    subclass.presents presentable_class if Object.const_defined?(presentable_class)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
delegated_presenter-0.1.0 lib/delegated_presenter/base.rb