在破折号中组合来自多个作业的数据

时间:2015-06-17 07:32:59

标签: dashing

我有Dashing工作,现在想添加一些'组合'小部件。

这样一个小工具可以添加来自(例如)Facebook和Twitter的数字。我还有两个独立的小部件,一个用于Facebook,另一个用于Twitter。

我可以创建一个名为twitter+facebook.rb的作业,这样可以解决问题,但我现在想添加第三个和第四个来源。我不希望最终得到一个大型工作文件,但twitter.rbgoogle-analytics.rb以及facebook.rbmailcimp.rb等与(例如){{ 1}}。

是否可以在作业之间传递值?

2 个答案:

答案 0 :(得分:1)

我目前在Dashing中没有看到派生值的方法。

现在实现此目的的一种方法是使用猴子修补send_event来计算派生值。定义了特定于源的作业后,添加一个用于计算组合数据的作业,如下所示:

# List of event ids you use to compute the combined value
INPUT_VALUES=%w(facebook_likes twitter_followers)

# This method is run when one of INPUT_VALUES changes
def compute_combined_social(values)
  value = values['facebook_likes']['current'] +
    values['twitter_followers']['current']
  send_event('social-combined', {current: value})
end

# Hook send_event to update aggregates when depending values change
alias :orig_send_event :send_event
def send_event(id, body, target=nil)
  r = orig_send_event(id, body, target)
  if INPUT_VALUES.include? id
    # get current value for each input value
    values = Hash[INPUT_VALUES.map do |id|
      [id, YAML.load(Sinatra::Application.settings.history[id])['data']]
    end]
    compute_combined_social values
  end
  r
end

如果有足够的兴趣,那么为Dashing本身添加更通用的解决方案会很有用。

答案 1 :(得分:1)

您可以创建一个窗口小部件,用于绑定来自两个源的数据,并将其组合在表示层中。