impressionist 1.4.0 → 1.4.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 +4 -4
- data/impressionist.gemspec +6 -2
- data/lib/impressionist/counter_cache.rb +3 -1
- data/lib/impressionist/models/active_record/impression.rb +1 -1
- data/lib/impressionist/models/active_record/impressionist/impressionable.rb +4 -6
- data/lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb +11 -4
- data/lib/impressionist/models/mongoid/impressionist/impressionable.rb +2 -0
- data/lib/impressionist/version.rb +1 -1
- data/test_app/Gemfile +1 -1
- data/test_app/spec/controllers/articles_controller_spec.rb +60 -0
- data/test_app/spec/controllers/dummy_controller_spec.rb +11 -0
- data/test_app/spec/controllers/posts_controller_spec.rb +19 -0
- data/test_app/spec/controllers/widgets_controller_spec.rb +60 -0
- data/test_app/spec/initializers/initializers_spec.rb +5 -3
- data/test_app/spec/spec_helper.rb +2 -0
- metadata +9 -6
- data/test_app/spec/controllers/controller_spec.rb +0 -134
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c1694b326962e72ed2f57841cb4bc799e1a8e4d
|
4
|
+
data.tar.gz: 35b5e4aa5feff7df8341022ec6b4195d35a7df18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af17886e092d7fd62bbf70c768cb4b804f3087559f12fa2d2d68ee12f3ca6d859bcf7954790957094310ff76ed7376ae25707638779cbe0d894fd00191a5532b
|
7
|
+
data.tar.gz: 828a4f2a95741643e28e1ba943515fa9e715cee6a907f62b1a93950630433f27602b208a49f4d0c597d39818a09db9f1fd041c751080f4546926c7f141141e17
|
data/impressionist.gemspec
CHANGED
@@ -19,8 +19,12 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if s.respond_to? :required_rubygems_version=
|
20
20
|
|
21
21
|
s.add_dependency 'httpclient', '~> 2.2'
|
22
|
-
|
23
|
-
|
22
|
+
|
23
|
+
# Nokogiri has dropped support for Ruby 1.8.7 onwards version 1.5.10
|
24
|
+
s.add_dependency 'nokogiri', (RUBY_VERSION.match("1.8.7") ? '1.5.10' : '~> 1.6.0')
|
25
|
+
|
26
|
+
# Capybara has dropped support for Ruby 1.8.7 onwards version 2.0.3
|
27
|
+
s.add_development_dependency 'capybara', '>= 2.0.3'
|
24
28
|
s.add_development_dependency 'rake', '>= 0.9'
|
25
29
|
s.add_development_dependency 'rails', '~> 3.1'
|
26
30
|
s.add_development_dependency 'rdoc', '>= 2.4.2'
|
@@ -42,8 +42,10 @@ module Impressionist
|
|
42
42
|
end
|
43
43
|
|
44
44
|
# Logs to log file, expects a message to be passed
|
45
|
+
|
45
46
|
# default mode is ERROR
|
46
|
-
|
47
|
+
# ruby 1.8.7 support
|
48
|
+
def impressionist_log(str, mode=:error)
|
47
49
|
Rails.logger.send(mode.to_s, str)
|
48
50
|
end
|
49
51
|
|
@@ -2,25 +2,23 @@ ActiveRecord::Base.send(:include, Impressionist::Impressionable)
|
|
2
2
|
|
3
3
|
module Impressionist
|
4
4
|
module Impressionable
|
5
|
-
|
6
5
|
extend ActiveSupport::Concern
|
7
6
|
|
8
7
|
module ClassMethods
|
8
|
+
|
9
9
|
def is_impressionable(options={})
|
10
10
|
define_association
|
11
|
-
|
11
|
+
|
12
|
+
@impressionist_cache_options = options
|
12
13
|
end
|
13
14
|
|
15
|
+
private
|
14
16
|
def define_association
|
15
17
|
has_many(:impressions,
|
16
18
|
:as => :impressionable,
|
17
19
|
:dependent => :destroy)
|
18
20
|
end
|
19
21
|
|
20
|
-
def imp_cache_options_set(options)
|
21
|
-
@impressionist_cache_options = options
|
22
|
-
end
|
23
|
-
|
24
22
|
end
|
25
23
|
|
26
24
|
end
|
@@ -5,10 +5,17 @@ module Impressionist
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
module ClassMethods
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
|
9
|
+
def is_impressionable(options={})
|
10
|
+
many(:impressions,
|
11
|
+
:as => :impressionable,
|
12
|
+
:dependent => :destroy)
|
13
|
+
|
14
|
+
@impressionist_cache_options = options
|
15
|
+
end
|
16
|
+
|
12
17
|
end
|
18
|
+
|
13
19
|
end
|
20
|
+
|
14
21
|
end
|
data/test_app/Gemfile
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ArticlesController do
|
4
|
+
fixtures :articles,:impressions,:posts,:widgets
|
5
|
+
|
6
|
+
render_views
|
7
|
+
|
8
|
+
it "should make the impressionable_hash available" do
|
9
|
+
get "index"
|
10
|
+
response.body.include?("false").should eq true
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should log an impression with a message" do
|
14
|
+
get "index"
|
15
|
+
Impression.all.size.should eq 12
|
16
|
+
Article.first.impressions.last.message.should eq "this is a test article impression"
|
17
|
+
Article.first.impressions.last.controller_name.should eq "articles"
|
18
|
+
Article.first.impressions.last.action_name.should eq "index"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should log an impression without a message" do
|
22
|
+
get "show", :id=> 1
|
23
|
+
Impression.all.size.should eq 12
|
24
|
+
Article.first.impressions.last.message.should eq nil
|
25
|
+
Article.first.impressions.last.controller_name.should eq "articles"
|
26
|
+
Article.first.impressions.last.action_name.should eq "show"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should log the user_id if user is authenticated (@current_user before_filter method)" do
|
30
|
+
session[:user_id] = 123
|
31
|
+
get "show", :id=> 1
|
32
|
+
Article.first.impressions.last.user_id.should eq 123
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not log the user_id if user is authenticated" do
|
36
|
+
get "show", :id=> 1
|
37
|
+
Article.first.impressions.last.user_id.should eq nil
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should log the request_hash, ip_address, referrer and session_hash" do
|
41
|
+
get "show", :id=> 1
|
42
|
+
Impression.last.request_hash.size.should eq 64
|
43
|
+
Impression.last.ip_address.should eq "0.0.0.0"
|
44
|
+
Impression.last.session_hash.size.should eq 32
|
45
|
+
Impression.last.referrer.should eq nil
|
46
|
+
end
|
47
|
+
|
48
|
+
# Capybara has change the way it works
|
49
|
+
# We need to pass :type options in order to make include helper methods
|
50
|
+
# see https://github.com/jnicklas/capybara#using-capybara-with-rspec
|
51
|
+
it "should log the referrer when you click a link", :type => :feature do
|
52
|
+
visit article_url(Article.first)
|
53
|
+
click_link "Same Page"
|
54
|
+
Impression.last.referrer.should eq "http://test.host/articles/1"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PostsController do
|
4
|
+
it "should log impression at the action level" do
|
5
|
+
get "show", :id=> 1
|
6
|
+
Impression.all.size.should eq 12
|
7
|
+
Impression.last.controller_name.should eq "posts"
|
8
|
+
Impression.last.action_name.should eq "show"
|
9
|
+
Impression.last.impressionable_type.should eq "Post"
|
10
|
+
Impression.last.impressionable_id.should eq 1
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should log the user_id if user is authenticated (current_user helper method)" do
|
14
|
+
session[:user_id] = 123
|
15
|
+
get "show", :id=> 1
|
16
|
+
Post.first.impressions.last.user_id.should eq 123
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe WidgetsController do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@widget = Widget.find(1)
|
7
|
+
Widget.stub(:find).and_return(@widget)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should log impression at the per action level" do
|
11
|
+
get "show", :id=> 1
|
12
|
+
Impression.all.size.should eq 12
|
13
|
+
get "index"
|
14
|
+
Impression.all.size.should eq 13
|
15
|
+
get "new"
|
16
|
+
Impression.all.size.should eq 13
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should not log impression when user-agent is in wildcard list" do
|
20
|
+
request.stub!(:user_agent).and_return('somebot')
|
21
|
+
get "show", :id=> 1
|
22
|
+
Impression.all.size.should eq 11
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should not log impression when user-agent is in the bot list" do
|
26
|
+
request.stub!(:user_agent).and_return('Acoon Robot v1.50.001')
|
27
|
+
get "show", :id=> 1
|
28
|
+
Impression.all.size.should eq 11
|
29
|
+
end
|
30
|
+
|
31
|
+
context "impressionist unique options" do
|
32
|
+
|
33
|
+
it "should log unique impressions at the per action level" do
|
34
|
+
get "show", :id=> 1
|
35
|
+
Impression.all.size.should eq 12
|
36
|
+
get "show", :id=> 2
|
37
|
+
Impression.all.size.should eq 13
|
38
|
+
get "show", :id => 2
|
39
|
+
Impression.all.size.should eq 13
|
40
|
+
get "index"
|
41
|
+
Impression.all.size.should eq 14
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should log unique impressions only once per id" do
|
45
|
+
get "show", :id=> 1
|
46
|
+
Impression.all.size.should eq 12
|
47
|
+
|
48
|
+
get "show", :id=> 2
|
49
|
+
Impression.all.size.should eq 13
|
50
|
+
|
51
|
+
get "show", :id => 2
|
52
|
+
Impression.all.size.should eq 13
|
53
|
+
|
54
|
+
get "index"
|
55
|
+
Impression.all.size.should eq 14
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Impressionist do
|
4
|
+
let(:imp) { RUBY_VERSION.match("1.8") ? "is_impressionable" : :is_impressionable }
|
5
|
+
|
4
6
|
it "should be extended from ActiveRecord::Base" do
|
5
|
-
|
6
|
-
ActiveRecord::Base.methods.include?(method).should be_true
|
7
|
+
expect(ActiveRecord::Base).to respond_to(imp)
|
8
|
+
#ActiveRecord::Base.methods.include?(method).should be_true
|
7
9
|
end
|
8
10
|
|
9
11
|
it "should include methods in ApplicationController" do
|
10
12
|
method = RUBY_VERSION.match("1.8") ? "impressionist" : :impressionist
|
11
|
-
ApplicationController.
|
13
|
+
expect(ApplicationController).to respond_to(method)
|
12
14
|
end
|
13
15
|
|
14
16
|
it "should include the before_filter method in ApplicationController" do
|
@@ -5,6 +5,8 @@ unless ENV['CI']
|
|
5
5
|
end
|
6
6
|
require File.expand_path("../../config/environment", __FILE__)
|
7
7
|
require 'rspec/rails'
|
8
|
+
require 'capybara/rails'
|
9
|
+
require 'capybara/rspec'
|
8
10
|
|
9
11
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
10
12
|
# in spec/support/ and its subdirectories.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: impressionist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- johnmcaliley
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.6.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.6.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: capybara
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.0.3
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -267,8 +267,11 @@ files:
|
|
267
267
|
- test_app/public/stylesheets/.gitkeep
|
268
268
|
- test_app/script/cucumber
|
269
269
|
- test_app/script/rails
|
270
|
-
- test_app/spec/controllers/
|
270
|
+
- test_app/spec/controllers/articles_controller_spec.rb
|
271
|
+
- test_app/spec/controllers/dummy_controller_spec.rb
|
271
272
|
- test_app/spec/controllers/impressionist_uniqueness_spec.rb
|
273
|
+
- test_app/spec/controllers/posts_controller_spec.rb
|
274
|
+
- test_app/spec/controllers/widgets_controller_spec.rb
|
272
275
|
- test_app/spec/fixtures/articles.yml
|
273
276
|
- test_app/spec/fixtures/impressions.yml
|
274
277
|
- test_app/spec/fixtures/posts.yml
|
@@ -1,134 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ArticlesController do
|
4
|
-
fixtures :articles,:impressions,:posts,:widgets
|
5
|
-
render_views
|
6
|
-
|
7
|
-
it "should make the impressionable_hash available" do
|
8
|
-
get "index"
|
9
|
-
response.body.include?("false").should eq true
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should log an impression with a message" do
|
13
|
-
get "index"
|
14
|
-
Impression.all.size.should eq 12
|
15
|
-
Article.first.impressions.last.message.should eq "this is a test article impression"
|
16
|
-
Article.first.impressions.last.controller_name.should eq "articles"
|
17
|
-
Article.first.impressions.last.action_name.should eq "index"
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should log an impression without a message" do
|
21
|
-
get "show", :id=> 1
|
22
|
-
Impression.all.size.should eq 12
|
23
|
-
Article.first.impressions.last.message.should eq nil
|
24
|
-
Article.first.impressions.last.controller_name.should eq "articles"
|
25
|
-
Article.first.impressions.last.action_name.should eq "show"
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should log the user_id if user is authenticated (@current_user before_filter method)" do
|
29
|
-
session[:user_id] = 123
|
30
|
-
get "show", :id=> 1
|
31
|
-
Article.first.impressions.last.user_id.should eq 123
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should not log the user_id if user is authenticated" do
|
35
|
-
get "show", :id=> 1
|
36
|
-
Article.first.impressions.last.user_id.should eq nil
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should log the request_hash, ip_address, referrer and session_hash" do
|
40
|
-
get "show", :id=> 1
|
41
|
-
Impression.last.request_hash.size.should eq 64
|
42
|
-
Impression.last.ip_address.should eq "0.0.0.0"
|
43
|
-
Impression.last.session_hash.size.should eq 32
|
44
|
-
Impression.last.referrer.should eq nil
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should log the referrer when you click a link" do
|
48
|
-
visit article_url(Article.first)
|
49
|
-
click_link "Same Page"
|
50
|
-
Impression.last.referrer.should eq "http://test.host/articles/1"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe PostsController do
|
55
|
-
it "should log impression at the action level" do
|
56
|
-
get "show", :id=> 1
|
57
|
-
Impression.all.size.should eq 12
|
58
|
-
Impression.last.controller_name.should eq "posts"
|
59
|
-
Impression.last.action_name.should eq "show"
|
60
|
-
Impression.last.impressionable_type.should eq "Post"
|
61
|
-
Impression.last.impressionable_id.should eq 1
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should log the user_id if user is authenticated (current_user helper method)" do
|
65
|
-
session[:user_id] = 123
|
66
|
-
get "show", :id=> 1
|
67
|
-
Post.first.impressions.last.user_id.should eq 123
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe WidgetsController do
|
72
|
-
|
73
|
-
before(:each) do
|
74
|
-
@widget = Widget.find(1)
|
75
|
-
Widget.stub(:find).and_return(@widget)
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should log impression at the per action level" do
|
79
|
-
get "show", :id=> 1
|
80
|
-
Impression.all.size.should eq 12
|
81
|
-
get "index"
|
82
|
-
Impression.all.size.should eq 13
|
83
|
-
get "new"
|
84
|
-
Impression.all.size.should eq 13
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should not log impression when user-agent is in wildcard list" do
|
88
|
-
request.stub!(:user_agent).and_return('somebot')
|
89
|
-
get "show", :id=> 1
|
90
|
-
Impression.all.size.should eq 11
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should not log impression when user-agent is in the bot list" do
|
94
|
-
request.stub!(:user_agent).and_return('Acoon Robot v1.50.001')
|
95
|
-
get "show", :id=> 1
|
96
|
-
Impression.all.size.should eq 11
|
97
|
-
end
|
98
|
-
|
99
|
-
describe "impressionist unique options" do
|
100
|
-
|
101
|
-
it "should log unique impressions at the per action level" do
|
102
|
-
get "show", :id=> 1
|
103
|
-
Impression.all.size.should eq 12
|
104
|
-
get "show", :id=> 2
|
105
|
-
Impression.all.size.should eq 13
|
106
|
-
get "show", :id => 2
|
107
|
-
Impression.all.size.should eq 13
|
108
|
-
get "index"
|
109
|
-
Impression.all.size.should eq 14
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should log unique impressions only once per id" do
|
113
|
-
get "show", :id=> 1
|
114
|
-
Impression.all.size.should eq 12
|
115
|
-
get "show", :id=> 2
|
116
|
-
Impression.all.size.should eq 13
|
117
|
-
get "show", :id => 2
|
118
|
-
Impression.all.size.should eq 13
|
119
|
-
get "index"
|
120
|
-
Impression.all.size.should eq 14
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
describe DummyController do
|
127
|
-
fixtures :impressions
|
128
|
-
render_views
|
129
|
-
|
130
|
-
it "should log impression at the per action level on non-restful controller" do
|
131
|
-
get "index"
|
132
|
-
Impression.all.size.should eq 12
|
133
|
-
end
|
134
|
-
end
|