Spec-Zone.ru › Ruby on Rails 5.0

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

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

fetch_type_metadata(sql_type) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 67
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, column = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 9
      def quote(value, column = nil)
        # records are quoted as their primary key
        return value.quoted_id if value.respond_to?(:quoted_id)

        if column
          ActiveSupport::Deprecation.warn("            Passing a column to `quote` has been deprecated. It is only used
            for type casting, which should be handled elsewhere. See
            https://github.com/rails/arel/commit/6160bfbda1d1781c3b08a33ec4955f170e95be11
            for more information.
".squish)
          value = type_cast_from_column(column, value)
        end

        _quote(value)
      end

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

quote_column_name(column_name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 85
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 80
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 90
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 102
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 133
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 123
def quoted_false
  "'f'".freeze
end
quoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 115
def quoted_true
  "'t'".freeze
end
type_cast(value, column = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 29
def type_cast(value, column = nil)
  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 127
def unquoted_false
  'f'.freeze
end
unquoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 119
def unquoted_true
  't'.freeze
end

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

Spec-Zone.ru

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