prosto_cache 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,18 +1,8 @@
1
1
  source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
2
 
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
3
  group :development do
9
4
  gem "rspec", "~> 2.3.0"
10
- gem "yard", "~> 0.6.0"
11
- gem "bundler", "~> 1.0.0"
12
- gem "jeweler", "~> 1.6.0"
13
- gem "rcov", ">= 0"
14
- gem "reek", "~> 1.2.8"
15
- gem "roodi", "~> 2.1.0"
5
+ gem "bundler", "~> 1.1.0"
16
6
  gem "rake", "0.8.7"
17
7
  end
18
8
 
data/Gemfile.lock CHANGED
@@ -2,20 +2,8 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  diff-lcs (1.1.2)
5
- git (1.2.5)
6
5
  hashie (1.0.0)
7
- jeweler (1.6.0)
8
- bundler (~> 1.0.0)
9
- git (>= 1.2.5)
10
- rake
11
6
  rake (0.8.7)
12
- rcov (0.9.9)
13
- reek (1.2.8)
14
- ruby2ruby (~> 1.2)
15
- ruby_parser (~> 2.0)
16
- sexp_processor (~> 3.0)
17
- roodi (2.1.0)
18
- ruby_parser
19
7
  rspec (2.3.0)
20
8
  rspec-core (~> 2.3.0)
21
9
  rspec-expectations (~> 2.3.0)
@@ -24,24 +12,12 @@ GEM
24
12
  rspec-expectations (2.3.0)
25
13
  diff-lcs (~> 1.1.2)
26
14
  rspec-mocks (2.3.0)
27
- ruby2ruby (1.2.5)
28
- ruby_parser (~> 2.0)
29
- sexp_processor (~> 3.0)
30
- ruby_parser (2.0.6)
31
- sexp_processor (~> 3.0)
32
- sexp_processor (3.0.5)
33
- yard (0.6.8)
34
15
 
35
16
  PLATFORMS
36
17
  ruby
37
18
 
38
19
  DEPENDENCIES
39
- bundler (~> 1.0.0)
20
+ bundler (~> 1.1.0)
40
21
  hashie (>= 1.0.0)
41
- jeweler (~> 1.6.0)
42
22
  rake (= 0.8.7)
43
- rcov
44
- reek (~> 1.2.8)
45
- roodi (~> 2.1.0)
46
23
  rspec (~> 2.3.0)
47
- yard (~> 0.6.0)
data/README.rdoc CHANGED
@@ -1,9 +1,30 @@
1
1
  = prosto_cache
2
2
 
3
- Description goes here.
3
+ This library provides a simple way to cache model and to access this cache in some canonical way.
4
+ Any changes to the model's objects will automatically result in cache reload.
5
+ Cache reload in other ruby processes of same app will be triggered as well, but with some delay (currently up to 60 seconds).
6
+ If delay in cache reloading is not an option, well, this simply library will not work for you, and you have to use something fancier, like Memcached.
7
+
8
+ Usage:
9
+ 1. add ProstoCache mixin to your model
10
+ class YourModel < ActiveRecord::Base
11
+ include ProstoCache
12
+ 2. Configure cache access keys (optional step, by default cache is accessed by key 'name')
13
+ cache_accessor_keys %w(scope name)
14
+ 3. Your model must have non-nullable column updated_at, add it in migration if it is missing (this field is used for invalidating cache in other ruby processes).
15
+ 4. Access cached model object in your code like this
16
+ * Simple case of one key
17
+
18
+ YourModel.cache[:key1]
19
+ * Case of 2 or more keys where it is known ahead of time that all parent keys exist. Looks conventional, but is unreliable because brackets operation on nill will raise an error.
20
+
21
+ YourModel.cache[:key1][:key2][:key3]
22
+ * Case of 2 or more keys where any key may not be present in cache, and expected answer is nil. Looks so-so, but is much more reliable then previos use case.
23
+
24
+ YourModel.cache[[:key1, :key2, :key3]]
4
25
 
5
26
  == Contributing to prosto_cache
6
-
27
+
7
28
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
29
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
30
  * Fork the project
data/Rakefile CHANGED
@@ -1,55 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "prosto_cache"
18
- gem.homepage = "http://github.com/olek/prosto_cache"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Very simple caching for your ActiveRecord models.}
21
- gem.description = %Q{Use this gem if you want a simple 'enum-like' cache for your models that does not restrict updates, but will stay current with them.}
22
- gem.email = "olek@woodenbits.com"
23
- gem.authors = ["Olek Poplavsky"]
24
- # dependencies defined in Gemfile
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
3
+ require "bundler/gem_tasks"
27
4
 
