chartbeat 0.1.0 → 0.2.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/README.md +2 -2
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/chartbeat.gemspec +8 -5
- data/lib/chartbeat.rb +25 -114
- data/spec/chartbeat_spec.rb +60 -60
- data/spec/spec_helper.rb +3 -1
- metadata +23 -9
data/README.md
CHANGED
@@ -23,8 +23,8 @@ historical calls and options
|
|
23
23
|
c.alerts :since => 1276980619
|
24
24
|
c.snapshots :timestamp => 1276980619
|
25
25
|
c.stats
|
26
|
-
c.data_series
|
27
|
-
c.day_data_series
|
26
|
+
c.data_series #not working right now
|
27
|
+
c.day_data_series :timestamp => 1276980619, :type => 'paths'
|
28
28
|
|
29
29
|
other calls and options
|
30
30
|
|
data/Rakefile
CHANGED
@@ -10,7 +10,8 @@ begin
|
|
10
10
|
gem.email = "almshaw@gmail.com"
|
11
11
|
gem.homepage = "http://github.com/ashaw/chartbeat"
|
12
12
|
gem.authors = ["Al Shaw"]
|
13
|
-
gem.add_dependency "
|
13
|
+
gem.add_dependency "rest-client"
|
14
|
+
gem.add_dependency "crack"
|
14
15
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
15
16
|
gem.add_development_dependency "fakeweb"
|
16
17
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/chartbeat.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{chartbeat}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Al Shaw"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-17}
|
13
13
|
s.description = %q{A Ruby wrapper for the Chartbeat API}
|
14
14
|
s.email = %q{almshaw@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -54,16 +54,19 @@ Gem::Specification.new do |s|
|
|
54
54
|
s.specification_version = 3
|
55
55
|
|
56
56
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
57
|
-
s.add_runtime_dependency(%q<
|
57
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
58
|
+
s.add_runtime_dependency(%q<crack>, [">= 0"])
|
58
59
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
59
60
|
s.add_development_dependency(%q<fakeweb>, [">= 0"])
|
60
61
|
else
|
61
|
-
s.add_dependency(%q<
|
62
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
63
|
+
s.add_dependency(%q<crack>, [">= 0"])
|
62
64
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
63
65
|
s.add_dependency(%q<fakeweb>, [">= 0"])
|
64
66
|
end
|
65
67
|
else
|
66
|
-
s.add_dependency(%q<
|
68
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
69
|
+
s.add_dependency(%q<crack>, [">= 0"])
|
67
70
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
68
71
|
s.add_dependency(%q<fakeweb>, [">= 0"])
|
69
72
|
end
|
data/lib/chartbeat.rb
CHANGED
@@ -1,124 +1,35 @@
|
|
1
|
-
require '
|
1
|
+
require 'crack'
|
2
|
+
require 'rest_client'
|
2
3
|
|
3
4
|
class Chartbeat
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
YESTERDAY = Time.now.to_i - 86400
|
6
|
+
BASE_URI = 'chartbeat.com/api'
|
7
|
+
METHODS = [:pages, :pathsummary, :recent, :summize, :toppages, :histogram, :summary]
|
8
|
+
DASHAPI_METHODS = [:alerts, :snapshots, :stats, :data_series, :day_data_series]
|
9
|
+
DEFAULT_ARG_VALS = {:path => '/', :keys => 'n', :types => 'n', :since => YESTERDAY,
|
10
|
+
:timestamp => YESTERDAY, :days => 1, :minutes => 20, :type => 'path',
|
11
|
+
:breaks => 'n'}
|
12
|
+
|
9
13
|
# c = Chartbeat.new :apikey => 'yourkey', :host => 'yourdomain.com'
|
10
14
|
def initialize(opts = {})
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#
|
16
|
-
# real-time calls
|
17
|
-
#
|
18
|
-
|
19
|
-
# c.pages :path => '/'
|
20
|
-
def pages(opts = {})
|
21
|
-
q = { :path => nil
|
22
|
-
}.merge!(opts)
|
23
|
-
|
24
|
-
self.class.get("/pages/", :query => q)
|
25
|
-
end
|
26
|
-
|
27
|
-
def pathsummary(opts = {})
|
28
|
-
q = { :keys => 'n',
|
29
|
-
:types => 'n'
|
30
|
-
}.merge!(opts)
|
31
|
-
|
32
|
-
self.class.get("/pathsummary/", :query => q)
|
15
|
+
raise RuntimeError, "You must provide an API key or host" unless opts[:apikey] && opts[:host]
|
16
|
+
@apikey = opts[:apikey]
|
17
|
+
@host = opts[:host]
|
33
18
|
end
|
34
|
-
|
35
|
-
def recent(opts = {})
|
36
|
-
q = { :limit => nil,
|
37
|
-
:path => '/'
|
38
|
-
}.merge!(opts)
|
39
19
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
def summize(opts = {})
|
44
|
-
q = { :path => '/'
|
45
|
-
}.merge!(opts)
|
46
|
-
|
47
|
-
self.class.get("/summize/", :query => q)
|
48
|
-
end
|
49
|
-
|
50
|
-
def toppages(opts = {})
|
51
|
-
q = { :limit => nil
|
52
|
-
}.merge!(opts)
|
53
|
-
|
54
|
-
self.class.get("/toppages/", :query => q)
|
55
|
-
end
|
56
|
-
|
57
|
-
#
|
58
|
-
# historical calls
|
59
|
-
#
|
60
|
-
|
61
|
-
YESTERDAY = Time.now.to_i - 86400
|
62
|
-
|
63
|
-
#defaults to yesterday
|
64
|
-
def alerts(opts = {})
|
65
|
-
q = { :since => YESTERDAY
|
66
|
-
}.merge!(opts)
|
67
|
-
|
68
|
-
self.class.get("/dashapi/alerts/", :query => q)
|
69
|
-
end
|
70
|
-
|
71
|
-
def snapshots(opts = {})
|
72
|
-
q = { :timestamp => YESTERDAY
|
73
|
-
}.merge!(opts)
|
74
|
-
|
75
|
-
self.class.get("/dashapi/snapshots/", :query => q)
|
76
|
-
end
|
77
|
-
|
78
|
-
def stats
|
79
|
-
self.class.get("/dashapi/stats/")
|
80
|
-
end
|
81
|
-
|
82
|
-
#NOT WORKING, "We're most likely pushing out some new changes."
|
83
|
-
def data_series(opts = {})
|
84
|
-
q = { :timestamp => YESTERDAY,
|
85
|
-
:days => 1,
|
86
|
-
:minutes => 20,
|
87
|
-
:type => 'path',
|
88
|
-
:val => nil
|
89
|
-
}.merge!(opts)
|
20
|
+
def method_missing(m, *args)
|
21
|
+
super unless METHODS.include?(m) || DASHAPI_METHODS.include?(m)
|
90
22
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
23
|
+
query = *args
|
24
|
+
query_to_perform = {:apikey => @apikey, :host => @host}
|
25
|
+
DEFAULT_ARG_VALS.each do |k,v|
|
26
|
+
if query && query[k]
|
27
|
+
v = query[k]
|
28
|
+
end
|
29
|
+
query_to_perform[k] = v
|
30
|
+
end
|
31
|
+
prefix = DASHAPI_METHODS.include?(m) ? '/dashapi' : ''
|
32
|
+
data = Crack::JSON.parse(RestClient.get("http://" + BASE_URI + prefix + '/' + m.to_s + '/', :params => query_to_perform))
|
100
33
|
end
|
101
|
-
|
102
|
-
#
|
103
|
-
# other calls
|
104
|
-
#
|
105
|
-
|
106
|
-
def histogram(opts = {})
|
107
|
-
q = { :keys => 'n',
|
108
|
-
:breaks => 'n',
|
109
|
-
:path => nil
|
110
|
-
}.merge!(opts)
|
111
|
-
|
112
|
-
self.class.get('/histogram/', :query => q)
|
113
|
-
end
|
114
|
-
|
115
|
-
def summary(opts = {})
|
116
|
-
q = { :keys => 'n',
|
117
|
-
:types => 'n',
|
118
|
-
:path => nil
|
119
|
-
}.merge!(opts)
|
120
34
|
|
121
|
-
self.class.get('/summary/', :query => q)
|
122
|
-
end
|
123
|
-
|
124
35
|
end
|
data/spec/chartbeat_spec.rb
CHANGED
@@ -4,97 +4,97 @@ HOST = 'fakehost.com'
|
|
4
4
|
KEY = 'fake_key'
|
5
5
|
|
6
6
|
describe "Chartbeat" do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
@c = Chartbeat.new :apikey => KEY, :host => HOST
|
10
|
+
end
|
11
|
+
|
12
12
|
it "should get and parse the 'pages' endpoint" do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
register_uri("http://chartbeat.com/api/pages/", "pages")
|
14
|
+
|
15
|
+
pages = @c.pages
|
16
|
+
titles = pages['titles'].to_a
|
17
|
+
titles[0][1].should eql('Talking Points Memo | Breaking News and Analysis')
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should get and parse the 'pathsummary' endpoint" do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
register_uri("http://chartbeat.com/api/pathsummary/", "pathsummary")
|
22
|
+
|
23
|
+
pathsummary = @c.pathsummary.to_a
|
24
|
+
pathsummary[0][0].should eql('/2010/06/the_gaza_flotilla_raid_what_do_we_know.php')
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should get and parse the 'recent' endpoint" do
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
register_uri("http://chartbeat.com/api/recent/", "recent")
|
29
|
+
|
30
|
+
recent = @c.recent
|
31
|
+
recent[0]['i'].should eql('Talking Points Memo | Breaking News and Analysis')
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should get and parse the 'summize' endpoint" do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
register_uri("http://chartbeat.com/api/summize/", "summize")
|
36
|
+
|
37
|
+
summize = @c.summize
|
38
|
+
summize['new'].should eql(40)
|
39
|
+
summize['idle'].should eql(382)
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should get and parse the 'toppages' endpoint" do
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
register_uri("http://chartbeat.com/api/toppages/", "toppages")
|
44
|
+
|
45
|
+
toppages = @c.toppages
|
46
|
+
toppages[0]['i'].should eql('Talking Points Memo | Breaking News and Analysis')
|
47
|
+
toppages[0]['path'].should eql('/')
|
48
48
|
end
|
49
|
-
|
50
|
-
|
49
|
+
|
50
|
+
# Not implemented yet because chartbeat is returning blank arrays for this call
|
51
51
|
it "should get and parse the 'alerts' endpoint"
|
52
52
|
|
53
53
|
it "should get and parse the 'snapshots' endpoint" do
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
54
|
+
register_uri("http://chartbeat.com/api/dashapi/snapshots/","snapshots")
|
55
|
+
|
56
|
+
snapshots = @c.snapshots.to_a
|
57
|
+
|
58
|
+
titles = snapshots[0]
|
59
|
+
geo = snapshots[1]
|
60
|
+
visitlength = snapshots[2]
|
61
|
+
|
62
|
+
titles[1]['/2010/06/jon-stewart-barton-was-actually-reading-disdainful-asshle-digest-at-the-bp-hearings-video.php?ref=fpblg'].should eql ("Jon Stewart: Barton Was Actually Reading 'Disdainful Assh*le Digest' At The BP Hearings (VIDEO) | TPM LiveWire")
|
63
63
|
geo[1]['countries']['US'].should eql(474)
|
64
64
|
visitlength[1][0]['idle'].should eql(101.0)
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should get and parse the 'stats' endpoint" do
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
register_uri("http://chartbeat.com/api/dashapi/stats/","stats")
|
69
|
+
|
70
|
+
stats = @c.stats
|
71
|
+
|
72
|
+
stats['read_min'].should eql(5)
|
73
|
+
stats['people_max'].should eql(3742)
|
74
74
|
end
|
75
|
-
|
76
|
-
|
75
|
+
|
76
|
+
# Not implemented yet. Chartbeat is returning an error for this call at this time.
|
77
77
|
it "should get and parse the 'data_series' endpoint"
|
78
78
|
|
79
79
|
it "should get and parse the 'day_data_series' endpoint" do
|
80
|
-
register_uri("http://chartbeat.com/api/dashapi/day_data_series
|
81
|
-
|
82
|
-
|
83
|
-
|
80
|
+
register_uri("http://chartbeat.com/api/dashapi/day_data_series/","day_data_series")
|
81
|
+
|
82
|
+
day_data_series = @c.day_data_series.to_a
|
83
|
+
day_data_series[0][0].should eql("/archives/2010/06/painfully_funny php")
|
84
84
|
end
|
85
85
|
|
86
86
|
it "should get and parse the 'histogram' endpoint" do
|
87
|
-
register_uri("http://chartbeat.com/api/histogram
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
register_uri("http://chartbeat.com/api/histogram/","histogram")
|
88
|
+
|
89
|
+
histogram = @c.histogram
|
90
|
+
histogram['n']['data']['sumOfSquares'].should eql(91.0)
|
91
91
|
end
|
92
92
|
|
93
93
|
it "should get and parse the 'summary' endpoint" do
|
94
|
-
register_uri("http://chartbeat.com/api/summary
|
94
|
+
register_uri("http://chartbeat.com/api/summary/","summary")
|
95
95
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
96
|
+
summary = @c.summary
|
97
|
+
summary['n']['data']['sumOfSquares'].should eql(99.0)
|
98
|
+
end
|
99
|
+
|
100
100
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rubygems'
|
3
4
|
require 'chartbeat'
|
4
5
|
require 'fakeweb'
|
5
6
|
require 'spec'
|
@@ -15,7 +16,8 @@ def fixture_file(filename)
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def register_uri(uri, method)
|
18
|
-
|
19
|
+
query_string = "?breaks=n&type=path&types=n&path=%2F&since=#{Chartbeat::YESTERDAY}&apikey=fake_key×tamp=#{Chartbeat::YESTERDAY}&days=1&keys=n&minutes=20&host=fakehost.com"
|
20
|
+
FakeWeb.register_uri(:get, "#{uri}#{query_string}", :body => fixture_file("#{method}.json"))
|
19
21
|
end
|
20
22
|
|
21
23
|
Spec::Runner.configure do |config|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chartbeat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Al Shaw
|
@@ -15,11 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-17 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: rest-client
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
@@ -33,9 +33,23 @@ dependencies:
|
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: crack
|
37
37
|
prerelease: false
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rspec
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
53
|
none: false
|
40
54
|
requirements:
|
41
55
|
- - ">="
|
@@ -47,11 +61,11 @@ dependencies:
|
|
47
61
|
- 9
|
48
62
|
version: 1.2.9
|
49
63
|
type: :development
|
50
|
-
version_requirements: *
|
64
|
+
version_requirements: *id003
|
51
65
|
- !ruby/object:Gem::Dependency
|
52
66
|
name: fakeweb
|
53
67
|
prerelease: false
|
54
|
-
requirement: &
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
69
|
none: false
|
56
70
|
requirements:
|
57
71
|
- - ">="
|
@@ -61,7 +75,7 @@ dependencies:
|
|
61
75
|
- 0
|
62
76
|
version: "0"
|
63
77
|
type: :development
|
64
|
-
version_requirements: *
|
78
|
+
version_requirements: *id004
|
65
79
|
description: A Ruby wrapper for the Chartbeat API
|
66
80
|
email: almshaw@gmail.com
|
67
81
|
executables: []
|