redis-breadcrumbs 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1 +1,4 @@
1
1
  Gemfile.lock
2
+ pkg
3
+ .rvmrc
4
+ *.rdb
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - jruby-18mode
7
+ - jruby-19mode
8
+ - rbx-18mode
9
+ - rbx-19mode
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Eoin Coffey
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/ecoffey/redis-breadcrumbs.png)](https://travis-ci.org/ecoffey/redis-breadcrumbs)
2
+
1
3
  ## Redis and key tracking
2
4
 
3
5
  Redis is a bit different than a lot of other "data stores". This also means that thinking about ownership management
@@ -19,13 +21,19 @@ class WorkerBreadcrumb < Redis::Breadcrumb
19
21
  owns 'resque:worker:<id>'
20
22
  owns 'resque:worker:<id>:started'
21
23
 
22
- member_of_set :id => 'resque:workers'
24
+ member_of_set '<id>' => 'resque:workers'
23
25
  end
24
26
  ```
25
27
 
26
28
  ## Usage
27
29
 
28
- No release yet :)
30
+ Either
31
+
32
+ `gem install redis-breadcrumbs`
33
+
34
+ or add the following to your Gemfile
35
+
36
+ `gem "redis-breadcrumbs", "~> 0.0.1"`
29
37
 
30
38
  ## Contributing
31
39
 
@@ -1,35 +1,46 @@
1
- module Redis
1
+ require 'redis-breadcrumbs/dsl'
2
+ require 'redis-breadcrumbs/keys'
3
+
4
+ class Redis
2
5
  class Breadcrumb
3
- class << self
4
- attr_accessor :owned_keys
6
+ include Breadcrumbs::Dsl
5
7
 
6
- def redis
7
- @@redis
8
- end
8
+ attr_reader :tracked_in
9
9
 
10
- def redis= redis
11
- @@redis = redis
12
- end
10
+ def initialize object
11
+ @tracked_in = self.class.tracked_in_key.specialize(object).to_s
12
+ @keys = self.class.keys.specialize object
13
+ end
13
14
 
14
- def tracked_in *args
15
- args.length > 0 ? @tracked_in = args[0] : @tracked_in
16
- end
15
+ def track!
16
+ return if @tracked_in.nil? || @tracked_in == ""
17
17
 
18
- def owns key
19
- (@owned_keys ||= []) << key
20
- end
18
+ jsons = @keys.clean_cmds.map(&:to_json)
19
+
20
+ redis.sadd @tracked_in, jsons
21
+ end
22
+
23
+ def clean!
24
+ cmds = Set.new tracked_keys.concat(@keys.clean_cmds)
21
25
 
22
- def register
23
- @owned_keys.each do |key|
24
- redis.sadd @tracked_in, [:del, key].to_json
25
- end
26
+ cmds.each do |cmd_tuple|
27
+ cmd = cmd_tuple[0]
28
+ args = cmd_tuple[1..-1]
29
+ redis.send cmd, *args
26
30
  end
31
+ end
27
32
 
28
- def tracked_keys
29
- redis.smembers(@tracked_in).map do |json|
30
- JSON.parse(json)
31
- end
33
+ def tracked_keys
34
+ redis.smembers(@tracked_in).map do |json|
35
+ JSON.parse(json)
32
36
  end
33
37
  end
38
+
39
+ private
40
+
41
+ def redis
42
+ self.class.redis
43
+ end
44
+
34
45
  end
35
46
  end
@@ -0,0 +1,86 @@
1
+ require 'redis-breadcrumbs/keys'
2
+
3
+ class BreadcrumbSpecializationError < Exception; end
4
+
5
+ module Breadcrumbs
6
+ module Dsl
7
+
8
+ class UnspecializedDummyObject
9
+ instance_methods.each do |m|
10
+ undef_method m unless m =~ /^(__|object_id|instance_eval)/
11
+ end
12
+
13
+ def method_missing method, *args
14
+ raise BreadcrumbSpecializationError, "#{method}"
15
+ end
16
+
17
+ def respond_to? *args; false; end
18
+ end
19
+
20
+ def self.included subclass
21
+ subclass.extend ClassMethods
22
+ end
23
+
24
+ module ClassMethods
25
+ def redis
26
+ @@redis
27
+ end
28
+
29
+ def redis= redis
30
+ if defined?(Redis::Namespace) && redis.is_a?(Redis::Namespace)
31
+ redis = redis.redis # yo dawg
32
+ end
33
+
34
+ @@redis = redis
35
+ end
36
+
37
+ def tracked_in *args
38
+ args.length > 0 ? @tracked_in = args[0] : @tracked_in
39
+ end
40
+
41
+ def tracked_in_key
42
+ Key.new tracked_in
43
+ end
44
+
45
+ def owns key
46
+ owned_keys << key
47
+ keys << OwnedKey.new(key)
48
+ end
49
+
50
+ def member_of_set member_to_set
51
+ member = member_to_set.keys[0]
52
+ set = member_to_set[member]
53
+
54
+ member_of_sets << [member, set]
55
+ keys << MemberOfSetKey.new(member, set, :srem)
56
+ end
57
+
58
+ def track! object=UnspecializedDummyObject.new
59
+ new(object).tap(&:track!)
60
+ end
61
+
62
+ def clean! object=UnspecializedDummyObject.new
63
+ new(object).tap(&:clean!)
64
+ end
65
+
66
+ def tracked_keys
67
+ redis.smembers(@tracked_in).map do |json|
68
+ JSON.parse(json)
69
+ end
70
+ end
71
+
72
+ def keys
73
+ @keys ||= Keys.new
74
+ end
75
+
76
+ def owned_keys
77
+ @owned_keys ||= []
78
+ end
79
+
80
+ def member_of_sets
81
+ @member_of_sets ||= []
82
+ end
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,40 @@
1
+ module Breadcrumbs
2
+ class Key
3
+ def initialize key_template
4
+ @key_template = key_template.to_s
5
+ end
6
+
7
+ def specialize object
8
+ Key.new specialize_from_template(@key_template, object)
9
+ end
10
+
11
+ def clean_cmd
12
+ raise "Can't clean this key #{@key_template}"
13
+ end
14
+
15
+ def to_s
16
+ @key_template
17
+ end
18
+
19
+ protected
20
+
21
+ TEMPLATE_REGEX = /(<\w+>)/
22
+
23
+ def specialize_from_template template, object
24
+ matches = TEMPLATE_REGEX.match template.to_s
25
+
26
+ return template if matches.nil?
27
+
28
+ specialized = template.dup
29
+
30
+ matches.captures.each do |method_marker|
31
+ method = method_marker[1..-2].to_sym
32
+
33
+ specialized.gsub! method_marker, object.send(method)
34
+ end
35
+
36
+ specialized
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,26 @@
1
+ require 'redis-breadcrumbs/key'
2
+ require 'redis-breadcrumbs/owned_key'
3
+ require 'redis-breadcrumbs/member_of_set_key'
4
+
5
+ module Breadcrumbs
6
+ class Keys
7
+ def initialize keys=[]
8
+ @keys = keys
9
+ end
10
+
11
+ def << key
12
+ @keys << key
13
+ end
14
+
15
+ def specialize object
16
+ Keys.new(@keys.map do |key|
17
+ key.specialize object
18
+ end)
19
+ end
20
+
21
+ def clean_cmds
22
+ @keys.map &:clean_cmd
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,22 @@
1
+ module Breadcrumbs
2
+ class MemberOfSetKey < Key
3
+ def initialize member_template, set_template, clean_method
4
+ @member_template = member_template.to_s
5
+ @set_template = set_template.to_s
6
+ @clean_method = clean_method
7
+ end
8
+
9
+ def specialize object
10
+ MemberOfSetKey.new(
11
+ specialize_from_template(@member_template, object),
12
+ specialize_from_template(@set_template, object),
13
+ @clean_method
14
+ )
15
+ end
16
+
17
+ def clean_cmd
18
+ [@clean_method, @set_template, @member_template]
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,16 @@
1
+ module Breadcrumbs
2
+ class OwnedKey < Key
3
+ def initialize key_template
4
+ @key_template = key_template.to_s
5
+ end
6
+
7
+ def specialize object
8
+ OwnedKey.new specialize_from_template(@key_template, object)
9
+ end
10
+
11
+ def clean_cmd
12
+ [:del, @key_template]
13
+ end
14
+ end
15
+
16
+ end
@@ -1,3 +1,3 @@
1
1
  module RedisBreadcrumbs
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -18,8 +18,11 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
+ s.add_dependency "json"
22
+ s.add_dependency "redis"
23
+
21
24
  s.add_development_dependency "rake", ">= 0.9.2"
22
- s.add_development_dependency "redis", "~> 3.0.0"
23
25
  s.add_development_dependency "minitest", "~> 4.3.2"
24
26
  s.add_development_dependency "mock_redis", "~> 0.6"
27
+ s.add_development_dependency "redis-namespace", "~> 1.2"
25
28
  end
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Redis::Breadcrumb' do
4
+ before do
5
+ Redis::Breadcrumb.redis = MockRedis.new
6
+ end
7
+
8
+ it 'will clean up currently defined keys' do
9
+ class CleanUpCurrentKeys < Redis::Breadcrumb
10
+ owns :a_key
11
+ end
12
+
13
+ CleanUpCurrentKeys.redis.set 'a_key', 'hello'
14
+
15
+ assert_equal 'hello', CleanUpCurrentKeys.redis.get('a_key')
16
+
17
+ CleanUpCurrentKeys.clean!
18
+
19
+ assert_nil CleanUpCurrentKeys.redis.get('a_key')
20
+ end
21
+
22
+ it 'will raise if no object given for specialized template' do
23
+ class UnspecializedCleanKeys < Redis::Breadcrumb
24
+ owns 'widget:<id>'
25
+ end
26
+
27
+ assert_raises BreadcrumbSpecializationError do
28
+ UnspecializedCleanKeys.clean!
29
+ end
30
+ end
31
+
32
+ it 'will clean up currently defined specialized keys' do
33
+ class CleanUpCurrentSpecializedKeys < Redis::Breadcrumb
34
+ owns 'widget:<id>'
35
+ end
36
+
37
+ obj = Object.new
38
+ class << obj
39
+ def id; 'foo'; end
40
+ end
41
+
42
+ CleanUpCurrentSpecializedKeys.redis.set 'widget:foo', 'yarg'
43
+
44
+ assert_equal 'yarg', CleanUpCurrentSpecializedKeys.redis.get('widget:foo')
45
+
46
+ CleanUpCurrentSpecializedKeys.clean! obj
47
+
48
+ assert_nil CleanUpCurrentSpecializedKeys.redis.get('widget:foo')
49
+ end
50
+
51
+ it 'will clean up previously tracked and current keys' do
52
+ class CleanUpPrevAndCurrentKeys < Redis::Breadcrumb
53
+ tracked_in 'widget:<id>:tracking'
54
+
55
+ owns 'widget:<id>'
56
+
57
+ member_of_set '<id>' => 'widgets'
58
+ end
59
+
60
+ obj = Object.new
61
+ class << obj
62
+ def id; 'foo'; end
63
+ end
64
+
65
+ CleanUpPrevAndCurrentKeys.redis.sadd 'widget:foo:tracking', [:del, 'widget:foo:blah'].to_json
66
+
67
+ CleanUpPrevAndCurrentKeys.redis.set 'widget:foo', 'hello'
68
+ CleanUpPrevAndCurrentKeys.redis.set 'widget:foo:blah', 'world'
69
+ CleanUpPrevAndCurrentKeys.redis.sadd 'widgets', 'foo'
70
+
71
+ CleanUpPrevAndCurrentKeys.clean! obj
72
+
73
+ assert_nil CleanUpPrevAndCurrentKeys.redis.get('widget:foo')
74
+ assert_nil CleanUpPrevAndCurrentKeys.redis.get('widget:foo:blah')
75
+ refute CleanUpPrevAndCurrentKeys.redis.sismember('widgets', 'foo')
76
+ end
77
+ end
data/test/dsl_test.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Redis::Breadcrumb' do
4
+ class DslBreadcrumb < Redis::Breadcrumb
5
+ tracked_in 'tracking_key'
6
+
7
+ owns :a_owned_key
8
+
9
+ member_of_set :id => :a_set_of_things
10
+ end
11
+
12
+ before do
13
+ redis = MockRedis.new
14
+
15
+ Redis::Breadcrumb.redis = redis
16
+ end
17
+
18
+ it 'will unwrap a RedisNamespace to the "raw" client' do
19
+ require 'redis-namespace'
20
+
21
+ redis = MockRedis.new
22
+ rn = Redis::Namespace.new :namespaced, :redis => redis
23
+
24
+ Redis::Breadcrumb.redis = rn
25
+
26
+ Redis::Breadcrumb.redis.set 'blah', 1
27
+
28
+ assert_nil redis.get('namespaced:blah')
29
+ assert_equal "1", redis.get('blah')
30
+ end
31
+
32
+ it 'can record a key to track in' do
33
+ assert_equal 'tracking_key', DslBreadcrumb.tracked_in
34
+ end
35
+
36
+ it 'can own a key' do
37
+ assert_equal [:a_owned_key], DslBreadcrumb.owned_keys
38
+ end
39
+
40
+ it 'can be a member of a set' do
41
+ assert_equal [[:id, :a_set_of_things]], DslBreadcrumb.member_of_sets
42
+ end
43
+
44
+ it 'tracks keys for each class' do
45
+ class Test2Breadcrumb < Redis::Breadcrumb
46
+ tracked_in 'different_tracking_key'
47
+
48
+ owns :a_different_key
49
+ end
50
+
51
+ refute_equal DslBreadcrumb.owned_keys, Test2Breadcrumb.owned_keys
52
+ end
53
+
54
+ end
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Redis::Breadcrumb' do
4
+ before do
5
+ Redis::Breadcrumb.redis = MockRedis.new
6
+ end
7
+
8
+ it 'can track tracked keys in tracked_in' do
9
+ class TrackedInBreadcrumb < Redis::Breadcrumb
10
+ tracked_in 'tracking_key'
11
+
12
+ owns :a_owned_key
13
+
14
+ member_of_set :id => :a_set_of_things
15
+ end
16
+
17
+ TrackedInBreadcrumb.track!
18
+
19
+ assert_equal [
20
+ ["srem", "a_set_of_things", "id"],
21
+ ["del", "a_owned_key"]
22
+ ].sort, TrackedInBreadcrumb.tracked_keys.sort
23
+ end
24
+
25
+ it 'tracked_in can be optional' do
26
+ class NoTrackedInBreadcrumb < Redis::Breadcrumb
27
+ owns :a_key
28
+ end
29
+
30
+ NoTrackedInBreadcrumb.track!
31
+
32
+ assert_equal [], NoTrackedInBreadcrumb.redis.keys('*')
33
+ end
34
+
35
+ it 'will raise if no object given for specialized template' do
36
+ class UnspecializedBreadcrumb < Redis::Breadcrumb
37
+ tracked_in 'tracking_key'
38
+
39
+ owns 'a_special_<id>_key'
40
+ end
41
+
42
+ assert_raises BreadcrumbSpecializationError do
43
+ UnspecializedBreadcrumb.track!
44
+ end
45
+ end
46
+
47
+ it 'can track owned keys for a specific object' do
48
+ class OwnedBreadcrumb < Redis::Breadcrumb
49
+ tracked_in 'widget:<id>:tracking'
50
+
51
+ owns 'widget:<id>'
52
+ end
53
+
54
+ obj = Object.new
55
+ class << obj
56
+ def id; "foo"; end
57
+ end
58
+
59
+ breadcrumb = OwnedBreadcrumb.track!(obj)
60
+
61
+ assert_equal [["del", "widget:foo"]], breadcrumb.tracked_keys
62
+ end
63
+
64
+ it 'can track member of set keys for a specific object' do
65
+ class MemberOfSetBreadcrumb < Redis::Breadcrumb
66
+ tracked_in 'widget:<id>:tracking'
67
+
68
+ member_of_set "<id>" => :a_set_of_things
69
+ end
70
+
71
+ obj = Object.new
72
+ class << obj
73
+ def id; "foo"; end
74
+ end
75
+
76
+ breadcrumb = MemberOfSetBreadcrumb.track!(obj)
77
+
78
+ assert_equal [["srem", "a_set_of_things", "foo"]], breadcrumb.tracked_keys
79
+ end
80
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-breadcrumbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,40 +9,56 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-19 00:00:00.000000000 Z
12
+ date: 2012-12-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rake
15
+ name: json
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.9.2
22
- type: :development
21
+ version: '0'
22
+ type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.9.2
29
+ version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: redis
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ~>
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
36
52
  - !ruby/object:Gem::Version
37
- version: 3.0.0
53
+ version: 0.9.2
38
54
  type: :development
39
55
  prerelease: false
40
56
  version_requirements: !ruby/object:Gem::Requirement
41
57
  none: false
42
58
  requirements:
43
- - - ~>
59
+ - - ! '>='
44
60
  - !ruby/object:Gem::Version
45
- version: 3.0.0
61
+ version: 0.9.2
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: minitest
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +91,22 @@ dependencies:
75
91
  - - ~>
76
92
  - !ruby/object:Gem::Version
77
93
  version: '0.6'
94
+ - !ruby/object:Gem::Dependency
95
+ name: redis-namespace
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '1.2'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '1.2'
78
110
  description: Inherit from Redis::Breadcrumb to get going!
79
111
  email:
80
112
  - ecoffey@gmail.com
@@ -83,16 +115,24 @@ extensions: []
83
115
  extra_rdoc_files: []
84
116
  files:
85
117
  - .gitignore
86
- - .rvmrc
118
+ - .travis.yml
87
119
  - Gemfile
120
+ - LICENSE.txt
88
121
  - README.md
89
122
  - Rakefile
90
123
  - lib/redis-breadcrumbs.rb
91
124
  - lib/redis-breadcrumbs/breadcrumb.rb
125
+ - lib/redis-breadcrumbs/dsl.rb
126
+ - lib/redis-breadcrumbs/key.rb
127
+ - lib/redis-breadcrumbs/keys.rb
128
+ - lib/redis-breadcrumbs/member_of_set_key.rb
129
+ - lib/redis-breadcrumbs/owned_key.rb
92
130
  - lib/redis-breadcrumbs/version.rb
93
131
  - redis-breadcrumbs.gemspec
94
- - test/breadcrumb_test.rb
132
+ - test/cleaning_test.rb
133
+ - test/dsl_test.rb
95
134
  - test/test_helper.rb
135
+ - test/tracking_test.rb
96
136
  homepage: https://github.com/ecoffey/redis-breadcrumbs
97
137
  licenses: []
98
138
  post_install_message:
@@ -107,7 +147,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
147
  version: '0'
108
148
  segments:
109
149
  - 0
110
- hash: 3876120171022687880
150
+ hash: -4237510823449836628
111
151
  required_rubygems_version: !ruby/object:Gem::Requirement
112
152
  none: false
113
153
  requirements:
@@ -116,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
156
  version: '0'
117
157
  segments:
118
158
  - 0
119
- hash: 3876120171022687880
159
+ hash: -4237510823449836628
120
160
  requirements: []
121
161
  rubyforge_project:
122
162
  rubygems_version: 1.8.24
@@ -124,5 +164,7 @@ signing_key:
124
164
  specification_version: 3
125
165
  summary: A friendly DSL for tracking and cleaning up redis keys.
126
166
  test_files:
127
- - test/breadcrumb_test.rb
167
+ - test/cleaning_test.rb
168
+ - test/dsl_test.rb
128
169
  - test/test_helper.rb
170
+ - test/tracking_test.rb
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm 1.9.3@redis-breadcrumbs --create
@@ -1,40 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe 'Redis::Breadcrumb' do
4
- class TestBreadcrumb < Redis::Breadcrumb
5
- tracked_in 'tracking_key'
6
-
7
- owns :a_owned_key
8
- end
9
-
10
- before do
11
- redis = MockRedis.new
12
-
13
- Redis::Breadcrumb.redis = redis
14
- end
15
-
16
- it 'can record a key to track in' do
17
- assert_equal 'tracking_key', TestBreadcrumb.tracked_in
18
- end
19
-
20
- it 'can own a key' do
21
- assert_equal [:a_owned_key], TestBreadcrumb.owned_keys
22
- end
23
-
24
- it 'will register tracked keys in tracked_in' do
25
- TestBreadcrumb.register
26
-
27
- assert_equal 1, Redis::Breadcrumb.redis.scard(TestBreadcrumb.tracked_in)
28
- assert_equal [["del", "a_owned_key"]], TestBreadcrumb.tracked_keys
29
- end
30
-
31
- it 'tracks keys for each class' do
32
- class Test2Breadcrumb < Redis::Breadcrumb
33
- tracked_in 'different_tracking_key'
34
-
35
- owns :a_different_key
36
- end
37
-
38
- refute_equal TestBreadcrumb.owned_keys, Test2Breadcrumb.owned_keys
39
- end
40
- end