Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rack: How do you store the URL as a variable?

Tags:

ruby

rack

I am writing a simple static Rack app. Check out the config.ru code below:

use Rack::Static, 
  :urls => ["/elements", "/img", "/pages", "/users", "/css", "/js"],
  :root => "archive"


map '/' do
  run Proc.new { |env|
    [
      200, 
      {
        'Content-Type'  => 'text/html', 
        'Cache-Control' => 'public, max-age=6400' 
      },
      File.open('archive/splash.html', File::RDONLY)
    ]
  }
end

map '/pages/search.html' do
  run Proc.new { |env|
    [
      200, 
      {
        'Content-Type'  => 'text/html', 
        'Cache-Control' => 'public, max-age=6400' 
      },
      File.open('archive/pages/search.html', File::RDONLY)
    ]
  }
end

map '/pages/user.html' do
  run Proc.new { |env|
    [
      200, 
      {
        'Content-Type'  => 'text/html', 
        'Cache-Control' => 'public, max-age=6400' 
      },
      File.open('archive/pages/user.html', File::RDONLY)
    ]
  }
end

# Each map section is repeated for each HTML page served

I'd like to simplify this by storing the URL as variable and creating one map section that says

map url do
  run Proc.new { |env|
    [
      200, 
      {
        'Content-Type'  => 'text/html', 
        'Cache-Control' => 'public, max-age=6400' 
      },
      File.open('archive' + url, File::RDONLY)
    ]
  }
end

How can I correctly set this url variable?

like image 758
Eric Baldwin Avatar asked Nov 05 '12 02:11

Eric Baldwin


1 Answers

How about:

static_page_mappings = {
  '/'                  => 'archive/splash.html',
  '/pages/search.html' => 'archive/pages/search.html'
  '/pages/user.html'   => 'archive/pages/user.html',
}

static_page_mappings.each do |req, file|
  map req do 
    run Proc.new { |env|
      [
        200, 
        {
          'Content-Type'  => 'text/html', 
          'Cache-Control' => 'public, max-age=6400',
        },
        File.open(file, File::RDONLY)
      ]
    }
  end
end
like image 105
pje Avatar answered Nov 15 '22 07:11

pje