Class: RailsAdmin::AbstractModel::StatementBuilder

Inherits:
Object
  • Object
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_dateObject (protected)



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_timestampObject (protected)



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_floatObject (protected)



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_typeObject (protected)



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_genericObject (protected)



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_durationObject (protected)



140
141
142
# File 'lib/rails_admin/abstract_model.rb', line 140

def get_filtering_duration
  FilteringDuration.new(@operator, @value).get_duration
end

#range_filter(_min, _max) ⇒ Object (protected)



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_statementObject



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_operatorsObject (protected)



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