module DecoratesBeforeRendering

Public Instance Methods

__attempt_to_decorate_(obj) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 93
def __attempt_to_decorate_ obj
  return obj if obj.respond_to?(:decorate)
  if obj
    src = __src_for__(obj)
    decorator = __normalized_decorator_for__(src)
    __do_decoration_ decorator, obj
  end
end
__attempt_to_decorate_list_(objs) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 87
def __attempt_to_decorate_list_ objs
  [objs].flatten.compact.map do |obj|
    __attempt_to_decorate_(obj)      
  end    
end
__auto_decorate_exposed_ones_() click to toggle source

def render *args

__auto_decorate_exposed_ones_
super(*args)

end

# File lib/context_exposer/patch/decorates_before_rendering.rb, line 14
def __auto_decorate_exposed_ones_
  __decorate_ivars__
  __decorate_exposed_ones_
  __decorate_ctx_exposed_ones_    
rescue StandardError => e
  __handle_decorate_error_(e)
end
__ctx_exposed_ones_() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 42
def __ctx_exposed_ones_
  return [] unless _has_exposure_storage?
  @__ctx_exposed_ones_ ||= _cxt_exposed_keys
end
__decorate_ctx_exposed_ones_() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 71
def __decorate_ctx_exposed_ones_
  __ctx_exposed_ones_.each do |name|
    ivar_name = "@#{name}"
    objs = ctx.send(name)

    decorated = case objs
    when Array
      __attempt_to_decorate_list_ objs        
    else
      __attempt_to_decorate_ objs
    end

    ctx.send(:instance_variable_set, ivar_name, decorated) # if decorated
  end
end
__decorate_error!(decorator) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 117
def __decorate_error! decorator
  raise DecoratorError, "Decorator: #{decorator} must have a #decorate method"
end
__decorate_exposed_ones_() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 55
def __decorate_exposed_ones_
  __exposed_ones_.each do |name|
    ivar_name = "@#{name}"
    objs = send(name)

    decorated = case objs
    when Array
      __attempt_to_decorate_list_ objs        
    else
      __attempt_to_decorate_ objs
    end

    send(:instance_variable_set, ivar_name, decorated)  # if decorated
  end
end
__decorate_ivars__() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 159
def __decorate_ivars__
  return unless __has_decorates?
  __validate_decorates_present_
  return if __decorates_blank?
  __decorates__ivars
  __decorates_collection_ivars__
end
__decorates__ivars() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 184
def __decorates__ivars
  if !__decorates__.nil?
    __decorate_ivar_names__(__decorates__) do |ivar_name, ivar, options|
      decorator = options.key?(:with) ? options.fetch(:with) : __decorator_for__(ivar)
      if decorator
        decorated = __do_decoration_(decorator, ivar)
        instance_variable_set(ivar_name, decorated)
      end
    end
  end
end
__decorates_blank?() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 171
def __decorates_blank?
  __decorates__.blank? and __decorates_collection__.blank?
end
__decorates_collection_ivars__() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 175
def __decorates_collection_ivars__
  if !__decorates_collection__.nil?
    __decorate_ivar_names__(__decorates_collection__) do |ivar_name, ivar, options|
      decorated = options.fetch(:with).decorate_collection(ivar)
      instance_variable_set(ivar_name, decorated) if decorated
    end
  end
end
__decorator_for__(obj) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 143
def __decorator_for__(obj)
  return obj.decorator(self) if obj.respond_to? :decorator
    __decorator_name_for__(obj).constantize
rescue FindModelError => e
  nil
end
__decorator_name_for__(obj) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 150
def __decorator_name_for__(obj)
  "#{__model_name_for__(obj)}Decorator"
end
__do_decoration_(decorator, obj) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 102
def __do_decoration_ decorator, obj
  return obj if obj.respond_to?(:decorate)

  return if !decorator || !obj
  __validate_decorator!(decorator)
  decorator.decorate(obj)
end
__exposed_ones_() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 29
def __exposed_ones_
  return [] unless _has_exposures?
  @__exposed_ones_ ||= _exposure_keys
end
__handle_decorate_error_(e) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 22
def __handle_decorate_error_ e 
  # puts "Error: #{e}"
  if defined?(::Rails) && (Rails.respond_to? :logger)
    Rails.logger.warn 'decorates_before_render: auto_decorate error: #{e}'
  end
end
__has_decorates?() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 167
def __has_decorates?
  respond_to?(:__decorates__)
end
__model_name_for__(obj) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 154
def __model_name_for__(obj)
  return obj.model_name if obj.respond_to?(:model_name)
  raise FindModelError, "#{obj} does not have an associated model"
end
__normalized_decorator_for__(obj) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 130
def __normalized_decorator_for__(obj)
  decorator = __decorator_for__(obj)

  case decorator
  when String
    decorator.constantize.new obj
  when Class
    decorator.new obj
  else
    decorator
  end
end
__src_for__(obj) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 121
def __src_for__ obj
  case obj
  when Class
    obj.class
  else 
    obj      
  end
end
__validate_decorator!(decorator) click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 111
def __validate_decorator! decorator
  unless decorator.respond_to? :decorate
    raise DecoratorError, "Decorator: #{decorator} must have a #decorate method"
  end
end
_cxt_exposed_keys() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 47
def _cxt_exposed_keys
  self.class._exposure_storage.keys
end
_exposure_keys() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 34
def _exposure_keys
  self.class._exposures.keys
end
_has_exposure_storage?() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 51
def _has_exposure_storage?
  self.class.respond_to? :_exposure_storage
end
_has_exposures?() click to toggle source
# File lib/context_exposer/patch/decorates_before_rendering.rb, line 38
def _has_exposures?
  self.class.respond_to? :_exposures
end