diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2012-01-17 13:54:04 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2012-01-17 13:54:04 +0100 |
commit | 4ede655abcd1fd3a0e7981759720a4243a744c88 (patch) | |
tree | ea2573fb1605cfbac84f93db4e8374a52351b04c | |
parent | 641e342d797b0f22bd0496ea460b9ac87f10d24a (diff) | |
download | zorglub-4ede655abcd1fd3a0e7981759720a4243a744c88.zip zorglub-4ede655abcd1fd3a0e7981759720a4243a744c88.tar.gz |
App swallows Config
-rw-r--r-- | lib/zorglub.rb | 1 | ||||
-rw-r--r-- | lib/zorglub/app.rb | 66 | ||||
-rw-r--r-- | lib/zorglub/config.rb | 82 | ||||
-rw-r--r-- | lib/zorglub/engines/file.rb | 2 | ||||
-rw-r--r-- | lib/zorglub/engines/haml.rb | 10 | ||||
-rw-r--r-- | lib/zorglub/node.rb | 46 | ||||
-rw-r--r-- | lib/zorglub/session.rb | 17 | ||||
-rw-r--r-- | spec/node_spec.rb | 19 | ||||
-rw-r--r-- | spec/spec_helper.rb | 24 |
9 files changed, 128 insertions, 139 deletions
diff --git a/lib/zorglub.rb b/lib/zorglub.rb index 7ae2395..233fd44 100644 --- a/lib/zorglub.rb +++ b/lib/zorglub.rb @@ -1,7 +1,6 @@ #! /usr/bin/env ruby # -*- coding: UTF-8 -*- # -require 'zorglub/config' require 'zorglub/node' require 'zorglub/app' # diff --git a/lib/zorglub/app.rb b/lib/zorglub/app.rb index fa4ff6b..2be2f6b 100644 --- a/lib/zorglub/app.rb +++ b/lib/zorglub/app.rb @@ -9,10 +9,33 @@ module Zorglub def initialize map={}, &block super @map = map + @engines_cache = { } + @options = { + :debug => false, + :root => '.', + :layout => 'default', + :view_dir => 'view', + :layout_dir => 'layout', + :static_dir => 'static', + :engine => nil, + :engines_cache_enabled => true, + :engines => { }, + :haml_options => { + :format => :html5, + :ugly => false, + :encoding => 'utf-8' + }, + :session_options => { + :session_on => false, + :session_key => 'zorglub.sid', + :session_secret => 'session-secret-secret', + :session_sid_len => 64, + } + } instance_eval &block if block_given? remap @map - @engines_cache = { } end + # attr_reader :engines_cache # def map location, object @@ -40,6 +63,47 @@ module Zorglub @map.dup end # + # OPTIONS @options + # + def opt sym + @options[sym] + end + # + def opt! sym, val + @options[sym] = val + end + # + def register_engine! name, ext, proc + return unless name + if ext.nil? or ext.empty? + x = nil + else + x = (ext[0]=='.' ? (ext.length==1 ? nil : ext) : '.'+ext) + end + @options[:engines][name]=[ proc, x ] + end + # + def engine_proc_ext engine, ext + p,x = @options[:engines][engine] + return [nil, ''] if p.nil? + [ p, ((ext.nil? or ext.empty?) ? x : ext ) ] + end + # + def view_base_path + p = @options[:view_path] + ( p.nil? ? File.join(@options[:root], @options[:view_dir]) : p ) + end + # + def layout_base_path + p = @options[:layout_path] + ( p.nil? ? File.join(@options[:root], @options[:layout_dir]) : p ) + end + # + def static_base_path + p = @options[:static_path] + ( p.nil? ? File.join(@options[:root], @options[:static_dir]) : p ) + end + # end # end diff --git a/lib/zorglub/config.rb b/lib/zorglub/config.rb deleted file mode 100644 index b7e5785..0000000 --- a/lib/zorglub/config.rb +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: UTF-8 -*- -# -module Zorglub - # - class Config - @options = { - :debug => false, - :root => '.', - :engine => nil, - :layout => 'default', - :view_dir => 'view', - :layout_dir => 'layout', - :static_dir => 'static', - :session_on => false, - :session_key => 'zorglub.sid', - :session_secret => 'session-secret-secret', - :session_sid_len => 64, - :engines_cache_enabled => true, - :haml_options => { - :format => :html5, - :ugly => false, - :encoding => 'utf-8' - } - # - } - @engines = { } - class << self - # - def [] k - @options[k] - end - # - def []= k, v - @options[k]=v - end - # - def view_base_path - p = @options[:view_path] - ( p.nil? ? File.join(@options[:root], @options[:view_dir]) : p ) - end - # - def layout_base_path - p = @options[:layout_path] - ( p.nil? ? File.join(@options[:root], @options[:layout_dir]) : p ) - end - # - def static_base_path - p = @options[:static_path] - ( p.nil? ? File.join(@options[:root], @options[:static_dir]) : p ) - end - # - def register_engine name, ext, proc - return unless name - if ext.nil? or ext.empty? - x = nil - else - x = (ext[0]=='.' ? (ext.length==1 ? nil : ext) : '.'+ext) - end - @engines[name]=[ proc, x ] - end - # - def engine_proc_ext engine, ext - p,x = @engines[engine] - return [nil, ''] if p.nil? - [ p, ((ext.nil? or ext.empty?) ? x : ext ) ] - end - # - end - # - def self.method_missing m, *args, &block - if m=~/(.*)=$/ - @options[$1.to_sym]=args[0] - else - @options[m.to_sym] - end - end - # - end - # -end -# -# EOF diff --git a/lib/zorglub/engines/file.rb b/lib/zorglub/engines/file.rb index fd9fe1e..75f6f30 100644 --- a/lib/zorglub/engines/file.rb +++ b/lib/zorglub/engines/file.rb @@ -15,6 +15,4 @@ module Zorglub end end # -Zorglub::Config.register_engine :file, nil, Zorglub::Engines::File.method(:proc) -# # EOF diff --git a/lib/zorglub/engines/haml.rb b/lib/zorglub/engines/haml.rb index 458f29a..9325d19 100644 --- a/lib/zorglub/engines/haml.rb +++ b/lib/zorglub/engines/haml.rb @@ -7,11 +7,11 @@ module Zorglub module Engines module Haml def self.proc path,obj - if Zorglub::Config.engines_cache_enabled - key = path.sub Zorglub::Config.root,'' - haml = obj.app.engines_cache[key] ||= ::Haml::Engine.new( ::File.open(path,'r'){|f| f.read }, Zorglub::Config.haml_options ) + if obj.app.opt(:engines_cache_enabled) + key = path.sub obj.app.opt(:root),'' + haml = obj.app.engines_cache[key] ||= ::Haml::Engine.new( ::File.open(path,'r'){|f| f.read }, obj.app.opt(:haml_options) ) else - haml = ::Haml::Engine.new( ::File.open(path,'r'){|f| f.read }, Zorglub::Config.haml_options ) + haml = ::Haml::Engine.new( ::File.open(path,'r'){|f| f.read }, obj.app.opt(:haml_options) ) end html = haml.render(obj) return html, 'text/html' @@ -20,6 +20,4 @@ module Zorglub end end # -Zorglub::Config.register_engine :haml, 'haml', Zorglub::Engines::Haml.method(:proc) -# # EOF diff --git a/lib/zorglub/node.rb b/lib/zorglub/node.rb index f889259..5a9aced 100644 --- a/lib/zorglub/node.rb +++ b/lib/zorglub/node.rb @@ -4,24 +4,36 @@ module Zorglub # class Node # + UNDEFINED=-1 + # # class level engine, layout, static, layout_base_path, view_base_path configuration # class << self # - attr_reader :engine, :layout, :static + attr_reader :static # def engine! engine @engine = engine end # + def engine + @engine = @app.opt(:engine) if @engine==UNDEFINED and @app + @engine + end + # def no_layout! - @layout = nil + layout! nil end # def layout! layout @layout = layout end # + def layout + @layout = @app.opt(:layout) if @layout==UNDEFINED and @app + @layout + end + # def static! val @static = ( (val==true or val==false) ? val : false ) end @@ -31,7 +43,7 @@ module Zorglub end # def layout_base_path - @layout_base_path ||= Config.layout_base_path + @layout_base_path ||= @app.layout_base_path end # def view_base_path! path @@ -39,7 +51,7 @@ module Zorglub end # def view_base_path - @view_base_path ||= Config.view_base_path + @view_base_path ||= @app.view_base_path end end # @@ -81,7 +93,7 @@ module Zorglub # def static return nil if not @options[:static] or @options[:view].nil? - File.join(Config.static_base_path, @options[:view])+ext + File.join(app.static_base_path, @options[:view])+ext end # def ext! ext @@ -203,8 +215,8 @@ module Zorglub class << self # def inherited sub - sub.engine! engine||(self==Zorglub::Node ? Config.engine : nil ) - sub.layout! layout||(self==Zorglub::Node ? Config.layout : nil ) + sub.engine! engine||(self==Zorglub::Node ? UNDEFINED : nil ) + sub.layout! layout||(self==Zorglub::Node ? UNDEFINED : nil ) sub.instance_variable_set :@inherited_vars, {} @inherited_vars.each do |s,v| sub.inherited_var s, *v end end @@ -212,7 +224,7 @@ module Zorglub def call env meth, *args = env['PATH_INFO'].sub(/^\//,'').split '/' meth||= 'index' - puts "=> #{meth}(#{args.join ','})" if Config.debug + puts "=> #{meth}(#{args.join ','})" if app.opt :debug node = self.new env, {:engine=>engine,:layout=>layout,:view=>r(meth),:method=>meth,:args=>args,:static=>static} return error_404 node if not node.respond_to? meth node.realize! @@ -226,7 +238,7 @@ module Zorglub end # def error_404 node - puts " !! method not found" if Config.debug + puts " !! method not found" if app.opt :debug resp = node.response resp.status = 404 resp['Content-Type'] = 'text/plain' @@ -280,12 +292,12 @@ module Zorglub def static_page! path if not File.exists? path compile_page! - Dir.mkdir Config.static_base_path + Dir.mkdir app.static_base_path Dir.mkdir File.dirname path File.open(path, 'w') {|f| f.write("@mime:"+@mime+"\n"); f.write(@content); } - puts " * cache file created : #{path}" if Config.debug + puts " * cache file created : #{path}" if app.opt :debug else - puts " * use cache file : #{path}" if Config.debug + puts " * use cache file : #{path}" if app.opt :debug content = File.open(path, 'r') {|f| f.read } @content = content.sub /^@mime:(.*)\n/,'' @mime = $1 @@ -293,12 +305,10 @@ module Zorglub end # def compile_page! - e, @options[:ext] = Config.engine_proc_ext @options[:engine], @options[:ext] - v, l = view, layout - if Config.debug - puts " * "+(File.exists?(l) ? 'use layout' : 'not found layout')+" : "+l - puts " * "+(File.exists?(v) ? 'use view ' : 'not found view ')+" : "+v - end + e, @options[:ext] = app.engine_proc_ext @options[:engine], @options[:ext] + v, l, debug = view, layout, app.opt(:debug) + puts " * "+(File.exists?(l) ? 'use layout' : 'not found layout')+" : "+l if debug + puts " * "+(File.exists?(v) ? 'use view ' : 'not found view ')+" : "+v if debug state (@options[:layout].nil? ? :partial : :view) @content, mime = e.call v, self if e and File.exists? v @mime = mime unless mime.nil? diff --git a/lib/zorglub/session.rb b/lib/zorglub/session.rb index 9e54a6b..7e91555 100644 --- a/lib/zorglub/session.rb +++ b/lib/zorglub/session.rb @@ -13,17 +13,18 @@ module Zorglub end # def session - @session ||= SessionHash.new @request, @response, Node.sessions + @session ||= SessionHash.new @request, @response, Node.sessions, app.opt(:session_options) end end # class SessionHash < Hash # - def initialize req, resp, sessions + def initialize req, resp, sessions, options @request = req @response = resp @sessions = sessions @sid = nil + @options = options super() end # @@ -46,7 +47,7 @@ module Zorglub # def clear load_data! -# @response.delete_cookie Zorglub::Config.session_key +# @response.delete_cookie @options[:session_key] # @sessions.delete @sid # @sid = nil super @@ -94,11 +95,11 @@ module Zorglub # def load_data! return if loaded? - if Zorglub::Config.session_on - sid = @request.cookies[Zorglub::Config.session_key] + if @options[:session_on] + sid = @request.cookies[@options[:session_key]] if sid.nil? sid = generate_sid! - @response.set_cookie Zorglub::Config.session_key, sid + @response.set_cookie @options[:session_key], sid end replace @sessions[sid] ||={} @sessions[sid] = self @@ -125,7 +126,7 @@ module Zorglub # SecureRandom is available since Ruby 1.8.7. # For Ruby versions earlier than that, you can require the uuidtools gem, # which has a drop-in replacement for SecureRandom. - def sid_algorithm; SecureRandom.hex(Zorglub::Config.session_sid_len); end + def sid_algorithm; SecureRandom.hex(@options[:session_sid_len]); end rescue LoadError require 'openssl' # Using OpenSSL::Random for generation, this is comparable in performance @@ -133,7 +134,7 @@ module Zorglub # have the same behaviour as the SecureRandom::hex method of the # uuidtools gem. def sid_algorithm - OpenSSL::Random.random_bytes(Zorglub::Config.session_sid_len / 2).unpack('H*')[0] + OpenSSL::Random.random_bytes(@options[:session_sid_len] / 2).unpack('H*')[0] end rescue LoadError # Digest::SHA2::hexdigest produces a string of length 64, although diff --git a/spec/node_spec.rb b/spec/node_spec.rb index 72230bc..98e7f99 100644 --- a/spec/node_spec.rb +++ b/spec/node_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' # def clean_static_path - static_base_path = Zorglub::Config.static_base_path + static_base_path = Node0.app.static_base_path Dir.glob( File.join(static_base_path,'**','*') ).each do |f| File.unlink f if File.file? f end Dir.glob( File.join(static_base_path,'*') ).each do |d| Dir.rmdir d end Dir.rmdir static_base_path if File.directory? static_base_path @@ -22,12 +22,11 @@ describe Zorglub do end # it "engine should return default Node's engine" do - Node0.engine.should == Zorglub::Config.engine - Node0.engine.should == Zorglub::Config[:engine] + Node0.engine.should == Node0.app.opt(:engine) end # it "layout should return default Node's layout" do - Node0.layout.should == Zorglub::Config.layout + Node0.layout.should == Node0.app.opt(:layout) end # it "engine should return class defined Node's engine" do @@ -85,8 +84,8 @@ describe Zorglub do r = Node0.my_call '/index' r.status.should == 200 h = YAML.load r.body[0] - ly = File.join Zorglub::Config.root, Zorglub::Config.layout_dir, Node0.layout - vu = File.join Zorglub::Config.root, Zorglub::Config.view_dir, Node0.r, 'index' + ly = File.join Node0.app.layout_base_path, Node0.layout + vu = File.join Node0.app.view_base_path, Node0.r, 'index' h[:path].should == ly h[:layout].should == ly h[:view].should == vu @@ -96,8 +95,8 @@ describe Zorglub do r = Node1.my_call '/index' r.status.should == 200 h = YAML.load r.body[0] - ly = File.join Zorglub::Config.root, Zorglub::Config.layout_dir, 'main.spec' - vu = File.join Zorglub::Config.root, Zorglub::Config.view_dir, Node1.r, 'index.spec' + ly = File.join Node1.app.layout_base_path, 'main.spec' + vu = File.join Node1.app.view_base_path, Node1.r, 'index.spec' h[:path].should == ly h[:layout].should == ly h[:view].should == vu @@ -236,13 +235,13 @@ describe Zorglub do it "view_base_path! should work" do r = Node7.my_call '/view_path' h = YAML.load r.body[0] - h[:view].should == File.join(Zorglub::Config.root, 'alt','do_render') + h[:view].should == File.join(Node7.app.opt(:root), 'alt','do_render') end # it "layout_base_path! should work" do r = Node7.my_call '/view_path' h = YAML.load r.body[0] - h[:layout].should == File.join(Zorglub::Config.root, 'alt','layout','default') + h[:layout].should == File.join(Node7.app.opt(:root), 'alt','layout','default') end # end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 78ce08f..660bd39 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -28,14 +28,7 @@ RENDER_PROC = Proc.new { |path,obj| raise Exception.new end } -Zorglub::Config.register_engine 'default', nil, HASH_PROC -Zorglub::Config.register_engine 'engine-1', 'spec', HASH_PROC -Zorglub::Config.register_engine 'engine-2', 'spec', HASH_PROC -Zorglub::Config.register_engine 'real', nil, RENDER_PROC -Zorglub::Config.register_engine 'static', nil, STATIC_PROC -# -Zorglub::Config[:engine] = 'default' -Zorglub::Config.root = File.join Dir.pwd, 'spec', 'data' +APP_ROOT = File.join Dir.pwd, 'spec', 'data' # class Zorglub::Node def self.my_call uri @@ -169,15 +162,23 @@ class Node6 < Zorglub::Node end # class Node7 < Zorglub::Node - layout_base_path! File.join Zorglub::Config.root, 'alt','layout' - view_base_path! File.join Zorglub::Config.root, 'alt' + layout_base_path! File.join APP_ROOT, 'alt','layout' + view_base_path! File.join APP_ROOT, 'alt' def view_path view! 'do_render' end end - # APP = Zorglub::App.new do + register_engine! :file, nil, Zorglub::Engines::File.method(:proc) + register_engine! :haml, 'haml', Zorglub::Engines::Haml.method(:proc) + register_engine! 'default', nil, HASH_PROC + register_engine! 'engine-1', 'spec', HASH_PROC + register_engine! 'engine-2', 'spec', HASH_PROC + register_engine! 'real', nil, RENDER_PROC + register_engine! 'static', nil, STATIC_PROC + opt! :root, APP_ROOT + opt! :engine, 'default' map '/node0', Node0 map '/node1', Node1 map '/node3', Node3 @@ -187,6 +188,7 @@ APP = Zorglub::App.new do map '/node7', Node7 map '/node8', Node8 end +# class Node2 map APP, '/node2' end |