re_track 0.4.0 → 0.5.0
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/.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
|
[](https://travis-ci.org/gewo/re_track/)
|
4
|
+
[](https://coveralls.io/r/gewo/re_track)
|
5
|
+
[](https://codeclimate.com/github/gewo/re_track)
|
6
|
+
[](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
|