pacecar 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  == Pacecar
2
2
 
3
- Pacecar adds named_scope methods and other common functionality to ActiveRecord classes via database column introspection.
3
+ Pacecar adds scope methods and other common functionality to ActiveRecord classes via database column introspection.
4
4
 
5
5
  Pacecar automatically includes the Pacecar::Helpers module into all ActiveRecord::Base classes.
6
6
 
@@ -96,6 +96,10 @@ Records where an attribute starts or ends with a search term...
96
96
  User.first_name_starts_with('A')
97
97
  User.first_name_ends_with('a')
98
98
 
99
+ Records where an attribute matches exactly a term...
100
+
101
+ User.first_name_equals('John')
102
+
99
103
  Records where any non-state text or string column matches term...
100
104
 
101
105
  User.search_for('test')
@@ -187,7 +191,7 @@ First x records...
187
191
 
188
192
  = Named scopes
189
193
 
190
- Because these are all named_scope, you can combine them.
194
+ Because these are all scope, you can combine them.
191
195
 
192
196
  To get all users that have a first_name set, who are admins and approved more than 2 weeks ago, ordered by their first name...
193
197
 
@@ -8,19 +8,19 @@ module Pacecar
8
8
 
9
9
  def has_recent_records(*names)
10
10
  names.each do |name|
