метод класса ruby ​​с декоратором - PullRequest
0 голосов
/ 16 января 2019

Я хочу иметь отдельные классы с instant_method и class_method следующим образом:

module ObjReviewModule  ## common methods module
  def own_methods(obj_)
    ruby_methods = " ".methods & 1.methods
    (obj_.methods - ruby_methods).map { |x| x.to_s }
  end

  def specific_methods(obj_,existing_=[])
    self.own_methods(obj_).select { |x| !existing_.include?(x) }
  end
end

class ObjReviewMethod ## instance_method 
  include ObjReviewModule 

  def get_(obj_)
    own_methods(obj_).select { |x| x.start_with?("get") }
  end

  def to_(obj_)
    own_methods(obj_).select{ |x| x.start_with?("to_") }
  end
end

class ObjList < OsObjReviewMethod ## class_method 
  extend ObjReviewModule

  def self.get_methods(obj_)
    # something should be here to make OsObjReviewMethod instance_method became class_method
  end
end

Я получил ObjReviewMethod работал

object_methods = ObjReviewMethod.new
object_methods.get_(obj_) => get "own_methods" start with "get" using instance_class_method
ObjList.own_methods(obj_) => get "own_methods" with class_method

но я не мог понять, как получить class_method без переписывания всех определений:

ObjList.get_methods(obj_) => get all "own_methods" start with "get" using class_method

Было бы идеально, если бы класс декоратора мог использовать все instance_method базового класса как class_method

1 Ответ

0 голосов
/ 16 января 2019

Есть решения, как показано ниже

module ObjReviewModule  ## common methods module
  def own_methods(obj_)
    ruby_methods = " ".methods & 1.methods
    (obj_.methods - ruby_methods).map { |x| x.to_s }
  end

  def specific_methods(obj_,existing_=[])
    self.own_methods(obj_).select { |x| !existing_.include?(x) }
  end
end

module ObjReviewMethod 
  include ObjReviewModule 
  def get_(obj_)
    own_methods(obj_).select { |x| x.start_with?("get") }
  end
  def to_(obj_)
    own_methods(obj_).select{ |x| x.start_with?("to_") }
  end
end

class ObjList ## class_method 
  extend ObjReviewModule
  extend ObjReviewMethod
end

class ObjReview ## instance_method 
  include ObjReviewModule
  include ObjReviewMethod
end
...