module Urbanairship::ClassMethods

Constants

VERSION

Attributes

application_key[RW]
application_secret[RW]
logger[RW]
master_secret[RW]
provider[RW]
request_timeout[RW]

Public Instance Methods

add_tag(tag) click to toggle source
# File lib/urbanairship.rb, line 69
def add_tag(tag)
  do_request(:put, "/api/tags/#{tag}", :authenticate_with => :master_secret, :content_type => 'text/plain')
end
create_schedule(schedule) click to toggle source

Schedules API

# File lib/urbanairship.rb, line 38
def create_schedule(schedule)
  do_request(:post, "/api/schedules/", :body => JSON.dump(schedule), :authenticate_with => :master_secret)
end
create_segment(segment) click to toggle source
# File lib/urbanairship.rb, line 111
def create_segment(segment)
  do_request(:post, "/api/segments", :body => JSON.dump(segment), :authenticate_with => :master_secret)
end
delete_schedule(id) click to toggle source
# File lib/urbanairship.rb, line 54
def delete_schedule(id)
  do_request(:delete, "/api/schedules/#{id}", :authenticate_with => :master_secret)
end
delete_segment(id) click to toggle source
# File lib/urbanairship.rb, line 123
def delete_segment(id)
  do_request(:delete, "/api/segments/#{id}", :authenticate_with => :master_secret)
end
device_info(device_token, options = {}) click to toggle source
# File lib/urbanairship.rb, line 32
def device_info(device_token, options = {})
  path = device_tokens_end_point(options[:provider] || @provider)
  do_request(:get, "/api/#{path}/#{device_token}", :authenticate_with => :application_secret)
end
device_tokens() click to toggle source
# File lib/urbanairship.rb, line 94
def device_tokens
  do_request(:get, "/api/device_tokens/", :authenticate_with => :master_secret)
end
device_tokens_count() click to toggle source
# File lib/urbanairship.rb, line 98
def device_tokens_count
  do_request(:get, "/api/device_tokens/count/", :authenticate_with => :master_secret)
end
feedback(time) click to toggle source
# File lib/urbanairship.rb, line 102
def feedback(time)
  do_request(:get, "/api/device_tokens/feedback/?since=#{format_time(time)}", :authenticate_with => :master_secret)
end
push(options = {}) click to toggle source

Push API

# File lib/urbanairship.rb, line 59
def push(options = {})
  body = JSON.dump(parse_push_options(options.dup))
  do_request(:post, "/api/push/", :body => body, :authenticate_with => :master_secret)
end
register_device(device_token, options = {}) click to toggle source
# File lib/urbanairship.rb, line 20
def register_device(device_token, options = {})
  body = JSON.dump(parse_register_options(options))

  path = device_tokens_end_point(options[:provider] || @provider)
  do_request(:put, "/api/#{path}/#{device_token}", :body => body, :authenticate_with => :application_secret)
end
remove_tag(tag) click to toggle source
# File lib/urbanairship.rb, line 73
def remove_tag(tag)
  do_request(:delete, "/api/tags/#{tag}", :authenticate_with => :master_secret)
end
schedule(id) click to toggle source
# File lib/urbanairship.rb, line 46
def schedule(id)
  do_request(:get, "/api/schedules/#{id}", :authenticate_with => :master_secret)
end
schedules() click to toggle source
# File lib/urbanairship.rb, line 42
def schedules
  quest(:get, "/api/schedules/", :authenticate_with => :master_secret)
end
segment(id) click to toggle source
# File lib/urbanairship.rb, line 115
def segment(id)
  do_request(:get, "/api/segments/#{id}", :authenticate_with => :master_secret)
end
segments() click to toggle source

Segments API

# File lib/urbanairship.rb, line 107
def segments
  do_request(:get, "/api/segments", :authenticate_with => :master_secret)
end
tag_device(params) click to toggle source
# File lib/urbanairship.rb, line 77
def tag_device(params)
  provider_field = device_tokens_end_point(params[:provider] || @provider).to_sym
  body = JSON.dump({provider_field => {:add => [params[:device_token]]}})
  do_request(:post, "/api/tags/#{params[:tag]}", :body => body, :authenticate_with => :master_secret)
end
tags() click to toggle source

Tags API

# File lib/urbanairship.rb, line 65
def tags
  do_request(:get, "/api/tags/", :authenticate_with => :master_secret)
end
tags_for_device(device_token) click to toggle source

