pacecar 1.5.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.travis.yml +9 -1
  4. data/Appraisals +9 -17
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +93 -108
  7. data/MIT-LICENSE +1 -1
  8. data/README.md +10 -109
  9. data/Rakefile +9 -5
  10. data/TESTING.md +40 -0
  11. data/gemfiles/rails_4_mysql2_driver.gemfile +8 -0
  12. data/gemfiles/rails_4_pg_driver.gemfile +8 -0
  13. data/gemfiles/rails_4_sqlite3_driver.gemfile +8 -0
  14. data/lib/pacecar.rb +0 -10
  15. data/lib/pacecar/boolean.rb +8 -20
  16. data/lib/pacecar/helpers.rb +7 -16
  17. data/lib/pacecar/limit.rb +9 -9
  18. data/lib/pacecar/order.rb +9 -9
  19. data/lib/pacecar/polymorph.rb +5 -5
  20. data/lib/pacecar/presence.rb +8 -9
  21. data/lib/pacecar/search.rb +8 -32
  22. data/lib/pacecar/state.rb +13 -9
  23. data/lib/pacecar/version.rb +1 -1
  24. data/pacecar.gemspec +18 -16
  25. data/spec/boolean_spec.rb +6 -18
  26. data/spec/dummy/app/models/mammal.rb +1 -1
  27. data/spec/dummy/app/models/post.rb +2 -2
  28. data/spec/dummy/app/models/user.rb +1 -6
  29. data/spec/dummy/bin/bundle +3 -0
  30. data/spec/dummy/bin/rails +4 -0
  31. data/spec/dummy/bin/rake +4 -0
  32. data/spec/dummy/config/application.rb +4 -26
  33. data/spec/dummy/config/boot.rb +3 -9
  34. data/spec/dummy/config/database.yml +1 -7
  35. data/spec/dummy/config/environment.rb +2 -2
  36. data/spec/dummy/config/environments/development.rb +15 -12
  37. data/spec/dummy/config/environments/production.rb +57 -26
  38. data/spec/dummy/config/environments/test.rb +16 -15
  39. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  40. data/spec/dummy/config/initializers/inflections.rb +9 -3
  41. data/spec/dummy/config/initializers/secret_token.rb +7 -2
  42. data/spec/dummy/config/initializers/session_store.rb +1 -6
  43. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  44. data/spec/dummy/config/locales/en.yml +20 -2
  45. data/spec/dummy/config/routes.rb +22 -24
  46. data/spec/factories.rb +2 -2
  47. data/spec/helpers_spec.rb +18 -26
  48. data/spec/integration/navigation_spec.rb +4 -5
  49. data/spec/limit_spec.rb +11 -11
  50. data/spec/order_spec.rb +8 -8
  51. data/spec/pacecar_spec.rb +3 -3
  52. data/spec/polymorph_spec.rb +6 -6
  53. data/spec/presence_spec.rb +9 -9
  54. data/spec/search_spec.rb +14 -48
  55. data/spec/spec_helper.rb +11 -17
  56. data/spec/state_spec.rb +29 -29
  57. metadata +76 -70
  58. data/gemfiles/rails-3.0.11-database-mysql.gemfile +0 -8
  59. data/gemfiles/rails-3.0.11-database-mysql.gemfile.lock +0 -134
  60. data/gemfiles/rails-3.0.11-database-mysql2.gemfile +0 -8
  61. data/gemfiles/rails-3.0.11-database-mysql2.gemfile.lock +0 -134
  62. data/gemfiles/rails-3.0.11-database-pg.gemfile +0 -8
  63. data/gemfiles/rails-3.0.11-database-pg.gemfile.lock +0 -134
  64. data/gemfiles/rails-3.0.11-database-sqlite3-ruby.gemfile +0 -8
  65. data/gemfiles/rails-3.0.11-database-sqlite3-ruby.gemfile.lock +0 -136
  66. data/gemfiles/rails-3.0.11-database-sqlite3.gemfile +0 -8
  67. data/gemfiles/rails-3.0.11-database-sqlite3.gemfile.lock +0 -134
  68. data/gemfiles/rails-3.1.3-database-mysql.gemfile +0 -8
  69. data/gemfiles/rails-3.1.3-database-mysql.gemfile.lock +0 -144
  70. data/gemfiles/rails-3.1.3-database-mysql2.gemfile +0 -8
  71. data/gemfiles/rails-3.1.3-database-mysql2.gemfile.lock +0 -144
  72. data/gemfiles/rails-3.1.3-database-pg.gemfile +0 -8
  73. data/gemfiles/rails-3.1.3-database-pg.gemfile.lock +0 -144
  74. data/gemfiles/rails-3.1.3-database-sqlite3-ruby.gemfile +0 -8
  75. data/gemfiles/rails-3.1.3-database-sqlite3-ruby.gemfile.lock +0 -146
  76. data/gemfiles/rails-3.1.3-database-sqlite3.gemfile +0 -8
  77. data/gemfiles/rails-3.1.3-database-sqlite3.gemfile.lock +0 -144
  78. data/lib/pacecar/associations.rb +0 -39
  79. data/lib/pacecar/datetime.rb +0 -91
  80. data/lib/pacecar/duration.rb +0 -51
  81. data/lib/pacecar/numeric.rb +0 -29
  82. data/lib/pacecar/ranking.rb +0 -53
  83. data/spec/associations_spec.rb +0 -32
  84. data/spec/datetime_spec.rb +0 -92
  85. data/spec/duration_spec.rb +0 -22
  86. data/spec/numeric_spec.rb +0 -43
  87. data/spec/ranking_spec.rb +0 -63
