re_track 0.5.0 → 0.5.1
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +14 -0
- data/Gemfile.lock +12 -1
- data/app/models/re_track/referer_tracking.rb +5 -4
- data/lib/re_track/session_data.rb +45 -0
- data/lib/re_track/sweeper.rb +1 -3
- data/lib/re_track/tracker.rb +1 -11
- data/lib/re_track/version.rb +1 -1
- data/lib/re_track.rb +1 -0
- data/re_track.gemspec +1 -0
- data/spec/controllers/referer_tracking_spec.rb +35 -28
- data/spec/models/re_track/referer_tracking_spec.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4a8f049d25280c2b98be2acc101570c4688e0f9
|
4
|
+
data.tar.gz: 0ef22d8a87d56dbd79ac36ff49a1bf431c83b452
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dde4a74026f510f9364651854a75086c13a44a20f380e19eecb28a2b55fce214eb787e251164f4011bfea3344f4637f0078c29a72c9ddabf1029af3dac98e02a
|
7
|
+
data.tar.gz: befb9b03503eea3acdfed77424ca407047b96e981ac8f4c7f6b86f896ffa6439516da3644ce4456b31509a6136eb5187a8040b68343f73d8c9a7cb2a63f1a480
|
data/.rubocop.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
re_track (0.5.
|
4
|
+
re_track (0.5.1)
|
5
5
|
activesupport
|
6
6
|
mongoid (>= 3)
|
7
7
|
rails
|
@@ -40,6 +40,7 @@ GEM
|
|
40
40
|
bundler
|
41
41
|
rake
|
42
42
|
arel (3.0.3)
|
43
|
+
ast (1.1.0)
|
43
44
|
builder (3.0.4)
|
44
45
|
coderay (1.1.0)
|
45
46
|
coveralls (0.7.0)
|
@@ -72,7 +73,11 @@ GEM
|
|
72
73
|
moped (1.5.1)
|
73
74
|
multi_json (1.8.2)
|
74
75
|
origin (1.1.0)
|
76
|
+
parser (2.0.0)
|
77
|
+
ast (~> 1.1)
|
78
|
+
slop (~> 3.4, >= 3.4.5)
|
75
79
|
polyglot (0.3.3)
|
80
|
+
powerpack (0.0.9)
|
76
81
|
pry (0.9.12.3)
|
77
82
|
coderay (~> 1.0)
|
78
83
|
method_source (~> 0.8)
|
@@ -99,6 +104,7 @@ GEM
|
|
99
104
|
rake (>= 0.8.7)
|
100
105
|
rdoc (~> 3.4)
|
101
106
|
thor (>= 0.14.6, < 2.0)
|
107
|
+
rainbow (1.1.4)
|
102
108
|
rake (10.1.0)
|
103
109
|
rdoc (3.12.2)
|
104
110
|
json (~> 1.4)
|
@@ -115,6 +121,10 @@ GEM
|
|
115
121
|
rspec-core (~> 2.14.0)
|
116
122
|
rspec-expectations (~> 2.14.0)
|
117
123
|
rspec-mocks (~> 2.14.0)
|
124
|
+
rubocop (0.15.0)
|
125
|
+
parser (~> 2.0)
|
126
|
+
powerpack (~> 0.0.6)
|
127
|
+
rainbow (>= 1.1.4)
|
118
128
|
simplecov (0.8.2)
|
119
129
|
docile (~> 1.1.0)
|
120
130
|
multi_json
|
@@ -147,4 +157,5 @@ DEPENDENCIES
|
|
147
157
|
pry
|
148
158
|
re_track!
|
149
159
|
rspec-rails
|
160
|
+
rubocop
|
150
161
|
simplecov
|
@@ -16,7 +16,7 @@ module ReTrack
|
|
16
16
|
field :accept_language, type: String
|
17
17
|
|
18
18
|
[:referer_url, :first_url, :user_agent, :first_visited_at, :ip,
|
19
|
-
:forwarded_ip, :accept_language].each { |field| index(
|
19
|
+
:forwarded_ip, :accept_language].each { |field| index(field => 1) }
|
20
20
|
|
21
21
|
# Extract query parameters from referer_url and first_url.
|
22
22
|
#
|
@@ -32,18 +32,19 @@ module ReTrack
|
|
32
32
|
#
|
33
33
|
# @return [String] The value for the given query parameter or nil.
|
34
34
|
def query(parameter, url_field_name = 'first_url')
|
35
|
-
|
35
|
+
url = value_for(url_field_name)
|
36
|
+
return unless url
|
36
37
|
query_hash(url)[parameter.to_s]
|
37
38
|
end
|
38
39
|
|
39
40
|
private
|
40
41
|
|
41
42
|
def query_hash(url)
|
42
|
-
Rack::Utils.parse_query URI.parse(CGI
|
43
|
+
Rack::Utils.parse_query URI.parse(CGI.unescape(url)).query rescue {}
|
43
44
|
end
|
44
45
|
|
45
46
|
def value_for(field)
|
46
|
-
return
|
47
|
+
return unless %w(referer_url first_url).include? field.to_s
|
47
48
|
public_send("#{field}")
|
48
49
|
end
|
49
50
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module ReTrack
|
2
|
+
module SessionData
|
3
|
+
ATTRIBUTES = [
|
4
|
+
:referer_url, :first_url, :user_agent, :first_visited_at, :ip,
|
5
|
+
:accept_language, :forwarded_ip
|
6
|
+
]
|
7
|
+
|
8
|
+
def to_hash(request)
|
9
|
+
@request = request
|
10
|
+
Hash[ATTRIBUTES.map { |k, v| [k, send(k)] }]
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def referer_url
|
16
|
+
@request.headers['HTTP_REFERER'].presence || 'none'
|
17
|
+
end
|
18
|
+
|
19
|
+
def first_url
|
20
|
+
@request.url
|
21
|
+
end
|
22
|
+
|
23
|
+
def user_agent
|
24
|
+
@request.env['HTTP_USER_AGENT']
|
25
|
+
end
|
26
|
+
|
27
|
+
def first_visited_at
|
28
|
+
Time.now
|
29
|
+
end
|
30
|
+
|
31
|
+
def ip
|
32
|
+
@request.remote_ip
|
33
|
+
end
|
34
|
+
|
35
|
+
def accept_language
|
36
|
+
@request.env['HTTP_ACCEPT_LANGUAGE']
|
37
|
+
end
|
38
|
+
|
39
|
+
def forwarded_ip
|
40
|
+
@request.env['HTTP_X_FORWARDED_FOR'] || @request.env['HTTP_CLIENT_IP']
|
41
|
+
end
|
42
|
+
|
43
|
+
extend self
|
44
|
+
end
|
45
|
+
end
|
data/lib/re_track/sweeper.rb
CHANGED
@@ -44,9 +44,7 @@ module ReTrack
|
|
44
44
|
|
45
45
|
def rt_after_create(record)
|
46
46
|
return unless record.persisted?
|
47
|
-
if session && session[:retrack]
|
48
|
-
rt_create_referer_tracking! record
|
49
|
-
end
|
47
|
+
rt_create_referer_tracking!(record) if session && session[:retrack]
|
50
48
|
rescue => e
|
51
49
|
Rails.logger.info(
|
52
50
|
"ReTrack::Sweeper.after_create error saving record: #{e}")
|
data/lib/re_track/tracker.rb
CHANGED
@@ -8,19 +8,9 @@ module ReTrack
|
|
8
8
|
|
9
9
|
private
|
10
10
|
|
11
|
-
TRACK = {
|
12
|
-
referer_url: ->(request) { request.headers['HTTP_REFERER'].presence || 'none' },
|
13
|
-
first_url: ->(request) { request.url },
|
14
|
-
user_agent: ->(request) { request.env['HTTP_USER_AGENT'] },
|
15
|
-
first_visited_at: ->(request) { Time.now },
|
16
|
-
ip: ->(request) { request.remote_ip },
|
17
|
-
accept_language: ->(request) { request.env['HTTP_ACCEPT_LANGUAGE'] },
|
18
|
-
forwarded_ip: ->(request) { request.env['HTTP_X_FORWARDED_FOR'] || request.env['HTTP_CLIENT_IP'] }
|
19
|
-
}
|
20
|
-
|
21
11
|
def rt_track_referer
|
22
12
|
session[:retrack].nil? && !request_from_a_known_bot? &&
|
23
|
-
session[:retrack] =
|
13
|
+
session[:retrack] = SessionData.to_hash(request)
|
24
14
|
end
|
25
15
|
|
26
16
|
def request_from_a_known_bot?
|
data/lib/re_track/version.rb
CHANGED
data/lib/re_track.rb
CHANGED
data/re_track.gemspec
CHANGED
@@ -1,76 +1,75 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe UsersController,
|
3
|
+
describe UsersController, 'RefererTracking' do
|
4
4
|
before :each do
|
5
|
-
@request.env['HTTP_REFERER'] =
|
6
|
-
@request.env['HTTP_USER_AGENT'] = @ua =
|
5
|
+
@request.env['HTTP_REFERER'] = @referer = 'awesome.pa.ge/believe/me'
|
6
|
+
@request.env['HTTP_USER_AGENT'] = @ua = 'Fancy new UA'
|
7
7
|
@request.env['REMOTE_ADDR'] = @ip = '102.97.107.101'
|
8
|
+
@request.env['HTTP_ACCEPT_LANGUAGE'] = @accept_language = 'eo'
|
9
|
+
@request.env['HTTP_X_FORWARDED_FOR'] = @forwarded_ip = '10.0.23.42'
|
8
10
|
get :new
|
9
11
|
end
|
10
12
|
|
11
|
-
it
|
13
|
+
it 'saves referer_url to session' do
|
12
14
|
session[:retrack].should_not be_blank
|
13
15
|
session[:retrack][:referer_url].should == @referer
|
14
16
|
end
|
15
17
|
|
16
|
-
it
|
18
|
+
it 'saves first_url to session' do
|
17
19
|
session[:retrack].should_not be_blank
|
18
|
-
session[:retrack][:first_url].should =~
|
20
|
+
session[:retrack][:first_url].should =~ /users\/new$/
|
19
21
|
end
|
20
22
|
|
21
|
-
context
|
23
|
+
context 'on the second request' do
|
22
24
|
before :each do
|
23
|
-
@request.env['HTTP_REFERER'] =
|
25
|
+
@request.env['HTTP_REFERER'] = 'this.is.the.new/referer'
|
24
26
|
end
|
25
27
|
|
26
|
-
it
|
28
|
+
it 'does not update referer_url' do
|
27
29
|
get :index
|
28
30
|
session[:retrack][:referer_url].should == @referer
|
29
31
|
end
|
30
32
|
|
31
|
-
it
|
33
|
+
it 'does not update first_url' do
|
32
34
|
get :index
|
33
|
-
session[:retrack][:first_url].should =~
|
35
|
+
session[:retrack][:first_url].should =~ /users\/new$/
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
|
-
describe
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
}.to change(User.all, :count).by(1)
|
39
|
+
describe 'POST create' do
|
40
|
+
subject { -> { post :create } }
|
41
|
+
it 'saves a user' do
|
42
|
+
should change(User.all, :count).by(1)
|
42
43
|
end
|
43
44
|
|
44
|
-
it
|
45
|
-
|
46
|
-
post :create
|
47
|
-
}.to change(ReTrack::RefererTracking.all, :count).by(1)
|
45
|
+
it 'saves a RefererTracking' do
|
46
|
+
should change(ReTrack::RefererTracking.all, :count).by(1)
|
48
47
|
end
|
49
48
|
|
50
|
-
context
|
49
|
+
context 'when saving the RefererTracking' do
|
51
50
|
before :each do
|
52
51
|
post :create
|
53
52
|
@rt = ReTrack::RefererTracking.last
|
54
53
|
end
|
55
54
|
|
56
|
-
it
|
55
|
+
it 'saves the referer_url in RefererTracking' do
|
57
56
|
@rt.referer_url.should == @referer
|
58
57
|
end
|
59
58
|
|
60
|
-
it
|
61
|
-
@rt.first_url.should =~
|
59
|
+
it 'saves the first_url in RefererTracking' do
|
60
|
+
@rt.first_url.should =~ /users\/new$/
|
62
61
|
end
|
63
62
|
|
64
|
-
it
|
63
|
+
it 'saves the user_agent in RefererTracking' do
|
65
64
|
@rt.user_agent.should == @ua
|
66
65
|
end
|
67
66
|
|
68
|
-
it
|
67
|
+
it 'saves the first_visited_at in RefererTracking' do
|
69
68
|
# TODO: use Timecop
|
70
69
|
@rt.first_visited_at.should be_within(5.seconds).of(DateTime.now)
|
71
70
|
end
|
72
71
|
|
73
|
-
it
|
72
|
+
it 'saves the correct user in RefererTracking' do
|
74
73
|
user = User.last
|
75
74
|
@rt.trackable.should == user
|
76
75
|
end
|
@@ -78,9 +77,17 @@ describe UsersController, "RefererTracking" do
|
|
78
77
|
it 'saves the ip in RefererTracking' do
|
79
78
|
@rt.ip.should == @ip
|
80
79
|
end
|
80
|
+
|
81
|
+
it 'saves the accept_language in RefererTracking' do
|
82
|
+
expect(@rt.accept_language).to eq @accept_language
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'saves forwarded_ip in RefererTracking' do
|
86
|
+
expect(@rt.forwarded_ip).to eq @forwarded_ip
|
87
|
+
end
|
81
88
|
end
|
82
89
|
|
83
|
-
it
|
90
|
+
it 'completes the response when there are errors in the sweeper' do
|
84
91
|
ReTrack::RefererTracking.any_instance.stub(:save).and_raise
|
85
92
|
post :create
|
86
93
|
response.should be_a_redirect # not a 500
|
@@ -27,7 +27,7 @@ module ReTrack
|
|
27
27
|
|
28
28
|
context 'when first_url is url_encoded' do
|
29
29
|
before do
|
30
|
-
referer_tracking.first_url = CGI
|
30
|
+
referer_tracking.first_url = CGI.escape 'http://google.de/?q=query'
|
31
31
|
end
|
32
32
|
it { should == 'query' }
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: re_track
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gebhard Wöstemeyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
description: Track HTTP-Referrers in Rails using Mongoid/MongoDB
|
140
154
|
email:
|
141
155
|
- g.woestemeyer@gmail.com
|
@@ -146,6 +160,7 @@ files:
|
|
146
160
|
- .coveralls.yml
|
147
161
|
- .gitignore
|
148
162
|
- .rspec
|
163
|
+
- .rubocop.yml
|
149
164
|
- .ruby-gemset
|
150
165
|
- .ruby-version
|
151
166
|
- .travis.yml
|
@@ -161,6 +176,7 @@ files:
|
|
161
176
|
- gemfiles/rails_4.gemfile
|
162
177
|
- lib/re_track.rb
|
163
178
|
- lib/re_track/engine.rb
|
179
|
+
- lib/re_track/session_data.rb
|
164
180
|
- lib/re_track/sweeper.rb
|
165
181
|
- lib/re_track/trackable.rb
|
166
182
|
- lib/re_track/tracker.rb
|