kasket 0.7.5 → 0.7.6

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/README.rdoc CHANGED
@@ -1,17 +1,143 @@
1
- = kasket
1
+ = Kasket
2
+ === Puts a cap on your queries
3
+ A caching layer for ActiveRecord
2
4
 
3
- Description goes here.
5
+ Developed and used on http://zendesk.com.
6
+
7
+ == Sponsored by Zendesk - Enlightened Customer Support
8
+
9
+ == Description
10
+
11
+ Kasket is a safe way to cache your database queries in memcached.
12
+ Designed to be as small and simple as possible, and to get out of the way when it is not safe to cache.
13
+
14
+ You can configure exactly what models to cache and what type of queries to cache.
15
+
16
+ === Features
17
+
18
+ * Declarative configuration
19
+ * Collection caching as well as caching of single instances
20
+ * Automatic cache expiry on database migration
21
+ * Automatic cache expiry in Kasket udates
22
+ * Very small code base
23
+
24
+ == Setting up Kasket
25
+
26
+ Kasket is set up by simply calling Kasket.setup in an initializer script.
27
+ This will include the required modules into the ActiveRecord
28
+
29
+ === Options
30
+
31
+ By default, Kasket will cache instance collection with a maximum length of 100.
32
+ You can everride this by passing the :max_collection_size option to the Kasket.setup call:
33
+
34
+ Kasket.setup(:max_collection_size => 50)
35
+
36
+ == Configuring caching of your models
37
+
38
+ You can configure Kasket for any ActiveRecord model, and subclasses will automatically inherit the caching
39
+ configuration.
40
+
41
+ If you have an Account model, you can can do the simplest caching configuration like:
42
+
43
+ Account.has_kasket
44
+
45
+ This will add a caching index on the id attribute of the Account model,
46
+ and will make sure that all your calls like Account.find(1) and Account.find_by_id(1) will be cached.
47
+ All other calls ( say Account.find_by_subdomain('zendesk') ) are untouched.
48
+
49
+ If you wanted to configure a caching index on the subdomain attribute of the Account model, you would simply write
50
+
51
+ Account.has_kasket_on :subdomain
52
+
53
+ This would add caching to calls like:
54
+ * Account.find_by_subdomain('zendesk')
55
+ * Account.find_all_by_subdomain('zendesk')
56
+
57
+ and all other ways of expressing lookups on subdomain.
58
+
59
+ == Cache expiry
60
+
61
+ The goal of Kasket is to be as safe as possible to use, so the cache is expired in a number of situations
62
+ * When you save a model instance
63
+ * When your database schema changes
64
+ * When you install a new version of Kasket
65
+ * When you ask it to
66
+
67
+ === Cahce expiry on instance save
68
+
69
+ When you save a model instance, Kasket will calculate the cache entries to expire.
70
+
71
+ === Cache expiry on database schema changes
72
+
73
+ All Kasket cache keys contain a hash of the column names of the table associated with the model.
74
+ If you somehow change your table schema, all cache entries for that table will automatically expire
75
+
76
+ === Cache expiry on Kasket upgrades
77
+
78
+ All Kasket cache keys contain the Kasket version number, so upgrading Kasket will expire all Kasket cache entries.
79
+
80
+ === Manually expiring caches
81
+
82
+ If you have model methods that update the database behind the back of ActiveRecord, you need to mark these methods
83
+ as beeing dirty.
84
+
85
+ Account.kasket_dirty_methods :update_last_action
86
+
87
+ This will make sure the clear the cache entries for the current instance when you call update_last_action
88
+
89
+ == How does this work?
90
+
91
+ == Known issues
92
+
93
+ We have only used and tested Kasket on MySql.
94
+
95
+ Let us know if you find any.
96
+
97
+ == Requirements
98
+
99
+ * ActiveRecord 2.3.x
100
+
101
+ == Isn't this what Cache Money does?
102
+
103
+ Absolutely, but cache money does so much more.
104
+
105
+ * Cache Money has way more features than what we need
106
+ * The Cache Money code is overly complex
107
+ * Cache Monet seems abandoned
4
108
 
5
109
  == Note on Patches/Pull Requests
