Refactor of standalone build tasks; Better templating of the core runner.html and the example SpecRunner.html

This commit is contained in:
Davis W. Frank
2011-06-15 09:15:40 -07:00
parent e59171935f
commit 6b2e45eab5
10 changed files with 189 additions and 61 deletions

View File

@@ -2,7 +2,6 @@ desc "Build core jasmine.js"
task :build_dist => [:lint, :write_version_file] do
puts 'Building Jasmine distribution from source'
require 'pp'
concat_into('lib/jasmine.js') { core_sources + version_source_file }
concat_into('lib/jasmine-html.js') { html_sources }

View File

@@ -1,16 +1,43 @@
require 'ostruct'
desc "build the browser spec runner.html based on current tree"
desc "build the browser spec for Jasmine core based on current tree"
task :build_runner_html do
template = Tilt.new('spec/templates/runner.html.erb')
File.open('spec/runner.html', 'w+') do |f|
scope = OpenStruct.new(:source_tags => other_source_file_tags,
scope = OpenStruct.new(:title => "Jasmine Spec Runner: Jasmine Core",
:favicon => favicon,
:jasmine_tags => core_jasmine_tags,
:source_tags => other_source_file_tags,
:spec_file_tags => spec_file_tags)
f << template.render(scope)
end
end
def favicon
<<HTML
<link rel="shortcut icon" type="image/png" href="../images/jasmine_favicon.png">
HTML
end
def core_jasmine_tags
tags = %Q{<link href="../lib/jasmine.css" rel="stylesheet"/>}
tags << "\n "
tags << script_tags_for("../lib/jasmine.js")
tags << "\n "
tags << undefined_catch
tags
end
def undefined_catch
<<HTML
<script type="text/javascript">
// yes, really keep this here to keep us honest, but only for jasmine's own runner! [xw]
undefined = "diz be undefined yo";
</script>
HTML
end
def other_source_file_tags
other_files = html_sources + console_sources
script_tags_for other_files.collect { |f| "../#{f}" }
@@ -21,12 +48,3 @@ def spec_file_tags
script_tags_for spec_files.collect { |f| "../#{f}" }
end
def script_tags_for(files)
script_tag = Tilt::new('spec/templates/script_tag.html.erb')
files.inject([]) do |tags, f|
scope = OpenStruct.new :file => f
tags << script_tag.render(scope)
tags
end.join("\n ")
end

View File

@@ -34,4 +34,14 @@ end
def version_hash
@version ||= JSON.parse(File.new("src/version.json").read);
end
def script_tags_for(files)
script_tag = Tilt::new('spec/templates/script_tag.html.erb')
files.inject([]) do |tags, f|
scope = OpenStruct.new :file => f
tags << script_tag.render(scope)
tags
end.join("\n ")
end

View File

@@ -1,34 +1,84 @@
desc "Build example project"
task :build_example_project => :need_pages_submodule do
require 'ostruct'
desc "Build standalone distribution, block if zip of current version"
task :standalone_safe => [:require_pages_submodule, :protect_current_dist_zip, :build_spec_runner_html]
desc "Build standalone distribution"
task :standalone => [:require_pages_submodule, :build_spec_runner_html] do
require 'tmpdir'
temp_dir = File.join(Dir.tmpdir, 'jasmine-standalone-project')
zip_root = File.join(Dir.tmpdir, "zip_root")
temp_dir = File.join(zip_root, "jasmine-standalone-#{version_string}")
puts "Building Example Project in #{temp_dir}"
FileUtils.rm_r temp_dir if File.exist?(temp_dir)
Dir.mkdir(temp_dir)
FileUtils.mkdir_p(temp_dir)
root = File.expand_path(File.dirname(__FILE__))
root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
FileUtils.cp_r File.join(root, 'example/.'), File.join(temp_dir)
substitute_jasmine_version(File.join(temp_dir, "SpecRunner.html"))
lib_dir = File.join(temp_dir, "lib/jasmine-#{jasmine_version}")
lib_dir = File.join(temp_dir, "lib/jasmine-#{version_string}")
FileUtils.mkdir_p(lib_dir)
{
"lib/jasmine.js" => "jasmine.js",
"lib/jasmine-html.js" => "jasmine-html.js",
"src/html/jasmine.css" => "jasmine.css",
"MIT.LICENSE" => "MIT.LICENSE"
"images/jasmine_favicon.png" => "jasmine_favicon.png",
"lib/jasmine.js" => "jasmine.js",
"lib/jasmine-html.js" => "jasmine-html.js",
"src/html/jasmine.css" => "jasmine.css",
"MIT.LICENSE" => "MIT.LICENSE"
}.each_pair do |src, dest|
FileUtils.cp(File.join(root, src), File.join(lib_dir, dest))
end
dist_dir = File.join(root, 'pages/downloads')
zip_file_name = File.join(dist_dir, "jasmine-standalone-#{jasmine_version}.zip")
zip_file_name = File.join(dist_dir, "jasmine-standalone-#{version_string}.zip")
puts "Zipping Example Project and moving to #{zip_file_name}"
FileUtils.mkdir(dist_dir) unless File.exist?(dist_dir)
if File.exist?(zip_file_name)
puts "WARNING!!! #{zip_file_name} already exists!"
FileUtils.rm(zip_file_name)
end
exec "cd #{temp_dir} && zip -r #{zip_file_name} . -x .[a-zA-Z0-9]*"
exec "cd #{zip_root} && zip #{zip_file_name} -r . -x .[a-zA-Z0-9]*"
end
desc "Build SpecRunner.html for standalone dist example project"
task :build_spec_runner_html do
template = Tilt.new('spec/templates/runner.html.erb')
File.open('example/SpecRunner.html', 'w+') do |f|
scope = OpenStruct.new(:title => "Jasmine Spec Runner",
:favicon => example_favicon,
:jasmine_tags => example_jasmine_tags,
:source_tags => example_source_tags,
:spec_file_tags => example_spec_tags)
f << template.render(scope)
end
end
def example_path
"lib/jasmine-#{version_string}"
end
def example_favicon
<<HTML
<link rel="shortcut icon" type="image/png" href="#{example_path}/jasmine_favicon.png">
HTML
end
def example_jasmine_tags
tags = %Q{<link rel="stylesheet" type="text/css" href="#{example_path}/jasmine.css">}
tags << "\n "
tags << script_tags_for(["#{example_path}/jasmine.js", "#{example_path}/jasmine-html.js"])
tags
end
def example_source_tags
script_tags_for ['spec/SpecHelper.js', 'spec/PlayerSpec.js']
end
def example_spec_tags
script_tags_for ['src/Player.js', 'src/Song.js']
end
task :protect_current_dist_zip do
root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
dist_dir = File.join(root, 'pages/downloads')
zip_file_name = File.join(dist_dir, "jasmine-standalone-#{version_string}.zip")
raise "STOPPED: #{zip_file_name} already exists" if File.exist?(zip_file_name)
end