impressionist 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,10 +1,9 @@
1
1
  before_install: gem install bundler
2
- before_script: "cd test_app && bundle install && ./script/rails generate impressionist && bundle exec rake db:migrate && cd .."
2
+ before_script: "cd test_app && bundle install && ./script/rails generate impressionist -f && bundle exec rake db:migrate && cd .."
3
3
  language: ruby
4
4
  rvm:
5
5
  - rbx-18mode
6
6
  - rbx-19mode
7
- - jruby-18mode
8
7
  - 1.8.7
9
8
  - 1.9.2
10
9
  - 1.9.3
data/README.md CHANGED
@@ -164,14 +164,22 @@ Or you can use the `impressionist` method directly:
164
164
 
165
165
  impressionist(impressionable, "some message", :unique => [:session_hash])
166
166
 
167
- Development Roadmap
168
- -------------------
169
- * Automatic impression logging in views. For example, log initial view, and
170
- any partials called from initial view
171
- * Customizable black list for user-agents or IP addresses. Impressions will be
172
- ignored. Web admin as part of the Engine.
173
- * Reporting engine
174
- * AB testing integration
167
+ Are you using Mongoid?
168
+ ---------------------
169
+
170
+ Execute this command on your terminal/console:
171
+
172
+ rails g impressionist --orm mongoid
173
+
174
+ This command create a file `impression.rb` on `config/initializer` folder. Add `config.orm = :mongoid` to this file:
175
+
176
+ # Use this hook to configure impressionist parameters
177
+ Impressionist.setup do |config|
178
+ # Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
179
+ # config.orm = :active_record
180
+ config.orm = :mongoid
181
+ end
182
+
175
183
 
176
184
  Contributing to impressionist
177
185
  -----------------------------
@@ -78,7 +78,7 @@ module ImpressionistController
78
78
  # creates a statment hash that contains default values for creating an impression.
79
79
  def direct_create_statement(query_params={})
80
80
  query_params.reverse_merge!(
81
- :impressionable_type => controller_name.singularize.camelize,
81
+ :impressionable_type => controller_path.singularize.camelize,
82
82
  :impressionable_id=> params[:id]
83
83
  )
84
84
  associative_create_statement(query_params)
@@ -14,7 +14,7 @@ class CreateImpressionsTable < ActiveRecord::Migration
14
14
  t.text :referrer
15
15
  t.timestamps
16
16
  end
17
- add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false
17
+ add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false, :length => {:message => 255 }
18
18
  add_index :impressions, [:impressionable_type, :impressionable_id, :request_hash], :name => "poly_request_index", :unique => false
19
19
  add_index :impressions, [:impressionable_type, :impressionable_id, :ip_address], :name => "poly_ip_index", :unique => false
20
20
  add_index :impressions, [:impressionable_type, :impressionable_id, :session_hash], :name => "poly_session_index", :unique => false
@@ -3,8 +3,8 @@ ImpressionistController::InstanceMethods.send(:define_method, :direct_create_sta
3
3
  # if :impressionable_id is a valid ObjectId then convert it into one
4
4
  base = (defined? Moped) ? Moped::BSON : BSON
5
5
  query_params.reverse_merge!(
6
- :impressionable_type => controller_name.singularize.camelize,
6
+ :impressionable_type => controller_path.singularize.camelize,
7
7
  :impressionable_id=> !base::ObjectId.legal?(params[:id]) ? params[:id] : base::ObjectId.from_string(params[:id])
8
8
  )
9
9
  associative_create_statement(query_params)
10
- end
10
+ end
@@ -3,31 +3,46 @@ require "rails"
3
3
 
4
4
  module Impressionist
5
5
  class Engine < Rails::Engine
6
- initializer 'impressionist.model' do |app|
7
- require "#{root}/app/models/impressionist/impressionable.rb"
8
- if Impressionist.orm == :active_record && defined? ActiveRecord
9
- require "impressionist/models/active_record/impression.rb"
10
- require "impressionist/models/active_record/impressionist/impressionable.rb"
11
- ActiveRecord::Base.send(:include, Impressionist::Impressionable)
12
- elsif Impressionist.orm == :mongo_mapper
13
- require "impressionist/models/mongo_mapper/impression.rb"
14
- require "impressionist/models/mongo_mapper/impressionist/impressionable.rb"
15
- MongoMapper::Document.plugin Impressionist::Impressionable
16
- elsif Impressionist.orm == :mongoid
17
- require 'impressionist/models/mongoid/impression.rb'
18
- require 'impressionist/models/mongoid/impressionist/impressionable.rb'
19
- Mongoid::Document.send(:include, Impressionist::Impressionable)
20
- end
21
- end
22
-
23
- initializer 'impressionist.controller' do
24
- if Impressionist.orm == :mongoid
25
- require 'impressionist/controllers/mongoid/impressionist_controller.rb'
26
- end
27
- ActiveSupport.on_load(:action_controller) do
28
- include ImpressionistController::InstanceMethods
29
- extend ImpressionistController::ClassMethods
30
- end
31
- end
6
+ attr_accessor :orm
7
+
8
+ def initialize
9
+ define_orm_type(Impressionist.orm)
10
+ end
11
+
12
+ initializer 'impressionist.model' do |app|
13
+ require_orm
14
+ ActiveRecord::Base.send(:include, Impressionist::Impressionable)
15
+
16
+ end
17
+
18
+
19
+ initializer 'impressionist.controller' do
20
+ require "impressionist/controllers/mongoid/impressionist_controller.rb" if orm == :mongoid.to_s
21
+
22
+ ActiveSupport.on_load(:action_controller) do
23
+ include ImpressionistController::InstanceMethods
24
+ extend ImpressionistController::ClassMethods
25
+ end
26
+ end
27
+
28
+
29
+ private
30
+ def require_orm
31
+ require "#{root}/app/models/impressionist/impressionable.rb"
32
+ require "impressionist/models/#{orm}/impression.rb"
33
+ require "impressionist/models/#{orm}/impressionist/impressionable.rb"
34
+
35
+ end
36
+
37
+ def define_orm_type(str)
38
+ @orm = matcher(str.to_s)
39
+ end
40
+
41
+ def matcher(str)
42
+ matched = str.match(/active_record|mongo_mapper|mongoid|/)
43
+ matched[0]
44
+ end
45
+
46
+
32
47
  end
33
48
  end
@@ -10,11 +10,12 @@ class Impression < ActiveRecord::Base
10
10
  private
11
11
 
12
12
  def update_impressions_counter_cache
13
- impressionable_class = self.impressionable_type.constantize
14
-
15
- if impressionable_class.impressionist_counter_cache_options
16
- resouce = impressionable_class.find(self.impressionable_id)
17
- resouce.try(:update_impressionist_counter_cache)
13
+ if self.impressionable_type && self.impressionable_id
14
+ impressionable_class = self.impressionable_type.constantize
15
+ if impressionable_class.impressionist_counter_cache_options
16
+ resouce = impressionable_class.find(self.impressionable_id)
17
+ resouce.try(:update_impressionist_counter_cache)
18
+ end
18
19
  end
19
20
  end
20
21
  end
@@ -37,7 +37,8 @@ module Impressionist
37
37
  def impressionist_count(options={})
38
38
  options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now)
