impressionist 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/.gitignore +11 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +11 -0
  4. data/CHANGELOG.rdoc +1 -1
  5. data/Gemfile +8 -19
  6. data/README.md +65 -34
  7. data/Rakefile +10 -82
  8. data/app/controllers/impressionist_controller.rb +11 -11
  9. data/app/models/impression.rb +2 -15
  10. data/app/models/impressionist/bots.rb +3 -3
  11. data/app/models/impressionist/impressionable.rb +29 -41
  12. data/impressionist.gemspec +22 -65
  13. data/lib/generators/active_record/impressionist_generator.rb +21 -0
  14. data/lib/generators/{impressionist → active_record}/templates/create_impressions_table.rb +1 -9
  15. data/lib/generators/impressionist_generator.rb +12 -0
  16. data/lib/generators/mongo_mapper/impressionist_generator.rb +8 -0
  17. data/lib/generators/templates/impression.rb +5 -0
  18. data/lib/impressionist.rb +10 -3
  19. data/lib/impressionist/bots.rb +1 -1
  20. data/lib/impressionist/engine.rb +11 -3
  21. data/lib/impressionist/models/active_record/impression.rb +18 -0
  22. data/lib/impressionist/models/active_record/impressionist/impressionable.rb +12 -0
  23. data/lib/impressionist/models/mongo_mapper/impression.rb +17 -0
  24. data/lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb +12 -0
  25. data/lib/impressionist/version.rb +3 -0
  26. data/test_app/.gitignore +17 -0
  27. data/test_app/.rspec +1 -0
  28. data/test_app/Gemfile +58 -0
  29. data/test_app/README +256 -0
  30. data/test_app/README.rdoc +261 -0
  31. data/test_app/Rakefile +7 -0
  32. data/test_app/app/assets/images/rails.png +0 -0
  33. data/test_app/app/assets/javascripts/application.js +15 -0
  34. data/test_app/app/assets/stylesheets/application.css +13 -0
  35. data/test_app/app/controllers/application_controller.rb +8 -0
  36. data/test_app/app/controllers/articles_controller.rb +18 -0
  37. data/test_app/app/controllers/dummy_controller.rb +6 -0
  38. data/test_app/app/controllers/posts_controller.rb +23 -0
  39. data/test_app/app/controllers/widgets_controller.rb +13 -0
  40. data/test_app/app/helpers/application_helper.rb +2 -0
  41. data/{lib/impressionist/railties/tasks.rake → test_app/app/mailers/.gitkeep} +0 -0
  42. data/test_app/app/models/.gitkeep +0 -0
  43. data/test_app/app/models/article.rb +3 -0
  44. data/test_app/app/models/dummy.rb +7 -0
  45. data/test_app/app/models/post.rb +3 -0
  46. data/test_app/app/models/user.rb +3 -0
  47. data/test_app/app/models/widget.rb +3 -0
  48. data/test_app/app/views/articles/index.html.erb +1 -0
  49. data/test_app/app/views/articles/show.html.erb +1 -0
  50. data/test_app/app/views/layouts/application.html.erb +14 -0
  51. data/test_app/app/views/posts/edit.html.erb +0 -0
  52. data/test_app/app/views/posts/index.html.erb +0 -0
  53. data/test_app/app/views/posts/show.html.erb +0 -0
  54. data/test_app/app/views/widgets/index.html.erb +0 -0
  55. data/test_app/app/views/widgets/new.html.erb +0 -0
  56. data/test_app/app/views/widgets/show.html.erb +0 -0
  57. data/test_app/config.ru +4 -0
  58. data/test_app/config/application.rb +59 -0
  59. data/test_app/config/boot.rb +6 -0
  60. data/test_app/config/cucumber.yml +8 -0
  61. data/test_app/config/database.yml +30 -0
  62. data/test_app/config/environment.rb +5 -0
  63. data/test_app/config/environments/development.rb +37 -0
  64. data/test_app/config/environments/pg_test.rb +35 -0
  65. data/test_app/config/environments/production.rb +67 -0
  66. data/test_app/config/environments/test.rb +37 -0
  67. data/test_app/config/initializers/backtrace_silencers.rb +7 -0
  68. data/test_app/config/initializers/impression.rb +5 -0
  69. data/test_app/config/initializers/inflections.rb +15 -0
  70. data/test_app/config/initializers/mime_types.rb +5 -0
  71. data/test_app/config/initializers/secret_token.rb +7 -0
  72. data/test_app/config/initializers/session_store.rb +8 -0
  73. data/test_app/config/initializers/wrap_parameters.rb +14 -0
  74. data/test_app/config/locales/en.yml +5 -0
  75. data/test_app/config/routes.rb +3 -0
  76. data/test_app/db/migrate/20110201153144_create_articles.rb +13 -0
  77. data/test_app/db/migrate/20110210205028_create_posts.rb +13 -0
  78. data/test_app/db/migrate/20111127184039_create_widgets.rb +15 -0
  79. data/test_app/db/seeds.rb +7 -0
  80. data/test_app/lib/assets/.gitkeep +0 -0
  81. data/test_app/lib/tasks/.gitkeep +0 -0
  82. data/test_app/lib/tasks/cucumber.rake +53 -0
  83. data/test_app/log/.gitkeep +0 -0
  84. data/test_app/public/404.html +26 -0
  85. data/test_app/public/422.html +26 -0
  86. data/test_app/public/500.html +25 -0
  87. data/test_app/public/favicon.ico +0 -0
  88. data/test_app/public/images/rails.png +0 -0
  89. data/test_app/public/index.html +241 -0
  90. data/test_app/public/javascripts/application.js +2 -0
  91. data/test_app/public/javascripts/controls.js +965 -0
  92. data/test_app/public/javascripts/dragdrop.js +974 -0
  93. data/test_app/public/javascripts/effects.js +1123 -0
  94. data/test_app/public/javascripts/prototype.js +6001 -0
  95. data/test_app/public/javascripts/rails.js +175 -0
  96. data/test_app/public/robots.txt +5 -0
  97. data/test_app/public/stylesheets/.gitkeep +0 -0
  98. data/test_app/script/cucumber +10 -0
  99. data/test_app/script/rails +6 -0
  100. data/test_app/spec/controllers/controller_spec.rb +125 -0
  101. data/test_app/spec/controllers/impressionist_uniqueness_spec.rb +310 -0
  102. data/test_app/spec/fixtures/articles.yml +3 -0
  103. data/test_app/spec/fixtures/impressions.yml +43 -0
  104. data/test_app/spec/fixtures/posts.yml +3 -0
  105. data/test_app/spec/fixtures/widgets.yml +4 -0
  106. data/test_app/spec/intializers/initializers_spec.rb +18 -0
  107. data/test_app/spec/models/counter_caching_spec.rb +30 -0
  108. data/test_app/spec/models/model_spec.rb +94 -0
  109. data/test_app/spec/rails_generators/rails_generators_spec.rb +23 -0
  110. data/test_app/spec/spec_helper.rb +36 -0
  111. data/upgrade_migrations/version_0_3_0.rb +7 -7
  112. data/upgrade_migrations/version_0_4_0.rb +2 -2
  113. metadata +356 -99
  114. data/VERSION +0 -1
  115. data/config/routes.rb +0 -2
  116. data/lib/generators/impressionist/impressionist_generator.rb +0 -20
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ *~
2
+ *.DS_Store
3
+ /coverage
4
+ /pkg
5
+ /rdoc
6
+ /test_app/db/schema.rb
7
+ /test_app/db/migrate/*_create_impressions_table.rb
8
+ /test_app/doc
9
+ /test_app/test
10
+ /test_app/vendor
11
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ before_install: gem install bundler
2
+ before_script: "cd test_app && bundle install && ./script/rails generate impressionist && bundle exec rake db:migrate && cd .."
3
+ language: ruby
4
+ rvm:
5
+ - 1.8.7
6
+ - 1.9.2
7
+ - 1.9.3
8
+ - jruby-18mode
9
+ - jruby-19mode
10
+ - rbx-18mode
11
+ - rbx-19mode
data/CHANGELOG.rdoc CHANGED
@@ -16,4 +16,4 @@
16
16
  * @widget.unique_impression_count now uses request_hash. This was incorrectly stated in the README, since it was using ip_address. The README is correct as a result of the method change.
17
17
 
18
18
  == 0.2.4 (2011-02-17)
19
- * Fix issue #1 - action_name and controller_name were not being logged for impressionist method inside action
19
+ * Fix issue #1 - action_name and controller_name were not being logged for impressionist method inside action
data/Gemfile CHANGED
@@ -1,24 +1,13 @@
1
- source "http://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- group :development do
4
- gem "shoulda", ">= 0"
5
- gem "bundler", "~> 1.0.0"
6
- gem "jeweler", "~> 1.5.1"
7
- gem "rcov", ">= 0"
3
+ platforms :jruby do
4
+ gem 'activerecord-jdbcsqlite3-adapter'
5
+ gem 'jdbc-sqlite3'
6
+ gem 'jruby-openssl'
8
7
  end
9
8
 
10
- group :test do
11
- gem 'systemu'
12
- gem "rspec"
13
- gem "rspec-rails"
14
- gem "mongrel", "1.2.0.pre2"
15
- gem 'capybara'
16
- gem 'database_cleaner'
17
- gem 'cucumber-rails'
18
- gem 'cucumber'
19
- gem 'spork'
20
- gem 'launchy'
21
- gem 'autotest-notification'
22
- gem 'httpclient'
9
+ platforms :ruby, :mswin, :mingw do
10
+ gem 'sqlite3'
23
11
  end
24
12
 
13
+ gemspec
data/README.md CHANGED
@@ -1,29 +1,30 @@
1
1
  ![Impressionist Logo](https://github.com/charlotte-ruby/impressionist/raw/master/logo.png)
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/charlotte-ruby/impressionist.png?branch=master)](http://travis-ci.org/charlotte-ruby/impressionist)
4
+
3
5
  impressionist
4
6
  =============
5
7
 
6
8
  A lightweight plugin that logs impressions per action or manually per model
7
9
 
8
- I would not call this a stable plugin yet, although I have been running it in prod with no problems. Use at your own risk ;-)
9
- ------------------------------------------------------------------------------------------------------------------------------
10
+ --------------------------------------------------------------------------------
10
11
 
11
12
  What does this thing do?
12
13
  ------------------------
13
- Logs an impression... and I use that term loosely. It can log page impressions (technically action impressions), but it is not limited to that.
14
- You can log impressions multiple times per request. And you can also attach it to a model. The goal of this project is to provide customizable
15
- stats that are immediately accessible in your application as opposed to using G Analytics and pulling data using their API. You can attach custom
16
- messages to impressions. No reporting yet.. this thingy just creates the data.
14
+ Logs an impression... and I use that term loosely. It can log page impressions
15
+ (technically action impressions), but it is not limited to that. You can log
16
+ impressions multiple times per request. And you can also attach it to a model.
17
+ The goal of this project is to provide customizable stats that are immediately
18
+ accessible in your application as opposed to using Google Analytics and pulling
19
+ data using their API. You can attach custom messages to impressions. No
20
+ reporting yet.. this thingy just creates the data.
17
21
 
18
22
  What about bots?
19
23
  ----------------
20
- They are ignored. 1200 known bots have been added to the ignore list as of Feb 1, 2011. Impressionist uses this list:
24
+ They are ignored. 1200 known bots have been added to the ignore list as of
25
+ February 1, 2011. Impressionist uses this list:
21
26
  http://www.user-agents.org/allagents.xml
22
27
 
23
- Which versions of Rails and Ruby is this compatible with?
24
- ---------------------------------------------------------
25
- Rails 3.0.4 and Ruby 1.9.2 (also tested on REE 1.8.7) - Sorry, but you need to upgrade if you are using Rails 2. You know you want to anyways.. all the cool kids are doing it ;-)
26
-
27
28
  Installation
28
29
  ------------
29
30
  Add it to your Gemfile
@@ -73,46 +74,70 @@ Usage
73
74
  impressionist :actions=>[:show,:index]
74
75
  end
75
76
 
76
- 3. Make your models impressionable. This allows you to attach impressions to an AR model instance. Impressionist will automatically log the Model name (based on action_name) and the id (based on params[:id]), but in order to get the count of impressions (example: @widget.impression_count), you will need to make your model impressionalble
77
+ 3. Make your models impressionable. This allows you to attach impressions to
78
+ an AR model instance. Impressionist will automatically log the Model name
79
+ (based on action_name) and the id (based on params[:id]), but in order to
80
+ get the count of impressions (example: @widget.impression_count), you will
81
+ need to make your model impressionalble
77
82
 
78
83
  class Widget < ActiveRecord::Base
79
84
  is_impressionable
80
85
  end
81
86
 
82
- 4. Log an impression per model instance in your controller. Note that it is not necessary to specify "impressionist" (usage #1) in the top of you controller if you are using this method. If you add "impressionist" to the top of your controller and also use this method in your action, it will result in 2 impressions being logged (but associated with one request_hash)
87
+ 4. Log an impression per model instance in your controller. Note that it is
88
+ not necessary to specify "impressionist" (usage #1) in the top of you
89
+ controller if you are using this method. If you add "impressionist" to the
90
+ top of your controller and also use this method in your action, it will
91
+ result in 2 impressions being logged (but associated with one request_hash)
83
92
 
84
93
  def show
85
94
  @widget = Widget.find
86
95
  impressionist(@widget,message:"wtf is a widget?") #message is optional
87
96
  end
88
97
 
89
- 5. Get unique impression count from a model. This groups impressions by request_hash, so if you logged multiple impressions per request, it will only count them one time. This unique impression count will not filter out unique users, only unique requests
98
+ 5. Get unique impression count from a model. This groups impressions by
99
+ request_hash, so if you logged multiple impressions per request, it will
100
+ only count them one time. This unique impression count will not filter out
101
+ unique users, only unique requests
90
102
 
91
103
  @widget.impressionist_count
92
104
  @widget.impressionist_count(:start_date=>"2011-01-01",:end_date=>"2011-01-05")
93
105
  @widget.impressionist_count(:start_date=>"2011-01-01") #specify start date only, end date = now
94
106
 
95
- 6. Get the unique impression count from a model filtered by IP address. This in turn will give you impressions with unique request_hash, since rows with the same request_hash will have the same IP address.
107
+ 6. Get the unique impression count from a model filtered by IP address. This
108
+ in turn will give you impressions with unique request_hash, since rows with
109
+ the same request_hash will have the same IP address.
96
110
 
97
111
  @widget.impressionist_count(:filter=>:ip_address)
98
112
 
99
- 7. Get the unique impression count from a model filtered by session hash. Same as #6 regarding request hash. This may be more desirable than filtering by IP address depending on your situation, since filtering by IP may ignore visitors that use the same IP. The downside to this filtering is that a user could clear session data in their browser and skew the results.
113
+ 7. Get the unique impression count from a model filtered by session hash. Same
114
+ as #6 regarding request hash. This may be more desirable than filtering by
115
+ IP address depending on your situation, since filtering by IP may ignore
116
+ visitors that use the same IP. The downside to this filtering is that a
117
+ user could clear session data in their browser and skew the results.
100
118
 
101
119
  @widget.impressionist_count(:filter=>:session_hash)
102
120
 
103
- 8. Get total impression count. This may return more than 1 impression per http request, depending on how you are logging impressions
121
+ 8. Get total impression count. This may return more than 1 impression per http
122
+ request, depending on how you are logging impressions
104
123
 
105
124
  @widget.impressionist_count(:filter=>:all)
106
125
 
107
- Logging impressions for authenticated users happens automatically. If you have a current_user helper or use @current_user in your before_filter to set your authenticated user, current_user.id will be written to the user_id field in the impressions table.
126
+ Logging impressions for authenticated users happens automatically. If you have
127
+ a current_user helper or use @current_user in your before_filter to set your
128
+ authenticated user, current_user.id will be written to the user_id field in the
129
+ impressions table.
108
130
 
109
131
  Adding a counter cache
110
132
  ----------------------
111
- Impressionist makes it easy to add a `counter_cache` column to your model. The most basic configuration looks like:
133
+ Impressionist makes it easy to add a `counter_cache` column to your model. The
134
+ most basic configuration looks like:
112
135
 
113
136
  is_impressionable :counter_cache => true
114
137
 
115
- This will automatically increment the `impressions_count` column in the included model. Note: You'll need to add that column to your model. If you'd like specific a different column name, you can:
138
+ This will automatically increment the `impressions_count` column in the
139
+ included model. Note: You'll need to add that column to your model. If you'd
140
+ like specific a different column name, you can:
116
141
 
117
142
  is_impressionable :counter_cache => { :column_name => :my_column }
118
143
 
@@ -120,10 +145,11 @@ If you'd like to include only unique impressions in your count:
120
145
 
121
146
  is_impressionable :counter_cache => { :column_name => :my_column, :unique => true }
122
147
 
123
-
124
148
  What if I only want to record unique impressions?
125
149
  -------------------------------------------------
126
- Maybe you only care about unique impressions and would like to eliminate unnecessary database calls. You can specify conditions for recording impressions in your controller:
150
+ Maybe you only care about unique impressions and would like to avoid
151
+ unnecessary database records. You can specify conditions for recording
152
+ impressions in your controller:
127
153
 
128
154
  # only record impression if the request has a unique combination of type, id, and session
129
155
  impressionist :unique => [:impressionable_type, :impressionable_id, :session_hash]
@@ -138,30 +164,35 @@ Or you can use the `impressionist` method directly:
138
164
 
139
165
  impressionist(impressionable, "some message", :unique => [:session_hash])
140
166
 
141
-
142
167
  Development Roadmap
143
168
  -------------------
144
- * Automatic impression logging in views. For example, log initial view, and any partials called from initial view
145
- * Customizable black list for user-agents or IP addresses. Impressions will be ignored. Web admin as part of the Engine.
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.
146
173
  * Reporting engine
147
174
  * AB testing integration
148
175
 
149
176
  Contributing to impressionist
150
177
  -----------------------------
151
- * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
152
- * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
178
+ * Check out the latest master to make sure the feature hasn't been implemented
179
+ or the bug hasn't been fixed yet
180
+ * Check out the issue tracker to make sure someone already hasn't requested it
181
+ and/or contributed it
153
182
  * Fork the project
154
183
  * Start a feature/bugfix branch
155
184
  * Commit and push until you are happy with your contribution
156
- * Make sure to add rpsec tests for it. Patches or features without tests will be ignored. Also, try to write better tests than I do ;-)
157
- * If adding engine controller or view functionality, use HAML and Inherited Resources.
158
- * All testing is done inside a small Rails app (test_app). You will find specs within this app.
185
+ * Make sure to add rpsec tests for it. Patches or features without tests will
186
+ be ignored. Also, try to write better tests than I do ;-)
187
+ * If adding engine controller or view functionality, use HAML and Inherited
188
+ Resources.
189
+ * All testing is done inside a small Rails app (test_app). You will find specs
190
+ within this app.
159
191
 
160
192
  Contributors
161
193
  ------------
162
- * johnmcaliley
163
- * coryschires
164
- * georgmittendorfer
165
-
194
+ * [johnmcaliley](https://github.com/johnmcaliley)
195
+ * [coryschires](https://github.com/coryschires)
196
+ * [georgmittendorfer](https://github.com/georgmittendorfer)
166
197
 
167
198
  Copyright (c) 2011 John McAliley. See LICENSE.txt for further details.
data/Rakefile CHANGED
@@ -1,89 +1,17 @@
1
- require 'rubygems'
2
- require 'bundler'
1
+ #!/usr/bin/env rake
3
2
 
4
- begin
5
- Bundler.setup(:default, :development)
6
- rescue Bundler::BundlerError => e
7
- $stderr.puts e.message
8
- $stderr.puts "Run `bundle install` to install missing gems"
9
- exit e.status_code
10
- end
11
- require 'rake'
12
-
13
- require 'jeweler'
14
- Jeweler::Tasks.new do |gem|
15
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
16
- gem.name = "impressionist"
17
- gem.homepage = "http://github.com/cowboycoded/impressionist"
18
- gem.license = "MIT"
19
- gem.summary = %Q{Easy way to log impressions}
20
- gem.description = %Q{Log impressions from controller actions or from a model}
21
- gem.email = "john.mcaliley@gmail.com"
22
- gem.authors = ["cowboycoded"]
23
- gem.files.exclude "test_app/**/*", "test_app/**/.*"
24
- end
25
- Jeweler::RubygemsDotOrgTasks.new
3
+ require 'bundler/setup'
4
+ require 'rspec/core/rake_task'
26
5
 