@@ -1,29 +0,0 @@
1
- module Pacecar
2
- module Numeric
3
- def self.included(base)
4
- base.extend ClassMethods
5
- end
6
-
7
- module ClassMethods
8
- def self.extended(base)
9
- base.send :define_numeric_scopes
10
- end
11
-
12
- protected
13
-
14
- def define_numeric_scopes
15
- numeric_column_names.each do |name|
16
- { :greater_than => '>', :less_than => '<' }.each do |method_name, symbol|
17
- scope "#{name}_#{method_name}".to_sym, lambda { |value|
18
- { :conditions => ["#{quoted_table_name}.#{connection.quote_column_name name} #{symbol} ?", value] }
19
- }
20
- scope "#{name}_#{method_name}_or_equal_to".to_sym, lambda { |value|
21
- { :conditions => ["#{quoted_table_name}.#{connection.quote_column_name name} #{symbol}= ?", value] }
22
- }
23
- end
24
- end
25
- end
26
-
27
- end
28
- end
29
- end
@@ -1,53 +0,0 @@
1
- module Pacecar
2
- module Ranking
3
- def self.included(base)
4
- base.extend ClassMethods
5
- end
6
-
7
- module ClassMethods
8
-
9
- def has_ranking(association)
10
- define_ranking_scope association, :maximum, :desc
11
- define_ranking_scope association, :minimum, :asc
12
- end
13
-
14
- def has_calculated_records(*names)
15
- opts = names.extract_options!
16
- names.each do |association_name|
17
- *columns = opts[:on] || []
18
- columns.flatten.each do |column|
19
- define_calculated_scope association_name, column, :average, :avg
20
- define_calculated_scope association_name, column, :total, :sum
21
- define_calculated_scope association_name, column, :count, :count
22
- end
23
- end
24
- end
25
-
26
- protected
27
-
28
- def define_ranking_scope(association, direction_name, direction)
29
- scope "#{direction_name}_#{association}", {
30
- :select => "#{quoted_table_name}.*, count(#{reflections[association].quoted_table_name}.#{connection.quote_column_name(reflections[association].respond_to?(:foreign_key) ? reflections[association].foreign_key : reflections[association].primary_key_name)}) as #{association}_count",
31
- :order => "#{association}_count #{direction}"
32
- }.merge(association_group_and_join(association))
33
- end
34
-
35
- def define_calculated_scope(association_name, column, function_name, function_method)
36
- { 'highest' => 'desc', 'lowest' => 'asc' }.each do |direction_name, direction|
37
- scope "by_#{association_name}_#{direction_name}_#{column}_#{function_name}".to_sym, {
38
- :select => "#{quoted_table_name}.*, #{function_method}(#{connection.quote_table_name(association_name)}.#{connection.quote_column_name column}) as #{association_name}_#{column}_#{function_name}",
39
- :order => "#{association_name}_#{column}_#{function_name} #{direction}"
40
- }.merge(association_group_and_join(association_name))
41
- end
42
- end
43
-
44
- def association_group_and_join(association_name)
45
- {
46
- :joins => "inner join #{connection.quote_table_name(association_name)} on #{connection.quote_table_name(association_name)}.#{connection.quote_column_name(reflections[association_name].respond_to?(:foreign_key) ? reflections[association_name].foreign_key : reflections[association_name].primary_key_name)} = #{quoted_table_name}.#{connection.quote_column_name primary_key}",
47
- :group => safe_column_names.collect { |column_name| "#{quoted_table_name}.#{connection.quote_column_name(column_name)}" }.join(', ')
48
- }
49
- end
50
-
51
- end
52
- end
53
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Associations', 'has recent records' do
4
-
5
- before do
6
- @comment_user = Factory :user
7
- @post_user = Factory :user
8
- @both_user = Factory :user
9
- Factory :comment, :user => @comment_user, :created_at => 10.days.ago
10
- Factory :comment, :user => @comment_user, :created_at => 3.days.ago
11
- Factory :post, :owner => @post_user, :created_at => 10.days.ago
12
- Factory :post, :owner => @post_user, :created_at => 3.days.ago
13
-
14
- Factory :comment, :user => @both_user, :created_at => 10.days.ago
15
- Factory :comment, :user => @both_user, :created_at => 3.days.ago
16
- Factory :post, :owner => @both_user, :created_at => 10.days.ago
17
- Factory :post, :owner => @both_user, :created_at => 3.days.ago
18
- end
19
-
20
- it "should set the correct options for a recent methods for one association" do
21
- User.recent_comments_since(5.days.ago).should == [@comment_user, @both_user]
22
- end
23
-
24
- it "should set the correct options for a recent methods combining associations with or" do
25
- User.recent_posts_or_comments_since(5.days.ago).should == [@comment_user, @post_user, @both_user]
26
- end
27
-
28
- it "should set the correct options for a recent methods combining associations with and" do
29
- User.recent_posts_and_comments_since(5.days.ago).should == [@both_user]
30
- end
31
-
32
- end
@@ -1,92 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Datetime' do
4
-
5
- before do
6
- date = DateTime.parse '2000-01-01'
7
- @abe = Factory :user, :created_at => date, :rejected_at => date, :updated_at => date, :last_posted_on => date, :approved_at => date
8
-
9
- date = DateTime.parse '2005-05-05'
10
- @bob = Factory :user, :created_at => date, :rejected_at => date, :updated_at => date, :last_posted_on => date, :approved_at => date
11
-
12
- date = DateTime.parse '2010-10-10'
13
- @fox = Factory :user, :created_at => date, :rejected_at => date, :updated_at => date, :last_posted_on => date, :approved_at => date
14
- end
15
-
16
- [:created_at, :rejected_at, :updated_at, :last_posted_on, :approved_at].each do |column|
17
- describe "before and after methods" do
18
- it "should set the correct expected values for a #{column}_before method" do
19
- date = DateTime.parse '2003-01-01'
20
- User.send(:"#{column}_before", date).should == [@abe]
21
- end
22
-
23
- it "should set the correct expected values for a #{column}_after datetime column method" do
24
- date = DateTime.parse '2007-01-01'
25
- User.send(:"#{column}_after", date).should == [@fox]
26
- end
27
- end
28
-
29
- describe "past and future methods" do
30
- it "should set the correct expected values for a #{column}_in_past method without a zone default" do
31
- Time.zone_default = nil
32
- Time.zone_default.should == nil
33
- now = DateTime.parse '2007-01-01'
34
- User.stubs(:now).returns now
35
- User.send(:"#{column}_in_past").should == [@abe, @bob]
36
- end
37
-
38
- it "should set the correct expected values for a #{column}_in_future datetime column method without a zone default" do
39
- Time.zone_default = nil
40
- Time.zone_default.should == nil
41
- now = DateTime.parse '2007-01-01'
42
- User.stubs(:now).returns now
43
- User.send(:"#{column}_in_future").should == [@fox]
44
- end
45
-
46
- it "should set the correct expected values for a #{column}_in_past method given a zone_default" do
47
- Time.zone_default = Time.respond_to?(:find_zone) ? Time.find_zone("UTC") : Time.__send__(:get_zone, "UTC")
48
- now = DateTime.parse '2007-01-01'
49
- Time.zone_default.stubs(:now).returns now
50
- User.send(:"#{column}_in_past").should == [@abe, @bob]
51
- Time.zone_default = nil
52
- end
53
-
54
- it "should set the correct expected values for a #{column}_in_future datetime column method given a zone_default" do
55
- Time.zone_default = Time.respond_to?(:find_zone) ? Time.find_zone("UTC") : Time.__send__(:get_zone, "UTC")
56
- now = DateTime.parse '2007-01-01'
57
- Time.zone_default.stubs(:now).returns now
58
- User.send(:"#{column}_in_future").should == [@fox]
59
- Time.zone_default = nil
60
- end
61
- end
62
-
63
- describe "inside and outside methods" do
64
- it "should set the correct expected values for a #{column}_inside method" do
65
- start = DateTime.parse '2003-01-01'
66
- stop = DateTime.parse '2007-01-01'
67
- User.send(:"#{column}_inside", start, stop).should == [@bob]
68
- end
69
-
70
- it "should set the correct expected values for a #{column}_outside method" do
71
- start = DateTime.parse '2003-01-01'
72
- stop = DateTime.parse '2007-01-01'
73
- User.send(:"#{column}_outside", start, stop).should == [@abe, @fox]
74
- end
75
- end
76
-
77
- describe "year month and day methods" do
78
- it "should set the correct expected values for a #{column}_in_year method" do
79
- User.send(:"#{column}_in_year", '2000').should == [@abe]
80
- end
81
-
82
- it "should set the correct expected values for a #{column}_in_month method" do
83
- User.send(:"#{column}_in_month", '05').should == [@bob]
84
- end
85
-
86
- it "should set the correct expected values for a #{column}_in_day method" do
87
- User.send(:"#{column}_in_day", '10').should == [@fox]
88
- end
89
- end
90
- end
91
-
92
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Duration' do
4
-
5
- before do
6
- @same_user = Factory :user, :created_at => 15.days.ago.midnight, :updated_at => 15.days.ago.midnight
7
- @updated_user = Factory :user, :created_at => 15.days.ago.midnight, :updated_at => 1.days.ago.midnight
8
- end
9
-
10
- it "should set the correct expected values for a with_duration_of datetime column method" do
11
- User.with_duration_of(14, :created_at, :updated_at).should == [@updated_user]
12
- end
13
-
14
- it "should set the correct expected values for a with_duration_over datetime column method" do
15
- User.with_duration_over(10, :created_at, :updated_at).should == [@updated_user]
16
- end
17
-
18
- it "should set the correct expected values for a with_duration_under datetime column method" do
19
- User.with_duration_under(10, :created_at, :updated_at).should == [@same_user]
20
- end
21
-
22
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Numeric' do
4
-
5
- before do
6
- @young = Factory :user, :age => 11, :rating => 10.0
7
- @legal = Factory :user, :age => 21, :rating => 7.5
8
- @older = Factory :user, :age => 31, :rating => 5.0
9
- end
10
-
11
- it "should set the correct expected values for a _greater_than column method for an integer column" do
12
- User.age_greater_than(21).should == [@older]
13
- end
14
-
15
- it "should set the correct expected values for a _greater_than_or_equal_to column method for an integer column" do
16
- User.age_greater_than_or_equal_to(21).should == [@legal, @older]
17
- end
18
-
19
- it "should set the correct expected values for a _less_than column method for an integer column" do
20
- User.age_less_than(21).should == [@young]
21
- end
22
-
23
- it "should set the correct expected values for a _less_than_or_equal_to column method for an integer column" do
24
- User.age_less_than_or_equal_to(21).should == [@young, @legal]
25
- end
26
-
27
- it "should set the correct expected values for a _greater_than column method for a float column" do
28
- User.rating_greater_than(7.5).should == [@young]
29
- end
30
-
31
- it "should set the correct expected values for a _greater_than_or_equal_to column method for a float column" do
32
- User.rating_greater_than_or_equal_to(7.5).should == [@young, @legal]
33
- end
34
-
35
- it "should set the correct expected values for a _less_than column method for a float column" do
36
- User.rating_less_than(7.5).should == [@older]
37
- end
38
-
39
- it "should set the correct expected values for a _less_than_or_equal_to column method for a float column" do
40
- User.rating_less_than_or_equal_to(7.5).should == [@legal, @older]
41
- end
42
-
43
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Ranking', 'has ranking' do
4
-
5
- before do
6
- @many = Factory :user
7
- 5.times { Factory :comment, :user => @many }
8
- @few = Factory :user
9
- 2.times { Factory :comment, :user => @few }
10
- @none = Factory :user
11
- end
12
-
13
- it "should set the correct expected values on a maximum_ column method" do
14
- output = User.maximum_comments
15
- output.should == [@many, @few]
16
- output.first.comments_count.to_i.should == 5
17
- output.last.comments_count.to_i.should == 2
18
- end
19
-
20
- it "should set the correct expected values on a minimum_ column method" do
21
- output = User.minimum_comments
22
- output.should == [@few, @many]
23
- output.first.comments_count.to_i.should == 2
24
- output.last.comments_count.to_i.should == 5
25
- end
26
-
27
- end
28
-
29
- describe 'Ranking', 'has calculated records' do
30
- before do
31
- @user_one = Factory :user
32
- @user_two = Factory :user
33
- Factory :comment, :user => @user_one, :rating => 8
34
- Factory :comment, :user => @user_one, :rating => 6
35
- Factory :comment, :user => @user_two, :rating => 4
36
- Factory :comment, :user => @user_two, :rating => 3
37
- Factory :comment, :user => @user_two, :rating => 2
38
- end
39
- it "should order records based on association column highest average" do
40
- output = User.by_comments_highest_rating_average
41
- output.should == [@user_one, @user_two]
42
- output.first.comments_rating_average.to_i.should == 7
43
- output.last.comments_rating_average.to_i.should == 3
44
- end
45
- it "should order records based on association column lowest average" do
46
- output = User.by_comments_lowest_rating_average
47
- output.should == [@user_two, @user_one]
48
- output.first.comments_rating_average.to_i.should == 3
49
- output.last.comments_rating_average.to_i.should == 7
50
- end
51
- it "should order records based on association column highest total" do
52
- output = User.by_comments_highest_rating_total
53
- output.should == [@user_one, @user_two]
54
- output.first.comments_rating_total.to_i.should == 14
55
- output.last.comments_rating_total.to_i.should == 9
56
- end
57
- it "should order records based on association column lowest total" do
58
- output = User.by_comments_lowest_rating_total
59
- output.should == [@user_two, @user_one]
60
- output.first.comments_rating_total.to_i.should == 9
61
- output.last.comments_rating_total.to_i.should == 14
62
- end
63
- end