searchgasm 0.9.0 → 0.9.1
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.
- data/CHANGELOG +2 -0
- data/README.mdown +13 -10
- data/lib/searchgasm/search/conditions.rb +35 -14
- data/lib/searchgasm/version.rb +1 -1
- data/searchgasm.gemspec +2 -2
- data/test/test_searchgasm_conditions.rb +6 -7
- metadata +1 -1
data/CHANGELOG
CHANGED
data/README.mdown
CHANGED
@@ -34,17 +34,16 @@ Now go into your console and try out any of these example with your own models.
|
|
34
34
|
|
35
35
|
User.all(
|
36
36
|
:conditions => {
|
37
|
-
:first_name_contains => "Ben",
|
38
|
-
:email_ends_with => "binarylogic.com"
|
37
|
+
:first_name_contains => "Ben", # first_name like '%Ben%'
|
38
|
+
:email_ends_with => "binarylogic.com" # email like '%binarylogic.com'
|
39
39
|
},
|
40
|
-
:
|
41
|
-
:
|
40
|
+
:per_page => 20 # limit 20
|
41
|
+
:page => 3 # offset 60
|
42
42
|
)
|
43
43
|
|
44
44
|
## Detailed Example w/ object based searching
|
45
45
|
|
46
|
-
#
|
47
|
-
|
46
|
+
# Instantiate
|
48
47
|
search = User.new_search(
|
49
48
|
:conditions => {
|
50
49
|
:first_name_contains => "Ben",
|
@@ -56,11 +55,15 @@ Now go into your console and try out any of these example with your own models.
|
|
56
55
|
:order_by => {:orders => :total},
|
57
56
|
:order_as => "DESC"
|
58
57
|
)
|
58
|
+
|
59
|
+
# Set conditions on relationships
|
59
60
|
search.conditions.email_ends_with = "binarylogic.com"
|
60
|
-
search.conditions.oders.line_items.
|
61
|
+
search.conditions.oders.line_items.created_after = Time.now
|
62
|
+
|
63
|
+
# Set options
|
61
64
|
search.per_page = 50 # overrides the 20 set above
|
62
65
|
|
63
|
-
#
|
66
|
+
# Set ANY of the ActiveRecord options
|
64
67
|
search.group = "last_name"
|
65
68
|
search.readonly = true
|
66
69
|
# ... see ActiveRecord documentation
|
@@ -98,7 +101,7 @@ Any of the options used in the above example can be used in these, but for the s
|
|
98
101
|
|
99
102
|
User.find(:first, :conditions => {::age_gt => 18}, :per_page => 20)
|
100
103
|
|
101
|
-
search = User.new_search(:conditions => {:age_gt => 18})
|
104
|
+
search = User.new_search(:conditions => {:age_gt => 18}) # build_search is an alias
|
102
105
|
search.conditions.first_name_contains = "Ben"
|
103
106
|
search.per_page = 20
|
104
107
|
search.all
|
@@ -226,7 +229,7 @@ After all of that, here's why I love this plugin:
|
|
226
229
|
|
227
230
|
<% form_for :search, User.new_conditions, :url => users_path do |f| %>
|
228
231
|
<%= f.text_field :first_name_contains %>
|
229
|
-
<%= f.calendar_date_select :
|
232
|
+
<%= f.calendar_date_select :created_after %>
|
230
233
|
<%= f.select :age_gt, (1..100) %>
|
231
234
|
<% end %>
|
232
235
|
|
@@ -7,19 +7,19 @@ module BinaryLogic
|
|
7
7
|
attr_accessor :klass, :relationship_name, :scope
|
8
8
|
|
9
9
|
class << self
|
10
|
-
def
|
11
|
-
|
10
|
+
def condition_types_for_column_type(type)
|
11
|
+
condition_types = [:equals, :does_not_equal]
|
12
12
|
case type
|
13
13
|
when :string, :text
|
14
|
-
|
14
|
+
condition_types += [:begins_with, :contains, :keywords, :ends_with]
|
15
15
|
when :integer, :float, :decimal, :datetime, :timestamp, :time, :date
|
16
|
-
|
16
|
+
condition_types += [:greater_than, :greater_than_or_equal_to, :less_than, :less_than_or_equal_to]
|
17
17
|
end
|
18
|
-
|
18
|
+
condition_types
|
19
19
|
end
|
20
|
-
|
21
|
-
def
|
22
|
-
case
|
20
|
+
|
21
|
+
def aliases_for_condition_type(condition_type)
|
22
|
+
case condition_type
|
23
23
|
when :equals then ["", :is]
|
24
24
|
when :does_not_equal then [:is_not, :not]
|
25
25
|
when :begins_with then [:starts_with]
|
@@ -31,6 +31,28 @@ module BinaryLogic
|
|
31
31
|
else []
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
def aliases_for_condition(*args)
|
36
|
+
column, condition_type = nil, nil
|
37
|
+
|
38
|
+
# Allow a condition object or the column and condition type to be passed
|
39
|
+
if args.size == 1
|
40
|
+
column, condition_type = condition.column, condition.condition
|
41
|
+
else
|
42
|
+
column, condition_type = args.first, args[1]
|
43
|
+
end
|
44
|
+
|
45
|
+
name = Condition.generate_name(column, condition_type)
|
46
|
+
alias_condition_types = aliases_for_condition_type(condition_type)
|
47
|
+
column_names = [column.name]
|
48
|
+
column_names << column.name.gsub(/_at$/, "") if [:datetime, :timestamp, :time, :date].include?(column.type) && column.name =~ /_at$/
|
49
|
+
|
50
|
+
aliases = []
|
51
|
+
column_names.each do |column_name|
|
52
|
+
alias_condition_types.each { |alias_condition_type| aliases << Condition.generate_name(column_name, alias_condition_type) }
|
53
|
+
end
|
54
|
+
aliases
|
55
|
+
end
|
34
56
|
end
|
35
57
|
|
36
58
|
def initialize(klass, values = {})
|
@@ -116,17 +138,17 @@ module BinaryLogic
|
|
116
138
|
end
|
117
139
|
|
118
140
|
def add_conditions_for_column!(column)
|
119
|
-
self.class.
|
141
|
+
self.class.condition_types_for_column_type(column.type).collect { |condition_type| add_condition!(condition_type, column) }
|
120
142
|
end
|
121
143
|
|
122
|
-
def add_condition!(
|
123
|
-
name = Condition.generate_name(column,
|
144
|
+
def add_condition!(condition_type, column)
|
145
|
+
name = Condition.generate_name(column, condition_type)
|
124
146
|
|
125
147
|
# Define accessor methods
|
126
148
|
self.class.class_eval <<-SRC
|
127
149
|
def #{name}_object
|
128
150
|
if @#{name}.nil?
|
129
|
-
@#{name} = Condition.new(:#{
|
151
|
+
@#{name} = Condition.new(:#{condition_type}, klass, "#{column.name}")
|
130
152
|
self.objects << @#{name}
|
131
153
|
end
|
132
154
|
@#{name}
|
@@ -138,8 +160,7 @@ module BinaryLogic
|
|
138
160
|
SRC
|
139
161
|
|
140
162
|
# Define aliases
|
141
|
-
self.class.
|
142
|
-
alias_name = Condition.generate_name(column, alias_condition_name)
|
163
|
+
self.class.aliases_for_condition(column, condition_type).each do |alias_name|
|
143
164
|
self.class.class_eval do
|
144
165
|
alias_method alias_name, name
|
145
166
|
alias_method "#{alias_name}=", "#{name}="
|
data/lib/searchgasm/version.rb
CHANGED
data/searchgasm.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Searchgasm-0.9.
|
2
|
+
# Gem::Specification for Searchgasm-0.9.1
|
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.
|
8
|
+
version: 0.9.1
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- Ben Johnson of Binary Logic
|
@@ -24,14 +24,13 @@ class TestSearchgasmConditions < Test::Unit::TestCase
|
|
24
24
|
|
25
25
|
klass.columns.each do |column|
|
26
26
|
value = column_value(column)
|
27
|
-
BinaryLogic::Searchgasm::Search::Conditions.
|
28
|
-
name = BinaryLogic::Searchgasm::Search::Condition.generate_name(column,
|
27
|
+
BinaryLogic::Searchgasm::Search::Conditions.condition_types_for_column_type(column.type).each do |condition_type|
|
28
|
+
name = BinaryLogic::Searchgasm::Search::Condition.generate_name(column, condition_type)
|
29
29
|
conditions.send("#{name}=", value)
|
30
30
|
assert_equal conditions.send(name), value
|
31
|
-
BinaryLogic::Searchgasm::Search::Conditions.
|
32
|
-
|
33
|
-
conditions.send(
|
34
|
-
assert_equal conditions.send(alias_name), value
|
31
|
+
BinaryLogic::Searchgasm::Search::Conditions.aliases_for_condition(column, condition_type).each do |alias_condition|
|
32
|
+
conditions.send("#{alias_condition}=", value)
|
33
|
+
assert_equal conditions.send(alias_condition), value
|
35
34
|
end
|
36
35
|
end
|
37
36
|
end
|
@@ -98,7 +97,7 @@ class TestSearchgasmConditions < Test::Unit::TestCase
|
|
98
97
|
conditions.name_contains = "Binary"
|
99
98
|
conditions.id_gt = 5
|
100
99
|
now = Time.now
|
101
|
-
conditions.
|
100
|
+
conditions.created_after = now
|
102
101
|
assert_equal conditions.sanitize, ["(\"accounts\".\"name\" LIKE ?) AND (\"accounts\".\"id\" > ?) AND (\"accounts\".\"created_at\" > ?)", "%Binary%", 5, now]
|
103
102
|
|
104
103
|
# test out associations
|