Transactional Filesystem-Based Data Storage (pstore)
PStore provides a simple,
transactional database for storing Ruby objects within a file. This gives
you a persistence layer without relying on any external resources, which
can be very handy. Using PStore is so
simple that I can forgo most of the details and jump right into some code
that I use for a Sinatra microapp at work. What follows is a very simple
backend for storing replies to an anonymous survey:
class SuggestionBox
def initialize(filename="suggestions.pstore")
@filename = filename
end
def store
@store ||= PStore.new(@filename)
end
def add_reply(reply)
store.transaction do
store[:replies] ||= []
store[:replies] << reply
end
end
def replies(readonly=true)
store.transaction do
store[:replies]
end
end
def clear_replies
store.transaction do
store[:replies] = []
end
end
endIn our application, the usage of this object for storing responses
is quite simple. Given that box is just
a SuggestionBox in the following code,
we just have a single call to add_reply
that looks something like this:
box.add_reply(:question1 => params["question1"],
:question2 => params["question2"])Later, when we need to generate a PDF report of all the replies in the suggestion box, we do something like this to extract the responses to the two questions:
question1_replies = [] question2_replies = [] box.replies.each do |reply| question1_replies << reply[:question1] question2.replies << reply[:question2] end
So that covers the usage, but let’s go back in a ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access