require 'request_store' require "easy_presenter/version" require "easy_presenter/base" require "easy_presenter/railtie" module EasyPresenter extend ActiveSupport::Concern included do include_easy_presenter end module ClassMethods def inherited(subclass) include_easy_presenter(subclass) super end protected def include_easy_presenter(klass=self) presenter_class = "#{klass}Presenter".safe_constantize if presenter_class presenter_class.extend ActiveSupport::Concern klass.send :include, presenter_class klass.send :include, Base end presenter_class end end # for the Presenter module only class << self def controller RequestStore.store[:presenter_controller] end def controller=(presenter_controller) RequestStore.store[:presenter_controller] = presenter_controller end end end if defined?(ActiveRecord::Base) ActiveRecord::Base.send :include, EasyPresenter elsif defined?(Mongoid::Document) Mongoid::Document.send :include, EasyPresenter end