Class: CustomSort::RelationBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/custom_sort/relation_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relation, column:, query_name:, recency_key:, label: nil, sort_order: "DESC", recent: true) ⇒ RelationBuilder

def initialize(relation, column:, period:, time_zone:, time_range:, week_start:, day_start:, n_seconds:)



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/custom_sort/relation_builder.rb', line 7

def initialize(relation, column:, query_name:, recency_key:, label: nil, sort_order: "DESC", recent: true)
  @relation = relation
  @column = resolve_column(relation, column) unless column.nil?
  @query_name = query_name
  @table_name = resolve_table(relation) #"items"
  @class_name = resolve_class(relation)
  
  @recent = recent == false ? recent : true
  @lambda_key = recency_key #2
  @sort_order = sort_order

  @label = label #label.nil? ? CustomSort::LABELS[0].to_s : label

  #if relation.default_timezone == :local
  #  raise CustomSort::Error, "ActiveRecord::Base.default_timezone must be :utc to use Groupdate"
  #end
end

Instance Attribute Details

#columnObject (readonly)

, :period



3
4
5
# File 'lib/custom_sort/relation_builder.rb', line 3

def column
  @column
end

#labelObject (readonly)

, :period



3
4
5
# File 'lib/custom_sort/relation_builder.rb', line 3

def label
  @label
end

#query_nameObject (readonly)

, :period



3
4
5
# File 'lib/custom_sort/relation_builder.rb', line 3

def query_name
  @query_name
end

#recency_keyObject (readonly)

, :period



3
4
5
# File 'lib/custom_sort/relation_builder.rb', line 3

def recency_key
  @recency_key
end

Instance Method Details

#generateObject



25
26
27
28
29
30
31
32
33
34
# File 'lib/custom_sort/relation_builder.rb', line 25

def generate
  #@relation.group(group_clause).where(*where_clause)

  case query_name
  when "nojoin"
      @relation.select(net_score_col).select(time_decay_col).where(*where_clause).order(order_clause)
  else
      @relation.select(net_score_col).select(time_decay_col).joins(join_clause).where(*where_clause).order(order_clause)
  end
end