Sha256: 5965ebb695c9c7e048c06c302a32f1da5b169ed56a13c8df5b4fff7c1a919efd

Contents?: true

Size: 1.1 KB

Versions: 3

Compression:

Stored size: 1.1 KB

Contents

module Gossiper
  module Concerns
    module Models
      module Notification
        extend ActiveSupport::Concern

        STATUSES = %w(pending delivered)

        included do
          include Gossiper::Concerns::Models::EmailSettings
          serialize :data, JSON
          belongs_to :user, polymorphic: true
        end

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

        def data
          read_attribute(:data).presence || {}
        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

        module ClassMethods
          def require_user
            include Gossiper::Concerns::Models::UserNotification
          end
        end

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

        private

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

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gossiper-0.5.2 lib/gossiper/concerns/models/notification.rb
gossiper-0.5.1 lib/gossiper/concerns/models/notification.rb
gossiper-0.5.0 lib/gossiper/concerns/models/notification.rb