impressionist 1.4.4 → 1.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3a03cb71c9631c8e6f1d0b78ea0c7352465a0fe
4
- data.tar.gz: b256dce5af8d0913fc40467a1e87b7f412fff7ba
3
+ metadata.gz: 81262fb9bc635b7807f03083d9f0a397f8f1d63f
4
+ data.tar.gz: f9db8dc841a204fed13f6394ac11f03de8b6534b
5
5
  SHA512:
6
- metadata.gz: e44afe2ee56ede31675a19e7e0a9373aa61c6771ce4102f3d0dc83f8c90175a67f325aca643aed2a81e78b54025ffeec9f6c3438a573cf98e82bd6df21574981
7
- data.tar.gz: 5f540eaeb2e530544f3601c28d99627af967ac34e9ee4514d30cff4e97731a8669ba50750b40db597cd2b3aca4ee9d61d4ab540c3a3ab6808caf5b849c67309c
6
+ metadata.gz: e06ea3557bac54ffafb0e067193ede993654a37a6be75cf012c05b8145fd3d73448df69517e860e8d89a50581421699ef0e3536c868556551175280c4ae4c4f3
7
+ data.tar.gz: b3dc48b55a06c462e11df5d293594fb48d5607779f98be349970b78f969a21efdbfb0577d1a09ae904cac2d79e9ecaab0abc4da6a2fb7b9c6f169f0896b6291b
@@ -12,7 +12,7 @@ module Impressionist
12
12
  @impressionist_cache_options.reverse_merge!(DEFAULT_CACHE)
13
13
  end
14
14
 
15
- # true or false
15
+ # asks impressionable entity whether or not it is counter_caching
16
16
  def impressionist_counter_caching?
17
17
  impressionist_counter_cache_options[:counter_cache]
18
18
  end
@@ -22,7 +22,7 @@ module Impressionist
22
22
  impressionist_counter_caching?
23
23
  end
24
24
 
25
- end
25
+ end # end of ClassMethods
26
26
 
27
27
  # ------------------------------------------
28
28
  # TODO: CLEAN UP, make it HUMAN readable
@@ -1,55 +1,34 @@
1
+ # Note
2
+ # It is only updatable if
3
+ # impressionist_id && impressionist_type(class) are present &&
4
+ # impressionable_class(which is imp_type.constantize) is counter_caching
5
+ # Defined like so
6
+ # is_impressionable :counter_cache => true
7
+
1
8
  module Impressionist
2
9
  module CounterCache
3
10
 
4
11
  attr_reader :impressionable_class, :entity
5
12
 
6
13
  private
7
- LOG_MESSAGE = "Can't find impressionable_type or impressionable_id. Will not update_counters!"
8
14
 
9
15
  # if updatable returns true, it must be qualified to update_counters
10
- # Therefore there's no need to validate again
11
16
  # impressionable_class instance var is set when updatable? is called
12
17
  def impressionable_counter_cache_updatable?
13
- updatable? ? update_impression_cache : impressionist_log(LOG_MESSAGE)
14
- end
15
-
16
- def update_impression_cache
17
- impressionable_find
18
- impressionable_try
18
+ updatable? && impressionable_try
19
19
  end
20
20
 
21
- # asks imp_id whether it's present or not
22
- # also expect imp_class to be true
23
- # all should be true, so that it is updatable
21
+ # asks imp_id && imp_class whether it's present or not
22
+ # so that it is updatable
24
23
  def updatable?
25
24
  @impressionable_class = impressionable_class_set
26
25
  impressionable_valid?
27
26
  end
28
27
 
29
- # imps_type == nil, constantize returns Object
30
- # Therefore it attemps to return false so it won't be updatable
31
- # calls to_s otherwise it would try to constantize nil
32
- # and it would raise an exeception..
33
- def impressionable_class_set
34
- _type_ = self.impressionable_type.to_s.constantize
35
- ((_type_.to_s !~ /Object/) && _type_.impressionist_counter_caching? ? _type_ : false)
36
- end
37
-
38
- # Either true or false
39
- # needs true to be updatable
40
28
  def impressionable_valid?
