Sha256: 0f4ad1f031e7f66a21b6e828e08920f950e29d7b6023cab12696972a2bd1f0d4

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

module Bullet
  module Notification
    class Base
      attr_accessor :notifier, :url
      attr_reader :base_class, :associations, :path

      def initialize(base_class, association_or_associations, path = nil)
        @base_class = base_class
        @associations = association_or_associations.is_a?(Array) ?  association_or_associations : [association_or_associations]
        @path = path
      end

      def title
        raise NoMethodError.new('no method title defined')
      end

      def body
        raise NoMethodError.new('no method body defined')
      end

      def call_stack_messages
        ''
      end

      def whoami
        @user ||= ENV['USER'].presence || (`whoami`.chomp rescue '')
        if @user.present?
          "user: #{@user}"
        else
          ''
        end
      end

      def body_with_caller
        "#{body}\n#{call_stack_messages}\n"
      end

      def notify_inline
        self.notifier.inline_notify(notification_data)
      end

      def notify_out_of_channel
        self.notifier.out_of_channel_notify(notification_data)
      end

      def short_notice
        [whoami.presence, url, title, body].compact.join('  ')
      end

      def notification_data
        {
          :user => whoami,
          :url => url,
          :title => title,
          :body => body_with_caller,
        }
      end

      def eql?(other)
        self.class == other.class && klazz_associations_str == other.klazz_associations_str
      end

      def hash
        [self.class, klazz_associations_str].hash
      end

      protected
        def klazz_associations_str
          "  #{@base_class} => [#{@associations.map(&:inspect).join(', '.freeze)}]"
        end

        def associations_str
          ":includes => #{@associations.map{ |a| a.to_s.to_sym unless a.is_a? Hash }.inspect}"
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bullet-5.6.1 lib/bullet/notification/base.rb