I want to dynamically include all modules within a certain folder into this other module. My code is as follows:
module Extensions
module ProductExtension
def add_included_extensions
extensions = Pathname.glob("lib/extensions/merchant/*.rb")
.map(&:basename)
.collect{|x|
x.to_s.gsub(".rb", "")
.titleize.gsub(" ","")
}
extensions.each do |merchant|
include "Extensions::MerchantExtensions::#{merchant}".constantize
end
end
def add_items
add_included_extensions
Merchant.all.each do |merchant|
send("add_#{merchant.name.downcase}_items")
end
end
end
end
However it doesn't seem to be actually including the files because when I call the send method, it says the method it's calling doesn't exist. Any idea what I could be doing wrong?
The problem is you include your modules inside instance methods, so they are not included in the class.
Try:
self.class.send(:include, "Extensions::MerchantExtensions::#{merchant}".constantize)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With