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 метод.

Поэтому мой вопрос - найти способ разрешить это странное поведение.

Было бы замечательно, если бы кто-нибудь сказал мне, что я делаю здесь неправильно, потому что у меня сейчас нет идей.

Большое спасибо:)

0 ответов

Другие вопросы по тегам