Module: JbuilderDeferredRender::JbuilderExt

Extended by:
ActiveSupport::Concern
Defined in:
lib/jbuilder_deferred_render/jbuilder_ext.rb

Class Method Summary collapse

Class Method Details

.get_attributes(json) ⇒ Object



34
35
36
37
38
# 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) ⇒ Object



40
41
42
43
44
# 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) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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