module Shoulda::Matchers::RailsShim
@private
Public Class Methods
Source
# File lib/shoulda/matchers/rails_shim.rb, line 6 def action_pack_version Gem::Version.new(::ActionPack::VERSION::STRING) rescue NameError Gem::Version.new('0') end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 28 def active_model_lt_7? Gem::Requirement.new('< 7').satisfied_by?(active_model_version) end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 24 def active_model_st_6_1? Gem::Requirement.new('< 6.1').satisfied_by?(active_model_version) end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 18 def active_model_version Gem::Version.new(::ActiveModel::VERSION::STRING) rescue NameError Gem::Version.new('0') end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 12 def active_record_version Gem::Version.new(::ActiveRecord::VERSION::STRING) rescue NameError Gem::Version.new('0') end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 72 def attribute_serialization_coder_for(model, attribute_name) serialized_attributes_for(model)[attribute_name.to_s] end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 131 def attribute_type_for(model, attribute_name) attribute_types_for(model)[attribute_name.to_s] rescue NotImplementedError if model.respond_to?(:type_for_attribute) model.type_for_attribute(attribute_name) else FakeAttributeType.new(model, attribute_name) end end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 117 def attribute_types_for(model) if model.respond_to?(:attribute_types) model.attribute_types elsif model.respond_to?(:type_for_attribute) model.columns.inject({}) do |hash, column| key = column.name.to_s value = model.type_for_attribute(column.name) hash.merge!(key => value) end else raise NotImplementedError end end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 97 def digestible_attributes_in(record) record.methods.inject([]) do |array, method_name| match = method_name.to_s.match( /\A(\w+)_(?:confirmation|digest)=\Z/, ) if match array.concat([match[1].to_sym]) else array end end end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 32 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 rescue RangeError simply_generate_validation_message( attribute, type, model_name, options, ) end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 88 def has_secure_password?(record, attribute_name) if secure_password_module attribute_name == :password && record.class.ancestors.include?(secure_password_module) else record.respond_to?("authenticate_#{attribute_name}") end end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 80 def parent_of(mod) if mod.respond_to?(:module_parent) mod.module_parent else mod.parent end end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 111 def secure_password_module ::ActiveModel::SecurePassword::InstanceMethodsOnActivation rescue NameError nil end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 58 def serialized_attributes_for(model) type_serialized_defined = Object.const_defined?('ActiveRecord::Type::Serialized') attribute_types_for(model). inject({}) do |hash, (attribute_name, attribute_type)| if type_serialized_defined && attribute_type.is_a?(::ActiveRecord::Type::Serialized) hash.merge!(attribute_name => attribute_type.coder) else hash end end rescue NotImplementedError {} end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 141 def supports_full_attributes_api?(model) defined?(::ActiveModel::Attributes) && model.respond_to?(:attribute_types) end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 146 def validates_column_options? Gem::Requirement.new('>= 7.1.0').satisfied_by?(active_record_version) end
Source
# File lib/shoulda/matchers/rails_shim.rb, line 76 def verb_for_update :patch end
Private Class Methods
Source
# File lib/shoulda/matchers/rails_shim.rb, line 152 def simply_generate_validation_message( attribute, type, model_name, options ) default_translation_keys = [ :"activemodel.errors.models.#{model_name}.attributes.#{attribute} .#{type}", :"activemodel.errors.models.#{model_name}.#{type}", :"activemodel.errors.messages.#{type}", :"activerecord.errors.models.#{model_name}.attributes.#{attribute} .#{type}", :"activerecord.errors.models.#{model_name}.#{type}", :"activerecord.errors.messages.#{type}", :"errors.attributes.#{attribute}.#{type}", :"errors.messages.#{type}", ] primary_translation_key = default_translation_keys.shift translate_options = { default: default_translation_keys }.merge!(options) I18n.translate(primary_translation_key, translate_options) end