27
- require 'rake/testtask'
28
- Rake::TestTask.new(:test) do |test|
29
- test.libs << 'lib' << 'test'
30
- test.pattern = 'test/**/test_*.rb'
31
- test.verbose = true
32
- end
6
+ Bundler::GemHelper.install_tasks
33
7
 
34
- require 'rcov/rcovtask'
35
- Rcov::RcovTask.new do |test|
36
- test.libs << 'test'
37
- test.pattern = 'test/**/test_*.rb'
38
- test.verbose = true
8
+ RSpec::Core::RakeTask.new do |task|
9
+ task.rspec_opts = "-I ./test_app/spec"
10
+ task.pattern = "./test_app/spec/**/*_spec.rb"
39
11
  end
40
12
 
41
- task :default => :test
42
-
43
- require 'rake/rdoctask'
44
- Rake::RDocTask.new do |rdoc|
45
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
-
47
- rdoc.rdoc_dir = 'rdoc'
48
- rdoc.title = "impressionist #{version}"
49
- rdoc.rdoc_files.include('README*')
50
- rdoc.rdoc_files.include('lib/**/*.rb')
51
- end
52
-
53
- namespace :version do
54
- desc "create a new version, create tag and push to github"
55
- task :patch_release do
56
- if Jeweler::Commands::ReleaseToGit.new.clean_staging_area?
57
- Rake::Task['version:bump:patch'].invoke
58
- Rake::Task['gemspec:release'].invoke
59
- Rake::Task['git:release'].invoke
60
- else
61
- puts "Commit your changed files first"
62
- end
63
- end
64
-
65
- desc "create a new version, create tag and push to github"
66
- task :minor_release do
67
- if Jeweler::Commands::ReleaseToGit.new.clean_staging_area?
68
- Rake::Task['version:bump:minor'].invoke
69
- Rake::Task['gemspec:release'].invoke
70
- Rake::Task['git:release'].invoke
71
- else
72
- puts "Commit your changed files first"
73
- end
74
- end
75
-
76
- desc "create a new version, create tag and push to github"
77
- task :major_release do
78
- if Jeweler::Commands::ReleaseToGit.new.clean_staging_area?
79
- Rake::Task['version:bump:major'].invoke
80
- Rake::Task['gemspec:release'].invoke
81
- Rake::Task['git:release'].invoke
82
- else
83
- puts "Commit your changed files first"
84
- end
85
- end
86
- end
13
+ task :test => :spec
14
+ task :default => :spec
87
15
 
