module Shoulda::Matchers::RailsShim
@private
Public Class Methods
action_pack_gte_4_1?()
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 6 def action_pack_gte_4_1? Gem::Requirement.new('>= 4.1').satisfied_by?(action_pack_version) end
action_pack_gte_5?()
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 10 def action_pack_gte_5? Gem::Requirement.new('>= 5').satisfied_by?(action_pack_version) end
action_pack_lt_5?()
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 14 def action_pack_lt_5? Gem::Requirement.new('< 5').satisfied_by?(action_pack_version) end
action_pack_version()
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 18 def action_pack_version Gem::Version.new(::ActionPack::VERSION::STRING) rescue NameError Gem::Version.new('0') end
active_record_major_version()
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 24 def active_record_major_version ::ActiveRecord::VERSION::MAJOR rescue NameError Gem::Version.new('0') end
digestible_attributes_in(record)
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 127 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
generate_validation_message( record, attribute, type, model_name, options )
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 30 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
has_secure_password?(record, attribute_name)
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 118 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
make_controller_request(context, verb, action, request_params)
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 56 def make_controller_request(context, verb, action, request_params) params = if action_pack_gte_5? { params: request_params } else request_params end context.__send__(verb, action,**params) end
parent_of(mod)
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 110 def parent_of(mod) if mod.respond_to?(:module_parent) mod.module_parent else mod.parent end end
secure_password_module()
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 141 def secure_password_module ::ActiveModel::SecurePassword::InstanceMethodsOnActivation rescue NameError nil end
serialized_attributes_for(model)
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 67 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 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
tables_and_views(connection)
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 94 def tables_and_views(connection) if active_record_major_version >= 5 connection.data_sources else connection.tables end end
type_cast_default_for(model, column)
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 85 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
verb_for_update()
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 102 def verb_for_update if action_pack_gte_4_1? :patch else :put end end
Private Class Methods
simply_generate_validation_message( attribute, type, model_name, options )
click to toggle source
# File lib/shoulda/matchers/rails_shim.rb, line 149 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