Module: ReputationSystem::QueryBuilder::ClassMethods

Defined in:
lib/reputation_system/query_builder.rb

Constant Summary collapse

DELTA =
0.000001
REPUTATION_JOIN_STATEMENT =
"LEFT JOIN rs_reputations ON %s.id = rs_reputations.target_id AND rs_reputations.target_type = ? AND rs_reputations.reputation_name = ? AND rs_reputations.active = ?"

Instance Method Summary collapse

Instance Method Details

#build_condition_statement(conditions = nil) ⇒ Object



58
59
60
61
62
# File 'lib/reputation_system/query_builder.rb', line 58

def build_condition_statement(conditions=nil)
  conditions ||= [""]
  conditions = [conditions] unless conditions.is_a? Array
  conditions
end

#build_join_statement(table_name, class_name, srn, joins = nil) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/reputation_system/query_builder.rb', line 64

def build_join_statement(table_name, class_name, srn, joins=nil)
    joins ||= []
    joins = [joins] unless joins.is_a? Array
    rep_join = sanitize_sql_array([REPUTATION_JOIN_STATEMENT, class_name.to_s, srn.to_s, true])
    rep_join = sanitize_sql_array([rep_join, table_name])
    joins << rep_join
end

#build_select_statement(table_name, reputation_name, select = nil, srn = nil, normalize = false) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/reputation_system/query_builder.rb', line 27

def build_select_statement(table_name, reputation_name, select=nil, srn=nil, normalize=false)
  select = sanitize_sql_array(["%s.*", table_name]) unless select
  if normalize
    max = ReputationSystem::Reputation.max(srn, self.name)
    min = ReputationSystem::Reputation.min(srn, self.name)
    range = max - min
    if range < DELTA
      sanitize_sql_array(["%s, (0) AS normalized_%s", select, reputation_name])
    else
      sanitize_sql_array(["%s, ((rs_reputations.value - %s) / %s) AS normalized_%s", select, min, range, reputation_name])
    end
  else
    sanitize_sql_array(["%s, COALESCE(rs_reputations.value, 0) AS %s", select, reputation_name])
  end
end

#build_select_statement_with_reputation_only(table_name, reputation_name, srn = nil, normalize = false) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/reputation_system/query_builder.rb', line 43

def build_select_statement_with_reputation_only(table_name, reputation_name, srn=nil, normalize=false)
  if normalize
    max = ReputationSystem::Reputation.max(srn, self.name)
    min = ReputationSystem::Reputation.min(srn, self.name)
    range = max - min
    if range < DELTA
      sanitize_sql_array(["(0) AS normalized_%s", reputation_name])
    else
      sanitize_sql_array(["((rs_reputations.value - %s) / %s) AS normalized_%s", min, range, reputation_name])
    end
  else
    sanitize_sql_array(["COALESCE(rs_reputations.value, 0) AS %s", reputation_name])
  end
end