Spec-Zone.ru › Ruby on Rails 5.1

модуль ActiveRecord::ConnectionAdapters::Quoting

Открытые методы экземпляра

fetch_type_metadata(sql_type) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 71
def fetch_type_metadata(sql_type)
  cast_type = lookup_cast_type(sql_type)
  SqlTypeMetadata.new(
    sql_type: sql_type,
    type: cast_type.type,
    limit: cast_type.limit,
    precision: cast_type.precision,
    scale: cast_type.scale,
  )
end
quote(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 9
def quote(value)
  value = id_value_for_database(value) if value.is_a?(Base)

  if value.respond_to?(:quoted_id)
    at = value.method(:quoted_id).source_location
    at &&= " at %s:%d" % at

    owner = value.method(:quoted_id).owner.to_s
    klass = value.class.to_s
    klass += "(#{owner})" unless owner == klass

    ActiveSupport::Deprecation.warn              "Defining #quoted_id is deprecated and will be ignored in Rails 5.2. (defined on #{klass}#{at})"
    return value.quoted_id
  end

  _quote(value)
end

Приводит значение столбца к кавычкам, чтобы предотвратить атаки типа SQL-инъекция.

quote_column_name(column_name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 89
def quote_column_name(column_name)
  column_name.to_s
end

Приводит имя столбца к кавычкам. По умолчанию кавычки не используются.

quote_string(s) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 84
def quote_string(s)
  s.gsub('\'.freeze, '\&\&'.freeze).gsub("'".freeze, "''".freeze) # ' (for ruby-mode)
end

Приводит строку к кавычкам, экранируя символы ' (одинарная кавычка) и \ (обратный слэш).

quote_table_name(table_name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 94
def quote_table_name(table_name)
  quote_column_name(table_name)
end

Приводит имя таблицы к кавычкам. По умолчанию используется приведение имени столбца к кавычкам.

quote_table_name_for_assignment(table, attr) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 106
def quote_table_name_for_assignment(table, attr)
  quote_table_name("#{table}.#{attr}")
end

Переопределяет метод для возвращения имени таблицы в кавычках для присваивания. По умолчанию используется приведение имени таблицы к кавычкам.

Это работает для mysql2, где table.column может использоваться для разрешения неоднозначности.

Мы переопределяем это в адаптерах sqlite3 и postgresql для использования только имени столбца (в соответствии с требованиями синтаксиса).

quoted_date(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 137
def quoted_date(value)
  if value.acts_like?(:time)
    zone_conversion_method = ActiveRecord::Base.default_timezone == :utc ? :getutc : :getlocal

    if value.respond_to?(zone_conversion_method)
      value = value.send(zone_conversion_method)
    end
  end

  result = value.to_s(:db)
  if value.respond_to?(:usec) && value.usec > 0
    "#{result}.#{sprintf("%06d", value.usec)}"
  else
    result
  end
end

Приводит дату/время к кавычкам для использования в SQL-вводе. Включает микросекунды, если значение является объектом Time и поддерживает usec.

quoted_false() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 127
def quoted_false
  "'f'".freeze
end
quoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 119
def quoted_true
  "'t'".freeze
end
type_cast(value, column = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 31
def type_cast(value, column = nil)
  value = id_value_for_database(value) if value.is_a?(Base)

  if value.respond_to?(:quoted_id) && value.respond_to?(:id)
    return value.id
  end

  if column
    value = type_cast_from_column(column, value)
  end

  _type_cast(value)
rescue TypeError
  to_type = column ? " to #{column.type}" : ""
  raise TypeError, "can't cast #{value.class}#{to_type}"
end

Преобразует значение в тип, понятный для базы данных. Например, SQLite не понимает даты, поэтому этот метод преобразует объект Date в String.

unquoted_false() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 131
def unquoted_false
  "f".freeze
end
unquoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 123
def unquoted_true
  "t".freeze
end

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API