yfactorial-utility_scopes 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ 0.2.1
2
+
3
+ * Fixed except named scope not correctly determining its base class
4
+ (as reported by Marcus Crafter: http://github.com/crafterm)
5
+
1
6
  0.2.0
2
7
 
3
8
  * Added except scope from danielmorrison (http://github.com/danielmorrison)
data/README.textile CHANGED
@@ -57,12 +57,14 @@ h3. With (eager-loading)
57
57
  The @with@ scope let's you eager load your model associations. So instead of having to invoke @find(:all, :include => [:association1, :association2])@ just pass these association names into
58
58
  the @with@ named scope:
59
59
 
60
+ <pre><code>
60
61
  # Get all articles and eager-load their comments, each comments' user, article contributors
61
62
  # and the article author.
62
63
  Article.with({ :comments => :user }, :contributors, :author)
63
64
 
64
65
  # Get all articles and eager-load their comments
65
66
  Article.with(:comments)
67
+ </code></pre>
66
68
 
67
69
  Again, just pass in the same arguments into @eager@ that you would pass in as the @:include@ value to "ActiveRecord::Base#find":http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M001298
68
70
 
@@ -94,16 +96,18 @@ will be used:
94
96
  If you would like to specify a different default value you can do so on a per class basis
95
97
  using @default_limit@:
96
98
 
99
+ <pre><code>
97
100
  # Set the default limit to be 15
98
101
  class Article < ActiveRecord::Base
99
102
  default_limit 15
100
103
  end
101
104
 
102
105
  Article.limited # Get the first 15 articles
106
+ </code></pre>
103
107
 
104
108
  h3. Ordered
105
109
 
106
- _Note: the @ordered@ scope cannot be chained with any other @ordered@ clauses_
110
+ _Note: the @ordered@ scope cannot be chained with any other @order@ clauses_
107
111
 
108
112
  @ordered@ lets you dynamically specify the ordering of your result set. If no
109
113
  arguments are given it will default to @created_at DESC@:
@@ -115,6 +119,7 @@ arguments are given it will default to @created_at DESC@:
115
119
  If you would like to specify a different default sort order you can do so on a per class basis
116
120
  using @ordered_by@:
117
121
 
122
+ <pre><code>
118
123
  # Set the default order to be "published_at DESC"
119
124
  class Article < ActiveRecord::Base
120
125
  ordered_by 'published_at DESC'
@@ -122,6 +127,7 @@ using @ordered_by@:
122
127
 
123
128
  Article.ordered # Get all articles ordered by "published_at DESC"
124
129
  Article.ordered("rank ASC") # Get all articles ordered by "rank ASC"
130
+ </code></pre>
125
131
 
126
132
  The current default ordering for a class can always be accessed via @default_ordering@:
127
133
 
@@ -1,9 +1,30 @@
1
1
  module UtilityScopes
2
2
  module Except
3
3
 
4
- def self.included(within)
5
-
4
+ def self.included(within)
6
5
  within.class_eval do
6
+
7
+ # Give every class the ability to add to itself the except named
8
+ # scope
9
+ extend ClassMethods
10
+
11
+ # And automatically do so for all its subclasses
12
+ def self.inherited_with_except_scope_hook(child)
13
+ inherited_without_except_scope_hook(child)
14
+ child.attach_except_utility_scope
15
+ end
16
+ class << self
17
+ alias_method_chain :inherited, :except_scope_hook
18
+ end
19
+ end
20
+ end
21
+
22
+ module ClassMethods
23
+
24
+ # Must be a class method called directly on AR::Base subclasses
25
+ # so named_scope knows who its base class, and thus, table_name
26
+ # and primary_key are.
27
+ def attach_except_utility_scope
7
28
 
8
29
  # Allow easy rejection of items.
9
30
  # Can take an a single id or ActiveRecord object, or an array of them
@@ -14,8 +35,7 @@ module UtilityScopes
14
35
  # nil or empty array causes issues here with mysql
15
36
  item_or_list.blank? ? {} : {:conditions => ["#{quoted_table_name}.#{primary_key} NOT IN (?)", item_or_list]}
16
37
  }
17
-
18
- end
38
+ end
19
39
  end
20
40
  end
21
41
  end
@@ -1,3 +1,4 @@
1
+ #TODO: use base_class to get rid off duplication?
1
2
  module UtilityScopes
2
3
  module Ordered
3
4
 
data/spec/except_spec.rb CHANGED
@@ -5,8 +5,8 @@ describe "except scope" do
5
5
  before do
6
6
  uses_fixture(:article)
7
7
  # Stub these so it doesn't try to hit the (non-existant) database
8
- ActiveRecord::Base.stub!(:quoted_table_name).and_return('articles')
9
- ActiveRecord::Base.stub!(:primary_key).and_return('id')
8
+ Article.stub!(:quoted_table_name).and_return("'articles'")
9
+ Article.stub!(:primary_key).and_return('id')
10
10
  end
11
11
 
12
12
  it "should not change the scope with nil" do
@@ -15,11 +15,11 @@ describe "except scope" do
15
15
 
16
16
  it "should return all items except the one specified" do
17
17
  item = 123
18
- Article.except(item).proxy_options.should == {:conditions => ['articles.id NOT IN (?)', item]}
18
+ Article.except(item).proxy_options.should == {:conditions => ["'articles'.id NOT IN (?)", item]}
19
19
  end
20
20
 
21
21
  it "should return all items except ones in the list specified" do
22
22
  list = [123, 456, 7]
23
- Article.except(list).proxy_options.should == {:conditions => ['articles.id NOT IN (?)', list]}
23
+ Article.except(list).proxy_options.should == {:conditions => ["'articles'.id NOT IN (?)", list]}
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yfactorial-utility_scopes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Daigle
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-08-21 00:00:00 -07:00
12
+ date: 2008-09-08 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency