Module: RESTFramework

Defined in:
lib/rest_framework.rb,
lib/rest_framework/version.rb

Defined Under Namespace

Modules: Errors, Filters, Generators, Mixins, Paginators, Serializers, Utils, Version Classes: Config, Engine

Constant Summary collapse

BUILTIN_ACTIONS =
{
  index: :get,
  new: :get,
  create: :post,
}.freeze
BUILTIN_MEMBER_ACTIONS =
{
  show: :get,
  edit: :get,
  update: [ :put, :patch ].freeze,
  destroy: :delete,
}.freeze
RRF_BUILTIN_ACTIONS =
{
  options: :options,
}.freeze
RRF_BUILTIN_BULK_ACTIONS =
{
  update_all: [ :put, :patch ].freeze,
  destroy_all: :delete,
}.freeze
EXTRA_ACTION_ROUTES =

Storage for extra routes and associated metadata.

Set.new
ROUTE_METADATA =
{}
EXTERNAL_CSS_NAME =

We put most vendored external assets into these files to make precompilation and serving faster.

"rest_framework/external.min.css"
EXTERNAL_JS_NAME =
"rest_framework/external.min.js"
EXTERNAL_ASSETS =

We should always add the .min extension prefix even if the assets are not minified, to avoid sprockets minifying the assets. We target propshaft, so we want these assets to just be passed through. rubocop:disable Layout/LineLength

{
  # Bootstrap
  "bootstrap.min.css" => {
    url: "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css",
    sri: "sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH",
  },
  "bootstrap.min.js" => {
    url: "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js",
    sri: "sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz",
  },

  # Bootstrap Icons
  "bootstrap-icons.min.css" => {
    url: "https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css",
    inline_fonts: true,
  },

  # Highlight.js
  "highlight.min.js" => {
    url: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.0/highlight.min.js",
    sri: "sha512-6QBAC6Sxc4IF04SvIg0k78l5rP5YgVjmHX2NeArelbxM3JGj4imMqfNzEta3n+mi7iG3nupdLnl3QrbfjdXyTg==",
  },
  "highlight-json.min.js" => {
    url: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.0/languages/json.min.js",
    sri: "sha512-8JO7/pRnd1Ce8OBXWQg85e5wNPJdBaQdN8w4oDa+HelMXaLwCxTdbzdWHmJtWR9AmcI6dOln4FS5/KrzpxqqfQ==",
  },
  "highlight-xml.min.js" => {
    url: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.0/languages/xml.min.js",
    sri: "sha512-/vq6wbS2Qkv8Hj4mP3Jd/m6MbnIrquzZiUt9tIluQfe332IQeFDrSIK7j2cjAyn6/9Ntb2WMPbo1CAxu26NViA==",
  },
  "highlight-a11y-dark.min.css" => {
    url: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.0/styles/a11y-dark.min.css",
    sri: "sha512-Vj6gPCk8EZlqnoveEyuGyYaWZ1+jyjMPg8g4shwyyNlRQl6d3L9At02ZHQr5K6s5duZl/+YKMnM3/8pDhoUphg==",
    extra_tag_attrs: { class: "rrf-dark-mode" },
  },
  "highlight-a11y-light.min.css" => {
    url: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.0/styles/a11y-light.min.css",
    sri: "sha512-WDk6RzwygsN9KecRHAfm9HTN87LQjqdygDmkHSJxVkVI7ErCZ8ZWxP6T8RvBujY1n2/E4Ac+bn2ChXnp5rnnHA==",
    extra_tag_attrs: { class: "rrf-light-mode" },
  },

  # NeatJSON
  "neatjson.min.js" => {
    url: "https://cdn.jsdelivr.net/npm/[email protected]/javascript/neatjson.min.js",
    exclude_from_docs: true,
  },

  # Trix
  "trix.min.css" => {
    url: "https://unpkg.com/[email protected]/dist/trix.css",
    exclude_from_docs: true,
  },
  "trix.min.js" => {
    url: "https://unpkg.com/[email protected]/dist/trix.umd.min.js",
    exclude_from_docs: true,
  },
}.map { |name, cfg|
  ext = File.extname(name)
  if ext == ".js"
    cfg[:place] = "javascripts"
    cfg[:extra_tag_attrs] ||= {}
    cfg[:tag_attrs] = {
      src: cfg[:url],
      integrity: cfg[:sri],
      crossorigin: "anonymous",
      referrerpolicy: "no-referrer",
      defer: true,
      **cfg[:extra_tag_attrs],
    }
    cfg[:tag] = ActionController::Base.helpers.tag.script(**cfg[:tag_attrs])
  elsif ext == ".css"
    cfg[:place] = "stylesheets"
    cfg[:extra_tag_attrs] ||= {}
    cfg[:tag_attrs] = {
      rel: "stylesheet",
      href: cfg[:url],
      integrity: cfg[:sri],
      crossorigin: "anonymous",
      **cfg[:extra_tag_attrs],
    }
    cfg[:tag] = ActionController::Base.helpers.tag.link(**cfg[:tag_attrs])
  else
    raise "Unknown asset extension: #{ext}."
  end

  [ name, cfg ]
}.to_h.freeze
EXTERNAL_UNSUMMARIZED_ASSETS =

