rugalytics 0.1.6 → 0.1.7
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/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
|