Module: RESTFramework

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

Defined Under Namespace

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

Constant Summary collapse

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/bootstrap@5.3.7/dist/css/bootstrap.min.css",
    sri: "sha384-LN+7fdVzj6u52u30Kp6M/trliBMCMKTyK833zpbD+pXdCLuTusPj697FH4R/5mcr",
  },
  "bootstrap.min.js" => {
    url: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js",
    sri: "sha384-ndDqU0Gzau9qJ1lfW4pNLlhNTkCfHzAVBReH9diLvGRem5+R9g2FzA8ZGN954O5Q",
  },

  # Bootstrap Icons
  "bootstrap-icons.min.css" => {
    url: "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css",
    sri: "sha384-XGjxtQfXaH2tnPFa9x+ruJTuLE3Aa6LhHSWRr1XeTyhezb4abCG4ccI5AkVDxqC+",
    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. The package publishes no minified build; jsdelivr's `neatjson.min.js` is synthesized
  # on the fly (so its bytes/SRI aren't stable), so we pin the published `neatjson.js` instead.
  "neatjson.min.js" => {
    url: "https://cdn.jsdelivr.net/npm/neatjson@0.10.6/javascript/neatjson.js",
    sri: "sha384-7yRMvyGBuBnnlsgFwUDx7wY7Y/kXt7Irg5xppXVAI0yp3R0870lWaXNP/JE2rbFA",
    exclude_from_docs: true,
  },

  # Trix
  "trix.min.css" => {
    url: "https://unpkg.com/trix@2.0.8/dist/trix.css",
    sri: "sha384-Cgg84c/W0Q5VrTzc4ITmV88Ocx4Pn1YlTXPvSTJjX6+lxJRLYrZ4chaighxlqOY1",
    exclude_from_docs: true,
  },
  "trix.min.js" => {
    url: "https://unpkg.com/trix@2.0.8/dist/trix.umd.min.js",
    sri: "sha384-Ki3zDe3whjAHK/GOksrYLGCU8m0SkmiJQ4Kqm3jQlM3YCl2hFBf17s9bzjVYmXWX",
    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? }
BaseError =

Aliases for convenience.

RESTFramework::Errors::BaseError
NilPassedToRenderAPIError =
RESTFramework::Errors::NilPassedToRenderAPIError
InvalidBulkParametersError =
RESTFramework::Errors::InvalidBulkParametersError
DelegatedMethodError =
RESTFramework::Errors::DelegatedMethodError
BulkRecordErrorsError =
RESTFramework::Errors::BulkRecordErrorsError
VERSION =
Version.get_version(skip_git: true)
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
BaseSerializer =

Alias for convenience.

RESTFramework::Serializers::BaseSerializer
NativeSerializer =

Alias for convenience.

RESTFramework::Serializers::NativeSerializer
PageNumberPaginator =

Alias for convenience.

RESTFramework::Paginators::PageNumberPaginator
ActiveModelSerializerAdapterFactory =

Alias for convenience. rubocop:disable Layout/LineLength

RESTFramework::Serializers::ActiveModelSerializerAdapterFactory

Class Method Summary collapse

Class Method Details

.configObject



174
175
176
# File 'lib/rest_framework.rb', line 174

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

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

Yields:



178
179
180
# File 'lib/rest_framework.rb', line 178

def self.configure
  yield(self.config)
end

.deprecatorObject



186
187
188
# File 'lib/rest_framework.rb', line 186

def self.deprecator
  @deprecator ||= ActiveSupport::Deprecation.new("2.0", "REST Framework")
end

.featuresObject



182
183
184
# File 'lib/rest_framework.rb', line 182

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