Spec-Zone.ru › Ruby 4.0
  1. YAML::
  2. DBM

class YAML::DBM

YAML + DBM = YDBM

YAML::DBM предоставляет тот же интерфейс, что и ::DBM.

Однако, в то время как DBM допускает только строки как для ключей, так и для значений, эта библиотека позволяет использовать для значений большинство объектов Ruby, предварительно преобразуя их в YAML. Ключи должны быть строками.

Преобразование в YAML и обратно выполняется автоматически.

Дополнительные сведения см. в документации по ::DBM и ::YAML.

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

ydbm[key] → value Показать исходный код
# File lib/yaml/dbm.rb, line 32
def []( key )
    fetch( key )
end

Возвращает значение, связанное с key из базы данных.

Возвращает nil, если такого key нет.

Дополнительные сведения см. в fetch.

ydbm[key] = value Показать исходный код
# File lib/yaml/dbm.rb, line 44
def []=( key, val )
    store( key, val )
end

Устанавливает key в value в базе данных.

Перед сохранением value будет преобразовано в YAML.

Дополнительные сведения см. в store.

delete(key) Показать исходный код
# File lib/yaml/dbm.rb, line 111
def delete( key )
    v = super( key )
    if String === v
        if YAML.respond_to?(:safe_load)
            v = YAML.safe_load( v )
        else
            v = YAML.load( v )
        end
    end
    v
end

Удаляет из базы данных значение, связанное с key.

Возвращает значение или nil.

Вызывает метод суперкласса
delete_if { |key, value| ... } Показать исходный код
# File lib/yaml/dbm.rb, line 130
def delete_if # :yields: [key, value]
    del_keys = keys.dup
    del_keys.delete_if { |k| yield( k, fetch( k ) ) == false }
    del_keys.each { |k| delete( k ) }
    self
end

Вызывает переданный блок один раз для каждой пары key, value в базе данных. Удаляет все записи, для которых блок возвращает true.

Возвращает self.

each
Псевдоним для: each_pair
each_pair { |key, value| ... } Показать исходный код
# File lib/yaml/dbm.rb, line 153
def each_pair # :yields: [key, value]
    keys.each { |k| yield k, fetch( k ) }
    self
end

Вызывает переданный блок один раз для каждой пары key, value в базе данных.

Возвращает self.

Также имеет псевдоним: each
each_value { |value| ... } Показать исходный код
# File lib/yaml/dbm.rb, line 164
def each_value # :yields: value
    super { |v| yield YAML.respond_to?(:safe_load) ? YAML.safe_load( v ) : YAML.load( v ) }
    self
end

Вызывает переданный блок для каждого значения в базе данных.

Возвращает self.

Вызывает метод суперкласса
fetch( key, ifnone = nil ) Показать исходный код
fetch( key ) { |key| ... }
# File lib/yaml/dbm.rb, line 59
def fetch( keystr, ifnone = nil )
    begin
        val = super( keystr )
        if String === val
            if YAML.respond_to?(:safe_load)
                return YAML.safe_load( val )
            else
                return YAML.load( val )
            end
        end
    rescue IndexError
    end
    if block_given?
        yield keystr
    else
        ifnone
    end
end

Возвращает значение, связанное с key.

Если для key нет значения и блок не передан, возвращает ifnone.

В противном случае вызывает блок, передавая ему указанный key.

Дополнительные сведения см. в ::DBM#fetch.

Вызывает метод суперкласса
has_value?(value) Показать исходный код
# File lib/yaml/dbm.rb, line 181
def has_value?( val )
    each_value { |v| return true if v == val }
    return false
end

Возвращает true, если указанное value найдено в базе данных.

index ( keystr ) Показать исходный код
# File lib/yaml/dbm.rb, line 85
def index( keystr )
    super( keystr.to_yaml )
end

Устарел, вместо него используйте YAML::DBM#key.

Примечание: YAML::DBM#index выводит предупреждение изнутри ::DBM#index. В нем говорится: «DBM#index устарел; используйте DBM#key», однако DBM#key работает не так, как DBM#index.

