Sha256: cbaa87c9b11a69559f4da9d50b7de01ec78ce6ca9fb5a1ca4a900574adea53e3
Contents?: true
Size: 913 Bytes
Versions: 1
Compression:
Stored size: 913 Bytes
Contents
require 'geoip_city' require 'json' module Rack::Geoip # Implements Rack's middleware interface and provides the geoip # lookup service class Lookup DEFAULT = {:path => '/geoip/lookup', :db => 'GeoLiteCity.dat'} def initialize(app, options={}) @app, @options = app, DEFAULT.merge(options) @db = GeoIPCity::Database.new(@options[:db]) end def call(env) dup._call(env) end def _call(env) if env['PATH_INFO'] == @options[:path] request = Rack::Request.new(env) if request.params['ip'] && result=@db.look_up(request.params['ip']) [200, {'Content-Type' => 'application/json'}, result.to_json] else [404, {'Content-Type' => 'text/plain'}, "Example usage: #{env['rack.url_scheme']}://#{env['HTTP_HOST']}#{env['PATH_INFO']}?ip=8.8.8.8"] end else @app.call(env) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rack-geoip-0.1.1 | lib/rack/geoip/lookup.rb |