class GCMMiddleware::CanonicalId

Constants

GCM_PATH
GCM_REGISTRATION_ID_KEY
GCM_RESULTS_KEY
ORIGINAL_ID_KEY

Attributes

has_saved_ids[R]
registration_ids[R]

Public Instance Methods

call(env) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 11
def call(env)
  save_ids(env.body) if should_save_ids?(env)

  @app.call(env).on_complete do |env|
    if should_inject_ids? env
      env.body = injected_response_body(env.body)
    end
  end
end

Private Instance Methods

has_registration_ids?() click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 55
def has_registration_ids?
  registration_ids && registration_ids.any?
end
injected_response_body(body) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 25
def injected_response_body(body)
  if body.is_a? Hash
    set_ids(body)
  else
    set_ids(JSON.parse(body)).to_json
  end
end
is_gcm_url?(url) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 67
def is_gcm_url?(url)
  url.path == GCM_PATH
end
is_success?(status) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 63
def is_success?(status)
  status == 200
end
parse(body) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 59
def parse(body)
  body.is_a?(String) ? JSON.parse(body) : body
end
save_ids(body) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 45
def save_ids(body)
  @registration_ids = parse(body).fetch(GCM_REGISTRATION_ID_KEY, [])
end
set_ids(body) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 33
def set_ids(body)
  body.tap do |b|
    b.fetch(GCM_RESULTS_KEY, []).each_with_index do |result, i|
      result[ORIGINAL_ID_KEY] = registration_ids[i]
    end
  end
end
should_inject_ids?(env) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 49
def should_inject_ids?(env)
  has_saved_ids &&
    is_success?(env.status) &&
    has_registration_ids?
end
should_save_ids?(env) click to toggle source
# File lib/gcm_middleware/canonical_id.rb, line 41
def should_save_ids?(env)
  @has_saved_ids = is_gcm_url?(env.url) && env.body
end