Sha256: 36aed9e2869e1acb307130b0c8349a69f52020d2f83f1f1a3732d8767d0b2dbb
Contents?: true
Size: 1.43 KB
Versions: 1
Compression:
Stored size: 1.43 KB
Contents
require "sinatra/base" require "uri" require "resolv" module Sinatra module Subdomain class << self attr_accessor :app, :subdomain end module Helpers def subdomain uri = URI.parse("http://#{request.env["HTTP_HOST"]}") return if Sinatra::Subdomain.ip_address?(uri.host) parts = uri.host.split(".") parts.pop(settings.tld_size + 1) parts.empty? ? nil : parts.join(".") end end def subdomain(expected_subdomain = true, &block) ::Sinatra::Subdomain.tap do |mod| mod.app = self mod.subdomain = expected_subdomain end yield ::Sinatra::Subdomain.tap do |mod| mod.app = nil mod.subdomain = nil end end def self.ip_address?(host) host =~ Resolv::IPv4::Regex || host =~ Resolv::IPv6::Regex end def self.route_added(verb, path, block) return unless subdomain && app routes = app.instance_variable_get("@routes") last_route = routes[verb].last expected = subdomain condition = app.instance_eval do generate_method :subdomain do if expected == true subdomain != nil else subdomain.to_s == expected.to_s end end end last_route[2] << condition end def self.registered(app) app.helpers Sinatra::Subdomain::Helpers app.set :tld_size, 1 end end register Subdomain end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sinatra-subdomain-0.2.0 | lib/sinatra/subdomain.rb |