module Nyara # options: # # [env] environment, default is +'development'+ # [port] listen port number # [workers] number of workers # [host] host name used in `url_to` helper # [root] root path, default is +Dir.pwd+ # [views] views (templates) directory, relative to root, default is +"views"+ # [public] static files directory, relative to root, default is +"public"+ # [x_send_file] header field name for X-Sendfile or X-Accel-Redirect, see Nyara::Controller#send_file for details # [session] see Nyara::Session for sub options # [prefer_erb] use ERB instead of ERubis for +.erb+ templates Config = ConfigHash.new class << Config # clear all settings def reset clear Route.clear end # init and check configures def init self['env'] ||= 'development' n = (self['port'] || 3000).to_i assert n >= 0 && n <= 65535 self['port'] = n n = (self['workers'] || self['worker'] || ((CpuCounter.count + 1)/ 2)).to_i assert n > 0 && n < 1000 self['workers'] = n unless self['root'] set :root, Dir.pwd end self['root'] = File.expand_path self['root'] self['views'] = project_path(self['views'] || 'views') self['public'] = project_path(self['public'] || 'public') if self['public'] map '/', PublicController end end # get absoute path under project path
# if +strict+, return nil if path is not under the dir def project_path path, strict=true path_under 'root', path, strict end # get absoute path under public path
# if +strict+, return nil if path is not under the dir def public_path path, strict=true path_under 'public', path, strict end # get absoute path under views path
# if +strict+, return nil if path is not under the dir def views_path path, strict=true path_under 'views', path, strict end # get path under the dir configured +Nyara.config[key]+
# if +strict+, return nil if path is not under the dir def path_under key, path, strict=true dir = self[key] path = File.expand_path File.join(dir, path) if !strict or path.start_with?(dir) path end end # pass requests under a prefix to a controller def map prefix, controller Route.register_controller prefix, controller end # get environment def env self['env'].to_s end def development? e = env e.empty? or e == 'development' end def production? env == 'production' end def test? env == 'test' end alias set []= alias get [] def assert expr # :nodoc: raise ArgumentError, "expect #{expr.inspect} to be true", caller[1..-1] unless expr end # todo env aware configure def configure &blk instance_eval &blk end end end def configure *xs, &blk Nyara::Config.configure *xs, &blk end configure do set 'env', 'development' set 'views', 'views' set 'public', 'public' end