Skip to content

Commit

Permalink
Removed read/write through caching.
Browse files Browse the repository at this point in the history
It added weight to every get/set that wasn't used. Would be better as plugin that you turn on when you actually want to use it and the ruby time is worth it.
  • Loading branch information
jnunemaker committed May 8, 2011
1 parent b3519bb commit 5ab198e
Show file tree
Hide file tree
Showing 8 changed files with 7 additions and 204 deletions.
4 changes: 0 additions & 4 deletions LOGGING.rdoc
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,4 @@ What the 3 letter codes mean when they show up in logging:
IMS: write to identity map
IMD: delete from identity map

RTG: get cache read
RTS: get cache set
WTS: cache write set

IEM: invalid embedded document
50 changes: 0 additions & 50 deletions examples/read_write_caching.rb

This file was deleted.

1 change: 0 additions & 1 deletion lib/toy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ def reset
def clear
models.each do |model|
model.store.clear if model.has_store?
model.cache.clear if model.has_cache?
model.identity_map.clear if model.identity_map_on?
end
end
Expand Down
25 changes: 3 additions & 22 deletions lib/toy/persistence.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,14 @@ module ClassMethods
def store(name=nil, client=nil, options={})
assert_client(name, client)
@store = Adapter[name].new(client, options) if !name.nil? && !client.nil?
assert_store(name, client, 'store')
assert_store(name, client)
@store
end

def has_store?
!@store.nil?
end

def cache(name=nil, client=nil)
assert_client(name, client)
@cache = Adapter[name].new(client) if !name.nil? && !client.nil?
assert_store(name, client, 'cache')
@cache
end

def has_cache?
!@cache.nil?
end

def store_key(id)
id
end
Expand All @@ -46,8 +35,8 @@ def assert_client(name, client)
raise(ArgumentError, 'Client is required') if !name.nil? && client.nil?
end

def assert_store(name, client, which)
raise(StandardError, "No #{which} has been set") if name.nil? && client.nil? && !send(:"has_#{which}?")
def assert_store(name, client)
raise(StandardError, "No store has been set") if name.nil? && client.nil? && !has_store?
end
end

Expand All @@ -56,10 +45,6 @@ def store
self.class.store
end

def cache
self.class.cache
end

def store_key
self.class.store_key(id)
end
Expand Down Expand Up @@ -114,10 +99,6 @@ def persist
def persist!
key, attrs = store_key, persisted_attributes
attrs.delete('id') # no need to persist id as that is key
if self.class.has_cache?
cache.write(key, attrs)
log_operation('WTS', self, cache, key, attrs)
end
store.write(key, attrs)
log_operation('SET', self, store, key, attrs)
persist
Expand Down
18 changes: 2 additions & 16 deletions lib/toy/querying.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,8 @@ module Querying
module ClassMethods
def get(id)
key = store_key(id)

if has_cache?
value = cache.read(key)
log_operation('RTG', self, cache, key, value)
end

if value.nil?
value = store.read(key)
log_operation('GET', self, store, key, value)

if has_cache?
cache.write(key, value)
log_operation('RTS', self, cache, key, value)
end
end

value = store.read(key)
log_operation('GET', self, store, key, value)
load(key, value)
end

Expand Down
52 changes: 2 additions & 50 deletions spec/toy/persistence_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,47 +36,17 @@
end
end

describe ".cache" do
it "sets if arguments and reads if not" do
klass.cache(:memory, {})
klass.cache.should == Adapter[:memory].new({})
end

it "raises argument error if name provided but not client" do
lambda do
klass.cache(:memory)
end.should raise_error(ArgumentError, 'Client is required')
end

it "raises argument error if no name or client provided and has not been set" do
lambda do
klass.cache
end.should raise_error(StandardError, 'No cache has been set')
end
end

describe ".has_store?" do
it "returns true if cache set" do
it "returns true if store set" do
klass.store(:memory, {})
klass.has_store?.should be_true
end

it "returns false if cache not set" do
it "returns false if store not set" do
klass.has_store?.should be_false
end
end

describe ".has_cache?" do
it "returns true if cache set" do
klass.cache(:memory, {})
klass.has_cache?.should be_true
end

it "returns false if cache not set" do
klass.has_cache?.should be_false
end
end

describe ".store_key" do
it "returns id" do
doc = User.new
Expand Down Expand Up @@ -282,22 +252,4 @@
doc.should be_destroyed
end
end

describe "with cache store" do
before do
User.attribute(:name, String)
@cache = User.cache(:memory, {})
@memory = User.store(:memory, {})
@user = User.create(:name => 'John')
end

let(:cache) { @cache }
let(:memory) { @memory }
let(:user) { @user }

it "writes to cache and store" do
cache[user.store_key].should == {'name' => 'John'}
memory[user.store_key].should == {'name' => 'John'}
end
end
end
56 changes: 0 additions & 56 deletions spec/toy/querying_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -103,60 +103,4 @@
doc.name.should == 'John'
end
end

describe "with cache store" do
before do
@cache = User.cache(:memory, {})
@memory = User.store(:memory, {})
@user = User.create
Toy.identity_map.clear # ensure we are just working with database
end

let(:cache) { @cache }
let(:memory) { @memory }
let(:user) { @user }

describe "not found in cache or store" do
before do
cache.delete(user.store_key)
memory.delete(user.store_key)
end

it "returns nil" do
User.get('foo').should be_nil
end
end

describe "not found in cache" do
before do
cache.delete(user.store_key)
end

it "returns from store" do
User.get(user.id).should == user
end

it "populates cache" do
cache.key?(user.store_key).should be_false
User.get(user.id)
cache.key?(user.store_key).should be_true
end
end

describe "found in cache" do
before do
cache.key?(user.store_key).should be_true
end

it "returns from cache" do
cache.should_receive(:read).with(user.store_key).and_return(user.persisted_attributes)
User.get(user.id)
end

it "does not hit store" do
memory.should_not_receive(:read)
User.get(user.id)
end
end
end
end
5 changes: 0 additions & 5 deletions spec/toy_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,5 @@
klass = Class.new { include Toy::Store }
lambda { Toy.clear }.should_not raise_error
end

it "does not raise error when no cache set" do
klass = Class.new { include Toy::Store }
lambda { Toy.clear }.should_not raise_error
end
end
end

0 comments on commit 5ab198e

Please sign in to comment.