module SocialShares

Constants

SUPPORTED_NETWORKS
VERSION

Public Class Methods

all(url) click to toggle source
# File lib/social_shares.rb, line 76
def all(url)
  selected(url, SUPPORTED_NETWORKS)
end
all!(url) click to toggle source
# File lib/social_shares.rb, line 80
def all!(url)
  selected!(url, SUPPORTED_NETWORKS)
end
config=(val) click to toggle source
# File lib/social_shares.rb, line 24
def config=(val)
  SocialShares::Base.config = val
end
has_any?(url, selected_networks = SUPPORTED_NETWORKS) click to toggle source
# File lib/social_shares.rb, line 88
def has_any?(url, selected_networks = SUPPORTED_NETWORKS)
  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/social_shares.rb, line 60
def omit(url, excluded_networks = [])
  selected_base(url, supported_networks.map(&:to_s) - excluded_networks.map(&:to_s), false)
end
omit!(url, excluded_networks = []) click to toggle source
# File lib/social_shares.rb, line 64
def omit!(url, excluded_networks = [])
  selected_base(url, supported_networks.map(&:to_s) - excluded_networks.map(&:to_s), true)
end
selected(url, selected_networks) click to toggle source
# File lib/social_shares.rb, line 68
def selected(url, selected_networks)
  selected_base(url, selected_networks, false)
end
selected!(url, selected_networks) click to toggle source
# File lib/social_shares.rb, line 72
def selected!(url, selected_networks)
  selected_base(url, selected_networks, true)
end
supported_networks() click to toggle source
# File lib/social_shares.rb, line 44
def supported_networks
  SUPPORTED_NETWORKS
end
total(url, selected_networks = SUPPORTED_NETWORKS) click to toggle source
# File lib/social_shares.rb, line 84
def total(url, selected_networks = SUPPORTED_NETWORKS)
  selected!(url, selected_networks).values.reduce(:+)
end

Private Class Methods

filtered_networks(selected_networks) click to toggle source
# File lib/social_shares.rb, line 110
def filtered_networks(selected_networks)
  selected_networks.map(&:to_s) & SUPPORTED_NETWORKS.map(&:to_s)
end
selected_base(url, selected_networks, with_exception) click to toggle source
# File lib/social_shares.rb, line 118
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/social_shares.rb, line 114
def thread_pool(lambdas)
  lambdas.map { |l| Thread.new { l.call } }
end