hash_cabinet 0.1.1 → 0.1.2

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -34
  3. data/lib/hash_cabinet.rb +56 -18
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4bddfb98bc67f51e3aabf476d95da84990f5e271ad26d404e5f5e2722b95275d
4
- data.tar.gz: c4a45182a0becb13ddf7915b8c0aa28c2fd43cd1571185f4afff1da21032f702
3
+ metadata.gz: 4938741a78a6296230b6c7f4585b8dec8cf1ee3da6e7680e13d9192bb4110782
4
+ data.tar.gz: 92fc7f0ade034f713f7516a54e7a087dbed103853699de85236543eaec38579b
5
5
  SHA512:
6
- metadata.gz: 0ed28a440b890b56a368619450200c89c5b748c63f6fe52223a3c0767c0403d81771587a062c613a8f681dc06f20a708cca5c2fc10f1420eec5965b229a7926f
7
- data.tar.gz: '09684dd6832e8a5bb6156c483c7e1a8a0645215394b7d48e288be4ad654ecc6f68ab89b9082329e745eb9f3e338582034397d4b562dbc0daa4c402cd6753d866'
6
+ metadata.gz: 02a46e648da4b005b1581660392493af0e35bd32de322d45237ee53948bfbe849c4ce75e5db301199c044e58adb5c304c8bc8caddea72c68dc9f647ff238cd63
7
+ data.tar.gz: 12f82246384e4887f3ecd99932a3fadb74e39552eddd5e314c27fe83a78f7c22ee24283796ff236017594ba0a4245ff2b96c441d7b9eeacda56a61018dcccebc
data/README.md CHANGED
@@ -49,40 +49,6 @@ p cabinet.to_h
49
49
 
