activerecord_any_of 1.0.2 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -13
  3. data/Rakefile +9 -0
  4. data/lib/activerecord_any_of/version.rb +1 -1
  5. data/lib/activerecord_any_of.rb +59 -36
  6. data/test/activerecord_any_of_test.rb +60 -17
  7. data/test/{dummy → dummy_rails3}/README.rdoc +0 -0
  8. data/test/{dummy → dummy_rails3}/Rakefile +0 -0
  9. data/test/{dummy → dummy_rails3}/app/assets/javascripts/application.js +0 -0
  10. data/test/{dummy → dummy_rails3}/app/assets/stylesheets/application.css +0 -0
  11. data/test/{dummy → dummy_rails3}/app/controllers/application_controller.rb +0 -0
  12. data/test/{dummy → dummy_rails3}/app/helpers/application_helper.rb +0 -0
  13. data/test/{dummy → dummy_rails3}/app/models/author.rb +0 -0
  14. data/test/{dummy → dummy_rails3}/app/models/post.rb +0 -0
  15. data/test/{dummy → dummy_rails3}/app/models/special_post.rb +0 -0
  16. data/test/{dummy → dummy_rails3}/app/models/sti_post.rb +0 -0
  17. data/test/{dummy → dummy_rails3}/app/views/layouts/application.html.erb +0 -0
  18. data/test/{dummy → dummy_rails3}/config/application.rb +0 -0
  19. data/test/{dummy → dummy_rails3}/config/boot.rb +0 -0
  20. data/test/{dummy → dummy_rails3}/config/database.yml +0 -0
  21. data/test/{dummy → dummy_rails3}/config/environment.rb +0 -0
  22. data/test/{dummy → dummy_rails3}/config/environments/development.rb +0 -0
  23. data/test/{dummy → dummy_rails3}/config/environments/production.rb +0 -0
  24. data/test/{dummy → dummy_rails3}/config/environments/test.rb +0 -0
  25. data/test/{dummy → dummy_rails3}/config/initializers/backtrace_silencers.rb +0 -0
  26. data/test/{dummy → dummy_rails3}/config/initializers/inflections.rb +0 -0
  27. data/test/{dummy → dummy_rails3}/config/initializers/mime_types.rb +0 -0
  28. data/test/{dummy → dummy_rails3}/config/initializers/secret_token.rb +0 -0
  29. data/test/{dummy → dummy_rails3}/config/initializers/session_store.rb +0 -0
  30. data/test/{dummy → dummy_rails3}/config/initializers/wrap_parameters.rb +0 -0
  31. data/test/{dummy → dummy_rails3}/config/locales/en.yml +0 -0
  32. data/test/{dummy → dummy_rails3}/config/routes.rb +0 -0
  33. data/test/{dummy → dummy_rails3}/config.ru +0 -0
  34. data/test/{dummy → dummy_rails3}/db/development.sqlite3 +0 -0
  35. data/test/{dummy → dummy_rails3}/db/migrate/20130617172335_create_authors.rb +0 -0
  36. data/test/{dummy → dummy_rails3}/db/migrate/20130617173313_create_posts.rb +0 -0
  37. data/test/{dummy → dummy_rails3}/db/schema.rb +0 -0
  38. data/test/dummy_rails3/db/test.sqlite3 +0 -0
  39. data/test/{dummy → dummy_rails3}/log/development.log +10 -0
  40. data/test/{dummy → dummy_rails3}/log/test.log +288 -0
  41. data/test/{dummy → dummy_rails3}/public/404.html +0 -0
  42. data/test/{dummy → dummy_rails3}/public/422.html +0 -0
  43. data/test/{dummy → dummy_rails3}/public/500.html +0 -0
  44. data/test/{dummy → dummy_rails3}/public/favicon.ico +0 -0
  45. data/test/{dummy → dummy_rails3}/script/rails +0 -0
  46. data/test/{dummy → dummy_rails3}/test/fixtures/authors.yml +0 -0
  47. data/test/{dummy → dummy_rails3}/test/fixtures/posts.yml +0 -0
  48. data/test/{dummy → dummy_rails3}/test/unit/author_test.rb +0 -0
  49. data/test/{dummy → dummy_rails3}/test/unit/post_test.rb +0 -0
  50. data/test/dummy_rails4/README.rdoc +28 -0
  51. data/test/dummy_rails4/Rakefile +6 -0
  52. data/test/dummy_rails4/app/assets/javascripts/application.js +13 -0
  53. data/test/dummy_rails4/app/assets/stylesheets/application.css +13 -0
  54. data/test/dummy_rails4/app/controllers/application_controller.rb +5 -0
  55. data/test/dummy_rails4/app/helpers/application_helper.rb +2 -0
  56. data/test/dummy_rails4/app/models/author.rb +3 -0
  57. data/test/dummy_rails4/app/models/post.rb +3 -0
  58. data/test/dummy_rails4/app/models/special_post.rb +2 -0
  59. data/test/dummy_rails4/app/models/sti_post.rb +2 -0
  60. data/test/dummy_rails4/app/views/layouts/application.html.erb +14 -0
  61. data/test/dummy_rails4/bin/bundle +3 -0
  62. data/test/dummy_rails4/bin/rails +4 -0
  63. data/test/dummy_rails4/bin/rake +4 -0
  64. data/test/dummy_rails4/config/application.rb +23 -0
  65. data/test/dummy_rails4/config/boot.rb +5 -0
  66. data/test/dummy_rails4/config/database.yml +25 -0
  67. data/test/dummy_rails4/config/environment.rb +5 -0
  68. data/test/dummy_rails4/config/environments/development.rb +29 -0
  69. data/test/dummy_rails4/config/environments/production.rb +80 -0
  70. data/test/dummy_rails4/config/environments/test.rb +36 -0
  71. data/test/dummy_rails4/config/initializers/backtrace_silencers.rb +7 -0
  72. data/test/dummy_rails4/config/initializers/filter_parameter_logging.rb +4 -0
  73. data/test/dummy_rails4/config/initializers/inflections.rb +16 -0
  74. data/test/dummy_rails4/config/initializers/mime_types.rb +5 -0
  75. data/test/dummy_rails4/config/initializers/secret_token.rb +12 -0
  76. data/test/dummy_rails4/config/initializers/session_store.rb +3 -0
  77. data/test/dummy_rails4/config/initializers/wrap_parameters.rb +14 -0
  78. data/test/dummy_rails4/config/locales/en.yml +23 -0
  79. data/test/dummy_rails4/config/routes.rb +56 -0
  80. data/test/dummy_rails4/config.ru +4 -0
  81. data/test/dummy_rails4/db/development.sqlite3 +0 -0
  82. data/test/dummy_rails4/db/migrate/20130617172335_create_authors.rb +9 -0
  83. data/test/dummy_rails4/db/migrate/20130617173313_create_posts.rb +12 -0
  84. data/test/dummy_rails4/db/schema.rb +31 -0
  85. data/test/{dummy → dummy_rails4}/db/test.sqlite3 +0 -0
  86. data/test/dummy_rails4/log/development.log +21 -0
  87. data/test/dummy_rails4/log/test.log +437 -0
  88. data/test/dummy_rails4/public/404.html +58 -0
  89. data/test/dummy_rails4/public/422.html +58 -0
  90. data/test/dummy_rails4/public/500.html +57 -0
  91. data/test/dummy_rails4/public/favicon.ico +0 -0
  92. data/test/dummy_rails4/test/fixtures/authors.yml +7 -0
  93. data/test/dummy_rails4/test/fixtures/posts.yml +13 -0
  94. data/test/dummy_rails4/test/unit/author_test.rb +7 -0
  95. data/test/dummy_rails4/test/unit/post_test.rb +7 -0
  96. data/test/test_helper.rb +4 -4
  97. metadata +180 -88
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2eb1c3bc8c812cafeac5742eda463f36a1517336
4
- data.tar.gz: 9e1c425f8faf771056efa3af3c38dcec05ed7353
3
+ metadata.gz: a9596994399dde0f68fd7f66190597b3d1342aea
4
+ data.tar.gz: 92c72d9afc6d5748552c2dd582aae86aa0763f0c
5
5
  SHA512:
6
- metadata.gz: 9093159a107a57d4f94e01aaea598e8e66f37b138e7d211be6bdd60f0946d22d98253d2a00999a8783b78d4d131687dbf9305e86f7c448d3529cd38ec3928277
7
- data.tar.gz: a18604f93e8fb7ba4fca299a2c376a16a9e641109bb37edcc6b2ec267924ac7a80bc2d97e6160d6542b92afa3698ed6804031d8b4982cb94362703b9a26036fd
6
+ metadata.gz: 5d801f39fdd970de448edeb11bf1abbc3bd41e6c69a94fd56a8b51f8664c8247e25ea86044859671a7ad508feac9e842ccce3a59f69951660e27b97536eef299
7
+ data.tar.gz: 2621b8ebbb70ad7933c4df55f3b676d752b856da623aa7bd1d2b5acc9b93f45b542f99132343a2b4d2283e4f6203e0a3a6ac3ec3b3755098fcdfb7d0ef7e4239
data/README.md CHANGED
@@ -7,18 +7,17 @@ This gem provides `#any_of` and `#none_of` on ActiveRecord.
7
7
  It allows to compute an `OR` like query that leverages AR's `#where` syntax:
8
8
 
9
9
  ```ruby
10
- users = User.any_of("email like '%@example.com'", {banned: true}).destroy_all
10
+ users = User.where.any_of("email like '%@example.com'", {banned: true}).destroy_all
11
11
  # DELETE FROM users WHERE email LIKE '%@example.com' OR banned = '1';
12
12
  ```