28
5
  require 'rspec/core'
29
6
  require 'rspec/core/rake_task'
30
7
  RSpec::Core::RakeTask.new(:spec) do |spec|
31
8
  spec.pattern = FileList['spec/**/*_spec.rb']
32
9
  end
33
-
34
- RSpec::Core::RakeTask.new(:rcov) do |spec|
35
- spec.pattern = 'spec/**/*_spec.rb'
36
- spec.rcov = true
37
- end
38
-
39
- require 'reek/rake/task'
40
- Reek::Rake::Task.new do |t|
41
- t.fail_on_error = true
42
- t.verbose = false
43
- t.source_files = 'lib/**/*.rb'
44
- end
45
-
46
- require 'roodi'
47
- require 'roodi_task'
48
- RoodiTask.new do |t|
49
- t.verbose = false
50
- end
51
-
52
- task :default => :spec
53
-
54
- require 'yard'
55
- YARD::Rake::YardocTask.new
data/lib/prosto_cache.rb CHANGED
@@ -18,6 +18,14 @@ Usage:
18
18
  YourModel.cache[:key1][:key2][:key3]
19
19
  Case of 2 or more keys where any key may not be present in cache, and expected answer is nil. Looks so-so, but is much more reliable then previos use case.
20
20
  YourModel.cache[[:key1, :key2, :key3]]
21
+ 5. If you want to, you can add extra lookup helpers to the objects that relate to the cached object, that will allow those objects to update 'string' attribute, and that will result in database reference change.
22
+ class OtherModel < ActiveRecord::Base
23
+ belongs_to :your_model
24
+ lookup_enum_for :your_model
25
+ end
26
+
27
+ This lookup was intertionally not integrated with ActiveRecord since not everybody would want that, and monkey-patching other library (AR) is not really a good thing, even if it results in more magically 'smooth' experience.
28
+ Principle of least surprise, right?
21
29
  =end
22
30
 
23
31
  require 'hashie'
@@ -140,6 +148,21 @@ module ProstoCache
140
148
  end
141
149
  end
142
150
  end
151
+ module Extensions
152
+ def lookup_enum_for(name, enum_class=nil)
153
+ raise unless name
154
+ enum_class = name.to_s.classify.constantize unless enum_class
155
+ define_method("#{name}_with_lookup=") do |o|
156
+ new_value = o
157
+ unless o.is_a?(enum_class)
158
+ new_value = o.blank? ? nil : enum_class[o.to_s]
159
+ end
160
+ self.send("#{name}_without_lookup=", new_value)
161
+ end
162
+
163
+ alias_method_chain "#{name}=", :lookup
164
+ end
165
+ end
143
166
  end
144
167
 
145
168
 
data/prosto_cache.gemspec CHANGED
@@ -1,11 +1,8 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
5
2
 
6
3
  Gem::Specification.new do |s|
7
4
  s.name = "prosto_cache"
8
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
9
6
 
10
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
8
  s.authors = ["Olek Poplavsky"]
@@ -17,34 +14,16 @@ Gem::Specification.new do |s|
17
14
  "README.rdoc"
18
15
  ]
19
16
  s.files = [
20
- ".document",
21
17
  ".rspec",
22
18
  "Gemfile",
23
19
  "Gemfile.lock",
24
20
  "LICENSE.txt",
25
21
  "README.rdoc",
26
22
  "Rakefile",
27
- "VERSION",
28
23
  "lib/prosto_cache.rb",
29
24
  "prosto_cache.gemspec",
30
25
  "spec/prosto_cache_spec.rb",
31
26
  "spec/spec_helper.rb",
32
- "vendor/cache/diff-lcs-1.1.2.gem",
33
- "vendor/cache/git-1.2.5.gem",
34
- "vendor/cache/hashie-1.0.0.gem",
35
- "vendor/cache/jeweler-1.6.0.gem",
36
- "vendor/cache/rake-0.8.7.gem",
37
- "vendor/cache/rcov-0.9.9.gem",
38
- "vendor/cache/reek-1.2.8.gem",
39
- "vendor/cache/roodi-2.1.0.gem",
40
- "vendor/cache/rspec-2.3.0.gem",
41
- "vendor/cache/rspec-core-2.3.1.gem",
42
- "vendor/cache/rspec-expectations-2.3.0.gem",
43
- "vendor/cache/rspec-mocks-2.3.0.gem",
44
- "vendor/cache/ruby2ruby-1.2.5.gem",
45
- "vendor/cache/ruby_parser-2.0.6.gem",
46
- "vendor/cache/sexp_processor-3.0.5.gem",
47
- "vendor/cache/yard-0.6.8.gem"
48
27
  ]
