Skip to content

Commit

Permalink
Merge pull request #522 from aldrinmartoq/ransacker-arguments-sort
Browse files Browse the repository at this point in the history
Ransacker arguments sort
  • Loading branch information
jonatack committed Nov 18, 2015
2 parents 06a3a99 + e7ef1ef commit 899618e
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/ransack/nodes/sort.rb
Expand Up @@ -3,7 +3,7 @@ module Nodes
class Sort < Node
include Bindable

attr_reader :name, :dir
attr_reader :name, :dir, :ransacker_args
i18n_word :asc, :desc

class << self
Expand All @@ -16,7 +16,7 @@ def extract(context, str)

def build(params)
params.with_indifferent_access.each do |key, value|
if key.match(/^(name|dir)$/)
if key.match(/^(name|dir|ransacker_args)$/)
self.send("#{key}=", value)
end
end
Expand Down Expand Up @@ -45,6 +45,10 @@ def dir=(dir)
end
end

def ransacker_args=(ransack_args)
@ransacker_args = ransack_args
end

end
end
end
31 changes: 31 additions & 0 deletions spec/ransack/adapters/active_record/base_spec.rb
Expand Up @@ -378,6 +378,37 @@ def self.simple_escaping?
)
expect { s.result.first }.to_not raise_error
end

it 'should allow search and sort passing ransacker arguments to a ransacker' do
s = Person.ransack(
c: [{
a: {
'0' => {
name: 'with_passed_arguments',
ransacker_args: [10, 100]
}
},
p: 'cont',
v: ['Rails has been released']
}],
s: {
'0' => {
name: 'with_passed_arguments',
dir: 'asc',
ransacker_args: [10, 100]
}
}
)
expect(s.result.to_sql).to match(
/CHAR_LENGTH\(articles.body\) BETWEEN 10 AND 100/
)
expect(s.result.to_sql).to match(
/LIKE \'\%Rails has been released\%\'/
)
expect(s.result.to_sql).to match(
/ORDER BY \(SELECT.*CHAR_LENGTH\(articles.body\) BETWEEN 10 AND 100/
)
end
end

describe '#ransackable_attributes' do
Expand Down

0 comments on commit 899618e

Please sign in to comment.