红宝石重构与块

时间:2013-12-25 09:13:42

标签: ruby refactoring block

我想重构这段代码片段,因为我们可以看到这里有很多重复。我们可以使用块重构来重构下面给出的代码。

module Jobs
  SendTrackEvent = Struct.new(:user_id, :event, :properties) do
    include A
    include B
    def perform
      @tracker ||= Tracker.new(Settings.key)
      @tracker.track(user_id, event, properties)
    end
  end

  SendAliasEvent = Struct.new(:new_distinct_id, :original_anonymous_id) do
    include A
    include B
    def perform
      @tracker ||= Tracker.new(Settings.key)
      @tracker.track(new_distinct_id, original_anonymous_id)
    end
  end
end

由于

1 个答案:

答案 0 :(得分:1)

这个答案已被删除了一段时间,以确定是否是OP的草率使代码变得复杂;否则,将需要一个不同的解决方案。 OP最终(在被指出后四十分钟,尽管在线)明确了,并解决了问题,所以这个答案又回来了。

module Jobs
  def self.create_struct(*args) do
    Struct.new(*args) do
      include A
      include B
      def perform
        @tracker ||= Tracker.new(Settings.key)
        @tracker.track(*args.map{|sym| send(sym)})
      end
    end
  end
  SendTrackEvent = create_struct(:user_id, :event, :properties)
  SendAliasEvent = create_struct(:new_distinct_id, :original_anonymous_id)
end