rubygem-shoulda-matchers/rubygem-shoulda-matchers-3.1.2-Refactor-RailsShim.patch
2020-08-28 14:20:55 +08:00

207 lines
6.5 KiB
Diff

From 84069646544ce701e6864458378323e1e3361140 Mon Sep 17 00:00:00 2001
From: Elliot Winkler <elliot.winkler@gmail.com>
Date: Sun, 17 Sep 2017 14:33:33 -0500
Subject: [PATCH] Refactor RailsShim
* Satisfy Rubocop
* Alphabetize methods
* Use `class << self` instead of `self.` so that we can privatize one of
the methods
---
lib/shoulda/matchers/rails_shim.rb | 172 +++++++++++++++++++----------
1 file changed, 115 insertions(+), 57 deletions(-)
diff --git a/lib/shoulda/matchers/rails_shim.rb b/lib/shoulda/matchers/rails_shim.rb
index 471d9049..7aeab629 100644
--- a/lib/shoulda/matchers/rails_shim.rb
+++ b/lib/shoulda/matchers/rails_shim.rb
@@ -2,71 +2,137 @@ module Shoulda
module Matchers
# @private
class RailsShim
- def self.verb_for_update
- if action_pack_gte_4_1?
- :patch
- else
- :put
+ class << self
+ def action_pack_gte_4_1?
+ Gem::Requirement.new('>= 4.1').satisfied_by?(action_pack_version)
end
- end
- def self.type_cast_default_for(model, column)
- if model.respond_to?(:column_defaults)
- # Rails 4.2
- model.column_defaults[column.name]
- else
- column.default
+ def action_pack_version
+ Gem::Version.new(::ActionPack::VERSION::STRING)
+ end
+
+ def active_record_major_version
+ ::ActiveRecord::VERSION::MAJOR
end
- end
- def self.serialized_attributes_for(model)
- if defined?(::ActiveRecord::Type::Serialized)
- # Rails 5+
- model.columns.select do |column|
- model.type_for_attribute(column.name).is_a?(
- ::ActiveRecord::Type::Serialized,
+ def generate_validation_message(
+ record,
+ attribute,
+ type,
+ model_name,
+ options
+ )
+ if record && record.errors.respond_to?(:generate_message)
+ record.errors.generate_message(attribute.to_sym, type, options)
+ else
+ simply_generate_validation_message(
+ attribute,
+ type,
+ model_name,
+ options,
)
- end.inject({}) do |hash, column|
- hash[column.name.to_s] = model.type_for_attribute(column.name).coder
- hash
end
- else
- model.serialized_attributes
+ rescue RangeError
+ simply_generate_validation_message(
+ attribute,
+ type,
+ model_name,
+ options,
+ )
end
- end
- def self.generate_validation_message(record, attribute, type, model_name, options)
- if record && record.errors.respond_to?(:generate_message)
- record.errors.generate_message(attribute.to_sym, type, options)
- else
- simply_generate_validation_message(attribute, type, model_name, options)
+ def make_controller_request(context, verb, action, request_params)
+ params =
+ if active_record_major_version >= 5
+ { params: request_params }
+ else
+ request_params
+ end
+
+ context.__send__(verb, action, params)
end
- rescue RangeError
- simply_generate_validation_message(attribute, type, model_name, options)
- end
- def self.simply_generate_validation_message(attribute, type, model_name, options)
- default_translation_keys = [
- :"activerecord.errors.models.#{model_name}.#{type}",
- :"activerecord.errors.messages.#{type}",
- :"errors.attributes.#{attribute}.#{type}",
- :"errors.messages.#{type}"
- ]
- primary_translation_key = :"activerecord.errors.models.#{model_name}.attributes.#{attribute}.#{type}"
- translate_options = { default: default_translation_keys }.merge(options)
- I18n.translate(primary_translation_key, translate_options)
- end
+ def serialized_attributes_for(model)
+ if defined?(::ActiveRecord::Type::Serialized)
+ # Rails 5+
+ serialized_columns = model.columns.select do |column|
+ model.type_for_attribute(column.name).is_a?(
+ ::ActiveRecord::Type::Serialized,
+ )
+ end
- def self.active_record_major_version
- ::ActiveRecord::VERSION::MAJOR
- end
+ serialized_columns.inject({}) do |hash, column|
+ hash[column.name.to_s] = model.type_for_attribute(column.name).coder
+ hash
+ end
+ else
+ model.serialized_attributes
+ end
+ end
+
+ def type_cast_default_for(model, column)
+ if model.respond_to?(:column_defaults)
+ # Rails 4.2
+ model.column_defaults[column.name]
+ else
+ column.default
+ end
+ end
+
+ def tables_and_views(connection)
+ if active_record_major_version >= 5
+ connection.data_sources
+ else
+ connection.tables
+ end
+ end
+
+ def verb_for_update
+ if action_pack_gte_4_1?
+ :patch
+ else
+ :put
+ end
+ end
+
+ private
- def self.action_pack_gte_4_1?
- Gem::Requirement.new('>= 4.1').satisfied_by?(action_pack_version)
+ def simply_generate_validation_message(
+ attribute,
+ type,
+ model_name,
+ options
+ )
+ default_translation_keys = [
+ :"activerecord.errors.models.#{model_name}.#{type}",
+ :"activerecord.errors.messages.#{type}",
+ :"errors.attributes.#{attribute}.#{type}",
+ :"errors.messages.#{type}",
+ ]
+ primary_translation_key = [
+ :activerecord,
+ :errors,
+ :models,
+ model_name,
+ :attributes,
+ attribute,
+ type,
+ ]
+ translate_options =
+ { default: default_translation_keys }.merge(options)
+ I18n.translate(primary_translation_key, translate_options)
+ end
end
- def self.action_pack_version
- Gem::Version.new(::ActionPack::VERSION::STRING)
+ def self.make_controller_request(context, verb, action, request_params)
+ params =
+ if active_record_major_version >= 5
+ { params: request_params }
+ else
+ request_params
+ end
+
+ context.__send__(verb, action, params)
end
end
end