Class: Rack::MswalletRack

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/mswallet_rack.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ MswalletRack

Returns a new instance of MswalletRack.



4
5
6
7
# File 'lib/rack/mswallet_rack.rb', line 4

def initialize(app)
  @app = app
  @parameters = {}
end

Instance Method Details

#append_parameter_separator(url) ⇒ Object



39
40
# File 'lib/rack/mswallet_rack.rb', line 39

def append_parameter_separator url
end

#call(env) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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) ⇒ Object



42
43
# File 'lib/rack/mswallet_rack.rb', line 42

def each(&block)
end

#find_id(path) ⇒ Object



45
46
47
48
# 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