Module: Graphiti::Resource::Configuration

Extended by:
ActiveSupport::Concern
Included in:
Graphiti::Resource
Defined in:
lib/graphiti/resource/configuration.rb

Defined Under Namespace

Modules: Overrides

Constant Summary collapse

DEFAULT_MAX_PAGE_SIZE =
1_000
[true, false, :on_demand].freeze
BELONGS_TO_RESOURCE_IDS_MODES =
[:foreign_key, :always, :never].freeze
BLANK_MODES =
[:literal, :null, :rejected].freeze
SETTING_GROUPS =

Grouped for the ApplicationResource the install generator writes.

{ # :nodoc:
  attributes: {
    attributes_readable_by_default: {default: true},
    attributes_writable_by_default: {default: true},
    attributes_sortable_by_default: {default: true},
    attributes_filterable_by_default: {default: true},
    attributes_schema_by_default: {default: true},
    typecast_reads: {default: true}
  },
  relationships: {
    relationships_readable_by_default: {default: true},
    relationships_writable_by_default: {default: true},
    relationship_placeholders: {default: false, note: "render placeholders for relationships with no ids and no link"},
    belongs_to_resource_ids_by_default: {
      default: :foreign_key,
      values: BELONGS_TO_RESOURCE_IDS_MODES,
      invalid: ->(klass, value) { Errors::InvalidBelongsToResourceIds.new(klass, value) }
    }
  },
  filters: {
    filter_blanks_treated_as: {
      default: :literal,
      values: BLANK_MODES,
      invalid: ->(klass, value) { Errors::InvalidFilterBlanks.new(klass, :filter_blanks_treated_as, value) }
    }
  },
  sorting: {
    default_sort: {default: nil, note: "per resource, e.g. [{id: :desc}]"}
  },
  pagination: {
    page_default_size: {default: nil, note: "unset falls back to 20"},
    page_max_size: {default: DEFAULT_MAX_PAGE_SIZE, format: "1_000"},
    page_cursors: {default: false, note: "render cursors for pagination"},
    page_links: {
      default: false,
      values: LINK_MODES,
      invalid: ->(klass, value) { Errors::InvalidLinkRendering.new(klass, :page_links, value) }
    }
  },
  endpoints: {
    validate_requests: {default: true, note: "refuse requests to undeclared endpoints"}
  },
  links: {
    relationship_links: {
      default: true,
      values: LINK_MODES,
      invalid: ->(klass, value) { Errors::InvalidLinkRendering.new(klass, :relationship_links, value) }
    },
    validate_links: {default: true, note: "refuse to render links to unroutable endpoints"}
  }
}.freeze
SETTINGS =

:nodoc:

SETTING_GROUPS.values.reduce(:merge).freeze

Instance Method Summary collapse

Instance Method Details

#adapterObject



375
376
377
# File 'lib/graphiti/resource/configuration.rb', line 375

def adapter
  @adapter ||= self.class.adapter.new(self)
end

#all_attributesObject



411
412
413
# File 'lib/graphiti/resource/configuration.rb', line 411

def all_attributes
  self.class.all_attributes
end

#attributesObject



403
404
405
# File 'lib/graphiti/resource/configuration.rb', line 403

def attributes
  self.class.attributes
end

#default_filtersObject



415
416
417
# File 'lib/graphiti/resource/configuration.rb', line 415

def default_filters
  self.class.default_filters
end

#extra_attributesObject



407
408
409
# File 'lib/graphiti/resource/configuration.rb', line 407

def extra_attributes
  self.class.extra_attributes
end

#filtersObject



379
380
381
# File 'lib/graphiti/resource/configuration.rb', line 379

def filters
  self.class.filters
end

#get_attr(name, flag, request: false, raise_error: false) ⇒ Object



371
372
373
# File 'lib/graphiti/resource/configuration.rb', line 371

def get_attr(name, flag, request: false, raise_error: false)
  Util::AttributeCheck.run(self, name, flag, request, raise_error)
end

#get_attr!(name, flag, options = {}) ⇒ Object



366
367
368
369
# File 'lib/graphiti/resource/configuration.rb', line 366

def get_attr!(name, flag, options = {})
  options[:raise_error] = true
  get_attr(name, flag, **options)
end

#grouped_filtersObject



383
384
385
# File 'lib/graphiti/resource/configuration.rb', line 383

def grouped_filters
  self.class.grouped_filters
end

#paginationObject



399
400
401
# File 'lib/graphiti/resource/configuration.rb', line 399

def pagination
  self.class.pagination
end

#sort_allObject



387
388
389
# File 'lib/graphiti/resource/configuration.rb', line 387

def sort_all
  self.class.sort_all
end

#sortsObject



391
392
393
# File 'lib/graphiti/resource/configuration.rb', line 391

def sorts
  self.class.sorts
end

#statsObject



395
396
397
# File 'lib/graphiti/resource/configuration.rb', line 395

def stats
  self.class.stats
end