49
28
  s.homepage = "http://github.com/olek/prosto_cache"
50
29
  s.licenses = ["MIT"]
@@ -58,34 +37,18 @@ Gem::Specification.new do |s|
58
37
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
59
38
  s.add_runtime_dependency(%q<hashie>, [">= 1.0.0"])
60
39
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
61
- s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
62
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
63
- s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
64
- s.add_development_dependency(%q<rcov>, [">= 0"])
65
- s.add_development_dependency(%q<reek>, ["~> 1.2.8"])
66
- s.add_development_dependency(%q<roodi>, ["~> 2.1.0"])
40
+ s.add_development_dependency(%q<bundler>, ["~> 1.1.0"])
67
41
  s.add_development_dependency(%q<rake>, ["= 0.8.7"])
68
42
  else
69
43
  s.add_dependency(%q<hashie>, [">= 1.0.0"])
70
44
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
71
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
72
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
73
- s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
74
- s.add_dependency(%q<rcov>, [">= 0"])
75
- s.add_dependency(%q<reek>, ["~> 1.2.8"])
76
- s.add_dependency(%q<roodi>, ["~> 2.1.0"])
45
+ s.add_dependency(%q<bundler>, ["~> 1.1.0"])
77
46
  s.add_dependency(%q<rake>, ["= 0.8.7"])
78
47
  end
79
48
  else
80
49
  s.add_dependency(%q<hashie>, [">= 1.0.0"])
81
50
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
82
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
83
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
84
- s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
85
- s.add_dependency(%q<rcov>, [">= 0"])
86
- s.add_dependency(%q<reek>, ["~> 1.2.8"])
87
- s.add_dependency(%q<roodi>, ["~> 2.1.0"])
51
+ s.add_dependency(%q<bundler>, ["~> 1.1.0"])
88
52
  s.add_dependency(%q<rake>, ["= 0.8.7"])
89
53
  end
90
54
  end
91
-
metadata CHANGED
@@ -1,178 +1,140 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: prosto_cache
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 2
10
+ version: 0.1.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Olek Poplavsky
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-07-13 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: hashie
16
- requirement: &2152717360 !ruby/object:Gem::Requirement
17
+
18
+ date: 2012-07-13 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ requirement: &id001 !ruby/object:Gem::Requirement
17
23
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 23
28
+ segments:
29
+ - 1
30
+ - 0
31
+ - 0
21
32
  version: 1.0.0
22
- type: :runtime
33
+ version_requirements: *id001
34
+ name: hashie
23
35
  prerelease: false
24
- version_requirements: *2152717360
25
- - !ruby/object:Gem::Dependency
26
- name: rspec
27
- requirement: &2152716740 !ruby/object:Gem::Requirement
36
+ type: :runtime
37
+ - !ruby/object:Gem::Dependency
38
+ requirement: &id002 !ruby/object:Gem::Requirement
28
39
  none: false
29
- requirements:
40
+ requirements:
30
41
  - - ~>
31
- - !ruby/object:Gem::Version
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 2
46
+ - 3
47
+ - 0
32
48
  version: 2.3.0
33
- type: :development
34
- prerelease: false
35
- version_requirements: *2152716740
36
- - !ruby/object:Gem::Dependency
37
- name: yard
38
- requirement: &2152716160 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- version: 0.6.0
44
- type: :development
45
- prerelease: false
46
- version_requirements: *2152716160
47
- - !ruby/object:Gem::Dependency
48
- name: bundler
49
- requirement: &2152715480 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: 1.0.0
55
- type: :development
56
- prerelease: false
57
- version_requirements: *2152715480
58
- - !ruby/object:Gem::Dependency
59
- name: jeweler
60
- requirement: &2152714520 !ruby/object:Gem::Requirement
61
- none: false
62
- requirements:
63
- - - ~>
64
- - !ruby/object:Gem::Version
65
- version: 1.6.0
66
- type: :development
49
+ version_requirements: *id002
50
+ name: rspec
67
51
  prerelease: false
68
- version_requirements: *2152714520
69
- - !ruby/object:Gem::Dependency
70
- name: rcov
71
- requirement: &2152713460 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
52
  type: :development
78
- prerelease: false
79
- version_requirements: *2152713460
80
- - !ruby/object:Gem::Dependency
81
- name: reek
82
- requirement: &2152712960 !ruby/object:Gem::Requirement
53
+ - !ruby/object:Gem::Dependency
54
+ requirement: &id003 !ruby/object:Gem::Requirement
83
55
  none: false
84
- requirements:
56
+ requirements:
85
57
  - - ~>
