activerecord-deprecated_finders 0.0.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -1
- data/.travis.yml +10 -2
- data/Gemfile +1 -6
- data/Rakefile +1 -1
- data/activerecord-deprecated_finders.gemspec +1 -1
- data/activerecord-deprecated_finders.gemspec.erb +1 -1
- data/lib/active_record/deprecated_finders/association_builder.rb +9 -3
- data/lib/active_record/deprecated_finders/collection_proxy.rb +5 -1
- data/lib/active_record/deprecated_finders/version.rb +1 -1
- data/test/associations_test.rb +14 -0
- data/test/finder_options_test.rb +2 -2
- data/test/helper.rb +26 -0
- metadata +4 -3
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
3
|
- 1.9.3
|
4
|
+
- 2.0.0
|
5
|
+
gemfile:
|
6
|
+
- gemfiles/Gemfile-edge
|
7
|
+
- Gemfile
|
4
8
|
notifications:
|
5
|
-
email:
|
6
|
-
|
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="
|
7
15
|
before_install:
|
8
16
|
- gem install bundler
|
data/Gemfile
CHANGED
@@ -1,10 +1,5 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in active_record_deprecated_finders.gemspec
|
4
3
|
gemspec
|
5
4
|
|
6
|
-
|
7
|
-
gem 'rails', path: ENV['RAILS']
|
8
|
-
else
|
9
|
-
gem 'rails', git: 'git://github.com/rails/rails', branch: 'master'
|
10
|
-
end
|
5
|
+
gem 'rails', '>= 4.0.0.beta', '< 5'
|
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ deps = `git ls-files`.split("\n") - [specname]
|
|
16
16
|
task :gemspec => specname
|
17
17
|
|
18
18
|
file specname => deps do
|
19
|
-
files = `git ls-files`.split("\n")
|
19
|
+
files = `git ls-files`.split("\n") - Dir["gemfiles/*"]
|
20
20
|
test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
21
|
executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
22
|
|
@@ -4,7 +4,7 @@ require File.expand_path('../lib/active_record/deprecated_finders/version', __FI
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Jon Leighton"]
|
6
6
|
gem.email = ["j@jonathanleighton.com"]
|
7
|
-
gem.description = %q{
|
7
|
+
gem.description = %q{Deprecated finder APIs extracted from Active Record.}
|
8
8
|
gem.summary = %q{This gem contains deprecated finder APIs extracted from Active Record.}
|
9
9
|
gem.homepage = "https://github.com/rails/activerecord-deprecated_finders"
|
10
10
|
|
@@ -4,7 +4,7 @@ require File.expand_path('../lib/active_record/deprecated_finders/version', __FI
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Jon Leighton"]
|
6
6
|
gem.email = ["j@jonathanleighton.com"]
|
7
|
-
gem.description = %q{
|
7
|
+
gem.description = %q{Deprecated finder APIs extracted from Active Record.}
|
8
8
|
gem.summary = %q{This gem contains deprecated finder APIs extracted from Active Record.}
|
9
9
|
gem.homepage = "https://github.com/rails/activerecord-deprecated_finders"
|
10
10
|
|
@@ -38,10 +38,16 @@ module ActiveRecord::Associations::Builder
|
|
38
38
|
self.valid_options += [:select, :conditions, :include, :readonly]
|
39
39
|
|
40
40
|
def initialize_with_deprecated_options(model, name, scope, options)
|
41
|
-
if scope.is_a?(Hash)
|
42
|
-
|
43
|
-
|
41
|
+
options = scope if scope.is_a?(Hash)
|
42
|
+
deprecated_options = options.slice(*DEPRECATED_OPTIONS)
|
43
|
+
|
44
|
+
if scope.respond_to?(:call) && !deprecated_options.empty?
|
45
|
+
raise ArgumentError,
|
46
|
+
"Invalid mix of scope block and deprecated finder options on " \
|
47
|
+
"ActiveRecord association: #{model.name}.#{macro} :#{name}"
|
48
|
+
end
|
44
49
|
|
50
|
+
if scope.is_a?(Hash)
|
45
51
|
if deprecated_options.empty?
|
46
52
|
scope = nil
|
47
53
|
else
|
@@ -4,8 +4,12 @@ module ActiveRecord
|
|
4
4
|
module InterceptDynamicInstantiators
|
5
5
|
def method_missing(method, *args, &block)
|
6
6
|
match = DynamicMatchers::Method.match(klass, method)
|
7
|
+
sanitized_method = match.class.prefix + match.class.suffix if match
|
7
8
|
|
8
|
-
if match &&
|
9
|
+
if match && self.respond_to?(sanitized_method)
|
10
|
+
self.send(sanitized_method, Hash[match.attribute_names.zip(args)])
|
11
|
+
|
12
|
+
elsif match && match.is_a?(DynamicMatchers::Instantiator)
|
9
13
|
scoping do
|
10
14
|
klass.send(method, *args) do |record|
|
11
15
|
proxy_association.add_to_target(record)
|
data/test/associations_test.rb
CHANGED
@@ -7,6 +7,14 @@ describe 'associations' do
|
|
7
7
|
@klass.table_name = 'posts'
|
8
8
|
end
|
9
9
|
|
10
|
+
it 'find_or_create_by on has_many through should work' do
|
11
|
+
physician = Physician.create!
|
12
|
+
ActiveSupport::Deprecation.silence do
|
13
|
+
physician.patients.find_or_create_by_name('Tim')
|
14
|
+
end
|
15
|
+
assert_equal 1, Appointment.count
|
16
|
+
end
|
17
|
+
|
10
18
|
it 'translates hash scope options into scopes' do
|
11
19
|
assert_deprecated do
|
12
20
|
@klass.has_many :comments, readonly: 'a', order: 'b', limit: 'c', group: 'd', having: 'e',
|
@@ -49,4 +57,10 @@ describe 'associations' do
|
|
49
57
|
scope = @klass.new.comments
|
50
58
|
scope.limit_value.must_equal 5
|
51
59
|
end
|
60
|
+
|
61
|
+
it "raises an ArgumentError when declaration uses both scope and deprecated options" do
|
62
|
+
assert_raises(ArgumentError) do
|
63
|
+
@klass.has_many :comments, -> { limit 5 }, :order=>'b'
|
64
|
+
end
|
65
|
+
end
|
52
66
|
end
|
data/test/finder_options_test.rb
CHANGED
@@ -44,8 +44,8 @@ describe 'apply_finder_options' do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'supports :order' do
|
47
|
-
scope = Post.scoped.apply_finder_options(:order =>
|
48
|
-
scope.order_values.must_equal [
|
47
|
+
scope = Post.scoped.apply_finder_options(:order => 'foo')
|
48
|
+
scope.order_values.must_equal ['foo']
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'supports :select' do
|
data/test/helper.rb
CHANGED
@@ -17,6 +17,19 @@ ActiveRecord::Schema.define do
|
|
17
17
|
t.string :title
|
18
18
|
t.references :post
|
19
19
|
end
|
20
|
+
|
21
|
+
create_table :appointments do |t|
|
22
|
+
t.integer :physician_id
|
23
|
+
t.integer :patient_id
|
24
|
+
end
|
25
|
+
|
26
|
+
create_table :physicians do |t|
|
27
|
+
t.string :name
|
28
|
+
end
|
29
|
+
|
30
|
+
create_table :patients do |t|
|
31
|
+
t.string :name
|
32
|
+
end
|
20
33
|
end
|
21
34
|
|
22
35
|
class Post < ActiveRecord::Base
|
@@ -29,6 +42,19 @@ class Comment < ActiveRecord::Base
|
|
29
42
|
end
|
30
43
|
end
|
31
44
|
|
45
|
+
class Appointment < ActiveRecord::Base
|
46
|
+
belongs_to :physician
|
47
|
+
belongs_to :patient
|
48
|
+
end
|
49
|
+
|
50
|
+
class Patient < ActiveRecord::Base
|
51
|
+
end
|
52
|
+
|
53
|
+
class Physician < ActiveRecord::Base
|
54
|
+
has_many :appointments
|
55
|
+
has_many :patients, through: :appointments
|
56
|
+
end
|
57
|
+
|
32
58
|
require 'active_support/testing/deprecation'
|
33
59
|
ActiveSupport::Deprecation.debug = true
|
34
60
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-deprecated_finders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
- - ~>
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '1.3'
|
68
|
-
description:
|
68
|
+
description: Deprecated finder APIs extracted from Active Record.
|
69
69
|
email:
|
70
70
|
- j@jonathanleighton.com
|
71
71
|
executables: []
|
@@ -136,3 +136,4 @@ test_files:
|
|
136
136
|
- test/scoped_test.rb
|
137
137
|
- test/update_all_test.rb
|
138
138
|
- test/with_scope_test.rb
|
139
|
+
has_rdoc:
|