88
16
  namespace :impressionist do
89
17
  require File.dirname(__FILE__) + "/lib/impressionist/bots"
@@ -92,4 +20,4 @@ namespace :impressionist do
92
20
  task :bots do
93
21
  p Impressionist::Bots.consume
94
22
  end
95
- end
23
+ end
@@ -39,22 +39,22 @@ module ImpressionistController
39
39
  end
40
40
 
41
41
  private
42
-
42
+
43
43
  def bypass
44
44
  Impressionist::Bots::WILD_CARDS.each do |wild_card|
45
45
  return true if request.user_agent and request.user_agent.downcase.include? wild_card
46
46
  end
47
47
  Impressionist::Bots::LIST.include? request.user_agent
48
48
  end
49
-
49
+
50
50
  def unique_instance?(impressionable, unique_opts)
51
- return unique_opts.blank? || impressionable.impressions.where(unique_query(unique_opts)).size == 0
51
+ return unique_opts.blank? || !impressionable.impressions.where(unique_query(unique_opts)).exists?
52
52
  end
53
-
53
+
54
54
  def unique?(unique_opts)
55
- return unique_opts.blank? || Impression.where(unique_query(unique_opts)).size == 0
55
+ return unique_opts.blank? || !Impression.where(unique_query(unique_opts)).exists?
56
56
  end