rubocop:enable Layout/LineLength

EXTERNAL_ASSETS.select { |_, cfg| cfg[:extra_tag_attrs].present? }
VERSION =
Version.get_version
BaseError =

Alias for convenience.

RESTFramework::Errors::BaseError
BaseFilter =

Alias for convenience.

RESTFramework::Filters::BaseFilter
QueryFilter =

Alias for convenience.

RESTFramework::Filters::QueryFilter
SearchFilter =

Alias for convenience.

RESTFramework::Filters::SearchFilter
RansackFilter =

Alias for convenience.

RESTFramework::Filters::RansackFilter
OrderingFilter =

Alias for convenience.

RESTFramework::Filters::OrderingFilter
BasePaginator =

Alias for convenience.

RESTFramework::Paginators::BasePaginator
UnknownModelError =

Alias for convenience.

RESTFramework::Errors::UnknownModelError
BaseSerializer =

Alias for convenience.

RESTFramework::Serializers::BaseSerializer
BaseControllerMixin =

Alias for convenience.

RESTFramework::Mixins::BaseControllerMixin
BaseModelControllerMixin =

Aliases for convenience.

RESTFramework::Mixins::BaseModelControllerMixin
ListModelMixin =
RESTFramework::Mixins::ListModelMixin
ShowModelMixin =
RESTFramework::Mixins::ShowModelMixin
CreateModelMixin =
RESTFramework::Mixins::CreateModelMixin
UpdateModelMixin =
RESTFramework::Mixins::UpdateModelMixin
DestroyModelMixin =
RESTFramework::Mixins::DestroyModelMixin
ReadOnlyModelControllerMixin =
RESTFramework::Mixins::ReadOnlyModelControllerMixin
ModelControllerMixin =
RESTFramework::Mixins::ModelControllerMixin
NativeSerializer =

Alias for convenience.

RESTFramework::Serializers::NativeSerializer
PageNumberPaginator =

Alias for convenience.

RESTFramework::Paginators::PageNumberPaginator
BulkCreateModelMixin =

Aliases for convenience.

RESTFramework::Mixins::BulkCreateModelMixin
BulkUpdateModelMixin =
RESTFramework::Mixins::BulkUpdateModelMixin
BulkDestroyModelMixin =
RESTFramework::Mixins::BulkDestroyModelMixin
BulkModelControllerMixin =
RESTFramework::Mixins::BulkModelControllerMixin
NilPassedToRenderAPIError =

Alias for convenience.

RESTFramework::Errors::NilPassedToRenderAPIError
ActiveModelSerializerAdapterFactory =

Alias for convenience. rubocop:disable Layout/LineLength

RESTFramework::Serializers::ActiveModelSerializerAdapterFactory

Class Method Summary collapse

Class Method Details

.configObject



194
195
196
# File 'lib/rest_framework.rb', line 194

def self.config
  @config ||= Config.new
end

.configure {|self.config| ... } ⇒ Object

Yields:



198
199
200
# File 'lib/rest_framework.rb', line 198

def self.configure
  yield(self.config)
end

.featuresObject



202
203
204
# File 'lib/rest_framework.rb', line 202

def self.features
  @features ||= {}
end