class Rack::MswalletRack

Public Class Methods

new(app) click to toggle source
# File lib/rack/mswallet_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/mswallet_rack.rb, line 39
def append_parameter_separator url
end
call(env) click to toggle source
# File lib/rack/mswallet_rack.rb, line 9
def call(env)
  @parameters['authToken'] = env['HTTP_AUTHENTICATIONTOKEN'] if env['HTTP_AUTHENTICATIONTOKEN']
  @parameters.merge!(Rack::Utils.parse_nested_query(env['QUERY_STRING']))
  @parameters['path'] = env['PATH_INFO']
  serial_number = find_id @parameters['path']
  @parameters['serialNumber'] = serial_number
  if serial_number
    handler = Mswallet.custom_rack_handler || Mswallet::Handler
    response = handler.update(@parameters)
    header = {'Content-Type' => 'application/vnd.ms.wallet',
              'Content-Disposition' => 'attachment',
              'filename' => "#{serial_number}.mswallet"}
    case response
      when Mswallet::Pass
        [200, header, [response.stream.string]]
      when String
        [200, header, [response]]
      when File, StringIO, Zip::OutputStream, Tempfile
        [200, header, [response.read]]
      when false
        [304, {}, {}]
      else
        [401, {}, {}]
    end

  else
    @app.call env
  end
end
each(&block) click to toggle source
# File lib/rack/mswallet_rack.rb, line 42
def each(&block)
end
find_id(path) click to toggle source
# File lib/rack/mswallet_rack.rb, line 45
def find_id(path)
  return nil unless path =~ /\/#{Mswallet::RACK_API_VERSION}\/walletitems\/([\d\w]+)/
  $1
end