Skip to content

Commit

Permalink
Merge pull request #934 from nanoc/gh-932-filter-define-assigns
Browse files Browse the repository at this point in the history
Fix assigns in filters defined with Filter.define
  • Loading branch information
denisdefreyne committed Aug 22, 2016
2 parents 4fb4eec + 0253037 commit 74aafea
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 10 deletions.
4 changes: 2 additions & 2 deletions lib/nanoc/base/compilation/filter.rb
Expand Up @@ -38,10 +38,10 @@ class Filter < Nanoc::Int::Context
extend Nanoc::Int::PluginRegistry::PluginMethods

class << self
def define(ident)
def define(ident, &block)
filter_class = Class.new(::Nanoc::Filter) { identifier(ident) }
filter_class.send(:define_method, :run) do |content, params|
yield(content, params)
instance_exec(content, params, &block)
end
end

Expand Down
38 changes: 30 additions & 8 deletions spec/nanoc/base/filter_spec.rb
@@ -1,17 +1,39 @@
describe Nanoc::Filter do
describe '.define' do
before do
Nanoc::Filter.define(:nanoc_filter_define_sample) do |content, _params|
content.upcase
context 'simple filter' do
let(:filter_name) { 'b5355bbb4d772b9853d21be57da614dba521dbbb' }
let(:filter_class) { Nanoc::Filter.named(filter_name) }

before do
Nanoc::Filter.define(filter_name) do |content, _params|
content.upcase
end
end
end

it 'defines a filter' do
expect(Nanoc::Filter.named(:nanoc_filter_define_sample)).not_to be_nil
it 'defines a filter' do
expect(filter_class).not_to be_nil
end

it 'defines a callable filter' do
expect(filter_class.new.run('foo', {})).to eql('FOO')
end
end

it 'defines a callable filter' do
expect(Nanoc::Filter.named(:nanoc_filter_define_sample).new.run('foo', {})).to eql('FOO')
context 'filter that accesses assigns' do
let(:filter_name) { 'd7ed105d460e99a3d38f46af023d9490c140fdd9' }
let(:filter_class) { Nanoc::Filter.named(filter_name) }
let(:filter) { filter_class.new(assigns) }
let(:assigns) { { animal: 'Giraffe' } }

before do
Nanoc::Filter.define(filter_name) do |_content, _params|
@animal
end
end

it 'can access assigns' do
expect(filter.setup_and_run(:__irrelevant__, {})).to eq('Giraffe')
end
end
end
end

0 comments on commit 74aafea

Please sign in to comment.