module BaseModel
  extend ActiveSupport::Concern

  included do
    scope :recent,      -> { order(id: :desc) }
    scope :exclude_ids, -> (ids) { where.not(id: ids.map(&:to_i)) }
    scope :by_ids,      -> (ids) { where(id: ids) unless ids.blank? }
    scope :by_week,     -> { where("created_at > ?", 7.days.ago.utc) }

    delegate :url_helpers, to: 'Rails.application.routes'
  end

  # FIXME: 需要原子化操作
  def push(hash)
    hash.each_key do |key|
      self.send("#{key}_will_change!")
      old_val = self[key] || []
      old_val << hash[key].to_i
      old_val.uniq!
      update_attributes(key => old_val)
    end
  end

  # FIXME: 需要原子化操作
  def pull(hash)
    hash.each_key do |key|
      self.send("#{key}_will_change!")
      old_val = self[key]
      return true if old_val.blank?
      old_val.delete(hash[key].to_i)
      update_attributes(key => old_val)
    end
  end
end