source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/yaml/dbm.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 2.2 KB
Line 
1require 'yaml'
2require 'dbm'
3#
4# YAML + DBM = YDBM
5# - Same interface as DBM class
6#
7module YAML
8
9class DBM < ::DBM
10 VERSION = "0.1"
11 def []( key )
12 fetch( key )
13 end
14 def []=( key, val )
15 store( key, val )
16 end
17 def fetch( keystr, ifnone = nil )
18 begin
19 val = super( keystr )
20 return YAML::load( val ) if String === val
21 rescue IndexError
22 end
23 if block_given?
24 yield keystr
25 else
26 ifnone
27 end
28 end
29 def index( keystr )
30 super( keystr.to_yaml )
31 end
32 def values_at( *keys )
33 keys.collect { |k| fetch( k ) }
34 end
35 def delete( key )
36 v = super( key )
37 if String === v
38 v = YAML::load( v )
39 end
40 v
41 end
42 def delete_if
43 del_keys = keys.dup
44 del_keys.delete_if { |k| yield( k, fetch( k ) ) == false }
45 del_keys.each { |k| delete( k ) }
46 self
47 end
48 def reject
49 hsh = self.to_hash
50 hsh.reject { |k,v| yield k, v }
51 end
52 def each_pair
53 keys.each { |k| yield k, fetch( k ) }
54 self
55 end
56 def each_value
57 super { |v| yield YAML::load( v ) }
58 self
59 end
60 def values
61 super.collect { |v| YAML::load( v ) }
62 end
63 def has_value?( val )
64 each_value { |v| return true if v == val }
65 return false
66 end
67 def invert
68 h = {}
69 keys.each { |k| h[ self.fetch( k ) ] = k }
70 h
71 end
72 def replace( hsh )
73 clear
74 update( hsh )
75 end
76 def shift
77 a = super
78 a[1] = YAML::load( a[1] ) if a
79 a
80 end
81 def select( *keys )
82 if block_given?
83 self.keys.collect { |k| v = self[k]; [k, v] if yield k, v }.compact
84 else
85 values_at( *keys )
86 end
87 end
88 def store( key, val )
89 super( key, val.to_yaml )
90 val
91 end
92 def update( hsh )
93 hsh.keys.each do |k|
94 self.store( k, hsh.fetch( k ) )
95 end
96 self
97 end
98 def to_a
99 a = []
100 keys.each { |k| a.push [ k, self.fetch( k ) ] }
101 a
102 end
103 def to_hash
104 h = {}
105 keys.each { |k| h[ k ] = self.fetch( k ) }
106 h
107 end
108 alias :each :each_pair
109end
110
111end
Note: See TracBrowser for help on using the repository browser.