39
39
  imps = options[:start_date].blank? ? impressions : impressions.between(created_at: options[:start_date]..options[:end_date])
40
- options[:filter] == :all ? imps.count : imps.where(options[:filter].ne => nil).count
40
+ filter = options[:filter]
41
+ filter == :all ? imps.count : imps.where(filter.ne => nil).distinct(filter).count
41
42
  end
42
43
 
43
44
  def update_impressionist_counter_cache
@@ -49,4 +50,4 @@ module Impressionist
49
50
  end
50
51
 
51
52
  end
52
- end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module Impressionist
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -3,4 +3,6 @@ class DummyController < ActionController::Base
3
3
 
4
4
  impressionist
5
5
 
6
+ def index
7
+ end
6
8
  end
File without changes
@@ -1,3 +1,3 @@
1
1
  TestApp::Application.routes.draw do
2
- resources :articles, :posts, :widgets
2
+ resources :articles, :posts, :widgets, :dummy
3
3
  end
@@ -123,3 +123,12 @@ describe WidgetsController do
123
123
  end
124
124
 
125
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
@@ -294,7 +294,7 @@ describe DummyController do
294
294
 
295
295
  it "should recognize uniqueness" do
296
296
  impressionable = Post.create
297
- controller.stub!(:controller_name).and_return("posts") # for correct impressionable type in filter
297
+ controller.stub!(:controller_path).and_return("posts") # for correct impressionable type in filter
298
298
  controller.stub!(:params).and_return({:id => impressionable.id.to_s}) # for correct impressionable id in filter
299
299
  controller.stub!(:session_hash).and_return("foo")
300
300
  controller.request.stub!(:remote_ip).and_return("1.2.3.4")
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.2.0
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-19 00:00:00.000000000 Z
12
+ date: 2013-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httpclient
@@ -232,6 +232,7 @@ files:
232
232
  - test_app/app/models/widget.rb
233
233
  - test_app/app/views/articles/index.html.erb
234
234
  - test_app/app/views/articles/show.html.erb
235
+ - test_app/app/views/dummy/index.html.erb
235
236
  - test_app/app/views/layouts/application.html.erb
236
237
  - test_app/app/views/posts/edit.html.erb
237
238
  - test_app/app/views/posts/index.html.erb
@@ -296,7 +297,6 @@ files:
296
297
  - test_app/spec/spec_helper.rb
297
298
  - upgrade_migrations/version_0_3_0.rb
298
299
  - upgrade_migrations/version_0_4_0.rb
299
- - upgrade_migrations/version_1_1_2.rb
300
300
  homepage: https://github.com/charlotte-ruby/impressionist
301
301
  licenses:
302
302
  - MIT
@@ -312,7 +312,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
312
312
  version: '0'
313
313
  segments:
314
314
  - 0
315
- hash: 2760039112118904693
315
+ hash: -3654668397609165147
316
316
  required_rubygems_version: !ruby/object:Gem::Requirement
317
317
  none: false
318
318
  requirements:
@@ -321,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
321
  version: 1.3.6
322
322
  requirements: []
323
323
  rubyforge_project:
324
- rubygems_version: 1.8.24
324
+ rubygems_version: 1.8.23
325
325
  signing_key:
326
326
  specification_version: 3
327
327
  summary: Easy way to log impressions
@@ -348,6 +348,7 @@ test_files:
348
348
  - test_app/app/models/widget.rb
349
349
  - test_app/app/views/articles/index.html.erb
350
350
  - test_app/app/views/articles/show.html.erb
351
+ - test_app/app/views/dummy/index.html.erb
351
352
  - test_app/app/views/layouts/application.html.erb
352
353
  - test_app/app/views/posts/edit.html.erb
353
354
  - test_app/app/views/posts/index.html.erb
@@ -1,9 +0,0 @@
1
- class Version04UpdateImpressionsTable < ActiveRecord::Migration
2
- def self.up
3
- add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false
4
- end
5
-
6
- def self.down
7
- remove_index :impressions, :impressionable_type_message_index
8
- end
9
- end