11
- named_scope "recent_#{name}_since".to_sym, lambda { |since|
11
+ scope "recent_#{name}_since".to_sym, lambda { |since|
12
12
  {
13
13
  :conditions => [conditions_for_name(name), { :since_time => since }]
14
14
  }
15
15
  }
16
16
  end
17
17
  unless names.first == names.last
18
- named_scope "recent_#{names.join('_or_')}_since".to_sym, lambda { |since|
18
+ scope "recent_#{names.join('_or_')}_since".to_sym, lambda { |since|
19
19
  {
20
20
  :conditions => [names.collect { |name| conditions_for_name(name) }.join(' or '), { :since_time => since }]
21
21
  }
22
22
  }
23
- named_scope "recent_#{names.join('_and_')}_since".to_sym, lambda { |since|
23
+ scope "recent_#{names.join('_and_')}_since".to_sym, lambda { |since|
24
24
  {
25
25
  :conditions => [names.collect { |name| conditions_for_name(name) }.join(' and '), { :since_time => since }]
26
26
  }
@@ -14,8 +14,8 @@ module Pacecar
14
14
 
15
15
  def define_boolean_scopes
16
16
  boolean_column_names.each do |name|
17
- named_scope name.to_sym, :conditions => ["#{quoted_table_name}.#{name} = ?", true]
18
- named_scope "not_#{name}".to_sym, :conditions => ["#{quoted_table_name}.#{name} = ?", false]
17
+ scope name.to_sym, :conditions => ["#{quoted_table_name}.#{name} = ?", true]
18
+ scope "not_#{name}".to_sym, :conditions => ["#{quoted_table_name}.#{name} = ?", false]
19
19
  end
20
20
  end
21
21
 
@@ -21,40 +21,40 @@ module Pacecar
21
21
  end
22
22
 
23
23
  def define_before_after_scopes(name)
24
- named_scope "#{name}_before".to_sym, lambda { |time|
24
+ scope "#{name}_before".to_sym, lambda { |time|
25
25
  { :conditions => ["#{quoted_table_name}.#{name} <= ?", time] }
26
26
  }
27
- named_scope "#{name}_after".to_sym, lambda { |time|
27
+ scope "#{name}_after".to_sym, lambda { |time|
28
28
  { :conditions => ["#{quoted_table_name}.#{name} >= ?", time] }
29
29
  }
30
30
  end
31
31
 
32
32
  def define_past_future_scopes(name)
33
- named_scope "#{name}_in_past", lambda {
33
+ scope "#{name}_in_past", lambda {
34
34
  { :conditions => ["#{quoted_table_name}.#{name} <= ?", now] }
35
35
  }
36
- named_scope "#{name}_in_future", lambda {
36
+ scope "#{name}_in_future", lambda {
37
37
  { :conditions => ["#{quoted_table_name}.#{name} >= ?", now] }
38
38
  }
39
39
  end
40
40
 
41
41
  def define_inside_outside_scopes(name)
42
- named_scope "#{name}_inside".to_sym, lambda { |start, stop|
42
+ scope "#{name}_inside".to_sym, lambda { |start, stop|
43
43
  { :conditions => ["#{quoted_table_name}.#{name} >= ? and #{quoted_table_name}.#{name} <= ?", start, stop] }
44
44
  }
45
- named_scope "#{name}_outside".to_sym, lambda { |start, stop|
45
+ scope "#{name}_outside".to_sym, lambda { |start, stop|
46
46
  { :conditions => ["#{quoted_table_name}.#{name} <= ? and #{quoted_table_name}.#{name} >= ?", start, stop] }
47
47
  }
48
48
  end
49
49
 
50
50
  def define_in_date_scopes(name)
51
- named_scope "#{name}_in_year".to_sym, lambda { |year|
51
+ scope "#{name}_in_year".to_sym, lambda { |year|
52
52
  { :conditions => ["year(#{quoted_table_name}.#{name}) = ?", year] }
53
53
  }
54
- named_scope "#{name}_in_month".to_sym, lambda { |month|
54
+ scope "#{name}_in_month".to_sym, lambda { |month|
55
55
  { :conditions => ["month(#{quoted_table_name}.#{name}) = ?", month] }
56
56
  }
57
- named_scope "#{name}_in_day".to_sym, lambda { |day|
57
+ scope "#{name}_in_day".to_sym, lambda { |day|
58
58
  { :conditions => ["day(#{quoted_table_name}.#{name}) = ?", day] }
59
59
  }
60
60
  end
@@ -12,13 +12,13 @@ module Pacecar
12
12
  protected
13
13
 
14
14
  def define_duration_scopes
15
- named_scope :with_duration_of, lambda { |duration, start, stop|
15
+ scope :with_duration_of, lambda { |duration, start, stop|
16
16
  { :conditions => ["datediff(#{quoted_table_name}.#{start}, #{quoted_table_name}.#{stop}) = ?", duration] }
17
17
  }
18
- named_scope :with_duration_over, lambda { |duration, start, stop|
18
+ scope :with_duration_over, lambda { |duration, start, stop|
19
19
  { :conditions => ["datediff(#{quoted_table_name}.#{start}, #{quoted_table_name}.#{stop}) > ?", duration] }
20
20
  }
21
- named_scope :with_duration_under, lambda { |duration, start, stop|
21
+ scope :with_duration_under, lambda { |duration, start, stop|
22
22
  { :conditions => ["datediff(#{quoted_table_name}.#{start}, #{quoted_table_name}.#{stop}) < ?", duration] }
23
23
  }
24
24
  end
@@ -12,7 +12,7 @@ module Pacecar
12
12
  protected
13
13
 
14
14
  def define_limit_scopes
15
- named_scope :limited, lambda { |*args|
15
+ scope :limited, lambda { |*args|
16
16
  { :limit => args.flatten.first || (defined?(per_page) ? per_page : Pacecar::Helpers.options[:default_limit]) }
17
17
  }
18
18
  end
@@ -13,7 +13,7 @@ module Pacecar
13
13
 
14
14
  def define_order_scopes
15
15
  safe_columns.collect(&:name).each do |name|
16
- named_scope "by_#{name}".to_sym, lambda { |*args|
16
+ scope "by_#{name}".to_sym, lambda { |*args|
17
17
  { :order => "#{quoted_table_name}.#{name} #{args.flatten.first || 'asc'}" }
18
18
  }
19
19
  end
@@ -7,7 +7,7 @@ module Pacecar
7
7
  module ClassMethods
8
8
 
9
9
  def has_polymorph(name)
10
- named_scope "for_#{name}_type".to_sym, lambda { |type|
10
+ scope "for_#{name}_type".to_sym, lambda { |type|
11
11
  { :conditions => ["#{quoted_table_name}.#{name}_type = ?", type.to_s] }
12
12
  }
13
13
  end
@@ -13,8 +13,8 @@ module Pacecar
13
13
 
14
14
  def define_presence_scopes
15
15
  column_names_without_type(:boolean).each do |name|
16
- named_scope "#{name}_present".to_sym, :conditions => "#{quoted_table_name}.#{name} is not null"
17
- named_scope "#{name}_missing".to_sym, :conditions => "#{quoted_table_name}.#{name} is null"
16
+ scope "#{name}_present".to_sym, :conditions => "#{quoted_table_name}.#{name} is not null"
17
+ scope "#{name}_missing".to_sym, :conditions => "#{quoted_table_name}.#{name} is null"
18
18
  end
19
19
  end
20
20
 
@@ -14,7 +14,7 @@ module Pacecar
14
14
  protected
15
15
 
16
16
  def define_ranking_scope(association, name, direction)
17
- named_scope "#{name}_#{association}",
17
+ scope "#{name}_#{association}",
18
18
  :joins => "inner join #{association} on #{association}.#{reflections[association].primary_key_name} = #{quoted_table_name}.#{primary_key}",
19
19
  :select => "#{quoted_table_name}.*, count(#{quoted_table_name}.#{primary_key}) as #{association}_count",
20
20
  :group => "#{association}.#{reflections[association].primary_key_name}",
@@ -14,25 +14,25 @@ module Pacecar
14
14
 
15
15
  def define_search_scopes
16
16
  safe_column_names.each do |name|
17
- named_scope "#{name}_equals".to_sym, lambda { |query|
17
+ scope "#{name}_equals".to_sym, lambda { |query|
18
18
  { :conditions => ["#{quoted_table_name}.#{name} = :query", { :query => query }] }
19
19
  }
20
20
  end
21
21
  text_and_string_column_names.each do |name|
22
- named_scope "#{name}_matches".to_sym, lambda { |query|
22
+ scope "#{name}_matches".to_sym, lambda { |query|
23
23
  { :conditions => ["#{quoted_table_name}.#{name} like :query", { :query => "%#{query}%" }] }
24
24
  }
25
- named_scope "#{name}_starts_with".to_sym, lambda { |query|
25
+ scope "#{name}_starts_with".to_sym, lambda { |query|
26
26
  { :conditions => ["#{quoted_table_name}.#{name} like :query", { :query => "#{query}%" }] }
27
27
  }
28
- named_scope "#{name}_ends_with".to_sym, lambda { |query|
28
+ scope "#{name}_ends_with".to_sym, lambda { |query|
29
29
  { :conditions => ["#{quoted_table_name}.#{name} like :query", { :query => "%#{query}" }] }
30
30
  }
31
31
  end
32
32
  end
33
33
 
34
34
  def define_basic_search_scope
35
- named_scope :search_for, lambda { |*args|
35
+ scope :search_for, lambda { |*args|
36
36
  opts = args.extract_options!
37
37
  query = args.flatten.first
38
38
  columns = opts[:on] || non_state_text_and_string_columns
@@ -11,8 +11,8 @@ module Pacecar
11
11
  names.each do |name|
12
12
  constant = opts[:with] || const_get(name.to_s.pluralize.upcase)
13
13
  constant.each do |state|
14
- named_scope "#{name}_#{state.downcase}".to_sym, :conditions => ["#{quoted_table_name}.#{name} = ?", state]
15
- named_scope "#{name}_not_#{state.downcase}".to_sym, :conditions => ["#{quoted_table_name}.#{name} <> ?", state]
14
+ scope "#{name}_#{state.downcase}".to_sym, :conditions => ["#{quoted_table_name}.#{name} = ?", state]
15
+ scope "#{name}_not_#{state.downcase}".to_sym, :conditions => ["#{quoted_table_name}.#{name} <> ?", state]
16
16
  self.class_eval %Q{
17
17
  def #{name}_#{state.downcase}?
18
18
  #{name} == '#{state}'
@@ -22,10 +22,10 @@ module Pacecar
22
22
  end
23
23
  }
24
24
  end
25
- named_scope "#{name}".to_sym, lambda { |state|
25
+ scope "#{name}".to_sym, lambda { |state|
26
26
  { :conditions => ["#{quoted_table_name}.#{name} = ?", state] }
27
27
  }
28
- named_scope "#{name}_not".to_sym, lambda { |state|
28
+ scope "#{name}_not".to_sym, lambda { |state|
29
29
  { :conditions => ["#{quoted_table_name}.#{name} <> ?", state] }
30
30
  }
31
31
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pacecar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 3
9
+ - 0
10
+ version: 1.3.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Matt Jankowski
@@ -9,7 +15,7 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-12-30 00:00:00 -05:00
18
+ date: 2010-06-11 00:00:00 -04:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
@@ -48,23 +54,29 @@ rdoc_options: []
48
54
  require_paths:
49
55
  - lib
50
56
  required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ">="
53
60
  - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
54
64
  version: "0"
55
- version:
56
65
  required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
57
67
  requirements:
58
68
  - - ">="
59
69
  - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
60
73
  version: "0"
61
- version:
62
74
  requirements: []
63
75
 
64
76
  rubyforge_project:
65
- rubygems_version: 1.3.5
77
+ rubygems_version: 1.3.7
66
78
  signing_key:
67
79
  specification_version: 3
68
- summary: Pacecar adds named_scope methods to ActiveRecord classes via database column introspection.
80
+ summary: Pacecar adds scope methods to ActiveRecord classes via database column introspection.
69
81
  test_files: []
70
82