virility 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/Gemfile +1 -1
- data/README.md +22 -16
- data/lib/virility.rb +11 -11
- data/lib/virility/excitation.rb +9 -3
- data/lib/virility/strategies/facebook.rb +10 -6
- data/lib/virility/strategies/reddit.rb +1 -1
- data/lib/virility/strategy.rb +5 -3
- data/lib/virility/version.rb +1 -1
- data/spec/spec_helper.rb +1 -2
- data/spec/strategies/facebook_spec.rb +12 -9
- data/spec/virility_spec.rb +14 -5
- data/virility.gemspec +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c8799af103e961664e0393019343a6f252d4979
|
4
|
+
data.tar.gz: 2037f8bfc2e346a761811d17187e886a79d14766
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31b0b31c579607b0bb3002320e9e2968dbd335e2f4236619f7838158d9449c4ed27ccbf08031d652a3aaf8da26e26ddd53cd3154e77cad313590d61468717d8f
|
7
|
+
data.tar.gz: a2c111329aaa518ef6ee97c15d0c129cdd72825327a42a5aefb133097dfae98f813a99d54a84b8fcd69ab267a9b6341c2f2f26331fa40c42e99bfa760d6ce4d5
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.3
|
1
|
+
ruby-2.3
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -23,7 +23,7 @@ Or install it yourself as:
|
|
23
23
|
If all you need is the raw shares numbers for a URL, Virility has some very simple methods you can use right out of the box:
|
24
24
|
|
25
25
|
Virility.poll("http://rubygems.org") # => Returns a hash with the collected results from all of the social network strategies
|
26
|
-
Virility.counts("http://rubygems.org") # => {:
|
26
|
+
Virility.counts("http://rubygems.org") # => {:facebook=>72, :pinterest=>0, :plus_one=>138, :stumble_upon=>1488, :reddit=>2322, :linkedin => 7}
|
27
27
|
Virility.total("http://rubygems.org") # => 4020
|
28
28
|
Virility.url("http://rubygems.org") # => Returns a Virility::Excitation object that you can manipulate
|
29
29
|
|
@@ -54,17 +54,23 @@ There are several ways you can access the object for an individual strategy.
|
|
54
54
|
|
55
55
|
The Virility object has a __factory__ method that will return the strategy object:
|
56
56
|
|
57
|
-
|
57
|
+
reddit = Virility.factory(:reddit, "http://rubygems.org") # => returns a Virility::Reddit object with the rubygems url
|
58
58
|
|
59
59
|
You can also instate the Virility::Reddit object directly:
|
60
60
|
|
61
|
-
|
61
|
+
reddit = Virility::Reddit.new("http://rubygems.org")
|
62
62
|
|
63
63
|
#### Ignoring Strategies
|
64
64
|
|
65
65
|
Thanks to (Storyful)[https://github.com/storyful/virility], it is now possible to specify which strategies you want to use when initializing the Excitation object. Simply pass in an array of identifiers when creating the object and only those strategies will be implemented. The default is to use all available strategies.
|
66
66
|
|
67
|
-
Virility.poll("http://rubygems.org",[:facebook,:linkedin,:pinterest])
|
67
|
+
Virility.poll("http://rubygems.org",strategies: [:facebook,:linkedin,:pinterest])
|
68
|
+
|
69
|
+
#### Using Proxy Server
|
70
|
+
|
71
|
+
It is now possible to specify the ip address of a proxy server to utilise whilst performing the call
|
72
|
+
|
73
|
+
Virility.poll("http://rubygems.org", proxy: { http_proxyaddr: '192.168.0.23', http_proxyport: 8888 } )
|
68
74
|
|
69
75
|
#### Individual Usage Example
|
70
76
|
|
@@ -79,15 +85,15 @@ Let's say you only need to get the number of tweets for a URL, you could use the
|
|
79
85
|
|
80
86
|
fb = Virility::Facebook.new("http://rubygems.org")
|
81
87
|
fb.poll # returns a hash with the collected output from Facebook
|
82
|
-
fb.count # returns the
|
88
|
+
fb.count # returns the engagement_count for that URL
|
83
89
|
|
84
|
-
The Facebook strategy leverages the
|
85
|
-
* like_count
|
86
|
-
* click_count
|
87
|
-
* share_count
|
90
|
+
The Facebook strategy leverages the Graph api call. Because of this, the following data fields are available:
|
88
91
|
* comment_count
|
89
|
-
*
|
90
|
-
*
|
92
|
+
* share_count
|
93
|
+
* engagement_count
|
94
|
+
* social_sentence
|
95
|
+
|
96
|
+
However, the share_count and engagement_count return the same value for un-authenticated api calls.
|
91
97
|
|
92
98
|
#### Virility::Excitation
|
93
99
|
|
@@ -106,16 +112,16 @@ If you have a Virility::Excitation object, there are dynamic finders that will r
|
|
106
112
|
If you have a Strategy object, any of the attributes that are commonly returned through the API call will be available as a dynamic finder. This is particularly useful with the Facebook strategy:
|
107
113
|
|
108
114
|
fb = Virility::Facebook.new("http://rubygems.org/")
|
109
|
-
fb.
|
110
|
-
fb.share_count
|
111
|
-
fb.
|
112
|
-
fb.
|
115
|
+
fb.comment_count # => 0
|
116
|
+
fb.share_count # => 673
|
117
|
+
fb.engagement_count # => 673
|
118
|
+
fb.social_sentence # => "673 people like this."
|
113
119
|
|
114
120
|
#### Combined Finders
|
115
121
|
|
116
122
|
Leveraging both sets of dynamic finders allows you to build an Excitation object and get all the way through to an attribute for a specific strategy:
|
117
123
|
|
118
|
-
Virility.url("http://google.com/").facebook.
|
124
|
+
Virility.url("http://google.com/").facebook.share_count # => 39790003
|
119
125
|
Virility.url("http://google.com/").stumble_upon.info_link # => "http://www.stumbleupon.com/url/www.google.com/"
|
120
126
|
|
121
127
|
## Important Notes
|
data/lib/virility.rb
CHANGED
@@ -8,7 +8,7 @@ require 'virility/excitation'
|
|
8
8
|
require 'virility/strategy'
|
9
9
|
require 'virility/exceptions'
|
10
10
|
|
11
|
-
Dir["#{File.dirname(__FILE__)}/virility/strategies/**/*.rb"].each {|f| require f}
|
11
|
+
Dir["#{File.dirname(__FILE__)}/virility/strategies/**/*.rb"].each { |f| require f }
|
12
12
|
|
13
13
|
module Virility
|
14
14
|
|
@@ -16,20 +16,20 @@ module Virility
|
|
16
16
|
# Public API
|
17
17
|
#
|
18
18
|
|
19
|
-
def self.counts(url, strategies
|
20
|
-
Virility::Excitation.new(url, strategies).counts
|
19
|
+
def self.counts(url, strategies: [], proxy: {})
|
20
|
+
Virility::Excitation.new(url, strategies, proxy: proxy).counts
|
21
21
|
end
|
22
22
|
|
23
|
-
def self.total(url, strategies
|
24
|
-
Virility::Excitation.new(url, strategies).total
|
23
|
+
def self.total(url, strategies: [], proxy: {})
|
24
|
+
Virility::Excitation.new(url, strategies, proxy: proxy).total
|
25
25
|
end
|
26
26
|
|
27
|
-
def self.poll(url, strategies
|
28
|
-
Virility::Excitation.new(url, strategies).poll
|
27
|
+
def self.poll(url, strategies: [], proxy: {})
|
28
|
+
Virility::Excitation.new(url, strategies, proxy: proxy).poll
|
29
29
|
end
|
30
30
|
|
31
|
-
def self.url(url, strategies
|
32
|
-
virility = Virility::Excitation.new(url, strategies)
|
31
|
+
def self.url(url, strategies: [], proxy: {})
|
32
|
+
virility = Virility::Excitation.new(url, strategies, proxy: proxy)
|
33
33
|
virility.poll
|
34
34
|
virility
|
35
35
|
end
|
@@ -38,7 +38,7 @@ module Virility
|
|
38
38
|
# Factory
|
39
39
|
#
|
40
40
|
|
41
|
-
def self.factory(strategy, url)
|
42
|
-
Virility::Excitation.new(url).send(strategy)
|
41
|
+
def self.factory(strategy, url, proxy = {})
|
42
|
+
Virility::Excitation.new(url).send(strategy, proxy)
|
43
43
|
end
|
44
44
|
end
|
data/lib/virility/excitation.rb
CHANGED
@@ -2,17 +2,18 @@ module Virility
|
|
2
2
|
class Excitation
|
3
3
|
include Virility::Supporter
|
4
4
|
|
5
|
-
attr_accessor :url, :results, :strategies, :counts
|
5
|
+
attr_accessor :url, :results, :strategies, :counts, :proxy
|
6
6
|
|
7
7
|
#
|
8
8
|
# Initialization
|
9
9
|
#
|
10
|
-
def initialize(url, strategies = [])
|
10
|
+
def initialize(url, strategies = [], proxy: {})
|
11
11
|
@url = url
|
12
12
|
@strategies = {}
|
13
13
|
@results = {}
|
14
14
|
@counts = {}
|
15
15
|
@filter_strategies = strategies || []
|
16
|
+
@proxy = proxy
|
16
17
|
collect_strategies
|
17
18
|
filter_strategies
|
18
19
|
end
|
@@ -66,7 +67,12 @@ module Virility
|
|
66
67
|
#
|
67
68
|
|
68
69
|
def collect_strategies
|
69
|
-
Dir["#{File.dirname(__FILE__)}/strategies/**/*.rb"].each { |klass| @strategies[get_class_string(klass).to_sym] = Virility.const_get(camelize(get_class_string(klass))).new(@url) }
|
70
|
+
Dir["#{File.dirname(__FILE__)}/strategies/**/*.rb"].each { |klass| @strategies[get_class_string(klass).to_sym] = Virility.const_get(camelize(get_class_string(klass))).new(@url, proxy: @proxy) }
|
71
|
+
end
|
72
|
+
|
73
|
+
def filter_strategies
|
74
|
+
return if @filter_strategies.empty?
|
75
|
+
@strategies.select! { |k, _v| @filter_strategies.include?(k) }
|
70
76
|
end
|
71
77
|
|
72
78
|
def filter_strategies
|
@@ -1,23 +1,27 @@
|
|
1
1
|
module Virility
|
2
2
|
class Facebook < Strategy
|
3
|
-
BASE_URL =
|
3
|
+
BASE_URL = 'https://graph.facebook.com/?fields=share,og_object{engagement,title}&id='.freeze
|
4
|
+
|
4
5
|
def census
|
5
|
-
self.class.get("#{BASE_URL}#{@url}")
|
6
|
+
self.class.get("#{BASE_URL}#{@url}", http_proxyaddr: @http_proxyaddr, http_proxyport: @http_proxyport)
|
6
7
|
end
|
7
8
|
|
8
9
|
def outcome
|
9
|
-
@response.parsed_response
|
10
|
+
response = @response.parsed_response.dig('share')
|
11
|
+
engagement = @response.parsed_response.dig('og_object', 'engagement')
|
12
|
+
response['engagement_count'] = engagement.dig('count')
|
13
|
+
response['social_sentence'] = engagement.dig('social_sentence')
|
14
|
+
response
|
10
15
|
end
|
11
16
|
|
12
17
|
def count
|
13
|
-
results
|
18
|
+
results.dig('engagement_count') || 0
|
14
19
|
end
|
15
20
|
|
16
21
|
private
|
17
22
|
|
18
23
|
def valid_response_test
|
19
|
-
@response.respond_to?(:parsed_response)
|
24
|
+
@response.respond_to?(:parsed_response) && @response.parsed_response.is_a?(Hash) && !@response.parsed_response['share'].nil?
|
20
25
|
end
|
21
|
-
|
22
26
|
end
|
23
27
|
end
|
data/lib/virility/strategy.rb
CHANGED
@@ -3,12 +3,14 @@ module Virility
|
|
3
3
|
include HTTParty
|
4
4
|
include Virility::Supporter
|
5
5
|
|
6
|
-
attr_accessor :url, :response, :results, :original_url
|
6
|
+
attr_accessor :url, :response, :results, :original_url, :http_proxyaddr, :http_proxyport
|
7
7
|
|
8
|
-
def initialize
|
8
|
+
def initialize(url, proxy: {})
|
9
9
|
@original_url = url
|
10
10
|
@url = encode(url)
|
11
11
|
@results = {}
|
12
|
+
@http_proxyaddr = proxy.dig(:http_proxyaddr)
|
13
|
+
@http_proxyport = proxy.dig(:http_proxyport)
|
12
14
|
end
|
13
15
|
|
14
16
|
#
|
@@ -96,4 +98,4 @@ module Virility
|
|
96
98
|
end
|
97
99
|
|
98
100
|
end
|
99
|
-
end
|
101
|
+
end
|
data/lib/virility/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -28,8 +28,7 @@ module Virility
|
|
28
28
|
:reddit => Virility::Reddit
|
29
29
|
}
|
30
30
|
FAKE_TESTING_STRATEGIES = [:digg, :instagram, :tumblr]
|
31
|
-
|
32
|
-
FB_RESULTS = {"like_count"=>"19", "click_count"=>"0", "share_count"=>"3", "comment_count"=>"0", "commentsbox_count"=>"0", "total_count"=>"22"}
|
31
|
+
FB_RESULTS = { 'comment_count' => '4', 'share_count' => '97173', 'engagement_count' => '97384', 'social_sentence' => "97K people like this."}
|
33
32
|
FAKE_FB_RESULTS = [:face_count, :pages, :friends]
|
34
33
|
end
|
35
34
|
|
@@ -10,7 +10,7 @@ describe "Virility::Facebook" do
|
|
10
10
|
expect{ @virility.poll }.not_to raise_error
|
11
11
|
end
|
12
12
|
|
13
|
-
["
|
13
|
+
["share_count", "comment_count", "engagement"].each do |attribute|
|
14
14
|
it "should return 0 for #{attribute}" do
|
15
15
|
expect(@virility.send(attribute.to_sym)).to eq(0)
|
16
16
|
end
|
@@ -38,7 +38,7 @@ describe "Virility::Facebook" do
|
|
38
38
|
it_should_behave_like "no facebook results"
|
39
39
|
end
|
40
40
|
|
41
|
-
context "when there is a result but no
|
41
|
+
context "when there is a result but no response" do
|
42
42
|
before(:each) do
|
43
43
|
response = double("HTTParty::Response", :parsed_response => {})
|
44
44
|
allow(Virility::Facebook).to receive(:get) { response }
|
@@ -59,8 +59,11 @@ describe "Virility::Facebook" do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
context "when there is a valid result" do
|
62
|
+
let(:fb_response) { { 'share' => { 'comment_count' => '4', 'share_count' => '97173'},
|
63
|
+
'og_object' => { 'engagement' => { 'count' => '97384', 'social_sentence' => "97K people like this."},
|
64
|
+
title: "Guardians of the Galaxy (2014)", id: "10150298925420108"}, id: "http://www.imdb.com/title/tt2015381/"} }
|
62
65
|
before(:each) do
|
63
|
-
response = double("HTTParty::Response", :
|
66
|
+
response = double("HTTParty::Response", parsed_response: fb_response)
|
64
67
|
allow(Virility::Facebook).to receive(:get) { response }
|
65
68
|
@virility = Virility::Facebook.new(@url)
|
66
69
|
end
|
@@ -69,7 +72,7 @@ describe "Virility::Facebook" do
|
|
69
72
|
expect{ @virility.poll }.not_to raise_error
|
70
73
|
end
|
71
74
|
|
72
|
-
{"
|
75
|
+
{"share_count"=>"97173", "engagement_count"=>'97384', "comment_count"=>"4", 'social_sentence' => "97K people like this."}.each do |key, value|
|
73
76
|
it "should return #{value} for #{key}" do
|
74
77
|
expect(@virility.send(key.to_sym)).to eq(value)
|
75
78
|
end
|
@@ -77,22 +80,22 @@ describe "Virility::Facebook" do
|
|
77
80
|
end
|
78
81
|
|
79
82
|
context "when there is a valid result, but not all fields are present" do
|
83
|
+
let(:fb_response) { { 'share' => { 'comment_count' => '4', 'share_count' => '97173'},
|
84
|
+
'og_object' => { 'engagement' => { 'count' => '97384', 'social_sentence' => "97K people like this."},
|
85
|
+
title: "Guardians of the Galaxy (2014)", id: "10150298925420108"}, id: "http://www.imdb.com/title/tt2015381/"} }
|
80
86
|
before(:each) do
|
81
|
-
response = double(
|
87
|
+
response = double('HTTParty::Response', parsed_response: fb_response)
|
82
88
|
allow(Virility::Facebook).to receive(:get) { response }
|
83
89
|
@virility = Virility::Facebook.new(@url)
|
84
90
|
end
|
85
|
-
|
86
91
|
it "should not raise an error" do
|
87
92
|
expect{ @virility.poll }.not_to raise_error
|
88
93
|
end
|
89
|
-
|
90
|
-
{"like_count"=>"977662", "click_count"=>0, "share_count"=>0, "comment_count"=>"1118601", "commentsbox_count"=>"0", "total_count"=>"5116303"}.each do |key, value|
|
94
|
+
{"share_count"=>"97173", "engagement_count"=>'97384', "comment_count"=>"4", 'social_sentence' => "97K people like this."}.each do |key, value|
|
91
95
|
it "should return #{value} for #{key}" do
|
92
96
|
expect(@virility.send(key.to_sym)).to eq(value)
|
93
97
|
end
|
94
98
|
end
|
95
99
|
end
|
96
100
|
end
|
97
|
-
|
98
101
|
end
|
data/spec/virility_spec.rb
CHANGED
@@ -31,7 +31,7 @@ describe "Virility" do
|
|
31
31
|
describe "Public API testing" do
|
32
32
|
before(:each) do
|
33
33
|
@url = "http://creativeallies.com"
|
34
|
-
allow(Virility::Facebook).to receive(:get) { double("HTTParty::Response", :parsed_response => {
|
34
|
+
allow(Virility::Facebook).to receive(:get) { double("HTTParty::Response", :parsed_response => { 'share' => { 'comment_count' => '4', 'share_count' => '97173'}, 'og_object' => { 'engagement' => { 'count' => '97384', 'social_sentence' => "97K people like this."}, title: "Guardians of the Galaxy (2014)", id: "10150298925420108"}, id: "http://www.imdb.com/title/tt2015381/"}) }
|
35
35
|
allow(Virility::Pinterest).to receive(:get) { double("HTTParty::Response", :parsed_response => {"count"=>1, "url"=>"http://creativeallies.com"}) }
|
36
36
|
allow(Virility::PlusOne).to receive(:get) { double("HTTParty::Response", :parsed_response => {"shares"=>"8"}) }
|
37
37
|
allow(Virility::StumbleUpon).to receive(:get) { double("HTTParty::Response", :parsed_response => {"url"=>"http://creativeallies.com/", "in_index"=>true, "publicid"=>"2UhTwK", "views"=>4731, "title"=>"Creative Allies | Create Art For Rockstars | Upload For A Chance To Win", "thumbnail"=>"http://cdn.stumble-upon.com/mthumb/388/49348388.jpg", "thumbnail_b"=>"http://cdn.stumble-upon.com/images/nobthumb.png", "submit_link"=>"http://www.stumbleupon.com/submit/?url=http://creativeallies.com/", "badge_link"=>"http://www.stumbleupon.com/badge/?url=http://creativeallies.com/", "info_link"=>"http://www.stumbleupon.com/url/creativeallies.com/"}) }
|
@@ -40,16 +40,16 @@ describe "Virility" do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "Virility.counts should return a hash of counts" do
|
43
|
-
expect(Virility.counts(@url)).to eq({:facebook=>
|
43
|
+
expect(Virility.counts(@url)).to eq({:facebook=>97384, :linkedin => 17, :pinterest=>1, :plus_one=>8, reddit:35, :stumble_upon=>4731})
|
44
44
|
end
|
45
45
|
|
46
46
|
it "Virility.total should return the total count" do
|
47
|
-
expect(Virility.total(@url)).to eq(
|
47
|
+
expect(Virility.total(@url)).to eq(102176)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "Virility.poll should return all of the hashed responses" do
|
51
51
|
expect(Virility.poll(@url)).to eq({
|
52
|
-
:facebook=>{"
|
52
|
+
:facebook=>{"comment_count"=>"4", "share_count"=>"97173", "engagement_count"=>"97384", "social_sentence"=>"97K people like this."},
|
53
53
|
:linkedin=>{ "count":17, "fCnt":"17", "fCntPlusOne":"18", "url":"http:\/\/creativeallies.com" },
|
54
54
|
:pinterest=>{"count"=>1, "url"=>"http://creativeallies.com"},
|
55
55
|
:plus_one=>{"shares"=>"8"},
|
@@ -59,7 +59,16 @@ describe "Virility" do
|
|
59
59
|
end
|
60
60
|
it "Virility.poll should return all of the hashed responses with filtered strategies only" do
|
61
61
|
expect(Virility.poll(@url,[:facebook,:linkedin,:pinterest,:plus_one,:stumble_upon])).to eq({
|
62
|
-
:facebook=>{"
|
62
|
+
:facebook=>{"share_count"=>"97173", "engagement_count"=>'97384', "comment_count"=>"4", 'social_sentence' => "97K people like this."},
|
63
|
+
:linkedin=>{ "count":17, "fCnt":"17", "fCntPlusOne":"18", "url":"http:\/\/creativeallies.com" },
|
64
|
+
:pinterest=>{"count"=>1, "url"=>"http://creativeallies.com"},
|
65
|
+
:plus_one=>{"shares"=>"8"},
|
66
|
+
:stumble_upon=>{"url"=>"http://creativeallies.com/", "in_index"=>true, "publicid"=>"2UhTwK", "views"=>4731, "title"=>"Creative Allies | Create Art For Rockstars | Upload For A Chance To Win", "thumbnail"=>"http://cdn.stumble-upon.com/mthumb/388/49348388.jpg", "thumbnail_b"=>"http://cdn.stumble-upon.com/images/nobthumb.png", "submit_link"=>"http://www.stumbleupon.com/submit/?url=http://creativeallies.com/", "badge_link"=>"http://www.stumbleupon.com/badge/?url=http://creativeallies.com/", "info_link"=>"http://www.stumbleupon.com/url/creativeallies.com/"}
|
67
|
+
})
|
68
|
+
end
|
69
|
+
it "Virility.poll should return all of the hashed responses with filtered strategies only" do
|
70
|
+
expect(Virility.poll(@url,[:facebook,:linkedin,:pinterest,:plus_one,:stumble_upon])).to eq({
|
71
|
+
:facebook=>{"share_count"=>"97173", "engagement_count"=>'97384', "comment_count"=>"4", 'social_sentence' => "97K people like this."},
|
63
72
|
:linkedin=>{ "count":17, "fCnt":"17", "fCntPlusOne":"18", "url":"http:\/\/creativeallies.com" },
|
64
73
|
:pinterest=>{"count"=>1, "url"=>"http://creativeallies.com"},
|
65
74
|
:plus_one=>{"shares"=>"8"},
|
data/virility.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |gem|
|
|
21
21
|
# Development
|
22
22
|
gem.add_development_dependency "rspec", "~> 3.4"
|
23
23
|
gem.add_development_dependency "pry", "~> 0.10"
|
24
|
+
|
24
25
|
# Dependencies
|
25
26
|
gem.add_dependency "httparty", "~> 0.11"
|
26
27
|
gem.add_dependency "multi_json", "~> 1.11"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: virility
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jay Sanders
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
126
|
version: '0'
|
127
127
|
requirements: []
|
128
128
|
rubyforge_project:
|
129
|
-
rubygems_version: 2.
|
129
|
+
rubygems_version: 2.6.11
|
130
130
|
signing_key:
|
131
131
|
specification_version: 4
|
132
132
|
summary: Virility calls upon the API's of many popular social services such as Facebook,
|