re_track 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9c55efc6a40f7368c49e1dccbc6e12418ae4c11
4
- data.tar.gz: 1f761b5374e042dd592026d141d7761022edfbc5
3
+ metadata.gz: c4a8f049d25280c2b98be2acc101570c4688e0f9
4
+ data.tar.gz: 0ef22d8a87d56dbd79ac36ff49a1bf431c83b452
5
5
  SHA512:
6
- metadata.gz: f27cdeb865526103258b6ce3baea05e14dcf37f1b6cffcec8ee3c9ccca2b53687efeb385b0660e1b21ed4d25e06b6468f1dec1ca2021752f6b8363772637ab5e
7
- data.tar.gz: c30b3a2e9867cc8884ad3dd5c0ece2c2e9767da87ee94af3b0c9f6afd761d0b1ba6ee6260f6bdd065ab5b2ea20e980663f366571a5eba17b220a942ac75dc771
6
+ metadata.gz: dde4a74026f510f9364651854a75086c13a44a20f380e19eecb28a2b55fce214eb787e251164f4011bfea3344f4637f0078c29a72c9ddabf1029af3dac98e02a
7
+ data.tar.gz: befb9b03503eea3acdfed77424ca407047b96e981ac8f4c7f6b86f896ffa6439516da3644ce4456b31509a6136eb5187a8040b68343f73d8c9a7cb2a63f1a480
data/.rubocop.yml ADDED
@@ -0,0 +1,14 @@
1
+ Documentation:
2
+ Enabled: false
3
+ AlignArray:
4
+ Enabled: false
5
+ AlignHash:
6
+ Enabled: false
7
+ AlignParameters:
8
+ Enabled: false
9
+ ModuleFunction:
10
+ Enabled: false
11
+ AllCops:
12
+ Excludes:
13
+ - spec/dummy/**
14
+ - script/**
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- re_track (0.5.0)
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({ field => 1 }) }
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
- return nil unless url = value_for(url_field_name)
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::unescape(url)).query rescue {}
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 nil unless ['referer_url', 'first_url'].include? field.to_s
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
@@ -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}")
@@ -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] = Hash[TRACK.map { |k, v| [k, v.call(request)] }]
13
+ session[:retrack] = SessionData.to_hash(request)
24
14
  end
25
15
 
26
16
  def request_from_a_known_bot?
@@ -1,3 +1,3 @@
1
1
  module ReTrack
2
- VERSION = '0.5.0'
2
+ VERSION = '0.5.1'
3
3
  end
data/lib/re_track.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 're_track/engine'
2
+ require 're_track/session_data'
2
3
  require 're_track/tracker'
3
4
  require 're_track/sweeper'
4
5
  require 're_track/trackable'
data/re_track.gemspec CHANGED
@@ -26,4 +26,5 @@ Gem::Specification.new do |s|
26
26
  s.add_development_dependency 'database_cleaner'
27
27
  s.add_development_dependency 'pry'
28
28
  s.add_development_dependency 'appraisal'
29
+ s.add_development_dependency 'rubocop'
29
30
  end
@@ -1,76 +1,75 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe UsersController, "RefererTracking" do
3
+ describe UsersController, 'RefererTracking' do
4
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"
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 "saves referer_url to session" do
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 "saves first_url to session" do
18
+ it 'saves first_url to session' do
17
19
  session[:retrack].should_not be_blank
18
- session[:retrack][:first_url].should =~ %r(users/new$)
20
+ session[:retrack][:first_url].should =~ /users\/new$/
19
21
  end
20
22
 
21
- context "on the second request" do
23
+ context 'on the second request' do
22
24
  before :each do
23
- @request.env['HTTP_REFERER'] = ("this.is.the.new/referer")
25
+ @request.env['HTTP_REFERER'] = 'this.is.the.new/referer'
24
26
  end
25
27
 
26
- it "doesn't update referer_url" do
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 "doesn't update first_url" do
33
+ it 'does not update first_url' do
32
34
  get :index
33
- session[:retrack][:first_url].should =~ %r(users/new$)
35
+ session[:retrack][:first_url].should =~ /users\/new$/
34
36
  end
35
37
  end
36
38
 
37
- describe "POST 'create'" do
38
- it "saves a user" do
39
- expect {
40
- post :create
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 "saves a RefererTracking" do
45
- expect {
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 "when saving the RefererTracking" do
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 "saves the referer_url in RefererTracking" do
55
+ it 'saves the referer_url in RefererTracking' do
57
56
  @rt.referer_url.should == @referer
58
57
  end
59
58
 
60
- it "saves the first_url in RefererTracking" do
61
- @rt.first_url.should =~ %r(users/new$)
59
+ it 'saves the first_url in RefererTracking' do
60
+ @rt.first_url.should =~ /users\/new$/
62
61
  end
63
62
 
64
- it "saves the user_agent in RefererTracking" do
63
+ it 'saves the user_agent in RefererTracking' do
65
64
  @rt.user_agent.should == @ua
66
65
  end
67
66
 
68
- it "saves the first_visited_at in RefererTracking" do
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 "saves the correct user in RefererTracking" do
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 "completes the response when there are errors in the sweeper" do
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::escape 'http://google.de/?q=query'
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.0
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-04 00:00:00.000000000 Z
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