redis-breadcrumbs 0.0.1 → 0.0.2

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/.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