class Rack::PassbookRack
Public Class Methods
new(app)
click to toggle source
# File lib/rack/passbook_rack.rb, line 4 def initialize(app) @app = app @parameters = {} end
Public Instance Methods
append_parameter_separator(url)
click to toggle source
# File lib/rack/passbook_rack.rb, line 45 def append_parameter_separator url end
call(env)
click to toggle source
# File lib/rack/passbook_rack.rb, line 9 def call(env) @parameters['authToken'] = env['HTTP_AUTHORIZATION'].gsub(/ApplePass /,'') if env['HTTP_AUTHORIZATION'] @parameters.merge!(Rack::Utils.parse_nested_query(env['QUERY_STRING'])) method_and_params = find_method env['PATH_INFO'] if method_and_params case method_and_params[:method] when 'device_register_delete' if env['REQUEST_METHOD'] == 'POST' [Passbook::PassbookNotification. register_pass(method_and_params[:params].merge! JSON.parse(env['rack.input'].read 1000))[:status], {}, ['']] elsif env['REQUEST_METHOD'] == 'DELETE' [Passbook::PassbookNotification.unregister_pass(method_and_params[:params])[:status], {}, {}] end when 'passes_for_device' response = Passbook::PassbookNotification.passes_for_device(method_and_params[:params]) [response ? 200 : 204, {}, [response.to_json]] when 'latest_pass' response = Passbook::PassbookNotification.latest_pass(method_and_params[:params]) if response[:status] == 200 [200, {'Content-Type' => 'application/vnd.apple.pkpass', 'Content-Disposition' => 'attachment', 'filename' => "#{method_and_params[:params]['serialNumber']}.pkpass","last-modified" => response[:last_modified]}, [response[:latest_pass]]] else [response[:status], {}, {}] end when 'log' Passbook::PassbookNotification.passbook_log JSON.parse(env['rack.input'].read 10000) [200, {}, {}] else end else @app.call env end end
each(&block)
click to toggle source
# File lib/rack/passbook_rack.rb, line 48 def each(&block) end
find_method(path)
click to toggle source
# File lib/rack/passbook_rack.rb, line 52 def find_method(path) parsed_path = path.split '/' url_beginning = parsed_path.index 'v1' if url_beginning args_length = parsed_path.size - url_beginning if (parsed_path[url_beginning + 1 ] == 'devices') and (parsed_path[url_beginning + 3 ] == 'registrations') if args_length == 6 return method_and_params_hash 'device_register_delete', path elsif args_length == 5 return method_and_params_hash 'passes_for_device', path end elsif parsed_path[url_beginning + 1] == 'passes' and args_length == 4 return method_and_params_hash 'latest_pass', path elsif parsed_path[url_beginning + 1] == 'log' and args_length == 2 return {:method => 'log'} end end return nil end
Private Instance Methods
method_and_params_hash(method, path)
click to toggle source
# File lib/rack/passbook_rack.rb, line 77 def method_and_params_hash(method, path) parsed_path = path.split '/' url_beginning = parsed_path.index 'v1' if method == 'latest_pass' {:method => 'latest_pass', :params => @parameters.merge!({'passTypeIdentifier' => parsed_path[url_beginning + 2], 'serialNumber' => parsed_path[url_beginning + 3]})} else return_hash = {:method => method, :params => @parameters.merge!({'deviceLibraryIdentifier' => parsed_path[url_beginning + 2], 'passTypeIdentifier' => parsed_path[url_beginning + 4]})} if method == 'device_register_delete' return_hash[:params]['serialNumber'] = parsed_path[url_beginning + 5] end return_hash end end