remove_method возвращает неопределенную ошибку метода для модуля
Попытка выяснить, как удалить методы из базового класса из включенного класса.
Так что в основном у меня есть следующий код
module Veeqo
class ResourceActions < Module
attr_reader :options
def initialize(options = {})
@options = options
define_singleton_method :_options do
options
end
end
def included(base)
base.extend(ClassMethods)
options[:disable] ||= []
delete_methods = ClassMethods.public_instance_methods & options[:disable]
delete_methods.each { |name| base.send(:remove_method, name) }
# This is a line where I get an error:
# NameError: undefined method `destroy_all' for module `#<#<Class:0x007fc95e8980a8>:0x007fc95e8981c0>'
end
module ClassMethods
def all(params = {})
get path.build, params
end
def find(resource_id, params = {})
raise ArgumentError if resource_id.nil?
get path.build(resource_id), params
end
def create(params = {})
post path.build, params
end
def update(resource_id, params = {})
raise ArgumentError if resource_id.nil?
put path.build(resource_id), params
end
def destroy(resource_id, params = {})
raise ArgumentError if resource_id.nil?
delete path.build(resource_id), params
end
def enumerable(**params)
Enumerator.new do |yielder|
connection = params.delete(:connection)
params[:page] ||= 1
loop do
yielder << all(params.merge(connection: connection))
params[:page] += 1
end
end
end
def destroy_all(params = {})
delete path.build, params
end
end
end
end
Я использую эту структуру следующим образом (просто включаю ее везде, где она мне нужна):
include Veeqo::ResourceActions.new(uri: 'channels/%d', disable: [:destroy_all])
Если я позвоню base.methods
Я могу найти там destroy_all
метод.
Поэтому мой вопрос - найти способ разрешить это странное поведение.
Было бы замечательно, если бы кто-нибудь сказал мне, что я делаю здесь неправильно, потому что у меня сейчас нет идей.
Большое спасибо:)