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 =
[:as_literal, :as_nil, :reject].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},
    belongs_to_resource_ids_by_default: {
      default: :foreign_key,
      values: BELONGS_TO_RESOURCE_IDS_MODES,
      invalid: ->(klass, value) { Errors::InvalidBelongsToResourceIds.new(klass, value) }
    }
  },
  filters: {
    filters_blanks_by_default: {
      default: :as_literal,
      values: BLANK_MODES,
      invalid: ->(klass, value) { Errors::InvalidFilterBlanks.new(klass, :filters_blanks_by_default, 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



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

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

#all_attributesObject



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

def all_attributes
  self.class.all_attributes
end

#attributesObject



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

def attributes
  self.class.attributes
end

#default_filtersObject



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

def default_filters
  self.class.default_filters
end

#extra_attributesObject



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

def extra_attributes
  self.class.extra_attributes
end

#filtersObject



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

def filters
  self.class.filters
end

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



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

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



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

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

#grouped_filtersObject



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

def grouped_filters
  self.class.grouped_filters
end

#paginationObject



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

def pagination
  self.class.pagination
end

#sort_allObject



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

def sort_all
  self.class.sort_all
end

#sortsObject



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

def sorts
  self.class.sorts
end

#statsObject



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

def stats
  self.class.stats
end