Skip to content

Commit cbdc2cc

Browse files
authored
Merge pull request #84 from basecamp/key-method
Support configuring custom keys via method invocation
2 parents 53255f9 + 7b90152 commit cbdc2cc

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,16 @@ You can use all these structures in models:
168168
```ruby
169169
class Person < ApplicationRecord
170170
kredis_list :names
171-
kredis_list :names_with_custom_key, key: ->(p) { "person:#{p.id}:names_customized" }
171+
kredis_list :names_with_custom_key_via_lambda, key: ->(p) { "person:#{p.id}:names_customized" }
172+
kredis_list :names_with_custom_key_via_method, key: :generate_names_key
172173
kredis_unique_list :skills, limit: 2
173174
kredis_enum :morning, values: %w[ bright blue black ], default: "bright"
174175
kredis_counter :steps, expires_in: 1.hour
176+
177+
private
178+
def generate_names_key
179+
"key-generated-from-private-method"
180+
end
175181
end
176182

177183
person = Person.find(5)

lib/kredis/attributes.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def kredis_key_evaluated(key)
9797
case key
9898
when String then key
9999
when Proc then key.call(self)
100+
when Symbol then send(key)
100101
end
101102
end
102103

test/attributes_test.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ class Person
88
kredis_proxy :nothing, key: "something:else"
99
kredis_proxy :something, key: ->(p) { "person:#{p.id}:something" }
1010
kredis_list :names
11-
kredis_list :names_with_custom_key, key: ->(p) { "person:#{p.id}:names_customized" }
11+
kredis_list :names_with_custom_key_via_lambda, key: ->(p) { "person:#{p.id}:names_customized" }
12+
kredis_list :names_with_custom_key_via_method, key: :generate_key
1213
kredis_unique_list :skills, limit: 2
1314
kredis_flag :special
1415
kredis_flag :temporary_special, expires_in: 1.second
@@ -35,6 +36,11 @@ def self.name
3536
def id
3637
8
3738
end
39+
40+
private
41+
def generate_key
42+
"some-generated-key"
43+
end
3844
end
3945

4046
class MissingIdPerson
@@ -68,10 +74,15 @@ class AttributesTest < ActiveSupport::TestCase
6874
end
6975

7076
test "list with custom proc key" do
71-
@person.names_with_custom_key.append(%w[ david kasper ])
77+
@person.names_with_custom_key_via_lambda.append(%w[ david kasper ])
7278
assert_equal %w[ david kasper ], Kredis.redis.lrange("person:8:names_customized", 0, -1)
7379
end
7480

81+
test "list with custom method key" do
82+
@person.names_with_custom_key_via_method.append(%w[ david kasper ])
83+
assert_equal %w[ david kasper ], Kredis.redis.lrange("some-generated-key", 0, -1)
84+
end
85+
7586
test "unique list" do
7687
@person.skills.prepend(%w[ trolling photography ])
7788
@person.skills.prepend("racing")

0 commit comments

Comments
 (0)