41
- (self.impressionable_id.present? && impressionable_class && impressionable_find)
42
- end
43
-
44
- # Logs to log file, expects a message to be passed
45
-
46
- # default mode is ERROR
47
- # ruby 1.8.7 support
48
- def impressionist_log(str, mode=:error)
49
- Rails.logger.send(mode.to_s, str)
29
+ (self.impressionable_id.present? && impressionable_class)
50
30
  end
51
31
 
52
- # read it out and LOUD
53
32
  def impressionable_find
54
33
  exeception_rescuer {
55
34
  @entity = impressionable_class.find(self.impressionable_id)
@@ -58,10 +37,27 @@ module Impressionist
58
37
 
59
38
  end
60
39
 
40
+ # imps_type == nil, constantize returns Object
41
+ # It attemps to return false so it won't be updatable
42
+ # calls to_s otherwise it would try to constantize nil
43
+ # and it would raise an exeception
44
+ # Must be !~ Object and be counter_caching to be qualified as updatable
45
+ def impressionable_class_set
46
+ klass = self.impressionable_type.to_s.constantize
47
+ (klass.to_s !~ /Object/) && klass.impressionist_counter_caching? ? klass : false
48
+ end
49
+
50
+ # default mode is ERROR
51
+ # ruby 1.8.7 support
52
+ def impressionist_log(str, mode=:error)
53
+ Rails.logger.send(mode.to_s, str)
54
+ end
55
+
61
56
  # receives an entity(instance of a Model) and then tries to update
62
57
  # counter_cache column
63
- # entity is a impressionable_model
58
+ # entity is a impressionable instance model
64
59
  def impressionable_try
60
+ impressionable_find
65
61
  entity.try(:update_impressionist_counter_cache)
66
62
  end
67
63
 
@@ -0,0 +1,23 @@
1
+ module Impressionist
2
+ module IsImpressionable
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def is_impressionable(options={})
7
+ define_association
8
+ @impressionist_cache_options = options
9
+
10
+ true
11
+ end
12
+
13
+ private
14
+
15
+ def define_association
16
+ has_many(:impressions,
17
+ :as => :impressionable,
18
+ :dependent => :destroy)
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -1,5 +1,3 @@
1
- require 'impressionist/engine'
2
-
3
1
  require 'impressionist/setup_association'
4
2
 
5
3
  require 'impressionist/counter_cache'
@@ -7,3 +5,7 @@ require 'impressionist/counter_cache'
7
5
  require 'impressionist/update_counters'
8
6
 
9
7
  require 'impressionist/rails_toggle'
8
+
9
+ require 'impressionist/is_impressionable'
10
+
11
+ require 'impressionist/engine'
@@ -1,14 +1,12 @@
1
1
  # Responsability
2
- ## See CounterCache TODO: extract it into a class
3
- # * be able to update_counters
4
- # * log an error if imps_id and imps_type can not be found
2
+ # * logs an error if imps_id and imps_type can not be found
5
3
  # * asks updatable? whether it may or may not be updated
6
- # FIX exeception raising when no imps_id is found
7
4
 
8
5
  class Impression < ActiveRecord::Base
9
6
 
10
7
  include Impressionist::CounterCache
11
- # sets belongs_to and attr_accessible
8
+
9
+ # sets belongs_to and attr_accessible depending on Rails version
12
10
  Impressionist::SetupAssociation.new(self).set
13
11
 
14
12
  after_save :impressionable_counter_cache_updatable?
@@ -1,26 +1,12 @@
1
- ActiveRecord::Base.send(:include, Impressionist::Impressionable)
2
-
3
1
  module Impressionist
4
- module Impressionable
5
- extend ActiveSupport::Concern
6
-
7
- module ClassMethods
8
-
9
- def is_impressionable(options={})
10
- define_association
11
2
 
12
- @impressionist_cache_options = options
13
- end
14
-
15
- private
16
- def define_association
17
- has_many(:impressions,
18
- :as => :impressionable,
19
- :dependent => :destroy)
20
- end
21
-
22
- end
3
+ module Impressionable
23
4
 
5
+ # extends AS::Concern
6
+ include Impressionist::IsImpressionable
24
7
  end
25
8
 
26
9
  end
10
+
11
+ ActiveRecord::Base.
12
+ send(:include, Impressionist::Impressionable)
@@ -1,31 +1,13 @@
1
- # TODO: Refactor this Entity
2
- # There's a lot of duplication
3
- Mongoid::Document.send(:include, Impressionist::Impressionable)
4
-
5
1
  module Impressionist
6
2
  module Impressionable
7
- extend ActiveSupport::Concern
8
-
9
- module ClassMethods
10
3
 
11
- def is_impressionable(options={})
12
- define_association
13
- @impressionist_cache_options = options
4
+ # extends AS::Concern
5
+ include Impressionist::IsImpressionable
14
6
 
15
- true
16
- end
7
+ ## TODO: Make it readable
17
8
 
18
- private
19
- def define_association
20
- has_many(:impressions,
21
- :as => :impressionable,
22
- :dependent => :destroy)
23
- end
24
-
25
- end
26
-
27
- ##
28
- # Overides active_record impressionist_count
9
+ # Overides impressionist_count in order to provied
10
+ # mongoid compability
29
11
  def impressionist_count(options={})
30
12
  options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now)
