activerecord-deprecated_finders 1.0.3 → 1.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8f795ebd30525b3a1d1756500326810b9d568e6
4
- data.tar.gz: 93a650c669bfe9e8e6a325f6cf898ff3c000a587
3
+ metadata.gz: 80989752f57c371b971193ef427719e10babd8a0
4
+ data.tar.gz: e335a3bd0f13928bd81d41bb164ee372a8be6d1b
5
5
  SHA512:
6
- metadata.gz: a8eab7e98267ccda24369146a45d555a200aba7aef72350dbc78395ac0ae8a1f029d2516f414e810a4cac2e0e4b65f65d96ce70f23471b67047e93499950edbf
7
- data.tar.gz: e839f53b41d48fd3ac7194d07f896d1c42868a1ab38665c817d512974d221c011fc0e39721a614dbb38203a4e4b71ae6638288f0c30418cd4568e4ad3a0b578c
6
+ metadata.gz: 0b1659767eb1eadb3171ea22b191d9d433db31455d3804fd6988f135eff9dc811ab94e3b4b01e44b2b19b9cc0ec4646f20f8407c15b2910316bda313a373e9a8
7
+ data.tar.gz: f25253cf446d0f207b3e46b08adc440a781c91b56677e0abbf2546a68b7d970f75c1a3716ca8970e1c9ecd1f5af8965d503649471c0dd2e945ad1695d62d2ed0
data/README.md CHANGED
@@ -1,15 +1,59 @@
1
1
  # Active Record Deprecated Finders
2
2
 
3
- This gem will be used to extract and deprecate old-style finder option
4
- hashes in Active Record:
3
+ This gem is a dependency of Rails 4.0 to provide deprecated finder
4
+ functionality.
5
+
6
+ It will be removed as a dependency in Rails 4.1, but users can manually include
7
+ it in their Gemfile and it will continue to be maintained until Rails 5.
8
+
9
+ ```ruby
10
+ gem 'activerecord-deprecated_finders', require: 'active_record/deprecated_finders'
11
+ ```
5
12
 
6
- ``` ruby
13
+ This gem is used to extract and deprecate old-style finder option hashes in
14
+ Active Record:
15
+
16
+ ```ruby
7
17
  Post.find(:all, conditions: { published_on: 2.weeks.ago }, limit: 5)
