rugalytics 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/Manifest +1 -0
- data/README +44 -1
- data/README.rdoc +44 -1
- data/Rakefile +1 -1
- data/lib/rugalytics/item.rb +13 -7
- data/lib/rugalytics/profile.rb +8 -0
- data/lib/rugalytics/report.rb +7 -3
- data/lib/rugalytics/rugrat.user.js +165 -0
- data/lib/rugalytics/server.rb +54 -29
- data/lib/rugalytics.rb +3 -1
- data/rugalytics.gemspec +6 -3
- metadata +13 -2
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
data/README
CHANGED
@@ -88,7 +88,7 @@ In the report, there is a +pageviews_graph+ containing the points:
|
|
88
88
|
=> [[Mon, 01 Jan 2007, 8200], [Tue, 02 Jan 2007, 8400]]
|
89
89
|
|
90
90
|
|
91
|
-
==
|
91
|
+
== Lots of Reports!
|
92
92
|
|
93
93
|
The report name comes from the Google Analytics URL for a CSV report export.
|
94
94
|
The report name is the rpt parameter from the URL, e.g. 'Pageviews' or
|
@@ -234,6 +234,49 @@ automatically, e.g.:
|
|
234
234
|
top_items_over_week = report.items.sort_by{|i| i.unique_pageviews.to_i}.reverse
|
235
235
|
|
236
236
|
|
237
|
+
==Rugalytics on Rugrat - a Greasemonkey script for Firefox
|
238
|
+
|
239
|
+
TO INSTALL:
|
240
|
+
|
241
|
+
Create a rugalytics.yml config file containing:
|
242
|
+
|
243
|
+
---
|
244
|
+
account: your_account_name
|
245
|
+
profile: your_profile_name
|
246
|
+
username: your_user_name
|
247
|
+
password: your_pass_w
|
248
|
+
|
249
|
+
|
250
|
+
Run rugalytics executable on console in same directory as rugalytics.yml:
|
251
|
+
|
252
|
+
> rugalytics
|
253
|
+
|
254
|
+
|
255
|
+
Add Greasemonkey to Firefox:
|
256
|
+
https://addons.mozilla.org/firefox/748/
|
257
|
+
|
258
|
+
Go to:
|
259
|
+
http://localhost:8888/
|
260
|
+
|
261
|
+
Add rugrat user script:
|
262
|
+
http://localhost:8888/rugrat.user.js
|
263
|
+
|
264
|
+
Configure website for rugrat to run over:
|
265
|
+
|
266
|
+
Firefox -> Tools -> Greasemonkey -> Manage User Scripts
|
267
|
+
-> select rugrat -> press "Add"
|
268
|
+
-> add your site, e.g. http://your_site.com/*
|
269
|
+
-> press "Close"
|
270
|
+
|
271
|
+
Browse your site!
|
272
|
+
|
273
|
+
|
274
|
+
==Ruby Manor Presentation Slides - Nov 2008
|
275
|
+
|
276
|
+
Rugalytics - making a Ruby API to Google Analytics data - presentation slides from Ruby Manor 2008:
|
277
|
+
http://www.slideshare.net/delineator/rugalytics-ruby-manor-nov-2008-presentation/
|
278
|
+
|
279
|
+
|
237
280
|
==Acknowledgements
|
238
281
|
|
239
282
|
Rugalytics started life as a fork of jnunemaker's Statwhore. As the code and
|
data/README.rdoc
CHANGED
@@ -88,7 +88,7 @@ In the report, there is a +pageviews_graph+ containing the points:
|
|
88
88
|
=> [[Mon, 01 Jan 2007, 8200], [Tue, 02 Jan 2007, 8400]]
|
89
89
|
|
90
90
|
|
91
|
-
==
|
91
|
+
== Lots of Reports!
|
92
92
|
|
93
93
|
The report name comes from the Google Analytics URL for a CSV report export.
|
94
94
|
The report name is the rpt parameter from the URL, e.g. 'Pageviews' or
|
@@ -234,6 +234,49 @@ automatically, e.g.:
|
|
234
234
|
top_items_over_week = report.items.sort_by{|i| i.unique_pageviews.to_i}.reverse
|
235
235
|
|
236
236
|
|
237
|
+
==Rugalytics on Rugrat - a Greasemonkey script for Firefox
|
238
|
+
|
239
|
+
TO INSTALL:
|
240
|
+
|
241
|
+
Create a rugalytics.yml config file containing:
|
242
|
+
|
243
|
+
---
|
244
|
+
account: your_account_name
|
245
|
+
profile: your_profile_name
|
246
|
+
username: your_user_name
|
247
|
+
password: your_pass_w
|
248
|
+
|
249
|
+
|
250
|
+
Run rugalytics executable on console in same directory as rugalytics.yml:
|
251
|
+
|
252
|
+
> rugalytics
|
253
|
+
|
254
|
+
|
255
|
+
Add Greasemonkey to Firefox:
|
256
|
+
https://addons.mozilla.org/firefox/748/
|
257
|
+
|
258
|
+
Go to:
|
259
|
+
http://localhost:8888/
|
260
|
+
|
261
|
+
Add rugrat user script:
|
262
|
+
http://localhost:8888/rugrat.user.js
|
263
|
+
|
264
|
+
Configure website for rugrat to run over:
|
265
|
+
|
266
|
+
Firefox -> Tools -> Greasemonkey -> Manage User Scripts
|
267
|
+
-> select rugrat -> press "Add"
|
268
|
+
-> add your site, e.g. http://your_site.com/*
|
269
|
+
-> press "Close"
|
270
|
+
|
271
|
+
Browse your site!
|
272
|
+
|
273
|
+
|
274
|
+
==Ruby Manor Presentation Slides - Nov 2008
|
275
|
+
|
276
|
+
Rugalytics - making a Ruby API to Google Analytics data - presentation slides from Ruby Manor 2008:
|
277
|
+
http://www.slideshare.net/delineator/rugalytics-ruby-manor-nov-2008-presentation/
|
278
|
+
|
279
|
+
|
237
280
|
==Acknowledgements
|
238
281
|
|
239
282
|
Rugalytics started life as a fork of jnunemaker's Statwhore. As the code and
|
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ begin
|
|
10
10
|
m.rubyforge_name = "rugalytics"
|
11
11
|
m.rdoc_options << '--inline-source'
|
12
12
|
m.rdoc_pattern = ["README", "CHANGELOG", "LICENSE"]
|
13
|
-
m.dependencies = ["hpricot >=0.6", "activesupport >=2.0.2", "googlebase >=0.2.0", "morph >=0.2.0", "fastercsv >=1.4.0"]
|
13
|
+
m.dependencies = ["hpricot >=0.6", "activesupport >=2.0.2", "googlebase >=0.2.0", "morph >=0.2.0", "fastercsv >=1.4.0", "rack >=0.4.0"]
|
14
14
|
m.executable_pattern = 'bin/rugalytics'
|
15
15
|
end
|
16
16
|
|
data/lib/rugalytics/item.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
module Rugalytics
|
2
|
-
|
3
2
|
class Item
|
4
3
|
include Morph
|
5
4
|
|
6
|
-
def initialize
|
7
|
-
|
8
|
-
|
9
|
-
attribute
|
10
|
-
attribute.sub!('.',' ')
|
11
|
-
attribute.sub!(/page views/i,'pageviews')
|
5
|
+
def initialize labels, values, base_url
|
6
|
+
labels.each_with_index do
|
7
|
+
|label, index|
|
8
|
+
attribute = normalize(label)
|
12
9
|
value = values[index]
|
13
10
|
morph(attribute, value)
|
14
11
|
end
|
@@ -19,6 +16,15 @@ module Rugalytics
|
|
19
16
|
self.url = "http://#{base_url}#{page}"
|
20
17
|
end
|
21
18
|
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def normalize label
|
22
|
+
label.sub!('$','dollar')
|
23
|
+
label.sub!('/',' per ')
|
24
|
+
label.sub!('.',' ')
|
25
|
+
label.sub!(/page views/i,'pageviews')
|
26
|
+
label
|
27
|
+
end
|
22
28
|
end
|
23
29
|
|
24
30
|
end
|
data/lib/rugalytics/profile.rb
CHANGED
@@ -89,6 +89,14 @@ module Rugalytics
|
|
89
89
|
}
|
90
90
|
params[:d1] = options[:url] if options[:url]
|
91
91
|
params[:d1] = options[:page_title] if options[:page_title]
|
92
|
+
if options[:keywords]
|
93
|
+
params[:d1] = options[:keywords].gsub(' ','+')
|
94
|
+
params[:seg] = '1'
|
95
|
+
params[:segkey] = options[:segment] ? options[:segment] : 'organization'
|
96
|
+
end
|
97
|
+
if options[:value]
|
98
|
+
params[:gval] = options[:value]
|
99
|
+
end
|
92
100
|
params
|
93
101
|
end
|
94
102
|
|
data/lib/rugalytics/report.rb
CHANGED
@@ -14,8 +14,12 @@ module Rugalytics
|
|
14
14
|
handle_tables lines
|
15
15
|
end
|
16
16
|
|
17
|
+
def attributes
|
18
|
+
morph_attributes.delete_if {|k,v| v.nil?}.stringify_keys
|
19
|
+
end
|
20
|
+
|
17
21
|
def attribute_names
|
18
|
-
|
22
|
+
attributes.keys
|
19
23
|
end
|
20
24
|
|
21
25
|
def method_missing symbol, *args
|
@@ -98,9 +102,9 @@ module Rugalytics
|
|
98
102
|
begin
|
99
103
|
values = FasterCSV.parse_line(values_line)
|
100
104
|
rescue Exception => e
|
101
|
-
values_line.gsub!(/""/,'
|
105
|
+
values_line.gsub!(/""/,'^$$^')
|
102
106
|
values = FasterCSV.parse_line(values_line)
|
103
|
-
values.each {|v| v.gsub!('
|
107
|
+
values.each {|v| v.gsub!('^$$^','"')}
|
104
108
|
end
|
105
109
|
items << Item.new(attributes, values, base_url)
|
106
110
|
index = index.next
|
@@ -0,0 +1,165 @@
|
|
1
|
+
// ==UserScript==
|
2
|
+
// @name rugrat
|
3
|
+
// @namespace github.com/robmckinnon/rugalytics
|
4
|
+
// @description a mousehole to google analytics data
|
5
|
+
// @include http://your_website/*
|
6
|
+
// ==/UserScript==
|
7
|
+
|
8
|
+
window.Rugrat = function() {;}
|
9
|
+
|
10
|
+
window.Rugrat.prototype = {
|
11
|
+
|
12
|
+
replace_all: function(text, old, replace) {
|
13
|
+
while(text.indexOf(old) > 0) { text = text.replace(old,replace); }
|
14
|
+
return text;
|
15
|
+
},
|
16
|
+
|
17
|
+
keyword_grab: function(keywords, keyword_id, segment) {
|
18
|
+
var the_url = "http://localhost:8888/keyword_detail?keywords="+keywords+"&segment="+segment;
|
19
|
+
GM_log(the_url);
|
20
|
+
var base = this;
|
21
|
+
GM_xmlhttpRequest({
|
22
|
+
method:"GET",
|
23
|
+
url: the_url,
|
24
|
+
headers:{
|
25
|
+
"User-Agent":"Mozilla/5.0",
|
26
|
+
"Accept":"application/json"
|
27
|
+
},
|
28
|
+
onload:function(response) {
|
29
|
+
var status = base.replace_all(response.statusText,' ','');
|
30
|
+
if (status == 'OK') {
|
31
|
+
var json = response.responseText;
|
32
|
+
var data = eval('(' + json + ')');
|
33
|
+
base.display_keywords(data, keyword_id, segment);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
});
|
37
|
+
},
|
38
|
+
|
39
|
+
display_keywords: function(data, keyword_id, segment) {
|
40
|
+
var items = data.items;
|
41
|
+
var comma = '';
|
42
|
+
for (var i in items) {
|
43
|
+
var item = items[i];
|
44
|
+
var name = 'red';
|
45
|
+
|
46
|
+
if (segment == 'city') {
|
47
|
+
name = item.city;
|
48
|
+
} else {
|
49
|
+
name = item.network_location;
|
50
|
+
}
|
51
|
+
if (segment == 'city' || (name.indexOf('mini') >= 0 || name.indexOf('trea') >= 0) ) {
|
52
|
+
var element = document.getElementById(keyword_id);
|
53
|
+
var html = element.innerHTML;
|
54
|
+
element.innerHTML = html + comma + ' <small>'+ name +'</small>';
|
55
|
+
comma = ',';
|
56
|
+
}
|
57
|
+
}
|
58
|
+
},
|
59
|
+
|
60
|
+
data_grab: function() {
|
61
|
+
var pathname = window.location.pathname;
|
62
|
+
var the_url = "http://localhost:8888/top_content_detail_keywords?url="+pathname;
|
63
|
+
GM_log(the_url);
|
64
|
+
var base = this;
|
65
|
+
GM_xmlhttpRequest({
|
66
|
+
method:"GET",
|
67
|
+
url: the_url,
|
68
|
+
headers:{
|
69
|
+
"User-Agent":"Mozilla/5.0",
|
70
|
+
"Accept":"application/json"
|
71
|
+
},
|
72
|
+
onload:function(response) {
|
73
|
+
var status = base.replace_all(response.statusText,' ','');
|
74
|
+
if (status == 'OK') {
|
75
|
+
var json = response.responseText;
|
76
|
+
var data = eval('(' + json + ')');
|
77
|
+
base.display_data(data);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
});
|
81
|
+
},
|
82
|
+
|
83
|
+
grab_unique_page_views: function() {
|
84
|
+
var pathname = window.location.pathname;
|
85
|
+
var the_url = "http://localhost:8888/top_content_detail?value=unique_pageviews&url="+pathname;
|
86
|
+
GM_log(the_url);
|
87
|
+
var base = this;
|
88
|
+
GM_xmlhttpRequest({
|
89
|
+
method:"GET",
|
90
|
+
url: the_url,
|
91
|
+
headers:{
|
92
|
+
"User-Agent":"Mozilla/5.0",
|
93
|
+
"Accept":"application/json"
|
94
|
+
},
|
95
|
+
onload:function(response) {
|
96
|
+
var status = base.replace_all(response.statusText,' ','');
|
97
|
+
if (status == 'OK') {
|
98
|
+
var json = response.responseText;
|
99
|
+
var data = eval('(' + json + ')');
|
100
|
+
base.display_unique_page_views(data);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
});
|
104
|
+
},
|
105
|
+
|
106
|
+
display_unique_page_views: function(data) {
|
107
|
+
var visits = data.unique_pageviews_graph.points;
|
108
|
+
var max = Math.max.apply( Math, visits) * 1.2;
|
109
|
+
var points = visits.join(',');
|
110
|
+
var sparkline = 'http://chart.apis.google.com/chart?chs=200x40&cht=ls&chds=0,' + max + '&chco=0077CC&chm=B,E6F2FA,0,0,0&chls=1,0,0&chd=t:'+points;
|
111
|
+
var img = '<img style="vertical-align: middle;border: none;width:200px; height:40px;" src="' + sparkline + '"></img>';
|
112
|
+
|
113
|
+
var element = document.getElementById("r_unique_page_views");
|
114
|
+
element.innerHTML = img + ' ' + data.unique_pageviews_total;
|
115
|
+
},
|
116
|
+
|
117
|
+
display_data: function(data) {
|
118
|
+
var lines = '';
|
119
|
+
|
120
|
+
lines += '<h3 style="margin-top: 0.5em;">Unique Page Views</h3>';
|
121
|
+
lines += '<span id="r_unique_page_views" style="width:200px; height:40px;"></span>';
|
122
|
+
lines += '<h3 style="margin-top: 0.5em;">Entrance keywords</h3>';
|
123
|
+
|
124
|
+
for (var i in data.items) {
|
125
|
+
var item = data.items[i];
|
126
|
+
var url = '';
|
127
|
+
var keywords = item.keyword;
|
128
|
+
lines += '<p id="x' + i + '" style="margin : 0.5em; font-size: 0.75em"><a href="'+url+'" style="text-decoration: none;">' + keywords + '</a> (' + item.unique_pageviews + ')</p>';
|
129
|
+
}
|
130
|
+
|
131
|
+
var menudiv = document.createElement('div');
|
132
|
+
menudiv.style.position = 'fixed';
|
133
|
+
menudiv.style.top = '5px';
|
134
|
+
menudiv.style.left = '55%';
|
135
|
+
menudiv.style.padding = '10px';
|
136
|
+
menudiv.style.backgroundColor = '#fff';
|
137
|
+
menudiv.style.border="2px solid";
|
138
|
+
menudiv.zIndex = '3';
|
139
|
+
// menudiv.style.display='none';
|
140
|
+
|
141
|
+
var menuobj = document.createElement('div');
|
142
|
+
menuobj.innerHTML = lines;
|
143
|
+
menudiv.appendChild(menuobj);
|
144
|
+
|
145
|
+
var content = document.getElementById('content');
|
146
|
+
content.appendChild(menudiv);
|
147
|
+
|
148
|
+
this.grab_unique_page_views();
|
149
|
+
for (var i in data.items) {
|
150
|
+
var keywords = data.items[i].keyword;
|
151
|
+
this.keyword_grab(keywords, 'x'+i, 'city');
|
152
|
+
this.keyword_grab(keywords, 'x'+i, 'organization');
|
153
|
+
}
|
154
|
+
},
|
155
|
+
|
156
|
+
init: function() {
|
157
|
+
this.data_grab();
|
158
|
+
}
|
159
|
+
};
|
160
|
+
|
161
|
+
window.addEventListener("load", function () {
|
162
|
+
var ahole = new window.Rugrat();
|
163
|
+
ahole.init();
|
164
|
+
}, false);
|
165
|
+
|
data/lib/rugalytics/server.rb
CHANGED
@@ -1,42 +1,67 @@
|
|
1
|
-
require '
|
2
|
-
include WEBrick
|
1
|
+
require 'rack'
|
3
2
|
|
4
3
|
module Rugalytics
|
5
|
-
|
6
|
-
class Servlet < HTTPServlet::AbstractServlet
|
7
|
-
def do_GET(req, res)
|
8
|
-
res.body = "<HTML>hello, world.</HTML>"
|
9
|
-
res['Content-Type'] = "text/html"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
4
|
class Server
|
14
5
|
def initialize
|
15
|
-
begin
|
16
|
-
require 'webrick'
|
17
|
-
self.class.send(:include, WEBrick)
|
18
|
-
rescue LoadError
|
19
|
-
puts "You need to have webrick installed to run a rugalytics server"
|
20
|
-
end
|
21
|
-
|
22
6
|
@profile = Rugalytics.default_profile
|
23
7
|
@reports = {}
|
8
|
+
Rack::Handler::WEBrick.run(self, :Port=>8888)
|
9
|
+
end
|
24
10
|
|
25
|
-
|
11
|
+
def call(env)
|
12
|
+
path = env['PATH_INFO'].tr('/','')
|
26
13
|
|
27
|
-
|
14
|
+
if path.empty?
|
15
|
+
html = %Q|
|
16
|
+
<h1>Rugalytics on Rugrat</h1>
|
17
|
+
<p>TO INSTALL:</p>
|
18
|
+
<p>Add Greasemonkey to Firefox: <a href="https://addons.mozilla.org/firefox/748/">https://addons.mozilla.org/firefox/748/</a></p>
|
19
|
+
<p>Add rugrat user script: <a href="http://localhost:8888/rugrat.user.js">rugrat.user.js</a></p>
|
20
|
+
<p>Configure site for rugrat to run on:</p>
|
21
|
+
<p><code>Tools -> Greasemonkey -> Manage User Scripts</code><br/>
|
22
|
+
<code>-> select rugrat -> press "Add" -> add your site, e.g. http://your_site.com/* -> press "Close"</code></p>
|
23
|
+
<p>Create a rugalytics.yml config file containing:</p><pre>
|
24
|
+
---
|
25
|
+
account: your_account_name
|
26
|
+
profile: your_profile_name
|
27
|
+
username: your_user_name
|
28
|
+
password: your_pass_w
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
</pre>
|
31
|
+
<p>Run rugalytics on console in same directory as rugalytics.yml:</p>
|
32
|
+
<p><code>> rugalytics</code></p>
|
33
|
+
<p>Browse your site!</p>|
|
34
|
+
[200, {'Content-Type' => "text/html"}, html]
|
35
|
+
elsif path == 'rugrat.user.js'
|
36
|
+
[200, {'Content-Type' => "application/json"}, File.new(File.dirname(__FILE__)+'/rugrat.user.js').readlines ]
|
37
|
+
else
|
38
|
+
request = Rack::Request.new(env)
|
39
|
+
report_name = (path + '_report').to_sym
|
40
|
+
send_data(report_name, request.GET.symbolize_keys)
|
41
|
+
end
|
42
|
+
end
|
37
43
|
|
38
|
-
|
39
|
-
|
44
|
+
def send_data report_name, params
|
45
|
+
key = (params.values << report_name).join('')
|
46
|
+
@reports[key] ||= @profile.send(report_name, params)
|
47
|
+
report = @reports[key]
|
48
|
+
|
49
|
+
json = report.attributes.to_json
|
50
|
+
add_in_front params, json
|
51
|
+
report.attribute_names.each do |name|
|
52
|
+
if name[/(.*)pageviews_graph/]
|
53
|
+
total = "#{$1}pageviews_total".to_sym
|
54
|
+
add_in_front({total => report.send(total)}, json)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
add_in_front({:report_name => report.name}, json)
|
58
|
+
|
59
|
+
[200, {'Content-Type' => "application/json"}, json ]
|
40
60
|
end
|
61
|
+
|
62
|
+
private
|
63
|
+
def add_in_front hash, json
|
64
|
+
json.sub!('{', hash.to_json.chomp("}") + ', ' ) unless hash.empty?
|
65
|
+
end
|
41
66
|
end
|
42
67
|
end
|
data/lib/rugalytics.rb
CHANGED
@@ -12,7 +12,7 @@ require 'fastercsv'
|
|
12
12
|
|
13
13
|
# See README for usage documentation.
|
14
14
|
module Rugalytics
|
15
|
-
VERSION = "0.1.
|
15
|
+
VERSION = "0.1.7"
|
16
16
|
|
17
17
|
FORMAT_PDF = '0' unless defined? FORMAT_PDF
|
18
18
|
FORMAT_XML = '1' unless defined? FORMAT_XML
|
@@ -104,3 +104,5 @@ require File.dirname(__FILE__) + '/rugalytics/graph'
|
|
104
104
|
require File.dirname(__FILE__) + '/rugalytics/server'
|
105
105
|
|
106
106
|
# Rugalytics.config_setup(RAILS_ROOT) if defined?(RAILS_ROOT) && RAILS_ROOT
|
107
|
+
|
108
|
+
# Rugalytics::Server.new
|
data/rugalytics.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rugalytics}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.7"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Rob McKinnon"]
|
9
|
-
s.date = %q{2008-
|
9
|
+
s.date = %q{2008-12-02}
|
10
10
|
s.default_executable = %q{rugalytics}
|
11
11
|
s.description = %q{Rugalytics is a Ruby API for Google Analytics.}
|
12
12
|
s.email = ["rob ~@nospam@~ rubyforge.org"]
|
13
13
|
s.executables = ["rugalytics"]
|
14
14
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README"]
|
15
|
-
s.files = ["CHANGELOG", "lib/rugalytics/account.rb", "lib/rugalytics/connection.rb", "lib/rugalytics/graph.rb", "lib/rugalytics/item.rb", "lib/rugalytics/profile.rb", "lib/rugalytics/report.rb", "lib/rugalytics/server.rb", "lib/rugalytics.rb", "LICENSE", "Manifest", "README", "README.rdoc", "bin/rugalytics", "rugalytics.yml.example", "spec/fixtures/analytics_account_find_all.html", "spec/fixtures/analytics_profile_find_all.html", "spec/fixtures/dashboard_report_webgroup.xml", "spec/lib/rugalytics/account_spec.rb", "spec/lib/rugalytics/graph_spec.rb", "spec/lib/rugalytics/item_spec.rb", "spec/lib/rugalytics/profile_spec.rb", "spec/lib/rugalytics/report_spec.rb", "spec/lib/rugalytics_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "rugalytics.gemspec", "Rakefile"]
|
15
|
+
s.files = ["CHANGELOG", "lib/rugalytics/account.rb", "lib/rugalytics/connection.rb", "lib/rugalytics/graph.rb", "lib/rugalytics/item.rb", "lib/rugalytics/profile.rb", "lib/rugalytics/report.rb", "lib/rugalytics/server.rb", "lib/rugalytics/rugrat.user.js", "lib/rugalytics.rb", "LICENSE", "Manifest", "README", "README.rdoc", "bin/rugalytics", "rugalytics.yml.example", "spec/fixtures/analytics_account_find_all.html", "spec/fixtures/analytics_profile_find_all.html", "spec/fixtures/dashboard_report_webgroup.xml", "spec/lib/rugalytics/account_spec.rb", "spec/lib/rugalytics/graph_spec.rb", "spec/lib/rugalytics/item_spec.rb", "spec/lib/rugalytics/profile_spec.rb", "spec/lib/rugalytics/report_spec.rb", "spec/lib/rugalytics_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "rugalytics.gemspec", "Rakefile"]
|
16
16
|
s.has_rdoc = true
|
17
17
|
s.homepage = %q{}
|
18
18
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rugalytics", "--main", "README", "--inline-source"]
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_runtime_dependency(%q<googlebase>, [">= 0.2.0"])
|
32
32
|
s.add_runtime_dependency(%q<morph>, [">= 0.2.0"])
|
33
33
|
s.add_runtime_dependency(%q<fastercsv>, [">= 1.4.0"])
|
34
|
+
s.add_runtime_dependency(%q<rack>, [">= 0.4.0"])
|
34
35
|
s.add_development_dependency(%q<echoe>, [">= 0"])
|
35
36
|
else
|
36
37
|
s.add_dependency(%q<hpricot>, [">= 0.6"])
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
s.add_dependency(%q<googlebase>, [">= 0.2.0"])
|
39
40
|
s.add_dependency(%q<morph>, [">= 0.2.0"])
|
40
41
|
s.add_dependency(%q<fastercsv>, [">= 1.4.0"])
|
42
|
+
s.add_dependency(%q<rack>, [">= 0.4.0"])
|
41
43
|
s.add_dependency(%q<echoe>, [">= 0"])
|
42
44
|
end
|
43
45
|
else
|
@@ -46,6 +48,7 @@ Gem::Specification.new do |s|
|
|
46
48
|
s.add_dependency(%q<googlebase>, [">= 0.2.0"])
|
47
49
|
s.add_dependency(%q<morph>, [">= 0.2.0"])
|
48
50
|
s.add_dependency(%q<fastercsv>, [">= 1.4.0"])
|
51
|
+
s.add_dependency(%q<rack>, [">= 0.4.0"])
|
49
52
|
s.add_dependency(%q<echoe>, [">= 0"])
|
50
53
|
end
|
51
54
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rugalytics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob McKinnon
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-12-02 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -62,6 +62,16 @@ dependencies:
|
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: 1.4.0
|
64
64
|
version:
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: rack
|
67
|
+
type: :runtime
|
68
|
+
version_requirement:
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 0.4.0
|
74
|
+
version:
|
65
75
|
- !ruby/object:Gem::Dependency
|
66
76
|
name: echoe
|
67
77
|
type: :development
|
@@ -92,6 +102,7 @@ files:
|
|
92
102
|
- lib/rugalytics/profile.rb
|
93
103
|
- lib/rugalytics/report.rb
|
94
104
|
- lib/rugalytics/server.rb
|
105
|
+
- lib/rugalytics/rugrat.user.js
|
95
106
|
- lib/rugalytics.rb
|
96
107
|
- LICENSE
|
97
108
|
- Manifest
|