social_shares 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b30b6f300dea16a77d0c94336c2d6d702db679f
4
- data.tar.gz: 6a66438d21a2ed96e9edb06c8b9993c6358407e1
3
+ metadata.gz: 3dc59d3b27ca52593a5640de7644553809b04c28
4
+ data.tar.gz: 0dce44440e73dbf90c362d5e99fc4c4e143199d7
5
5
  SHA512:
6
- metadata.gz: b7382f31c5ecea6af8b42a229ab6eb7e94d637304737cc32b4c314f94dc1ecd1a2b487d7df14d3c68066671a90056497f094485643296123e33186c7cc1a418a
7
- data.tar.gz: 0d2572ae7a55547f5958153765f7d49abe2d430a5c66b537b48eb498757e1f4d5696966ea2341edc1e858c684e4d21888068ceb062f7721289e671a2e7c96457
6
+ metadata.gz: 20a1613a06450ef62ad2b504f0fd84653c97d769fb12663a70a399e517f3c35b6882e8daac00a5e880c1809197511975e64e7c96f0d933939f51d1aa28b03bc2
7
+ data.tar.gz: 0708c973883b1f4aa6249333b3a8f52922d548ebc2a1e1aebf4473d4b52636ccb2b772d4818a2e802f9397c3eb11a85bf28c424e60218b994530e3e90add619b
data/lib/social_shares.rb CHANGED
@@ -49,17 +49,11 @@ module SocialShares
49
49
  end
50
50
 
51
51
  def selected(url, selected_networks)
52
- filtered_networks(selected_networks).inject({}) do |result, network_name|
53
- result[network_name] = self.send(network_name, url)
54
- result
55
- end
52
+ selected_base(url, selected_networks, false)
56
53
  end
57
54
 
58
55
  def selected!(url, selected_networks)
59
- filtered_networks(selected_networks).inject({}) do |result, network_name|
60
- result[network_name] = self.send("#{network_name}!", url)
61
- result
62
- end
56
+ selected_base(url, selected_networks, true)
63
57
  end
64
58
 
65
59
  def all(url)
@@ -75,7 +69,23 @@ module SocialShares
75
69
  end
76
70
 
77
71
  def has_any?(url, selected_networks = SUPPORTED_NETWORKS)
78
- !filtered_networks(selected_networks).find{|n| self.send("#{n}!", url) > 0}.nil?
72
+ lambdas = filtered_networks(selected_networks).map do |network_name|
73
+ -> {self.send("#{network_name}!", url)}
74
+ end
75
+ pool = thread_pool(lambdas)
76
+ found = false
77
+ while !pool.empty? && !found
78
+ sleep 0.05
79
+ if thread = pool.find(&:stop?)
80
+ if thread.value > 0
81
+ pool.each(&:kill)
82
+ found = true
83
+ else
84
+ pool.delete(thread)
85
+ end
86
+ end
87
+ end
88
+ found
79
89
  end
80
90
 
81
91
  private
@@ -83,5 +93,20 @@ module SocialShares
83
93
  def filtered_networks(selected_networks)
84
94
  selected_networks.map(&:to_sym) & SUPPORTED_NETWORKS
85
95
  end
96
+
97
+ def thread_pool(lambdas)
98
+ lambdas.map { |l| Thread.new { l.call } }
99
+ end
100
+
101
+ def selected_base(url, selected_networks, with_exception)
102
+ lambdas = filtered_networks(selected_networks).map do |network_name|
103
+ method_name = with_exception ? "#{network_name}!" : network_name
104
+ -> {{network_name => self.send(method_name, url)}}
105
+ end
106
+ thread_pool(lambdas).reduce({}) do |result, thread|
107
+ thread.join
108
+ result.merge(thread.value)
109
+ end
110
+ end
86
111
  end
87
112
  end
@@ -1,3 +1,3 @@
1
1
  module SocialShares
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_shares
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timur Kozmenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-29 00:00:00.000000000 Z
11
+ date: 2014-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client