second_level_cache 2.1.16 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +4 -8
  3. data/Gemfile +1 -1
  4. data/README.md +14 -13
  5. data/Rakefile +2 -2
  6. data/lib/second_level_cache/active_record/base.rb +9 -13
  7. data/lib/second_level_cache/active_record/belongs_to_association.rb +8 -12
  8. data/lib/second_level_cache/active_record/core.rb +6 -10
  9. data/lib/second_level_cache/active_record/fetch_by_uniq_key.rb +29 -17
  10. data/lib/second_level_cache/active_record/finder_methods.rb +23 -48
  11. data/lib/second_level_cache/active_record/has_one_association.rb +18 -19
  12. data/lib/second_level_cache/active_record/persistence.rb +6 -17
  13. data/lib/second_level_cache/active_record/preloader.rb +16 -17
  14. data/lib/second_level_cache/active_record/railtie.rb +13 -10
  15. data/lib/second_level_cache/active_record.rb +5 -8
  16. data/lib/second_level_cache/config.rb +14 -15
  17. data/lib/second_level_cache/record_marshal.rb +20 -35
  18. data/lib/second_level_cache/version.rb +2 -2
  19. data/lib/second_level_cache.rb +18 -24
  20. data/second_level_cache.gemspec +19 -18
  21. data/test/active_record_test_case_helper.rb +15 -12
  22. data/test/base_test.rb +2 -3
  23. data/test/belongs_to_association_test.rb +2 -3
  24. data/test/fetch_by_uniq_key_test.rb +14 -15
  25. data/test/finder_methods_test.rb +5 -44
  26. data/test/has_one_association_test.rb +5 -10
  27. data/test/model/account.rb +1 -2
  28. data/test/model/animal.rb +0 -1
  29. data/test/model/book.rb +4 -5
  30. data/test/model/image.rb +2 -4
  31. data/test/model/post.rb +3 -4
  32. data/test/model/topic.rb +2 -3
  33. data/test/model/user.rb +11 -14
  34. data/test/persistence_test.rb +3 -4
  35. data/test/polymorphic_association_test.rb +1 -2
  36. data/test/preloader_test.rb +2 -3
  37. data/test/record_marshal_test.rb +12 -15
  38. data/test/require_test.rb +2 -3
  39. data/test/second_level_cache_test.rb +2 -3
  40. data/test/single_table_inheritance_test.rb +0 -1
  41. data/test/test_helper.rb +13 -13
  42. metadata +49 -37
  43. data/lib/second_level_cache/active_record/multi_read_from_cache.rb +0 -21
  44. data/test/model/multi_read_from_cache_test.rb +0 -19
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module RecordMarshal
3
2
  class << self
4
3
  # dump ActiveRecord instace with only attributes.
@@ -10,52 +9,38 @@ module RecordMarshal
10
9
  # ]
11
10
 
12
11
  def dump(record)
13
- [
14
- record.class.name,
15
- record.attributes
16
- ]
12
+ [record.class.name, record.attributes]
17
13
  end
18
14
 
19
15
  # load a cached record
20
16
  def load(serialized)
21
17
  return unless serialized
22
- #fix issues 19
23
- #fix 2.1.2 object.changed? ActiveRecord::SerializationTypeMismatch: Attribute was supposed to be a Hash, but was a String. -- "{:a=>\"t\", :b=>\"x\"}"
24
- #fix 2.1.4 object.changed? is true
25
- #fix Rails 4.2 is deprecating `serialized_attributes` without replacement to Rails 5 is deprecating `serialized_attributes` without replacement
26
- klass, attributes = serialized[0].constantize, serialized[1]
27
- if ::ActiveRecord::VERSION::STRING < '4.2.0'
28
- klass.serialized_attributes.each do |k, v|
29
- next if attributes[k].nil? || attributes[k].is_a?(String)
30
- if attributes[k].respond_to?(:unserialize)
31
- if attributes[k].serialized_value.is_a?(String)
32
- attributes[k] = attributes[k].serialized_value
33
- next
34
- end
18
+ # fix issues 19
19
+ # fix 2.1.2 object.changed? ActiveRecord::SerializationTypeMismatch: Attribute was supposed to be a Hash, but was a String. -- "{:a=>\"t\", :b=>\"x\"}"
20
+ # fix 2.1.4 object.changed? is true
21
+ # fix Rails 4.2 is deprecating `serialized_attributes` without replacement to Rails 5 is deprecating `serialized_attributes` without replacement
22
+ klass = serialized[0].constantize
23
+ attributes = serialized[1]
35
24
 
