module RKit::Decoration::Base

Public Class Methods

included(base) click to toggle source
# File lib/r_kit/decoration/base.rb, line 3
def self.included base
  base.singleton_attr_reader :decorated_class
  base.singleton_attr_reader :after_initialize_procs, default: proc{ [] }

  base.define_singleton_method :after_initialize, ->(&block) do
    after_initialize_procs << block
  end
end
new(object, view_context: nil) click to toggle source
Calls superclass method
# File lib/r_kit/decoration/base.rb, line 13
def initialize object, view_context: nil
  @view_context = view_context

  super(object)
  after_initialize!
end

Public Instance Methods

after_initialize!() click to toggle source
# File lib/r_kit/decoration/base.rb, line 20
def after_initialize!
  decorated = self
  __getobj__.define_singleton_method(:decorated){ decorated }

  decorator_class.after_initialize_procs.each{ |after_initialize_proc| self.instance_eval &after_initialize_proc }
end
decorate(*args) click to toggle source
# File lib/r_kit/decoration/base.rb, line 32
def decorate *args
  self
end
decorated?() click to toggle source
# File lib/r_kit/decoration/base.rb, line 36
def decorated?() true end
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/r_kit/decoration/base.rb, line 58
def method_missing method_name, *args, &block
  closure = super

  if RKit::Decoration.config.recursive_decoration && closure.need_decoration?
    closure.decorate(view_context: view)
  else
    closure
  end
end
need_decoration?() click to toggle source
# File lib/r_kit/decoration/base.rb, line 38
def need_decoration?() false end
raw() click to toggle source
# File lib/r_kit/decoration/base.rb, line 40
def raw
  __getobj__
end
view() click to toggle source
# File lib/r_kit/decoration/base.rb, line 49
def view
  (@@mutex ||= Mutex.new).synchronize do
    @view_context ||= view_context
  end
rescue ThreadError
  nil
end

Private Instance Methods

view_context() click to toggle source
# File lib/r_kit/decoration/base.rb, line 45
        def view_context
  backtrace{ |obj| obj.is_a? ActionView::Base } || backtrace{ |obj| obj.respond_to? :view_context }.view_context
end