mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-05-03 03:00:14 -04:00
The ultraviolet gem doesn't work with Ruby 1.9, instead we need to use the updated 'spox' versions of ultraviolet and plist: spox-ultraviolet, spox-plist This new rake task: install_coffeescript_syntax loads either the original gems if running Ruby < 1.9 or the 'spox' versions if running on Ruby >= 1.9. Load CoffeeScript.tmLanguage directly from the github repo for the TextMate bundle. Parse and write the yaml-format syntax file directly into the correct location in the ultraviolet gem.
109 lines
3.2 KiB
Ruby
109 lines
3.2 KiB
Ruby
require 'rubygems'
|
|
require 'erb'
|
|
require 'fileutils'
|
|
require 'rake/testtask'
|
|
require 'json'
|
|
|
|
def load_gem(gem_name)
|
|
begin
|
|
gem gem_name
|
|
rescue Gem::LoadError
|
|
raise "Could not load the #{gem_name} gem. Install it with `gem install #{gem_name}`."
|
|
end
|
|
end
|
|
|
|
desc "Build the documentation page"
|
|
task :doc do
|
|
source = 'documentation/index.html.erb'
|
|
child = fork { exec "bin/coffee -bcw -o documentation/js documentation/coffee/*.coffee" }
|
|
at_exit { Process.kill("INT", child) }
|
|
Signal.trap("INT") { exit }
|
|
loop do
|
|
mtime = File.stat(source).mtime
|
|
if !@mtime || mtime > @mtime
|
|
rendered = ERB.new(File.read(source)).result(binding)
|
|
File.open('index.html', 'w+') {|f| f.write(rendered) }
|
|
end
|
|
@mtime = mtime
|
|
sleep 1
|
|
end
|
|
end
|
|
|
|
desc "install coffeescript.syntax into ultraviolet gem"
|
|
task :install_coffeescript_syntax do
|
|
require 'yaml'
|
|
require 'open-uri'
|
|
if RUBY_VERSION.to_f >= 1.9
|
|
ultraviolet_gem = 'spox-ultraviolet'
|
|
plist_gem = 'spox-plist'
|
|
else
|
|
ultraviolet_gem = 'ultraviolet'
|
|
plist_gem = 'plist'
|
|
end
|
|
load_gem ultraviolet_gem
|
|
load_gem plist_gem
|
|
require 'plist'
|
|
cs_tm_language_url = "https://raw.github.com/jashkenas/coffee-script-tmbundle/master/Syntaxes/CoffeeScript.tmLanguage"
|
|
cs_tm_language = open(cs_tm_language_url).read
|
|
result = Plist::parse_xml(cs_tm_language)
|
|
ultraviolet_coffeescript_syntax_path = File.join(Gem.loaded_specs[ultraviolet_gem].full_gem_path, "syntax", "coffeescript.yaml")
|
|
File.open(ultraviolet_coffeescript_syntax_path, "w" ) { |f| YAML.dump( result, f ) }
|
|
puts "wrote coffeescript syntax to: #{ultraviolet_coffeescript_syntax_path}"
|
|
end
|
|
|
|
desc "Build coffee-script-source gem"
|
|
task :gem do
|
|
require 'rubygems'
|
|
require 'rubygems/package'
|
|
|
|
gemspec = Gem::Specification.new do |s|
|
|
s.name = 'coffee-script-source'
|
|
s.version = JSON.parse(File.read('package.json'))["version"]
|
|
s.date = Time.now.strftime("%Y-%m-%d")
|
|
|
|
s.homepage = "http://jashkenas.github.com/coffee-script/"
|
|
s.summary = "The CoffeeScript Compiler"
|
|
s.description = <<-EOS
|
|
CoffeeScript is a little language that compiles into JavaScript.
|
|
Underneath all of those embarrassing braces and semicolons,
|
|
JavaScript has always had a gorgeous object model at its heart.
|
|
CoffeeScript is an attempt to expose the good parts of JavaScript
|
|
in a simple way.
|
|
EOS
|
|
|
|
s.files = [
|
|
'lib/coffee_script/coffee-script.js',
|
|
'lib/coffee_script/source.rb'
|
|
]
|
|
|
|
s.authors = ['Jeremy Ashkenas']
|
|
s.email = 'jashkenas@gmail.com'
|
|
s.rubyforge_project = 'coffee-script-source'
|
|
end
|
|
|
|
file = File.open("coffee-script-source.gem", "w")
|
|
Gem::Package.open(file, 'w') do |pkg|
|
|
pkg.metadata = gemspec.to_yaml
|
|
|
|
path = "lib/coffee_script/source.rb"
|
|
contents = <<-ERUBY
|
|
module CoffeeScript
|
|
module Source
|
|
def self.bundled_path
|
|
File.expand_path("../coffee-script.js", __FILE__)
|
|
end
|
|
end
|
|
end
|
|
ERUBY
|
|
pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
|
|
tar_io.write(contents)
|
|
end
|
|
|
|
contents = File.read("extras/coffee-script.js")
|
|
path = "lib/coffee_script/coffee-script.js"
|
|
pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
|
|
tar_io.write(contents)
|
|
end
|
|
end
|
|
end
|