rack_clicky 1.0.2 → 1.0.3
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/Gemfile +4 -0
- data/Gemfile.lock +18 -0
- data/Rakefile +2 -42
- data/lib/rack_clicky.rb +36 -24
- data/lib/rack_clicky/version.rb +3 -0
- data/rack_clicky.gemspec +16 -46
- data/test/helper.rb +1 -0
- data/test/test_rack_clicky.rb +11 -14
- metadata +48 -58
- data/VERSION +0 -1
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/Rakefile
CHANGED
@@ -1,52 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require 'rake'
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rake/testtask'
|
3
3
|
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "rack_clicky"
|
8
|
-
gem.summary = "Clicky Analytics for your Rack Apps"
|
9
|
-
gem.description = "Embeds the Clicky tracking code at the end of your HTML"
|
10
|
-
gem.email = "mark@amerine.net"
|
11
|
-
gem.homepage = "http://github.com/amerine/rack_clicky"
|
12
|
-
gem.authors = ["Mark Turner"]
|
13
|
-
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
-
end
|
15
|
-
Jeweler::GemcutterTasks.new
|
16
|
-
rescue LoadError
|
17
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
18
|
-
end
|
19
4
|
|
20
|
-
require 'rake/testtask'
|
21
5
|
Rake::TestTask.new(:test) do |test|
|
22
6
|
test.libs << 'lib' << 'test'
|
23
7
|
test.pattern = 'test/**/test_*.rb'
|
24
8
|
test.verbose = true
|
25
9
|
end
|
26
10
|
|
27
|
-
begin
|
28
|
-
require 'rcov/rcovtask'
|
29
|
-
Rcov::RcovTask.new do |test|
|
30
|
-
test.libs << 'test'
|
31
|
-
test.pattern = 'test/**/test_*.rb'
|
32
|
-
test.verbose = true
|
33
|
-
end
|
34
|
-
rescue LoadError
|
35
|
-
task :rcov do
|
36
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
task :test => :check_dependencies
|
41
11
|
|
42
12
|
task :default => :test
|
43
|
-
|
44
|
-
require 'rake/rdoctask'
|
45
|
-
Rake::RDocTask.new do |rdoc|
|
46
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
47
|
-
|
48
|
-
rdoc.rdoc_dir = 'rdoc'
|
49
|
-
rdoc.title = "rack_clicky #{version}"
|
50
|
-
rdoc.rdoc_files.include('README*')
|
51
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
52
|
-
end
|
data/lib/rack_clicky.rb
CHANGED
@@ -1,43 +1,55 @@
|
|
1
|
-
|
1
|
+
require "rack_clicky/version"
|
2
|
+
|
3
|
+
module Rack
|
2
4
|
class Clicky
|
3
|
-
|
5
|
+
|
4
6
|
TRACKING_CODE = <<-EOTC
|
5
7
|
<script src="http://static.getclicky.com/js" type="text/javascript"></script>
|
6
8
|
<script type="text/javascript">clicky.init({{CODE}});</script>
|
7
9
|
<noscript><p><img alt="Clicky" width="1" height="1" src="http://in.getclicky.com/{{CODE}}ns.gif" /></p></noscript>
|
8
10
|
EOTC
|
9
|
-
|
10
|
-
def initialize
|
11
|
+
|
12
|
+
def initialize app, site_id, options={}
|
11
13
|
@app = app
|
12
14
|
@site_id = site_id
|
13
15
|
end
|
14
|
-
|
15
|
-
def call
|
16
|
+
|
17
|
+
def call env
|
16
18
|
dup._call(env)
|
17
19
|
end
|
18
|
-
|
19
|
-
def _call
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
20
|
+
|
21
|
+
def _call env
|
22
|
+
status, headers, response = @app.call(env)
|
23
|
+
|
24
|
+
if should_inject_clicky? status, headers, response
|
25
|
+
response = inject_tracking(response)
|
26
|
+
fix_content_length(headers, response)
|
27
|
+
end
|
28
|
+
|
29
|
+
[status, headers, response]
|
30
|
+
end
|
31
|
+
|
32
|
+
def should_inject_clicky? status, headers, response
|
33
|
+
status == 200 &&
|
34
|
+
headers["Content-Type"] &&
|
35
|
+
(headers["Content-Type"].include?("text/html") || headers["Content-Type"].include?("application/xhtml"))
|
36
|
+
end
|
37
|
+
|
38
|
+
def fix_content_length headers, response
|
39
|
+
if headers["Content-Length"]
|
40
|
+
length = response.to_ary.inject(0) { |len, part| len + Rack::Utils.bytesize(part) }
|
41
|
+
headers['Content-Length'] = length.to_s
|
28
42
|
end
|
29
|
-
response.finish
|
30
43
|
end
|
31
|
-
|
32
|
-
def inject_tracking
|
33
|
-
|
44
|
+
|
45
|
+
def inject_tracking response, body=""
|
46
|
+
response.each { |s| body << s.to_s }
|
47
|
+
[body.gsub(/<\/body>/, "#{track_code}\n</body>")]
|
34
48
|
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
49
|
+
|
38
50
|
def track_code
|
39
51
|
TRACKING_CODE.gsub(/\{\{CODE\}\}/, @site_id)
|
40
52
|
end
|
41
|
-
|
53
|
+
private :track_code
|
42
54
|
end
|
43
55
|
end
|
data/rack_clicky.gemspec
CHANGED
@@ -1,54 +1,24 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rack_clicky/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
6
|
+
s.name = "rack_clicky"
|
7
|
+
s.version = RackClicky::VERSION
|
8
|
+
s.authors = ["Mark Turner"]
|
9
|
+
s.email = ["mark@amerine.net"]
|
10
|
+
s.homepage = "http://github.com/amerine/rack_clicky"
|
11
|
+
s.summary = %q{Clicky Analytics for your Rack Apps}
|
13
12
|
s.description = %q{Embeds the Clicky tracking code at the end of your HTML}
|
14
|
-
|
15
|
-
s.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
s.files
|
20
|
-
".document",
|
21
|
-
".gitignore",
|
22
|
-
"LICENSE",
|
23
|
-
"README.rdoc",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"lib/rack_clicky.rb",
|
27
|
-
"rack_clicky.gemspec",
|
28
|
-
"test/helper.rb",
|
29
|
-
"test/test_rack_clicky.rb"
|
30
|
-
]
|
31
|
-
s.homepage = %q{http://github.com/amerine/rack_clicky}
|
32
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
13
|
+
|
14
|
+
s.rubyforge_project = "rack_clicky"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
33
19
|
s.require_paths = ["lib"]
|
34
|
-
s.rubygems_version = %q{1.3.7}
|
35
|
-
s.summary = %q{Clicky Analytics for your Rack Apps}
|
36
|
-
s.test_files = [
|
37
|
-
"test/helper.rb",
|
38
|
-
"test/test_rack_clicky.rb"
|
39
|
-
]
|
40
20
|
|
41
|
-
|
42
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
43
|
-
s.specification_version = 3
|
21
|
+
s.add_development_dependency "thoughtbot-shoulda"
|
44
22
|
|
45
|
-
|
46
|
-
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
47
|
-
else
|
48
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
49
|
-
end
|
50
|
-
else
|
51
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
52
|
-
end
|
23
|
+
s.add_dependency "rack"
|
53
24
|
end
|
54
|
-
|
data/test/helper.rb
CHANGED
data/test/test_rack_clicky.rb
CHANGED
@@ -1,33 +1,31 @@
|
|
1
1
|
require 'helper'
|
2
|
-
require 'rack/mock'
|
3
2
|
|
4
3
|
class TestRackClicky < Test::Unit::TestCase
|
5
4
|
context "Embedding clicky" do
|
6
5
|
should "place the tracking code at the end of an HTML request" do
|
7
6
|
assert_match EXPECTED_CODE, request.body
|
8
7
|
end
|
9
|
-
|
8
|
+
|
10
9
|
should "place the tracking code at the end of an XHTML request" do
|
11
10
|
assert_match EXPECTED_CODE, request(:content_type => 'application/xhtml+xml').body
|
12
11
|
end
|
13
|
-
|
12
|
+
|
14
13
|
should "not place the tracking code in a non HTML request" do
|
15
14
|
assert_no_match EXPECTED_CODE, request(:content_type => 'application/xml', :body => [XML]).body
|
16
15
|
end
|
17
|
-
|
16
|
+
|
18
17
|
should "insert the site id" do
|
19
18
|
assert_match /clicky\.init\(000000\)/, request.body
|
20
19
|
end
|
21
|
-
|
20
|
+
|
22
21
|
end
|
23
|
-
|
24
|
-
|
22
|
+
|
25
23
|
private
|
26
|
-
|
24
|
+
|
27
25
|
EXPECTED_CODE = /<script.*clicky\.init.*<\/script>.*<\/body>/m
|
28
|
-
|
26
|
+
|
29
27
|
SITE_ID = "000000"
|
30
|
-
|
28
|
+
|
31
29
|
HTML = <<-EOHTML
|
32
30
|
<html>
|
33
31
|
<head>
|
@@ -39,7 +37,7 @@ class TestRackClicky < Test::Unit::TestCase
|
|
39
37
|
</body>
|
40
38
|
</html>
|
41
39
|
EOHTML
|
42
|
-
|
40
|
+
|
43
41
|
XML = <<-EOXML
|
44
42
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
45
43
|
<user>
|
@@ -47,14 +45,14 @@ class TestRackClicky < Test::Unit::TestCase
|
|
47
45
|
<age>Unknown</age>
|
48
46
|
</user>
|
49
47
|
EOXML
|
50
|
-
|
48
|
+
|
51
49
|
def request(options={})
|
52
50
|
@app = app(options)
|
53
51
|
request = Rack::MockRequest.new(@app).get('/')
|
54
52
|
yield(@app, request) if block_given?
|
55
53
|
request
|
56
54
|
end
|
57
|
-
|
55
|
+
|
58
56
|
def app(options={})
|
59
57
|
options = options.clone
|
60
58
|
options[:content_type] ||= "text/html"
|
@@ -62,5 +60,4 @@ class TestRackClicky < Test::Unit::TestCase
|
|
62
60
|
rack_app = lambda { |env| [200, { 'Content-Type' => options.delete(:content_type) }, options.delete(:body)] }
|
63
61
|
Rack::Clicky.new(rack_app, SITE_ID)
|
64
62
|
end
|
65
|
-
|
66
63
|
end
|
metadata
CHANGED
@@ -1,91 +1,81 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack_clicky
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 1.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.3
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Mark Turner
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-09-22 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: thoughtbot-shoulda
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70139124813360 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :development
|
34
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70139124813360
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rack
|
27
|
+
requirement: &70139124842620 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70139124842620
|
35
36
|
description: Embeds the Clicky tracking code at the end of your HTML
|
36
|
-
email:
|
37
|
+
email:
|
38
|
+
- mark@amerine.net
|
37
39
|
executables: []
|
38
|
-
|
39
40
|
extensions: []
|
40
|
-
|
41
|
-
|
42
|
-
- LICENSE
|
43
|
-
- README.rdoc
|
44
|
-
files:
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
45
43
|
- .document
|
46
44
|
- .gitignore
|
45
|
+
- Gemfile
|
46
|
+
- Gemfile.lock
|
47
47
|
- LICENSE
|
48
48
|
- README.rdoc
|
49
49
|
- Rakefile
|
50
|
-
- VERSION
|
51
50
|
- lib/rack_clicky.rb
|
51
|
+
- lib/rack_clicky/version.rb
|
52
52
|
- rack_clicky.gemspec
|
53
53
|
- test/helper.rb
|
54
54
|
- test/test_rack_clicky.rb
|
55
|
-
has_rdoc: true
|
56
55
|
homepage: http://github.com/amerine/rack_clicky
|
57
56
|
licenses: []
|
58
|
-
|
59
57
|
post_install_message:
|
60
|
-
rdoc_options:
|
61
|
-
|
62
|
-
require_paths:
|
58
|
+
rdoc_options: []
|
59
|
+
require_paths:
|
63
60
|
- lib
|
64
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
62
|
none: false
|
66
|
-
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
|
70
|
-
|
71
|
-
- 0
|
72
|
-
version: "0"
|
73
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
68
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
|
79
|
-
segments:
|
80
|
-
- 0
|
81
|
-
version: "0"
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
82
73
|
requirements: []
|
83
|
-
|
84
|
-
|
85
|
-
rubygems_version: 1.3.7
|
74
|
+
rubyforge_project: rack_clicky
|
75
|
+
rubygems_version: 1.8.6
|
86
76
|
signing_key:
|
87
77
|
specification_version: 3
|
88
78
|
summary: Clicky Analytics for your Rack Apps
|
89
|
-
test_files:
|
79
|
+
test_files:
|
90
80
|
- test/helper.rb
|
91
81
|
- test/test_rack_clicky.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.0.2
|