spec/elephas/cache_spec.rb in elephas-0.1.0 vs spec/elephas/cache_spec.rb in elephas-1.0.0
- old
+ new
@@ -4,38 +4,105 @@
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
#
require "spec_helper"
-describe Elephas::Cache do
- pending ".use" do
+describe ::Elephas::Cache do
+ let(:entry) { ::Elephas::Entry.ensure("VALUE", ::Elephas::Cache.default_prefix + "[KEY]", {:ttl => 3600}) }
+ describe ".use" do
+ before(:each) do
+ ::Elephas::Cache.provider = Elephas::Providers::Hash.new
+ end
+
+ it "should use the provider for reading the value" do
+ ::Elephas::Cache.provider.should_receive(:read)
+ ::Elephas::Cache.use("KEY") do "VALUE" end
+ end
+
+ it "should skip the provider if requested to" do
+ ::Elephas::Cache.use("KEY", {:ttl => 0}) do "VALUE" end
+ ::Elephas::Cache.provider.should_not_receive(:read)
+ ::Elephas::Cache.use("KEY", {:force => true}) do "VALUE" end
+ ::Elephas::Cache.provider.should_not_receive(:read)
+ end
+
+ it "should use the block for value computation" do
+ expect{ ::Elephas::Cache.use("KEY") do raise ArgumentError end }.to raise_error(ArgumentError)
+ end
+
+ it "should not use the block if the value is valid" do
+ ::Elephas::Cache.use("KEY") do entry end
+ expect{ ::Elephas::Cache.use("KEY") do raise ArgumentError end }.not_to raise_error(ArgumentError)
+ end
+
+ it "should store the value in the cache" do
+ ::Elephas::Cache.use("KEY") do entry end
+ expect(::Elephas::Cache.provider.read(entry.hash)).to eq(entry)
+ end
+
+ it "should return the entire entry or only the value" do
+ ::Elephas::Cache.use("KEY") do "VALUE" end
+
+ expect(::Elephas::Cache.use("KEY")).to eq("VALUE")
+ value = ::Elephas::Cache.use("KEY", {:as_entry => true})
+ expect(value).to be_a(::Elephas::Entry)
+ expect(value.value).to eq("VALUE")
+ end
end
describe ".read" do
it "should be forwarded to the provider" do
- Elephas::Cache.provider.should_receive(:read)
- Elephas::Cache.read("KEY")
+ ::Elephas::Cache.provider.should_receive(:read)
+ ::Elephas::Cache.read("KEY")
end
end
describe ".write" do
it "should be forwarded to the provider" do
- Elephas::Cache.provider.should_receive(:write)
- Elephas::Cache.write("KEY", "VALUE")
+ ::Elephas::Cache.provider.should_receive(:write)
+ ::Elephas::Cache.write("KEY", "VALUE")
end
end
describe ".delete" do
it "should be forwarded to the provider" do
- Elephas::Cache.provider.should_receive(:delete)
- Elephas::Cache.delete("KEY")
+ ::Elephas::Cache.provider.should_receive(:delete)
+ ::Elephas::Cache.delete("KEY")
end
end
describe ".exists?" do
it "should be forwarded to the provider" do
- Elephas::Cache.provider.should_receive(:exists?)
- Elephas::Cache.exists?("KEY")
+ ::Elephas::Cache.provider.should_receive(:exists?)
+ ::Elephas::Cache.exists?("KEY")
+ end
+ end
+
+ describe "setup_options" do
+ it "should set good defaults for options" do
+ options_hashes = [
+ nil,
+ "A",
+ {:ttl => 2.hour},
+ {:force => true},
+ {:as_entry => true},
+ {:prefix => "prefix", :hash => "1f3caa3bd0b7ba49dc25f9445abdd4fed6fe65236681b392f0da251673885ea9"},
+ {:hash => "hash"}
+ ]
+
+ reference_hashes = [
+ {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"},
+ {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"},
+ {:key => "KEY", :ttl => 2.hour, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"},
+ {:key => "KEY", :ttl => 1.hour * 1000, :force => true, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"},
+ {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => true, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"},
+ {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => "prefix", :complete_key => "prefix[KEY]", :hash => "1f3caa3bd0b7ba49dc25f9445abdd4fed6fe65236681b392f0da251673885ea9"},
+ {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "hash"}
+ ]
+
+ options_hashes.each_with_index do |options, i|
+ expect(::Elephas::Cache.setup_options(options, "KEY")).to eq(reference_hashes[i])
+ end
end
end
end
\ No newline at end of file