persist 0.0.4 → 0.0.5

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 CHANGED
@@ -15,6 +15,8 @@ And then execute:
15
15
  Or install it yourself:
16
16
 
17
17
  $ gem install persist
18
+
19
+ *Requires Ruby 1.9 or newer.
18
20
 
19
21
  ## Usage
20
22
 
@@ -48,7 +50,10 @@ Persist[:pie]
48
50
  #=> ["Key Lime", "Strawberry Rhubarb", "Blackberry Cobbler"]
49
51
  ```
50
52
 
51
- TODO: Document Persist.db's other public methods such as #transaction, #delete, #key? and #keys. The best documentation in the meanwhile is in the code itself: https://github.com/Havenwood/persist/blob/master/lib/persist.rb
53
+ TODO: Document Persist.db's other public methods such as #transaction, #delete, #path, #key? and #keys. The best documentation in the meanwhile is in the code itself: https://github.com/Havenwood/persist/blob/master/lib/persist/persist.rb
54
+
55
+ ## Is It Production Ready™?
56
+ No. Persist.db is early Alpha, but please try it out and let me know if you find any bugs or real-world performance problems.
52
57
 
53
58
  ## Contributing
54
59
 
@@ -0,0 +1,163 @@
1
+ # Public: Implements a DSL around Ruby Standard Library's PStore to facilitate
2
+ # simple file-persistant storage of Ruby objects in a transactional NoSQL
3
+ # database.
4
+ module Persist
5
+ class << self
6
+ # Public: Returns the persistant store Object if initialized.
7
+ attr_reader :store
8
+
9
+ # Public: Initialize the PStore Object--deserializing the marshalled Hash
10
+ # stored in the '.db.pstore' file (creating the file if it does't exist)--
11
+ # and set thread_safe and ultra_safe to true.
12
+ #
13
+ # Examples
14
+ #
15
+ # Persist.db
16
+ # # => #<PStore:0x007f8c199c9698
17
+ # @abort=false,
18
+ # @filename=".db.pstore",
19
+ # @lock=#<Mutex:0x007f8c199c9580>,
20
+ # @rdonly=true,
21
+ # @table={},
22
+ # @thread_safe=true,
23
+ # @ultra_safe=true>
24
+ #
25
+ # Returns the entire persistent store Object.
26
+ def db
27
+ @store = PStore.new '.db.pstore', true
28
+ @store.ultra_safe = true
29
+ @store.transaction(true) {}
30
+ @store
31
+ end
32
+
33
+ # Public: Fetch a list of persistent store root tables.
34
+ #
35
+ # Examples
36
+ #
37
+ # Persist.keys
38
+ # # => [:author]
39
+ #
40
+ # Returns an Array containing the persistent store root tables.
41
+ def keys
42
+ @store.transaction true do
43
+ @store.roots
44
+ end
45
+ end
46
+
47
+ # Public: Determine whether a particular persistent store root table
48
+ # exists.
49
+ #
50
+ # table - A Symbol.
51
+ #
52
+ # Examples
53
+ #
54
+ # Persist.key? :author
55
+ # # => true
56
+ #
57
+ # Persist.key? :this_does_not_exist
58
+ # # => false
59
+ #
60
+ # Returns true or false.
61
+ def key? table
62
+ @store.transaction true do
63
+ @store.root? table
64
+ end
65
+ end
66
+
67
+ # Public: Fetch a particular table from the persistent store.
68
+ #
69
+ # table - A Symbol corresponding to a root table key in the persistent
70
+ # store.
71
+ #
72
+ # Examples
73
+ #
74
+ # Persist[:author]
75
+ # # => {:first_name => "Shannon", :last_name => "Skipper"}
76
+ #
77
+ # Persist[:author][:first_name]
78
+ # # => "Shannon"
79
+ #
80
+ # Returns the value stored in the fetched table.
81
+ def [] table
82
+ @store.transaction true do
83
+ @store[table]
84
+ end
85
+ end
86
+
87
+ # Public: Use a single transaction to set a table value.
88
+ #
89
+ # table - A Symbol.
90
+ #
91
+ # value - Any Ruby Object that is marshallable.
92
+ #
93
+ # Examples
94
+ #
95
+ # Persist[:sky] = 'blue'
96
+ # # => "blue"
97
+ #
98
+ # Returns the value of the table.
99
+ def []= table, value
100
+ @store.transaction do
101
+ @store[table] = value
102
+ end
103
+ end
104
+
105
+ # Public: Process multiple transactions to set table values and commit if
106
+ # all transactions are successful.
107
+ #
108
+ # block - A required block that processes multiple transactions that
109
+ # succeed or fail together to ensure that data is not left in a
110
+ # transitory state.
111
+ #
112
+ # Examples
113
+ #
114
+ # Persist.transaction do
115
+ # Persist.store[:weather] = 'sunny'
116
+ # Persist.store[:hour] = 'midday'
117
+ # end
118
+ # # => nil
119
+ #
120
+ # Returns nothing.
121
+ def transaction &block
122
+ @store.transaction do
123
+ yield
124
+ @store.commit
125
+ end
126
+ end
127
+
128
+ # Public: Delete one or more entire root tables from the persistent store.
129
+ #
130
+ # tables - One or more Symbols corresponding to root table keys in the
131
+ # persistent store.
132
+ #
133
+ # Examples
134
+ #
135
+ # Persist.delete :author
136
+ # # => nil
137
+ #
138
+ # Persist.delete :author, :clients, :rentals
139
+ # # => nil
140
+ #
141
+ # Returns nothing.
142
+ def delete *tables
143
+ @store.transaction do
144
+ tables.each do |table|
145
+ @store.delete table
146
+ end
147
+ @store.commit
148
+ end
149
+ end
150
+
151
+ # Public: Determine location of the persistent store file.
152
+ #
153
+ # Examples
154
+ #
155
+ # Persist.path
156
+ # # => ".db.pstore"
157
+ #
158
+ # Returns the path to the data file as a String.
159
+ def path
160
+ @store.path
161
+ end
162
+ end
163
+ end
@@ -1,3 +1,3 @@
1
1
  module Persist
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
data/lib/persist.rb CHANGED
@@ -1,158 +1,3 @@
1
1
  require 'pstore'
2
- require 'persist/version'
3
-
4
- # Public: Implements a DSL around Ruby Standard Library's PStore to facilitate
5
- # simple file-persistant storage of Ruby objects in a transactional NoSQL
6
- # database.
7
- module Persist
8
- class << self
9
- # Returns the persistant store Object if one has been initialized.
10
- attr_reader :store
11
-
12
- # Public: Initialize the PStore Object, deserializing the marshalled Hash
13
- # stored in the '.db.pstore' file (creating the file if it does't exist).
14
- #
15
- # Examples
16
- #
17
- # Persist.db
18
- # # => #<PStore:0x007f8c199c9698
19
- # @abort=false,
20
- # @filename=".db.pstore",
21
- # @lock=#<Mutex:0x007f8c199c9580>,
22
- # @rdonly=true,
23
- # @table={},
24
- # @thread_safe=true,
25
- # @ultra_safe=true>
26
- #
27
- # Returns the entire persistent store Object.
28
- def db
29
- # Initialize a persistent store in the file '.db.pstore' and set
30
- # thread_safe to true.
31
- @store = PStore.new('.db.pstore', true)
32
-
33
- # Set ultru_safe to true for extra safety checks regarding full disk, etc.
34
- @store.ultra_safe = true
35
-
36
- # Open a read-only transaction to fetch latest store.
37
- @store.transaction(true) {}
38
-
39
- # Return the entire fetched store Object.
40
- @store
41
- end
42
-
43
- # Public: Fetch a list of persistent store root tables.
44
- #
45
- # Examples
46
- #
47
- # Persist.keys
48
- # # => [:author]
49
- #
50
- # Returns an Array containing the persistent store root tables.
51
- def keys
52
- # Open a read-only transaction.
53
- @store.transaction(true) do
54
- #Return a list of all tables in the persistent store.
55
- @store.roots
56
- end
57
- end
58
-
59
- # Public: Determine whether a particular persistent store root table exists.
60
- #
61
- # Examples
62
- #
63
- # Persist.key? :author
64
- # # => true
65
- #
66
- # Persist.key? :this_does_not_exist
67
- # # => false
68
- #
69
- # Returns true or false.
70
- def key? table
71
- # Open a read-only transaction.
72
- @store.transaction(true) do
73
- #Return a list of all tables in the persistent store.
74
- @store.root? table
75
- end
76
- end
77
-
78
- # Public: Fetch a particular table from the persistent store.
79
- #
80
- # table - A Symbol.
81
- #
82
- # Examples
83
- #
84
- # Persist[:author]
85
- # # => {:first_name => "Shannon", :last_name => "Skipper"}
86
- #
87
- # Persist[:author][:first_name]
88
- # # => "Shannon"
89
- #
90
- # Returns the value stored in the fetched table.
91
- def [] table
92
- # Open a read-only transaction.
93
- @store.transaction(true) do
94
- # Return a particular table from the persistent store.
95
- @store[table]
96
- end
97
- end
98
-
99
- # Public: Use a single transaction to set a table value.
100
- #
101
- # table - A Symbol.
102
- #
103
- # value - Any Ruby Object that is marshallable.
104
- #
105
- # Examples
106
- #
107
- # Persist[:sky] = 'blue'
108
- # # => "blue"
109
- #
110
- # Returns the value of the table.
111
- def []= table, value
112
- # Open a writable transaction.
113
- @store.transaction do
114
- # Process the single transaction.
115
- @store[table] = value
116
- end # Commit transaction.
117
- end
118
-
119
- # Public: Process multiple transactions to set table values and commit if
120
- # all are transactions are successful.
121
- #
122
- # block - A required block that processes multiple transactions that
123
- # succeed or fail together to ensure that data is not left in a
124
- # transitory state.
125
- #
126
- # Examples
127
- #
128
- # Persist.transaction do
129
- # Persist.store[:weather] = 'sunny'
130
- # Persist.store[:hour] = 'midday'
131
- # end
132
- # # => nil
133
- #
134
- # Returns nothing.
135
- def transaction &block
136
- @store.transaction do
137
- yield
138
- @store.commit
139
- end
140
- end
141
-
142
- # Public: Delete an entire root table from the persistent store.
143
- #
144
- # Examples
145
- #
146
- # Persist.delete :author
147
- # # => nil
148
- #
149
- # Returns nothing.
150
- def delete table
151
- # Open a writable transaction.
152
- @store.transaction do
153
- # Delete a particular table from the persistent store.
154
- @store.delete table
155
- end
156
- end
157
- end
158
- end
2
+ require 'persist/persist'
3
+ require 'persist/version'
data/persist.gemspec CHANGED
@@ -12,6 +12,6 @@ Gem::Specification.new do |gem|
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
13
  gem.test_files = gem.files.grep(%r{^test/})
14
14
  gem.name = 'persist'
15
- gem.require_paths = ['lib', 'test']
15
+ gem.require_paths = ['lib']
16
16
  gem.version = Persist::VERSION
17
17
  end
data/test/helper.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  require 'minitest/autorun'
2
2
  require 'minitest/pride'
3
- require_relative '../lib/persist.rb'
3
+ require 'persist'
data/test/test_persist.rb CHANGED
@@ -58,7 +58,7 @@ describe Persist do
58
58
  end
59
59
  end
60
60
 
61
- describe "deleting a root key" do
61
+ describe "deleting a root key with Persist.delete(:key)" do
62
62
  before do
63
63
  Persist.delete :author
64
64
  end
@@ -67,4 +67,14 @@ describe Persist do
67
67
  assert_nil Persist[:author]
68
68
  end
69
69
  end
70
+
71
+ describe "check path with Persist.path" do
72
+ it "returns a String" do
73
+ assert_kind_of String, Persist.path
74
+ end
75
+
76
+ it "includes the data store file name" do
77
+ assert_includes ".db.pstore", Persist.path
78
+ end
79
+ end
70
80
  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
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -24,6 +24,7 @@ files:
24
24
  - LICENSE
25
25
  - README.md
26
26
  - lib/persist.rb
27
+ - lib/persist/persist.rb
27
28
  - lib/persist/version.rb
28
29
  - persist.gemspec
29
30
  - test/helper.rb
@@ -34,7 +35,6 @@ post_install_message:
34
35
  rdoc_options: []
35
36
  require_paths:
36
37
  - lib
37
- - test
38
38
  required_ruby_version: !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements: