searchgasm 0.9.9 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,10 +1,12 @@
1
+ v0.9.10. Hardened more tests, fixed bug with setting the per_page configuration to only take effect on protected searches, thus staying out of the way of normal searching.
2
+
1
3
  v0.9.9. Fixed setting per_page to nil, false, or ''. This is done to "show all" results.
2
4
 
3
5
  v0.9.8. Fixed order_by helper bug when determing the text with arrays. Should use the first value instead of last. Added in per_page config option.
4
6
 
5
7
  v0.9.7. Complete class restructure, much more organized, added in documentation, added in helpers for using searchgasm in a rails app, updated readme with link to documentation as well as a live example, some bug fixes, more tests
6
8
 
7
- v0.9.6. Fix bug when instantiating with nil options
9
+ v0.9.6. Fixed bug when instantiating with nil options
8
10
 
9
11
  v0.9.5. Enhanced searching with conditions only. Updated read me to include example on adding your own conditions.
10
12
 
data/Manifest CHANGED
@@ -44,10 +44,14 @@ test/libs/acts_as_tree.rb
44
44
  test/libs/rexml_fix.rb
45
45
  test/test_active_record_associations.rb
46
46
  test/test_active_record_base.rb
47
- test/test_condition.rb
47
+ test/test_condition_base.rb
48
+ test/test_condition_types.rb
48
49
  test/test_conditions_base.rb
50
+ test/test_conditions_protection.rb
49
51
  test/test_helper.rb
50
52
  test/test_search_base.rb
53
+ test/test_search_conditions.rb
51
54
  test/test_search_ordering.rb
52
55
  test/test_search_pagination.rb
53
56
  test/test_search_protection.rb
57
+ test/text_config.rb
data/README.rdoc CHANGED
@@ -4,11 +4,7 @@ Searchgasm is orgasmic. Maybe not orgasmic, but you will get aroused. So go grab
4
4
 
5
5
  <b>Searchgasm's inspiration comes right from ActiveRecord. ActiveRecord lets you create objects that represent a record in the database, so why can't you create objects that represent searching the database? Now you can! It's searching, ordering, and pagination all in one.</b>
6
6
 
7
- == Under the hood
8
-
9
- I'm a big fan of understanding what I'm using, so here's a quick explanation: The design behind this plugin is pretty simple. The search object "sanitizes" down into the options passed into ActiveRecord::Base.find(). It serves as a transparent filter between you and ActiveRecord::Base.find(). This filter provides "enhancements" that get translated into options that ActiveRecord::Base.find() can understand. It doesn't dig into the ActiveRecord internals, it only uses what is publicly available. It jumps in and helps out <em>only</em> when needed, otherwise it sits back and lets ActiveRecord do all of the work. Between that and the extensive tests, this is a solid and fast plugin.
10
-
11
- == Quicklinks
7
+ == Helpful links
12
8
 
13
9
  * <b>Documentation:</b> http://searchgasm.rubyforge.org
14
10
  * <b>Easy pagination, ordering, and searching tutorial:</b> http://www.binarylogic.com/2008/9/7/tutorial-pagination-ordering-and-searching-with-searchgasm
@@ -31,7 +27,33 @@ Now try out some of the examples below:
31
27
 
32
28
  <b>For all examples, let's assume the following relationships: User => Orders => Line Items</b>
33
29
 
34
- == The beauty of searchgasm
30
+ == Simple Searching Example
31
+
32
+ User.all(
33
+ :conditions => {
34
+ :first_name_contains => "Ben", # first_name like '%Ben%'
35
+ :email_ends_with => "binarylogic.com" # email like '%binarylogic.com'
36
+ },
37
+ :per_page => 20, # limit 20
38
+ :page => 3, # offset 40, which starts us on page 3
39
+ :order_as => "ASC",
40
+ :order_by => {:user_group => :name} # order user_groups.name ASC
41
+ )
42
+
43
+ same as above, but object based
44
+
45
+ search = User.new_search
46
+ search.conditions.first_name_contains = "Ben"
47
+ search.conditions.email_ends_with = "binarylogic.com"
48
+ search.per_page = 20
49
+ search.page = 3
50
+ search.order_as = "ASC"
51
+ search.order_by = {:user_group => :name}
52
+ search.all
53
+
54
+ In both examples, instead of using the "all" method you could use any search method: first, find(:all), find(:first), count, sum, average, etc, just like ActiveRecord.
55
+
56
+ == The beauty of searchgasm, integration into rails
35
57
 
36
58
  Using Searchgasm in rails is the best part, because rails has all kinds of nifty methods to make dealing with ActiveRecord objects quick and easy, especially with forms. So let's take advantage of them! That's the idea behind this plugin. Searchgasm is searching, ordering, and pagination all rolled into one simple plugin. Take all of that pagination and searching cruft out of your models and let Searchgasm handle it. Check it out:
37
59
 
@@ -76,28 +98,11 @@ Your view:
76
98
  Page:
77
99
  = pages
78
100
 
79
- <b>See this example live: http://searchgasm_example.binarylogic.com</b>
80
-
81
- You're probably saying, this is great, but I want to do all of this via AJAX. No problem. Check out the {live tutorial}(http://searchgasm_example.binarylogic.com/orders) based on this example, there is a link for an {AJAX example}(http://searchgasm_example.binarylogic.com/orders).
82
-
83
- This is really just the tip of the iceberg. See below for more examples or {check out the documentation}[http://searchgasm.rubyforge.org] for options and explanations.
84
-
85
- == Simple Searching Example
86
-
87
- User.all(
88
- :conditions => {
89
- :first_name_contains => "Ben", # first_name like '%Ben%'
90
- :email_ends_with => "binarylogic.com" # email like '%binarylogic.com'
91
- },
92
- :per_page => 20 # limit 20
93
- :page => 3 # offset 40, which starts us on page 3
94
- )
95
-
96
- Instead of using the "all" method you could use any search method: first, find(:all), find(:first), count, sum, average, etc, just like ActiveRecord
101
+ <b>{See my tutorial on this example}(http://www.binarylogic.com/2008/9/7/tutorial-pagination-ordering-and-searching-with-searchgasm)</b>
97
102
 
98
103
  == Exhaustive Example w/ Object Based Searching (great for form_for or fields_for)
99
104
 
100
- # Instantiate
105
+ # Start a new search
101
106
  @search = User.new_search(
102
107
  :conditions => {
103
108
  :first_name_contains => "Ben",
@@ -158,9 +163,9 @@ Any of the options used in the above example can be used in these, but for the s
158
163
 
159
164
  User.first(:conditions => {:age_gt => 18}, :per_page => 20)
160
165
 
161
- User.find(:all, :conditions => {::age_gt => 18}, :per_page => 20)
166
+ User.find(:all, :conditions => {:age_gt => 18}, :per_page => 20)
162
167
 
163
- User.find(:first, :conditions => {::age_gt => 18}, :per_page => 20)
168
+ User.find(:first, :conditions => {:age_gt => 18}, :per_page => 20)
164
169
 
165
170
  search = User.new_search(:conditions => {:age_gt => 18}) # build_search is an alias
166
171
  search.conditions.first_name_contains = "Ben"
@@ -176,6 +181,8 @@ If you want to use Searchgasm directly:
176
181
 
177
182
  == Search with conditions only
178
183
 
184
+ Don't need pagination, ordering, or any of the other options? Search with conditions only.
185
+
179
186
  conditions = User.new_conditions(:age_gt => 18)
180
187
  conditions.first_name_contains = "Ben"
181
188
  conditions.all
@@ -191,8 +198,6 @@ Again, if you want to use Searchgasm directly:
191
198
  conditions.first_name_contains = "Ben"
192
199
  conditions.all
193
200
 
194
- Now pass the conditions object right into form\_for or fields\_for (see above for example).
195
-
196
201
  == Scoped searching
197
202
 
198
203
  @current_user.orders.find(:all, :conditions => {:total_lte => 500})
@@ -268,16 +273,16 @@ Depending on the type, each column comes preloaded with a bunch of nifty conditi
268
273
 
269
274
  Some of these conditions come with aliases, so you have your choice how to call the conditions. For example you can use "greater\_than" or "gt":
270
275
 
271
- :equals => :is
272
- :does_not_equal => :is_not, :not
273
- :begins_with => :starts_with, :bw, :start
274
- :contains => :like, :has
275
- :ends_with => :ew, :ends, :end
276
- :greater_than => :gt, :after
276
+ :equals => :is
277
+ :does_not_equal => :is_not, :not
278
+ :begins_with => :starts_with, :sw, :bw, :start
279
+ :contains => :like, :has
280
+ :ends_with => :ew, :ends, :end
281
+ :greater_than => :gt, :after
277
282
  :greater_than_or_equal_to => :at_least, :gte
278
- :keywords => :kwords, :kw
279
- :less_than => :lt, :before
280
- :less_than_or_equal_to => :at_most, :lte
283
+ :keywords => :kwords, :kw
284
+ :less_than => :lt, :before
285
+ :less_than_or_equal_to => :at_most, :lte
281
286
 
282
287
  For more information on each condition see Searchgasm::Condition. Each condition has it's own class and the source is pretty simple and self explanatory.
283
288
 
@@ -326,6 +331,10 @@ Now test it out:
326
331
 
327
332
  Pretty nifty, huh? You can create any condition ultimately creating any SQL you want. The sky is the limit. For more information see Searchgasm::Condition::Base
328
333
 
334
+ == Under the hood
335
+
336
+ I'm a big fan of understanding what I'm using, so here's a quick explanation: The design behind this plugin is pretty simple. The search object "sanitizes" down into the options passed into ActiveRecord::Base.find(). It serves as a transparent filter between you and ActiveRecord::Base.find(). This filter provides "enhancements" that get translated into options that ActiveRecord::Base.find() can understand. It doesn't dig into the ActiveRecord internals, it only uses what is publicly available. It jumps in and helps out <em>only</em> when needed, otherwise it sits back and lets ActiveRecord do all of the work. Between that and the extensive tests, this is a solid and fast plugin.
337
+
329
338
  == Reporting problems / bugs
330
339
 
331
340
  http://binarylogic.lighthouseapp.com/projects/16601-searchgasm
@@ -43,6 +43,19 @@ module Searchgasm
43
43
  @desc_indicator = value
44
44
  end
45
45
 
46
+ def pages_text # :nodoc:
47
+ @set_pages_text ? @pages_text : "Page %p"
48
+ end
49
+
50
+ # The default value for the :text options in the pages helper.
51
+ #
52
+ # * <tt>Default:</tt> "Page %p"
53
+ # * <tt>Accepts:</tt> "Your string %p": where %p is replaced by the page number, or a block: Proc.new { |p| "Page #{p}" }
54
+ def pages_text=(value)
55
+ @set_pages_text = true
56
+ @pages_text
57
+ end
58
+
46
59
  def pages_type # :nodoc:
47
60
  @pages_type ||= :select
48
61
  end
@@ -59,7 +72,8 @@ module Searchgasm
59
72
  @per_page
60
73
  end
61
74
 
62
- # The default for per page.
75
+ # The default for per page. This is only applicaple for protected searches. Meaning you start the search with new_search or new_conditions.
76
+ # The reason for this not to disturb regular queries such as Whatever.find(:all). You would not expect that to be limited.
63
77
  #
64
78
  # * <tt>Default:</tt> nil, nil means "show all"
65
79
  # * <tt>Accepts:</tt> Any value in your per_page choices
@@ -73,6 +73,7 @@ module Searchgasm
73
73
  # === Options
74
74
  # * <tt>:type</tt> -- default: :select, pass :links as an alternative to have flickr like pagination
75
75
  # * <tt>:remote</tt> -- default: false, if true requests will be AJAX
76
+ # * <tt>:text</tt> -- default: "1", "2", etc, if you want to change the text to say "Page 1", "Page 2", etc. Set this to: "Page %p". I will replace %p with the page #. Or pass a block and I will pass you the page number: Proc.new { |p| "Page #{p}" }
76
77
  #
77
78
  # === Advanced Options
78
79
  # * <tt>:action</tt> -- this is automatically determined for you based on the type. For a :select type, its :onchange. For a :links type, its :onclick. You shouldn't have to use this option unless you are doing something out of the norm. The point of this option is to return a URL that will include this.value or not
@@ -85,6 +86,19 @@ module Searchgasm
85
86
  add_searchgasm_helper_defaults!(options, :page)
86
87
  return "" if options[:search_obj].page_count <= 1
87
88
 
89
+ page_range = (1..options[:search_obj].page_count)
90
+ options[:text] = Config.pages_text unless options.has_key?(:text)
91
+
92
+ choices = nil
93
+ case options[:text]
94
+ when String
95
+ choices = page_range.collect { |p| [options[:text].gsub(/%p/, p.to_s), p] }
96
+ when Proc
97
+ choices = page_range.collect { |p| [yield(p), p] }
98
+ else
99
+ choices = page_range
100
+ end
101
+
88
102
  if block_given?
89
103
  yield options
90
104
  else
@@ -94,7 +108,7 @@ module Searchgasm
94
108
  options[:html][options[:action]] ||= ""
95
109
  options[:html][options[:action]] += ";"
96
110
  options[:html][options[:action]] += options[:url]
97
- select(:search, :page, (1..options[:search_obj].page_count), {}, options[:html])
111
+ select(options[:params_scope], :page, choices, {:selected => options[:search_obj].page}, options[:html])
98
112
  else
99
113
  # HTML for links
100
114
  end
@@ -153,7 +167,7 @@ module Searchgasm
153
167
  options[:html][options[:action]] ||= ""
154
168
  options[:html][options[:action]] += ";"
155
169
  options[:html][options[:action]] += options[:url]
156
- select(:search, :per_page, options[:choices], {}, options[:html])
170
+ select(options[:params_scope], :per_page, options[:choices], {:selected => options[:search_obj].per_page}, options[:html])
157
171
  end
158
172
  end
159
173
  end
@@ -49,12 +49,7 @@ module Searchgasm #:nodoc:
49
49
  "#<#{klass} #{options_as_nice_string}>"
50
50
  end
51
51
 
52
- def limit
53
- @set_limit ? @limit : Config.per_page
54
- end
55
-
56
52
  def limit=(value)
57
- @set_limit = true
58
53
  @limit = value.blank? || value == 0 ? nil : value.to_i
59
54
  end
60
55
 
@@ -11,15 +11,15 @@ module Searchgasm
11
11
  end
12
12
 
13
13
  def limit_with_pagination=(value)
14
- self.limit_without_pagination = value
14
+ r_value = self.limit_without_pagination = value
15
15
  self.page = @page unless @page.nil? # retry page now that the limit has changed
16
- limit
16
+ r_value
17
17
  end
18
18
 
19
19
  def offset_with_pagination=(value)
20
- self.offset_without_pagination = value
20
+ r_value = self.offset_without_pagination = value
21
21
  @page = nil
22
- offset
22
+ r_value
23
23
  end
24
24
 
25
25
  def page
@@ -10,10 +10,22 @@ module Searchgasm
10
10
  def self.included(klass)
11
11
  klass.class_eval do
12
12
  attr_reader :protect
13
+ alias_method_chain :limit, :protection
14
+ alias_method_chain :limit=, :protection
13
15
  alias_method_chain :options=, :protection
14
16
  end
15
17
  end
16
18
 
19
+ def limit_with_protection
20
+ return Config.per_page if protected? && !@set_limit
21
+ limit_without_protection
22
+ end
23
+
24
+ def limit_with_protection=(value)
25
+ @set_limit = true
26
+ self.limit_without_protection = value
27
+ end
28
+
17
29
  def options_with_protection=(values)
18
30
  return unless values.is_a?(Hash)
19
31
  self.protect = values.delete(:protect) if values.has_key?(:protect) # make sure we do this first
@@ -29,6 +41,7 @@ module Searchgasm
29
41
  def protect?
30
42
  protect == true
31
43
  end
44
+ alias_method :protected?, :protect?
32
45
 
33
46
  private
34
47
  def order_by_safe?(order_by, alt_klass = nil)
@@ -67,7 +67,7 @@ module Searchgasm
67
67
 
68
68
  MAJOR = 0
69
69
  MINOR = 9
70
- TINY = 9
70
+ TINY = 10
71
71
 
72
72
  # The current version as a Version instance
73
73
  CURRENT = new(MAJOR, MINOR, TINY)
data/lib/searchgasm.rb CHANGED
@@ -50,8 +50,8 @@ module Searchgasm
50
50
  class Base
51
51
  include Conditions
52
52
  include Ordering
53
- include Pagination
54
53
  include Protection
54
+ include Pagination
55
55
  end
56
56
  end
57
57
 
data/searchgasm.gemspec CHANGED
@@ -1,18 +1,18 @@
1
1
 
2
- # Gem::Specification for Searchgasm-0.9.9
2
+ # Gem::Specification for Searchgasm-0.9.10
3
3
  # Originally generated by Echoe
4
4
 
5
5
  --- !ruby/object:Gem::Specification
6
6
  name: searchgasm
7
7
  version: !ruby/object:Gem::Version
8
- version: 0.9.9
8
+ version: 0.9.10
9
9
  platform: ruby
10
10
  authors:
11
11
  - Ben Johnson of Binary Logic
12
12
  autorequire:
13
13
  bindir: bin
14
14
 
15
- date: 2008-09-07 00:00:00 -04:00
15
+ date: 2008-09-08 00:00:00 -04:00
16
16
  default_executable:
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
@@ -133,13 +133,17 @@ files:
133
133
  - test/libs/rexml_fix.rb
134
134
  - test/test_active_record_associations.rb
135
135
  - test/test_active_record_base.rb
136
- - test/test_condition.rb
136
+ - test/test_condition_base.rb
137
+ - test/test_condition_types.rb
137
138
  - test/test_conditions_base.rb
139
+ - test/test_conditions_protection.rb
138
140
  - test/test_helper.rb
139
141
  - test/test_search_base.rb
142
+ - test/test_search_conditions.rb
140
143
  - test/test_search_ordering.rb
141
144
  - test/test_search_pagination.rb
142
145
  - test/test_search_protection.rb
146
+ - test/text_config.rb
143
147
  - searchgasm.gemspec
144
148
  has_rdoc: true
145
149
  homepage: http://github.com/binarylogic/searchgasm
@@ -174,10 +178,13 @@ summary: Orgasmic ActiveRecord searching
174
178
  test_files:
175
179
  - test/test_active_record_associations.rb
176
180
  - test/test_active_record_base.rb
177
- - test/test_condition.rb
181
+ - test/test_condition_base.rb
182
+ - test/test_condition_types.rb
178
183
  - test/test_conditions_base.rb
184
+ - test/test_conditions_protection.rb
179
185
  - test/test_helper.rb
180
186
  - test/test_search_base.rb
187
+ - test/test_search_conditions.rb
181
188
  - test/test_search_ordering.rb
182
189
  - test/test_search_pagination.rb
183
190
  - test/test_search_protection.rb
@@ -35,7 +35,7 @@ class TestActiveRecordBase < Test::Unit::TestCase
35
35
  def test_build_search
36
36
  search = Account.new_search
37
37
  assert_kind_of Searchgasm::Search::Base, search
38
-
38
+
39
39
  search = Account.build_search(:conditions => {:name_keywords => "awesome"}, :page => 2, :per_page => 15)
40
40
  assert_kind_of Searchgasm::Search::Base, search
41
41
  assert_equal Account, search.klass
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestConditionBase < Test::Unit::TestCase
4
+ fixtures :accounts, :users, :orders
5
+
6
+ def setup
7
+ setup_db
8
+ load_fixtures
9
+ end
10
+
11
+ def teardown
12
+ teardown_db
13
+ end
14
+
15
+ def test_condition_name
16
+ assert_equal "equals", Searchgasm::Condition::Equals.condition_name
17
+ assert_equal "keywords", Searchgasm::Condition::Keywords.condition_name
18
+ assert_equal "greater_than_or_equal_to", Searchgasm::Condition::GreaterThanOrEqualTo.condition_name
19
+ end
20
+
21
+ def test_string_column
22
+
23
+ end
24
+
25
+ def test_comparable_column
26
+
27
+ end
28
+
29
+ def test_initialize
30
+ condition = Searchgasm::Condition::Keywords.new(Account, Account.columns_hash["name"])
31
+ assert_equal condition.klass, Account
32
+ assert_equal condition.column, Account.columns_hash["name"]
33
+
34
+ condition = Searchgasm::Condition::GreaterThan.new(Account, "id")
35
+ assert_equal condition.column, Account.columns_hash["id"]
36
+ end
37
+
38
+ def test_explicitly_set_value
39
+ condition = Searchgasm::Condition::Equals.new(Account, Account.columns_hash["name"])
40
+ assert !condition.explicitly_set_value?
41
+ condition.value = nil
42
+ assert condition.explicitly_set_value?
43
+
44
+ condition = Searchgasm::Condition::Keywords.new(Account, Account.columns_hash["name"])
45
+ assert !condition.explicitly_set_value?
46
+ condition.value = nil
47
+ assert !condition.explicitly_set_value?
48
+ end
49
+
50
+ def test_ignore_blanks?
51
+ condition = Searchgasm::Condition::Equals.new(Account, Account.columns_hash["id"])
52
+ assert !condition.ignore_blanks?
53
+
54
+ condition = Searchgasm::Condition::Keywords.new(Account, Account.columns_hash["name"])
55
+ assert condition.ignore_blanks?
56
+ end
57
+
58
+ def test_value
59
+
60
+ end
61
+ end
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
- class TestCondition < Test::Unit::TestCase
3
+ class TestConditionTypes < Test::Unit::TestCase
4
4
  fixtures :accounts, :users, :orders
5
5
 
6
6
  def setup
@@ -11,49 +11,6 @@ class TestCondition < Test::Unit::TestCase
11
11
  def teardown
12
12
  teardown_db
13
13
  end
14
-
15
- def test_condition_name
16
- assert_equal "equals", Searchgasm::Condition::Equals.condition_name
17
- assert_equal "keywords", Searchgasm::Condition::Keywords.condition_name
18
- assert_equal "greater_than_or_equal_to", Searchgasm::Condition::GreaterThanOrEqualTo.condition_name
19
- end
20
-
21
- def test_string_column
22
-
23
- end
24
-
25
- def test_comparable_column
26
-
27
- end
28
-
29
- def test_initialize
30
- condition = Searchgasm::Condition::Keywords.new(Account, Account.columns_hash["name"])
31
- assert_equal condition.klass, Account
32
- assert_equal condition.column, Account.columns_hash["name"]
33
-
34
- condition = Searchgasm::Condition::GreaterThan.new(Account, "id")
35
- assert_equal condition.column, Account.columns_hash["id"]
36
- end
37
-
38
- def test_explicitly_set_value
39
- condition = Searchgasm::Condition::Equals.new(Account, Account.columns_hash["name"])
40
- assert !condition.explicitly_set_value?
41
- condition.value = nil
42
- assert condition.explicitly_set_value?
43
-
44
- condition = Searchgasm::Condition::Keywords.new(Account, Account.columns_hash["name"])
45
- assert !condition.explicitly_set_value?
46
- condition.value = nil
47
- assert !condition.explicitly_set_value?
48
- end
49
-
50
- def test_ignore_blanks?
51
- condition = Searchgasm::Condition::Equals.new(Account, Account.columns_hash["id"])
52
- assert !condition.ignore_blanks?
53
-
54
- condition = Searchgasm::Condition::Keywords.new(Account, Account.columns_hash["name"])
55
- assert condition.ignore_blanks?
56
- end
57
14
 
58
15
  def test_sanitize
59
16
  condition = Searchgasm::Condition::BeginsWith.new(Account, Account.columns_hash["name"])
@@ -136,8 +93,4 @@ class TestCondition < Test::Unit::TestCase
136
93
  condition.value = User.find(2)
137
94
  assert_equal condition.sanitize, ["(\"users\".\"id\" != ?) AND (\"users\".\"parent_id\" = ?)", 2, 1]
138
95
  end
139
-
140
- def test_value
141
-
142
- end
143
96
  end
@@ -165,14 +165,4 @@ class TestConditionsBase < Test::Unit::TestCase
165
165
  assert_equal 1, conditions.minimum('id')
166
166
  assert_equal 4, conditions.sum('id')
167
167
  end
168
-
169
- def test_protection
170
- assert_raise(ArgumentError) { Account.new_conditions("(DELETE FROM users)") }
171
- assert_nothing_raised { Account.build_conditions!("(DELETE FROM users)") }
172
-
173
- account = Account.first
174
-
175
- assert_raise(ArgumentError) { account.users.build_conditions("(DELETE FROM users)") }
176
- assert_nothing_raised { account.users.build_conditions!("(DELETE FROM users)") }
177
- end
178
168
  end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestConditionsProtection < Test::Unit::TestCase
4
+ fixtures :accounts, :users, :orders
5
+
6
+ def setup
7
+ setup_db
8
+ load_fixtures
9
+ end
10
+
11
+ def teardown
12
+ teardown_db
13
+ end
14
+
15
+ def test_protection
16
+ assert_raise(ArgumentError) { Account.new_conditions("(DELETE FROM users)") }
17
+ assert_nothing_raised { Account.build_conditions!("(DELETE FROM users)") }
18
+
19
+ account = Account.first
20
+
21
+ assert_raise(ArgumentError) { account.users.build_conditions("(DELETE FROM users)") }
22
+ assert_nothing_raised { account.users.build_conditions!("(DELETE FROM users)") }
23
+ end
24
+ end
@@ -40,7 +40,7 @@ class TestSearchBase < Test::Unit::TestCase
40
40
  assert_equal "test", search.joins
41
41
 
42
42
  search.page = 5
43
- assert_equal 1, search.page # haven't set a limit yet
43
+ assert_equal 1, search.page
44
44
  assert_equal nil, search.offset
45
45
 
46
46
  search.limit = 20
@@ -89,19 +89,6 @@ class TestSearchBase < Test::Unit::TestCase
89
89
  assert_equal search.lock, true
90
90
  end
91
91
 
92
- def test_conditions
93
- search = Searchgasm::Search::Base.new(Account)
94
- assert_kind_of Searchgasm::Conditions::Base, search.conditions
95
- assert_equal search.conditions.klass, Account
96
-
97
- search.conditions = {:name_like => "Binary"}
98
- assert_kind_of Searchgasm::Conditions::Base, search.conditions
99
-
100
- conditions = Searchgasm::Conditions::Base.new(Account, :id_greater_than => 8)
101
- search.conditions = conditions
102
- assert_equal conditions, search.conditions
103
- end
104
-
105
92
  def test_include
106
93
  search = Searchgasm::Search::Base.new(Account)
107
94
  assert_equal nil, search.include
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestSearchConditions < Test::Unit::TestCase
4
+ fixtures :accounts, :users, :orders
5
+
6
+ def setup
7
+ setup_db
8
+ load_fixtures
9
+ end
10
+
11
+ def teardown
12
+ teardown_db
13
+ end
14
+
15
+ def test_conditions
16
+ search = Searchgasm::Search::Base.new(Account)
17
+ assert_kind_of Searchgasm::Conditions::Base, search.conditions
18
+ assert_equal search.conditions.klass, Account
19
+
20
+ search.conditions = {:name_like => "Binary"}
21
+ assert_kind_of Searchgasm::Conditions::Base, search.conditions
22
+
23
+ conditions = Searchgasm::Conditions::Base.new(Account, :id_greater_than => 8)
24
+ search.conditions = conditions
25
+ assert_equal conditions, search.conditions
26
+ end
27
+ end
@@ -0,0 +1 @@
1
+ # need to test that setting config doesn't mess up regular searches, only protected ones, etc
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchgasm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.9.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Johnson of Binary Logic
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-07 00:00:00 -04:00
12
+ date: 2008-09-08 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -130,13 +130,17 @@ files:
130
130
  - test/libs/rexml_fix.rb
131
131
  - test/test_active_record_associations.rb
132
132
  - test/test_active_record_base.rb
133
- - test/test_condition.rb
133
+ - test/test_condition_base.rb
134
+ - test/test_condition_types.rb
134
135
  - test/test_conditions_base.rb
136
+ - test/test_conditions_protection.rb
135
137
  - test/test_helper.rb
136
138
  - test/test_search_base.rb
139
+ - test/test_search_conditions.rb
137
140
  - test/test_search_ordering.rb
138
141
  - test/test_search_pagination.rb
139
142
  - test/test_search_protection.rb
143
+ - test/text_config.rb
140
144
  - searchgasm.gemspec
141
145
  has_rdoc: true
142
146
  homepage: http://github.com/binarylogic/searchgasm
@@ -172,10 +176,13 @@ summary: Orgasmic ActiveRecord searching
172
176
  test_files:
173
177
  - test/test_active_record_associations.rb
174
178
  - test/test_active_record_base.rb
175
- - test/test_condition.rb
179
+ - test/test_condition_base.rb
180
+ - test/test_condition_types.rb
176
181
  - test/test_conditions_base.rb
182
+ - test/test_conditions_protection.rb
177
183
  - test/test_helper.rb
178
184
  - test/test_search_base.rb
185
+ - test/test_search_conditions.rb
179
186
  - test/test_search_ordering.rb
180
187
  - test/test_search_pagination.rb
181
188
  - test/test_search_protection.rb