57
-
57
+
58
58
  # creates the query to check for uniqueness
59
59
  def unique_query(unique_opts)
60
60
  full_statement = direct_create_statement
@@ -64,7 +64,7 @@ module ImpressionistController
64
64
  query
65
65
  end
66
66
  end
67
-
67
+
68
68
  # creates a statment hash that contains default values for creating an impression via an AR relation.
69
69
  def associative_create_statement(query_params={})
70
70
  query_params.reverse_merge!(
@@ -77,7 +77,7 @@ module ImpressionistController
77
77
  :referrer => request.referer
78
78
  )
79
79
  end
80
-
80
+
81
81
  # creates a statment hash that contains default values for creating an impression.
82
82
  def direct_create_statement(query_params={})
83
83
  query_params.reverse_merge!(
@@ -86,7 +86,7 @@ module ImpressionistController
86
86
  )
87
87
  associative_create_statement(query_params)
88
88
  end
89
-
89
+
90
90
  def session_hash
91
91
  # # careful: request.session_options[:id] encoding in rspec test was ASCII-8BIT
92
92
  # # that broke the database query for uniqueness. not sure if this is a testing only issue.
@@ -95,7 +95,7 @@ module ImpressionistController
95
95
  # # request.session_options[:id].encode("ISO-8859-1")
