scopes_for_associations 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  .*.sw*
6
+ .DS_Store
data/README.rdoc CHANGED
@@ -11,6 +11,8 @@ Define very basic, commonly used scopes for ActiveRecord associations.
11
11
  scopes_for_associations
12
12
  end
13
13
 
14
+ Movie.for_director_id(Director.first.id)
15
+ #=> [#<Movie ..., director_id: 1>]
14
16
  Movie.for_director(Director.first)
15
17
  #=> [#<Movie ..., director_id: 1>]
16
18
  Movie.for(Director.first)
@@ -31,6 +33,8 @@ The examples here are basically reproductions of the tests.
31
33
  scopes_for_associations
32
34
  end
33
35
 
36
+ Movie.for_director_id(Director.first.id)
37
+ #=> [#<Movie ..., director_id: 1>]
34
38
  Movie.for_director(Director.first)
35
39
  #=> [#<Movie ..., director_id: 1>]
36
40
  Movie.for(Director.first)
@@ -46,8 +50,10 @@ The examples here are basically reproductions of the tests.
46
50
  belongs_to :commentable, :polymorphic => true
47
51
  end
48
52
 
49
- Comment.for_commentable_type('Movie')
53
+ Comment.for_commentable_id(Movie.first.id)
50
54
  #=> [#<Comment ..., commentable_type: "Movie", commentable_id: 1>]
55
+ Comment.for_commentable_type('Movie')
56
+ #=> [#<Comment ..., commentable_type: "Movie", commentable_id: 1>, ...]
51
57
  Comment.for_commentable(movie)
52
58
  #=> [#<Comment ..., commentable_type: "Movie", commentable_id: 1>]
53
59
  Comment.for(Movie.first)
@@ -1,3 +1,3 @@
1
1
  module ScopesForAssociations
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -19,7 +19,10 @@ module ScopesForAssociations
19
19
  def define_scopes_for_non_polymorpic_belongs_to_associations
20
20
  non_polymorphic_belongs_to_reflections.each do |reflection|
21
21
  name = reflection.name
22
- scope :"for_#{name}", proc { |obj| where(:"#{name}_id" => obj.id) }
22
+ attribute_name = :"#{name}_id"
23
+ scope_name_for_attribute_id = :"for_#{attribute_name}"
24
+ scope scope_name_for_attribute_id, proc { |id| where(attribute_name => id) }
25
+ scope :"for_#{name}", proc { |obj| send(scope_name_for_attribute_id, obj.id) }
23
26
  end
24
27
  end
25
28
 
@@ -27,7 +30,10 @@ module ScopesForAssociations
27
30
  polymorphic_belongs_to_reflections.each do |reflection|
28
31
  name = reflection.name
29
32
  attribute_name_for_polymorphic_type = :"#{name}_type"
33
+ attribute_name_for_polymorphic_id = :"#{name}_id"
34
+ scope_name_for_polymorphic_id = :"for_#{attribute_name_for_polymorphic_id}"
30
35
  scope_name_for_polymorphic_type = :"for_#{attribute_name_for_polymorphic_type}"
36
+ scope scope_name_for_polymorphic_id, proc { |id| where(attribute_name_for_polymorphic_id => id) }
31
37
  scope scope_name_for_polymorphic_type, proc { |string| where(attribute_name_for_polymorphic_type => string) }
32
38
  scope :"for_#{name}", proc { |obj| send(scope_name_for_polymorphic_type, obj.class.name).where(:"#{name}_id" => obj.id) }
33
39
  end
@@ -15,22 +15,33 @@ describe ScopesForAssociations do
15
15
 
16
16
  context 'for non-polymorphic belongs_to associations' do
17
17
 
18
- it 'should define for_x scopes' do
19
- Movie.should respond_to(:for_director)
20
- Movie.should respond_to(:for_production_company)
18
+ it 'should define useful scopes' do
19
+ Movie.should define_scopes(
20
+ :for_director_id,
21
+ :for_director,
22
+ :for_production_company_id,
23
+ :for_production_company,
24
+ :for
25
+ )
26
+ end
27
+
28
+ it 'should scope for association id' do
29
+ Movie.for_director_id(director.id).should query_the_same_as(Movie.where(:director_id => director.id))
30
+ Movie.for_production_company_id(production_company.id).should query_the_same_as(Movie.where(:production_company_id => production_company.id))
21
31
  end
22
32
 
23
33
  it 'should scope for association as object' do
24
- Movie.for_director(director).to_sql.should eq(Movie.where(:director_id => director.id).to_sql)
25
- Movie.for_director(director).should eq([movie])
26
- Movie.for_production_company(production_company).to_sql.should eq(Movie.where(:production_company_id => production_company.id).to_sql)
27
- Movie.for_production_company(director).should eq([movie])
34
+ Movie.for_director(director).should query_the_same_as(Movie.for_director_id(director.id))
35
+ Movie.for_production_company(production_company).should query_the_same_as(Movie.for_production_company_id(production_company.id))
28
36
  end
29
37
 
30
38
  it 'should have an all encompassing scope :for' do
31
- Movie.for(director).to_sql.should eq(Movie.for_director(director).to_sql)
39
+ Movie.for(director).should query_the_same_as(Movie.for_director(director))
40
+ Movie.for(production_company).should query_the_same_as(Movie.for_production_company(production_company))
41
+ end
42
+
43
+ it 'should return correct results' do
32
44
  Movie.for(director).should eq([movie])
33
- Movie.for(production_company).to_sql.should eq(Movie.for_production_company(production_company).to_sql)
34
45
  Movie.for(production_company).should eq([movie])
35
46
  end
36
47
 
@@ -38,27 +49,36 @@ describe ScopesForAssociations do
38
49
 
