class 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 44
def []=( key, val )
store( key, val )
end # 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 # 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 206
def replace( hsh )
clear
update( hsh )
end # 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
# 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.
Порядок удаления и возврата значений не гарантируется.
# 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 Преобразует содержимое базы данных в массив массивов [key, value] и возвращает его.
# 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 262
def update( hsh )
hsh.each_pair do |k,v|
self.store( k, v )
end
self
end # 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–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.