impressionist 1.2.0 → 1.3.0

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