39
50
  context 'for polymorphic belongs_to associations' do
40
51
 
41
- it 'should define for_x scopes' do
42
- Comment.should respond_to(:for_commentable)
43
- Comment.should respond_to(:for_commentable_type)
44
- Comment.should respond_to(:for)
52
+ it 'should define uesful scopes' do
53
+ Comment.should define_scopes(
54
+ :for_commentable_id,
55
+ :for_commentable_type,
56
+ :for_commentable,
57
+ :for
58
+ )
59
+ end
60
+
61
+ it 'should scope for polymorphic id' do
62
+ Comment.for_commentable_type('Movie').should query_the_same_as(Comment.where(:commentable_type => 'Movie'))
45
63
  end
46
64
 
47
65
  it 'should scope for polymorphic type' do
48
- Comment.for_commentable_type('Movie').to_sql.should eq(Comment.where(:commentable_type => 'Movie').to_sql)
49
- Comment.for_commentable_type('Movie').should eq([movie_comment])
66
+ Comment.for_commentable_id(movie.id).should query_the_same_as(Comment.where(:commentable_id => movie.id))
50
67
  end
51
68
 
52
69
  it 'should scope for association as object' do
53
- Comment.for_commentable(movie).to_sql.should eq(Comment.where(:commentable_type => 'Movie', :commentable_id => movie.id).to_sql)
54
- Comment.for_commentable(movie).should eq([movie_comment])
55
- Comment.for_commentable(trailer).to_sql.should eq(Comment.where(:commentable_type => 'Trailer', :commentable_id => trailer.id).to_sql)
56
- Comment.for_commentable(trailer).should eq([trailer_comment])
70
+ Comment.for_commentable(movie).should query_the_same_as(Comment.where(:commentable_type => 'Movie', :commentable_id => movie.id))
71
+ Comment.for_commentable(trailer).should query_the_same_as(Comment.where(:commentable_type => 'Trailer', :commentable_id => trailer.id))
57
72
  end
58
73
 
59
74
  it 'should have an all encompassing scope :for' do
60
- Comment.for(movie).to_sql.should eq(Comment.for_commentable(movie).to_sql)
61
- Comment.for(trailer).to_sql.should eq(Comment.for_commentable(trailer).to_sql)
75
+ Comment.for(movie).should query_the_same_as(Comment.for_commentable(movie))
76
+ Comment.for(trailer).should query_the_same_as(Comment.for_commentable(trailer))
77
+ end
78
+
79
+ it 'should return correct results' do
80
+ Comment.for(movie).should eq([movie_comment])
81
+ Comment.for(trailer).should eq([trailer_comment])
62
82
  end
63
83
 
64
84
  end
@@ -0,0 +1,13 @@
1
+ RSpec::Matchers.define :define_scopes do |*scopes|
2
+ match do |model_class|
3
+ scopes.each do |scope|
4
+ model_class.scopes.keys.should include(scope)
5
+ end
6
+ end
7
+ end
8
+
9
+ RSpec::Matchers.define :query_the_same_as do |expected_relation|
10
+ match do |example_relation|
11
+ example_relation.to_sql.should eq(expected_relation.to_sql)
12
+ end
13
+ end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scopes_for_associations
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 29
4
5
  prerelease:
5
- version: 0.1.2
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 3
10
+ version: 0.1.3
6
11
  platform: ruby
7
12
  authors:
8
13
  - Jared Ning
@@ -10,7 +15,7 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-02-12 00:00:00 -06:00
18
+ date: 2011-02-13 00:00:00 -06:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
@@ -21,6 +26,11 @@ dependencies:
21
26
  requirements:
22
27
  - - ">="
23
28
  - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 0
24
34
  version: 3.0.0
25
35
  type: :runtime
26
36
  version_requirements: *id001
@@ -32,6 +42,9 @@ dependencies:
32
42
  requirements:
33
43
  - - ">="
34
44
  - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
35
48
  version: "0"
36
49
  type: :development
37
50
  version_requirements: *id002
@@ -43,6 +56,11 @@ dependencies:
43
56
  requirements:
44
57
  - - "="
45
58
  - !ruby/object:Gem::Version
59
+ hash: 27
60
+ segments:
61
+ - 2
62
+ - 5
63
+ - 0
46
64
  version: 2.5.0
47
65
  type: :development
48
66
  version_requirements: *id003
@@ -54,6 +72,11 @@ dependencies:
54
72
  requirements:
55
73
  - - "="
56
74
  - !ruby/object:Gem::Version
75
+ hash: 21
76
+ segments:
77
+ - 1
78
+ - 2
79
+ - 5
57
80
  version: 1.2.5
58
81
  type: :development
59
82
  version_requirements: *id004
@@ -79,6 +102,7 @@ files:
79
102
  - scopes_for_associations.gemspec
80
103
  - spec/scopes_for_associations_spec.rb
81
104
  - spec/spec_helper.rb
105
+ - spec/support/matchers.rb
82
106
  - spec/support/models.rb
83
107
  - spec/support/schema.rb
84
108
  has_rdoc: true
@@ -95,12 +119,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
119
  requirements:
96
120
  - - ">="
97
121
  - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
98
125
  version: "0"
99
126
  required_rubygems_version: !ruby/object:Gem::Requirement
100
127
  none: false
101
128
  requirements:
102
129
  - - ">="
103
130
  - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
104
134
  version: "0"
105
135
  requirements: []
106
136
 
@@ -112,5 +142,6 @@ summary: Define very basic, commonly used scopes for ActiveRecord associations
112
142
  test_files:
113
143
  - spec/scopes_for_associations_spec.rb
114
144
  - spec/spec_helper.rb
145
+ - spec/support/matchers.rb
115
146
  - spec/support/models.rb
116
147
  - spec/support/schema.rb