rakwik 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NmM3N2Y0ZmVlNzliYjc5NDJiZGI1MzJhMzI5MTU5MDg4N2QyZjQ1Nw==
5
+ data.tar.gz: !binary |-
6
+ Nzg1ZjBkZWZhMWVlODVjYjBmNDk5MGEyY2ExMjkxOTBmZDhlOWE1ZQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YmI1MDhiYzk4ZjNjYmQ0OGJkZjJiMmRlNjlmY2RiZWVjOGIxZWYwNTZkMzky
10
+ MGVkMDY0OWU1ZDEwMzhkYTdlYWY2YjRlMTdkMDRmMjMzYzQ0NDY3NTU0MTg5
11
+ ZDBlM2RhM2E2MzVhODgyM2FlNGI5ODBjOGUzZjljMmZjODExMjE=
12
+ data.tar.gz: !binary |-
13
+ OTRjZDllMjIxNjgyODViMDRlNDg1YzYyY2ExOGJiMTE4YjUyOTJhZGM5NzI4
14
+ MDEwZTlkMmU1NWJlODY1YmY4YTZmOGU1MWFlYzNhZDljMTJmYjdkNzEyYjgw
15
+ MjgwMjgyMDg0ZGQ5NjcxOTQ0NGYxMTE3ZWNmNTcyOGZhM2U1NTI=
data/.travis.yml CHANGED
@@ -1,15 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - "1.8.7"
4
- - "1.9.2"
5
4
  - "1.9.3"
6
- - jruby-18mode # JRuby in 1.8 mode
7
- - jruby-19mode # JRuby in 1.9 mode
8
- - rbx-18mode
9
- - rbx-19mode
5
+ - "2.0.0"
10
6
  # uncomment this line if your project needs to run something other than `rake`:
11
7
  # script: bundle exec rspec spec
12
- matrix:
13
- allow_failures:
14
- - rvm: jruby-18mode
15
- - rvm: jruby-19mode
data/Gemfile CHANGED
@@ -8,4 +8,5 @@ gem 'rake'
8
8
  group :test do
9
9
  gem 'rack-test'
10
10
  gem 'webmock'
11
+ gem 'warden'
11
12
  end
@@ -1,4 +1,5 @@
1
1
  require 'em-http'
2
+ require 'digest/md5'
2
3
 
3
4
  module Rakwik
4
5
  class Tracker
@@ -67,12 +68,17 @@ module Rakwik
67
68
  'rand' => rand(1000000),
68
69
  'apiv' => 1,
69
70
  'gt_ms' => request.env['rakwik.duration'],
70
- 'ua' => request.user_agent
71
+ 'ua' => request.user_agent,
72
+ 'lang' => header['Accept-Language']
71
73
  }
72
74
  data['action_name'] = request.env['rakwik.action_name'] unless request.env['rakwik.action_name'].nil?
73
75
  data['urlref'] = request.referer unless request.referer.nil?
74
76
  data['gt_ms'] = request.env['rakwik.duration']
75
77
 
78
+ if w = request.env['warden']
79
+ data['_id'] = Digest::MD5.hexdigest w.user
80
+ end
81
+
76
82
  if not_found? && @options[:track_404] === true
77
83
  data['action_name'] = "404/URL = #{data['url'].gsub(/\//, '%2f')}/From = #{data['urlref'].gsub(/\//, '%2f')}"
78
84
  end
@@ -1,3 +1,3 @@
1
1
  module Rakwik
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -11,29 +11,77 @@ describe Rakwik::Tracker do
11
11
  }
12
12
  }
13
13
 
14
- def app
15
- Rakwik::Tracker.new(
16
- lambda { |env| [200, {"Content-Type"=>"text/plain"}, ["Hello. The time is #{Time.now}"]] },
17
- tracker_data
18
- )
19
- end
20
-
21
14
  before(:each) do
22
- stub_request(:post, tracker_data[:piwik_url]).to_return(:status => 200, :body => lambda{|req| req.body})
15
+ stub_request(:post, tracker_data[:piwik_url]).
16
+ to_return(:status => 200, :body => lambda{|req| req.body})
23
17
  end
24
18
 
25
- it "tracks requests asynchronously" do
26
- # Trigger a request to our inner app that should be tracked
27
- get '/'
19
+ context "for anonymous requests" do
20
+ let(:app) {
21
+ Rakwik::Tracker.new(
22
+ lambda { |env| [200, {"Content-Type"=>"text/plain"}, ["Hello."]] },
23
+ tracker_data
24
+ )
25
+ }
26
+
27
+ it "tracks requests asynchronously" do
28
+ header "User-Agent", "SomeAgent"
29
+ header "Referer", "http://example.org/referring_page"
30
+ header "Accept-Language", "en"
31
+
32
+ # Trigger a request to our inner app that should be tracked
33
+ get '/'
34
+
35
+ # wait a little while to let EventMachine send the request
36
+ sleep 0.01
28
37
 
