module Graphiti::Resource::Configuration

Constants

DEFAULT_MAX_PAGE_SIZE

Attributes

config[W]

Public Class Methods

inherited(klass) click to toggle source
Calls superclass method
# File lib/graphiti/resource/configuration.rb, line 102
def self.inherited(klass)
  super
  klass.config = Util::Hash.deep_dup(config)
  klass.adapter ||= Adapters::Abstract
  klass.max_page_size ||= DEFAULT_MAX_PAGE_SIZE
  # re-assigning causes a new Class.new
  klass.serializer = (klass.serializer || klass.infer_serializer_superclass)
  klass.type ||= klass.infer_type
  klass.graphql_entrypoint = klass.type.to_s.pluralize.to_sym
  default(klass, :attributes_readable_by_default, true)
  default(klass, :attributes_writable_by_default, true)
  default(klass, :attributes_sortable_by_default, true)
  default(klass, :attributes_filterable_by_default, true)
  default(klass, :attributes_schema_by_default, true)
  default(klass, :relationships_readable_by_default, true)
  default(klass, :relationships_writable_by_default, true)
  default(klass, :filters_accept_nil_by_default, false)
  default(klass, :filters_deny_empty_by_default, false)

  unless klass.config[:attributes][:id]
    klass.attribute :id, :integer_id
  end
  klass.stat total: [:count]

  if defined?(::Rails) && ::Rails.env.development?
    # Avoid adding dupe resources when re-autoloading
    Graphiti.resources.reject! { |r| r.name == klass.name }
  end
  Graphiti.resources << klass
end

Public Instance Methods

abstract_class() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 150
def abstract_class
  @abstract_class
end
abstract_class=(val) click to toggle source
# File lib/graphiti/resource/configuration.rb, line 154
def abstract_class=(val)
  if (@abstract_class = val)
    self.serializer = nil
    self.type = nil
    self.graphql_entrypoint = nil
  end
end
abstract_class?() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 146
def abstract_class?
  !!abstract_class
end
adapter() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 274
def adapter
  @adapter ||= self.class.adapter.new(self)
end
all_attributes() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 228
def all_attributes
  attributes.merge(extra_attributes)
end
attributes() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 220
def attributes
  config[:attributes]
end
config() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 199
def config
  @config ||=
    {
      filters: {},
      grouped_filters: {},
      default_filters: {},
      stats: {},
      sort_all: nil,
      sorts: {},
      pagination: nil,
      after_graph_persist: {},
      before_commit: {},
      after_commit: {},
      attributes: {},
      extra_attributes: {},
      sideloads: {},
      callbacks: {},
      links: {}
    }
end
default(object, attr, value) click to toggle source
# File lib/graphiti/resource/configuration.rb, line 191
def default(object, attr, value)
  prior = object.send(attr)
  unless prior || prior == false
    object.send(:"#{attr}=", value)
  end
end
default_filters() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 256
def default_filters
  config[:default_filters]
end
extra_attributes() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 224
def extra_attributes
  config[:extra_attributes]
end
filters() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 236
def filters
  config[:filters]
end
get_attr(name, flag, opts = {}) click to toggle source
# File lib/graphiti/resource/configuration.rb, line 140
def get_attr(name, flag, opts = {})
  defaults = {request: false}
  opts = defaults.merge(opts)
  new.get_attr(name, flag, **opts)
end
get_attr!(name, flag, opts = {}) click to toggle source
# File lib/graphiti/resource/configuration.rb, line 135
def get_attr!(name, flag, opts = {})
  opts[:raise_error] = true
  get_attr(name, flag, opts)
end
grouped_filters() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 240
def grouped_filters
  config[:grouped_filters]
end
infer_model() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 170
def infer_model
  name&.sub(/.*\KResource/, "")&.safe_constantize
end
infer_serializer_superclass() click to toggle source

@api private

# File lib/graphiti/resource/configuration.rb, line 175
def infer_serializer_superclass
  serializer_class = ::Graphiti::Serializer
  namespace = Util::Class.namespace_for(self)
  app_serializer = "#{namespace}::ApplicationSerializer"
    .safe_constantize
  app_serializer ||= "ApplicationSerializer".safe_constantize

  if app_serializer
    if app_serializer.ancestors.include?(serializer_class)
      serializer_class = app_serializer
    end
  end

  serializer_class
end
infer_type() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 162
def infer_type
  if name.present?
    name.demodulize.sub(/.*\KResource/, "").underscore.pluralize.to_sym
  else
    :undefined_jsonapi_type
  end
end
pagination() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 252
def pagination
  config[:pagination]
end
sideloads() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 232
def sideloads
  config[:sideloads]
end
sort_all() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 286
def sort_all
  self.class.sort_all
end
sorts() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 244
def sorts
  config[:sorts]
end
stats() click to toggle source
# File lib/graphiti/resource/configuration.rb, line 248
def stats
  config[:stats]
end