I'm writing an acts_as_thingy
module, intended to be used as per
class TestThingy
include ActsAsThingy
acts_as_thingy :name
end
ActsAsThingy
is defined as
module ActsAsThingy
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def acts_as_thingy *attributes
attributes.each do |attribute|
define_method attribute do
"thingy - #{attribute.to_s}"
end
end
end
end
end
And tested as
describe ActsAsReadOnlyI18nLocalised do
let(:thingy) { TestThingy.new }
it 'has a name method' do
expect(thingy.name).to eq "thingy - name"
end
end
What happens however is that, when I run the rspec
, ActsAsThingy
's self.included
method is never invoked, and rspec
complains that there is no such method as acts_as_thingy
.
I seem to be missing something entirely obvious, but just can't see it.
Why isn't the self.included
method being called when I include ActsAsThingy
in the class?
update
Stepping through with pry
I can see that after the include ActsAsThingy
, if I then look at self.included_modules
it shows up as [ActsAsThingy, PP::ObjectMixin, Kernel]
So the include
is working, it's not a paths issue or anything like that. The core question remains; why isn't self.included
being invoked?