I've done the same thing in my gem. I think you have created an App folder in your gem/engine. Create another folder called "backend" and create classes for each datastore. For my case I created a seperate for Mongo and Redis
module Memberfier
class RedisStore
def initialize(redis)
@redis = redis
end
def keys
@redis.keys
end
def []=(key, value)
value = nil if value.blank?
@redis[key] = ActiveSupport::JSON.encode(value)
end
def [](key)
@redis[key]
end
def clear_database
@redis.keys.clone.each {|key| @redis.del key }
end
end
end
module Memberfier
class MongoStore
def initialize(collection)
@collection = collection
end
def keys
@collection.distinct :_id
end
def []=(key, value)
value = nil if value.blank?
collection.update({:_id => key},
{'$set' => {:value => ActiveSupport::JSON.encode(value)}},
{:upsert => true, :safe => true})
end
def [](key)
if document = collection.find_one(:_id => key)
document["value"]
else
nil
end
end
def destroy_entry(key)
@collection.remove({:_id => key})
end
def searchable?
true
end
def clear_database
collection.drop
end
private
def collection; @collection; end
end
end