86
- - !ruby/object:Gem::Version
87
- version: 1.2.8
88
- type: :development
58
+ - !ruby/object:Gem::Version
59
+ hash: 19
60
+ segments:
61
+ - 1
62
+ - 1
63
+ - 0
64
+ version: 1.1.0
65
+ version_requirements: *id003
66
+ name: bundler
89
67
  prerelease: false
90
- version_requirements: *2152712960
91
- - !ruby/object:Gem::Dependency
92
- name: roodi
93
- requirement: &2152712460 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ~>
97
- - !ruby/object:Gem::Version
98
- version: 2.1.0
99
68
  type: :development
100
- prerelease: false
101
- version_requirements: *2152712460
102
- - !ruby/object:Gem::Dependency
103
- name: rake
104
- requirement: &2152728200 !ruby/object:Gem::Requirement
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: &id004 !ruby/object:Gem::Requirement
105
71
  none: false
106
- requirements:
107
- - - =
108
- - !ruby/object:Gem::Version
72
+ requirements:
73
+ - - "="
74
+ - !ruby/object:Gem::Version
75
+ hash: 49
76
+ segments:
77
+ - 0
78
+ - 8
79
+ - 7
109
80
  version: 0.8.7
110
- type: :development
81
+ version_requirements: *id004
82
+ name: rake
111
83
  prerelease: false
112
- version_requirements: *2152728200
113
- description: Use this gem if you want a simple 'enum-like' cache for your models that
114
- does not restrict updates, but will stay current with them.
84
+ type: :development
85
+ description: Use this gem if you want a simple 'enum-like' cache for your models that does not restrict updates, but will stay current with them.
115
86
  email: olek@woodenbits.com
116
87
  executables: []
88
+
117
89
  extensions: []
118
- extra_rdoc_files:
90
+
91
+ extra_rdoc_files:
119
92
  - LICENSE.txt
120
93
  - README.rdoc
121
- files:
122
- - .document
94
+ files:
123
95
  - .rspec
124
96
  - Gemfile
125
97
  - Gemfile.lock
126
98
  - LICENSE.txt
127
99
  - README.rdoc
128
100
  - Rakefile
129
- - VERSION
130
101
  - lib/prosto_cache.rb
131
102
  - prosto_cache.gemspec
132
103
  - spec/prosto_cache_spec.rb
133
104
  - spec/spec_helper.rb
134
- - vendor/cache/diff-lcs-1.1.2.gem
135
- - vendor/cache/git-1.2.5.gem
136
- - vendor/cache/hashie-1.0.0.gem
137
- - vendor/cache/jeweler-1.6.0.gem
138
- - vendor/cache/rake-0.8.7.gem
139
- - vendor/cache/rcov-0.9.9.gem
140
- - vendor/cache/reek-1.2.8.gem
141
- - vendor/cache/roodi-2.1.0.gem
142
- - vendor/cache/rspec-2.3.0.gem
143
- - vendor/cache/rspec-core-2.3.1.gem
144
- - vendor/cache/rspec-expectations-2.3.0.gem
145
- - vendor/cache/rspec-mocks-2.3.0.gem
146
- - vendor/cache/ruby2ruby-1.2.5.gem
147
- - vendor/cache/ruby_parser-2.0.6.gem
148
- - vendor/cache/sexp_processor-3.0.5.gem
149
- - vendor/cache/yard-0.6.8.gem
105
+ has_rdoc: true
150
106
  homepage: http://github.com/olek/prosto_cache
151
- licenses:
107
+ licenses:
152
108
  - MIT
153
109
  post_install_message:
154
110
  rdoc_options: []
155
- require_paths:
111
+
112
+ require_paths:
156
113
  - lib
157
- required_ruby_version: !ruby/object:Gem::Requirement
114
+ required_ruby_version: !ruby/object:Gem::Requirement
158
115
  none: false
159
- requirements:
160
- - - ! '>='
161
- - !ruby/object:Gem::Version
162
- version: '0'
163
- segments:
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
164
121
  - 0
165
- hash: -4108692343015697059
166
- required_rubygems_version: !ruby/object:Gem::Requirement
122
+ version: "0"
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
124
  none: false
168
- requirements:
169
- - - ! '>='
170
- - !ruby/object:Gem::Version
171
- version: '0'
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ hash: 3
129
+ segments:
130
+ - 0
131
+ version: "0"
172
132
  requirements: []
133
+
173
134
  rubyforge_project:
174
- rubygems_version: 1.8.11
135
+ rubygems_version: 1.6.2
175
136
  signing_key:
176
137
  specification_version: 3
177
138
  summary: Very simple caching for your ActiveRecord models.
178
139
  test_files: []
140
+
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.1
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file