convenient_scopes 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.0
1
+ 0.8.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{convenient_scopes}
8
- s.version = "0.8.0"
8
+ s.version = "0.8.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ivan Schneider"]
12
- s.date = %q{2011-07-12}
12
+ s.date = %q{2011-07-16}
13
13
  s.description = %q{Dynamic scopes by convention for ActiveRecord 3}
14
14
  s.email = %q{isc@massivebraingames.com}
15
15
  s.extra_rdoc_files = [
@@ -16,7 +16,7 @@ module ConvenientScopes
16
16
  end
17
17
 
18
18
  def search search_scopes
19
- res = unscoped
19
+ res = scoped
20
20
  search_scopes.each do |name, args|
21
21
  if scopes.keys.include?(name.to_sym) || !respond_to?(name)
22
22
  res = res.send name, args unless args == false
@@ -154,13 +154,18 @@ module ConvenientScopes
154
154
  def convert_to_scope_arg scope_data
155
155
  return scope_data unless scope_data.is_a? Array
156
156
  relation_or_proc = scope_data.pop
157
- joins_arg = (scope_data.size == 1) ? scope_data.first : {scope_data.first => scope_data.last}
157
+ joins_arg = determine_joins_arg scope_data
158
158
  if relation_or_proc.is_a? ActiveRecord::Relation
159
159
  relation_or_proc.joins joins_arg
160
160
  else
161
161
  lambda {|*value| relation_or_proc.call(*value).joins joins_arg }
162
162
  end
163
163
  end
164
+
165
+ def determine_joins_arg scope_data
166
+ return scope_data.first if scope_data.size == 1
167
+ {scope_data.shift => determine_joins_arg(scope_data)}
168
+ end
164
169
 
165
170
  end
166
171
 
data/test/helper.rb CHANGED
@@ -18,10 +18,14 @@ class Group < ActiveRecord::Base
18
18
  end
19
19
  class Comment < ActiveRecord::Base
20
20
  belongs_to :user
21
+ belongs_to :post
21
22
  end
22
23
  class UserProfile < ActiveRecord::Base
23
24
  has_one :user
24
25
  end
26
+ class Post < ActiveRecord::Base
27
+ has_many :comments
28
+ end
25
29
 
26
30
  class Test::Unit::TestCase
27
31
  def teardown
@@ -46,7 +50,7 @@ ActiveRecord::Schema.define(:version => 1) do
46
50
  end
47
51
  create_table :comments do |t|
48
52
  t.string :body
49
- t.integer :user_id
53
+ t.integer :user_id, :post_id
50
54
  t.boolean :published
51
55
  t.timestamps
52
56
  end
@@ -54,4 +58,8 @@ ActiveRecord::Schema.define(:version => 1) do
54
58
  t.date :birthdate
55
59
  t.string :email
56
60
  end
61
+ create_table :posts do |t|
62
+ t.string :title, :author
63
+ t.text :body
64
+ end
57
65
  end
@@ -43,6 +43,10 @@ class TestAssociations < Test::Unit::TestCase
43
43
  assert_equal [@dev_group], Group.users_comments_published
44
44
  end
45
45
 
46
+ should "also handle three levels of association" do
47
+ assert_equal 3, Post.comments_user_user_profile_email_is('blbabla').to_sql.scan('INNER JOIN').size
48
+ end
49
+
46
50
  should "be able to leverage a named scope on an association" do
47
51
  Comment.scope :recent, Comment.created_at_after(1.hour.ago).created_at_not_nil
48
52
  assert_equal [@slim], User.comments_recent
@@ -36,6 +36,10 @@ class TestSearchWithHash < Test::Unit::TestCase
36
36
  assert_equal 2, User.count
37
37
  end
38
38
 
39
+ should "not mess up previous scoping" do
40
+ assert_equal [], User.where(:age => 37).search(:first_name_is => 'Angelo')
41
+ end
42
+
39
43
  end
40
44
 
41
45
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: convenient_scopes
3
3
  version: !ruby/object:Gem::Version
4
- hash: 63
4
+ hash: 61
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 8
9
- - 0
10
- version: 0.8.0
9
+ - 1
10
+ version: 0.8.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ivan Schneider
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-12 00:00:00 +02:00
18
+ date: 2011-07-16 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency