Sha256: 40ed444725525ebb2332ed2d1f7456d6e7fc323c80f2261a7f58390cda3f7348

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

require 'opal'
require 'opal/builder'
require 'fileutils'

module Opal
  class RakeTask
    include Rake::DSL if defined? Rake::DSL

    attr_accessor :name, :build_dir, :specs_dir, :files, :dependencies

    def initialize(namespace = nil)
      @project_dir = Dir.getwd

      @name         = File.basename(@project_dir)
      @build_dir    = 'build'
      @specs_dir    = 'spec'
      @files        = Dir['lib/**/*.{rb,js}']
      @dependencies = []

      yield self if block_given?

      define_tasks
    end

    def build_gem(name)
      out = File.join @build_dir, "#{ name }.js"
      puts " * #{out}"
      write_code Opal.build_gem(name), out
    rescue Gem::LoadError => e
      puts "  - Error: Could not find gem #{name}"
    end

    def write_code(code, out)
      FileUtils.mkdir_p File.dirname(out)
      File.open(out, 'w+') { |o| o.puts code }
    end

    def define_tasks
      desc "Build opal project"
      task 'opal:build' do
        out = File.join @build_dir, "#{ @name }.js"
        puts " * #{out}"
        write_code Opal.build_files(@files), out
      end

      desc "Build specs"
      task 'opal:spec' do
        out = File.join @build_dir, 'specs.js'
        puts " * #{out}"
        write_code Opal.build_files(@specs_dir), out
      end

      desc "Build dependencies"
      task 'opal:dependencies' do
        out = File.join @build_dir, 'opal.js'
        puts " * #{out}"
        write_code Opal.runtime, File.join(@build_dir, 'opal.js')

        @dependencies.each { |dep| build_gem dep }
      end

      desc "Build opal files, dependencies and specs"
      task :opal => %w(opal:build opal:dependencies opal:spec)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
opal-0.3.21 lib/opal/rake_task.rb