module ShareCount

Constants

NETWORK_LIST

Public Instance Methods

all(url) click to toggle source
# File lib/share_count.rb, line 52
def all(url)
  selected(url, NETWORK_LIST)
end
all!(url) click to toggle source
# File lib/share_count.rb, line 55
def all!(url)
  selected!(url, NETWORK_LIST)
end
config=(val) click to toggle source
# File lib/share_count.rb, line 15
def config=(val)
  ShareCount::Base.config = val
end
has_any?(url, selected_networks = NETWORK_LIST) click to toggle source
# File lib/share_count.rb, line 61
def has_any?(url, selected_networks = NETWORK_LIST)
  lambdas = filtered_networks(selected_networks).map do |network_name|
    -> {self.send("#{network_name}!", url)}
  end
  pool = thread_pool(lambdas)
  found = false
  while !pool.empty? && !found
    sleep 0.05
    if thread = pool.find(&:stop?)
      if thread.value > 0
        pool.each(&:kill)
        found = true
      else
        pool.delete(thread)
      end
    end
  end
  found
end
omit(url, excluded_networks = []) click to toggle source
# File lib/share_count.rb, line 40
def omit(url, excluded_networks = [])
  selected_base(url, NETWORK_LIST.map(&:to_s) - excluded_networks.map(&:to_s), false)
end
omit!(url, excluded_networks = []) click to toggle source
# File lib/share_count.rb, line 43
def omit!(url, excluded_networks = [])
  selected_base(url, NETWORK_LIST.map(&:to_s) - excluded_networks.map(&:to_s), true)
end
selected(url, selected_networks) click to toggle source
# File lib/share_count.rb, line 46
def selected(url, selected_networks)
  selected_base(url, selected_networks, false)
end
selected!(url, selected_networks) click to toggle source
# File lib/share_count.rb, line 49
def selected!(url, selected_networks)
  selected_base(url, selected_networks, true)
end
supported_networks() click to toggle source
# File lib/share_count.rb, line 27
def supported_networks
  NETWORK_LIST
end
total(url, selected_networks = NETWORK_LIST) click to toggle source
# File lib/share_count.rb, line 58
def total(url, selected_networks = NETWORK_LIST)
  selected!(url, selected_networks).values.reduce(:+)
end

Private Instance Methods

filtered_networks(selected_networks) click to toggle source
# File lib/share_count.rb, line 81
def filtered_networks(selected_networks)
  selected_networks.map(&:to_s) & NETWORK_LIST.map(&:to_s)
end
selected_base(url, selected_networks, with_exception) click to toggle source
# File lib/share_count.rb, line 87
def selected_base(url, selected_networks, with_exception)
  lambdas = filtered_networks(selected_networks).map do |network_name|
    method_name = with_exception ? "#{network_name}!" : network_name
    -> {{network_name => self.send(method_name, url)}}
  end
  thread_pool(lambdas).reduce({}) do |result, thread|
    thread.join
    result.merge(thread.value)
  end
end
thread_pool(lambdas) click to toggle source
# File lib/share_count.rb, line 84
def thread_pool(lambdas)
  lambdas.map { |l| Thread.new { l.call } }
end