cartman 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/cartman/cart.rb +18 -0
- data/lib/cartman/item.rb +15 -0
- data/lib/cartman/version.rb +1 -1
- data/spec/cart_spec.rb +12 -0
- data/spec/item_spec.rb +17 -0
- metadata +4 -4
data/lib/cartman/cart.rb
CHANGED
@@ -12,6 +12,7 @@ module Cartman
|
|
12
12
|
line_item_id = @@redis.incr CART_LINE_ITEM_ID_KEY
|
13
13
|
@@redis.pipelined do
|
14
14
|
@@redis.mapped_hmset("cartman:line_item:#{line_item_id}", options)
|
15
|
+
@@redis.hincrby("cartman:line_item:#{line_item_id}", :_version, 1)
|
15
16
|
@@redis.sadd key, line_item_id
|
16
17
|
@@redis.sadd index_key, "#{options[:type]}:#{options[:id]}"
|
17
18
|
@@redis.set index_key_for(options), line_item_id
|
@@ -91,6 +92,11 @@ module Cartman
|
|
91
92
|
@@redis.expire item, Cartman::Configuration.cart_expires_in
|
92
93
|
end
|
93
94
|
end
|
95
|
+
@@redis.hincrby self.class.versions_key, version_key, 1
|
96
|
+
end
|
97
|
+
|
98
|
+
def version
|
99
|
+
@@redis.hget(self.class.versions_key, version_key).to_i
|
94
100
|
end
|
95
101
|
|
96
102
|
def reassign(new_id)
|
@@ -107,6 +113,10 @@ module Cartman
|
|
107
113
|
@uid = new_id
|
108
114
|
end
|
109
115
|
|
116
|
+
def cache_key
|
117
|
+
"cart/#{@uid}-#{version}"
|
118
|
+
end
|
119
|
+
|
110
120
|
private
|
111
121
|
|
112
122
|
def key(id=@uid)
|
@@ -117,6 +127,14 @@ module Cartman
|
|
117
127
|
key(id) + ":index"
|
118
128
|
end
|
119
129
|
|
130
|
+
def version_key(id=@uid)
|
131
|
+
id
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.versions_key
|
135
|
+
"cartman:cart:versions"
|
136
|
+
end
|
137
|
+
|
120
138
|
def index_keys(id=@uid)
|
121
139
|
@@redis.keys "#{index_key(id)}:*"
|
122
140
|
end
|
data/lib/cartman/item.rb
CHANGED
@@ -28,14 +28,29 @@ module Cartman
|
|
28
28
|
@id == item._id
|
29
29
|
end
|
30
30
|
|
31
|
+
def touch
|
32
|
+
cart.touch
|
33
|
+
Cartman::Configuration.redis.hincrby _key, :_version, 1
|
34
|
+
end
|
35
|
+
|
31
36
|
def _key
|
32
37
|
"cartman:line_item:#{@id}"
|
33
38
|
end
|
34
39
|
|
40
|
+
def _version
|
41
|
+
super.to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
def cache_key
|
45
|
+
"item/#{@id}-#{_version}"
|
46
|
+
end
|
47
|
+
|
35
48
|
def method_missing(method, *args, &block)
|
36
49
|
if method.to_s =~ /=\z/
|
37
50
|
Cartman::Configuration.redis.hset _key, method[0..-2], args[0].to_s
|
38
51
|
@data.store(method[0..-2].to_sym, args[0].to_s)
|
52
|
+
version = touch
|
53
|
+
@data.store(:_version, version)
|
39
54
|
else
|
40
55
|
@data.fetch(method)
|
41
56
|
end
|
data/lib/cartman/version.rb
CHANGED
data/spec/cart_spec.rb
CHANGED
@@ -187,6 +187,12 @@ describe Cartman do
|
|
187
187
|
Cartman.config.redis.ttl("cartman:cart:1:index").should eq(Cartman.config.cart_expires_in)
|
188
188
|
Cartman.config.redis.ttl("cartman:cart:1:index:Bottle:17").should eq(Cartman.config.cart_expires_in)
|
189
189
|
end
|
190
|
+
|
191
|
+
it "should record that the cart was updated" do
|
192
|
+
cart.add_item(id: 17, type: "Bottle", name: "Bordeux", unit_cost: 92.12, cost_in_cents: 18424, quantity: 2)
|
193
|
+
cart.touch
|
194
|
+
cart.version.should eq(2)
|
195
|
+
end
|
190
196
|
end
|
191
197
|
|
192
198
|
describe "#reassign" do
|
@@ -214,5 +220,11 @@ describe Cartman do
|
|
214
220
|
cart.send(:key)[-1].should eq("1")
|
215
221
|
end
|
216
222
|
end
|
223
|
+
|
224
|
+
describe "#cache_key" do
|
225
|
+
it "should return /cart/{cart_id}-{version}/" do
|
226
|
+
cart.cache_key.should eq("cart/#{cart.instance_variable_get(:@uid)}-#{cart.version}")
|
227
|
+
end
|
228
|
+
end
|
217
229
|
end
|
218
230
|
end
|
data/spec/item_spec.rb
CHANGED
@@ -24,6 +24,10 @@ describe Cartman do
|
|
24
24
|
new_item = cart.send(:get_item, item._id)
|
25
25
|
new_item.quantity.should eq("3")
|
26
26
|
end
|
27
|
+
|
28
|
+
it "should touch the item and cart" do
|
29
|
+
expect{item.quantity = 4}.to change{item._version}.by(1)
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
describe "#cost" do
|
@@ -43,5 +47,18 @@ describe Cartman do
|
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
50
|
+
describe "#touch" do
|
51
|
+
it "should record that the record was changed" do
|
52
|
+
item.touch
|
53
|
+
item._version.should eq(1)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#cache_key" do
|
58
|
+
it "should return item/{id}-{version}" do
|
59
|
+
item.cache_key.should eq("item/#{item._id}-#{item._version}")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
46
63
|
end
|
47
64
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cartman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.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: 2012-10-
|
12
|
+
date: 2012-10-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
@@ -81,7 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
81
|
version: '0'
|
82
82
|
segments:
|
83
83
|
- 0
|
84
|
-
hash: -
|
84
|
+
hash: -2016413100471598065
|
85
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
86
|
none: false
|
87
87
|
requirements:
|
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: '0'
|
91
91
|
segments:
|
92
92
|
- 0
|
93
|
-
hash: -
|
93
|
+
hash: -2016413100471598065
|
94
94
|
requirements: []
|
95
95
|
rubyforge_project:
|
96
96
|
rubygems_version: 1.8.23
|