Skip to content

Commit

Permalink
refactors filter class
Browse files Browse the repository at this point in the history
  • Loading branch information
AlessioRocco committed Feb 2, 2014
1 parent c60ecb4 commit 24c759a
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 23 deletions.
30 changes: 15 additions & 15 deletions lib/moonshine/filter.rb
Original file line number Diff line number Diff line change
@@ -1,40 +1,40 @@
module Moonshine
class Filter

attr_accessor :name, :method_name, :transform, :default, :as_boolean
attr_accessor :name, :method_name, :options, :klass

def initialize(name, method_name: nil, transform: nil, default: nil, as_boolean: nil, &block)
def initialize(name, method_name: nil, **options, &block)
@name = name
@method_name = method_name || block
@transform = transform
@default = default
@as_boolean = as_boolean
@method_name = block || method_name
@options = options
end

def execute(klass)
unless as_boolean
args = set_transform(klass, set_default(klass.filters[name]))
end
return method_call(klass, args) if klass.filters[name] || default
@klass = klass
return method_call if klass.filters[name] || options[:default]
klass.subject
end

private

def method_call(klass, *args)
def method_call
if method_name.is_a? Proc
method_name.call(klass, *args)
method_name.call(klass.subject, *args)
else
klass.subject.send(method_name, *args)
end
end

def args
set_transform(set_default(klass.filters[name])) unless options[:as_boolean]
end

def set_default value
value || default
value || options[:default]
end

def set_transform klass, value
return klass.send(transform, value) if transform
def set_transform value
return klass.send(options[:transform], value) if options[:transform]
value
end
end
Expand Down
16 changes: 8 additions & 8 deletions test/lib/moonshine/filter_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
end

it 'return subject when default and value are nil' do
filter.default = nil
filter.options[:default] = nil
chain_builder_instance.filters = {}
filter.execute(chain_builder_instance).must_equal chain_builder_instance.subject
end
Expand All @@ -32,15 +32,15 @@
block = Proc.new { |subject, value| subject.some_method(value) }
filter = Moonshine::Filter.new(:filter, &block)
chain_builder_instance = @chain_builder.new({ filter: 1 })
filter.method_name.expects(:call)
filter.method_name.expects(:call).with(chain_builder_instance.subject, 1)
filter.execute(chain_builder_instance)
end
end

describe 'options' do
describe 'transform' do
it 'changes value with transform method from klass' do
filter.transform = :transform_method
filter.options[:transform] = :transform_method
chain_builder_instance.subject.stubs(:filter)
chain_builder_instance.expects(:transform_method).with(1)
filter.execute(chain_builder_instance)
Expand All @@ -49,21 +49,21 @@

describe 'default' do
it 'uses default value if filter is nil' do
filter.default = 2
filter.options[:default] = 2
chain_builder_instance.filters = {}
chain_builder_instance.subject.expects(:filter).with(2)
filter.execute(chain_builder_instance)
end

it 'not use default value if filter is not nil' do
filter.default = 2
filter.options[:default] = 2
chain_builder_instance.filters = { filter: 1 }
chain_builder_instance.subject.expects(:filter).with(1)
filter.execute(chain_builder_instance)
end

it 'not sends filter if default and value are nil' do
filter.default = nil
filter.options[:default] = nil
chain_builder_instance.filters = {}
chain_builder_instance.subject.expects(:filter).never
filter.execute(chain_builder_instance)
Expand All @@ -72,14 +72,14 @@

describe 'as_boolean' do
it 'sends method without value when true' do
filter.as_boolean = true
filter.options[:as_boolean] = true
chain_builder_instance.filters = { filter: true }
chain_builder_instance.subject.expects(:filter)
filter.execute(chain_builder_instance)
end

it 'sends method without value when false' do
filter.as_boolean = true
filter.options[:as_boolean] = true
chain_builder_instance.filters = { filter: false }
chain_builder_instance.subject.expects(:filter).never
filter.execute(chain_builder_instance)
Expand Down

0 comments on commit 24c759a

Please sign in to comment.