re_track 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +8 -0
- data/Appraisals +9 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +150 -0
- data/README.md +6 -9
- data/Rakefile +7 -1
- data/app/models/re_track/referer_tracking.rb +3 -0
- data/gemfiles/rails_3.gemfile +9 -0
- data/gemfiles/rails_4.gemfile +9 -0
- data/lib/re_track/sweeper.rb +50 -12
- data/lib/re_track/trackable.rb +2 -6
- data/lib/re_track/tracker.rb +21 -18
- data/lib/re_track/version.rb +1 -1
- data/lib/re_track.rb +4 -4
- data/re_track.gemspec +29 -0
- data/script/rails +8 -0
- data/spec/controllers/referer_tracking_spec.rb +89 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/users_controller.rb +44 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/models/user.rb +6 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/users/_form.html.erb +17 -0
- data/spec/dummy/app/views/users/edit.html.erb +6 -0
- data/spec/dummy/app/views/users/index.html.erb +21 -0
- data/spec/dummy/app/views/users/new.html.erb +5 -0
- data/spec/dummy/app/views/users/show.html.erb +5 -0
- data/spec/dummy/config/application.rb +67 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +38 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +8 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/mongoid.yml +19 -0
- data/spec/dummy/config/routes.rb +7 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/.gitkeep +0 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/models/re_track/referer_tracking_spec.rb +64 -0
- data/spec/spec_helper.rb +51 -0
- metadata +159 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9c55efc6a40f7368c49e1dccbc6e12418ae4c11
|
4
|
+
data.tar.gz: 1f761b5374e042dd592026d141d7761022edfbc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f27cdeb865526103258b6ce3baea05e14dcf37f1b6cffcec8ee3c9ccca2b53687efeb385b0660e1b21ed4d25e06b6468f1dec1ca2021752f6b8363772637ab5e
|
7
|
+
data.tar.gz: c30b3a2e9867cc8884ad3dd5c0ece2c2e9767da87ee94af3b0c9f6afd761d0b1ba6ee6260f6bdd065ab5b2ea20e980663f366571a5eba17b220a942ac75dc771
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
re_track
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0
|
data/.travis.yml
ADDED
data/Appraisals
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
re_track (0.5.0)
|
5
|
+
activesupport
|
6
|
+
mongoid (>= 3)
|
7
|
+
rails
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
actionmailer (3.2.15)
|
13
|
+
actionpack (= 3.2.15)
|
14
|
+
mail (~> 2.5.4)
|
15
|
+
actionpack (3.2.15)
|
16
|
+
activemodel (= 3.2.15)
|
17
|
+
activesupport (= 3.2.15)
|
18
|
+
builder (~> 3.0.0)
|
19
|
+
erubis (~> 2.7.0)
|
20
|
+
journey (~> 1.0.4)
|
21
|
+
rack (~> 1.4.5)
|
22
|
+
rack-cache (~> 1.2)
|
23
|
+
rack-test (~> 0.6.1)
|
24
|
+
sprockets (~> 2.2.1)
|
25
|
+
activemodel (3.2.15)
|
26
|
+
activesupport (= 3.2.15)
|
27
|
+
builder (~> 3.0.0)
|
28
|
+
activerecord (3.2.15)
|
29
|
+
activemodel (= 3.2.15)
|
30
|
+
activesupport (= 3.2.15)
|
31
|
+
arel (~> 3.0.2)
|
32
|
+
tzinfo (~> 0.3.29)
|
33
|
+
activeresource (3.2.15)
|
34
|
+
activemodel (= 3.2.15)
|
35
|
+
activesupport (= 3.2.15)
|
36
|
+
activesupport (3.2.15)
|
37
|
+
i18n (~> 0.6, >= 0.6.4)
|
38
|
+
multi_json (~> 1.0)
|
39
|
+
appraisal (0.5.2)
|
40
|
+
bundler
|
41
|
+
rake
|
42
|
+
arel (3.0.3)
|
43
|
+
builder (3.0.4)
|
44
|
+
coderay (1.1.0)
|
45
|
+
coveralls (0.7.0)
|
46
|
+
multi_json (~> 1.3)
|
47
|
+
rest-client
|
48
|
+
simplecov (>= 0.7)
|
49
|
+
term-ansicolor
|
50
|
+
thor
|
51
|
+
database_cleaner (1.2.0)
|
52
|
+
diff-lcs (1.2.5)
|
53
|
+
docile (1.1.0)
|
54
|
+
erubis (2.7.0)
|
55
|
+
hike (1.2.3)
|
56
|
+
i18n (0.6.5)
|
57
|
+
journey (1.0.4)
|
58
|
+
jquery-rails (3.0.4)
|
59
|
+
railties (>= 3.0, < 5.0)
|
60
|
+
thor (>= 0.14, < 2.0)
|
61
|
+
json (1.8.1)
|
62
|
+
mail (2.5.4)
|
63
|
+
mime-types (~> 1.16)
|
64
|
+
treetop (~> 1.4.8)
|
65
|
+
method_source (0.8.2)
|
66
|
+
mime-types (1.25)
|
67
|
+
mongoid (3.1.5)
|
68
|
+
activemodel (~> 3.2)
|
69
|
+
moped (~> 1.4)
|
70
|
+
origin (~> 1.0)
|
71
|
+
tzinfo (~> 0.3.29)
|
72
|
+
moped (1.5.1)
|
73
|
+
multi_json (1.8.2)
|
74
|
+
origin (1.1.0)
|
75
|
+
polyglot (0.3.3)
|
76
|
+
pry (0.9.12.3)
|
77
|
+
coderay (~> 1.0)
|
78
|
+
method_source (~> 0.8)
|
79
|
+
slop (~> 3.4)
|
80
|
+
rack (1.4.5)
|
81
|
+
rack-cache (1.2)
|
82
|
+
rack (>= 0.4)
|
83
|
+
rack-ssl (1.3.3)
|
84
|
+
rack
|
85
|
+
rack-test (0.6.2)
|
86
|
+
rack (>= 1.0)
|
87
|
+
rails (3.2.15)
|
88
|
+
actionmailer (= 3.2.15)
|
89
|
+
actionpack (= 3.2.15)
|
90
|
+
activerecord (= 3.2.15)
|
91
|
+
activeresource (= 3.2.15)
|
92
|
+
activesupport (= 3.2.15)
|
93
|
+
bundler (~> 1.0)
|
94
|
+
railties (= 3.2.15)
|
95
|
+
railties (3.2.15)
|
96
|
+
actionpack (= 3.2.15)
|
97
|
+
activesupport (= 3.2.15)
|
98
|
+
rack-ssl (~> 1.3.2)
|
99
|
+
rake (>= 0.8.7)
|
100
|
+
rdoc (~> 3.4)
|
101
|
+
thor (>= 0.14.6, < 2.0)
|
102
|
+
rake (10.1.0)
|
103
|
+
rdoc (3.12.2)
|
104
|
+
json (~> 1.4)
|
105
|
+
rest-client (1.6.7)
|
106
|
+
mime-types (>= 1.16)
|
107
|
+
rspec-core (2.14.7)
|
108
|
+
rspec-expectations (2.14.4)
|
109
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
110
|
+
rspec-mocks (2.14.4)
|
111
|
+
rspec-rails (2.14.0)
|
112
|
+
actionpack (>= 3.0)
|
113
|
+
activesupport (>= 3.0)
|
114
|
+
railties (>= 3.0)
|
115
|
+
rspec-core (~> 2.14.0)
|
116
|
+
rspec-expectations (~> 2.14.0)
|
117
|
+
rspec-mocks (~> 2.14.0)
|
118
|
+
simplecov (0.8.2)
|
119
|
+
docile (~> 1.1.0)
|
120
|
+
multi_json
|
121
|
+
simplecov-html (~> 0.8.0)
|
122
|
+
simplecov-html (0.8.0)
|
123
|
+
slop (3.4.7)
|
124
|
+
sprockets (2.2.2)
|
125
|
+
hike (~> 1.2)
|
126
|
+
multi_json (~> 1.0)
|
127
|
+
rack (~> 1.0)
|
128
|
+
tilt (~> 1.1, != 1.3.0)
|
129
|
+
term-ansicolor (1.2.2)
|
130
|
+
tins (~> 0.8)
|
131
|
+
thor (0.18.1)
|
132
|
+
tilt (1.4.1)
|
133
|
+
tins (0.13.1)
|
134
|
+
treetop (1.4.15)
|
135
|
+
polyglot
|
136
|
+
polyglot (>= 0.3.1)
|
137
|
+
tzinfo (0.3.38)
|
138
|
+
|
139
|
+
PLATFORMS
|
140
|
+
ruby
|
141
|
+
|
142
|
+
DEPENDENCIES
|
143
|
+
appraisal
|
144
|
+
coveralls
|
145
|
+
database_cleaner
|
146
|
+
jquery-rails
|
147
|
+
pry
|
148
|
+
re_track!
|
149
|
+
rspec-rails
|
150
|
+
simplecov
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# ReTrack
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/gewo/re_track.png)](https://travis-ci.org/gewo/re_track/)
|
4
|
+
[![Coverage Status](https://coveralls.io/repos/gewo/re_track/badge.png)](https://coveralls.io/r/gewo/re_track)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/gewo/re_track.png)](https://codeclimate.com/github/gewo/re_track)
|
6
|
+
[![Dependency Status](https://gemnasium.com/gewo/re_track.png)](https://gemnasium.com/gewo/re_track)
|
4
7
|
|
5
8
|
Track HTTP-Referrers in Rails using Mongoid.
|
6
9
|
|
@@ -27,7 +30,8 @@ Or install it yourself as:
|
|
27
30
|
|
28
31
|
OtherController
|
29
32
|
# put in the controllers which create the model you want to track
|
30
|
-
|
33
|
+
include ReTrack::Sweeper
|
34
|
+
re_track :user # there has to be a trackable @user instance variable
|
31
35
|
end
|
32
36
|
|
33
37
|
MyModel
|
@@ -35,19 +39,12 @@ Or install it yourself as:
|
|
35
39
|
include ReTrack::Trackable
|
36
40
|
end
|
37
41
|
|
38
|
-
When your `OtherController` creates `MyModel` a
|
42
|
+
When your `OtherController` creates `MyModel` in its `create`-action a
|
39
43
|
`ReTrack::RefererTracking` is created as well, access it like this:
|
40
44
|
|
41
45
|
my_model.referer_tracking
|
42
46
|
ReTrack::RefererTracking.all.distinct(:first_url)
|
43
47
|
|
44
|
-
## TODO
|
45
|
-
|
46
|
-
### Get rid of `ActionController::Caching::Sweeper`!
|
47
|
-
|
48
|
-
* right now ActiveRecord *and* Mongoid are required in your Rails app
|
49
|
-
* it works although Mongoid models are observed by `ActiveRecord::Observer`s...
|
50
|
-
|
51
48
|
## Contributing
|
52
49
|
|
53
50
|
1. Fork it
|
data/Rakefile
CHANGED
@@ -4,6 +4,8 @@ begin
|
|
4
4
|
rescue LoadError
|
5
5
|
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
6
|
end
|
7
|
+
require 'appraisal'
|
8
|
+
|
7
9
|
begin
|
8
10
|
require 'rdoc/task'
|
9
11
|
rescue LoadError
|
@@ -16,9 +18,13 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
16
18
|
rdoc.rdoc_dir = 'rdoc'
|
17
19
|
rdoc.title = 'ReTrack'
|
18
20
|
rdoc.options << '--line-numbers'
|
19
|
-
rdoc.rdoc_files.include('README.
|
21
|
+
rdoc.rdoc_files.include('README.md')
|
20
22
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
23
|
end
|
22
24
|
|
23
25
|
Bundler::GemHelper.install_tasks
|
24
26
|
|
27
|
+
require 'rspec/core/rake_task'
|
28
|
+
RSpec::Core::RakeTask.new :spec
|
29
|
+
|
30
|
+
task default: :spec
|
@@ -15,6 +15,9 @@ module ReTrack
|
|
15
15
|
field :forwarded_ip, type: String
|
16
16
|
field :accept_language, type: String
|
17
17
|
|
18
|
+
[:referer_url, :first_url, :user_agent, :first_visited_at, :ip,
|
19
|
+
:forwarded_ip, :accept_language].each { |field| index({ field => 1 }) }
|
20
|
+
|
18
21
|
# Extract query parameters from referer_url and first_url.
|
19
22
|
#
|
20
23
|
# @example
|
data/lib/re_track/sweeper.rb
CHANGED
@@ -1,17 +1,55 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
module ReTrack
|
2
|
+
module Sweeper
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
mattr_accessor :rt_model_instance_names
|
6
|
+
|
7
|
+
included do
|
8
|
+
after_filter :rt_after_filter, only: :create
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def re_track(record_instance_name)
|
13
|
+
(@rt_record_instance_names ||= []) << record_instance_name
|
9
14
|
end
|
10
15
|
|
11
|
-
|
16
|
+
def rt_record_instance_names
|
17
|
+
(@rt_record_instance_names ||= []).uniq
|
18
|
+
end
|
12
19
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def rt_after_filter
|
24
|
+
rt_records.each { |record| rt_after_create record }
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def rt_records
|
29
|
+
self.class.rt_record_instance_names.map do |name|
|
30
|
+
instance_variable_get "@#{name}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def rt_create_referer_tracking!(record)
|
35
|
+
rt = ReTrack::RefererTracking.new
|
36
|
+
rt.trackable = record
|
37
|
+
|
38
|
+
session[:retrack].each_pair do |key, value|
|
39
|
+
rt[key] = value if rt.attribute_names.include?(key.to_s)
|
40
|
+
end
|
41
|
+
|
42
|
+
rt.save!
|
43
|
+
end
|
44
|
+
|
45
|
+
def rt_after_create(record)
|
46
|
+
return unless record.persisted?
|
47
|
+
if session && session[:retrack]
|
48
|
+
rt_create_referer_tracking! record
|
49
|
+
end
|
50
|
+
rescue => e
|
51
|
+
Rails.logger.info(
|
52
|
+
"ReTrack::Sweeper.after_create error saving record: #{e}")
|
53
|
+
end
|
16
54
|
end
|
17
55
|
end
|
data/lib/re_track/trackable.rb
CHANGED
@@ -7,12 +7,8 @@ module ReTrack
|
|
7
7
|
included do
|
8
8
|
has_one :referer_tracking,
|
9
9
|
class_name: 'ReTrack::RefererTracking',
|
10
|
-
as: :trackable
|
11
|
-
|
12
|
-
klass = self
|
13
|
-
ReTrack::Sweeper.class_eval do
|
14
|
-
observe klass
|
15
|
-
end
|
10
|
+
as: :trackable,
|
11
|
+
validate: false
|
16
12
|
end
|
17
13
|
end
|
18
14
|
end
|
data/lib/re_track/tracker.rb
CHANGED
@@ -6,25 +6,28 @@ module ReTrack
|
|
6
6
|
before_filter :rt_track_referer
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
9
|
+
private
|
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
|
+
def rt_track_referer
|
22
|
+
session[:retrack].nil? && !request_from_a_known_bot? &&
|
23
|
+
session[:retrack] = Hash[TRACK.map { |k, v| [k, v.call(request)] }]
|
20
24
|
end
|
21
|
-
end
|
22
25
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
def request_from_a_known_bot?
|
27
|
+
bot_user_agents = ['GoogleBot', 'Mediapartners-Google', 'msnbot',
|
28
|
+
'TwengaBot', 'DigExt; DTS Agent', 'YandexImages']
|
29
|
+
bot_user_agents_re = /\b(#{bot_user_agents * '|'})\b/i
|
30
|
+
request.user_agent =~ bot_user_agents_re
|
31
|
+
end
|
29
32
|
end
|
30
33
|
end
|
data/lib/re_track/version.rb
CHANGED
data/lib/re_track.rb
CHANGED
data/re_track.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 're_track/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 're_track'
|
7
|
+
s.version = ReTrack::VERSION
|
8
|
+
s.authors = ['Gebhard Wöstemeyer']
|
9
|
+
s.email = ['g.woestemeyer@gmail.com']
|
10
|
+
s.homepage = 'https://github.com/gewo/re_track'
|
11
|
+
s.summary = 'Track HTTP-Referrers in Rails using Mongoid/MongoDB'
|
12
|
+
s.description = 'Track HTTP-Referrers in Rails using Mongoid/MongoDB'
|
13
|
+
s.license = 'MIT'
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
16
|
+
s.test_files = s.files.grep(/^spec\//)
|
17
|
+
s.require_paths = ['lib']
|
18
|
+
|
19
|
+
s.add_runtime_dependency 'rails'
|
20
|
+
s.add_runtime_dependency 'mongoid', '>= 3'
|
21
|
+
s.add_runtime_dependency 'activesupport'
|
22
|
+
|
23
|
+
s.add_development_dependency 'rspec-rails'
|
24
|
+
s.add_development_dependency 'simplecov'
|
25
|
+
s.add_development_dependency 'coveralls'
|
26
|
+
s.add_development_dependency 'database_cleaner'
|
27
|
+
s.add_development_dependency 'pry'
|
28
|
+
s.add_development_dependency 'appraisal'
|
29
|
+
end
|
data/script/rails
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
5
|
+
ENGINE_PATH = File.expand_path('../../lib/re_track/engine', __FILE__)
|
6
|
+
|
7
|
+
require 'rails/all'
|
8
|
+
require 'rails/engine/commands'
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe UsersController, "RefererTracking" do
|
4
|
+
before :each do
|
5
|
+
@request.env['HTTP_REFERER'] = (@referer = "awesome.pa.ge/believe/me")
|
6
|
+
@request.env['HTTP_USER_AGENT'] = @ua = "Fancy new UA"
|
7
|
+
@request.env['REMOTE_ADDR'] = @ip = '102.97.107.101'
|
8
|
+
get :new
|
9
|
+
end
|
10
|
+
|
11
|
+
it "saves referer_url to session" do
|
12
|
+
session[:retrack].should_not be_blank
|
13
|
+
session[:retrack][:referer_url].should == @referer
|
14
|
+
end
|
15
|
+
|
16
|
+
it "saves first_url to session" do
|
17
|
+
session[:retrack].should_not be_blank
|
18
|
+
session[:retrack][:first_url].should =~ %r(users/new$)
|
19
|
+
end
|
20
|
+
|
21
|
+
context "on the second request" do
|
22
|
+
before :each do
|
23
|
+
@request.env['HTTP_REFERER'] = ("this.is.the.new/referer")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "doesn't update referer_url" do
|
27
|
+
get :index
|
28
|
+
session[:retrack][:referer_url].should == @referer
|
29
|
+
end
|
30
|
+
|
31
|
+
it "doesn't update first_url" do
|
32
|
+
get :index
|
33
|
+
session[:retrack][:first_url].should =~ %r(users/new$)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "POST 'create'" do
|
38
|
+
it "saves a user" do
|
39
|
+
expect {
|
40
|
+
post :create
|
41
|
+
}.to change(User.all, :count).by(1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "saves a RefererTracking" do
|
45
|
+
expect {
|
46
|
+
post :create
|
47
|
+
}.to change(ReTrack::RefererTracking.all, :count).by(1)
|
48
|
+
end
|
49
|
+
|
50
|
+
context "when saving the RefererTracking" do
|
51
|
+
before :each do
|
52
|
+
post :create
|
53
|
+
@rt = ReTrack::RefererTracking.last
|
54
|
+
end
|
55
|
+
|
56
|
+
it "saves the referer_url in RefererTracking" do
|
57
|
+
@rt.referer_url.should == @referer
|
58
|
+
end
|
59
|
+
|
60
|
+
it "saves the first_url in RefererTracking" do
|
61
|
+
@rt.first_url.should =~ %r(users/new$)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "saves the user_agent in RefererTracking" do
|
65
|
+
@rt.user_agent.should == @ua
|
66
|
+
end
|
67
|
+
|
68
|
+
it "saves the first_visited_at in RefererTracking" do
|
69
|
+
# TODO: use Timecop
|
70
|
+
@rt.first_visited_at.should be_within(5.seconds).of(DateTime.now)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "saves the correct user in RefererTracking" do
|
74
|
+
user = User.last
|
75
|
+
@rt.trackable.should == user
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'saves the ip in RefererTracking' do
|
79
|
+
@rt.ip.should == @ip
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
it "completes the response when there are errors in the sweeper" do
|
84
|
+
ReTrack::RefererTracking.any_instance.stub(:save).and_raise
|
85
|
+
post :create
|
86
|
+
response.should be_a_redirect # not a 500
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|