class Rack::RemoveBsChar

rack middleware to remove `0x08`(`b`). `0x08` is easily inserted in japanese FEP of Mac OSX.

Public Class Methods

new(app) click to toggle source
# File lib/rack/remove_bs_char.rb, line 5
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/remove_bs_char.rb, line 9
def call(env)
  # form_params
  unless env["REQUEST_METHOD"] == "GET" || env["REQUEST_METHOD"] == "HEAD"
    env["rack.input"] = StringIO.new(parse_query(env["rack.input"].read))
    env["CONTENT_LENGTH"] = env["rack.input"].length.to_s
  end
  # query_params
  env["QUERY_STRING"] = parse_query(env["QUERY_STRING"])

  @app.call(env)
end

Private Instance Methods

parse_query(str) click to toggle source
# File lib/rack/remove_bs_char.rb, line 23
def parse_query(str)
  return nil unless str

  new_array = []
  str.split("&").each do |param_pair|
    k, v = param_pair.split("=")
    k = remove_bs_char(k) if k
    v = remove_bs_char(v) if v
    new_array << "#{k}=#{v}" if k
  end

  new_array.join("&")
end
remove_bs_char(str) click to toggle source
# File lib/rack/remove_bs_char.rb, line 37
def remove_bs_char(str)
  ::Rack::Utils.escape(::Rack::Utils.unescape(str).delete("\b"))
end