require"thor"require"thor/group"require'rack/test'SHARED_SERVER=Middleman.serverSHARED_SERVER.set:environment,:buildmoduleMiddlemanmoduleThorActionsdeftilt_template(source,*args,&block)config=args.last.is_a?(Hash)?args.pop:{}destination=args.first||source# source = File.expand_path(find_in_source_paths(source.to_s))context=instance_eval('binding')request_path=destination.sub(/^#{SHARED_SERVER.build_dir}/,"")begindestination,request_page=SHARED_SERVER.reroute_builder(destination,request_path)create_filedestination,nil,configdoMiddleman::Builder.shared_rack.get(request_path.gsub(/\s/,"%20"))Middleman::Builder.shared_rack.last_response.bodyendrescueendendendclassBuilder<Thor::GroupincludeThor::ActionsincludeMiddleman::ThorActionsdefself.shared_rack@shared_rack||=beginmock=::Rack::MockSession.new(SHARED_SERVER)sess=::Rack::Test::Session.new(mock)sess.get("/")sessendendclass_option:relative,:type=>:boolean,:aliases=>"-r",:default=>false,:desc=>'Override the config.rb file and force relative urls'definitialize(*args)superifoptions.has_key?("relative")&&options["relative"]SHARED_SERVER.activate:relative_assetsendenddefsource_paths@source_paths||=[SHARED_SERVER.root]enddefbuild_all_filesself.class.shared_rackactionDirectory.new(self,SHARED_SERVER.views,SHARED_SERVER.build_dir,{:force=>true})SHARED_SERVER.proxied_paths.eachdo|url,proxy|tilt_template(url.gsub(/^\//,"#{SHARED_SERVER.build_dir}/"),{:force=>true})endend@@hooks={}defself.after_run(name,&block)@@hooks[name]=blockenddefrun_hooks@@hooks.eachdo|name,proc|instance_eval(&proc)endSHARED_SERVER.after_build_callbacks.eachdo|proc|instance_eval(&proc)endendendclassDirectory<::Thor::Actions::EmptyDirectoryattr_reader:sourcedefinitialize(base,source,destination=nil,config={},&block)@source=File.expand_path(base.find_in_source_paths(source.to_s))@block=blocksuper(base,destination,{:recursive=>true}.merge(config))enddefinvoke!base.empty_directorygiven_destination,configexecute!enddefrevoke!execute!endprotecteddefhandle_directory(lookup,&block)lookup=File.join(lookup,'*')results=Dir[lookup].sortdo|a,b|simple_a=a.gsub(SHARED_SERVER.root+"/",'').gsub(SHARED_SERVER.views+"/",'')simple_b=b.gsub(SHARED_SERVER.root+"/",'').gsub(SHARED_SERVER.views+"/",'')a_dir=simple_a.split("/").firstb_dir=simple_b.split("/").firstifa_dir==SHARED_SERVER.images_dir-1elsifb_dir==SHARED_SERVER.images_dir1else0endendresults=results.select(&block)ifblock_given?results.eachdo|file_source|ifFile.directory?(file_source)handle_directory(file_source)nextend# Skip partials prefixed with an underscorenextunlessfile_source.gsub(SHARED_SERVER.root,'').split('/').select{|p|p[0,1]=='_'}.empty?file_extension=File.extname(file_source)file_destination=File.join(given_destination,file_source.gsub(source,'.'))file_destination.gsub!('/./','/')handled_by_tilt=::Tilt.mappings.has_key?(file_extension.gsub(/^\./,""))ifhandled_by_tiltfile_destination.gsub!(file_extension,"")enddestination=base.tilt_template(file_source,file_destination,config,&@block)endenddefexecute!handle_directory(source)do|path|file_name=path.gsub(SHARED_SERVER.views+"/","")iffile_name=="layouts"falseelsiffile_name.include?("layout.")&&file_name.split(".").length==2falseelsetrueendendendendend