Module: IOPromise::ViewComponent::DataLoader
- Defined in:
- lib/iopromise/view_component/data_loader.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.included(base) ⇒ Object
23 24 25 |
# File 'lib/iopromise/view_component/data_loader.rb', line 23 def self.included(base) base.extend(ClassMethods) end |
Instance Method Details
#data_as_promise ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/iopromise/view_component/data_loader.rb', line 27 def data_as_promise @data_promise ||= begin promises = self.class.promised_data_keys.map do |k| p = instance_variable_get('@' + k.to_s) if p.is_a?(IOPromise::ViewComponent::DataLoader) # recursively preload all nested data p.data_as_promise else # for any local promises, we'll unwrap them before completing p.then do |result| if result.is_a?(IOPromise::ViewComponent::DataLoader) # likewise, if we resolved a promise that we can recurse, load that data too. result.data_as_promise else result end end end end Promise.all(promises) end end |
#render_in ⇒ Object
56 57 58 59 |
# File 'lib/iopromise/view_component/data_loader.rb', line 56 def render_in(*) sync super end |
#sync ⇒ Object
51 52 53 54 |
# File 'lib/iopromise/view_component/data_loader.rb', line 51 def sync data_as_promise.sync self end |