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 |