31
13
  imps = options[:start_date].blank? ? impressions : impressions.between(created_at: options[:start_date]..options[:end_date])
@@ -34,5 +16,7 @@ module Impressionist
34
16
  end
35
17
 
36
18
  end
37
-
38
19
  end
20
+
21
+ Mongoid::Document.
22
+ send(:include, Impressionist::Impressionable)
@@ -1,62 +1,68 @@
1
+ # Note
2
+ # If impressionist_counter_cache_options[:counter_cache] is false(default)
3
+ # it won't event run this class
1
4
  module Impressionist
5
+
2
6
  class UpdateCounters
3
- attr_reader :receiver, :master
7
+ attr_reader :receiver, :klass
4
8
 
5
9
  def initialize(receiver)
6
10
  @receiver = receiver
7
- @master = receiver.class
11
+ @klass = receiver.class
8
12
  end
9
13
 
10
14
  def update
11
- result = (impressions_total - impressions_cached)
12
-
13
- master.
15
+ klass.
14
16
  update_counters(id, column_name => result)
15
17
  end
16
18
 
17
19
  private
18
- def id
19
- receiver.id
20
- end
21
-
22
- # if unique == true then uses it
23
- # otherwise just count all impressions
24
- # using filter: :all
25
- def impressions_total
26
- receiver.impressionist_count filter(unique_filter)
27
- end
28
-
29
- # from a given db column
30
- # default should be impressions_count
31
- def impressions_cached
32
- receiver.send(column_name) || 0
33
- end
34
-
35
- def column_name
36
- cache_options[:column_name].to_sym
37
- end
38
-
39
- def cache_options
40
- master.
41
- impressionist_counter_cache_options
42
- end
43
-
44
- # default is ip_address if what_is_unique is TRUE or FALSE
45
- def unique_filter
46
- what_is_unique? ? :ip_address : cache_options[:unique]
47
- end
48
-
49
- # Either true or false
50
- # :filter gets assigned to :ip_address as default
51
- # One could do
52
- # is_impressionable :counter_cache => true, :unique => :any_other_colum
53
- def what_is_unique?
54
- cache_options[:unique].to_s =~ /true|false/
55
- end
56
-
57
- def filter(filter_will_be)
58
- {:filter => filter_will_be.to_sym}
59
- end
20
+
21
+ def result
22
+ impressions_total - impressions_cached
23
+ end
24
+
25
+ # Count impressions based on unique_filter
26
+ # default is :ip_address when unique: true
27
+ def impressions_total
28
+ receiver.impressionist_count filter
29
+ end
30
+
31
+ # Fetch impressions from a receiver's column
32
+ def impressions_cached
33
+ receiver.send(column_name) || 0
34
+ end
35
+
36
+ def filter
37
+ {:filter => unique_filter}
38
+ end
39
+
40
+ # :filter gets assigned to :ip_address as default
41
+ # One could do
42
+ # is_impressionable :counter_cache => true,
43
+ # :unique => :any_other_filter
44
+ def unique_filter
45
+ Symbol === unique ?
46
+ unique :
47
+ :ip_address
48
+ end
49
+
50
+ def unique
51
+ cache_options[:unique]
52
+ end
53
+
54
+ def column_name
55
+ cache_options[:column_name].to_s
56
+ end
57
+
58
+ def cache_options
59
+ klass.
60
+ impressionist_counter_cache_options
61
+ end
62
+
63
+ def id
64
+ receiver.id
65
+ end
60
66
 
