ecl1pse/spree_flash_sales

View on GitHub
app/models/spree/flash_sale.rb

Summary

Maintainability
A
0 mins
Test Coverage
class Spree::FlashSale < ActiveRecord::Base
  belongs_to :saleable, polymorphic: true
  has_one :image, as: :viewable, dependent: :destroy, class_name: "Spree::Image"

  validates :name, presence: true
  validates :end_date, presence: true
  validates :start_date, presence: true
  validates :saleable_id, presence: true
  validates :saleable_type, presence: true
  serialize :product_sorting, Array
  # attr_accessible :active, :end_date, :name, :permalink, :start_date, :saleable_id, :saleable_type, :saleable_name, :attachment, :position

  attr_accessor :attachment

  scope :live, lambda { where("start_date <= :start_date AND end_date >= :end_date AND active = :active ", {start_date: DateTime.now.in_time_zone, end_date: DateTime.now.in_time_zone, active: true}) }

  def live?
    return false if !self.active?
    self.start_date.in_time_zone <= DateTime.now.in_time_zone && self.end_date.in_time_zone >= DateTime.now.in_time_zone
  end

  def attachment=(attachment)
    self.image.destroy if self.image.present?
    Spree::Image.create(viewable_type: "Spree::FlashSale", viewable_id: self.id, attachment: attachment)
  end

  def to_param
    "#{id}-#{name.parameterize}"
  end

  def taxon?
    self.saleable_type == "Spree::Taxon"
  end

  def product?
    self.saleable_type == "Spree::Product"
  end

  def saleable_name
    saleable.try(:name)
  end

  def saleable_name=(name)
    self.saleable = self.saleable_type.constantize.find_by_name(name) if name.present?
  end
end