36
- if ::ActiveRecord::VERSION::STRING >= '4.1.0' && attributes[k].coder == ActiveRecord::Coders::JSON
37
- attributes[k] = attributes[k].serialized_value.to_json
38
- else
39
- attributes[k] = attributes[k].serialized_value
40
- end
41
- end
42
- end
43
- else
44
- klass.columns.select{|t| t.cast_type.is_a?(::ActiveRecord::Type::Serialized) }.each do |c|
45
- name, coder = c.name, c.cast_type.coder
46
- next if attributes[name].nil? || attributes[name].is_a?(String)
47
- if coder.is_a?(ActiveRecord::Coders::YAMLColumn)
48
- attributes[name] = coder.dump(attributes[name]) if attributes[name].is_a?(coder.object_class)
49
- elsif coder == ActiveRecord::Coders::JSON
50
- attributes[name] = attributes[name].to_json
51
- end
25
+ # for ActiveRecord 5.0.0
26
+ klass.columns.each do |c|
27
+ name = c.name
28
+ cast_type = klass.attribute_types[name]
29
+ next unless cast_type.is_a?(::ActiveRecord::Type::Serialized)
30
+ coder = cast_type.coder
31
+ next if attributes[name].nil? || attributes[name].is_a?(String)
32
+ if coder.is_a?(::ActiveRecord::Coders::YAMLColumn)
33
+ attributes[name] = coder.dump(attributes[name]) if attributes[name].is_a?(coder.object_class)
34
+ elsif coder == ::ActiveRecord::Coders::JSON
35
+ attributes[name] = attributes[name].to_json
52
36
  end
53
37
  end
38
+
54
39
  klass.instantiate(attributes)
55
40
  end
56
41
 
57
42
  def load_multi(serializeds)
58
- serializeds.map{|serialized| load(serialized)}
43
+ serializeds.map { |serialized| load(serialized) }
59
44
  end
60
45
  end
61
46
  end
@@ -1,4 +1,4 @@
1
- # -*- encoding : utf-8 -*-
1
+ # frozen_string_literal: true
2
2
  module SecondLevelCache
3
- VERSION = "2.1.16"
3
+ VERSION = '2.2.1'.freeze
4
4
  end
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'active_support/all'
3
2
  require 'second_level_cache/config'
4
3
  require 'second_level_cache/record_marshal'
@@ -9,7 +8,7 @@ module SecondLevelCache
9
8
  end
10
9
 
11
10
  class << self
12
- delegate :logger, :cache_store, :cache_key_prefix, :to => Config
11
+ delegate :logger, :cache_store, :cache_key_prefix, to: Config
13
12
  end
14
13
 
15
14
  module Mixin
@@ -18,39 +17,30 @@ module SecondLevelCache
18
17
  module ClassMethods
19
18
  attr_reader :second_level_cache_options
20
19
 
20
+ delegate :logger, :cache_store, :cache_key_prefix, to: SecondLevelCache
21
+
21
22
  def acts_as_cached(options = {})
22
23
  @second_level_cache_enabled = true
23
24
  @second_level_cache_options = options
24
25
  @second_level_cache_options[:expires_in] ||= 1.week
25
26
  @second_level_cache_options[:version] ||= 0
