New and Announcement search. Disabled impression.

This commit is contained in:
Matthew K. Fu JuYuan committed 2012-07-20 15:47:40 +08:00
1 parent 033667f99b
commit f9bdb4a327
39 files changed
+222 -1345

No files matched your search

+1 -1
View File
@@ -7,7 +7,7 @@ platforms :jruby do
end
platforms :ruby, :mswin, :mingw do
# gem 'sqlite3'
gem 'sqlite3'
end
gemspec
@@ -29,22 +29,17 @@ module Impressionist
end
def impressionist_count(options={})
# options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now)
# imps = options[:start_date].blank? ? impressions : impressions.where("created_at>=? and created_at<=?",options[:start_date],options[:end_date])
# options[:filter] == :all ? imps.count : imps.count(options[:filter], :distinct => true)
options.reverse_merge!(:filter => :request_hash, :start_date => nil, :end_date => Time.now)
imps = options[:start_date].blank? ? impressions : impressions.where(:created_at.gte => options[:start_date], :created_at.lte => options[:end_date])
options[:filter] == :all ? imps.count : imps.distinct(options[:filter]).count
options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now)
imps = options[:start_date].blank? ? impressions : impressions.where("created_at>=? and created_at<=?",options[:start_date],options[:end_date])
options[:filter] == :all ? imps.count : imps.count(options[:filter], :distinct => true)
end
def update_impressionist_counter_cache
# cache_options = self.class.impressionist_counter_cache_options
# column_name = cache_options[:column_name].to_sym
# count = cache_options[:unique] ? impressionist_count(:filter => :ip_address) : impressionist_count
# update_attribute(column_name, count)
cache_options = self.class.impressionist_counter_cache_options
column_name = cache_options[:column_name].to_sym
update_attribute(column_name, self.send(cache_options[:column_name]) + 1)
count = cache_options[:unique] ? impressionist_count(:filter => :ip_address) : impressionist_count
old_count = send(column_name) || 0
self.class.update_counters(id, column_name => (count - old_count))
end
# OLD METHODS - DEPRECATE IN V0.5
@@ -7,6 +7,7 @@ module Impressionist
def copy_config_file
template 'impression.rb', 'config/initializers/impression.rb'
end
end
end
end
@@ -1,5 +1,5 @@
# Use this hook to configure impressionist parameters
Impressionist.setup do |config|
# Define ORM. Could be :active_record (default) and :mongo_mapper
# Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
# config.orm = :active_record
end
@@ -0,0 +1,10 @@
ImpressionistController::InstanceMethods.send(:define_method, :direct_create_statement) do |query_params={}|
# creates a statment hash that contains default values for creating an impression.
# if :impressionable_id is a valid ObjectId then convert it into one
base = (defined? Moped) ? Moped::BSON : BSON
query_params.reverse_merge!(
:impressionable_type => controller_name.singularize.camelize,
:impressionable_id=> !base::ObjectId.legal?(params[:id]) ? params[:id] : base::ObjectId.from_string(params[:id])
)
associative_create_statement(query_params)
end
+7 -4
View File
@@ -5,7 +5,7 @@ module Impressionist
class Engine < Rails::Engine
initializer 'impressionist.model' do |app|
require "#{root}/app/models/impressionist/impressionable.rb"
if Impressionist.orm == :active_record
if Impressionist.orm == :active_record && defined? ActiveRecord
require "impressionist/models/active_record/impression.rb"
require "impressionist/models/active_record/impressionist/impressionable.rb"
ActiveRecord::Base.send(:include, Impressionist::Impressionable)
@@ -14,13 +14,16 @@ module Impressionist
require "impressionist/models/mongo_mapper/impressionist/impressionable.rb"
MongoMapper::Document.plugin Impressionist::Impressionable
elsif Impressionist.orm == :mongoid
require "impressionist/models/mongoid/impression.rb"
require "impressionist/models/mongoid/impressionist/impressionable.rb"
# Mongoid::Document Impressionist::Impressionable
require 'impressionist/models/mongoid/impression.rb'
require 'impressionist/models/mongoid/impressionist/impressionable.rb'
Mongoid::Document.send(:include, Impressionist::Impressionable)
end
end
initializer 'impressionist.controller' do
if Impressionist.orm == :mongoid
require 'impressionist/controllers/mongoid/impressionist_controller.rb'
end
ActiveSupport.on_load(:action_controller) do
include ImpressionistController::InstanceMethods
extend ImpressionistController::ClassMethods
@@ -2,8 +2,12 @@ class Impression
include Mongoid::Document
include Mongoid::Timestamps
field :impressionable_type
field :impressionable_id
attr_accessible :impressionable_type, :impressionable_field, :impressionable_id, :user_id,
:controller_name, :action_name, :view_name, :request_hash, :ip_address,
:session_hash, :message, :referrer
belongs_to :impressionable, polymorphic: true
field :user_id
field :controller_name
field :action_name
@@ -14,26 +18,15 @@ class Impression
field :message
field :referrer
belongs_to :impressionable, :polymorphic => true
after_save :update_impressions_counter_cache
def self.impressionist_count(options={})
options.reverse_merge!(:filter => :request_hash, :start_date => nil, :end_date => Time.now)
imps = options[:start_date].blank? ? impressions : impressions.where(:created_at.gte => options[:start_date], :created_at.lte => options[:end_date])
options[:filter] == :all ? imps.count : imps.distinct(options[:filter]).count
end
private
def update_impressions_counter_cache
if self.referrer
impressionable_class = self.impressionable_type.constantize
set_callback(:create, :after) do |doc|
unless impressionable_id.nil?
impressionable_class = doc.impressionable_type.constantize
if impressionable_class.impressionist_counter_cache_options
resouce = impressionable_class.find(self.impressionable_id)
resouce.try(:update_impressionist_counter_cache)
resource = impressionable_class.find(doc.impressionable_id)
resource.try(:update_impressionist_counter_cache)
end
end
end
end
@@ -4,9 +4,49 @@ module Impressionist
module ClassMethods
def is_impressionable(options={})
has_many :impressions, :as => :impressionable, :dependent => :destroy
@impressionist_cache_options = options[:counter_cache]
has_many :impressions, as: :impressionable, dependent: :destroy
@impressionist_cache_options = options[:counter_cache]
if !@impressionist_cache_options.nil?
opts = impressionist_counter_cache_options
field opts[:column_name], type: Integer
end
end
def impressionist_counter_cache_options
if @impressionist_cache_options
options = { :column_name => :impressions_count, :unique => false }
options.merge!(@impressionist_cache_options) if @impressionist_cache_options.is_a?(Hash)
options
end
end
def impressionist_counter_caching?
impressionist_counter_cache_options.present?
end
def counter_caching?
::ActiveSupport::Deprecation.warn("#counter_caching? is deprecated; please use #impressionist_counter_caching? instead")
impressionist_counter_caching?
end
end
def impressionable?
true
end
def impressionist_count(options={})
options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now)
imps = options[:start_date].blank? ? impressions : impressions.between(created_at: options[:start_date]..options[:end_date])
options[:filter] == :all ? imps.count : imps.where(options[:filter].ne => nil).count
end
def update_impressionist_counter_cache
cache_options = self.class.impressionist_counter_cache_options
column_name = cache_options[:column_name].to_sym
count = cache_options[:unique] ? impressionist_count(:filter => :ip_address) : impressionist_count
old_count = send(column_name) || 0
self.inc(column_name, (count - old_count))
end
end
end
end
@@ -38,6 +38,13 @@ describe Impression do
@widget.reload
}.should change(@widget, :impressions_count).from(0).to(1)
end
it "should not update the timestamp on the impressable" do
lambda {
@widget.impressions.create(:request_hash => 'abcd1234')
@widget.reload
}.should_not change(@widget, :updated_at)
end
end
end