Class: Magic::Presenter::Base
- Inherits:
-
Decorator::Base
- Object
- Decorator::Base
- Magic::Presenter::Base
- Defined in:
- lib/magic/presenter/base.rb
Overview
Magic Presenter
Any presenter should inherit ‘Magic::Presenter::Base`. It further inherits from `SimpleDelegator` and behaves like that.
Presenter class inference
Presenters provide automatic class inference for any model based on its class name powered by Magic Lookup. For example, ‘MyModel.new` looks for `MyPresenter` first. If not found, it looks for presenters of its ancestor classes, up to `ObjectPresenter`.
Class Method Summary collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Magic::Presenter::Helpers
Class Method Details
.descendants ⇒ Object
50 51 52 53 54 |
# File 'lib/magic/presenter/base.rb', line 50 def descendants Magic.eager_load :presenters super end |
.model_class ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/magic/presenter/base.rb', line 30 def model_class Presentable.classes .select { self.for(_1) == self } .optional do |classes| next unless classes.many? classes .select { name_for(_1) == name } .optional { classes if _1.empty? } # lookup failed — return original end .sole rescue Enumerable::SoleItemExpectedError => error raise Lookup::Error, "#{error. .sub('items', 'model classes') .sub('item', 'model class') } for #{self}" end |
.name_for(object_class) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/magic/presenter/base.rb', line 22 def name_for object_class object_class .to_s .delete_suffix('Model') .delete_suffix('Record') .then { "#{_1}Presenter" } end |