quick_store 0.0.1 → 0.1.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/.travis.yml +8 -0
- data/README.md +23 -9
- data/Rakefile +3 -0
- data/lib/quick_store/store.rb +47 -31
- data/lib/quick_store/version.rb +1 -1
- data/quick_store.gemspec +2 -1
- data/spec/quick_store/store_spec.rb +48 -10
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 288ad220c7a70b7417fc5e90b24d797ae159144f
|
4
|
+
data.tar.gz: 4b9873b3ca493c87f3cbf1ee6179273622e08150
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77326c038ccdac3e1f66ba85ecb55d480a9f26a0bbe6d67bc38ada47b0c532707e8a40b95873eff858095fd586d48e83d8b29a9c576e73d89a25a3b134837bf0
|
7
|
+
data.tar.gz: 410501cb9cfbf8ad412c31c03f895879ce33198ecca62443adf1a2080b058d49f212e8e4c48f9b365d3fe31dd59da2b1c2a5492e4e537ce5c00f264cec373a2e
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# QuickStore
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/quick_store)
|
4
|
+
[](https://travis-ci.org/daigaku-ruby/quick_store)
|
5
|
+
|
3
6
|
Simple local key-value store based on YAML::Store.
|
4
7
|
|
5
8
|
## Installation
|
@@ -33,23 +36,34 @@ QuickStore.configure do |config|
|
|
33
36
|
end
|
34
37
|
```
|
35
38
|
|
36
|
-
### Storing and
|
37
|
-
You can store and
|
39
|
+
### Storing, fetching, and deleting data
|
40
|
+
You can store, receive, and remove data from the store by using different methods:
|
38
41
|
|
39
42
|
```ruby
|
40
43
|
# Using dynamic setters and getters
|
41
|
-
QuickStore.store.arbitrary_key = 'value'
|
42
|
-
QuickStore.store.arbitrary_key
|
44
|
+
QuickStore.store.arbitrary_key = 'value' # => "value"
|
45
|
+
QuickStore.store.arbitrary_key # => "value"
|
46
|
+
QuickStore.store.delete_arbitrary_key # => "value"
|
43
47
|
|
44
|
-
# Using the ::set and ::
|
48
|
+
# Using the ::set, ::get, and ::delete methods
|
45
49
|
QuickStore.store.set(:arbitrary_key, 'value') # => "value"
|
46
50
|
QuickStore.store.get(:arbitrary_key) # => "value"
|
51
|
+
QuickStore.store.delete(:arbitrary_key) # => "value"
|
47
52
|
|
48
53
|
# Example for a nested key ('/' is the default key separator)
|
49
|
-
QuickStore.store.set('a/b/c', 'value')
|
50
|
-
|
51
|
-
QuickStore.store.get('a/b')
|
52
|
-
QuickStore.store.get('a')
|
54
|
+
QuickStore.store.set('a/b/c', 'value') # => {"b"=>{"c"=>"value"}}
|
55
|
+
|
56
|
+
QuickStore.store.get('a/b/c') # => "value"
|
57
|
+
QuickStore.store.get('a/b') # => {"c"=>"value"}
|
58
|
+
QuickStore.store.get('a') # => {"b"=>{"c"=>"value"}}
|
59
|
+
|
60
|
+
# Removing data for a certain nested key
|
61
|
+
QuickStore.store.delete('a/b/c') # => {"b"=>{"c"=>nil}}
|
62
|
+
QuickStore.get('a') # => {"b"=>{"c"=>nil}}
|
63
|
+
|
64
|
+
# Removing data for all nested keys under a certain key
|
65
|
+
QuickStore.store.delete('a') # => {"b"=>{"c"=>nil}}
|
66
|
+
QuickStore.get('a') # => nil
|
53
67
|
```
|
54
68
|
|
55
69
|
## Contributing
|
data/Rakefile
CHANGED
data/lib/quick_store/store.rb
CHANGED
@@ -45,7 +45,7 @@ module QuickStore
|
|
45
45
|
|
46
46
|
old_value = get(base_key)
|
47
47
|
|
48
|
-
if old_value.is_a? Hash
|
48
|
+
if old_value.is_a?(Hash) && final_value.is_a?(Hash)
|
49
49
|
updated_values = old_value ? old_value.deep_merge(final_value) : final_value
|
50
50
|
else
|
51
51
|
updated_values = final_value
|
@@ -73,47 +73,63 @@ module QuickStore
|
|
73
73
|
base_key = keys.shift
|
74
74
|
|
75
75
|
@db.transaction do
|
76
|
-
|
76
|
+
data = @db[base_key.to_s]
|
77
77
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
78
|
+
if data
|
79
|
+
keys.reduce(data) { |value, key| value ? value = value[key] : nil }
|
80
|
+
end
|
81
|
+
end
|
82
82
|
end
|
83
83
|
|
84
|
-
def
|
85
|
-
|
84
|
+
def delete(key)
|
85
|
+
if key.to_s =~ Regexp.new(QuickStore.config.key_separator)
|
86
|
+
set(key, nil)
|
87
|
+
else
|
88
|
+
@db.transaction { @db.delete(key.to_s) }
|
89
|
+
end
|
86
90
|
end
|
87
91
|
|
88
|
-
|
89
|
-
|
90
|
-
|
92
|
+
class << self
|
93
|
+
def get(key)
|
94
|
+
instance.get(key)
|
95
|
+
end
|
91
96
|
|
92
|
-
|
93
|
-
|
94
|
-
|
97
|
+
def set(key, value)
|
98
|
+
instance.set(key, value)
|
99
|
+
end
|
95
100
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
101
|
+
def file
|
102
|
+
instance.file
|
103
|
+
end
|
104
|
+
|
105
|
+
def delete(key)
|
106
|
+
instance.delete(key)
|
107
|
+
end
|
108
|
+
|
109
|
+
# Defines getter and setter methods for arbitrarily named methods.
|
110
|
+
#
|
111
|
+
# QuickStore::Store.answer = 42 # saves 'answer: 42' to the store
|
112
|
+
# # => 42
|
113
|
+
#
|
114
|
+
# QuickStore::Store.answer
|
115
|
+
# # => 42
|
116
|
+
def method_missing(method, *args, &block)
|
117
|
+
if method =~ /.*=$/
|
118
|
+
if singleton_methods.include?(method.to_s.chop.to_sym)
|
119
|
+
raise "There is a \"#{method.to_s.chop}\" instance method already " +
|
107
120
|
"defined. This will lead to problems while getting values " +
|
108
121
|
"from the store. Please use another key than " +
|
109
122
|
"#{singleton_methods.map(&:to_s)}."
|
123
|
+
end
|
124
|
+
|
125
|
+
instance.set(method.to_s.gsub(/=$/, ''), args[0])
|
126
|
+
elsif method =~/\Adelete\_.*$/
|
127
|
+
instance.delete(method.to_s.gsub(/\Adelete\_/, ''))
|
128
|
+
elsif args.count == 0
|
129
|
+
instance.get(method)
|
130
|
+
else
|
131
|
+
super
|
110
132
|
end
|
111
|
-
|
112
|
-
instance.set(method.to_s.gsub(/=$/, ''), args[0])
|
113
|
-
elsif args.count == 0
|
114
|
-
instance.get(method)
|
115
|
-
else
|
116
|
-
super
|
117
133
|
end
|
118
134
|
end
|
119
135
|
end
|
data/lib/quick_store/version.rb
CHANGED
data/quick_store.gemspec
CHANGED
@@ -6,11 +6,12 @@ require 'quick_store/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "quick_store"
|
8
8
|
spec.version = QuickStore::VERSION
|
9
|
+
spec.required_ruby_version = '>= 1.9.3'
|
9
10
|
spec.authors = ["Paul Götze"]
|
10
11
|
spec.email = ["paul.christoph.goetze@gmail.com"]
|
11
12
|
spec.summary = %q{Simple local key-value store based on YAML::Store.}
|
12
13
|
spec.description = %q{Simple local key-value store based on YAML::Store.}
|
13
|
-
spec.homepage = ""
|
14
|
+
spec.homepage = "https://github.com/daigaku-ruby/quick_store"
|
14
15
|
spec.license = "MIT"
|
15
16
|
|
16
17
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -27,6 +27,15 @@ describe QuickStore::Store do
|
|
27
27
|
expect(QuickStore::Store.carrots).to eq "carrots"
|
28
28
|
end
|
29
29
|
|
30
|
+
it "allows deleting arbitrary keys by dynamic delete" do
|
31
|
+
value = 'chips'
|
32
|
+
QuickStore::Store.potatoes_variation = value
|
33
|
+
expect(QuickStore::Store.potatoes_variation).to eq value
|
34
|
+
|
35
|
+
QuickStore::Store::delete_potatoes_variation
|
36
|
+
expect(QuickStore::Store.potatoes_variation).to be_nil
|
37
|
+
end
|
38
|
+
|
30
39
|
it "returns nil for not set simple keys" do
|
31
40
|
expect(QuickStore::Store.hamburger).to be_nil
|
32
41
|
end
|
@@ -41,16 +50,10 @@ describe QuickStore::Store do
|
|
41
50
|
.to raise_error NoMethodError
|
42
51
|
end
|
43
52
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
it "responds to ::set" do
|
49
|
-
expect(QuickStore::Store).to respond_to :set
|
50
|
-
end
|
51
|
-
|
52
|
-
it "responds to ::file" do
|
53
|
-
expect(QuickStore::Store).to respond_to :file
|
53
|
+
[:get, :set, :file, :delete].each do |method|
|
54
|
+
it "responds to ::#{method}" do
|
55
|
+
expect(QuickStore::Store).to respond_to method
|
56
|
+
end
|
54
57
|
end
|
55
58
|
|
56
59
|
describe "::get" do
|
@@ -103,6 +106,41 @@ describe QuickStore::Store do
|
|
103
106
|
end
|
104
107
|
end
|
105
108
|
|
109
|
+
describe "::delete" do
|
110
|
+
[:to_delete, 'to_delete'].each do |key|
|
111
|
+
it "removes the key from the store" do
|
112
|
+
statement = 'I really love deleting things!'
|
113
|
+
|
114
|
+
QuickStore.store.to_delete = statement
|
115
|
+
expect(QuickStore.store.to_delete).to eq statement
|
116
|
+
|
117
|
+
QuickStore.store.delete(:to_delete)
|
118
|
+
expect(QuickStore.store.to_delete).to be_nil
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
it "removes nested keys, but keeps other keys on same level" do
|
123
|
+
key = 'a/deeply/nested/key'
|
124
|
+
other_key = 'a/deeply/nested/other_key'
|
125
|
+
value = 'Such worth being deleted.'
|
126
|
+
other_value = 'Such worth being kept.'
|
127
|
+
|
128
|
+
QuickStore.store.set(key, value)
|
129
|
+
QuickStore.store.set(other_key, other_value)
|
130
|
+
|
131
|
+
expect(QuickStore.store.get(key)).to eq value
|
132
|
+
expect(QuickStore.store.get(other_key)).to eq other_value
|
133
|
+
|
134
|
+
QuickStore.store.delete(key)
|
135
|
+
|
136
|
+
expect(QuickStore.store.get(key)).to be_nil
|
137
|
+
expect(QuickStore.store.get(other_key)).to eq other_value
|
138
|
+
|
139
|
+
hash = { 'nested' => { 'key' => nil, 'other_key' => other_value } }
|
140
|
+
expect(QuickStore.store.get('a/deeply')).to eq hash
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
106
144
|
it "raises an error if the related getter for a setter is already defined" do
|
107
145
|
expect { QuickStore::Store.clone = 'defined' }.to raise_error
|
108
146
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quick_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Götze
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -74,6 +74,7 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
77
78
|
- Gemfile
|
78
79
|
- README.md
|
79
80
|
- Rakefile
|
@@ -85,7 +86,7 @@ files:
|
|
85
86
|
- spec/quick_store_spec.rb
|
86
87
|
- spec/spec_helper.rb
|
87
88
|
- spec/support/macros/test_helpers.rb
|
88
|
-
homepage:
|
89
|
+
homepage: https://github.com/daigaku-ruby/quick_store
|
89
90
|
licenses:
|
90
91
|
- MIT
|
91
92
|
metadata: {}
|
@@ -97,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
97
98
|
requirements:
|
98
99
|
- - ">="
|
99
100
|
- !ruby/object:Gem::Version
|
100
|
-
version:
|
101
|
+
version: 1.9.3
|
101
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
103
|
requirements:
|
103
104
|
- - ">="
|
@@ -105,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
106
|
version: '0'
|
106
107
|
requirements: []
|
107
108
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.4.
|
109
|
+
rubygems_version: 2.4.6
|
109
110
|
signing_key:
|
110
111
|
specification_version: 4
|
111
112
|
summary: Simple local key-value store based on YAML::Store.
|