Class: AdvertSelector::Banner
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- AdvertSelector::Banner
- Defined in:
- app/models/advert_selector/banner.rb
Instance Method Summary collapse
- #add_one_viewcount ⇒ Object
- #after_save_destroy_empty_helpers ⇒ Object
- #cache_key ⇒ Object
- #has_frequency? ⇒ Boolean
-
#name_sym ⇒ Object
todo validates validate placement.
- #reload ⇒ Object
- #reset_cache ⇒ Object
- #running_view_count ⇒ Object
- #show_now_basics?(use_time_limits = true) ⇒ Boolean
- #show_today_has_viewcounts?(current_view_count = nil) ⇒ Boolean
Instance Method Details
#add_one_viewcount ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 |
# File 'app/models/advert_selector/banner.rb', line 85 def add_one_viewcount unless self.target_view_count.nil? counter = running_view_count + 1 Rails.cache.write(cache_key, counter, :expires_in => 2.weeks) self[:running_view_count] = counter since_update = running_view_count_change.last - running_view_count_change.first self.save if since_update >= 500 || counter >= target_view_count end end |
#after_save_destroy_empty_helpers ⇒ Object
98 99 100 101 102 |
# File 'app/models/advert_selector/banner.rb', line 98 def after_save_destroy_empty_helpers helper_items.each do |hi| hi.destroy if hi.blank? end end |
#cache_key ⇒ Object
68 69 70 |
# File 'app/models/advert_selector/banner.rb', line 68 def cache_key "AdvertSelectorBanner_#{id}" end |
#has_frequency? ⇒ Boolean
30 31 32 |
# File 'app/models/advert_selector/banner.rb', line 30 def has_frequency? !frequency.nil? && frequency > 0 end |
#name_sym ⇒ Object
todo validates validate placement
26 27 28 |
# File 'app/models/advert_selector/banner.rb', line 26 def name_sym @name_sym ||= name.downcase.to_sym end |
#reload ⇒ Object
63 64 65 66 |
# File 'app/models/advert_selector/banner.rb', line 63 def reload super reset_cache end |
#reset_cache ⇒ Object
79 80 81 82 83 |
# File 'app/models/advert_selector/banner.rb', line 79 def reset_cache Rails.cache.write(cache_key, nil, :expires_in => 2.weeks) @show_now_today_target = nil @name_sym = nil end |
#running_view_count ⇒ Object
72 73 74 75 76 77 |
# File 'app/models/advert_selector/banner.rb', line 72 def running_view_count counter = Rails.cache.read(cache_key).to_i counter = 0 if $advert_selector_avoid_cache counter = self[:running_view_count] if counter < self[:running_view_count] counter end |
#show_now_basics?(use_time_limits = true) ⇒ Boolean
56 57 58 59 60 61 |
# File 'app/models/advert_selector/banner.rb', line 56 def show_now_basics?(use_time_limits = true) confirmed? && (!use_time_limits || start_time.nil? || start_time < Time.now) && (!use_time_limits || end_time.nil? || Time.now < end_time) && show_today_has_viewcounts? end |
#show_today_has_viewcounts?(current_view_count = nil) ⇒ Boolean
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/models/advert_selector/banner.rb', line 34 def show_today_has_viewcounts?(current_view_count = nil) return true if target_view_count.nil? current_view_count = running_view_count if current_view_count.nil? return false if current_view_count >= target_view_count return true if fast_mode? @show_now_today_target ||= if target_view_count.nil? || end_time.nil? || end_time < 24.hours.from_now true else total_hours = ((end_time - start_time - 12.hours)/1.hour).round hourly_view_count = target_view_count/total_hours hours_ending_now = ((Time.now.end_of_hour - start_time)/1.hour).ceil hours_ending_now * hourly_view_count end @show_now_today_target == true || current_view_count < @show_now_today_target end |