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