26
- relation.class.send :include, SecondLevelCache::ActiveRecord::FinderMethods
27
- include SecondLevelCache::ActiveRecord::Core if /^4\.2\./.match(::ActiveRecord.version.version)
27
+ relation.class.send :prepend, SecondLevelCache::ActiveRecord::FinderMethods
28
+ prepend SecondLevelCache::ActiveRecord::Core
28
29
  end
29
30
 
30
31
  def second_level_cache_enabled?
31
- !!@second_level_cache_enabled
32
+ @second_level_cache_enabled == true
32
33
  end
33
34
 
34
35
  def without_second_level_cache
35
- old, @second_level_cache_enabled = @second_level_cache_enabled, false
36
+ old = @second_level_cache_enabled
37
+ @second_level_cache_enabled = false
36
38
 
37
39
  yield if block_given?
38
40
  ensure
39
41
  @second_level_cache_enabled = old
40
42
  end
41
43
 
42
- def cache_store
43
- Config.cache_store
44
- end
45
-
46
- def logger
47
- Config.logger
48
- end
49
-
50
- def cache_key_prefix
51
- Config.cache_key_prefix
52
- end
53
-
54
44
  def cache_version
55
45
  second_level_cache_options[:version]
56
46
  end
@@ -60,11 +50,13 @@ module SecondLevelCache
60
50
  end
61
51
 
62
52
  def read_second_level_cache(id)
63
- RecordMarshal.load(SecondLevelCache.cache_store.read(second_level_cache_key(id))) if self.second_level_cache_enabled?
53
+ return unless second_level_cache_enabled?
54
+ RecordMarshal.load(SecondLevelCache.cache_store.read(second_level_cache_key(id)))
64
55
  end
65
56
 
66
57
  def expire_second_level_cache(id)
67
- SecondLevelCache.cache_store.delete(second_level_cache_key(id)) if self.second_level_cache_enabled?
58
+ return unless second_level_cache_enabled?
59
+ SecondLevelCache.cache_store.delete(second_level_cache_key(id))
68
60
  end
69
61
  end
70
62
 
@@ -73,13 +65,15 @@ module SecondLevelCache
73
65
  end
74
66
 
75
67
  def expire_second_level_cache
76
- SecondLevelCache.cache_store.delete(second_level_cache_key) if self.class.second_level_cache_enabled?
68
+ return unless self.class.second_level_cache_enabled?
69
+ SecondLevelCache.cache_store.delete(second_level_cache_key)
77
70
  end
78
71
 
79
72
  def write_second_level_cache
80
- if self.class.second_level_cache_enabled?
81
- SecondLevelCache.cache_store.write(second_level_cache_key, RecordMarshal.dump(self), :expires_in => self.class.second_level_cache_options[:expires_in])
82
- end
73
+ return unless self.class.second_level_cache_enabled?
74
+ marshal = RecordMarshal.dump(self)
75
+ expires_in = self.class.second_level_cache_options[:expires_in]
76
+ SecondLevelCache.cache_store.write(second_level_cache_key, marshal, expires_in: expires_in)
83
77
  end
84
78
 
85
79
  alias update_second_level_cache write_second_level_cache
