Spec-Zone.ru › Ruby 2.4

модуль Digest::Instance

Этот модуль предоставляет методы экземпляра для объекта реализации дайджеста для вычисления значений дайджеста сообщения.

Публичные методы экземпляра

digest_obj << строка → digest_obj Показать исходный код
static VALUE
rb_digest_instance_update(VALUE self, VALUE str)
{
    rb_digest_instance_method_unimpl(self, "update");

    UNREACHABLE;
}

Обновляет дайджест, используя заданную строку, и возвращает self.

Метод update() и оператор левого сдвига переопределяются каждым подклассом реализации. (Один должен быть псевдонимом для другого)

digest_obj == другой_объект_дайджеста → boolean Показать исходный код
digest_obj == строка → boolean
static VALUE
rb_digest_instance_equal(VALUE self, VALUE other)
{
    VALUE str1, str2;

    if (rb_obj_is_kind_of(other, rb_mDigest_Instance) == Qtrue) {
        str1 = rb_digest_instance_digest(0, 0, self);
        str2 = rb_digest_instance_digest(0, 0, other);
    } else {
        str1 = rb_digest_instance_to_s(self);
        str2 = rb_check_string_type(other);
        if (NIL_P(str2)) return Qfalse;
    }

    /* never blindly assume that subclass methods return strings */
    StringValue(str1);
    StringValue(str2);

    if (RSTRING_LEN(str1) == RSTRING_LEN(str2) &&
        rb_str_cmp(str1, str2) == 0) {
        return Qtrue;
    }
    return Qfalse;
}

Если задана строка, проверяет, равна ли она значению хэш-кода объекта дайджеста в шестнадцатеричном формате. Если задан другой экземпляр дайджеста, проверяет, имеют ли они одинаковое значение хэш-кода. В противном случае возвращает false.

base64digest(str = nil) Показать исходный код
# File ext/digest/lib/digest.rb, line 67
def base64digest(str = nil)
  [str ? digest(str) : digest].pack('m0')
end

Если не задано значение, возвращает результирующее значение хэша дайджеста в кодировке base64, сохраняя состояние дайджеста.

Если задано string, возвращает значение хэша для данного string в кодировке base64, сбрасывая дайджест в исходное состояние до и после процесса.

В любом случае возвращаемое значение правильно дополняется символами '=' и не содержит символов перевода строки.

base64digest!() Показать исходный код
# File ext/digest/lib/digest.rb, line 73
def base64digest!
  [digest!].pack('m0')
end

Возвращает результирующее значение хэша и сбрасывает дайджест в начальное состояние.

block_length → целое число Показать исходный код
static VALUE
rb_digest_instance_block_length(VALUE self)
{
    rb_digest_instance_method_unimpl(self, "block_length");

    UNREACHABLE;
}

Возвращает длину блока дайджеста.

Этот метод переопределяется каждым подклассом реализации.

bubblebabble → строка_хэша Показать исходный код
static VALUE
rb_digest_instance_bubblebabble(VALUE self)
{
    return bubblebabble_str_new(rb_funcall(self, id_digest, 0));
}

Возвращает результирующее значение хэша в кодировке Bubblebabble.

digest → строка Показать исходный код
digest(строка) → строка
static VALUE
rb_digest_instance_digest(int argc, VALUE *argv, VALUE self)
{
    VALUE str, value;

    if (rb_scan_args(argc, argv, "01", &str) > 0) {
        rb_funcall(self, id_reset, 0);
        rb_funcall(self, id_update, 1, str);
        value = rb_funcall(self, id_finish, 0);
        rb_funcall(self, id_reset, 0);
    } else {
        value = rb_funcall(rb_obj_clone(self), id_finish, 0);
    }

    return value;
}

Если не задано значение, возвращает результирующее значение хэша дайджеста, сохраняя состояние дайджеста.

Если задана строка, возвращает значение хэша для заданной строки, сбрасывая дайджест в начальное состояние до и после процесса.

digest! → строка Показать исходный код
static VALUE
rb_digest_instance_digest_bang(VALUE self)
{
    VALUE value = rb_funcall(self, id_finish, 0);
    rb_funcall(self, id_reset, 0);

    return value;
}

Возвращает результирующее значение хэша и сбрасывает дайджест в начальное состояние.

digest_length → целое число Показать исходный код
static VALUE
rb_digest_instance_digest_length(VALUE self)
{
    /* subclasses really should redefine this method */
    VALUE digest = rb_digest_instance_digest(0, 0, self);

    /* never blindly assume that #digest() returns a string */
    StringValue(digest);
    return INT2NUM(RSTRING_LEN(digest));
}

Возвращает длину значения хэша дайджеста.

