class Thorderbolt::BaseQueryBuilder
Builds full query for performing custom ordering
Attributes
attribute[R]
table_name[R]
values[R]
Public Class Methods
new(table_name:, attribute:, values:)
click to toggle source
# File lib/thorderbolt/base_query_builder.rb, line 8 def initialize(table_name:, attribute:, values:) @table_name = table_name @attribute = attribute @values = values end
Public Instance Methods
build()
click to toggle source
result example: CASE
WHEN 'cities'.'name'='City 1' THEN 0 WHEN 'cities'.'name'='City 5' THEN 1 ELSE 2
END ASC
# File lib/thorderbolt/base_query_builder.rb, line 20 def build conditions = build_conditions when_queries = build_when_then_part(conditions) case_query = build_case_else(when_queries) Arel.sql("#{case_query} ASC") end
Protected Instance Methods
build_conditions()
click to toggle source
# File lib/thorderbolt/base_query_builder.rb, line 29 def build_conditions values.map do |value| value.is_a?(Range) ? range_equality_part(value) : equality_part(value) end end
equality_part(value)
click to toggle source
result example: 'cities'.'name'
# File lib/thorderbolt/base_query_builder.rb, line 37 def equality_part(value) connection = ActiveRecord::Base.connection full_column_name = "#{connection.quote_table_name(table_name)}"\ ".#{connection.quote_column_name(attribute)}" ActiveRecord::Base.sanitize_sql( ["#{full_column_name} = :value", value: value] ) end
range_equality_part(value)
click to toggle source
result example: 'cities'.'population' >= 100 AND 'cities'.'population' < 200
# File lib/thorderbolt/base_query_builder.rb, line 49 def range_equality_part(value) RangeBuilder.build(table_name, attribute, value) end