传递设置为 method_missing(mixpanel)

Passing set to method_missing (mixpanel)

我目前正在为我们的服务设置混合面板并且一切正常,但是如果在 development/test 环境中,我想将混合面板作为 method_missing 传递。

我的application_controller.rb里有这个:

before_filter :initialize_mixpanel

def initialize_mixpanel
  if ENV.has_key?('MIXPANEL_PROJECT_TOKEN')
    @tracker = Mixpanel::Tracker.new('MIXPANEL_PROJECT_TOKEN', request.env)
  else
    @tracker = DummyMixpanel.new
  end
end

这是我的 mixpanel.rb:

unless ENV.has_key?('MIXPANEL_PROJECT_TOKEN')
  class DummyMixpanel
    def method_missing(m, *args, &block)
      true
    end
  end
end

这适用于像@tracker.track(..但是当试图将 .set 方法传递给它时,它 returns NoMethodError: undefined method `set'对于 true:TrueClass 例如使用此代码:

@tracker.people.set(current_subscriber.id, {
  '$name'             => current_subscriber.name,
  '$email'            => current_subscriber.email,
  '$hometown'       => current_subscriber.hometown,
  '$birth_year'            => current_subscriber.birth_year,
}, ip=current_subscriber.ip);

我该如何最好地处理这个问题?

祝一切顺利,

尝试在 #method_missing 中返回 self,例如:

class DummyMixpanel
  def method_missing(m, *args, &block)
    self
  end
end

更多信息:http://devblog.avdi.org/2011/05/30/null-objects-and-falsiness/