Skip to content

Commit

Permalink
Merge pull request #304 from kbrock/order_fixes
Browse files Browse the repository at this point in the history
only use coalesce for rails 5.0+
  • Loading branch information
kbrock committed Nov 1, 2016
2 parents a683081 + 3f1d017 commit 7264031
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
10 changes: 6 additions & 4 deletions lib/ancestry/has_ancestry.rb
Expand Up @@ -44,17 +44,19 @@ def has_ancestry options = {}
scope :subtree_of, lambda { |object| where(to_node(object).subtree_conditions) }
scope :siblings_of, lambda { |object| where(to_node(object).sibling_conditions) }
scope :ordered_by_ancestry, lambda {
if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase)
if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase) &&
defined?(ActiveRecord.version) && ActiveRecord.version.to_s >= "5"
reorder("coalesce(#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, '')")
else
reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, #{order}")
reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}")
end
}
scope :ordered_by_ancestry_and, lambda { |order|
if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase)
if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase) &&
defined?(ActiveRecord.version) && ActiveRecord.version.to_s >= "5"
reorder("coalesce(#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, ''), #{order}")
else
reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}")
reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, #{order}")
end
}
scope :path_of, lambda { |object| to_node(object).path }
Expand Down
4 changes: 3 additions & 1 deletion test/concerns/default_scopes_test.rb
Expand Up @@ -17,6 +17,8 @@ def test_node_excluded_by_default_scope_should_still_move_with_parent
child.update_attributes :deleted_at => nil

assert child.reload.ancestors.include? new_grandparent
assert_equal new_grandparent, child.reload.ancestors.first
assert_equal parent, child.reload.ancestors.last
end
end

Expand Down Expand Up @@ -53,4 +55,4 @@ def test_node_excluded_by_default_scope_should_be_rootified
assert child.reload.is_root?
end
end
end
end

0 comments on commit 7264031

Please sign in to comment.