29
- # wait a little while to let EventMachine send the request
30
- sleep 0.01
38
+ # What now?
39
+ posted_data = nil
40
+ WebMock.should have_requested(:post, tracker_data[:piwik_url]).with{|req|
41
+ posted_data = URI::decode_www_form(req.body).
42
+ inject(Hash.new){ |h, raw| h[raw[0]] = raw[1]; h }
43
+ }
44
+ posted_data.should include(
45
+ "token_auth"=>"foobar",
46
+ "idsite"=>"1",
47
+ "rec"=>"1",
48
+ "url" => "http://example.org/",
49
+ "cip" => "127.0.0.1",
50
+ "apiv"=>"1",
51
+ "ua"=>"SomeAgent",
52
+ "lang"=>"en",
53
+ "urlref"=>"http://example.org/referring_page"
54
+ )
55
+ posted_data["rand"].should_not be_nil
56
+ posted_data["gt_ms"].should_not be_nil
57
+ end
58
+ end
31
59
 
32
- # What now?
33
- WebMock.should have_requested(:post, tracker_data[:piwik_url]).with{|req|
34
- posted_data = URI::decode_www_form(req.body).inject(Hash.new){|h, raw| h[raw[0]] = raw[1]; h}
35
- posted_data.should include("token_auth"=>"foobar", "idsite"=>"1", "rec"=>"1", "url" => "http://example.org/", "apiv"=>"1")
36
- true
60
+ context "for Warden authenticated requests" do
61
+ let(:app) {
62
+ Warden::Manager.new Rakwik::Tracker.new(
63
+ lambda { |env| [200, {"Content-Type"=>"text/plain"}, ["Hello."]] },
64
+ tracker_data
65
+ )
37
66
  }
67
+
68
+ it "recognizes login data" do
69
+ login_as 'test'
70
+ get '/'
71
+
72
+ # wait a little while to let EventMachine send the request
73
+ sleep 0.01
74
+
75
+ # What now?
76
+ posted_data = nil
77
+ WebMock.should have_requested(:post, tracker_data[:piwik_url]).with{|req|
78
+ posted_data = URI::decode_www_form(req.body).
79
+ inject(Hash.new){ |h, raw| h[raw[0]] = raw[1]; h }
80
+ }
81
+
82
+ posted_data["_id"].should_not be_nil
83
+ posted_data["_id"].should match(/[0-9a-f]{16}/)
84
+ end
38
85
  end
86
+
39
87
  end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,7 @@ require 'bundler/setup'
2
2
  require 'rspec'
3
3
  require 'rack/test'
4
4
  require 'webmock/rspec'
5
+ require 'warden'
5
6
  require 'rakwik'
6
7
 
7
8
  if RUBY_VERSION.match /^1\.8/
@@ -12,4 +13,9 @@ WebMock.disable_net_connect!
12
13
 
13
14
  RSpec.configure do |config|
14
15
  config.include Rack::Test::Methods
16
+ config.include Warden::Test::Helpers
17
+
18
+ config.after do
19
+ Warden.test_reset!
20
+ end
15
21
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rakwik
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Christian Aust
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-01 00:00:00.000000000 Z
11
+ date: 2013-12-08 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rack
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: em-http-request
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -90,33 +83,26 @@ files:
90
83
  homepage: https://github.com/datenimperator/rakwik
91
84
  licenses:
92
85
  - MIT
86
+ metadata: {}
93
87
  post_install_message:
94
88
  rdoc_options: []
95
89
  require_paths:
96
90
  - lib
97
91
  required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
92
  requirements:
100
93
  - - ! '>='
101
94
  - !ruby/object:Gem::Version
102
95
  version: '0'
103
- segments:
104
- - 0
105
- hash: 1989987192526098628
106
96
  required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
97
  requirements:
109
98
  - - ! '>='
110
99
  - !ruby/object:Gem::Version
111
100
  version: '0'
112
- segments:
113
- - 0
114
- hash: 1989987192526098628
115
101
  requirements: []
116
102
  rubyforge_project:
117
- rubygems_version: 1.8.25
103
+ rubygems_version: 2.1.10
118
104
  signing_key:
119
- specification_version: 3
105
+ specification_version: 4
120
106
  summary: Rack-based server-side asynchronous Piwik tracker integration.
121
107
  test_files:
122
108
  - spec/lib/compat.rb