@@ -4,9 +4,9 @@ lib = File.expand_path('../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |gem|
7
- gem.authors = ["Hooopo"]
8
- gem.email = ["hoooopo@gmail.com"]
9
- gem.description = %q{Write Through and Read Through caching library inspired by CacheMoney and cache_fu, support ActiveRecord 4.}
7
+ gem.authors = ['Hooopo']
8
+ gem.email = ['hoooopo@gmail.com']
9
+ gem.description = 'Write Through and Read Through caching library inspired by CacheMoney and cache_fu, support ActiveRecord 4.'
10
10
  gem.summary = <<-SUMMARY
11
11
  SecondLevelCache is a write-through and read-through caching library inspired by Cache Money and cache_fu, support only Rails3 and ActiveRecord.
12
12
 
@@ -15,26 +15,27 @@ Gem::Specification.new do |gem|
15
15
  Write-Through: As objects are created, updated, and deleted, all of the caches are automatically kept up-to-date and coherent.
16
16
  SUMMARY
17
17
 
18
- gem.homepage = "https://github.com/csdn-dev/second_level_cache"
18
+ gem.homepage = 'https://github.com/csdn-dev/second_level_cache'
19
19
 
20
- gem.files = Dir.glob("lib/**/*.rb") + [
21
- "README.md",
22
- "Rakefile",
23
- "Gemfile",
24
- "CHANGELOG.md",
25
- "second_level_cache.gemspec"
20
+ gem.files = Dir.glob('lib/**/*.rb') + [
21
+ 'README.md',
22
+ 'Rakefile',
23
+ 'Gemfile',
24
+ 'CHANGELOG.md',
25
+ 'second_level_cache.gemspec'
26
26
  ]
27
- gem.test_files = Dir.glob("test/**/*.rb")
27
+ gem.test_files = Dir.glob('test/**/*.rb')
28
28
  gem.executables = gem.files.grep(%r{^bin/})
29
- gem.name = "second_level_cache"
30
- gem.require_paths = ["lib"]
29
+ gem.name = 'second_level_cache'
30
+ gem.require_paths = ['lib']
31
31
  gem.version = SecondLevelCache::VERSION
32
32
 
33
- gem.add_runtime_dependency "activesupport", ["> 4.0.0", "< 5.0"]
33
+ gem.add_runtime_dependency 'activesupport', ['>= 5.0.0.beta1', '< 5.1.0']
34
+ gem.add_runtime_dependency 'activerecord', ['>= 5.0.0.beta1', '< 5.1.0']
34
35
 
35
- gem.add_runtime_dependency "activerecord", ["> 4.0.0", "< 5.0"]
36
- gem.add_development_dependency "sqlite3", "~> 1.3.6"
37
- gem.add_development_dependency "rake"
36
+ gem.add_development_dependency 'sqlite3'
37
+ gem.add_development_dependency 'rake'
38
38
  gem.add_development_dependency 'pry'
39
- gem.add_development_dependency "database_cleaner", "~> 1.3.0"
39
+ gem.add_development_dependency 'database_cleaner', '~> 1.3.0'
40
+ gem.add_development_dependency 'rubocop', '~> 0.36.0'
40
41
  end
@@ -37,9 +37,9 @@ module ActiveRecordTestCaseHelper
37
37
  ensure
38
38
  failed_patterns = []
39
39
  patterns_to_match.each do |pattern|
40
- failed_patterns << pattern unless SQLCounter.log_all.any?{ |sql| pattern === sql }
40
+ failed_patterns << pattern unless SQLCounter.log_all.any? { |sql| pattern === sql }
41
41
  end
42
- assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map{ |p| p.inspect }.join(', ')} not found.#{SQLCounter.log.size == 0 ? '' : "\nQueries:\n#{SQLCounter.log.join("\n")}"}"
42
+ assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map(&:inspect).join(', ')} not found.#{SQLCounter.log.empty? ? '' : "\nQueries:\n#{SQLCounter.log.join("\n")}"}"
43
43
  end
44
44
 
45
45
  def assert_queries(num = 1, options = {})
@@ -48,9 +48,9 @@ module ActiveRecordTestCaseHelper
48
48
  x = yield
49
49
  the_log = ignore_none ? SQLCounter.log_all : SQLCounter.log
50
50
  if num == :any
51
- assert_operator the_log.size, :>=, 1, "1 or more queries expected, but none were executed."
51
+ assert_operator the_log.size, :>=, 1, '1 or more queries expected, but none were executed.'
52
52
  else
