cache_version 0.9.5 → 1.0.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/.gitignore CHANGED
@@ -1 +1,3 @@
1
- pkg
1
+ pkg
2
+ *~
3
+ Gemfile.lock
@@ -0,0 +1 @@
1
+ cache_version
@@ -0,0 +1 @@
1
+ ree-1.8.7-2012.02
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://www.rubygems.org"
2
+
3
+ gemspec
data/Rakefile CHANGED
@@ -1,45 +1,10 @@
1
- require 'rake'
2
1
  require 'rake/testtask'
3
- require 'rake/rdoctask'
4
-
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |s|
8
- s.name = "cache_version"
9
- s.summary = %Q{Store the version of any class for cache invalidation}
10
- s.email = "code@justinbalthrop.com"
11
- s.homepage = "http://github.com/ninjudd/cache_version"
12
- s.description = "Store the version of any class for cache invalidation"
13
- s.authors = ["Justin Balthrop"]
14
- s.add_dependency('memcache', '>= 1.0.0')
15
- end
16
- Jeweler::GemcutterTasks.new
17
- rescue LoadError
18
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
19
- end
2
+ require 'bundler/gem_tasks'
20
3
 
21
4
  Rake::TestTask.new do |t|
22
- t.libs << 'lib'
5
+ t.libs = ['lib', 'test']
23
6
  t.pattern = 'test/**/*_test.rb'
24
7
  t.verbose = false
25
8
  end
26
9
 
27
- Rake::RDocTask.new do |rdoc|
28
- rdoc.rdoc_dir = 'rdoc'
29
- rdoc.title = 'cache_version'
30
- rdoc.options << '--line-numbers' << '--inline-source'
31
- rdoc.rdoc_files.include('README*')
32
- rdoc.rdoc_files.include('lib/**/*.rb')
33
- end
34
-
35
- begin
36
- require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |t|
38
- t.libs << 'test'
39
- t.test_files = FileList['test/**/*_test.rb']
40
- t.verbose = true
41
- end
42
- rescue LoadError
43
- end
44
-
45
10
  task :default => :test
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.5
1
+ 1.0.0
@@ -1,55 +1,25 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
3
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{cache_version}
8
- s.version = "0.9.5"
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "cache_version"
6
+ gem.version = IO.read('VERSION')
7
+ gem.authors = ["Justin Balthrop"]
8
+ gem.email = ["git@justinbalthrop.com"]
9
+ gem.description = %q{Store the version of any class for cache invalidation}
10
+ gem.summary = gem.description
11
+ gem.homepage = "https://github.com/ninjudd/model_set"
9
12
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Justin Balthrop"]
12
- s.date = %q{2009-11-20}
13
- s.description = %q{Store the version of any class for cache invalidation}
14
- s.email = %q{code@justinbalthrop.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".gitignore",
21
- "LICENSE",
22
- "README.rdoc",
23
- "Rakefile",
24
- "VERSION",
25
- "cache_version.gemspec",
26
- "examples/sample_migration.rb",
27
- "lib/cache_version.rb",
28
- "test/cache_version_test.rb",
29
- "test/test_helper.rb"
30
- ]
31
- s.homepage = %q{http://github.com/ninjudd/cache_version}
32
- s.rdoc_options = ["--charset=UTF-8"]
33
- s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.3.5}
35
- s.summary = %q{Store the version of any class for cache invalidation}
36
- s.test_files = [
37
- "test/cache_version_test.rb",
38
- "test/test_helper.rb",
39
- "examples/sample_migration.rb"
40
- ]
13
+ gem.add_development_dependency 'shoulda', '3.0.1'
14
+ gem.add_development_dependency 'mocha'
15
+ gem.add_development_dependency 'rake'
16
+ gem.add_development_dependency 'activerecord-postgresql-adapter'
41
17
 
42
- if s.respond_to? :specification_version then
43
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
- s.specification_version = 3
18
+ gem.add_dependency 'memcache', '>= 1.3.0'
19
+ gem.add_dependency 'activerecord', '~> 2.3.9'
45
20
 
