virility 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/virility.rb +29 -29
- data/lib/virility/exceptions.rb +1 -1
- data/lib/virility/excitation.rb +102 -102
- data/lib/virility/strategies/delicious.rb +8 -8
- data/lib/virility/strategies/facebook.rb +19 -16
- data/lib/virility/strategies/pinterest.rb +13 -13
- data/lib/virility/strategies/plus_one.rb +17 -17
- data/lib/virility/strategies/stumble_upon.rb +16 -16
- data/lib/virility/strategies/twitter.rb +11 -11
- data/lib/virility/strategy.rb +83 -83
- data/lib/virility/supporter.rb +53 -53
- data/lib/virility/version.rb +1 -1
- data/spec/excitation_spec.rb +111 -111
- data/spec/spec_helper.rb +11 -11
- data/spec/strategies/delicious_spec.rb +51 -51
- data/spec/strategies/facebook_spec.rb +93 -93
- data/spec/strategies/pinterest_spec.rb +51 -51
- data/spec/strategies/plus_one_spec.rb +51 -51
- data/spec/strategies/stumble_upon_spec.rb +51 -51
- data/spec/strategies/twitter_spec.rb +51 -51
- data/spec/strategy_spec.rb +98 -98
- data/spec/virility_spec.rb +64 -64
- data/virility.gemspec +1 -1
- metadata +3 -3
@@ -1,13 +1,13 @@
|
|
1
1
|
module Virility
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
2
|
+
class Twitter < Strategy
|
3
|
+
|
4
|
+
def census
|
5
|
+
self.class.get("http://urls.api.twitter.com/1/urls/count.json?url=#{@url}")
|
6
|
+
end
|
7
|
+
|
8
|
+
def count
|
9
|
+
results["count"] || 0
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
13
|
end
|
data/lib/virility/strategy.rb
CHANGED
@@ -1,98 +1,98 @@
|
|
1
1
|
module Virility
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class Strategy
|
3
|
+
include HTTParty
|
4
|
+
include Virility::Supporter
|
5
5
|
|
6
|
-
|
6
|
+
attr_accessor :url, :response, :results
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
def initialize url
|
9
|
+
@url = encode url
|
10
|
+
@results = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# Abstract Methods - Delete eventually
|
15
|
+
#
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
def census
|
18
|
+
raise "Abstract Method census called on #{self.class} - Please define this method"
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
21
|
+
def count
|
22
|
+
raise "Abstract Method count called on #{self.class} - Please define this method"
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# Poll
|
27
|
+
#
|
28
|
+
|
29
|
+
def poll
|
30
|
+
call_strategy
|
31
|
+
collect_results
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# Call Strategy
|
36
|
+
#
|
37
|
+
|
38
|
+
def call_strategy
|
39
|
+
@response = census
|
40
|
+
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
42
|
+
#
|
43
|
+
# Results
|
44
|
+
#
|
45
|
+
|
46
|
+
def collect_results
|
47
|
+
if respond_to?(:outcome)
|
48
|
+
@results = valid_response_test ? outcome : {}
|
49
|
+
else
|
50
|
+
@results = valid_response_test ? @response.parsed_response : {}
|
51
|
+
end
|
52
|
+
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
54
|
+
def results
|
55
|
+
if @results.empty?
|
56
|
+
begin
|
57
|
+
poll
|
58
|
+
rescue => e
|
59
|
+
puts "[virility#poll] #{self.class.to_s} => #{e}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
@results
|
63
|
+
end
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
#
|
66
|
+
# Dynamic Methods
|
67
|
+
#
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
69
|
+
def get_result key
|
70
|
+
if result_exists?(key)
|
71
|
+
results[key.to_s]
|
72
|
+
else
|
73
|
+
0
|
74
|
+
end
|
75
|
+
end
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
def result_exists? key
|
78
|
+
!results[key.to_s].nil?
|
79
|
+
end
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
def method_missing(name, *args, &block)
|
82
|
+
if result_exists?(name)
|
83
|
+
get_result(name)
|
84
|
+
else
|
85
|
+
0
|
86
|
+
end
|
87
|
+
end
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
#
|
90
|
+
# Parsed Response Test - Overwrite if needed
|
91
|
+
#
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
def valid_response_test
|
94
|
+
@response.respond_to?(:parsed_response) and @response.parsed_response.is_a?(Hash)
|
95
|
+
end
|
96
96
|
|
97
|
-
|
97
|
+
end
|
98
98
|
end
|
data/lib/virility/supporter.rb
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
module Virility
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
2
|
+
module Supporter
|
3
|
+
|
4
|
+
#
|
5
|
+
# URL Encoding / Decoding Methods
|
6
|
+
#
|
7
|
+
|
8
|
+
def encode url
|
9
|
+
CGI.escape url
|
10
|
+
end
|
11
|
+
|
12
|
+
def url
|
13
|
+
CGI.unescape @url
|
14
|
+
end
|
15
|
+
|
16
|
+
def escaped_url
|
17
|
+
@url
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# Camelize / Underscore
|
22
|
+
#
|
23
|
+
|
24
|
+
def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
|
25
|
+
if first_letter_in_uppercase
|
26
|
+
lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
|
27
|
+
else
|
28
|
+
lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def underscore(camel_cased_word)
|
33
|
+
word = camel_cased_word.to_s.dup
|
34
|
+
word.gsub!(/::/, '/')
|
35
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
36
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
37
|
+
word.tr!("-", "_")
|
38
|
+
word.downcase!
|
39
|
+
word
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Convert Class Name To Appropriate Key Symbol
|
44
|
+
#
|
45
|
+
|
46
|
+
def symbolize_for_key(klass)
|
47
|
+
underscore(klass.class.to_s.gsub(/Virility::/, '')).to_sym
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_class_string(klass)
|
51
|
+
File.basename(klass).gsub(/\.rb/,'')
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
55
|
end
|
data/lib/virility/version.rb
CHANGED
data/spec/excitation_spec.rb
CHANGED
@@ -1,116 +1,116 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "Excitation" do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
4
|
+
before(:each) do
|
5
|
+
@url = "http://creativeallies.com"
|
6
|
+
end
|
7
|
+
|
8
|
+
#
|
9
|
+
# Initialization
|
10
|
+
#
|
11
|
+
|
12
|
+
context "initialization" do
|
13
|
+
it "should raise an error if a URL is not set" do
|
14
|
+
lambda {Virility::Excitation.new}.should raise_error
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# Get Virility
|
20
|
+
#
|
21
|
+
|
22
|
+
# context "poll" do
|
23
|
+
# it "should not raise an error" do
|
24
|
+
# lambda {Virility::Excitation.new(@url).poll}.should_not raise_error
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
|
28
|
+
#
|
29
|
+
# Collect Strategies
|
30
|
+
#
|
31
|
+
|
32
|
+
context "collect_strategies" do
|
33
|
+
it "should assign a hash to the strategies variable" do
|
34
|
+
Virility::Excitation.new(@url).strategies.should be_a_kind_of Hash
|
35
|
+
end
|
36
|
+
|
37
|
+
it "strategies should be inherited from the Strategy" do
|
38
|
+
Virility::Excitation.new(@url).strategies.first.last.should be_a_kind_of Virility::Strategy
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should load all of the strategies" do
|
42
|
+
Virility::Excitation.new(@url).strategies.count.should == Dir[File.join('lib', 'virility', 'strategies', '**', '*')].count { |file| File.file?(file) }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Encode
|
48
|
+
#
|
49
|
+
|
50
|
+
context "encode" do
|
51
|
+
it "should encode the url" do
|
52
|
+
v = Virility::Excitation.new(@url)
|
53
|
+
v.encode(@url).should == "http%3A%2F%2Fcreativeallies.com"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# Symbolize For Key
|
59
|
+
#
|
60
|
+
|
61
|
+
context "symbolize_for_key" do
|
62
|
+
it "should return a symbol with the name of the class" do
|
63
|
+
Virility::Excitation.new(@url).symbolize_for_key(Virility::Excitation.new(@url)).should == :excitation
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# Dynamic Methods
|
69
|
+
#
|
70
|
+
|
71
|
+
describe "dynamic methods" do
|
72
|
+
context "overall testing" do
|
73
|
+
Virility::TESTING_STRATEGIES.each do |method, klass|
|
74
|
+
it "should return a #{klass} object when the method #{method} is called" do
|
75
|
+
Virility::Excitation.new(@url).send(method).should be_a_kind_of klass
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
Virility::FAKE_TESTING_STRATEGIES.each do |method|
|
80
|
+
it "should raise an error if the strategy (#{method}) does not exist" do
|
81
|
+
lambda { Virility::Excitation.new(@url).send(method) }.should raise_error(Virility::UnknownStrategy, "#{method} Is Not A Known Strategy")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "strategy_exists?" do
|
87
|
+
Virility::TESTING_STRATEGIES.keys.each do |strategy|
|
88
|
+
it "should return true for #{strategy}" do
|
89
|
+
Virility::Excitation.new(@url).strategy_exists?(strategy).should be true
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
Virility::FAKE_TESTING_STRATEGIES.each do |strategy|
|
94
|
+
it "should return false for #{strategy}" do
|
95
|
+
Virility::Excitation.new(@url).strategy_exists?(strategy).should be false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "get_strategy" do
|
101
|
+
Virility::TESTING_STRATEGIES.each do |method, klass|
|
102
|
+
it "should return a #{klass} object when get_strategy is called with #{method}" do
|
103
|
+
Virility::Excitation.new(@url).get_strategy(method).should be_a_kind_of klass
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
Virility::FAKE_TESTING_STRATEGIES.each do |method|
|
108
|
+
it "should raise an error if the strategy (#{method}) does not exist" do
|
109
|
+
lambda { Virility::Excitation.new(@url).get_strategy(method) }.should raise_error(Virility::UnknownStrategy, "#{method} Is Not A Known Strategy")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
115
|
|
116
116
|
end
|