Sha256: aaff4ca45a205a0b2dfc46478871a5e9a10a01dcf0ebbdc14e2ba03785eddf0d

Contents?: true

Size: 1.57 KB

Versions: 2

Compression:

Stored size: 1.57 KB

Contents

module EitilWrapper
  module ControllerDecorator

    private

    def decorate(dec_item, dec_method: nil, dec_class: nil, **dec_kwargs)
      all_args_to_ivars binding
      set_ivars :dec_class, :decorator, :dec_method
      send_to_decorator
    end

    def send_to_decorator
       @decorator.send(@dec_method, @dec_item)
     
      rescue NoMethodError => e       
        inform_no_method_for_decorator_error
        @dec_item
    end

    def inform_no_method_for_decorator_error
      message = "Warning: NoMethodError for #{@dec_class}##{@dec_method}, returned @dec_item instead."
      Logger.new("#{Rails.root}/log/decorator_log.log").warn message
      warn message
    end

    def set_dec_method
      @dec_method = @dec_method || derived_dec_method || :base
    end

    def derived_dec_method
      return unless respond_to? :params      
      return :app if @decorator.respond_to?(:app) && params["isMobile"]
      return :web if @decorator.respond_to?(:web) && params["isWeb"]
    end

    def set_dec_class
      @dec_class = @dec_class ? manual_set_dec_class : derived_dec_class
    end

    def manual_set_dec_class
      "#{@dec_class}Decorator".constantize
    end

    def derived_dec_class
      "#{@dec_item.class.name}Decorator".constantize
    end

    def set_decorator
      @dec_class.new ivars
    end

    def controller_ivars
      Eitil.controller_ivars.map do |ivar|
        { ivar => instance_variable_get("@#{ivar.to_s}") }
      end.inject &:merge
    end

    def ivars
       @dec_kwargs ? controller_ivars.merge(@dec_kwargs) : controller_ivars
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
eitil-1.1.25 eitil_wrapper/lib/eitil_wrapper/decorators/controller_decorator.rb
eitil-1.1.24 eitil_wrapper/lib/eitil_wrapper/decorators/controller_decorator.rb