Class: Graphiti::ActiveGraph::Resource
- Inherits:
-
Resource
- Object
- Resource
- Graphiti::ActiveGraph::Resource
- Includes:
- Extensions::Resources::Authorizationable, Extensions::Resources::PayloadCombinable, Extensions::Resources::Preloadable, Extensions::Resources::Rel
- Defined in:
- lib/graphiti/active_graph/resource.rb
Class Method Summary collapse
- .custom_eagerload(sideload_name) ⇒ Object
- .extra_attribute?(name) ⇒ Boolean
- .guard_nil_id!(params) ⇒ Object
- .sideload_config(sideload_name) ⇒ Object
- .sideload_resource_class(sideload_name) ⇒ Object
- .use_uuid ⇒ Object
Instance Method Summary collapse
- #all_models ⇒ Object
- #authorize_scope_params ⇒ Object
- #build_scope(base, query, opts = {}) ⇒ Object
- #extra_attribute?(name) ⇒ Boolean
- #handle_includes(scope, includes, sorts, **opts) ⇒ Object
- #resolve(scope) ⇒ Object
- #sideload_name_arr(query) ⇒ Object
- #typecast(name, value, flag) ⇒ Object
Methods included from Extensions::Resources::Rel
Class Method Details
.custom_eagerload(sideload_name) ⇒ Object
34 35 36 |
# File 'lib/graphiti/active_graph/resource.rb', line 34 def self.custom_eagerload(sideload_name) sideload_config(sideload_name)&.custom_eagerload end |
.extra_attribute?(name) ⇒ Boolean
22 23 24 |
# File 'lib/graphiti/active_graph/resource.rb', line 22 def self.extra_attribute?(name) extra_attributes.has_key?(name) end |
.guard_nil_id!(params) ⇒ Object
19 20 |
# File 'lib/graphiti/active_graph/resource.rb', line 19 def self.guard_nil_id!(params) end |
.sideload_config(sideload_name) ⇒ Object
26 27 28 |
# File 'lib/graphiti/active_graph/resource.rb', line 26 def self.sideload_config(sideload_name) config[:sideloads][sideload_name] end |
.sideload_resource_class(sideload_name) ⇒ Object
30 31 32 |
# File 'lib/graphiti/active_graph/resource.rb', line 30 def self.sideload_resource_class(sideload_name) sideload_config(sideload_name)&.resource_class end |
.use_uuid ⇒ Object
12 13 14 15 16 17 |
# File 'lib/graphiti/active_graph/resource.rb', line 12 def self.use_uuid define_singleton_method(:inherited) do |klass| super(klass) klass.attribute :id, :uuid end end |
Instance Method Details
#all_models ⇒ Object
87 88 89 |
# File 'lib/graphiti/active_graph/resource.rb', line 87 def all_models polymorphic? ? self.class.children.map(&:model) : [model] end |
#authorize_scope_params ⇒ Object
83 84 85 |
# File 'lib/graphiti/active_graph/resource.rb', line 83 def {} end |
#build_scope(base, query, opts = {}) ⇒ Object
42 43 44 |
# File 'lib/graphiti/active_graph/resource.rb', line 42 def build_scope(base, query, opts = {}) scoping_class.new(base, self, query, opts) end |
#extra_attribute?(name) ⇒ Boolean
38 39 40 |
# File 'lib/graphiti/active_graph/resource.rb', line 38 def extra_attribute?(name) self.class.extra_attribute?(name) end |
#handle_includes(scope, includes, sorts, **opts) ⇒ Object
46 47 48 49 50 |
# File 'lib/graphiti/active_graph/resource.rb', line 46 def handle_includes(scope, includes, sorts, **opts) includes_str = JSONAPI::IncludeDirective.new(includes, retain_rel_limit: true).to_string.split(',') = opts.merge(max_page_size:).merge!() scope.with_ordered_associations(includes_str, sorts, ) end |
#resolve(scope) ⇒ Object
56 57 58 |
# File 'lib/graphiti/active_graph/resource.rb', line 56 def resolve(scope) adapter.resolve(scope, relation_resource?) end |
#sideload_name_arr(query) ⇒ Object
52 53 54 |
# File 'lib/graphiti/active_graph/resource.rb', line 52 def sideload_name_arr(query) query.sideloads.keys.map(&:to_sym) end |
#typecast(name, value, flag) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/graphiti/active_graph/resource.rb', line 60 def typecast(name, value, flag) att = get_attr!(name, flag, request: true) # in case of attribute is not declared on resource # do not throw error, return original value without typecast return value unless att type_name = att[:type] if flag == :filterable type_name = filters[name][:type] end type = Graphiti::Types[type_name] return if value.nil? && type[:kind] != "array" begin flag = :read if flag == :readable flag = :write if flag == :writable flag = :params if [:sortable, :filterable].include?(flag) type[flag][value] rescue => e raise Errors::TypecastFailed.new(self, name, value, e, type_name) end end |