mingle_keyvalue_store 0.1.9 → 0.2.0
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.
- checksums.yaml +4 -4
- data/lib/mingle_keyvalue_store.rb +36 -29
- metadata +9 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7593599a6ad46df392ee8566d74469423eac688
|
4
|
+
data.tar.gz: 519761c18f684b06b47592fe8a825c9b29231c59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 012643285c3c887c6db00c0cf1630604adc884b87c08bdc76af06914d21f03320672ce69bcee794944a4b86d916d1fa69baea1777f72e84bfcb2bdff0e451ddb
|
7
|
+
data.tar.gz: 238bd2cd4125cb5c75e42610b89ffc0f4cd00bb2165d93c72cea3abbcd262536f71e3f8963ae3bf02279568ae8fe08398f50b9dd98fe9e71953c7ddd2f3653aa
|
@@ -1,8 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require "tempfile"
|
1
|
+
require 'aws-sdk-dynamodb'
|
2
|
+
require 'pstore'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'tempfile'
|
6
5
|
require 'monitor'
|
7
6
|
|
8
7
|
module Mingle
|
@@ -24,11 +23,11 @@ module Mingle
|
|
24
23
|
end
|
25
24
|
|
26
25
|
def []=(store_key, value)
|
27
|
-
raise ArgumentError,
|
26
|
+
raise ArgumentError, 'Value must be String' unless value.is_a?(String)
|
28
27
|
synchronize do
|
29
28
|
@pstore.transaction do
|
30
|
-
@pstore[
|
31
|
-
@pstore[
|
29
|
+
@pstore['all_names'] ||= []
|
30
|
+
@pstore['all_names'] = (@pstore['all_names'] + [store_key]).uniq
|
32
31
|
@pstore[store_key] = value
|
33
32
|
end
|
34
33
|
end
|
@@ -37,7 +36,7 @@ module Mingle
|
|
37
36
|
def delete(store_key)
|
38
37
|
synchronize do
|
39
38
|
@pstore.transaction do
|
40
|
-
@pstore[
|
39
|
+
@pstore['all_names'].delete_if {|name| name == store_key}
|
41
40
|
@pstore.delete(store_key)
|
42
41
|
end
|
43
42
|
end
|
@@ -52,15 +51,15 @@ module Mingle
|
|
52
51
|
|
53
52
|
def names
|
54
53
|
synchronize do
|
55
|
-
@pstore.transaction { @pstore[
|
54
|
+
@pstore.transaction { @pstore['all_names'] || [] }
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
59
58
|
def all_items
|
60
59
|
synchronize do
|
61
60
|
@pstore.transaction do
|
62
|
-
return [] unless @pstore[
|
63
|
-
@pstore[
|
61
|
+
return [] unless @pstore['all_names']
|
62
|
+
@pstore['all_names'].map do |name|
|
64
63
|
{
|
65
64
|
@key_column.to_s => name,
|
66
65
|
@value_column.to_s => @pstore[name]
|
@@ -80,48 +79,56 @@ module Mingle
|
|
80
79
|
|
81
80
|
class DynamodbBased
|
82
81
|
def initialize(table_name, key_column, value_column)
|
83
|
-
@key_column = key_column
|
82
|
+
@key_column = key_column.to_s
|
84
83
|
@value_column = value_column.to_s
|
85
84
|
@table_name = table_name
|
85
|
+
@table = Aws::DynamoDB::Resource.new.table(table_name)
|
86
86
|
end
|
87
87
|
|
88
88
|
def [](store_key)
|
89
|
-
if
|
90
|
-
|
89
|
+
if item = @table.get_item(key: {@key_column => store_key}).item
|
90
|
+
item[@value_column]
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
94
|
def []=(store_key, value)
|
95
|
-
|
95
|
+
raise ArgumentError, 'Value must be String' unless value.is_a?(String)
|
96
|
+
@table.put_item(item: {@key_column => store_key, @value_column => value})
|
96
97
|
end
|
97
98
|
|
98
99
|
def clear
|
99
|
-
|
100
|
+
all_items_from_table.each do |item|
|
101
|
+
@table.delete_item(key: {@key_column => item['testkey']})
|
102
|
+
end
|
103
|
+
nil
|
100
104
|
end
|
101
105
|
|
102
106
|
def names
|
103
|
-
|
107
|
+
all_items_from_table(attributes_to_get: [@key_column]).map{|hash| hash[@key_column]}
|
104
108
|
end
|
105
109
|
|
106
110
|
def all_items
|
107
|
-
|
111
|
+
all_items_from_table
|
108
112
|
end
|
109
113
|
|
110
114
|
def delete(key)
|
111
|
-
|
115
|
+
@table.delete_item(key: {@key_column => key})
|
116
|
+
nil
|
112
117
|
end
|
113
118
|
|
114
119
|
private
|
115
|
-
def
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
table
|
121
|
-
|
122
|
-
|
120
|
+
def all_items_from_table(conditions={})
|
121
|
+
items = []
|
122
|
+
scan_output = @table.scan(conditions)
|
123
|
+
return items unless scan_output.items
|
124
|
+
items += scan_output.items
|
125
|
+
# when the table data is too large scan will return in batches
|
126
|
+
while scan_output.last_evaluated_key
|
127
|
+
scan_output = @table.scan(conditions.merge(exclusive_start_key: scan_output.last_evaluated_key))
|
128
|
+
items += scan_output.items
|
129
|
+
end
|
130
|
+
items
|
123
131
|
end
|
124
|
-
|
125
132
|
end
|
126
133
|
end
|
127
134
|
end
|
metadata
CHANGED
@@ -1,36 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mingle_keyvalue_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian
|
8
8
|
- sdqali
|
9
|
+
- prateekbaheti
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2017-09-20 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - ~>
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.11.3
|
23
|
-
name: aws-sdk
|
20
|
+
version: '1'
|
21
|
+
name: aws-sdk-dynamodb
|
24
22
|
prerelease: false
|
25
23
|
type: :runtime
|
26
24
|
version_requirements: !ruby/object:Gem::Requirement
|
27
25
|
requirements:
|
28
26
|
- - ~>
|
29
27
|
- !ruby/object:Gem::Version
|
30
|
-
version: '1
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.11.3
|
28
|
+
version: '1'
|
34
29
|
- !ruby/object:Gem::Dependency
|
35
30
|
requirement: !ruby/object:Gem::Requirement
|
36
31
|
requirements:
|
@@ -45,10 +40,11 @@ dependencies:
|
|
45
40
|
- - '>='
|
46
41
|
- !ruby/object:Gem::Version
|
47
42
|
version: '0'
|
48
|
-
description: A key value store
|
43
|
+
description: A key value store implementation that uses DynamoDB or Pstore underneath.
|
49
44
|
email:
|
50
45
|
- reginaldthedog@gmail.com
|
51
46
|
- sadiqalikm@gmail.com
|
47
|
+
- prateektheone@gmail.com
|
52
48
|
executables: []
|
53
49
|
extensions: []
|
54
50
|
extra_rdoc_files: []
|
@@ -78,5 +74,5 @@ rubyforge_project:
|
|
78
74
|
rubygems_version: 2.1.9
|
79
75
|
signing_key:
|
80
76
|
specification_version: 4
|
81
|
-
summary: A key value store
|
77
|
+
summary: A key value store implementation that uses DynamoDB or Pstore underneath.
|
82
78
|
test_files: []
|