From d9ef54a998ac391b3ef3989637c64a0785e69ed3 Mon Sep 17 00:00:00 2001 From: ezekg Date: Thu, 22 Dec 2016 08:58:32 -0600 Subject: [PATCH 1/3] Add library configuration object Implements a global configuration object so that we can conditionally register things such as the renderer, parameter parser and mime type. --- lib/jsonapi/rails/configuration.rb | 19 +++++++++++++++ lib/jsonapi/rails/railtie.rb | 21 ++++++++++------ spec/config_spec.rb | 39 ++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 lib/jsonapi/rails/configuration.rb create mode 100644 spec/config_spec.rb diff --git a/lib/jsonapi/rails/configuration.rb b/lib/jsonapi/rails/configuration.rb new file mode 100644 index 0000000..de11b77 --- /dev/null +++ b/lib/jsonapi/rails/configuration.rb @@ -0,0 +1,19 @@ +module JSONAPI + module Rails + class Configuration < ActiveSupport::InheritableOptions; end + + DEFAULT_CONFIG = { + register_parameter_parser: true, + register_mime_type: true, + register_renderers: true + }.freeze + + def self.configure(&block) + yield config + end + + def self.config + @config ||= JSONAPI::Rails::Configuration.new(DEFAULT_CONFIG) + end + end +end diff --git a/lib/jsonapi/rails/railtie.rb b/lib/jsonapi/rails/railtie.rb index 374e6f3..4813a3c 100644 --- a/lib/jsonapi/rails/railtie.rb +++ b/lib/jsonapi/rails/railtie.rb @@ -2,6 +2,7 @@ require 'action_controller' require 'active_support' +require 'jsonapi/rails/configuration' require 'jsonapi/rails/parser' require 'jsonapi/rails/renderer' @@ -20,16 +21,22 @@ class Railtie < ::Rails::Railtie require 'jsonapi/rails/action_controller' include ::JSONAPI::Rails::ActionController - Mime::Type.register MEDIA_TYPE, :jsonapi + if JSONAPI::Rails.config.register_mime_type + Mime::Type.register MEDIA_TYPE, :jsonapi + end - if ::Rails::VERSION::MAJOR >= 5 - ::ActionDispatch::Request.parameter_parsers[:jsonapi] = PARSER - else - ::ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime[:jsonapi]] = PARSER + if JSONAPI::Rails.config.register_parameter_parser + if ::Rails::VERSION::MAJOR >= 5 + ::ActionDispatch::Request.parameter_parsers[:jsonapi] = PARSER + else + ::ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime[:jsonapi]] = PARSER + end end - RENDERERS.each do |key, renderer| - ::ActionController::Renderers.add(key, &renderer) + if JSONAPI::Rails.config.register_renderers + RENDERERS.each do |key, renderer| + ::ActionController::Renderers.add(key, &renderer) + end end JSONAPI::Deserializable::Resource.configure do |config| diff --git a/spec/config_spec.rb b/spec/config_spec.rb new file mode 100644 index 0000000..64bfc36 --- /dev/null +++ b/spec/config_spec.rb @@ -0,0 +1,39 @@ +require 'rails_helper' + +RSpec.describe JSONAPI::Rails.config do + context 'when the default configuration is used' do + it 'should register the jsonapi parameter parser' do + expect(JSONAPI::Rails.config.register_parameter_parser).to be true + end + + it 'should register the jsonapi mime type' do + expect(JSONAPI::Rails.config.register_mime_type).to be true + end + + it 'should register the jsonapi renderers' do + expect(JSONAPI::Rails.config.register_renderers).to be true + end + end + + context 'when a custom configuration is used' do + before do + JSONAPI::Rails.configure do |config| + config.register_parameter_parser = false + config.register_mime_type = false + config.register_renderers = false + end + end + + it 'should not register the jsonapi parameter parser' do + expect(JSONAPI::Rails.config.register_parameter_parser).to be false + end + + it 'should not register the jsonapi mime type' do + expect(JSONAPI::Rails.config.register_mime_type).to be false + end + + it 'should not register the jsonapi renderers' do + expect(JSONAPI::Rails.config.register_renderers).to be false + end + end +end From 7ff5275911c0a8da8a23d6335007e2d2d741e81c Mon Sep 17 00:00:00 2001 From: Lucas Hosseini Date: Tue, 25 Jul 2017 10:23:20 +0200 Subject: [PATCH 2/3] Update configuration.rb --- lib/jsonapi/rails/configuration.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jsonapi/rails/configuration.rb b/lib/jsonapi/rails/configuration.rb index de11b77..acf4ec6 100644 --- a/lib/jsonapi/rails/configuration.rb +++ b/lib/jsonapi/rails/configuration.rb @@ -8,7 +8,7 @@ class Configuration < ActiveSupport::InheritableOptions; end register_renderers: true }.freeze - def self.configure(&block) + def self.configure yield config end From 4572df42a26f31c1065006279b2e0632673202db Mon Sep 17 00:00:00 2001 From: Lucas Hosseini Date: Tue, 25 Jul 2017 10:25:50 +0200 Subject: [PATCH 3/3] Update config_spec.rb --- spec/config_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/config_spec.rb b/spec/config_spec.rb index 64bfc36..67ec9c3 100644 --- a/spec/config_spec.rb +++ b/spec/config_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -RSpec.describe JSONAPI::Rails.config do +describe JSONAPI::Rails.config do context 'when the default configuration is used' do it 'should register the jsonapi parameter parser' do expect(JSONAPI::Rails.config.register_parameter_parser).to be true