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
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