elephas 2.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/README.md +4 -4
- data/doc/Elephas/{Providers → Backends}/Base.html +48 -38
- data/doc/Elephas/{Providers → Backends}/Hash.html +35 -38
- data/doc/Elephas/{Providers → Backends}/RubyOnRails.html +32 -35
- data/doc/Elephas/{Providers.html → Backends.html} +8 -10
- data/doc/Elephas/Cache.html +894 -111
- data/doc/Elephas/Entry.html +63 -50
- data/doc/Elephas/Version.html +3 -3
- data/doc/Elephas.html +3 -3
- data/doc/_index.html +14 -22
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +5 -5
- data/doc/index.html +5 -5
- data/doc/method_list.html +62 -54
- data/doc/top-level-namespace.html +1 -1
- data/elephas.gemspec +1 -1
- data/lib/elephas/{provider.rb → backends/base.rb} +4 -6
- data/lib/elephas/{providers → backends}/hash.rb +7 -7
- data/lib/elephas/{providers → backends}/ruby_on_rails.rb +4 -6
- data/lib/elephas/cache.rb +47 -29
- data/lib/elephas/entry.rb +6 -6
- data/lib/elephas/version.rb +2 -2
- data/lib/elephas.rb +4 -6
- data/locales/en.yml +1 -1
- data/locales/it.yml +1 -1
- data/spec/elephas/cache_spec.rb +32 -35
- data/spec/elephas/entry_spec.rb +6 -5
- data/spec/elephas/{provider_spec.rb → providers/base_spec.rb} +2 -6
- data/spec/elephas/providers/hash_spec.rb +6 -6
- data/spec/elephas/providers/ruby_on_rails_spec.rb +2 -2
- metadata +14 -14
data/spec/elephas/cache_spec.rb
CHANGED
@@ -7,44 +7,41 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe ::Elephas::Cache do
|
10
|
-
let(:entry) { ::Elephas::Entry.ensure("VALUE", ::Elephas::Cache.
|
10
|
+
let(:entry) { ::Elephas::Entry.ensure("VALUE", ::Elephas::Cache.new(nil).prefix + "[KEY]", {ttl: 3600}) }
|
11
|
+
let(:reference) { ::Elephas::Cache.new(::Elephas::Backends::Hash.new) }
|
11
12
|
|
12
13
|
describe ".use" do
|
13
|
-
before(:each) do
|
14
|
-
::Elephas::Cache.provider = Elephas::Providers::Hash.new
|
15
|
-
end
|
16
|
-
|
17
14
|
it "should use the provider for reading the value" do
|
18
|
-
|
19
|
-
|
15
|
+
reference.backend.should_receive(:read)
|
16
|
+
reference.use("KEY") do "VALUE" end
|
20
17
|
end
|
21
18
|
|
22
19
|
it "should skip the provider if requested to" do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
reference.use("KEY", {ttl: 0}) do "VALUE" end
|
21
|
+
reference.backend.should_not_receive(:read)
|
22
|
+
reference.use("KEY", {force: true}) do "VALUE" end
|
23
|
+
reference.backend.should_not_receive(:read)
|
27
24
|
end
|
28
25
|
|
29
26
|
it "should use the block for value computation" do
|
30
|
-
expect{
|
27
|
+
expect{ reference.use("KEY") do raise ArgumentError end }.to raise_error(ArgumentError)
|
31
28
|
end
|
32
29
|
|
33
30
|
it "should not use the block if the value is valid" do
|
34
|
-
|
35
|
-
expect{
|
31
|
+
reference.use("KEY") do entry end
|
32
|
+
expect{ reference.use("KEY") do raise ArgumentError end }.not_to raise_error(ArgumentError)
|
36
33
|
end
|
37
34
|
|
38
35
|
it "should store the value in the cache" do
|
39
|
-
|
40
|
-
expect(
|
36
|
+
reference.use("KEY") do entry end
|
37
|
+
expect(reference.backend.read(entry.hash)).to eq(entry)
|
41
38
|
end
|
42
39
|
|
43
40
|
it "should return the entire entry or only the value" do
|
44
|
-
|
41
|
+
reference.use("KEY") do "VALUE" end
|
45
42
|
|
46
|
-
expect(
|
47
|
-
value =
|
43
|
+
expect(reference.use("KEY")).to eq("VALUE")
|
44
|
+
value = reference.use("KEY", {as_entry: true})
|
48
45
|
expect(value).to be_a(::Elephas::Entry)
|
49
46
|
expect(value.value).to eq("VALUE")
|
50
47
|
end
|
@@ -52,36 +49,36 @@ describe ::Elephas::Cache do
|
|
52
49
|
|
53
50
|
describe ".read" do
|
54
51
|
it "should be forwarded to the provider" do
|
55
|
-
|
56
|
-
|
52
|
+
reference.backend.should_receive(:read)
|
53
|
+
reference.read("KEY")
|
57
54
|
end
|
58
55
|
end
|
59
56
|
|
60
57
|
describe ".write" do
|
61
58
|
it "should be forwarded to the provider" do
|
62
|
-
|
63
|
-
|
59
|
+
reference.backend.should_receive(:write)
|
60
|
+
reference.write("KEY", "VALUE")
|
64
61
|
end
|
65
62
|
end
|
66
63
|
|
67
64
|
describe ".delete" do
|
68
65
|
it "should be forwarded to the provider" do
|
69
|
-
|
70
|
-
|
66
|
+
reference.backend.should_receive(:delete)
|
67
|
+
reference.delete("KEY")
|
71
68
|
end
|
72
69
|
end
|
73
70
|
|
74
71
|
describe ".exists?" do
|
75
72
|
it "should be forwarded to the provider" do
|
76
|
-
|
77
|
-
|
73
|
+
reference.backend.should_receive(:exists?)
|
74
|
+
reference.exists?("KEY")
|
78
75
|
end
|
79
76
|
end
|
80
77
|
|
81
78
|
describe "setup_options" do
|
82
79
|
it "should set good defaults for options" do
|
83
80
|
hashes = {
|
84
|
-
base: ::Elephas::Entry.hashify_key("#{
|
81
|
+
base: ::Elephas::Entry.hashify_key("#{reference.prefix}[KEY]"),
|
85
82
|
alternative: ::Elephas::Entry.hashify_key("prefix[KEY]")
|
86
83
|
}
|
87
84
|
|
@@ -96,17 +93,17 @@ describe ::Elephas::Cache do
|
|
96
93
|
]
|
97
94
|
|
98
95
|
reference_hashes = [
|
99
|
-
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: false, prefix:
|
100
|
-
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: false, prefix:
|
101
|
-
{key: "KEY", ttl: 2.hour, force: false, as_entry: false, prefix:
|
102
|
-
{key: "KEY", ttl: 1.hour * 1000, force: true, as_entry: false, prefix:
|
103
|
-
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: true, prefix:
|
96
|
+
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: false, prefix: reference.prefix, complete_key: "#{reference.prefix}[KEY]", hash: hashes[:base]},
|
97
|
+
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: false, prefix: reference.prefix, complete_key: "#{reference.prefix}[KEY]", hash: hashes[:base]},
|
98
|
+
{key: "KEY", ttl: 2.hour, force: false, as_entry: false, prefix: reference.prefix, complete_key: "#{reference.prefix}[KEY]", hash: hashes[:base]},
|
99
|
+
{key: "KEY", ttl: 1.hour * 1000, force: true, as_entry: false, prefix: reference.prefix, complete_key: "#{reference.prefix}[KEY]", hash: hashes[:base]},
|
100
|
+
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: true, prefix: reference.prefix, complete_key: "#{reference.prefix}[KEY]", hash: hashes[:base]},
|
104
101
|
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: false, prefix: "prefix", complete_key: "prefix[KEY]", hash: hashes[:alternative]},
|
105
|
-
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: false, prefix:
|
102
|
+
{key: "KEY", ttl: 1.hour * 1000, force: false, as_entry: false, prefix: reference.prefix, complete_key: "#{reference.prefix}[KEY]", hash: "hash"}
|
106
103
|
]
|
107
104
|
|
108
105
|
options_hashes.each_with_index do |options, i|
|
109
|
-
expect(
|
106
|
+
expect(reference.setup_options(options, "KEY")).to eq(reference_hashes[i])
|
110
107
|
end
|
111
108
|
end
|
112
109
|
end
|
data/spec/elephas/entry_spec.rb
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe Elephas::Entry do
|
10
|
+
let(:backend) { ::Elephas::Backends::Hash.new }
|
10
11
|
subject { ::Elephas::Entry.new("KEY", "VALUE") }
|
11
12
|
|
12
13
|
describe "#initialize" do
|
@@ -41,9 +42,9 @@ describe Elephas::Entry do
|
|
41
42
|
end
|
42
43
|
|
43
44
|
it "should save to the cache" do
|
44
|
-
expect(
|
45
|
-
subject.refresh(true)
|
46
|
-
expect(
|
45
|
+
expect(backend.read(subject.hash)).not_to eq(subject)
|
46
|
+
subject.refresh(true, backend)
|
47
|
+
expect(backend.read(subject.hash)).to eq(subject)
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
@@ -54,13 +55,13 @@ describe Elephas::Entry do
|
|
54
55
|
|
55
56
|
it "should return true if the ttl is still valid" do
|
56
57
|
::Time.stub(:now).and_return(1000)
|
57
|
-
expect(subject.valid?).to be_true
|
58
|
+
expect(subject.valid?(backend)).to be_true
|
58
59
|
end
|
59
60
|
|
60
61
|
it "should return true if the ttl has expired" do
|
61
62
|
::Time.stub(:now).and_return(10000)
|
62
63
|
subject.updated_at = 1000
|
63
|
-
expect(subject.valid?).to be_false
|
64
|
+
expect(subject.valid?(backend)).to be_false
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
@@ -6,12 +6,8 @@
|
|
6
6
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
|
-
describe Elephas::
|
10
|
-
|
11
|
-
include Elephas::Providers::Base
|
12
|
-
end
|
13
|
-
|
14
|
-
let(:provider) { BaseProvider.new }
|
9
|
+
describe Elephas::Backends::Base do
|
10
|
+
let(:provider) { Elephas::Backends::Base.new }
|
15
11
|
|
16
12
|
describe ".read" do
|
17
13
|
it "should raise an ArgumentError exception" do
|
@@ -6,22 +6,22 @@
|
|
6
6
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
|
-
describe Elephas::
|
10
|
-
subject { ::Elephas::
|
9
|
+
describe Elephas::Backends::Hash do
|
10
|
+
subject { ::Elephas::Backends::Hash.new }
|
11
11
|
let!(:value) { subject.write("KEY", ::Elephas::Entry.ensure("VALUE", "KEY", {ttl: 3600})) }
|
12
12
|
|
13
13
|
describe "#initialize" do
|
14
14
|
it "should create a store with an empty hash" do
|
15
|
-
expect(::Elephas::
|
15
|
+
expect(::Elephas::Backends::Hash.new.data).to eq({})
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should create a store with an given hash" do
|
19
|
-
expect(::Elephas::
|
19
|
+
expect(::Elephas::Backends::Hash.new({a: :b}).data).to eq({a: :b})
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should ensure that the store is an Hash" do
|
23
|
-
expect(::Elephas::
|
24
|
-
expect(::Elephas::
|
23
|
+
expect(::Elephas::Backends::Hash.new(nil).data).to eq({})
|
24
|
+
expect(::Elephas::Backends::Hash.new("INVALID").data).to eq({})
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
|
-
describe Elephas::
|
9
|
+
describe Elephas::Backends::RubyOnRails do
|
10
10
|
class TempRailsCache < Hash # This class simulate the presence of Rails
|
11
11
|
def read(key)
|
12
12
|
self[key]
|
@@ -28,7 +28,7 @@ describe Elephas::Providers::RubyOnRails do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
subject { ::Elephas::
|
31
|
+
subject { ::Elephas::Backends::RubyOnRails.new }
|
32
32
|
let!(:value) { subject.write("KEY", ::Elephas::Entry.ensure("VALUE", "KEY", {ttl: 3600})) }
|
33
33
|
|
34
34
|
describe "#read" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elephas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: lazier
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.
|
21
|
+
version: 2.8.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2.
|
29
|
+
version: 2.8.0
|
30
30
|
description: A storage agnostic caching framework.
|
31
31
|
email:
|
32
32
|
- shogun_panda@me.com
|
@@ -42,12 +42,12 @@ files:
|
|
42
42
|
- README.md
|
43
43
|
- Rakefile
|
44
44
|
- doc/Elephas.html
|
45
|
+
- doc/Elephas/Backends.html
|
46
|
+
- doc/Elephas/Backends/Base.html
|
47
|
+
- doc/Elephas/Backends/Hash.html
|
48
|
+
- doc/Elephas/Backends/RubyOnRails.html
|
45
49
|
- doc/Elephas/Cache.html
|
46
50
|
- doc/Elephas/Entry.html
|
47
|
-
- doc/Elephas/Providers.html
|
48
|
-
- doc/Elephas/Providers/Base.html
|
49
|
-
- doc/Elephas/Providers/Hash.html
|
50
|
-
- doc/Elephas/Providers/RubyOnRails.html
|
51
51
|
- doc/Elephas/Version.html
|
52
52
|
- doc/_index.html
|
53
53
|
- doc/class_list.html
|
@@ -65,18 +65,18 @@ files:
|
|
65
65
|
- doc/top-level-namespace.html
|
66
66
|
- elephas.gemspec
|
67
67
|
- lib/elephas.rb
|
68
|
+
- lib/elephas/backends/base.rb
|
69
|
+
- lib/elephas/backends/hash.rb
|
70
|
+
- lib/elephas/backends/ruby_on_rails.rb
|
68
71
|
- lib/elephas/cache.rb
|
69
72
|
- lib/elephas/entry.rb
|
70
|
-
- lib/elephas/provider.rb
|
71
|
-
- lib/elephas/providers/hash.rb
|
72
|
-
- lib/elephas/providers/ruby_on_rails.rb
|
73
73
|
- lib/elephas/version.rb
|
74
74
|
- locales/en.yml
|
75
75
|
- locales/it.yml
|
76
76
|
- spec/coverage_helper.rb
|
77
77
|
- spec/elephas/cache_spec.rb
|
78
78
|
- spec/elephas/entry_spec.rb
|
79
|
-
- spec/elephas/
|
79
|
+
- spec/elephas/providers/base_spec.rb
|
80
80
|
- spec/elephas/providers/hash_spec.rb
|
81
81
|
- spec/elephas/providers/ruby_on_rails_spec.rb
|
82
82
|
- spec/spec_helper.rb
|
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
100
|
version: '0'
|
101
101
|
segments:
|
102
102
|
- 0
|
103
|
-
hash:
|
103
|
+
hash: 3158836318687303019
|
104
104
|
requirements: []
|
105
105
|
rubyforge_project: elephas
|
106
106
|
rubygems_version: 1.8.25
|
@@ -111,7 +111,7 @@ test_files:
|
|
111
111
|
- spec/coverage_helper.rb
|
112
112
|
- spec/elephas/cache_spec.rb
|
113
113
|
- spec/elephas/entry_spec.rb
|
114
|
-
- spec/elephas/
|
114
|
+
- spec/elephas/providers/base_spec.rb
|
115
115
|
- spec/elephas/providers/hash_spec.rb
|
116
116
|
- spec/elephas/providers/ruby_on_rails_spec.rb
|
117
117
|
- spec/spec_helper.rb
|