Device Tokens API

# File lib/urbanairship.rb, line 90
def tags_for_device(device_token)
  do_request(:get, "/api/device_tokens/#{device_token}/tags/", :authenticate_with => :master_secret)
end
unregister_device(device_token, options = {}) click to toggle source
# File lib/urbanairship.rb, line 27
def unregister_device(device_token, options = {})
  path = device_tokens_end_point(options[:provider] || @provider)
  do_request(:delete, "/api/#{path}/#{device_token}", :authenticate_with => :application_secret)
end
untag_device(params) click to toggle source
# File lib/urbanairship.rb, line 83
def untag_device(params)
  provider_field = device_tokens_end_point(params[:provider] || @provider).to_sym
  body = JSON.dump({provider_field => {:remove => [params[:device_token]]}})
  do_request(:post, "/api/tags/#{params[:tag]}", :body => body, :authenticate_with => :master_secret)
end
update_schedule(id, schedule) click to toggle source
# File lib/urbanairship.rb, line 50
def update_schedule(id, schedule)
  do_request(:put, "/api/schedules/#{id}", :body => JSON.dump(schedule), :authenticate_with => :master_secret)
end
update_segment(id, segment) click to toggle source
# File lib/urbanairship.rb, line 119
def update_segment(id, segment)
  do_request(:put, "/api/segments/#{id}", :body => JSON.dump(segment), :authenticate_with => :master_secret)
end

Private Instance Methods

device_tokens_end_point(provider) click to toggle source
# File lib/urbanairship.rb, line 190
def device_tokens_end_point(provider)
  provider == :android || provider == 'android' ? 'apids' : 'device_tokens'
end
do_request(http_method, path, options = {}) click to toggle source
# File lib/urbanairship.rb, line 129
def do_request(http_method, path, options = {})
  verify_configuration_values(:application_key, options[:authenticate_with])

  klass = Net::HTTP.const_get(http_method.to_s.capitalize)

  request = klass.new(path)
  request.basic_auth @application_key, instance_variable_get("@#{options[:authenticate_with]}")
  request.add_field "Content-Type", options[:content_type] || "application/json"
  request.body = options[:body] if options[:body]
  request["Accept"] = "application/vnd.urbanairship+json; version=#{VERSION};"

  Timer.timeout(request_timeout) do
    start_time = Time.now
    response = http_client.request(request)
    log_request_and_response(request, response, Time.now - start_time)
    Urbanairship::Response.wrap(response)
  end
rescue Timeout::Error
  unless logger.nil?
    logger.error "Urbanairship request timed out after #{request_timeout} seconds: [#{http_method} #{request.path} #{request.body}]"
  end
  Urbanairship::Response.wrap(nil, :body => {'error' => 'Request timeout'}, :code => '503')
end
format_time(time) click to toggle source
# File lib/urbanairship.rb, line 181
def format_time(time)
  time = Time.parse(time) if time.is_a?(String)
  time.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
end
http_client() click to toggle source
# File lib/urbanairship.rb, line 158
def http_client
  Net::HTTP.new("go.urbanairship.com", 443).tap{|http| http.use_ssl = true}
end
log_request_and_response(request, response, time) click to toggle source
# File lib/urbanairship.rb, line 172
def log_request_and_response(request, response, time)
  return if logger.nil?

  time = (time * 1000).to_i
  http_method = request.class.to_s.split('::')[-1]
  logger.info "Urbanairship (#{time}ms): [#{http_method} #{request.path}, #{request.body}], [#{response.code}, #{response.body}]"
  logger.flush if logger.respond_to?(:flush)
end
parse_push_options(hash = {}) click to toggle source
# File lib/urbanairship.rb, line 167
def parse_push_options(hash = {})
  hash[:aliases] = hash[:aliases].map{|a| a.to_s} unless hash[:aliases].nil?
  hash
end
parse_register_options(hash = {}) click to toggle source
# File lib/urbanairship.rb, line 162
def parse_register_options(hash = {})
  hash[:alias] = hash[:alias].to_s unless hash[:alias].nil?
  hash
end
verify_configuration_values(*symbols) click to toggle source
# File lib/urbanairship.rb, line 153
def verify_configuration_values(*symbols)
  absent_values = symbols.select{|symbol| instance_variable_get("@#{symbol}").nil? }
  raise("Must configure #{absent_values.join(", ")} before making this request.") unless absent_values.empty?
end