Sha256: a6bd1ffe55ca482285f1b25b758f1f3a581453fb5026112061267a260e2517a0
Contents?: true
Size: 1.91 KB
Versions: 1
Compression:
Stored size: 1.91 KB
Contents
# frozen_string_literal: true # == Schema Information # # Table name: site_activities # # id :integer not null, primary key # title :string(255) # value :float default(0.0) # min_value :float # max_value :float # is_increment :boolean # sort_order :integer default(1) # last_value :integer # last_date :date # created_at :datetime # updated_at :datetime # parent_id :integer # is_procent :boolean # class SiteActivity < ActiveRecord::Base validates :title, :value, :min_value, :max_value, presence: true validates :value, :min_value, :max_value, numericality: true validate :min_max belongs_to :parent, class_name: 'SiteActivity', foreign_key: 'parent_id' scope :sorted, -> { order("#{quoted_table_name}.sort_order") } def displayed_value return (value * parent.displayed_value).to_i unless parent_id.nil? return value if current_day? Rails.cache.fetch(cached_key('displayed_value'), expires_in: 2.hours) do result = if is_increment increment_value else n = value % 1 > 0 ? 10.0 : 1 ((min_value * n).to_i..(max_value * n).to_i).to_a.sample / n end result end end def view _value = format('%g', displayed_value) is_procent ? "#{_value}%" : _value end def increment_value last = last_value || value if last_date.nil? || !current_day?(last_date) self.last_date = Date.current self.last_value = last + (min_value.to_i..max_value.to_i).to_a.sample save(validate: false) return last_value else last end end def current_day?(date = nil) date ||= created_at date.to_date == Date.current end private def min_max errors.add(:max_value, :invalid) if min_value > max_value end def cached_key(value) ['site_activity', id.to_s, value.to_s].join(':') end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
translation_cms-0.1.5 | app/models/site_activity.rb |