Sha256: 16e2f58f3d55a9e2f440e4fe5f8e73343722c45f730389225ba7cc62f5709f0c

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

module Gossiper
  class Notification < ActiveRecord::Base

    STATUSES = %w(pending delivered)

    serialize :data, JSON

    validates :kind, presence: true
    belongs_to :user, polymorphic: true

    def status
      read_attribute(:status).presence || STATUSES.first
    end

    def data
      read_attribute(:data).presence || {}
    end

    def deliver
      mail.deliver
      update_delivered_at!
    end

    def deliver!
      mail.deliver!
      update_delivered_at!
    end

    def kind=(value)
      value = value.present? ? value.parameterize.underscore : nil
      write_attribute(:kind, value)
    end

    def config
      begin
        klass = "Notifications::#{kind.classify}Notification"
        klass.constantize.new(self)
      rescue NameError
        klass = Gossiper.configuration.default_notification_config_class
        klass.constantize.new(self)
      end
    end

    def method_missing(method, *args, &block)
      STATUSES.each do |status|
        if method.to_s == "#{status}?"
          return self.status == status
        end
      end
      super(method, *args, &block)
    end

    protected
      def mail
        Gossiper::Mailer.mail_for(self)
      end

      def update_delivered_at!
        self.delivered_at = Time.now
        save!
      end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gossiper-0.3.5 app/models/gossiper/notification.rb