61
67
  end
62
68
 
@@ -1,3 +1,3 @@
1
1
  module Impressionist
2
- VERSION = "1.4.4"
2
+ VERSION = "1.4.5"
3
3
  end
@@ -1,5 +1,8 @@
1
1
  # Use this hook to configure impressionist parameters
2
- Impressionist.setup do |config|
2
+ #Impressionist.setup do |config|
3
3
  # Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
4
4
  # config.orm = :active_record
5
- end
5
+ #end
6
+
7
+
8
+ Impressionist.orm = :active_record
@@ -0,0 +1,30 @@
1
+ class CreateImpressionsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :impressions, :force => true do |t|
4
+ t.string :impressionable_type
5
+ t.integer :impressionable_id
6
+ t.integer :user_id
7
+ t.string :controller_name
8
+ t.string :action_name
9
+ t.string :view_name
10
+ t.string :request_hash
11
+ t.string :ip_address
12
+ t.string :session_hash
13
+ t.text :message
14
+ t.text :referrer
15
+ t.timestamps
16
+ end
17
+ add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false, :length => {:message => 255 }
18
+ add_index :impressions, [:impressionable_type, :impressionable_id, :request_hash], :name => "poly_request_index", :unique => false
19
+ add_index :impressions, [:impressionable_type, :impressionable_id, :ip_address], :name => "poly_ip_index", :unique => false
20
+ add_index :impressions, [:impressionable_type, :impressionable_id, :session_hash], :name => "poly_session_index", :unique => false
21
+ add_index :impressions, [:controller_name,:action_name,:request_hash], :name => "controlleraction_request_index", :unique => false
22
+ add_index :impressions, [:controller_name,:action_name,:ip_address], :name => "controlleraction_ip_index", :unique => false
23
+ add_index :impressions, [:controller_name,:action_name,:session_hash], :name => "controlleraction_session_index", :unique => false
24
+ add_index :impressions, :user_id
25
+ end
26
+
27
+ def self.down
28
+ drop_table :impressions
29
+ end
30
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: impressionist
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 1.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - johnmcaliley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-14 00:00:00.000000000 Z
11
+ date: 2013-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -208,6 +208,7 @@ files:
208
208
  - lib/impressionist/controllers/mongoid/impressionist_controller.rb
209
209
  - lib/impressionist/counter_cache.rb
210
210
  - lib/impressionist/engine.rb
211
+ - lib/impressionist/is_impressionable.rb
211
212
  - lib/impressionist/load.rb
212
213
  - lib/impressionist/models/active_record/impression.rb
213
214
  - lib/impressionist/models/active_record/impressionist/impressionable.rb
@@ -278,6 +279,7 @@ files:
278
279
  - tests/test_app/db/migrate/20110201153144_create_articles.rb
279
280
  - tests/test_app/db/migrate/20110210205028_create_posts.rb
280
281
  - tests/test_app/db/migrate/20111127184039_create_widgets.rb
282
+ - tests/test_app/db/migrate/20130719024021_create_impressions_table.rb
281
283
  - tests/test_app/db/schema.rb
282
284
  - tests/test_app/db/seeds.rb
283
285
  - tests/test_app/lib/assets/.gitkeep
@@ -397,6 +399,7 @@ test_files:
397
399
  - tests/test_app/db/migrate/20110201153144_create_articles.rb
398
400
  - tests/test_app/db/migrate/20110210205028_create_posts.rb
399
401
  - tests/test_app/db/migrate/20111127184039_create_widgets.rb
402
+ - tests/test_app/db/migrate/20130719024021_create_impressions_table.rb
400
403
  - tests/test_app/db/schema.rb
401
404
  - tests/test_app/db/seeds.rb
402
405
  - tests/test_app/lib/assets/.gitkeep