53
- mesg = "#{the_log.size} instead of #{num} queries were executed.#{the_log.size == 0 ? '' : "\nQueries:\n#{the_log.join("\n")}"}"
53
+ mesg = "#{the_log.size} instead of #{num} queries were executed.#{the_log.empty? ? '' : "\nQueries:\n#{the_log.join("\n")}"}"
54
54
  assert_equal num, the_log.size, mesg
55
55
  end
56
56
  x
@@ -61,15 +61,15 @@ module ActiveRecordTestCaseHelper
61
61
  assert_queries(0, options, &block)
62
62
  end
63
63
 
64
- def assert_column(model, column_name, msg=nil)
65
- assert has_column?(model, column_name), msg
64
+ def assert_column(model, column_name, msg = nil)
65
+ assert exists_column?(model, column_name), msg
66
66
  end
67
67
 
68
- def assert_no_column(model, column_name, msg=nil)
69
- assert_not has_column?(model, column_name), msg
68
+ def assert_no_column(model, column_name, msg = nil)
69
+ assert_not exists_column?(model, column_name), msg
70
70
  end
71
71
 
72
- def has_column?(model, column_name)
72
+ def exists_column?(model, column_name)
73
73
  model.reset_column_information
74
74
  model.column_names.include?(column_name.to_s)
75
75
  end
@@ -77,10 +77,13 @@ module ActiveRecordTestCaseHelper
77
77
  class SQLCounter
78
78
  class << self
79
79
  attr_accessor :ignored_sql, :log, :log_all
80
- def clear_log; self.log = []; self.log_all = []; end
80
+ def clear_log
81
+ self.log = []
82
+ self.log_all = []
83
+ end
81
84
  end
82
85
 
83
- self.clear_log
86
+ clear_log
84
87
 
85
88
  self.ignored_sql = [/^PRAGMA/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/, /^SHOW max_identifier_length/, /^BEGIN/, /^COMMIT/]
86
89
 
@@ -102,7 +105,7 @@ module ActiveRecordTestCaseHelper
102
105
  @ignore = ignore
103
106
  end
104
107
 
105
- def call(name, start, finish, message_id, values)
108
+ def call(_name, _start, _finish, _message_id, values)
106
109
  sql = values[:sql]
107
110
 
108
111
  # FIXME: this seems bad. we should probably have a better way to indicate
data/test/base_test.rb CHANGED
@@ -1,13 +1,12 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  class BaseTest < ActiveSupport::TestCase
5
4
  def setup
6
- @user = User.create :name => 'csdn', :email => 'test@csdn.com'
5
+ @user = User.create name: 'csdn', email: 'test@csdn.com'
7
6
  end
8
7
 
9
8
  def test_should_update_cache_when_update_attributes
10
- @user.update_attributes :name => 'change'
9
+ @user.update_attributes name: 'change'
11
10
  assert_equal @user.name, User.read_second_level_cache(@user.id).name
12
11
  end
13
12
 
@@ -1,16 +1,15 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  class BelongsToAssociationTest < ActiveSupport::TestCase
5
4
  def setup
6
- @user = User.create :name => 'csdn', :email => 'test@csdn.com'
5
+ @user = User.create name: 'csdn', email: 'test@csdn.com'
7
6
  end
8
7
 
9
8
  def test_should_get_cache_when_use_belongs_to_association
10
9
  book = @user.books.create
11
10
 
12
11
  @user.write_second_level_cache
13
- book.clear_association_cache
12
+ book.send(:clear_association_cache)
14
13
  assert_no_queries do
15
14
  assert_equal @user, book.user
16
15
  end
@@ -1,43 +1,42 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  class FetchByUinqKeyTest < ActiveSupport::TestCase
5
4
  def setup
6
- @user = User.create :name => 'hooopo', :email => 'hoooopo@gmail.com'
7
- @post = Post.create :slug => "foobar", :topic_id => 2
5
+ @user = User.create name: 'hooopo', email: 'hoooopo@gmail.com'
6
+ @post = Post.create slug: 'foobar', topic_id: 2
8
7
  end
9
8
 
