module JbuilderDeferredRender::JbuilderExt

Public Class Methods

get_attributes(json) click to toggle source
# File lib/jbuilder_deferred_render/jbuilder_ext.rb, line 34
def self.get_attributes(json)
  json.instance_eval do
    @attributes 
  end
end
set_attributes(json, attrs) click to toggle source
# File lib/jbuilder_deferred_render/jbuilder_ext.rb, line 40
def self.set_attributes(json, attrs)
  json.instance_eval do
    @attributes  = attrs
  end
end
when(json, promise) click to toggle source
# File lib/jbuilder_deferred_render/jbuilder_ext.rb, line 8
def self.when(json, promise)
  deferred_attrs = get_attributes(json)

  Q.defer do |defer|
    promises = *promise
    results = []
    resolved = 0

    promises.each_with_index do |p, i|
      p.then do|result|
        results[i] = result
        resolved = resolved + 1;
        if resolved == promises.length then
          current_attrs = get_attributes(json)
          begin 
            set_attributes(json, deferred_attrs)
            defer.resolve(promise.is_a?(Array) ? results : results[0])
          ensure
            set_attributes(json, current_attrs)
          end
        end
      end
    end
  end
end

Public Instance Methods

when(promise) click to toggle source
# File lib/jbuilder_deferred_render/jbuilder_ext.rb, line 47
def when(promise)
  # Avoid executing in jbuilder's scope because, it aliases method not found to set!
  return JbuilderDeferredRender::JbuilderExt.when(self, promise)  
end