abbey 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.
- data/README.md +2 -2
- data/abbey.gemspec +2 -2
- data/lib/entity_storage.rb +31 -17
- data/lib/version.rb +1 -1
- data/test/entity_storage_test.rb +7 -0
- metadata +13 -13
data/README.md
CHANGED
@@ -8,7 +8,7 @@ A simple persistence library with human-readable representation. Uses good 'ol f
|
|
8
8
|
|
9
9
|
## Usage
|
10
10
|
|
11
|
-
Warning: Abbey intentionally uses JSON, therefore it inherits
|
11
|
+
Warning: Abbey intentionally uses JSON, therefore it inherits it's caveats. Most notably, symbols are serialized to strings.
|
12
12
|
|
13
13
|
```ruby
|
14
14
|
require 'abbey'
|
@@ -39,7 +39,7 @@ abbey.exists?(:users, :admin) # => false
|
|
39
39
|
|
40
40
|
abbey.settings.namespaces # => [:users, :books]
|
41
41
|
|
42
|
-
abbey.settings.logger # => #<
|
42
|
+
abbey.settings.logger # => #<Logger....>
|
43
43
|
```
|
44
44
|
|
45
45
|
## License
|
data/abbey.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "abbey"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Pavel Kalvoda"]
|
12
|
-
s.date = "2011-
|
12
|
+
s.date = "2011-12-03"
|
13
13
|
s.description = "Primitive JSON data store. Key-value structure with namespaces."
|
14
14
|
s.email = "me@pavelkalvoda.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/entity_storage.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'tempfile'
|
3
|
+
|
1
4
|
module Abbey
|
2
5
|
|
3
6
|
# Represents the store. Manages the data for you.
|
@@ -41,20 +44,6 @@ module Abbey
|
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
|
-
# Save an item
|
45
|
-
# @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
46
|
-
# @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
47
|
-
# @param data [Object]
|
48
|
-
# @return void
|
49
|
-
def save(namespace, key, data)
|
50
|
-
path = make_path(namespace, key)
|
51
|
-
raise ItemAlreadyPresentError, "Item '#{make_key(namespace,key)}' already present" if File.exist?(path)
|
52
|
-
f = File.new(path, File::CREAT | File::RDWR)
|
53
|
-
size = f.write(MultiJson.encode(data))
|
54
|
-
f.close
|
55
|
-
settings.logger.info("Written #{make_key(namespace, key)} (size: #{size})")
|
56
|
-
end
|
57
|
-
|
58
47
|
# Fetch an item
|
59
48
|
# @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
60
49
|
# @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
@@ -76,14 +65,24 @@ module Abbey
|
|
76
65
|
exists
|
77
66
|
end
|
78
67
|
|
68
|
+
# Save an item
|
69
|
+
# @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
70
|
+
# @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
71
|
+
# @param data [Object]
|
72
|
+
# @return void
|
73
|
+
def save(namespace, key, data)
|
74
|
+
raise ItemAlreadyPresentError, "Item '#{make_key(namespace,key)}' already exists" if exists?(namespace, key)
|
75
|
+
unsafe_save(namespace, key, data)
|
76
|
+
end
|
77
|
+
|
79
78
|
# Update an item. Shorthand for delete & save
|
80
79
|
# @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
81
80
|
# @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
82
81
|
# @param data [Object]
|
83
82
|
# @return void
|
84
83
|
def update(namespace, key, data)
|
85
|
-
|
86
|
-
|
84
|
+
raise ItemNotFoundError, "Item '#{make_key(namespace,key)}' not found" unless exists?(namespace, key)
|
85
|
+
unsafe_save(namespace, key, data)
|
87
86
|
end
|
88
87
|
|
89
88
|
# Delete an item
|
@@ -92,7 +91,7 @@ module Abbey
|
|
92
91
|
# @return void
|
93
92
|
def delete(namespace, key)
|
94
93
|
path = make_path(namespace, key)
|
95
|
-
raise ItemNotFoundError, "Item '#{make_key(namespace,key)}'
|
94
|
+
raise ItemNotFoundError, "Item '#{make_key(namespace,key)}' not found" unless exists?(namespace, key)
|
96
95
|
File.delete(path)
|
97
96
|
settings.logger.info("Deleted #{make_key(namespace,key)}")
|
98
97
|
end
|
@@ -153,5 +152,20 @@ module Abbey
|
|
153
152
|
def make_key(namespace, key)
|
154
153
|
namespace.to_s + ':' + key.to_s
|
155
154
|
end
|
155
|
+
|
156
|
+
# Save an item without any checks
|
157
|
+
# @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
158
|
+
# @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
|
159
|
+
# @param data [Object]
|
160
|
+
# @return void
|
161
|
+
def unsafe_save(namespace, key, data)
|
162
|
+
path = make_path(namespace, key)
|
163
|
+
tmp = Tempfile.new('abbey')
|
164
|
+
size = tmp.write(MultiJson.encode(data))
|
165
|
+
tmp.close
|
166
|
+
FileUtils.mv(tmp.path, path)
|
167
|
+
settings.logger.info("Written #{make_key(namespace, key)} (size: #{size})")
|
168
|
+
tmp.unlink
|
169
|
+
end
|
156
170
|
end
|
157
171
|
end
|
data/lib/version.rb
CHANGED
data/test/entity_storage_test.rb
CHANGED
@@ -78,6 +78,13 @@ class AbbeyTest < Test::Unit::TestCase
|
|
78
78
|
assert_equal({"a" => 2}, @abbey.get(:ns1,:key))
|
79
79
|
end
|
80
80
|
|
81
|
+
def test_it_wont_update_nonexistent_item
|
82
|
+
@abbey.set_up!
|
83
|
+
assert_raise Abbey::ItemNotFoundError do
|
84
|
+
@abbey.update(:ns1, :key, {"a" => 2})
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
81
88
|
def test_it_will_drop_items
|
82
89
|
@abbey.set_up!
|
83
90
|
@abbey.save(:ns1, :key, {"a" => 1})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abbey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
|
-
requirement: &
|
16
|
+
requirement: &20705080 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *20705080
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &20704580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *20704580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &20704040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *20704040
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &20703520 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *20703520
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &20702840 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *20702840
|
69
69
|
description: Primitive JSON data store. Key-value structure with namespaces.
|
70
70
|
email: me@pavelkalvoda.com
|
71
71
|
executables: []
|
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
104
|
version: '0'
|
105
105
|
segments:
|
106
106
|
- 0
|
107
|
-
hash: -
|
107
|
+
hash: -3484515229656058223
|
108
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
109
|
none: false
|
110
110
|
requirements:
|