класс YAML::DBM
YAML::DBM предоставляет тот же интерфейс, что и ::DBM.
Однако, в то время как DBM допускает только строки для ключей и значений, эта библиотека позволяет использовать большинство объектов Ruby для значений, предварительно преобразуя их в YAML. Ключи должны быть строками.
Преобразование в и из YAML выполняется автоматически.
См. документацию для ::DBM и ::YAML для получения дополнительной информации.
Методы открытого экземпляра
Исходный код
# File lib/yaml/dbm.rb, line 32
def []( key )
fetch( key )
end Возвращает значение, связанное с key в базе данных.
Возвращает nil, если такого key нет.
См. fetch для получения дополнительной информации.
Исходный код
Исходный код
# 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.
Исходный код
# 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.
Исходный код
# 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.
Исходный код
# 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.
Исходный код
# 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 для получения дополнительной информации.
Исходный код
# File lib/yaml/dbm.rb, line 181
def has_value?( val )
each_value { |v| return true if v == val }
return false
end Возвращает true, если указанное value найдено в базе данных.
Исходный код
# 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.
Исходный код
# File lib/yaml/dbm.rb, line 194
def invert
h = {}
keys.each { |k| h[ self.fetch( k ) ] = k }
h
end Возвращает Hash (а не базу данных DBM), созданный с использованием каждого значения в базе данных в качестве ключа, а соответствующий ключ — в качестве его значения.
Обратите внимание, что все значения в хэше будут строками, но ключи будут фактическими объектами.
Исходный код
# File lib/yaml/dbm.rb, line 93
def key( keystr )
invert[keystr]
end Возвращает ключ для указанного значения.
Исходный код
# 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.
Исходный код
Исходный код
# 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 Если предоставлен блок, возвращает новый массив, содержащий пары [ключ, значение], для которых блок возвращает true.
В противном случае, то же самое, что и values_at
Исходный код
# 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 Удаляет пару [ключ, значение] из базы данных и возвращает её. Если база данных пуста, возвращает nil.
Порядок удаления/возвращения значений не гарантируется.
Исходный код
# File lib/yaml/dbm.rb, line 249
def store( key, val )
super( key, val.to_yaml )
val
end Хранит value в базе данных с key в качестве индекса. value преобразуется в YAML перед сохранением.
Возвращает value
Исходный код
# File lib/yaml/dbm.rb, line 274
def to_a
a = []
keys.each { |k| a.push [ k, self.fetch( k ) ] }
a
end Преобразует содержимое базы данных в массив массивов [ключ, значение] и возвращает его.
Исходный код
# File lib/yaml/dbm.rb, line 286
def to_hash
h = {}
keys.each { |k| h[ k ] = self.fetch( k ) }
h
end Преобразует содержимое базы данных в объект Hash в оперативной памяти и возвращает его.
Исходный код
Исходный код
# 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 Возвращает массив значений из базы данных.
Исходный код
# File lib/yaml/dbm.rb, line 101
def values_at( *keys )
keys.collect { |k| fetch( k ) }
end Возвращает массив, содержащий значения, соответствующие заданным ключам.
Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.