gdbmarshal 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +9 -0
  3. data/Rakefile +11 -0
  4. data/lib/gdbmarshal.rb +110 -0
  5. metadata +60 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1f45e7e60faefe23edec4916cbe36a15aa96d667
4
+ data.tar.gz: 51c1c2c0d42449654194f0583f7a7b287e92a73e
5
+ SHA512:
6
+ metadata.gz: b04be5ec6950fe312fc2fc7eb1b35988b6a0b29058677c66a56813d1b134ddc64ce7303f4a0d2c90f3e375bcb1f1d9e91acabddc0ebf7a5bc4985f5d55437759
7
+ data.tar.gz: 317a0f607ea22627368f86a28943c0aa61d55ce9a610f37e17ff7c0e351d972316f29ac23cc23e24d20858b9676137c7b48bf48bc44ffd364fc4da8658fe3140
@@ -0,0 +1,9 @@
1
+ = gdbmarshal
2
+
3
+ A subclass of GDBM that takes objects as values
4
+
5
+ == Usage
6
+ require 'gdbmarshal'
7
+ db = GDBMarshal.new("somefile.db")
8
+ db["somekey"] = {:my => 'fancy object'}
9
+ db.close
@@ -0,0 +1,11 @@
1
+ require 'rake'
2
+
3
+ require 'spec/rake/spectask'
4
+ Spec::Rake::SpecTask.new(:spec) do |spec|
5
+ spec.ruby_opts << '-rubygems'
6
+ spec.libs << 'lib' << 'spec'
7
+ spec.spec_files = FileList['spec/**/*_spec.rb']
8
+ spec.spec_opts = ['--options', 'spec/spec.opts']
9
+ end
10
+
11
+ task :default => [:spec]
@@ -0,0 +1,110 @@
1
+ require 'gdbm'
2
+
3
+ class GDBMarshal < GDBM
4
+ def [](key)
5
+ unmarshal(super(key))
6
+ end
7
+
8
+ def []=(key, val)
9
+ super(key, marshal(val))
10
+ end
11
+
12
+ # def first
13
+ # unmarshal(super)
14
+ # end
15
+
16
+ def each
17
+ super do |vals|
18
+ yield [vals[0], unmarshal(vals[1])]
19
+ end
20
+ end
21
+
22
+ def each_value
23
+ super do |val|
24
+ yield unmarshal(val)
25
+ end
26
+ end
27
+
28
+ def fetch(*args)
29
+ unmarshal(super(*args))
30
+ end
31
+
32
+ def has_value?(v)
33
+ super(marshal(v))
34
+ end
35
+
36
+ def invert
37
+ raise "Not implemented"
38
+ end
39
+
40
+ def key(value)
41
+ super(marshal(value))
42
+ end
43
+
44
+ def reject(&block)
45
+ Hash[super(&block).map {|k, v| [k, unmarshal(v)]}]
46
+ end
47
+
48
+ def delete_if
49
+ super do |key, value|
50
+ yield(key, unmarshal(value))
51
+ end
52
+ end
53
+
54
+ def replace(other)
55
+ self.clear
56
+ other.each_pair do |key, value|
57
+ self[key] = value
58
+ end
59
+ end
60
+
61
+ def select
62
+ super do |key, value|
63
+ yield key, unmarshal(value)
64
+ end
65
+ end
66
+
67
+ def shift
68
+ key, value = super
69
+ [key, unmarshal(value)]
70
+ end
71
+
72
+ def store(key, value)
73
+ super(key, marshal(value))
74
+ end
75
+
76
+ def to_a
77
+ super.map {|key, value| [key, unmarshal(value)]}
78
+ end
79
+
80
+ def to_hash
81
+ Hash[self.to_a]
82
+ end
83
+
84
+ def update(other)
85
+ other.each_pair do |key, value|
86
+ self[key] = value
87
+ end
88
+ end
89
+
90
+ def has_value?(v)
91
+ super(marshal(value))
92
+ end
93
+
94
+ def values
95
+ super.map {|v| unmarshal(v)}
96
+ end
97
+
98
+ def values_at(*keys)
99
+ super(*keys).map {|v| unmarshal(v)}
100
+ end
101
+
102
+ private
103
+ def marshal(val)
104
+ Marshal.dump(val)
105
+ end
106
+
107
+ def unmarshal(val)
108
+ val.nil? ? nil : Marshal.load(val)
109
+ end
110
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gdbmarshal
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Eric Mason
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-03-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description:
28
+ email: eric@ericmason.net
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/gdbmarshal.rb
34
+ - Rakefile
35
+ - README.rdoc
36
+ homepage: https://github.com/ericmason/gdbmarshal
37
+ licenses: []
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements:
54
+ - none
55
+ rubyforge_project:
56
+ rubygems_version: 2.0.0
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: GDBM subclass that takes objects as values
60
+ test_files: []