ransack 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/lib/ransack.rb +1 -1
  2. data/lib/ransack/adapters/active_record.rb +18 -2
  3. data/lib/ransack/adapters/active_record/3.0/base.rb +34 -0
  4. data/lib/ransack/adapters/active_record/3.0/compat.rb +23 -0
  5. data/lib/ransack/adapters/active_record/3.0/context.rb +168 -0
  6. data/lib/ransack/adapters/active_record/3.0/join_association.rb +44 -0
  7. data/lib/ransack/adapters/active_record/3.0/join_dependency.rb +63 -0
  8. data/lib/ransack/adapters/active_record/base.rb +19 -2
  9. data/lib/ransack/adapters/active_record/context.rb +45 -33
  10. data/lib/ransack/adapters/active_record/join_association.rb +44 -0
  11. data/lib/ransack/adapters/active_record/join_dependency.rb +63 -0
  12. data/lib/ransack/context.rb +25 -65
  13. data/lib/ransack/helpers/form_builder.rb +10 -4
  14. data/lib/ransack/helpers/form_helper.rb +1 -0
  15. data/lib/ransack/locale/en.yml +1 -0
  16. data/lib/ransack/nodes.rb +1 -0
  17. data/lib/ransack/nodes/attribute.rb +21 -4
  18. data/lib/ransack/nodes/bindable.rb +29 -0
  19. data/lib/ransack/nodes/condition.rb +30 -28
  20. data/lib/ransack/nodes/sort.rb +5 -3
  21. data/lib/ransack/nodes/value.rb +84 -100
  22. data/lib/ransack/predicate.rb +1 -11
  23. data/lib/ransack/ransacker.rb +26 -0
  24. data/lib/ransack/search.rb +3 -2
  25. data/lib/ransack/version.rb +1 -1
  26. data/lib/ransack/visitor.rb +64 -0
  27. data/ransack.gemspec +3 -3
  28. data/spec/console.rb +1 -2
  29. data/spec/ransack/adapters/active_record/base_spec.rb +18 -0
  30. data/spec/ransack/adapters/active_record/context_spec.rb +2 -2
  31. data/spec/ransack/helpers/form_builder_spec.rb +4 -0
  32. data/spec/ransack/search_spec.rb +25 -2
  33. data/spec/spec_helper.rb +2 -3
  34. data/spec/support/schema.rb +8 -0
  35. metadata +16 -8
@@ -22,6 +22,15 @@ module Ransack
22
22
  condition.value.should eq 'Ernie'
23
23
  end
24
24
 
25
+ it 'creates Conditions for polymorphic belongs_to association attributes' do
26
+ search = Search.new(Note, :notable_of_Person_type_name_eq => 'Ernie')
27
+ condition = search.base[:notable_of_Person_type_name_eq]
28
+ condition.should be_a Nodes::Condition
29
+ condition.predicate.name.should eq 'eq'
30
+ condition.attributes.first.name.should eq 'notable_of_Person_type_name'
31
+ condition.value.should eq 'Ernie'
32
+ end
33
+
25
34
  it 'discards empty conditions' do
26
35
  search = Search.new(Person, :children_name_eq => '')
27
36
  condition = search.base[:children_name_eq]
@@ -84,6 +93,13 @@ module Ransack
84
93
  where.to_sql.should match /"children_people"\."name" = 'Ernie' OR "people"\."name" = 'Ernie'/
85
94
  end
86
95
 
96
+ it 'evaluates polymorphic belongs_to association conditions contextually' do
97
+ search = Search.new(Note, :notable_of_Person_type_name_eq => 'Ernie')
98
+ search.result.should be_an ActiveRecord::Relation
99
+ where = search.result.where_values.first
100
+ where.to_sql.should match /"people"."name" = 'Ernie'/
101
+ end
102
+
87
103
  it 'evaluates nested conditions' do
88
104
  search = Search.new(Person, :children_name_eq => 'Ernie',
89
105
  :o => [{
@@ -93,7 +109,7 @@ module Ransack
93
109
  )
94
110
  search.result.should be_an ActiveRecord::Relation
95
111
  where = search.result.where_values.first
96
- where.to_sql.should match /\("children_people"."name" = 'Ernie' AND \("people"."name" = 'Ernie' OR "children_people_2"."name" = 'Ernie'\)\)/
112
+ where.to_sql.should match /"children_people"."name" = 'Ernie' AND \("people"."name" = 'Ernie' OR "children_people_2"."name" = 'Ernie'\)/
97
113
  end
98
114
 
99
115
  it 'evaluates arrays of groupings' do
@@ -105,7 +121,14 @@ module Ransack
105
121
  )
106
122
  search.result.should be_an ActiveRecord::Relation
107
123
  where = search.result.where_values.first
108
- where.to_sql.should match /\(\("people"."name" = 'Ernie' OR "children_people"."name" = 'Ernie'\) AND \("people"."name" = 'Bert' OR "children_people"."name" = 'Bert'\)\)/
124
+ where.to_sql.should match /\("people"."name" = 'Ernie' OR "children_people"."name" = 'Ernie'\) AND \("people"."name" = 'Bert' OR "children_people"."name" = 'Bert'\)/
125
+ end
126
+
127
+ it 'returns distinct records when passed :distinct => true' do
128
+ search = Search.new(Person, :o => [{:comments_body_cont => 'e', :articles_comments_body_cont => 'e'}])
129
+ search.result.should have(920).items
130
+ search.result(:distinct => true).should have(330).items
131
+ search.result.all.uniq.should eq search.result(:distinct => true).all
109
132
  end
110
133
  end
111
134
 
@@ -1,6 +1,7 @@
1
1
  require 'machinist/active_record'
2
2
  require 'sham'
3
3
  require 'faker'
4
+ require 'ransack'
4
5
 
5
6
  Time.zone = 'Eastern Time (US & Canada)'
6
7
 
@@ -23,6 +24,4 @@ RSpec.configure do |config|
23
24
  config.before(:each) { Sham.reset(:before_each) }
24
25
 
25
26
  config.include RansackHelper
26
- end
27
-
28
- require 'ransack'
27
+ end
@@ -13,6 +13,14 @@ class Person < ActiveRecord::Base
13
13
  has_many :authored_article_comments, :through => :articles,
14
14
  :class_name => 'Comment', :foreign_key => :person_id
15
15
  has_many :notes, :as => :notable
16
+
17
+ ransacker :reversed_name, :formatter => proc {|v| v.reverse} do |parent|
18
+ parent.table[:name]
19
+ end
20
+
21
+ ransacker :doubled_name do |parent|
22
+ Arel::Nodes::InfixOperation.new('||', parent.table[:name], parent.table[:name])
23
+ end
16
24
  end
17
25
 
18
26
  class Article < ActiveRecord::Base
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ransack
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ernie Miller
@@ -10,8 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-30 00:00:00 -04:00
14
- default_executable:
13
+ date: 2011-04-18 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: activerecord
@@ -21,7 +20,7 @@ dependencies:
21
20
  requirements:
22
21
  - - ~>
23
22
  - !ruby/object:Gem::Version
24
- version: 3.1.0.alpha
23
+ version: "3.0"
25
24
  type: :runtime
26
25
  version_requirements: *id001
27
26
  - !ruby/object:Gem::Dependency
@@ -32,7 +31,7 @@ dependencies:
32
31
  requirements:
33
32
  - - ~>
34
33
  - !ruby/object:Gem::Version
35
- version: 3.1.0.alpha
34
+ version: "3.0"
36
35
  type: :runtime
37
36
  version_requirements: *id002
38
37
  - !ruby/object:Gem::Dependency
@@ -43,7 +42,7 @@ dependencies:
43
42
  requirements:
44
43
  - - ~>
45
44
  - !ruby/object:Gem::Version
46
- version: 3.1.0.alpha
45
+ version: "3.0"
47
46
  type: :runtime
48
47
  version_requirements: *id003
49
48
  - !ruby/object:Gem::Dependency
@@ -107,8 +106,15 @@ files:
107
106
  - Rakefile
108
107
  - lib/ransack.rb
109
108
  - lib/ransack/adapters/active_record.rb
109
+ - lib/ransack/adapters/active_record/3.0/base.rb
110
+ - lib/ransack/adapters/active_record/3.0/compat.rb
111
+ - lib/ransack/adapters/active_record/3.0/context.rb
112
+ - lib/ransack/adapters/active_record/3.0/join_association.rb
113
+ - lib/ransack/adapters/active_record/3.0/join_dependency.rb
110
114
  - lib/ransack/adapters/active_record/base.rb
111
115
  - lib/ransack/adapters/active_record/context.rb
116
+ - lib/ransack/adapters/active_record/join_association.rb
117
+ - lib/ransack/adapters/active_record/join_dependency.rb
112
118
  - lib/ransack/configuration.rb
113
119
  - lib/ransack/constants.rb
114
120
  - lib/ransack/context.rb
@@ -120,6 +126,7 @@ files:
120
126
  - lib/ransack/nodes.rb
121
127
  - lib/ransack/nodes/and.rb
122
128
  - lib/ransack/nodes/attribute.rb
129
+ - lib/ransack/nodes/bindable.rb
123
130
  - lib/ransack/nodes/condition.rb
124
131
  - lib/ransack/nodes/grouping.rb
125
132
  - lib/ransack/nodes/node.rb
@@ -127,9 +134,11 @@ files:
127
134
  - lib/ransack/nodes/sort.rb
128
135
  - lib/ransack/nodes/value.rb
129
136
  - lib/ransack/predicate.rb
137
+ - lib/ransack/ransacker.rb
130
138
  - lib/ransack/search.rb
131
139
  - lib/ransack/translate.rb
132
140
  - lib/ransack/version.rb
141
+ - lib/ransack/visitor.rb
133
142
  - ransack.gemspec
134
143
  - spec/blueprints/articles.rb
135
144
  - spec/blueprints/comments.rb
@@ -150,7 +159,6 @@ files:
150
159
  - spec/ransack/search_spec.rb
151
160
  - spec/spec_helper.rb
152
161
  - spec/support/schema.rb
153
- has_rdoc: true
154
162
  homepage: http://metautonomo.us/projects/ransack
155
163
  licenses: []
156
164
 
@@ -174,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
182
  requirements: []
175
183
 
176
184
  rubyforge_project: ransack
177
- rubygems_version: 1.5.3
185
+ rubygems_version: 1.7.2
178
186
  signing_key:
179
187
  specification_version: 3
180
188
  summary: Object-based searching. Like MetaSearch, but this time, with a better name.