persist 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +20 -14
- data/lib/persist/persist.rb +27 -0
- data/lib/persist/version.rb +1 -1
- data/lib/persist.rb +0 -1
- data/test/test_persist.rb +22 -7
- metadata +2 -2
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Persist.db
|
2
2
|
|
3
|
-
Persist.db
|
3
|
+
Persist.db implements a DSL around Ruby Standard Library's PStore to facilitate simple file-persistant storage of Ruby objects in a transactional NoSQL database.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -15,8 +15,6 @@ And then execute:
|
|
15
15
|
Or install it yourself:
|
16
16
|
|
17
17
|
$ gem install persist
|
18
|
-
|
19
|
-
*Requires Ruby 1.9 or newer.
|
20
18
|
|
21
19
|
## Usage
|
22
20
|
|
@@ -38,9 +36,12 @@ Persist.pull
|
|
38
36
|
|
39
37
|
Persist[:pie] = ['Key Lime', 'Strawberry Rhubarb', 'Blackberry Cobbler']
|
40
38
|
# => ["Key Lime", "Strawberry Rhubarb", "Blackberry Cobbler"]
|
39
|
+
|
40
|
+
Persist[:ice_cream] = ['chocolate', 'vanilla']
|
41
|
+
# => ["chocolate", "vanilla"]
|
41
42
|
```
|
42
43
|
|
43
|
-
You can now
|
44
|
+
You can now exit Pry/IRB and your store will persist!
|
44
45
|
|
45
46
|
```ruby
|
46
47
|
require 'persist'
|
@@ -59,12 +60,12 @@ Each of Persist.db's tables is stored as a key:
|
|
59
60
|
|
60
61
|
```ruby
|
61
62
|
Persist.keys
|
62
|
-
#=> [:pie]
|
63
|
+
#=> [:pie, :ice_cream]
|
63
64
|
|
64
65
|
Persist.key? :pie
|
65
66
|
#=> true
|
66
67
|
|
67
|
-
Persist.key? :
|
68
|
+
Persist.key? :cake
|
68
69
|
#=> false
|
69
70
|
```
|
70
71
|
|
@@ -82,22 +83,27 @@ Persist.path
|
|
82
83
|
#=> ".db.pstore"
|
83
84
|
```
|
84
85
|
|
85
|
-
Transactions:
|
86
|
+
Transactions succeed or fail together to ensure that data is not left in a transitory state:
|
86
87
|
|
87
88
|
```ruby
|
88
89
|
Persist.transaction do
|
89
|
-
Persist.db[:
|
90
|
+
Persist.db[:cake] = 'pie is better!'
|
90
91
|
Persist.db.delete :pie
|
91
|
-
end
|
92
|
+
end
|
92
93
|
```
|
93
94
|
|
94
|
-
|
95
|
+
[Additional documentation](https://github.com/Havenwood/persist/blob/master/lib/persist/persist.rb) in the code.
|
96
|
+
|
97
|
+
## Supported Platforms
|
98
|
+
|
99
|
+
Persist.db makes use of PStore's ultra_safe attribute, which requires:
|
95
100
|
|
96
|
-
|
97
|
-
|
101
|
+
1. Ruby 1.9 (tested on `ruby-1.9.3` and `rbx --1.9` thus far)
|
102
|
+
2. A POSIX platform (such as OS X, GNU/Linux or FreeBSD)
|
98
103
|
|
99
104
|
## Contributing
|
100
105
|
|
101
106
|
1. Fork it
|
102
|
-
2. Commit
|
103
|
-
3.
|
107
|
+
2. Commit changes (`git commit -am 'did something'`)
|
108
|
+
3. Submit a Pull Request
|
109
|
+
4. :cake:
|
data/lib/persist/persist.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'pstore'
|
2
|
+
|
1
3
|
# Public: Implements a DSL around Ruby Standard Library's PStore to facilitate
|
2
4
|
# simple file-persistant storage of Ruby objects in a transactional NoSQL
|
3
5
|
# database.
|
@@ -84,6 +86,31 @@ module Persist
|
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
89
|
+
# Public: Fetch a particular table from the persistent store.
|
90
|
+
#
|
91
|
+
# table - A Symbol corresponding to a root table key in the persistent
|
92
|
+
# store.
|
93
|
+
#
|
94
|
+
# default - An optional value that is returned if the table is not found.
|
95
|
+
#
|
96
|
+
# Examples
|
97
|
+
#
|
98
|
+
# Persist.fetch :author
|
99
|
+
# # => {:first_name => "Shannon", :last_name => "Skipper"}
|
100
|
+
#
|
101
|
+
# Persist.fetch :snowman
|
102
|
+
# # => nil
|
103
|
+
#
|
104
|
+
# Persist.fetch :snowman, 'default value instead of nil'
|
105
|
+
# # => "default value instead of nil"
|
106
|
+
#
|
107
|
+
# Returns the value stored in the fetched table.
|
108
|
+
def fetch table, default = nil
|
109
|
+
@db.transaction true do
|
110
|
+
@db.fetch table, default
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
87
114
|
# Public: Use a single transaction to set a table value.
|
88
115
|
#
|
89
116
|
# table - A Symbol.
|
data/lib/persist/version.rb
CHANGED
data/lib/persist.rb
CHANGED
data/test/test_persist.rb
CHANGED
@@ -18,17 +18,17 @@ describe Persist do
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
describe "getting true or false if key exists with Persist.key?
|
21
|
+
describe "getting true or false if key exists with Persist.key?" do
|
22
22
|
it "returns true if key exists" do
|
23
23
|
assert Persist.key?(:author)
|
24
24
|
end
|
25
25
|
|
26
|
-
it "returns false if the key
|
26
|
+
it "returns false if the key doesn't exist" do
|
27
27
|
refute Persist.key?(:this_does_not_exist)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
describe "getting a particular key's value with Persist[
|
31
|
+
describe "getting a particular key's value with Persist.[]" do
|
32
32
|
it "returns a value if the key exists" do
|
33
33
|
assert_equal "Shannon", Persist[:author][:first_name]
|
34
34
|
end
|
@@ -38,7 +38,22 @@ describe Persist do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
describe "
|
41
|
+
describe "getting a particular key or default value with Persist.fetch" do
|
42
|
+
it "returns a value if the key exists" do
|
43
|
+
assert_equal "Shannon", Persist.fetch(:author)[:first_name]
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns nil if the key doesn't exist and no default is given" do
|
47
|
+
assert_nil Persist.fetch(:this_does_not_exist)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns the default value if the key doesn't exist" do
|
51
|
+
default = Persist.fetch(:this_does_not_exist, "default value")
|
52
|
+
assert_equal "default value", default
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "setting a particular key's value with Persist.[]=" do
|
42
57
|
before do
|
43
58
|
Persist[:trees] = ['oak', 'pine', 'cedar']
|
44
59
|
end
|
@@ -52,13 +67,13 @@ describe Persist do
|
|
52
67
|
end
|
53
68
|
end
|
54
69
|
|
55
|
-
describe "setting multiple key's values with Persist.transaction do
|
70
|
+
describe "setting multiple key's values with Persist.transaction do" do
|
56
71
|
it "blends" do
|
57
|
-
assert
|
72
|
+
assert false #TODO: test.
|
58
73
|
end
|
59
74
|
end
|
60
75
|
|
61
|
-
describe "deleting a root key with Persist.delete
|
76
|
+
describe "deleting a root key with Persist.delete" do
|
62
77
|
before do
|
63
78
|
Persist.delete :author
|
64
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: persist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A DSL for storing Ruby Objects transactionally in a persistent NoSQL
|
15
15
|
database
|