generation_cacheable 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/ChangeLog +2 -0
- data/Gemfile +16 -0
- data/README.md +33 -0
- data/Rakefile +8 -0
- data/generation_cacheable.gemspec +23 -0
- data/lib/gen_cache.rb +32 -0
- data/lib/gen_cache/cache_io/fetching.rb +78 -0
- data/lib/gen_cache/cache_io/formatting.rb +75 -0
- data/lib/gen_cache/cache_io/parsing.rb +66 -0
- data/lib/gen_cache/cache_types/association_cache.rb +50 -0
- data/lib/gen_cache/cache_types/attribute_cache.rb +30 -0
- data/lib/gen_cache/cache_types/class_method_cache.rb +23 -0
- data/lib/gen_cache/cache_types/key_cache.rb +14 -0
- data/lib/gen_cache/cache_types/method_cache.rb +28 -0
- data/lib/gen_cache/caches.rb +15 -0
- data/lib/gen_cache/expiry.rb +37 -0
- data/lib/gen_cache/keys.rb +70 -0
- data/lib/gen_cache/version.rb +3 -0
- data/spec/gen_cache/cache_io/fetching_spec.rb +41 -0
- data/spec/gen_cache/cache_io/formatting_spec.rb +59 -0
- data/spec/gen_cache/cache_io/parsing_spec.rb +47 -0
- data/spec/gen_cache/cache_types/association_cache_spec.rb +313 -0
- data/spec/gen_cache/cache_types/attribute_cache_spec.rb +98 -0
- data/spec/gen_cache/cache_types/class_method_cache_spec.rb +72 -0
- data/spec/gen_cache/cache_types/key_cache_spec.rb +34 -0
- data/spec/gen_cache/cache_types/method_cache_spec.rb +108 -0
- data/spec/gen_cache/expiry_spec.rb +182 -0
- data/spec/gen_cache/keys_spec.rb +66 -0
- data/spec/gen_cache_spec.rb +76 -0
- data/spec/models/account.rb +7 -0
- data/spec/models/comment.rb +9 -0
- data/spec/models/descendant.rb +20 -0
- data/spec/models/group.rb +6 -0
- data/spec/models/image.rb +11 -0
- data/spec/models/location.rb +3 -0
- data/spec/models/post.rb +31 -0
- data/spec/models/tag.rb +6 -0
- data/spec/models/user.rb +54 -0
- data/spec/spec_helper.rb +96 -0
- metadata +149 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GenCache do
|
4
|
+
let(:cache) { Rails.cache }
|
5
|
+
let(:user) { User.create(:login => 'flyerhzm') }
|
6
|
+
|
7
|
+
context "methods" do
|
8
|
+
|
9
|
+
it "should generate a model prefix" do
|
10
|
+
schema_string = User.columns.sort_by(&:name).map { |c| "#{c.name}:#{c.type}"}.join(",")
|
11
|
+
schema_hash = CityHash.hash64(schema_string)
|
12
|
+
prefix = GenCache.model_prefix(User)
|
13
|
+
prefix.should == "users/#{schema_hash}"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should generate an instance prefix" do
|
17
|
+
attribute_string = user.attributes.sort.map { |k,v| [k,v].join(":")}.join(",")
|
18
|
+
attribute_hash = CityHash.hash64(attribute_string)
|
19
|
+
prefix = GenCache.instance_prefix(user)
|
20
|
+
prefix.should == GenCache.model_prefix(User) + "/#{user.id.to_s}/#{attribute_hash}"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should generate an instance key" do
|
24
|
+
expected_key = {type: :object, key: GenCache.model_prefix(User) + "/#{user.id.to_s}"}
|
25
|
+
GenCache.instance_key(User, user.id).should == expected_key
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should generate an attribute key" do
|
29
|
+
expected_key = {type: :object, key: GenCache.model_prefix(User) + '/login/pathouse'}
|
30
|
+
att_key = GenCache.attribute_key(User, :login, ['pathouse'])
|
31
|
+
att_key.should == expected_key
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should generate an all w/ attribute key" do
|
35
|
+
expected_key = {type: :object, key: GenCache.model_prefix(User) + "/all/login/pathouse"}
|
36
|
+
att_key = GenCache.attribute_key(User, :login, ['pathouse'], all: true)
|
37
|
+
att_key.should == expected_key
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should generate a class method key" do
|
41
|
+
expected_key = {type: :method, key: GenCache.model_prefix(User) + "/default_name"}
|
42
|
+
cmethod_key = GenCache.class_method_key(User, :default_name)
|
43
|
+
cmethod_key.should == expected_key
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return all class method keys" do
|
47
|
+
all_cmethod_keys = GenCache.all_class_method_keys(User)
|
48
|
+
comparison = User.cached_class_methods.map do |cmeth|
|
49
|
+
GenCache.class_method_key(User, cmeth)
|
50
|
+
end
|
51
|
+
all_cmethod_keys.should == comparison
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should generate a method key" do
|
55
|
+
expected_key = {type: :method, key: GenCache.instance_prefix(user) + "/last_post"}
|
56
|
+
method_key = GenCache.method_key(user, :last_post)
|
57
|
+
method_key.should == expected_key
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should generate an association key" do
|
61
|
+
expected_key = {type: :association, key: GenCache.instance_prefix(user) + "/posts"}
|
62
|
+
assoc_key = GenCache.association_key(user, :posts)
|
63
|
+
assoc_key.should == expected_key
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cacheable do
|
4
|
+
let(:cache) { Rails.cache }
|
5
|
+
let(:user) { User.create(:login => 'flyerhzm') }
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
@group1 = Group.create(name: "Ruby On Rails")
|
9
|
+
@account = user.create_account(group: @group1)
|
10
|
+
@post1 = user.posts.create(:title => 'post1')
|
11
|
+
@image1 = @post1.images.create
|
12
|
+
@comment1 = @post1.comments.create
|
13
|
+
@tag1 = @post1.tags.create(title: "Rails")
|
14
|
+
end
|
15
|
+
|
16
|
+
before :each do
|
17
|
+
cache.clear
|
18
|
+
user.reload
|
19
|
+
end
|
20
|
+
|
21
|
+
context "Association Expires on Save" do
|
22
|
+
it "should delete has_many with_association cache" do
|
23
|
+
user.cached_posts
|
24
|
+
key = Cacheable.association_key(user, :posts)
|
25
|
+
Rails.cache.read(key[:key]).should_not be_nil
|
26
|
+
@post1.update_attribute(:title, "Blarg")
|
27
|
+
old_key = Rails.cache.read(key[:key]).first
|
28
|
+
Rails.cache.read(old_key[:key]).should be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should delete has_many with polymorphic with_association cache" do
|
32
|
+
@post1.cached_comments
|
33
|
+
key = Cacheable.association_key(@post1, :comments)
|
34
|
+
Rails.cache.read(key[:key]).should_not be_nil
|
35
|
+
@comment1.update_attribute(:commentable_type, "fart")
|
36
|
+
old_key = Rails.cache.read(key[:key]).first
|
37
|
+
Rails.cache.read(old_key[:key]).should be_nil
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should delete has_many through with_association cache" do
|
41
|
+
user.cached_images
|
42
|
+
key = Cacheable.association_key(user, :images)
|
43
|
+
Rails.cache.read(key[:key]).should_not be_nil
|
44
|
+
@image1.update_attribute(:viewable_type, "Gralb")
|
45
|
+
old_key = Rails.cache.read(key[:key]).first
|
46
|
+
Rails.cache.read(old_key[:key]).should be_nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should delete has_one with_association cache" do
|
50
|
+
user.cached_account
|
51
|
+
key = Cacheable.association_key(user, :account)
|
52
|
+
Rails.cache.read(key[:key]).should_not be_nil
|
53
|
+
@account.update_attribute(:group_id, 7)
|
54
|
+
old_key = Rails.cache.read(key[:key]).first
|
55
|
+
Rails.cache.read(old_key[:key]).should be_nil
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should delete has_and_belongs_to_many with_association cache" do
|
59
|
+
@post1.cached_tags
|
60
|
+
key = Cacheable.association_key(@post1, :tags)
|
61
|
+
Rails.cache.read(key[:key]).should_not be_nil
|
62
|
+
old_key = Rails.cache.read(key[:key]).first
|
63
|
+
@tag1.update_attribute(:title, "new title")
|
64
|
+
Rails.cache.read(old_key[:key]).should be_nil
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should delete has_one through belongs_to with_association cache" do
|
68
|
+
@account.update_attribute(:group_id, 1)
|
69
|
+
@group1.update_attribute(:name, "Poop Group")
|
70
|
+
key = Cacheable.association_key(user, :group)
|
71
|
+
Rails.cache.read(key[:key]).should be_nil
|
72
|
+
user.cached_group.should == @group1
|
73
|
+
Rails.cache.read(key[:key]).should == [Cacheable.instance_key(Group, @group1.id)]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Descendant < User
|
2
|
+
|
3
|
+
belongs_to :location
|
4
|
+
|
5
|
+
model_cache do
|
6
|
+
with_attribute :email
|
7
|
+
with_method :name
|
8
|
+
with_association :location
|
9
|
+
with_class_method :default_name
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
"ScotterC"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.default_name
|
17
|
+
"ScotterC"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/spec/models/post.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
class Post < ActiveRecord::Base
|
2
|
+
include Cacheable
|
3
|
+
|
4
|
+
belongs_to :location
|
5
|
+
belongs_to :user
|
6
|
+
|
7
|
+
has_many :comments, :as => :commentable
|
8
|
+
has_many :images, :as => :viewable
|
9
|
+
|
10
|
+
has_and_belongs_to_many :tags
|
11
|
+
|
12
|
+
model_cache do
|
13
|
+
with_key
|
14
|
+
with_attribute :user_id
|
15
|
+
with_association :user, :comments, :images, :tags
|
16
|
+
with_class_method :default_post, :retrieve_with_user_id, :retrieve_with_both
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.default_post
|
20
|
+
Post.first
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.retrieve_with_user_id(user_id)
|
24
|
+
Post.find_by_user_id(user_id)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.retrieve_with_both(user_id, post_id)
|
28
|
+
Post.find(post_id) == Post.find_by_user_id(user_id)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/spec/models/tag.rb
ADDED
data/spec/models/user.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
class User < ActiveRecord::Base
|
2
|
+
include Cacheable
|
3
|
+
|
4
|
+
has_many :posts
|
5
|
+
has_one :account
|
6
|
+
has_many :images, through: :posts
|
7
|
+
|
8
|
+
has_one :group, through: :account
|
9
|
+
|
10
|
+
model_cache do
|
11
|
+
with_key
|
12
|
+
with_attribute :login
|
13
|
+
with_method :last_post, :bad_iv_name!, :bad_iv_name?
|
14
|
+
with_association :posts, :account, :images, :group
|
15
|
+
with_class_method :default_name, :user_with_id, :user_with_email,
|
16
|
+
:users_with_ids, :users_with_ids_in, :user_with_attributes
|
17
|
+
end
|
18
|
+
|
19
|
+
def last_post
|
20
|
+
posts.last
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.default_name
|
24
|
+
"flyerhzm"
|
25
|
+
end
|
26
|
+
|
27
|
+
def bad_iv_name!
|
28
|
+
42
|
29
|
+
end
|
30
|
+
|
31
|
+
def bad_iv_name?
|
32
|
+
44
|
33
|
+
end
|
34
|
+
|
35
|
+
# accepts a number
|
36
|
+
def self.user_with_id(id)
|
37
|
+
User.find(id)
|
38
|
+
end
|
39
|
+
|
40
|
+
# accepts a string
|
41
|
+
def self.user_with_email(email)
|
42
|
+
User.find_by_email(email)
|
43
|
+
end
|
44
|
+
|
45
|
+
# accepts an array
|
46
|
+
def self.users_with_ids(ids)
|
47
|
+
User.find(ids)
|
48
|
+
end
|
49
|
+
|
50
|
+
# accepts a range
|
51
|
+
def self.users_with_ids_in(range)
|
52
|
+
User.select { |u| range.include?(u.id) }
|
53
|
+
end
|
54
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
3
|
+
|
4
|
+
require 'rails'
|
5
|
+
require 'active_record'
|
6
|
+
require 'rspec'
|
7
|
+
require 'mocha/api'
|
8
|
+
require 'memcached'
|
9
|
+
require 'cacheable'
|
10
|
+
|
11
|
+
# It needs this order otherwise cacheable throws
|
12
|
+
# errors when looking for reflection classes
|
13
|
+
# Specifically, post can't be before tag
|
14
|
+
# and user can't be before post
|
15
|
+
require 'models/location'
|
16
|
+
require 'models/account'
|
17
|
+
require 'models/group'
|
18
|
+
require 'models/comment'
|
19
|
+
require 'models/image'
|
20
|
+
require 'models/tag'
|
21
|
+
require 'models/post'
|
22
|
+
require 'models/user'
|
23
|
+
require 'models/descendant'
|
24
|
+
|
25
|
+
ActiveRecord::Migration.verbose = false
|
26
|
+
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
27
|
+
|
28
|
+
module Rails
|
29
|
+
class <<self
|
30
|
+
def cache
|
31
|
+
@cache ||= Memcached::Rails.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
RSpec.configure do |config|
|
37
|
+
config.mock_with :mocha
|
38
|
+
|
39
|
+
config.filter_run focus: true
|
40
|
+
config.run_all_when_everything_filtered = true
|
41
|
+
|
42
|
+
config.before :all do
|
43
|
+
::ActiveRecord::Schema.define(:version => 1) do
|
44
|
+
create_table :users do |t|
|
45
|
+
t.string :login
|
46
|
+
t.string :email
|
47
|
+
end
|
48
|
+
|
49
|
+
create_table :accounts do |t|
|
50
|
+
t.integer :user_id
|
51
|
+
t.integer :group_id
|
52
|
+
end
|
53
|
+
|
54
|
+
create_table :posts do |t|
|
55
|
+
t.integer :user_id
|
56
|
+
t.string :title
|
57
|
+
t.integer :location_id
|
58
|
+
end
|
59
|
+
|
60
|
+
create_table :comments do |t|
|
61
|
+
t.integer :commentable_id
|
62
|
+
t.string :commentable_type
|
63
|
+
end
|
64
|
+
|
65
|
+
create_table :images do |t|
|
66
|
+
t.integer :viewable_id
|
67
|
+
t.string :viewable_type
|
68
|
+
t.string :name
|
69
|
+
end
|
70
|
+
|
71
|
+
create_table :tags do |t|
|
72
|
+
t.string :title
|
73
|
+
end
|
74
|
+
|
75
|
+
create_table :posts_tags, id: false do |t|
|
76
|
+
t.integer :post_id
|
77
|
+
t.integer :tag_id
|
78
|
+
end
|
79
|
+
|
80
|
+
create_table :groups do |t|
|
81
|
+
t.string :name
|
82
|
+
end
|
83
|
+
|
84
|
+
create_table :locations do |t|
|
85
|
+
t.string :city
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
config.after :all do
|
92
|
+
::ActiveRecord::Base.connection.tables.each do |table|
|
93
|
+
::ActiveRecord::Base.connection.drop_table(table)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: generation_cacheable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pat McGee
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-11-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.8'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mocha
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.10.5
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.10.5
|
55
|
+
description: a simple cache implementation with attribute based expiry
|
56
|
+
email:
|
57
|
+
- patmcgee331@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- .rspec
|
64
|
+
- .ruby-gemset
|
65
|
+
- .ruby-version
|
66
|
+
- ChangeLog
|
67
|
+
- Gemfile
|
68
|
+
- README.md
|
69
|
+
- Rakefile
|
70
|
+
- generation_cacheable.gemspec
|
71
|
+
- lib/gen_cache.rb
|
72
|
+
- lib/gen_cache/cache_io/fetching.rb
|
73
|
+
- lib/gen_cache/cache_io/formatting.rb
|
74
|
+
- lib/gen_cache/cache_io/parsing.rb
|
75
|
+
- lib/gen_cache/cache_types/association_cache.rb
|
76
|
+
- lib/gen_cache/cache_types/attribute_cache.rb
|
77
|
+
- lib/gen_cache/cache_types/class_method_cache.rb
|
78
|
+
- lib/gen_cache/cache_types/key_cache.rb
|
79
|
+
- lib/gen_cache/cache_types/method_cache.rb
|
80
|
+
- lib/gen_cache/caches.rb
|
81
|
+
- lib/gen_cache/expiry.rb
|
82
|
+
- lib/gen_cache/keys.rb
|
83
|
+
- lib/gen_cache/version.rb
|
84
|
+
- spec/gen_cache/cache_io/fetching_spec.rb
|
85
|
+
- spec/gen_cache/cache_io/formatting_spec.rb
|
86
|
+
- spec/gen_cache/cache_io/parsing_spec.rb
|
87
|
+
- spec/gen_cache/cache_types/association_cache_spec.rb
|
88
|
+
- spec/gen_cache/cache_types/attribute_cache_spec.rb
|
89
|
+
- spec/gen_cache/cache_types/class_method_cache_spec.rb
|
90
|
+
- spec/gen_cache/cache_types/key_cache_spec.rb
|
91
|
+
- spec/gen_cache/cache_types/method_cache_spec.rb
|
92
|
+
- spec/gen_cache/expiry_spec.rb
|
93
|
+
- spec/gen_cache/keys_spec.rb
|
94
|
+
- spec/gen_cache_spec.rb
|
95
|
+
- spec/models/account.rb
|
96
|
+
- spec/models/comment.rb
|
97
|
+
- spec/models/descendant.rb
|
98
|
+
- spec/models/group.rb
|
99
|
+
- spec/models/image.rb
|
100
|
+
- spec/models/location.rb
|
101
|
+
- spec/models/post.rb
|
102
|
+
- spec/models/tag.rb
|
103
|
+
- spec/models/user.rb
|
104
|
+
- spec/spec_helper.rb
|
105
|
+
homepage: https://github.com/pathouse/generation-cacheable
|
106
|
+
licenses: []
|
107
|
+
metadata: {}
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
requirements: []
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 2.0.3
|
125
|
+
signing_key:
|
126
|
+
specification_version: 4
|
127
|
+
summary: a simple cache implementation with attribute based expiry
|
128
|
+
test_files:
|
129
|
+
- spec/gen_cache/cache_io/fetching_spec.rb
|
130
|
+
- spec/gen_cache/cache_io/formatting_spec.rb
|
131
|
+
- spec/gen_cache/cache_io/parsing_spec.rb
|
132
|
+
- spec/gen_cache/cache_types/association_cache_spec.rb
|
133
|
+
- spec/gen_cache/cache_types/attribute_cache_spec.rb
|
134
|
+
- spec/gen_cache/cache_types/class_method_cache_spec.rb
|
135
|
+
- spec/gen_cache/cache_types/key_cache_spec.rb
|
136
|
+
- spec/gen_cache/cache_types/method_cache_spec.rb
|
137
|
+
- spec/gen_cache/expiry_spec.rb
|
138
|
+
- spec/gen_cache/keys_spec.rb
|
139
|
+
- spec/gen_cache_spec.rb
|
140
|
+
- spec/models/account.rb
|
141
|
+
- spec/models/comment.rb
|
142
|
+
- spec/models/descendant.rb
|
143
|
+
- spec/models/group.rb
|
144
|
+
- spec/models/image.rb
|
145
|
+
- spec/models/location.rb
|
146
|
+
- spec/models/post.rb
|
147
|
+
- spec/models/tag.rb
|
148
|
+
- spec/models/user.rb
|
149
|
+
- spec/spec_helper.rb
|