Этот метод должен быть переопределен каждым подклассом реализации. В противном случае возвращается digest_obj.digest().length().

file(имя) Показать исходный код
# File ext/digest/lib/digest.rb, line 48
def file(name)
  File.open(name, "rb") {|f|
    buf = ""
    while f.read(16384, buf)
      update buf
    end
  }
  self
end

Обновляет дайджест содержимым заданного файла имя и возвращает self.

hexdigest → строка Показать исходный код
hexdigest(строка) → строка
static VALUE
rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self)
{
    VALUE str, value;

    if (rb_scan_args(argc, argv, "01", &str) > 0) {
        rb_funcall(self, id_reset, 0);
        rb_funcall(self, id_update, 1, str);
        value = rb_funcall(self, id_finish, 0);
        rb_funcall(self, id_reset, 0);
    } else {
        value = rb_funcall(rb_obj_clone(self), id_finish, 0);
    }

    return hexencode_str_new(value);
}

Если не задано значение, возвращает результирующее значение хэша дайджеста в шестнадцатеричном формате, сохраняя состояние дайджеста.

Если задана строка, возвращает значение хэша для заданной строки в шестнадцатеричном формате, сбрасывая дайджест в начальное состояние до и после процесса.

hexdigest! → строка Показать исходный код
static VALUE
rb_digest_instance_hexdigest_bang(VALUE self)
{
    VALUE value = rb_funcall(self, id_finish, 0);
    rb_funcall(self, id_reset, 0);

    return hexencode_str_new(value);
}

Возвращает результирующее значение хэша в шестнадцатеричном формате и сбрасывает дайджест в начальное состояние.

inspect → строка Показать исходный код
static VALUE
rb_digest_instance_inspect(VALUE self)
{
    VALUE str;
    size_t digest_len = 32;     /* about this size at least */
    const char *cname;

    cname = rb_obj_classname(self);

    /* #<Digest::ClassName: xxxxx...xxxx> */
    str = rb_str_buf_new(2 + strlen(cname) + 2 + digest_len * 2 + 1);
    rb_str_buf_cat2(str, "#<");
    rb_str_buf_cat2(str, cname);
    rb_str_buf_cat2(str, ": ");
    rb_str_buf_append(str, rb_digest_instance_hexdigest(0, 0, self));
    rb_str_buf_cat2(str, ">");
    return str;
}

Создаёт отображаемую версию объекта дайджеста.

length → целое число Показать исходный код
static VALUE
rb_digest_instance_length(VALUE self)
{
    return rb_funcall(self, id_digest_length, 0);
}

Возвращает digest_obj.digest_length().

new → другой_объект_дайджеста Показать исходный код
static VALUE
rb_digest_instance_new(VALUE self)
{
    VALUE clone = rb_obj_clone(self);
    rb_funcall(clone, id_reset, 0);
    return clone;
}

Возвращает новую, инициализированную копию объекта дайджеста. Эквивалентно digest_obj.clone().reset().

reset → digest_obj Показать исходный код
static VALUE
rb_digest_instance_reset(VALUE self)
{
    rb_digest_instance_method_unimpl(self, "reset");

    UNREACHABLE;
}

Сбрасывает дайджест в начальное состояние и возвращает self.

Этот метод переопределяется каждым подклассом реализации.

size → целое число Показать исходный код
static VALUE
rb_digest_instance_length(VALUE self)
{
    return rb_funcall(self, id_digest_length, 0);
}

Возвращает digest_obj.digest_length().

to_s → строка Показать исходный код
static VALUE
rb_digest_instance_to_s(VALUE self)
{
    return rb_funcall(self, id_hexdigest, 0);
}

Возвращает digest_obj.hexdigest().

update(строка) → digest_obj Показать исходный код
static VALUE
rb_digest_instance_update(VALUE self, VALUE str)
{
    rb_digest_instance_method_unimpl(self, "update");

    UNREACHABLE;
}

Обновляет дайджест, используя заданную строку, и возвращает self.

Метод update() и оператор левого сдвига переопределяются каждым подклассом реализации. (Один должен быть псевдонимом для другого)

Приватные методы экземпляра

instance_eval { finish } → digest_obj Показать исходный код
static VALUE
rb_digest_instance_finish(VALUE self)
{
    rb_digest_instance_method_unimpl(self, "finish");

    UNREACHABLE;
}

Завершает дайджест и возвращает результирующее значение хэша.

Этот метод переопределяется каждым подклассом реализации и часто делается приватным, так как некоторые из этих подклассов могут оставить внутренние данные неинициализированными. Не вызывайте этот метод извне. Используйте digest!() вместо этого, что гарантирует сброс внутренних данных по соображениям безопасности.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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