13
13
 
14
- It can be used directly on model class, or through an association, or
15
- behind an other relation.
14
+ It can be used anywhere `#where` is valid :
16
15
 
17
16
  ```ruby
18
17
  manual_removal = User.where(id: params[:users][:destroy_ids])
19
- User.any_of(manual_removal, "email like '%@example.com'", {banned: true})
20
- @company.users.any_of(manual_removal, "email like '%@example.com'", {banned: true})
21
- User.where(offline: false).any_of( manual_removal, "email like '%@example.com'", {banned: true})
18
+ User.where.any_of(manual_removal, "email like '%@example.com'", {banned: true})
19
+ @company.users.where.any_of(manual_removal, "email like '%@example.com'", {banned: true})
20
+ User.where(offline: false).where.any_of( manual_removal, "email like '%@example.com'", {banned: true})
22
21
  ```
23
22
 
24
23
  Its main purpose is to both :
@@ -31,9 +30,20 @@ Its main purpose is to both :
31
30
  ```ruby
32
31
  banned_users = User.where(banned: true)
33
32
  unconfirmed_users = User.where("confirmed_at IS NULL")
34
- active_users = User.none_of(banned_users, unconfirmed_users)
33
+ active_users = User.where.none_of(banned_users, unconfirmed_users)
35
34
  ```
36
35
 
36
+ ## Rails-3
37
+
38
+ `activerecord_any_of` uses WhereChain, which has been introduced in rails-4. In
39
+ rails-3, simply call `#any_of` and `#none_of` directly, without using `#where` :
40
+
41
+ ```ruby
42
+ manual_removal = User.where(id: params[:users][:destroy_ids])
43
+ User.any_of(manual_removal, "email like '%@example.com'", {banned: true})
44
+ @company.users.any_of(manual_removal, "email like '%@example.com'", {banned: true})
45
+ User.where(offline: false).any_of( manual_removal, "email like '%@example.com'", {banned: true})
46
+ ```
37
47
 
38
48
  ## Installation
39
49
 
@@ -53,9 +63,12 @@ pass for rails < 3.2.13, I may edit gem dependencies).
53
63
  User.where( "email LIKE '%@example.com" ).where( active: true ).or( offline: true )
54
64
  ```
55
65
 
56
- What does this query do ? `where (email LIKE '%@example.com' AND active = '1' ) OR offline = '1'` ? Or `where email LIKE '%@example.com' AND ( active = '1' OR offline = '1' )` ? This can quickly get messy and counter intuitive.
66
+ What does this query do ? `where (email LIKE '%@example.com' AND active = '1' )
67
+ OR offline = '1'` ? Or `where email LIKE '%@example.com' AND ( active = '1' OR
68
+ offline = '1' )` ? This can quickly get messy and counter intuitive.
57
69
 
58
- The MongoId solution is quite elegant. Using `#any_of`, it is made clear which conditions are grouped through `OR` and which are grouped through `AND` :
70
+ The MongoId solution is quite elegant. Using `#any_of`, it is made clear which
71
+ conditions are grouped through `OR` and which are grouped through `AND` :
59
72
 
