pacecar 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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