50
50
  ```
51
51
 
52
- Quick Reference
53
- --------------------------------------------------
54
-
55
- | Method | Description |
56
- |--------|-------------|
57
- | `cabinet.transaction { ... }` | Yields the `SDBM` object. (like `SDBM.open`) |
58
- | `cabinet[key]` | Returns the value at key |
59
- | `cabinet[key] = value` | Saves the value at key |
60
- | `cabinet.clear` | Deletes all data |
61
- | `cabinet.delete key` | Deletes a key |
62
- | `cabinet.delete_if { \|k, v\| ... }`| Deletes keys based on the block result |
63
- | `cabinet.each { \|k, v\| ... }` | Iterates over the data |
64
- | `cabinet.each_key { \|k\| ... }` | Iterates over the keys |
65
- | `cabinet.each_value { \|v\| ... }` | Iterates over the values |
66
- | `cabinet.emoty?` | Returns true if the database is empty |
67
- | `cabinet.has_key? key` | Returns true if the key exists |
68
- | `cabinet.has_value? value` | Returns true if the value exists |
69
- | `cabinet.include? key` | Same as `cabinet.has_key?` |
70
- | `cabinet.key value` | Returns the key associated with the value |
71
- | `cabinet.key? key` | Same as `cabinet.has_key?` |
72
- | `cabinet.keys` | Returns all the keys |
73
- | `cabinet.length` | Returns the number of key-value pairs |
74
- | `cabinet.replace data` | Reset the database with new data |
75
- | `cabinet.select { \|k, v\| ... }` | Returns a hash based on the block result |
76
- | `cabinet.shift` | Removes and returns one key-value pair |
77
- | `cabinet.size` | Same as `cabinet.length` |
78
- | `cabinet.to_a` | Returns an array of `[key, value]` pairs |
79
- | `cabinet.to_h` | Returns a hash with all key-value pairs |
80
- | `cabinet.update data` | Insert or update new data |
81
- | `cabinet.value? value` | Returns true if the value is in the database |
82
- | `cabinet.values` | Returns an array of all the values |
83
- | `cabinet.values_at key, ...` | Returns an array of values corresponding to the given keys |
84
-
85
-
86
52
  Documentation
87
53
  --------------------------------------------------
88
54
 
@@ -28,17 +28,20 @@ class HashCabinet
28
28
  @path = path
29
29
  end
30
30
 
31
- # Yields the +SDBM+ object to the block. Under most circumstances, this
32
- # method should not be used directly, as it is used by all other methods.
33
- #
34
- # Example:
31
+ # Yields the +SDBM+ object to the block.
35
32
  #
33
+ # @example
36
34
  # cabinet = HashCabinet.new 'filename'
37
35
  #
38
36
  # cabinet.transaction do |db|
39
37
  # db.clear
40
38
  # end
41
39
  #
40
+ # @note
41
+ # Under most circumstances, this method should not be used directly,
42
+ # as it is used by all other methods.
43
+ #
44
+ # @yieldparam [SDBM] db the {SDBM} instance
42
45
  def transaction(&block)
43
46
  SDBM.open path, &block
44
47
  end
@@ -65,6 +68,16 @@ class HashCabinet
65
68
 
66
69
  # Iterates over the key-value pairs in the database, deleting those for
67
70
  # which the block returns true.
71
+ #
72
+ # @example Delete all records with +age < 18+.
73
+ # cabinet = HashCabinet.new 'filename'
74
+ #
75
+ # cabinet.delete_if do |key, value|
76
+ # value[:age] < 18
77
+ # end
78
+ #
79
+ # @yieldparam [String] key the pair key
80
+ # @yieldparam [Object] value the pair value
68
81
  def delete_if(&block)
69
82
  transaction do |db|
70
83
  db.delete_if do |key, value|
@@ -74,6 +87,9 @@ class HashCabinet
74
87
  end
75
88
 
76
89
  # Iterates over each key-value pair in the database.
90
+ #
91
+ # @yieldparam [String] key the pair key
92
+ # @yieldparam [Object] value the pair value
77
93
  def each(&block)
78
94
  transaction do |db|
79
95
  db.each do |key, value|
@@ -83,11 +99,15 @@ class HashCabinet
83
99
  end
84
100
 
85
101
  # Iterates over each key in the database.
102
+ #
103
+ # @yieldparam [String] key the pair key
86
104
  def each_key(&block)
87
105
  transaction { |db| db.each_key &block }
88
106
  end
89
107
 
90
108
  # Iterates over each key-value pair in the database.
109
+ #
110
+ # @yieldparam [Object] value the pair value
91
111
  def each_value(&block)
92
112
  transaction do |db|
93
113
  db.each_value do |value|
@@ -96,36 +116,39 @@ class HashCabinet
96
116
  end
97
117
  end
98
118
 
99
- # Returns +true+ if the database is empty.
119
+ # @return [Boolean] +true+ if the database is empty.
100
120
  def empty?
101
121
  transaction { |db| db.empty? }
102
122
  end
103
123
 
104
- # Returns true if the database contains the given key.
124
+ # @return [Boolean] +true+ if the database contains the given key.
105
125
  def has_key?(key)
106
126
  transaction { |db| db.has_key? key.to_s }
107
127
  end
108
128
  alias include? has_key?
109
129
  alias key? has_key?
110
130
 
111
- # Returns +true+ if the database contains the given value.
131
+ # @return [Boolean] +true+ if the database contains the given value.
112
132
  def has_value?(value)
113
133
  transaction { |db| db.has_value? value.to_yaml }
114
134
  end
115
135
 
116
- # Returns the key associated with the given value. If more than one key
117
- # corresponds to the given value, then the first key will be returned.
136
+ # Returns the key associated with the given value.
137
+ #
138
+ # If more than one key corresponds to the given value, then the first key will be returned.
118
139
  # If no keys are found, +nil+ will be returned.
140
+ #
141
+ # @return [String] the key associated with the given value.
119
142
  def key(value)
120
143
  transaction { |db| db.key value.to_yaml }
121
144
  end
122
145
 
123
- # Returns a new Array containing the keys in the database.
146
+ # @return [Array] a new Array containing the keys in the database.
124
147
  def keys
125
148
  transaction { |db| db.keys }
126
149
  end
127
150
 
128
- # Returns the number of keys in the database.
151
+ # @return [Integer] the number of keys in the database.
129
152
  def length
130
153
  transaction { |db| db.length }
131
154
  end
@@ -138,6 +161,12 @@ class HashCabinet
138
161
  # method, such as a Hash, or with any object that implements an +#each+
139
162
  # method, such as an Array. In this case, the array will be converted to
140
163
  # a `key=key` hash before storing it.
164
+ #
165
+ # @example
166
+ # cabinet = HashCabinet.new 'filename'
167
+ # cabinet.replace key1: 'value1', key2: 'value2'
168
+ #
169
+ # @param [Object] data the data to store
141
170
  def replace(data)
142
171
  if !data.respond_to? :each_pair and data.respond_to? :each
143
172
  data = array_to_hash data
@@ -147,7 +176,7 @@ class HashCabinet
147
176
  transaction { |db| db.replace data }
148
177
  end
149
178
 
150
- # Returns a new Hash of key-value pairs for which the block returns true.
179
+ # @return [Hash] a new Hash of key-value pairs for which the block returns true.
151
180
  def select(&block)
152
181
  transaction do |db|
153
182
  db.select do |key, value|
@@ -159,6 +188,8 @@ class HashCabinet
159
188
  # Removes a key-value pair from the database and returns them as an Array.
160
189
  #
161
190
  # If the database is empty, returns nil.
191
+ #
192
+ # @return [Array] the key and value.
162
193
  def shift
163
194
  transaction do |db|
164
195
  result = db.shift
@@ -166,26 +197,33 @@ class HashCabinet
166
197
  end
167
198
  end
168
199
 
169
- # Returns a new Array containing each key-value pair in the database.
200
+ # @return [Array] a new array containing each key-value pair in the
201
+ # database.
170
202
  def to_a
171
203
  transaction do |db|
172
204
  db.to_a.map { |pair| [pair[0], pair[1].from_yaml] }
173
205
  end
174
206
  end
175
207
 
176
- # Returns a new Hash containing each key-value pair in the database.
208
+ # @return [hash] a new hash containing each key-value pair in the database.
177
209
  def to_h
178
210
  transaction do |db|
179
211
  db.to_h.transform_values &:from_yaml
180
212
  end
181
213
  end
182
214
 
183
- # Insert or update key-value pairs.
215
+ # Inserts or updates key-value pairs.
184
216
  #
185
217
  # This method will work with any object which implements an +#each_pair+
186
218
  # method, such as a Hash, or with any object that implements an +#each+
187
219
  # method, such as an Array. In this case, the array will be converted to
188
220
  # a `key=key` hash before storing it.
221
+ #
222
+ # @example
223
+ # cabinet = HashCabinet.new 'filename'
224
+ # cabinet.update key1: 'value1', key2: 'value2'
225
+ #
226
+ # @param [Object] data the data to store
189
227
  def update(data)
190
228
  if !data.respond_to? :each_pair and data.respond_to? :each
191
229
  data = array_to_hash data
@@ -195,19 +233,19 @@ class HashCabinet
195
233
  transaction { |db| db.update data }
196
234
  end
197
235
 
198
- # Returns +true+ if the database contains the given value.
236
+ # @return [Boolean] +true+ if the database contains the given value.
199
237
  def value?(value)
200
238
  transaction { |db| db.value? value.to_yaml }
201
239
  end
202
240
 
203
- # Returns a new Array containing the values in the database.
241
+ # @return [Array] a new array containing the values in the database.
204
242
  def values
205
243
  transaction do |db|
206
244
  db.values.map &:from_yaml
207
245
  end
208
246
  end
209
247
 
210
- # Returns an Array of values corresponding to the given keys.
248
+ # @return [Array] an Array of values corresponding to the given keys.
211
249
  def values_at(*key)
212
250
  transaction do |db|
213
251
  db.values_at(*(key.map &:to_s)).map &:from_yaml
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_cabinet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-18 00:00:00.000000000 Z
11
+ date: 2019-09-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Store objects in a file using hash-like syntax
14
14
  email: db@dannyben.com