Class: PresenterObject::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/presenter_object/base.rb

Overview

Presenter superclass. Create your own presenter by sub-classing PresenterObject::Base and declaring the name of the model it will present.

e.g:

class DocumentPresenter << PresenterObject::Base
  presents :document

 .. add instance methods here ..
end

Create a presenter instance by giving it a model instance e.g:

document = DocumentPresenter.new Document.find(params[:id]) 
document.sender # can call any document model methods...
document.pretty_sender # ...as well as any presenter defined method
document.class # is the wrapped object's class, helps it behave like models do in forms, link helpers etc.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(object) ⇒ Base

Returns a new instance of Base.



37
38
39
# File 'lib/presenter_object/base.rb', line 37

def initialize(object)
  @object, @class = object, object.class
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



41
42
43
44
# File 'lib/presenter_object/base.rb', line 41

def method_missing(name, *args, &block)
  super unless object.respond_to? name
  object.send name, *args, &block
end

Instance Attribute Details

#classObject (readonly)

Returns the value of attribute class.



35
36
37
# File 'lib/presenter_object/base.rb', line 35

def class
  @class
end

#objectObject (readonly)

Returns the value of attribute object.



35
36
37
# File 'lib/presenter_object/base.rb', line 35

def object
  @object
end

Class Method Details

.presented_classObject



26
27
28
# File 'lib/presenter_object/base.rb', line 26

def presented_class
  @presented_class ||= @class_name.constantize
end

.presentersObject



30
31
32
# File 'lib/presenter_object/base.rb', line 30

def presenters
  @@presenters ||= {}
end

.presents(class_name) ⇒ Object



21
22
23
24
# File 'lib/presenter_object/base.rb', line 21

def presents(class_name)
  @class_name = class_name.to_s.classify
  presenters[@class_name] = self
end

Instance Method Details

#respond_to?(name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/presenter_object/base.rb', line 46

def respond_to?(name, include_private = false)
  object.respond_to? name, include_private or super
end