diff --git a/hyde.rb b/hyde.rb index 416e249..32bf320 100644 --- a/hyde.rb +++ b/hyde.rb @@ -109,6 +109,7 @@ module Hyde @response = response @handles = {} @indexlist = [] + @vars = {} end attr_reader :request attr_reader :response @@ -116,6 +117,7 @@ module Hyde attr_accessor :path attr_accessor :handles attr_accessor :indexlist + attr_accessor :vars end # Context object with safe path encapsulation @@ -126,6 +128,8 @@ module Hyde @request = request.request @response = request.response @handles = request.handles + @indexlist = request.indexlist + @vars = request.vars end undef :path= undef :filepath= @@ -237,8 +241,12 @@ module Hyde def handle(code, &block) @handles[code] = block end + def preprocess(&block) + @preprocessor = block + end def match(request) raise Exception, "Not permitted" if @lock_methods + self.instance_exec request, &@preprocessor if @preprocessor if match? request.path then match_path = normalize_input(request.path).match(@path) next_path = match_path[0] diff --git a/test_combined.rb b/test_combined.rb index 79babb8..863f29a 100644 --- a/test_combined.rb +++ b/test_combined.rb @@ -15,9 +15,18 @@ server = Hyde::Server.new Port: 8000 do end end path "uploads" do + preprocess { |request| puts request.inspect } index ["index.html"] - serve "**/*.md", match_full_path: true - serve ["*.html","**/*.html"], match_full_path: true + serve ["**/*.md","*.html","**/*.html"], match_full_path: true + end + path ["vars_1","vars_2"] do + preprocess do |request| + request.vars["flag"] = "yes" if request.filepath.match "vars_1" + end + serve "view" do |ctx| + ctx.response.body = "Flag: #{ctx.vars["flag"]}" + ctx.response['Content-Type'] = "text/plain" + end end end