Class: ModelView::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/model_view/resolver.rb

Class Method Summary collapse

Class Method Details

.fields_for_scope(scope, scope_data) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/model_view/resolver.rb', line 16

def fields_for_scope(scope, scope_data)
  root_scope_fields = extract_fields(ModelView::ROOT, scope_data)
  scope_fields = scope == ModelView::ROOT ? {} : extract_fields(scope, scope_data)

  extended_scopes = scope_data[scope][:extends] || []
  extended_fields = extended_scopes.reduce({}) do |res, scope|
    res.merge(extract_fields(scope, scope_data))
  end

  included_scopes = (scope_data[scope][:includes] || []).reduce({}) do |res, scope_name|
    res[scope_name] = fields_for_scope(scope_name, scope_data)
    res
  end

  {}.merge(root_scope_fields)
    .merge(scope_fields)
    .merge(extended_fields)
    .merge(included_scopes)
end

.resolve(obj, scopes, scope = nil, context = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
# File 'lib/model_view/resolver.rb', line 5

def resolve(obj, scopes, scope=nil, context={})
  scope ||= ModelView::ROOT

  fields = fields_for_scope(scope, scopes)

  fields.each_with_object({}) do |(field_name, field_data), result|
    result[field_name] = evaluate_field(obj, field_name, field_data[:args], field_data[:block], context)
  end

end