Module: ActiveRecord::QueryMethods
- Defined in:
- lib/postgres_ext/active_record/relation/query_methods.rb
Defined Under Namespace
Classes: WhereChain
Instance Method Summary collapse
- #build_arel_with_extensions ⇒ Object
- #build_rank(arel, ranks) ⇒ Object
- #build_with(arel, withs) ⇒ Object
- #ranked(options = :order) ⇒ Object
- #ranked!(*args) ⇒ Object
- #with(*args) ⇒ Object
- #with!(*args) ⇒ Object
Instance Method Details
#build_arel_with_extensions ⇒ Object
102 103 104 105 106 107 108 109 110 |
# File 'lib/postgres_ext/active_record/relation/query_methods.rb', line 102 def build_arel_with_extensions arel = build_arel_without_extensions build_with(arel, with_values) build_rank(arel, rank_values) arel end |
#build_rank(arel, ranks) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/postgres_ext/active_record/relation/query_methods.rb', line 132 def build_rank(arel, ranks) rank_orders = ranks.uniq.reject(&:blank?).flat_map do |value| case value when :order arel.orders when Symbol table[value].asc when Hash value.map { |field, dir| table[field].send(dir) } else Arel::Nodes::SqlLiteral.new value end end unless rank_orders.blank? rank_node = Arel::Nodes::SqlLiteral.new 'rank()' window = Arel::Nodes::Window.new.order(rank_orders) over_node = Arel::Nodes::Over.new rank_node, window arel.project(over_node) end end |
#build_with(arel, withs) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/postgres_ext/active_record/relation/query_methods.rb', line 112 def build_with(arel, withs) with_statements = withs.flat_map do |with_value| case with_value when String with_value when Hash with_value.map do |name, expression| case expression when String select = Arel::SqlLiteral.new "(#{expression})" when ActiveRecord::Relation select = Arel::SqlLiteral.new "(#{expression.to_sql})" end as = Arel::Nodes::As.new Arel::SqlLiteral.new(name.to_s), select end end end arel.with with_statements unless with_statements.empty? end |
#ranked(options = :order) ⇒ Object
93 94 95 |
# File 'lib/postgres_ext/active_record/relation/query_methods.rb', line 93 def ranked( = :order) spawn.ranked! end |
#ranked!(*args) ⇒ Object
97 98 99 100 |
# File 'lib/postgres_ext/active_record/relation/query_methods.rb', line 97 def ranked!(*args) self.rank_values += args self end |
#with(*args) ⇒ Object
83 84 85 86 |
# File 'lib/postgres_ext/active_record/relation/query_methods.rb', line 83 def with(*args) check_if_method_has_arguments!('with', args) spawn.with!(*args.compact.flatten) end |
#with!(*args) ⇒ Object
88 89 90 91 |
# File 'lib/postgres_ext/active_record/relation/query_methods.rb', line 88 def with!(*args) self.with_values += args self end |