60
73
  * `User.where( "email LIKE '%@example.com" ).any_of({ active: true }, { offline: true })`
61
74
  * `fakes = User.where( "email LIKE '%@example.com'" ).where( active: true ); User.any_of( fakes, { offline: true })`
@@ -68,14 +81,36 @@ You can [say it there](https://github.com/rails/rails/pull/10891).
68
81
 
69
82
  ## Running test
70
83
 
84
+ Activerecord_any_of allows to run tests against both rails-3 and rails-4. You
85
+ have to run them seperately, but it's ok to use the same directory / machine to
86
+ run both.
87
+
88
+ ### Running tests with rails-4
89
+
71
90
  ```shell
72
91
  # One time setup
73
- cd test/dummy
74
- rake db:migrate
75
- rake db:test:prepare
92
+ bundle install --gemfile Gemfile.rails4
93
+ cd test/dummy_rails4
94
+ BUNDLE_GEMFILE=../../Gemfile.rails4 bundle exec rake db:migrate
95
+ BUNDLE_GEMFILE=../../Gemfile.rails4 bundle exec rake db:test:prepare
76
96
  cd ../..
97
+
98
+ # Then
99
+ bundle exec rake test
100
+ ```
101
+
102
+ ### Running tests with rails-3
103
+
104
+ ```shell
105
+ # One time setup
106
+ bundle install --gemfile Gemfile.rails3
107
+ cd test/dummy_rails3
108
+ BUNDLE_GEMFILE=../../Gemfile.rails3 bundle exec rake db:migrate
109
+ BUNDLE_GEMFILE=../../Gemfile.rails3 bundle exec rake db:test:prepare
110
+ cd ../..
111
+
77
112
  # Then
78
- rake test
113
+ RAILS_VERSION=3 bundle exec rake test
79
114
  ```
80
115
 
81
116
 
data/Rakefile CHANGED
@@ -1,4 +1,13 @@
1
1
  #!/usr/bin/env rake
2
+
3
+ rails_version = ENV[ 'RAILS_VERSION' ] || '4'
4
+
5
+ if rails_version == '3'
6
+ ENV[ 'BUNDLE_GEMFILE' ] = 'Gemfile.rails3'
7
+ else
8
+ ENV[ 'BUNDLE_GEMFILE' ] = 'Gemfile.rails4'
9
+ end
10
+
2
11
  begin
3
12
  require 'bundler/setup'
4
13
  rescue LoadError
@@ -1,3 +1,3 @@
1
1
  module ActiverecordAnyOf
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1"
3
3
  end
@@ -1,43 +1,65 @@
1
1
  require 'activerecord_any_of/alternative_builder'
2
2
 
3
3
  module ActiverecordAnyOf
4
- # Returns a new relation, which includes results matching any of the conditions
5
- # passed as parameters. You can think of it as a sql <tt>OR</tt> implementation.
6
- #
7
- # Each #any_of parameter is the same set you would have passed to #where :
8
- #
9
- # Client.any_of("orders_count = '2'", ["name = ?", 'Joe'], {email: 'joe@example.com'})
10
- #
11
- # You can as well pass #any_of to other relations :
12
- #
13
- # Client.where("orders_count = '2'").any_of({ email: 'joe@example.com' }, { email: 'john@example.com' })
14
- #
15
- # And with associations :
16
- #
17
- # User.find(1).posts.any_of({published: false}, "user_id IS NULL")
18
- #
19
- # The best part is that #any_of accepts other relations as parameter, to help compute
20
- # dynamic <tt>OR</tt> queries :
21
- #
22
- # banned_users = User.where(banned: true)
23
- # unconfirmed_users = User.where("confirmed_at IS NULL")
24
- # inactive_users = User.any_of(banned_users, unconfirmed_users)
25
- def any_of(*queries)
26
- raise ArgumentError, 'Called any_of() with no arguments.' if queries.none?
27
- AlternativeBuilder.new(:positive, self, *queries).build
4
+ module Chained
5
+ # Returns a new relation, which includes results matching any of the conditions
6
+ # passed as parameters. You can think of it as a sql <tt>OR</tt> implementation.
7
+ #
8
+ # Each #any_of parameter is the same set you would have passed to #where :
9
+ #
10
+ # Client.any_of("orders_count = '2'", ["name = ?", 'Joe'], {email: 'joe@example.com'})
11
+ #
12
+ # You can as well pass #any_of to other relations :
13
+ #
14
+ # Client.where("orders_count = '2'").any_of({ email: 'joe@example.com' }, { email: 'john@example.com' })
15
+ #
16
+ # And with associations :
17
+ #
18
+ # User.find(1).posts.any_of({published: false}, "user_id IS NULL")
19
+ #
20
+ # The best part is that #any_of accepts other relations as parameter, to help compute
21
+ # dynamic <tt>OR</tt> queries :
22
+ #
23
+ # banned_users = User.where(banned: true)
24
+ # unconfirmed_users = User.where("confirmed_at IS NULL")
25
+ # inactive_users = User.any_of(banned_users, unconfirmed_users)
26
+ def any_of(*queries)
27
+ raise ArgumentError, 'Called any_of() with no arguments.' if queries.none?
28
+ AlternativeBuilder.new(:positive, @scope, *queries).build
29
+ end
30
+
31
+ # Returns a new relation, which includes results not matching any of the conditions
32
+ # passed as parameters. It's the negative version of <tt>#any_of</tt>.
33
+ #
34
+ # This will return all active users :
35
+ #
36
+ # banned_users = User.where(banned: true)
37
+ # unconfirmed_users = User.where("confirmed_at IS NULL")
38
+ # active_users = User.none_of(banned_users, unconfirmed_users)
39
+ def none_of(*queries)
40
+ raise ArgumentError, 'Called none_of() with no arguments.' if queries.none?
41
+ AlternativeBuilder.new(:negative, @scope, *queries).build
42
+ end
28
43
  end
29
44
 
30
- # Returns a new relation, which includes results not matching any of the conditions
31
- # passed as parameters. It's the negative version of <tt>#any_of</tt>.
32
- #
33
- # This will return all active users :
34
- #
35
- # banned_users = User.where(banned: true)
36
- # unconfirmed_users = User.where("confirmed_at IS NULL")
37
- # active_users = User.none_of(banned_users, unconfirmed_users)
38
- def none_of(*queries)
39
- raise ArgumentError, 'Called none_of() with no arguments.' if queries.none?
40
- AlternativeBuilder.new(:negative, self, *queries).build
45
+ module Deprecated
46
+ def any_of(*queries)
47
+ if Rails.version >= '4'
48
+ ActiveSupport::Deprecation.warn( "Calling #any_of directly is deprecated and will be removed in activerecord_any_of-1.2.\nPlease call it with #where : User.where.any_of(cond1, cond2)." )
49
+ end
50
+
51
+ raise ArgumentError, 'Called any_of() with no arguments.' if queries.none?
52
+ AlternativeBuilder.new(:positive, self, *queries).build
53
+ end
54
+
55
+ def none_of(*queries)
56
+ if Rails.version >= '4'
57
+ ActiveSupport::Deprecation.warn( "Calling #none_of directly is deprecated and will be removed in activerecord_any_of-1.2.\nPlease call it with #where : User.where.none_of(cond1, cond2)." )
58
+ end
59
+
60
+ raise ArgumentError, 'Called none_of() with no arguments.' if queries.none?
61
+ AlternativeBuilder.new(:negative, self, *queries).build
62
+ end
41
63
  end
42
64
  end
43
65
 
@@ -53,5 +75,6 @@ else
53
75
  end
54
76
  end
55
77
 
56
- ActiveRecord::Relation.send(:include, ActiverecordAnyOf)
78
+ ActiveRecord::Relation.send(:include, ActiverecordAnyOf::Deprecated)
79
+ ActiveRecord::Relation::WhereChain.send(:include, ActiverecordAnyOf::Chained) if Rails.version >= '4'
57
80
  ActiveRecord::Base.send(:extend, ActiverecordAnyOfDelegation)
@@ -4,16 +4,21 @@ class ActiverecordAnyOfTest < ActiveSupport::TestCase
4
4
  fixtures :authors, :posts
5
5
 
6
6
  test 'finding with alternate conditions' do
7
- assert_equal ['David', 'Mary'], Author.any_of({name: 'David'}, {name: 'Mary'}).map(&:name)
8
- assert_equal ['David', 'Mary'], Author.any_of({name: 'David'}, ['name = ?', 'Mary']).map(&:name)
9
-
10
- davids = Author.where(name: 'David')
11
- assert_equal ['David', 'Mary', 'Bob'], Author.any_of(davids, ['name = ?', 'Mary'], {name: 'Bob'}).map(&:name)
12
- assert_equal ['David', 'Mary', 'Bob'], Author.any_of(davids, "name = 'Mary'", {name: 'Bob', id: 3}).map(&:name)
13
-
14
7
  if Rails.version >= '4'
15
- assert_equal ['David'], Author.where.not(name: 'Mary').any_of(davids, ['name = ?', 'Mary']).map(&:name)
8
+ assert_equal ['David', 'Mary'], Author.where.any_of({name: 'David'}, {name: 'Mary'}).map(&:name)
9
+ assert_equal ['David', 'Mary'], Author.where.any_of({name: 'David'}, ['name = ?', 'Mary']).map(&:name)
10
+
11
+ davids = Author.where(name: 'David')
12
+ assert_equal ['David', 'Mary', 'Bob'], Author.where.any_of(davids, ['name = ?', 'Mary'], {name: 'Bob'}).map(&:name)
13
+ assert_equal ['David', 'Mary', 'Bob'], Author.where.any_of(davids, "name = 'Mary'", {name: 'Bob', id: 3}).map(&:name)
14
+ assert_equal ['David'], Author.where.not(name: 'Mary').where.any_of(davids, ['name = ?', 'Mary']).map(&:name)
16
15
  else
16
+ assert_equal ['David', 'Mary'], Author.any_of({name: 'David'}, {name: 'Mary'}).map(&:name)
17
+ assert_equal ['David', 'Mary'], Author.any_of({name: 'David'}, ['name = ?', 'Mary']).map(&:name)
18
+
19
+ davids = Author.where(name: 'David')
20
+ assert_equal ['David', 'Mary', 'Bob'], Author.any_of(davids, ['name = ?', 'Mary'], {name: 'Bob'}).map(&:name)
21
+ assert_equal ['David', 'Mary', 'Bob'], Author.any_of(davids, "name = 'Mary'", {name: 'Bob', id: 3}).map(&:name)
17
22
  assert_equal ['David'], Author.where("name IS NOT 'Mary'").any_of(davids, ['name = ?', 'Mary']).map(&:name)
18
23
  end
19
24
  end
@@ -22,46 +27,84 @@ class ActiverecordAnyOfTest < ActiveSupport::TestCase
22
27
  david = Author.where(name: 'David').first
23
28
  welcome = david.posts.where(body: 'Such a lovely day')
24
29
  expected = ['Welcome to the weblog', 'So I was thinking']
25
- assert_equal expected, david.posts.any_of(welcome, {type: 'SpecialPost'}).map(&:title)
30
+
31
+ if Rails.version >= '4'
32
+ assert_equal expected, david.posts.where.any_of(welcome, {type: 'SpecialPost'}).map(&:title)
33
+ else
34
+ assert_equal expected, david.posts.any_of(welcome, {type: 'SpecialPost'}).map(&:title)
35
+ end
26
36
  end
27
37
 
28
38
  test 'finding alternate dynamically with joined queries' do
29
39
  david = Author.where(posts: { title: 'Welcome to the weblog' }).joins(:posts)
30
40
  mary = Author.where(posts: { title: "eager loading with OR'd conditions" }).joins(:posts)
31
41
 
32
- assert_equal ['David', 'Mary'], Author.any_of(david, mary).map(&:name)
42
+ if Rails.version >= '4'
43
+ assert_equal ['David', 'Mary'], Author.where.any_of(david, mary).map(&:name)
44
+ else
45
+ assert_equal ['David', 'Mary'], Author.any_of(david, mary).map(&:name)
46
+ end
33
47
 
34
48
  if Rails.version >= '4'
35
49
  david = Author.where(posts: { title: 'Welcome to the weblog' }).includes(:posts).references(:posts)
36
50
  mary = Author.where(posts: { title: "eager loading with OR'd conditions" }).includes(:posts).references(:posts)
51
+ assert_equal ['David', 'Mary'], Author.where.any_of(david, mary).map(&:name)
37
52
  else
38
53
  david = Author.where(posts: { title: 'Welcome to the weblog' }).includes(:posts)
39
54
  mary = Author.where(posts: { title: "eager loading with OR'd conditions" }).includes(:posts)
55
+ assert_equal ['David', 'Mary'], Author.any_of(david, mary).map(&:name)
40
56
  end
41
-
42
- assert_equal ['David', 'Mary'], Author.any_of(david, mary).map(&:name)
43
57
  end
44
58
 
45
59
  test 'finding with alternate negative conditions' do
46
- assert_equal ['Bob'], Author.none_of({name: 'David'}, {name: 'Mary'}).map(&:name)
60
+ if Rails.version >= '4'
61
+ assert_equal ['Bob'], Author.where.none_of({name: 'David'}, {name: 'Mary'}).map(&:name)
62
+ else
63
+ assert_equal ['Bob'], Author.none_of({name: 'David'}, {name: 'Mary'}).map(&:name)
64
+ end
47
65
  end
48
66
 
49
67
  test 'finding with alternate negative conditions on association' do
50
68
  david = Author.where(name: 'David').first
51
69
  welcome = david.posts.where(body: 'Such a lovely day')
52
70
  expected = ['sti comments', 'sti me', 'habtm sti test']
53
- assert_equal expected, david.posts.none_of(welcome, {type: 'SpecialPost'}).map(&:title)
71
+
72
+ if Rails.version >= '4'
73
+ assert_equal expected, david.posts.where.none_of(welcome, {type: 'SpecialPost'}).map(&:title)
74
+ else
75
+ assert_equal expected, david.posts.none_of(welcome, {type: 'SpecialPost'}).map(&:title)
76
+ end
54
77
  end
55
78
 
56
79
  test 'calling #any_of with no argument raise exception' do
57
- assert_raise(ArgumentError) { Author.any_of }
80
+ if Rails.version >= '4'
81
+ assert_raise(ArgumentError) { Author.where.any_of }
82
+ else
83
+ assert_raise(ArgumentError) { Author.any_of }
84
+ end
58
85
  end
59
86
 
60
87
  test 'calling #none_of with no argument raise exception' do
61
- assert_raise(ArgumentError) { Author.none_of }
88
+ if Rails.version >= '4'
89
+ assert_raise(ArgumentError) { Author.where.none_of }
90
+ else
91
+ assert_raise(ArgumentError) { Author.none_of }
92
+ end
62
93
  end
63
94
 
64
95
  test 'calling #any_of after a wildcard query works' do
65
- assert_equal ['David'], Author.where("name like '%av%'").any_of({name: 'David'}, {name: 'Mary'}).map(&:name)
96
+ if Rails.version >= '4'
97
+ assert_equal ['David'], Author.where("name like '%av%'").where.any_of({name: 'David'}, {name: 'Mary'}).map(&:name)
98
+ else
99
+ assert_equal ['David'], Author.where("name like '%av%'").any_of({name: 'David'}, {name: 'Mary'}).map(&:name)
100
+ end
101
+ end
102
+
103
+ if Rails.version >= '4'
104
+ test 'calling directly #any_of is deprecated in rails-4' do
105
+ assert_deprecated do
106
+ Author.any_of({name: 'David'}, {name: 'Mary'}).map(&:name)
107
+ end
108
+ end
66
109
  end
67
110
  end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
Binary file
@@ -89,3 +89,13 @@ Connecting to database specified by database.yml
89
89
   (288.7ms) INSERT INTO "schema_migrations" (version) VALUES ('20130617173313')
90
90
   (289.4ms) INSERT INTO "schema_migrations" (version) VALUES ('20130617172335')
91
91
  Connecting to database specified by database.yml
92
+ Connecting to database specified by database.yml
93
+  (0.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" 
94
+  (0.1ms) select sqlite_version(*)
95
+  (273.6ms) CREATE TABLE "authors" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) 
96
+  (300.0ms) CREATE TABLE "posts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "body" text, "author_id" integer, "type" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
97
+  (324.0ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 
98
+  (311.3ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
99
+  (0.1ms) SELECT version FROM "schema_migrations"
100
+  (277.6ms) INSERT INTO "schema_migrations" (version) VALUES ('20130617173313')
101
+  (300.5ms) INSERT INTO "schema_migrations" (version) VALUES ('20130617172335')