Вызывает метод суперкласса
invert → hash Показать исходный код
# File lib/yaml/dbm.rb, line 194
def invert
    h = {}
    keys.each { |k| h[ self.fetch( k ) ] = k }
    h
end

Возвращает Hash (не базу данных DBM), созданный с использованием каждого значения в базе данных в качестве ключа, а соответствующего ему ключа — в качестве значения.

Обратите внимание: все значения в хеше будут строками, а ключи — исходными объектами.

key(value) → string Показать исходный код
# File lib/yaml/dbm.rb, line 93
def key( keystr )
    invert[keystr]
end

Возвращает ключ для указанного значения.

reject { |key, value| ... } Показать исходный код
# File lib/yaml/dbm.rb, line 142
def reject
    hsh = self.to_hash
    hsh.reject { |k,v| yield k, v }
end

Преобразует содержимое базы данных в хеш Hash в памяти, затем вызывает Hash#reject с указанным блоком кода и возвращает новый Hash.

replace(hash) → ydbm Показать исходный код
# File lib/yaml/dbm.rb, line 206
def replace( hsh )
    clear
    update( hsh )
end

Заменяет содержимое базы данных содержимым указанного объекта. Принимает любой объект, реализующий метод each_pair, включая объекты Hash и DBM.

select { |key, value| ... } Показать исходный код
select(*keys)
# File lib/yaml/dbm.rb, line 234
def select( *keys )
    if block_given?
        self.keys.collect { |k| v = self[k]; [k, v] if yield k, v }.compact
    else
        values_at( *keys )
    end
end

Если передан блок, возвращает новый массив, содержащий пары [key, value], для которых блок возвращает true.

В противном случае работает так же, как values_at

shift → [key, value] Показать исходный код
# File lib/yaml/dbm.rb, line 218
def shift
    a = super
    if a
      a[1] = YAML.respond_to?(:safe_load) ? YAML.safe_load( a[1] ) : YAML.load( a[1] )
    end
    a
end

Удаляет из базы данных пару [key, value] и возвращает ее. Если база данных пуста, возвращает nil.

Порядок удаления и возврата значений не гарантируется.

Вызывает метод суперкласса
store(key, value) → value Показать исходный код
# File lib/yaml/dbm.rb, line 249
def store( key, val )
    super( key, val.to_yaml )
    val
end

Сохраняет value в базе данных, используя key в качестве индекса. Перед сохранением value преобразуется в YAML.

Возвращает value

Вызывает метод суперкласса
to_a → array Показать исходный код
# File lib/yaml/dbm.rb, line 274
def to_a
    a = []
    keys.each { |k| a.push [ k, self.fetch( k ) ] }
    a
end

Преобразует содержимое базы данных в массив массивов [key, value] и возвращает его.

to_hash → hash Показать исходный код
# File lib/yaml/dbm.rb, line 286
def to_hash
    h = {}
    keys.each { |k| h[ k ] = self.fetch( k ) }
    h
end

Преобразует содержимое базы данных в объект Hash в памяти и возвращает его.

update(hash) → ydbm Показать исходный код
# File lib/yaml/dbm.rb, line 262
def update( hsh )
    hsh.each_pair do |k,v|
        self.store( k, v )
    end
    self
end

Обновляет базу данных несколькими значениями из указанного объекта. Принимает любой объект, реализующий метод each_pair, включая объекты Hash и DBM.

Возвращает self.

values Показать исходный код
# File lib/yaml/dbm.rb, line 173
def values
    super.collect { |v| YAML.respond_to?(:safe_load) ? YAML.safe_load( v ) : YAML.load( v ) }
end

Возвращает массив значений из базы данных.

Вызывает метод суперкласса
values_at(*keys) Показать исходный код
# File lib/yaml/dbm.rb, line 101
def values_at( *keys )
    keys.collect { |k| fetch( k ) }
end

Возвращает массив, содержащий значения, связанные с указанными ключами.

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

Spec-Zone.ru

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