10
9
  def test_cache_uniq_key
11
- assert_equal User.send(:cache_uniq_key, { :name => "hooopo" } ), "uniq_key_User_name_hooopo"
12
- assert_equal User.send(:cache_uniq_key, { :foo => 1, :bar => 2 } ), "uniq_key_User_foo_1,bar_2"
13
- assert_equal User.send(:cache_uniq_key, { :foo => 1, :bar => nil } ), "uniq_key_User_foo_1,bar_"
14
- long_val = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
15
- assert_equal User.send(:cache_uniq_key, { :foo => 1, :bar => long_val } ), "uniq_key_User_foo_1,bar_#{Digest::MD5.hexdigest(long_val)}"
10
+ assert_equal User.send(:cache_uniq_key, name: 'hooopo'), 'uniq_key_User_name_hooopo'
11
+ assert_equal User.send(:cache_uniq_key, foo: 1, bar: 2), 'uniq_key_User_foo_1,bar_2'
12
+ assert_equal User.send(:cache_uniq_key, foo: 1, bar: nil), 'uniq_key_User_foo_1,bar_'
13
+ long_val = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
14
+ assert_equal User.send(:cache_uniq_key, foo: 1, bar: long_val), "uniq_key_User_foo_1,bar_#{Digest::MD5.hexdigest(long_val)}"
16
15
  end
17
16
 
18
17
  def test_should_query_from_db_using_primary_key
19
- Post.fetch_by_uniq_keys(:topic_id => 2, :slug => "foobar")
18
+ Post.fetch_by_uniq_keys(topic_id: 2, slug: 'foobar')
20
19
  @post.expire_second_level_cache
21
- assert_sql(/SELECT\s+"posts".* FROM "posts"\s+WHERE "posts"."id" = \? LIMIT 1/) do
22
- Post.fetch_by_uniq_keys(:topic_id => 2, :slug => "foobar")
20
+ assert_sql(/SELECT\s+"posts".* FROM "posts"\s+WHERE "posts"."id" = \? LIMIT ?/) do
21
+ Post.fetch_by_uniq_keys(topic_id: 2, slug: 'foobar')
23
22
  end
24
23
  end
25
24
 
26
25
  def test_should_not_hit_db_using_fetch_by_uniq_key_twice
27
- post = Post.fetch_by_uniq_keys(:topic_id => 2, :slug => "foobar")
26
+ post = Post.fetch_by_uniq_keys(topic_id: 2, slug: 'foobar')
28
27
  assert_equal post, @post
29
28
  assert_no_queries do
30
- Post.fetch_by_uniq_keys(:topic_id => 2, :slug => "foobar")
29
+ Post.fetch_by_uniq_keys(topic_id: 2, slug: 'foobar')
31
30
  end
32
31
  end
33
32
 
34
33
  def test_should_fail_when_fetch_by_uniq_key_with_bang_method
35
34
  assert_raises(ActiveRecord::RecordNotFound) do
36
- Post.fetch_by_uniq_keys!(:topic_id => 2, :slug => "foobar1")
35
+ Post.fetch_by_uniq_keys!(topic_id: 2, slug: 'foobar1')
37
36
  end
38
37
 
39
38
  assert_raises(ActiveRecord::RecordNotFound) do
40
- User.fetch_by_uniq_key!("xxxxx", :name)
39
+ User.fetch_by_uniq_key!('xxxxx', :name)
41
40
  end
42
41
  end
43
42
 
@@ -1,10 +1,8 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  class FinderMethodsTest < ActiveSupport::TestCase
5
4
  def setup
6
- @user = User.create :name => 'csdn', :email => 'test@csdn.com'
7
- @other_user = User.create :name => 'shopper+', :email => 'test@shopperplus.com'
5
+ @user = User.create name: 'csdn', email: 'test@csdn.com'
8
6
  end
9
7
 
10
8
  def test_should_find_without_cache