6
110
 
7
111
  * Fork the project.
8
112
  * Make your feature addition or bug fix.
9
- * Add tests for it. This is important so I don't break it in a
10
- future version unintentionally.
113
+ * Add tests for it. This is important so I don't break it in a future version unintentionally.
11
114
  * Commit, do not mess with rakefile, version, or history.
12
115
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
116
  * Send me a pull request. Bonus points for topic branches.
14
117
 
15
- == Copyright
118
+ == LICENSE:
119
+
120
+ (The MIT License)
121
+
122
+ Copyright (c) 2010 Zendesk
123
+
124
+ Permission is hereby granted, free of charge, to any person
125
+ obtaining a copy of this software and associated documentation
126
+ files (the "Software"), to deal in the Software without
127
+ restriction, including without limitation the rights to use,
128
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
129
+ copies of the Software, and to permit persons to whom the
130
+ Software is furnished to do so, subject to the following
131
+ conditions:
132
+
133
+ The above copyright notice and this permission notice shall be
134
+ included in all copies or substantial portions of the Software.
16
135
 
17
- Copyright (c) 2009 Mick Staugaard. See LICENSE for details.
136
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
137
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
138
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
139
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
140
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
141
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
142
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
143
+ OTHER DEALINGS IN THE SOFTWARE.
data/lib/kasket.rb CHANGED
@@ -7,7 +7,6 @@ require 'kasket/active_record_patches'
7
7
  module Kasket
8
8
  autoload :ConfigurationMixin, 'kasket/configuration_mixin'
9
9
  autoload :ReloadAssociationMixin, 'kasket/reload_association_mixin'
10
- autoload :RackMiddleware, 'kasket/rack_middleware'
11
10
  autoload :Query, 'kasket/query'
12
11
 
13
12
  CONFIGURATION = {:max_collection_size => 100}
@@ -15,7 +14,7 @@ module Kasket
15
14
  class Version
16
15
  MAJOR = 0
17
16
  MINOR = 7
18
- PATCH = 5
17
+ PATCH = 6
19
18
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
20
19
  end
21
20
 
@@ -9,15 +9,15 @@ module Kasket
9
9
  module ConfigurationMixin
10
10
 
11
11
  def without_kasket(&block)
12
- old_value = @use_kasket
13
- @use_kasket = false
12
+ old_value = Thread.current['kasket_disabled'] || false
13
+ Thread.current['kasket_disabled'] = true
14
14
  yield
15
15
  ensure
16
- @use_kasket = old_value
16
+ Thread.current['kasket_disabled'] = old_value
17
17
  end
18
18
 
19
19
  def use_kasket?
20
- @use_kasket == true
20
+ !Thread.current['kasket_disabled']
21
21
  end
22
22
 
23
23
  def kasket_parser
@@ -69,7 +69,6 @@ module Kasket
69
69
  end
70
70
 
71
71
  def has_kasket_on(*args)
72
- @use_kasket = true
73
72
  attributes = args.sort! { |x, y| x.to_s <=> y.to_s }
74
73
  if attributes != [:id] && !kasket_indices.include?([:id])
75
74
  has_kasket_on(:id)
@@ -15,7 +15,7 @@ class TransactionTest < ActiveSupport::TestCase
15
15
  setup { Comment.has_kasket }
16
16
  should "disable kasket" do
17
17
  Post.transaction do
18
- assert_equal true, Comment.use_kasket?
18
+ assert_equal false, Comment.use_kasket?
19
19
  assert_equal false, Post.use_kasket?
20
20
  Comment.transaction do
21
21
  assert_equal false, Post.use_kasket?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kasket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.7.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mick Staugaard
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2010-02-02 00:00:00 -08:00
13
+ date: 2010-02-08 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -70,12 +70,10 @@ executables: []
70
70
  extensions: []
71
71
 
72
72
  extra_rdoc_files:
73
- - LICENSE
74
73
  - README.rdoc
75
74
  files:
76
75
  - .document
77
76
  - .gitignore
78
- - LICENSE
79
77
  - README.rdoc
80
78
  - Rakefile
81
79
  - lib/kasket.rb
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2009 Mick Staugaard
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.