Class: RailsAdmin::AbstractModel::StatementBuilder
- Inherits:
-
Object
- Object
- RailsAdmin::AbstractModel::StatementBuilder
show all
- Defined in:
- lib/rails_admin/abstract_model.rb
Defined Under Namespace
Classes: FilteringDuration
Instance Method Summary
collapse
Constructor Details
#initialize(column, type, value, operator) ⇒ StatementBuilder
Returns a new instance of StatementBuilder.
124
125
126
127
128
129
|
# File 'lib/rails_admin/abstract_model.rb', line 124
def initialize(column, type, value, operator)
@column = column
@type = type
@value = value
@operator = operator
end
|
Instance Method Details
#build_statement_for_date ⇒ Object
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
# File 'lib/rails_admin/abstract_model.rb', line 180
def build_statement_for_date
start_date, end_date = get_filtering_duration
if start_date
start_date = begin
start_date.to_date
rescue StandardError
nil
end
end
if end_date
end_date = begin
end_date.to_date
rescue StandardError
nil
end
end
range_filter(start_date, end_date)
end
|
#build_statement_for_datetime_or_timestamp ⇒ Object
199
200
201
202
203
204
|
# File 'lib/rails_admin/abstract_model.rb', line 199
def build_statement_for_datetime_or_timestamp
start_date, end_date = get_filtering_duration
start_date = start_date.beginning_of_day if start_date.is_a?(Date)
end_date = end_date.end_of_day if end_date.is_a?(Date)
range_filter(start_date, end_date)
end
|
#build_statement_for_integer_decimal_or_float ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/rails_admin/abstract_model.rb', line 159
def build_statement_for_integer_decimal_or_float
case @value
when Array
val, range_begin, range_end = *@value.collect do |v|
next unless v.to_i.to_s == v || v.to_f.to_s == v
@type == :integer ? v.to_i : v.to_f
end
case @operator
when 'between'
range_filter(range_begin, range_end)
else
column_for_value(val) if val
end
else
if @value.to_i.to_s == @value || @value.to_f.to_s == @value
@type == :integer ? column_for_value(@value.to_i) : column_for_value(@value.to_f)
end
end
end
|
#build_statement_for_type ⇒ Object
155
156
157
|
# File 'lib/rails_admin/abstract_model.rb', line 155
def build_statement_for_type
raise 'You must override build_statement_for_type in your StatementBuilder'
end
|
#build_statement_for_type_generic ⇒ Object
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/rails_admin/abstract_model.rb', line 144
def build_statement_for_type_generic
build_statement_for_type || begin
case @type
when :date
build_statement_for_date
when :datetime, :timestamp, :time
build_statement_for_datetime_or_timestamp
end
end
end
|
#get_filtering_duration ⇒ Object
#range_filter(_min, _max) ⇒ Object
210
211
212
|
# File 'lib/rails_admin/abstract_model.rb', line 210
def range_filter(_min, _max)
raise 'You must override range_filter in your StatementBuilder'
end
|
#to_statement ⇒ Object
131
132
133
134
135
136
|
# File 'lib/rails_admin/abstract_model.rb', line 131
def to_statement
return if [@operator, @value].any? { |v| v == '_discard' }
unary_operators[@operator] || unary_operators[@value] ||
build_statement_for_type_generic
end
|
#unary_operators ⇒ Object
206
207
208
|
# File 'lib/rails_admin/abstract_model.rb', line 206
def unary_operators
raise 'You must override unary_operators in your StatementBuilder'
end
|