Skip to content

Commit

Permalink
Merge pull request #562 from hoshitocat/fixed/let-attributes-use-and-or
Browse files Browse the repository at this point in the history
Fix handling attribute-name with `_and_` `_or_`
  • Loading branch information
jonatack committed Jul 12, 2015
2 parents 91354e9 + 9927d99 commit 3a3f8a3
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 9 deletions.
10 changes: 7 additions & 3 deletions lib/ransack/nodes/condition.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class Condition < Node

class << self
def extract(context, key, values)
attributes, predicate = extract_attributes_and_predicate(key)
attributes, predicate = extract_attributes_and_predicate(key, context)
if attributes.size > 0 && predicate
combinator = key.match(/_(or|and)_/) ? $1 : nil
condition = self.new(context)
Expand All @@ -31,14 +31,18 @@ def extract(context, key, values)

private

def extract_attributes_and_predicate(key)
def extract_attributes_and_predicate(key, context = nil)
str = key.dup
name = Predicate.detect_and_strip_from_string!(str)
predicate = Predicate.named(name)
unless predicate || Ransack.options[:ignore_unknown_conditions]
raise ArgumentError, "No valid predicate for #{key}"
end
attributes = str.split(/_and_|_or_/)
if context.present? && context.attribute_method?(str)
attributes = [str]
else
attributes = str.split(/_and_|_or_/)
end
[attributes, predicate]
end
end
Expand Down
7 changes: 1 addition & 6 deletions spec/ransack/adapters/active_record/base_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -231,14 +231,9 @@ def self.sane_adapter?
end

it "should function correctly when an attribute name has 'and' in it" do
# FIXME: this test does not pass!
p = Person.create!(:terms_and_conditions => true)
s = Person.ransack(:terms_and_conditions_eq => true)
# search is not detecting the attribute
puts "
FIXME: Search not detecting the `terms_and_conditions` attribute in
base_spec.rb, line 178: #{s.result.to_sql}"
# expect(s.result.to_a).to eq [p]
expect(s.result.to_a).to eq [p]
end

it 'allows sort by "only_sort" field' do
Expand Down

0 comments on commit 3a3f8a3

Please sign in to comment.