Sha256: ebfa61ffda4ffa0f9274ebd4c7e8095e8ce98771724f77c339f48794e0832e94

Contents?: true

Size: 1.51 KB

Versions: 6

Compression:

Stored size: 1.51 KB

Contents

module Rpush
  def self.reflect
    yield reflections if block_given?
  end

  def self.reflections
    @reflections ||= Reflections.new
  end

  class Reflections
    class NoSuchReflectionError < StandardError; end

    REFLECTIONS = [
      :apns_feedback, :notification_enqueued, :notification_delivered,
      :notification_failed, :notification_will_retry, :gcm_delivered_to_recipient,
      :gcm_failed_to_recipient, :gcm_canonical_id, :gcm_invalid_registration_id,
      :error, :adm_canonical_id, :adm_failed_to_recipient,
      :tcp_connection_lost, :ssl_certificate_will_expire, :ssl_certificate_revoked,
      :notification_id_will_retry, :notification_id_failed
    ]

    DEPRECATIONS = {}

    REFLECTIONS.each do |reflection|
      class_eval(<<-RUBY, __FILE__, __LINE__)
        def #{reflection}(*args, &blk)
          raise "block required" unless block_given?
          reflections[:#{reflection}] = blk
        end
      RUBY
    end

    def __dispatch(reflection, *args)
      reflection = reflection.to_sym

      unless REFLECTIONS.include?(reflection)
        fail NoSuchReflectionError, reflection
      end

      if DEPRECATIONS.key?(reflection)
        replacement, removal_version = DEPRECATIONS[reflection]
        Rpush::Deprecation.warn("#{reflection} is deprecated and will be removed in version #{removal_version}. Use #{replacement} instead.")
      end

      reflections[reflection].call(*args) if reflections[reflection]
    end

    private

    def reflections
      @reflections ||= {}
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rpush-2.2.0-java lib/rpush/reflection.rb
rpush-2.2.0 lib/rpush/reflection.rb
rpush-2.1.0-java lib/rpush/reflection.rb
rpush-2.1.0 lib/rpush/reflection.rb
rpush-2.0.1-java lib/rpush/reflection.rb
rpush-2.0.1 lib/rpush/reflection.rb