Sha256: b0d9c70ca676384c933448d7a03bd84c64532fb11ef796b52a297cbe5d272bcd
Contents?: true
Size: 1.33 KB
Versions: 3
Compression:
Stored size: 1.33 KB
Contents
module Smoke # The "Joiner" source is a special source # that can be used to join multiple sources together # and proxy call dispatch for each source # # Usage: # Smoke.join(:delicious, :twitter, :flickr) do # path :photos, :photo # end class Join < Origin # :nodoc: def initialize(names, &block) @names = names super((names << "joined").join("_").to_sym, &block) end # Rename sources immediately after they've been joined together # Usage: # Smoke.join(:delicious, :twitter, :flickr) do # name :web_stream # end def name(rename = nil) return @name if rename.nil? Smoke.rename(@name => rename) end def method_missing(symbol, *args, &block) ivar = "@#{symbol}" unless args.empty? sources.each do |source| source.last.instance_variable_set(ivar, args.last) end end return self end protected def sources Smoke.active_sources.find_all{|k, v| @names.include?(k) } end def dispatch # Recall dispatch sources.each do |source| source.last.send(:prepare!) source.last.send(:dispatch) if source.last.respond_to?(:dispatch) end # Re-map items @items = sources.map {|source| source.last.items }.flatten end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
smoke-0.5.20 | lib/smoke/source/join.rb |
smoke-0.5.19 | lib/smoke/source/join.rb |
smoke-0.5.17 | lib/smoke/source/join.rb |