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
- #build_condition_statement(conditions = nil) ⇒ Object
- #build_join_statement(table_name, class_name, srn, joins = nil) ⇒ Object
- #build_select_statement(table_name, reputation_name, select = nil, srn = nil, normalize = false) ⇒ Object
- #build_select_statement_with_reputation_only(table_name, reputation_name, srn = nil, normalize = false) ⇒ Object
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 |