Written by Gavin Morrice on Jun 11th, 2014
While working on a current iOS app I was using the very useful BubbleWrap gem for persisting values within a few classes. While BubbleWrap is great, but I found that having to call App::Persistence[]
throughout my app wasn’t ideal.
For one, using strings as the persistence keys is not DRY - you change the key in one place, you have to change it all over. motion-persistable
is a simple gem that provides a wrapper around BubbleWrap’s persistence (which uses NSUserDefaults under the hood) to add attribute accessor macros for persistable attributes.
Using it is as simple as:
class User include Motion::Persistable
attr_accessor :name
# This is the motion-persistable part
attr_persisted :email
end
@user = User.new("bodacious")
@user.email = "[email protected]"
# ... later
@user = User.new("bodacious")
@user.email # => "[email protected]"
For class methods:
class User
class << self
include Motion::Persistable
attr_persisted :use_count, 0
attr_persisted :email, "[default]" do |value|
# This block is executed when a new value is set
mixpanel.people.set(email: value)
end
end
end
User.email = "bodacious"
User.email # => "bodacious"
The gem is available on Github