46
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
- s.add_runtime_dependency(%q<memcache>, [">= 1.0.0"])
48
- else
49
- s.add_dependency(%q<memcache>, [">= 1.0.0"])
50
- end
51
- else
52
- s.add_dependency(%q<memcache>, [">= 1.0.0"])
53
- end
21
+ gem.files = `git ls-files`.split($/)
22
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
23
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
24
+ gem.require_paths = ["lib"]
54
25
  end
55
-
@@ -5,13 +5,10 @@ require 'active_record'
5
5
  module CacheVersion
6
6
  def self.db
7
7
  db = ActiveRecord::Base.connection
8
- if defined?(DataFabric::ConnectionProxy) and db.kind_of?(DataFabric::ConnectionProxy)
9
- db.send(:master)
10
- else
11
- db
12
- end
8
+ db = db.send(:master) if defined?(DataFabric::ConnectionProxy) and db.kind_of?(DataFabric::ConnectionProxy)
9
+ db
13
10
  end
14
-
11
+
15
12
  def self.cache
16
13
  CACHE
17
14
  end
@@ -19,19 +16,16 @@ module CacheVersion
19
16
  def self.get(key)
20
17
  key = key.to_s
21
18
  version_by_key[key] ||= CACHE.get_or_add(cache_key(key)) do
22
- db.select_value("SELECT version FROM cache_versions WHERE key = '#{key}'").to_i
19
+ db.select_value("SELECT version FROM cache_versions WHERE #{key_column} = '#{key}'").to_i
23
20
  end
24
21
  end
25
22
 
26
23
  def self.increment(key)
27
- key = key.to_s
28
- if get(key) == 0
29
- db.execute("INSERT INTO cache_versions (key, version) VALUES ('#{key}', 1)")
30
- else
31
- db.execute("UPDATE cache_versions SET version = version + 1 WHERE key = '#{key}'")
32
- end
33
- invalidate_cache(key)
34
- get(key)
24
+ alter(key, 1, 'version + 1')
25
+ end
26
+
27
+ def self.set(key, value)
28
+ alter(key, value.to_i)
35
29
  end
36
30
 
37
31
  def self.invalidate_cache(key)
@@ -39,19 +33,49 @@ module CacheVersion
39
33
  cache.delete(cache_key(key))
40
34
  version_by_key.delete(key)
41
35
  end
42
-
43
- def self.clear_cache
44
- @version_by_key = {}
36
+
37
+ def self.clear_cache(force = false)
38
+ if v = cache.get(vkey)
39
+ if force == true or @version.nil? or v > @version
40
+ @version = v
41
+ version_by_key.clear
42
+ end
43
+ else
44
+ @version = cache.get_or_add(vkey, Time.now.to_i)
45
+ end
45
46
  end
46
47
 
47
48
  private
49
+
50
+ def self.alter(key, init, update = init)
51
+ key = key.to_s
52
+
53
+ if get(key) == 0
54
+ db.execute("INSERT INTO cache_versions (#{key_column}, version) VALUES ('#{key}', #{init})")
55
+ else
56
+ db.execute("UPDATE cache_versions SET version = #{update} WHERE #{key_column} = '#{key}'")
57
+ end
58
+
59
+ cache.set(vkey, Time.now.to_i)
60
+ invalidate_cache(key)
61
+ get(key)
62
+ end
63
+
48
64
  def self.version_by_key
49
65
  @version_by_key ||= {}
50
- end
51
-
66
+ end
67
+
52
68
  def self.cache_key(key)
53
69
  "v:#{key}"
54
70
  end
71
+
72
+ def self.vkey
73
+ "v:CacheVersion"
74
+ end
75
+
76
+ def self.key_column
77
+ @key_column ||= db.quote_column_name('key')
78
+ end
55
79
  end
56
80
 
57
81
  class Module
@@ -64,6 +88,11 @@ class Module
64
88
  key = [self, context].compact.join('_')
65
89
  CacheVersion.increment(key)
66
90
  end
