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
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
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
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 112
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