8
18
  ```
9
19
 
10
- It will be a dependency of Rails 4.0 to provide the deprecated
11
- functionality.
20
+ as well as the following dynamic finders:
21
+
22
+ * `find_all_by_...`
23
+ * `find_last_by_...`
24
+ * `scoped_by_...`
25
+ * `find_or_initialize_by_...`
26
+ * `find_or_create_by_...`
27
+
28
+ Note that `find(primary_key)`, `find_by...`, and `find_by...!` are not
29
+ deprecated.
30
+
31
+ To avoid reliance on this gem, you'll need to migrate your finder usage.
32
+
33
+ To migrate dynamic finders to Rails 4.1+:
34
+
35
+ * `find_all_by_...` should become `where(...)`.
36
+ * `find_last_by_...` should become `where(...).last`.
37
+ * `scoped_by_...` should become `where(...)`.
38
+ * `find_or_initialize_by_...` should become `find_or_initialize_by(...)`.
39
+ * `find_or_create_by_...` should become `find_or_create_by(...)`.
40
+
41
+ To migrate old-style finder option hashes and for additional information,
42
+ please refer to:
43
+
44
+ * [ActiveRecord::FinderMethods][findermethods],
45
+ [ActiveRecord::Relation][relation], and
46
+ [ActiveRecord::QueryMethods][querymethods] docs.
47
+ * Rails Guide: Upgrading Ruby on Rails ([stable][stableguide] /
48
+ [edge][edgeguide]).
12
49
 
13
- It will be removed as a dependency in Rails 4.1, but users can manually
14
- include it in their Gemfile and it will continue to be maintained until
15
- Rails 5.
50
+ [findermethods]:
51
+ http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html
52
+ [relation]:
53
+ http://api.rubyonrails.org/classes/ActiveRecord/Relation.html
54
+ [querymethods]:
55
+ http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html
56
+ [stableguide]:
57
+ http://guides.rubyonrails.org/upgrading_ruby_on_rails.html
58
+ [edgeguide]:
59
+ http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html
@@ -43,7 +43,7 @@ module ActiveRecord
43
43
  end
44
44
 
45
45
  if result.is_a?(Hash)
46
- @klass.unscoped.apply_finder_options(result, true)
46
+ @klass.all.apply_finder_options(result, true)
47
47
  else
48
48
  result
49
49
  end
@@ -92,7 +92,10 @@ module ActiveRecord
92
92
 
93
93
  scope.assert_valid_keys([ :find, :create ])
94
94
  relation = construct_finder_arel(scope[:find] || {})
95
- relation.default_scoped = true unless action == :overwrite
95
+
96
+ if relation.respond_to?(:default_scoped=)
97
+ relation.default_scoped = true unless action == :overwrite
98
+ end
96
99
 
97
100
  if previous_scope && previous_scope.create_with_value && scope[:create]
98
101
  scope_for_create = if action == :merge
@@ -29,8 +29,12 @@ module ActiveRecord
29
29
  # Ensure this get included first
30
30
  include ActiveRecord::Delegation::ClassSpecificRelation
31
31
 
32
- # Now override the method_missing definition
33
- include InterceptDynamicInstantiators
32
+ unless ActiveRecord::VERSION::MAJOR == 4 &&
33
+ ActiveRecord::VERSION::MINOR == 2 &&
34
+ ActiveRecord::VERSION::TINY > 1
35
+ # Now override the method_missing definition
36
+ include InterceptDynamicInstantiators
37
+ end
34
38
  end
35
39
  end
36
40
  end
@@ -79,7 +79,7 @@ module ActiveRecord
79
79
  )
80
80
 
81
81
  apply_finder_options(options.except(:distinct), true)
82
- .calculate(operation, column_name, :distinct => options[:distinct])
82
+ .calculate(operation, column_name, options.slice(:distinct))
83
83
  else
84
84
  super
85
85
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module DeprecatedFinders
3
- VERSION = "1.0.3"
3
+ VERSION = "1.0.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,61 +1,61 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-deprecated_finders
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Leighton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-11 00:00:00.000000000 Z
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.0.0.beta
34
- - - <
34
+ - - "<"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '5'
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - '>='
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
43
  version: 4.0.0.beta
44
- - - <
44
+ - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '5'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sqlite3
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ~>
51
+ - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '1.3'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ~>
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '1.3'
61
61
  description: Deprecated finder APIs extracted from Active Record.
@@ -65,14 +65,8 @@ executables: []
65
65
  extensions: []
66
66
  extra_rdoc_files: []
67
67
  files:
68
- - .gitignore
69
- - .travis.yml
70
- - Gemfile
71
68
  - LICENSE
72
69
  - README.md
73
- - Rakefile
74
- - activerecord-deprecated_finders.gemspec
75
- - activerecord-deprecated_finders.gemspec.erb
76
70
  - lib/active_record/deprecated_finders.rb
77
71
  - lib/active_record/deprecated_finders/association_builder.rb
78
72
  - lib/active_record/deprecated_finders/base.rb
@@ -80,20 +74,9 @@ files:
80
74
  - lib/active_record/deprecated_finders/dynamic_matchers.rb
81
75
  - lib/active_record/deprecated_finders/relation.rb
82
76
  - lib/active_record/deprecated_finders/version.rb
83
- - test/associations_test.rb
84
- - test/calculate_test.rb
85
- - test/default_scope_test.rb
86
- - test/dynamic_methods_test.rb
87
- - test/find_in_batches_test.rb
88
- - test/finder_options_test.rb
89
- - test/finder_test.rb
90
- - test/helper.rb
91
- - test/scope_test.rb
92
- - test/scoped_test.rb
93
- - test/update_all_test.rb
94
- - test/with_scope_test.rb
95
77
  homepage: https://github.com/rails/activerecord-deprecated_finders
96
- licenses: []
78
+ licenses:
79
+ - MIT
97
80
  metadata: {}
98
81
  post_install_message:
99
82
  rdoc_options: []
@@ -101,30 +84,18 @@ require_paths:
101
84
  - lib
102
85
  required_ruby_version: !ruby/object:Gem::Requirement
103
86
  requirements:
104
- - - '>='
87
+ - - ">="
105
88
  - !ruby/object:Gem::Version
106
89
  version: '0'
107
90
  required_rubygems_version: !ruby/object:Gem::Requirement
108
91
  requirements:
109
- - - '>='
92
+ - - ">="
110
93
  - !ruby/object:Gem::Version
111
94
  version: '0'
112
95
  requirements: []
113
96
  rubyforge_project:
114
- rubygems_version: 2.0.2
97
+ rubygems_version: 2.4.5
115
98
  signing_key:
116
99
  specification_version: 4
117
100
  summary: This gem contains deprecated finder APIs extracted from Active Record.
118
- test_files:
119
- - test/associations_test.rb
120
- - test/calculate_test.rb
121
- - test/default_scope_test.rb
122
- - test/dynamic_methods_test.rb
123
- - test/find_in_batches_test.rb
124
- - test/finder_options_test.rb
125
- - test/finder_test.rb
126
- - test/helper.rb
127
- - test/scope_test.rb
128
- - test/scoped_test.rb
129
- - test/update_all_test.rb
130
- - test/with_scope_test.rb
101
+ test_files: []
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- *.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
@@ -1,16 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- gemfile:
6
- - gemfiles/Gemfile-edge
7
- - Gemfile
8
- notifications:
9
- email: false
10
- campfire:
11
- on_success: change
12
- on_failure: always
13
- rooms:
14
- - secure: "DwWWfmRXWSYoelIo3W6H99FrLM2V9ugFoAu+xBo42n2pNV44lU+8T9O+zWkV\nwD3Lz+7URB/5IRPcEel/KYaRYNJl71YUBgtlcvjM7Xl/7YGLYFAcPT2RXfKA\nctvckk/5NehmSawnLhhvMz2gKtIx/fIwCVqxUnRqqYE0eEQaONA="
15
- before_install:
16
- - gem install bundler
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- gem 'rails', '>= 4.0.0.beta', '< 5'
data/Rakefile DELETED
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
3
- require 'rake/testtask'
4
-
5
- Rake::TestTask.new do |t|
6
- t.libs = ["test"]
7
- t.pattern = "test/**/*_test.rb"
8
- t.ruby_opts = ['-w']
9
- end
10
-
11
- task :default => :test
12
-
13
- specname = "activerecord-deprecated_finders.gemspec"
14
- deps = `git ls-files`.split("\n") - [specname]
15
-
16
- task :gemspec => specname
17
-
18
- file specname => deps do
19
- files = `git ls-files`.split("\n") - Dir["gemfiles/*"]
20
- test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
- executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
-
23
- require 'erb'
24
-
25
- File.open specname, 'w:utf-8' do |f|
26
- f.write ERB.new(File.read("#{specname}.erb")).result(binding)
27
- end
28
- end
@@ -1,21 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/active_record/deprecated_finders/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Jon Leighton"]
6
- gem.email = ["j@jonathanleighton.com"]
7
- gem.description = %q{Deprecated finder APIs extracted from Active Record.}
8
- gem.summary = %q{This gem contains deprecated finder APIs extracted from Active Record.}
9
- gem.homepage = "https://github.com/rails/activerecord-deprecated_finders"
10
-
11
- gem.files = [".gitignore",".travis.yml","Gemfile","LICENSE","README.md","Rakefile","activerecord-deprecated_finders.gemspec","activerecord-deprecated_finders.gemspec.erb","lib/active_record/deprecated_finders.rb","lib/active_record/deprecated_finders/association_builder.rb","lib/active_record/deprecated_finders/base.rb","lib/active_record/deprecated_finders/collection_proxy.rb","lib/active_record/deprecated_finders/dynamic_matchers.rb","lib/active_record/deprecated_finders/relation.rb","lib/active_record/deprecated_finders/version.rb","test/associations_test.rb","test/calculate_test.rb","test/default_scope_test.rb","test/dynamic_methods_test.rb","test/find_in_batches_test.rb","test/finder_options_test.rb","test/finder_test.rb","test/helper.rb","test/scope_test.rb","test/scoped_test.rb","test/update_all_test.rb","test/with_scope_test.rb"]
12
- gem.test_files = ["test/associations_test.rb","test/calculate_test.rb","test/default_scope_test.rb","test/dynamic_methods_test.rb","test/find_in_batches_test.rb","test/finder_options_test.rb","test/finder_test.rb","test/helper.rb","test/scope_test.rb","test/scoped_test.rb","test/update_all_test.rb","test/with_scope_test.rb"]
13
- gem.executables = []
14
- gem.name = "activerecord-deprecated_finders"
15
- gem.require_paths = ["lib"]
16
- gem.version = ActiveRecord::DeprecatedFinders::VERSION
17
-
18
- gem.add_development_dependency 'minitest', '>= 3'
19
- gem.add_development_dependency 'activerecord', '>= 4.0.0.beta', '< 5'
20
- gem.add_development_dependency 'sqlite3', '~> 1.3'
21
- end
@@ -1,21 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/active_record/deprecated_finders/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Jon Leighton"]
6
- gem.email = ["j@jonathanleighton.com"]
7
- gem.description = %q{Deprecated finder APIs extracted from Active Record.}
8
- gem.summary = %q{This gem contains deprecated finder APIs extracted from Active Record.}
9
- gem.homepage = "https://github.com/rails/activerecord-deprecated_finders"
10
-
11
- gem.files = [<%= files.map(&:inspect).join ',' %>]
12
- gem.test_files = [<%= test_files.map(&:inspect).join ',' %>]
13
- gem.executables = [<%= executables.map(&:inspect).join ',' %>]
14
- gem.name = "activerecord-deprecated_finders"
15
- gem.require_paths = ["lib"]
16
- gem.version = ActiveRecord::DeprecatedFinders::VERSION
17
-
18
- gem.add_development_dependency 'minitest', '>= 3'
19
- gem.add_development_dependency 'activerecord', '>= 4.0.0.beta', '< 5'
20
- gem.add_development_dependency 'sqlite3', '~> 1.3'
21
- end
@@ -1,91 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'associations' do
4
- before do
5
- @klass = Class.new(ActiveRecord::Base)
6
- def @klass.name; 'Post'; end
7
- @klass.table_name = 'posts'
8
- Appointment.delete_all
9
- end
10
-
11
- it 'should respect find_by_anything method defined on the base class' do
12
- physician = Physician.create!
13
-
14
- ActiveSupport::Deprecation.silence do
15
- assert_equal [], physician.patients.find_by_custom_name
16
- end
17
- end
18
-
19
- it 'find_or_create_by on has_many through should work' do
20
- physician = Physician.create!
21
- ActiveSupport::Deprecation.silence do
22
- physician.patients.find_or_create_by_name('Tim')
23
- end
24
- assert_equal 1, Appointment.count
25
- end
26
-
27
- it 'find_or_create_by with bang on has_many through should work' do
28
- physician = Physician.create!
29
- ActiveSupport::Deprecation.silence do
30
- physician.patients.find_or_create_by_name!('Tim')
31
- end
32
- assert_equal 1, Appointment.count
33
- end
34
-
35
- it 'find_or_create_by on has_many should work' do
36
- physician = Physician.create!
37
- ActiveSupport::Deprecation.silence do
38
- appointment = physician.appointments.find_or_create_by_status(status: 'active', week_day: 'sunday')
39
- assert_equal appointment, physician.appointments.find_or_create_by_status(status: 'active', week_day: 'sunday')
40
- end
41
- end
42
-
43
- it 'translates hash scope options into scopes' do
44
- assert_deprecated do
45
- @klass.has_many :comments, readonly: 'a', order: 'b', limit: 'c', group: 'd', having: 'e',
46
- offset: 'f', select: 'g', uniq: 'h', include: 'i', conditions: 'j'
47
- end
48
-
49
- scope = @klass.new.comments
50
-
51
- scope.readonly_value.must_equal 'a'
52
- scope.order_values.must_equal ['b']
53
- scope.limit_value.must_equal 'c'
54
- scope.group_values.must_equal ['d']
55
- scope.having_values.must_equal ['e']
56
- scope.offset_value.must_equal 'f'
57
- scope.select_values.must_equal ['g']
58
- scope.uniq_value.must_equal 'h'
59
- scope.includes_values.must_equal ['i']
60
- scope.where_values.must_include 'j'
61
- end
62
-
63
- it 'supports proc where values' do
64
- ActiveSupport::Deprecation.silence do
65
- @klass.has_many :comments, conditions: proc { 'omg' }
66
- end
67
- @klass.new.comments.where_values.must_include 'omg'
68
- @klass.joins(:comments).to_sql.must_include 'omg'
69
- end
70
-
71
- it 'supports proc where values which access the owner' do
72
- ActiveSupport::Deprecation.silence do
73
- @klass.has_many :comments, conditions: proc { title }
74
- end
75
- @klass.new(title: 'omg').comments.where_values.must_include 'omg'
76
- end
77
-
78
- it "allows a declaration with a scope with no options" do
79
- ActiveSupport::Deprecation.silence do
80
- @klass.has_many :comments, -> { limit 5 }
81
- end
82
- scope = @klass.new.comments
83
- scope.limit_value.must_equal 5
84
- end
85
-
86
- it "raises an ArgumentError when declaration uses both scope and deprecated options" do
87
- assert_raises(ArgumentError) do
88
- @klass.has_many :comments, -> { limit 5 }, :order=>'b'
89
- end
90
- end
91
- end
@@ -1,15 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'calculate' do
4
- after do
5
- Post.destroy_all
6
- end
7
-
8
- it 'supports finder options' do
9
- Post.create id: 1
10
- Post.create id: 2, title: 'foo'
11
- Post.create id: 3, title: 'foo'
12
-
13
- assert_deprecated { Post.calculate(:sum, :id, conditions: { title: 'foo' }) }.must_equal 5
14
- end
15
- end
@@ -1,35 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'default scope' do
4
- before do
5
- Post.create(id: 1, title: 'foo lol')
6
- Post.create(id: 2, title: 'foo omg')
7
- Post.create(id: 3)
8
-
9
- @klass = Class.new(Post)
10
- @klass.table_name = 'posts'
11
- end
12
-
13
- after do
14
- Post.delete_all
15
- end
16
-
17
- it 'works with a finder hash' do
18
- assert_deprecated { @klass.default_scope conditions: { id: 1 } }
19
- @klass.all.map(&:id).must_equal [1]
20
- end
21
-
22
- it 'works with a finder hash and a scope' do
23
- @klass.default_scope { @klass.where("title like '%foo%'") }
24
- ActiveSupport::Deprecation.silence do
25
- @klass.default_scope conditions: "title like '%omg%'"
26
- end
27
-
28
- @klass.all.map(&:id).must_equal [2]
29
- end
30
-
31
- it 'works with a block that returns a hash' do
32
- @klass.default_scope { { conditions: { id: 1 } } }
33
- assert_deprecated { @klass.all.to_a }.map(&:id).must_equal [1]
34
- end
35
- end
@@ -1,133 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'dynamic_methods' do
4
- before do
5
- @posts = [
6
- Post.create(title: 'foo', category: '1'),
7
- Post.create(title: 'bar', category: '1'),
8
- Post.create(title: 'bar', category: '2')
9
- ]
10
- end
11
-
12
- after do
13
- Post.delete_all
14
- Comment.delete_all
15
- end
16
-
17
- it 'supports find_all_by' do
18
- assert_deprecated do
19
- Post.find_all_by_title('bar').must_equal [@posts[1], @posts[2]]
20
- Post.find_all_by_title_and_category('bar', '2').must_equal [@posts[2]]
21
- end
22
- end
23
-
24
- it 'supports find_all_by with finder options' do
25
- assert_deprecated do
26
- Post.find_all_by_title('bar', conditions: { category: '1' }).must_equal [@posts[1]]
27
- end
28
- end
29
-
30
- it 'supports find_last_by' do
31
- assert_deprecated do
32
- Post.find_last_by_title('foo').must_equal @posts[0]
33
- Post.find_last_by_title('bar').must_equal @posts[2]
34
- end
35
- end
36
-
37
- it 'supports find_last_by with finder options' do
38
- assert_deprecated do
39
- Post.find_last_by_title('bar', conditions: { category: '1' }).must_equal @posts[1]
40
- end
41
- end
42
-
43
- it 'supports scoped_by' do
44
- scope = assert_deprecated { Post.scoped_by_title('bar') }
45
- scope.is_a?(ActiveRecord::Relation).must_equal true
46
- scope.to_a.must_equal [@posts[1], @posts[2]]
47
- end
48
-
49
- it 'supports find_or_initialize_by' do
50
- assert_deprecated { Post.find_or_initialize_by_title_and_category('bar', '1').must_equal @posts[1] }
51
-
52
- post = assert_deprecated { Post.find_or_initialize_by_title_and_category('bar', '3') }
53
- post.new_record?.must_equal true
54
- post.title.must_equal 'bar'
55
- post.category.must_equal '3'
56
- end
57
-
58
- it 'supports find_or_create_by' do
59
- assert_deprecated { Post.find_or_create_by_title_and_category('bar', '1').must_equal @posts[1] }
60
-
61
- post = assert_deprecated { Post.find_or_create_by_title_and_category('bar', '3') }
62
- post.new_record?.must_equal false
63
- post.title.must_equal 'bar'
64
- post.category.must_equal '3'
65
- end
66
-
67
- it 'supports find_or_create_by!' do
68
- assert_deprecated { Post.find_or_create_by_title_and_category!('bar', '1').must_equal @posts[1] }
69
-
70
- post = assert_deprecated { Post.find_or_create_by_title_and_category!('bar', '3') }
71
- post.new_record?.must_equal false
72
- post.title.must_equal 'bar'
73
- post.category.must_equal '3'
74
-
75
- klass = Class.new(ActiveRecord::Base)
76
- def klass.name; 'Post'; end
77
- klass.table_name = 'posts'
78
- klass.validates_presence_of :category
79
-
80
- lambda {
81
- ActiveSupport::Deprecation.silence { klass.find_or_create_by_title!('z') }
82
- }.must_raise ActiveRecord::RecordInvalid
83
- end
84
-
85
- it 'supports find_by with finder options' do
86
- assert_deprecated do
87
- Post.find_by_title('bar', conditions: { category: '2' }).must_equal @posts[2]
88
- end
89
- end
90
-
91
- it 'supports find_by! with finder options' do
92
- assert_deprecated do
93
- Post.find_by_title!('bar', conditions: { category: '2' }).must_equal @posts[2]
94
- end
95
-
96
- lambda {
97
- assert_deprecated { Post.find_by_title!('bar', conditions: { category: '3' }) }
98
- }.must_raise ActiveRecord::RecordNotFound
99
- end
100
-
101
- it 'supports find_by with a block' do
102
- assert_deprecated do
103
- Post.find_by_title('foo') { |r| [r, 'block'] }.must_equal [@posts[0], 'block']
104
- Post.find_by_title('baz') { |r| [r, 'block'] }.must_equal nil
105
- end
106
- end
107
-
108
- it 'supports find_by! with a block' do
109
- assert_deprecated do
110
- Post.find_by_title!('foo') { |r| [r, 'block'] }.must_equal [@posts[0], 'block']
111
- end
112
- end
113
-
114
- it 'adds to an association when find_or_initialize_by is called' do
115
- post = @posts.first
116
- comment = ActiveSupport::Deprecation.silence { post.comments.find_or_initialize_by_title('omg') }
117
- post.comments.must_equal [comment]
118
- end
119
-
120
- it 'adds to an association when find_or_create_by is called' do
121
- post = @posts.first
122
- post.comments.load_target
123
-
124
- comment = ActiveSupport::Deprecation.silence { post.comments.find_or_create_by_title('omg') }
125
- post.comments.must_equal [comment]
126
- post.reload.comments.must_equal [comment]
127
- end
128
-
129
- it "doesn't mess with method_missing for non-find_or_{initialize|create}_by methods" do
130
- post = @posts.first
131
- post.comments.lol.must_equal 'lol'
132
- end
133
- end
@@ -1,18 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'find_in_batches' do
4
- after do
5
- Post.destroy_all
6
- end
7
-
8
- it 'accepts finder options' do
9
- foo = Post.create title: 'foo'
10
- Post.create title: 'bar'
11
-
12
- assert_deprecated do
13
- Post.find_in_batches(conditions: "title = 'foo'") do |records|
14
- records.must_equal [foo]
15
- end
16
- end
17
- end
18
- end
@@ -1,80 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'apply_finder_options' do
4
- before do
5
- @deprecation_behavior = ActiveSupport::Deprecation.behavior
6
- ActiveSupport::Deprecation.behavior = :silence
7
- end
8
-
9
- after do
10
- ActiveSupport::Deprecation.behavior = @deprecation_behavior
11
- end
12
-
13
- it 'is deprecated' do
14
- assert_deprecated { Post.scoped.apply_finder_options(:conditions => 'foo') }
15
- end
16
-
17
- it 'supports :conditions' do
18
- scope = Post.scoped.apply_finder_options(:conditions => 'foo')
19
- scope.where_values.must_equal ['foo']
20
- end
21
-
22
- it 'supports :include' do
23
- scope = Post.scoped.apply_finder_options(:include => :foo)
24
- scope.includes_values.must_equal [:foo]
25
- end
26
-
27
- it 'supports :joins' do
28
- scope = Post.scoped.apply_finder_options(:joins => :foo)
29
- scope.joins_values.must_equal [:foo]
30
- end
31
-
32
- it 'supports :limit' do
33
- scope = Post.scoped.apply_finder_options(:limit => 5)
34
- scope.limit_value.must_equal 5
35
- end
36
-
37
- it 'supports :offset' do
38
- scope = Post.scoped.apply_finder_options(:offset => 5)
39
- scope.offset_value.must_equal 5
40
- end
41
-
42
- it "does not support :references (as it's new in 4.0)" do
43
- lambda { Post.scoped.apply_finder_options(references: :foo) }.must_raise ArgumentError
44
- end
45
-
46
- it 'supports :order' do
47
- scope = Post.scoped.apply_finder_options(:order => 'foo')
48
- scope.order_values.must_equal ['foo']
49
- end
50
-
51
- it 'supports :select' do
52
- scope = Post.scoped.apply_finder_options(:select => :foo)
53
- scope.select_values.must_equal [:foo]
54
- end
55
-
56
- it 'supports :readonly' do
57
- scope = Post.scoped.apply_finder_options(:readonly => :foo)
58
- scope.readonly_value.must_equal :foo
59
- end
60
-
61
- it 'supports :group' do
62
- scope = Post.scoped.apply_finder_options(:group => :foo)
63
- scope.group_values.must_equal [:foo]
64
- end
65
-
66
- it 'supports :having' do
67
- scope = Post.scoped.apply_finder_options(:having => :foo)
68
- scope.having_values.must_equal [:foo]
69
- end
70
-
71
- it 'supports :from' do
72
- scope = Post.scoped.apply_finder_options(:from => :foo)
73
- scope.from_value.must_equal [:foo, nil]
74
- end
75
-
76
- it 'supports :lock' do
77
- scope = Post.scoped.apply_finder_options(:lock => true)
78
- scope.lock_value.must_equal true
79
- end
80
- end
@@ -1,69 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'finders' do
4
- before do
5
- @posts = 3.times.map { |i| Post.create id: i + 1 }
6
- end
7
-
8
- after do
9
- Post.delete_all
10
- end
11
-
12
- it 'supports find(:all) with no options' do
13
- assert_deprecated { Post.find(:all) }.must_equal @posts
14
- end
15
-
16
- it 'supports find(:all) with options' do
17
- assert_deprecated { Post.find(:all, conditions: 'id >= 2') }.must_equal [@posts[1], @posts[2]]
18
- end
19
-
20
- it 'supports all with options' do
21
- assert_deprecated { Post.all(conditions: 'id >= 2') }.must_equal [@posts[1], @posts[2]]
22
- end
23
-
24
- it 'returns an array from all when there are options' do
25
- posts = ActiveSupport::Deprecation.silence { Post.all(conditions: 'id >= 2') }
26
- posts.class.must_equal Array
27
- end
28
-
29
- it 'returns a relation from all when there are no options' do
30
- posts = Post.all
31
- posts.is_a?(ActiveRecord::Relation).must_equal true
32
- end
33
-
34
- it 'deprecates #all on a relation' do
35
- relation = Post.where('id >= 2')
36
- assert_deprecated { relation.all }.must_equal [@posts[1], @posts[2]]
37
- end
38
-
39
- it 'supports find(:first) with no options' do
40
- assert_deprecated { Post.order(:id).find(:first) }.must_equal @posts.first
41
- end
42
-
43
- it 'supports find(:first) with options' do
44
- assert_deprecated { Post.order(:id).find(:first, conditions: 'id >= 2') }.must_equal @posts[1]
45
- end
46
-
47
- it 'supports first with options' do
48
- assert_deprecated { Post.order(:id).first(conditions: 'id >= 2') }.must_equal @posts[1]
49
- end
50
-
51
- it 'supports find(:last) with no options' do
52
- assert_deprecated { Post.order(:id).find(:last) }.must_equal @posts.last
53
- end
54
-
55
- it 'supports find(:last) with options' do
56
- assert_deprecated { Post.order(:id).find(:last, conditions: 'id <= 2') }.must_equal @posts[1]
57
- end
58
-
59
- it 'supports last with options' do
60
- assert_deprecated { Post.order(:id).last(conditions: 'id <= 2') }.must_equal @posts[1]
61
- end
62
-
63
- it 'support find(1) etc with options' do
64
- assert_deprecated do
65
- Post.find(1, conditions: '1=1').must_equal Post.find(1)
66
- lambda { Post.find(1, conditions: '0=1') }.must_raise(ActiveRecord::RecordNotFound)
67
- end
68
- end
69
- end
@@ -1,68 +0,0 @@
1
- require 'bundler/setup'
2
- require 'minitest/spec'
3
- require 'minitest/autorun'
4
- require 'active_record'
5
- require 'active_record/deprecated_finders'
6
-
7
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
8
-
9
- ActiveRecord::Schema.verbose = false
10
- ActiveRecord::Schema.define do
11
- create_table :posts do |t|
12
- t.string :title
13
- t.string :category
14
- end
15
-
16
- create_table :comments do |t|
17
- t.string :title
18
- t.references :post
19
- end
20
-
21
- create_table :appointments do |t|
22
- t.integer :physician_id
23
- t.integer :patient_id
24
- t.string :week_day
25
- t.string :status
26
- end
27
-
28
- create_table :physicians do |t|
29
- t.string :name
30
- end
31
-
32
- create_table :patients do |t|
33
- t.string :name
34
- end
35
- end
36
-
37
- class Post < ActiveRecord::Base
38
- has_many :comments
39
- end
40
-
41
- class Comment < ActiveRecord::Base
42
- def self.lol
43
- "lol"
44
- end
45
- end
46
-
47
- class Appointment < ActiveRecord::Base
48
- belongs_to :physician
49
- belongs_to :patient
50
- end
51
-
52
- class Patient < ActiveRecord::Base
53
- def self.find_by_custom_name
54
- []
55
- end
56
- end
57
-
58
- class Physician < ActiveRecord::Base
59
- has_many :appointments
60
- has_many :patients, through: :appointments
61
- end
62
-
63
- require 'active_support/testing/deprecation'
64
- ActiveSupport::Deprecation.debug = true
65
-
66
- class MiniTest::Spec
67
- include ActiveSupport::Testing::Deprecation
68
- end
@@ -1,17 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'scope' do
4
- before do
5
- @klass = Class.new(ActiveRecord::Base)
6
- end
7
-
8
- it 'supports a finder hash' do
9
- assert_deprecated { @klass.scope :foo, conditions: :foo }
10
- @klass.foo.where_values.must_equal [:foo]
11
- end
12
-
13
- it 'supports a finder hash inside a callable' do
14
- @klass.scope :foo, ->(v) { { conditions: v } }
15
- assert_deprecated { @klass.foo(:bar) }.where_values.must_equal [:bar]
16
- end
17
- end
@@ -1,15 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'scoped' do
4
- it 'accepts a deprecated conditions option' do
5
- assert_deprecated { Post.scoped(conditions: :foo) }.where_values.must_equal [:foo]
6
- end
7
-
8
- it 'accepts a deprecated include option' do
9
- assert_deprecated { Post.scoped(include: :foo) }.includes_values.must_equal [:foo]
10
- end
11
-
12
- it 'is deprecated' do
13
- assert_deprecated { Post.scoped }
14
- end
15
- end
@@ -1,24 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'update_all' do
4
- after do
5
- Post.destroy_all
6
- end
7
-
8
- it 'supports conditions' do
9
- foo = Post.create title: 'foo'
10
- bar = Post.create title: 'bar'
11
-
12
- assert_deprecated { Post.update_all({ title: 'omg' }, title: 'foo') }
13
-
14
- foo.reload.title.must_equal 'omg'
15
- bar.reload.title.must_equal 'bar'
16
- end
17
-
18
- it 'supports limit and order' do
19
- posts = 3.times.map { Post.create }
20
- assert_deprecated { Post.update_all({ title: 'omg' }, nil, limit: 2, order: :id) }
21
-
22
- posts.each(&:reload).map(&:title).must_equal ['omg', 'omg', nil]
23
- end
24
- end
@@ -1,36 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'with_scope' do
4
- before do
5
- Post.create(id: 1, title: 'foo')
6
- Post.create(id: 2, title: 'bar')
7
- end
8
-
9
- after do
10
- Post.delete_all
11
- end
12
-
13
- it 'applies a scoping' do
14
- assert_deprecated do
15
- Post.with_scope(find: { conditions: { title: 'foo' } }) do
16
- assert_equal [1], Post.all.map(&:id)
17
- end
18
- end
19
- end
20
-
21
- it 'applies an exclusive scoping' do
22
- ActiveSupport::Deprecation.silence do
23
- Post.with_scope(find: { conditions: { title: 'foo' } }) do
24
- Post.send(:with_exclusive_scope, find: { conditions: { title: 'bar' } }) do
25
- assert_equal [2], Post.all.map(&:id)
26
- end
27
- end
28
- end
29
- end
30
-
31
- it 'gives a deprecation for #with_exclusive_scope' do
32
- assert_deprecated do
33
- Post.send(:with_exclusive_scope) {}
34
- end
35
- end
36
- end