91
+
92
+ def set_version(value, context = nil)
93
+ key = [self, context].compact.join('_')
94
+ CacheVersion.set(key, value)
95
+ end
67
96
  end
68
97
 
69
98
  class CacheVersionMigration < ActiveRecord::Migration
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
  require 'shoulda'
4
- require 'mocha'
4
+ require 'mocha/setup'
5
5
 
6
6
  $LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
7
7
  $LOAD_PATH.unshift File.dirname(__FILE__) + "/../../memcache/lib"
@@ -15,7 +15,7 @@ CACHE = Memcache.new(:servers => 'localhost')
15
15
  ActiveRecord::Base.establish_connection(
16
16
  :adapter => "postgresql",
17
17
  :host => "localhost",
18
- :username => "postgres",
18
+ :username => `whoami`.chomp,
19
19
  :password => "",
20
20
  :database => "test"
21
21
  )
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache_version
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Justin Balthrop
@@ -9,30 +15,113 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-11-20 00:00:00 -08:00
18
+ date: 2013-06-03 00:00:00 -07:00
13
19
  default_executable:
14
20
  dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: shoulda
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 5
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 1
34
+ version: 3.0.1
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: mocha
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rake
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ type: :development
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: activerecord-postgresql-adapter
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ type: :development
78
+ version_requirements: *id004
15
79
  - !ruby/object:Gem::Dependency
16
80
  name: memcache
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
20
84
  requirements:
21
85
  - - ">="
22
86
  - !ruby/object:Gem::Version
23
- version: 1.0.0
24
- version:
87
+ hash: 27
88
+ segments:
89
+ - 1
90
+ - 3
91
+ - 0
92
+ version: 1.3.0
93
+ type: :runtime
94
+ version_requirements: *id005
95
+ - !ruby/object:Gem::Dependency
96
+ name: activerecord
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ hash: 17
104
+ segments:
105
+ - 2
106
+ - 3
107
+ - 9
108
+ version: 2.3.9
109
+ type: :runtime
110
+ version_requirements: *id006
25
111
  description: Store the version of any class for cache invalidation
26
- email: code@justinbalthrop.com
112
+ email:
113
+ - git@justinbalthrop.com
27
114
  executables: []
28
115
 
29
116
  extensions: []
30
117
 
31
- extra_rdoc_files:
32
- - LICENSE
33
- - README.rdoc
118
+ extra_rdoc_files: []
119
+
34
120
  files:
35
121
  - .gitignore
122
+ - .rbenv-gemsets
123
+ - .rbenv-version
124
+ - Gemfile
36
125
  - LICENSE
37
126
  - README.rdoc
38
127
  - Rakefile
@@ -43,34 +132,39 @@ files:
43
132
  - test/cache_version_test.rb
44
133
  - test/test_helper.rb
45
134
  has_rdoc: true
46
- homepage: http://github.com/ninjudd/cache_version
135
+ homepage: https://github.com/ninjudd/model_set
47
136
  licenses: []
48
137
 
49
138
  post_install_message:
50
- rdoc_options:
51
- - --charset=UTF-8
139
+ rdoc_options: []
140
+
52
141
  require_paths:
53
142
  - lib
54
143
  required_ruby_version: !ruby/object:Gem::Requirement
144
+ none: false
55
145
  requirements:
56
146
  - - ">="
57
147
  - !ruby/object:Gem::Version
148
+ hash: 3
149
+ segments:
150
+ - 0
58
151
  version: "0"
59
- version:
60
152
  required_rubygems_version: !ruby/object:Gem::Requirement
153
+ none: false
61
154
  requirements:
62
155
  - - ">="
63
156
  - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
64
160
  version: "0"
65
- version:
66
161
  requirements: []
67
162
 
68
163
  rubyforge_project:
69
- rubygems_version: 1.3.5
164
+ rubygems_version: 1.5.2
70
165
  signing_key:
71
166
  specification_version: 3
72
167
  summary: Store the version of any class for cache invalidation
73
168
  test_files:
74
169
  - test/cache_version_test.rb
75
170
  - test/test_helper.rb
76
- - examples/sample_migration.rb