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 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