@@ -22,61 +20,24 @@ class FinderMethodsTest < ActiveSupport::TestCase
22
20
  def test_should_find_with_condition
23
21
  @user.write_second_level_cache
24
22
  assert_no_queries do
25
- assert_equal @user, User.where(:name => @user.name).find(@user.id)
23
+ assert_equal @user, User.where(name: @user.name).find(@user.id)
26
24
  end
27
25
  end
28
26
 
29
- def test_should_NOT_find_from_cache_when_select_speical_columns
27
+ def test_should_not_find_from_cache_when_select_speical_columns
30
28
  @user.write_second_level_cache
31
- only_id_user = User.select("id").find(@user.id)
29
+ only_id_user = User.select('id').find(@user.id)
32
30
  assert_raises(ActiveModel::MissingAttributeError) do
33
31
  only_id_user.name
34
32
  end
35
33
  end
36
34
 
37
35
  def test_without_second_level_cache
38
- @user.name = "NewName"
36
+ @user.name = 'NewName'
39
37
  @user.write_second_level_cache
40
38
  User.without_second_level_cache do
41
39
  @from_db = User.find(@user.id)
42
40
  end
43
41
  refute_equal @user.name, @from_db.name
44
42
  end
45
-
46
- def test_find_some_record
47
- @users = User.find(@user.id, @other_user.id)
48
- assert_equal 2, @users.size
49
- end
50
-
51
- def test_find_some_record_without_second_level_cache
52
- User.without_second_level_cache do
53
- @users = User.find(@user.id, @other_user.id)
54
- end
55
- assert_equal 2, @users.size
56
- end
57
-
58
- def test_missing_id_will_raise_for_find_some
59
- assert_raises(ActiveRecord::RecordNotFound) do
60
- @users = User.find(@user.id, User.last.id + 10000)
61
- end
62
- end
63
-
64
- def test_filter_works_fine_for_find_some
65
- assert_raises(ActiveRecord::RecordNotFound) do
66
- @users = User.where("name is null").find(@user.id, @other_user.id)
67
- end
68
- end
69
-
70
- def test_half_in_cache_for_find_some
71
- @user.expire_second_level_cache
72
- @users = User.find(@user.id, @other_user.id)
73
- assert_equal 2, @users.size
74
- end
75
-
76
- def test_no_record_in_cache_for_find_some
77
- @user.expire_second_level_cache
78
- @other_user.expire_second_level_cache
79
- @users = User.find(@user.id, @other_user.id)
80
- assert_equal 2, @users.size
81
- end
82
43
  end
@@ -1,9 +1,8 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  class HasOneAssociationTest < ActiveSupport::TestCase
5
4
  def setup
6
- @user = User.create :name => 'hooopo', :email => 'hoooopo@gmail.com'
5
+ @user = User.create name: 'hooopo', email: 'hoooopo@gmail.com'
7
6
  @account = @user.create_account
8
7
  end
9
8
 
@@ -15,7 +14,7 @@ class HasOneAssociationTest < ActiveSupport::TestCase
15
14
  end
16
15
 
17
16
  def test_should_fetch_has_one_through
18
- user = User.create :name => 'hooopo', :email => 'hoooopo@gmail.com', forked_from_user: @user
17
+ user = User.create name: 'hooopo', email: 'hoooopo@gmail.com', forked_from_user: @user
19
18
  clean_user = user.reload
20
19
  assert_equal User, clean_user.forked_from_user.class
21
20
  assert_equal @user.id, user.forked_from_user.id
@@ -27,15 +26,11 @@ class HasOneAssociationTest < ActiveSupport::TestCase
27
26
 
28
27
  def test_has_one_with_conditions
29
28
  user = User.create name: 'hooopo', email: 'hoooopo@gmail.com'
30
- group_namespace1 = Namespace.create(user_id: user.id, name: 'ruby-china', kind: 'group')
29
+ Namespace.create(user_id: user.id, name: 'ruby-china', kind: 'group')
31
30
  user.create_namespace(name: 'hooopo')