96
96
  request.session_options[:id]
97
97
  end
98
-
98
+
99
99
  #use both @current_user and current_user helper
100
100
  def user_id
101
101
  user_id = @current_user ? @current_user.id : nil rescue nil
@@ -103,4 +103,4 @@ module ImpressionistController
103
103
  user_id
104
104
  end
105
105
  end
106
- end
106
+ end
@@ -1,16 +1,3 @@
1
- class Impression < ActiveRecord::Base
1
+ class Impression
2
2
  belongs_to :impressionable, :polymorphic=>true
3
-
4
- after_save :update_impressions_counter_cache
5
-
6
- private
7
-
8
- def update_impressions_counter_cache
9
- impressionable_class = self.impressionable_type.constantize
10
-
11
- if impressionable_class.counter_cache_options
12
- resouce = impressionable_class.find(self.impressionable_id)
13
- resouce.try(:update_counter_cache)
14
- end
15
- end
16
- end
3
+ end
@@ -1,8 +1,8 @@
1
1
  module Impressionist
2
2
  module Bots
3
3
  WILD_CARDS = ["bot","yahoo","slurp","google","msn","crawler"]
4
-
5
- LIST = ["<a href='http://www.unchaos.com/'> UnChaos </a> From Chaos To Order Hybrid Web Search Engine.(vadim_gonchar@unchaos.com)",
4
+
5
+ LIST = ["<a href='http://www.unchaos.com/'> UnChaos </a> From Chaos To Order Hybrid Web Search Engine.(vadim_gonchar@unchaos.com)",
6
6
  "<a href='http://www.unchaos.com/'> UnChaos Bot Hybrid Web Search Engine. </a> (vadim_gonchar@unchaos.com)",
7
7
  "<b> UnChaosBot From Chaos To Order UnChaos Hybrid Web Search Engine at www.unchaos.com </b> (info@unchaos.com)",
8
8
  "<http://www.sygol.com/> http://www.sygol.com",
@@ -1459,4 +1459,4 @@ module Impressionist
1459
1459
  "zspider/0.9-dev http://feedback.redkolibri.com/",
1460
1460
  "ZyBorg/1.0 (ZyBorg@WISEnut.com; http://www.WISEnut.com)"]
1461
1461
  end
1462
- end
1462
+ end