exoteric 0.0.1 → 0.1.0
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/exoteric.gemspec +2 -0
- data/lib/exoteric/api.rb +44 -0
- data/lib/exoteric/counter.rb +1 -1
- data/lib/exoteric/version.rb +1 -1
- data/spec/api_spec.rb +50 -0
- data/spec/spec_helper.rb +4 -1
- metadata +36 -1
data/exoteric.gemspec
CHANGED
@@ -21,8 +21,10 @@ DESCR
|
|
21
21
|
|
22
22
|
gem.add_dependency 'rest-client'
|
23
23
|
gem.add_dependency 'json'
|
24
|
+
gem.add_dependency 'rack'
|
24
25
|
|
25
26
|
gem.add_development_dependency 'minitest'
|
26
27
|
gem.add_development_dependency 'rspec'
|
27
28
|
gem.add_development_dependency 'mocha'
|
29
|
+
gem.add_development_dependency 'rack-test'
|
28
30
|
end
|
data/lib/exoteric/api.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'exoteric/counter'
|
3
|
+
|
4
|
+
module Exoteric
|
5
|
+
class API < Sinatra::Application
|
6
|
+
|
7
|
+
get "/count.json" do
|
8
|
+
content_type "application/json"
|
9
|
+
|
10
|
+
begin
|
11
|
+
networks = (params[:n] || '').split(',')
|
12
|
+
counter = Counter.new(params)
|
13
|
+
|
14
|
+
counter.count(*networks).to_json
|
15
|
+
rescue => e
|
16
|
+
status 500
|
17
|
+
return { :error => e.to_s }.to_json
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
get "/count.js" do
|
22
|
+
content_type "text/javascript"
|
23
|
+
|
24
|
+
begin
|
25
|
+
networks = (params[:n] || '').split(',')
|
26
|
+
@callback = params[:cb].to_s
|
27
|
+
counter = Counter.new(params)
|
28
|
+
@count = counter.count(*networks)
|
29
|
+
|
30
|
+
erb :script
|
31
|
+
rescue => e
|
32
|
+
status 500
|
33
|
+
return { :error => e.to_s }.to_json
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
__END__
|
41
|
+
|
42
|
+
@@ script
|
43
|
+
var Exoteric={c:<%= @count.to_json %>, count: function(sn){return this.c[sn] || 0;}};
|
44
|
+
<% unless @callback.empty? %><%= @callback %>();<% end %>
|
data/lib/exoteric/counter.rb
CHANGED
@@ -16,7 +16,7 @@ module Exoteric
|
|
16
16
|
|
17
17
|
def initialize(options = {})
|
18
18
|
@url, @options = options[:url], options
|
19
|
-
raise ArgumentError, "
|
19
|
+
raise ArgumentError, "Site url not specified" if @url.to_s.empty?
|
20
20
|
end
|
21
21
|
|
22
22
|
def count(*counters)
|
data/lib/exoteric/version.rb
CHANGED
data/spec/api_spec.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
require 'exoteric/api'
|
3
|
+
|
4
|
+
describe Exoteric::API do
|
5
|
+
let :app do
|
6
|
+
Exoteric::API.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "resources" do
|
10
|
+
before do
|
11
|
+
Exoteric::Counter.stubs(:counters).returns(:test)
|
12
|
+
Exoteric::Counter.any_instance.stubs(:test_count).returns(10)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "/count.json" do
|
16
|
+
it "returns popularity count from selected networks" do
|
17
|
+
get "/count.json?url=http://github.com/&n=test"
|
18
|
+
last_response.should be_ok
|
19
|
+
JSON.parse(last_response.body)['test'].should == 10
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns an error when no url specified" do
|
23
|
+
get "/count.json?url=&n=test"
|
24
|
+
last_response.should_not be_ok
|
25
|
+
JSON.parse(last_response.body)['error'].should == 'Site url not specified'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "/count.js" do
|
30
|
+
it "returns script with preloaded counter values and executed callback" do
|
31
|
+
get "/count.js?url=http://github.com/&n=test&cb=testCallback"
|
32
|
+
last_response.should be_ok
|
33
|
+
last_response.body.should =~ /testCallback\(\)/
|
34
|
+
last_response.body.should =~ /\{\"test\":10\}/
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns script with preloaded counter values and no callback if not specified" do
|
38
|
+
get "/count.js?url=http://github.com/&n=test"
|
39
|
+
last_response.should be_ok
|
40
|
+
last_response.body.should =~ /\{\"test\":10\}/
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns an error when no url specified" do
|
44
|
+
get "/count.js?url=&n=test"
|
45
|
+
last_response.should_not be_ok
|
46
|
+
JSON.parse(last_response.body)['error'].should == 'Site url not specified'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exoteric
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rack
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: minitest
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,6 +107,22 @@ dependencies:
|
|
91
107
|
- - ! '>='
|
92
108
|
- !ruby/object:Gem::Version
|
93
109
|
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rack-test
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
94
126
|
description: Get page statistics from the most popular social networks.
|
95
127
|
email:
|
96
128
|
- chris@nu7hat.ch
|
@@ -106,12 +138,14 @@ files:
|
|
106
138
|
- Rakefile
|
107
139
|
- exoteric.gemspec
|
108
140
|
- lib/exoteric.rb
|
141
|
+
- lib/exoteric/api.rb
|
109
142
|
- lib/exoteric/counter.rb
|
110
143
|
- lib/exoteric/counters/facebook.rb
|
111
144
|
- lib/exoteric/counters/github.rb
|
112
145
|
- lib/exoteric/counters/google_plus.rb
|
113
146
|
- lib/exoteric/counters/twitter.rb
|
114
147
|
- lib/exoteric/version.rb
|
148
|
+
- spec/api_spec.rb
|
115
149
|
- spec/counter_spec.rb
|
116
150
|
- spec/facebook_counter_spec.rb
|
117
151
|
- spec/github_counter_spec.rb
|
@@ -144,6 +178,7 @@ specification_version: 3
|
|
144
178
|
summary: Exoteric gives you page statistics from the most popular social networks,
|
145
179
|
i.a. number of tweets, how many people shared link on facebook or google plus etc.
|
146
180
|
test_files:
|
181
|
+
- spec/api_spec.rb
|
147
182
|
- spec/counter_spec.rb
|
148
183
|
- spec/facebook_counter_spec.rb
|
149
184
|
- spec/github_counter_spec.rb
|