32
- group_namespace2 = Namespace.create(user_id: user.id, name: 'rails', kind: 'group')
31
+ Namespace.create(user_id: user.id, name: 'rails', kind: 'group')
33
32
  assert_not_equal user.namespace, nil
34
- assert_equal user.reload.namespace.name, 'hooopo'
35
- clear_user = user.reload
36
- assert_no_queries do
37
- clear_user.namespace
38
- end
33
+ clear_user = User.find(user.id)
39
34
  assert_equal clear_user.namespace.name, 'hooopo'
40
35
  end
41
36
  end
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  ActiveRecord::Base.connection.create_table(:accounts, force: true) do |t|
3
2
  t.integer :age
4
3
  t.string :site
@@ -7,6 +6,6 @@ ActiveRecord::Base.connection.create_table(:accounts, force: true) do |t|
7
6
  end
8
7
 
9
8
  class Account < ActiveRecord::Base
10
- acts_as_cached(expires_in: 3.day)
9
+ acts_as_cached expires_in: 3.days
11
10
  belongs_to :user
12
11
  end
data/test/model/animal.rb CHANGED
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  ActiveRecord::Base.connection.create_table(:animals, force: true) do |t|
3
2
  t.string :type
4
3
  t.string :name
data/test/model/book.rb CHANGED
@@ -1,14 +1,13 @@
1
- # -*- encoding : utf-8 -*-
2
- ActiveRecord::Base.connection.create_table(:books, :force => true) do |t|
1
+ ActiveRecord::Base.connection.create_table(:books, force: true) do |t|
3
2
  t.string :title
4
3
  t.string :body
5
4
  t.integer :user_id
6
- t.integer :images_count, :default => 0
5
+ t.integer :images_count, default: 0
7
6
  end
8
7
 
9
8
  class Book < ActiveRecord::Base
10
9
  acts_as_cached
11
10
 
12
- belongs_to :user, :counter_cache => true
13
- has_many :images, :as => :imagable
11
+ belongs_to :user, counter_cache: true
12
+ has_many :images, as: :imagable
14
13
  end
data/test/model/image.rb CHANGED
@@ -1,5 +1,4 @@
1
- # -*- encoding : utf-8 -*-
2
- ActiveRecord::Base.connection.create_table(:images, :force => true) do |t|
1
+ ActiveRecord::Base.connection.create_table(:images, force: true) do |t|
3
2
  t.string :url
4
3
  t.string :imagable_type
5
4
  t.integer :imagable_id
@@ -8,6 +7,5 @@ end
8
7
  class Image < ActiveRecord::Base
9
8
  acts_as_cached
10
9
 
11
- belongs_to :imagable, :polymorphic => true, :counter_cache => true
10
+ belongs_to :imagable, polymorphic: true, counter_cache: true
12
11
  end
13
-
data/test/model/post.rb CHANGED
@@ -1,11 +1,10 @@
1
- # -*- encoding : utf-8 -*-
2
- ActiveRecord::Base.connection.create_table(:posts, :force => true) do |t|
3
- t.text :body
1
+ ActiveRecord::Base.connection.create_table(:posts, force: true) do |t|
2
+ t.text :body
4
3
  t.string :slug
5
4
  t.integer :topic_id
6
5
  end
7
6
 
8
7
  class Post < ActiveRecord::Base
9
8
  acts_as_cached
10
- belongs_to :topic, :touch => true
9
+ belongs_to :topic, touch: true
11
10
  end
data/test/model/topic.rb CHANGED
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
- ActiveRecord::Base.connection.create_table(:topics, :force => true) do |t|
1
+ ActiveRecord::Base.connection.create_table(:topics, force: true) do |t|
3
2
  t.string :title
4
- t.text :body
3
+ t.text :body
5
4
 
6
5
  t.timestamps null: false
7
6
  end