Sha256: c9591eeaf594eb742a8b465f9c8c0bb7ecc8e48adc2c3f9fbf142dd8625b13ad

Contents?: true

Size: 854 Bytes

Versions: 2

Compression:

Stored size: 854 Bytes

Contents

# frozen_string_literal: true

module Mcoin
  class Subscriber
    attr_reader :markets, :pairs

    def initialize(pairs = nil, markets = Market.available)
      @pairs = pairs_from(pairs)
      @markets = markets_from(markets)
    end

    def start(interval = 1, &block)
      loop do
        Parallel.async(@markets, :fetch) do |result|
          result.to_ticker.each do |ticker|
            yield ticker
          end
        end

        sleep interval
      end
    end

    protected

    def pairs_from(picked)
      @pairs ||= (picked || ['BTC-USD']).uniq.map do |pair|
        pair.split('-').map(&:to_sym)
      end
    end

    def markets_from(picked)
      picked.map do |name|
        market = Market.pick(name).new
        pairs.map do |pair|
          market.watch(*pair)
        end
        market
      end.flatten
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mcoin-0.6.1 lib/mcoin/subscriber.rb
mcoin-0.6.0 lib/mcoin/subscriber.rb