Class: ModelView::Resolver
- Inherits:
-
Object
- Object
- ModelView::Resolver
- Defined in:
- lib/model_view/resolver.rb
Class Method Summary collapse
- .fields_for_scope(scope, scope_data) ⇒ Object
- .resolve(obj, scopes, scope = nil, context = {}) ⇒ Object
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 |