class Impressionist::UpdateCounters

Attributes

klass[R]
receiver[R]

Public Class Methods

new(receiver) click to toggle source
# File lib/impressionist/update_counters.rb, line 9
def initialize(receiver)
  @receiver = receiver
  @klass = receiver.class
end

Public Instance Methods

update() click to toggle source
# File lib/impressionist/update_counters.rb, line 14
def update
  klass.
  update_counters(id, column_name => result)
end

Private Instance Methods

cache_options() click to toggle source
# File lib/impressionist/update_counters.rb, line 66
def cache_options
  klass.
  impressionist_counter_cache_options
end
column_name() click to toggle source
# File lib/impressionist/update_counters.rb, line 62
def column_name
  cache_options[:column_name].to_s
end
filter() click to toggle source
# File lib/impressionist/update_counters.rb, line 36
def filter
  {:filter => unique_filter}
end
id() click to toggle source
# File lib/impressionist/update_counters.rb, line 71
def id
  receiver.id
end
impressions_cached() click to toggle source

Fetch impressions from a receiver's column

# File lib/impressionist/update_counters.rb, line 32
def impressions_cached
  receiver.send(column_name) || 0
end
impressions_total() click to toggle source

Count impressions based on unique_filter default is :ip_address when unique: true

# File lib/impressionist/update_counters.rb, line 27
def impressions_total
  receiver.impressionist_count filter
end
result() click to toggle source
# File lib/impressionist/update_counters.rb, line 21
def result
  impressions_total - impressions_cached
end
unique() click to toggle source
# File lib/impressionist/update_counters.rb, line 58
def unique
  cache_options[:unique]
end
unique_filter() click to toggle source

:filter gets assigned to :ip_address as default One could do is_impressionable :counter_cache => true, :unique => :any_other_filter

# File lib/impressionist/update_counters.rb, line 44
def unique_filter
  # Support `is_impressionable :counter_cache => true, :unique => true`
  # defaulting to `:ip_address` for counting unique impressions.
  return :ip_address if unique == true

  # Should a user try `is_impressionable :counter_cache => true, :unique => false`
  # then support that as well
  return :all if unique == false

  # Otherwise set the filter to either what the user supplied as the `unique` option
  # or the default (`:all`)
  unique
end