Author: djspiewak
Date: Tue Jun 23 00:01:31 2009
New Revision: 787458

URL: http://svn.apache.org/viewvc?rev=787458&view=rev
Log:
Added generic shell API

Added:
    buildr/trunk/lib/buildr/scala/shell.rb
    buildr/trunk/lib/buildr/shell.rb
Modified:
    buildr/trunk/lib/buildr/scala.rb

Modified: buildr/trunk/lib/buildr/scala.rb
URL: 
http://svn.apache.org/viewvc/buildr/trunk/lib/buildr/scala.rb?rev=787458&r1=787457&r2=787458&view=diff
==============================================================================
--- buildr/trunk/lib/buildr/scala.rb (original)
+++ buildr/trunk/lib/buildr/scala.rb Tue Jun 23 00:01:31 2009
@@ -20,6 +20,7 @@
 require 'buildr/scala/compiler'
 require 'buildr/scala/tests'
 require 'buildr/scala/bdd'
+require 'buildr/scala/shell'
 
 Object::Scala = Buildr::Scala
 

Added: buildr/trunk/lib/buildr/scala/shell.rb
URL: 
http://svn.apache.org/viewvc/buildr/trunk/lib/buildr/scala/shell.rb?rev=787458&view=auto
==============================================================================
--- buildr/trunk/lib/buildr/scala/shell.rb (added)
+++ buildr/trunk/lib/buildr/scala/shell.rb Tue Jun 23 00:01:31 2009
@@ -0,0 +1,34 @@
+require 'buildr/shell'
+
+module Buildr
+  module Scala
+    class Shell
+      attr_reader :project
+      
+      class << self
+        def lang
+          :scala
+        end
+      end
+      
+      def initialize(project)
+        @project = project
+      end
+      
+      def launch
+        Scalac.scala_home or fail 'Are we forgetting something? SCALA_HOME not 
set.'
+        
+        cp = (project.compile.dependencies + 
Scalac.dependencies).join(File::PATH_SEPARATOR) +
+          project.path_to(:target, :classes)
+        
+        cmd_args = " -Denv.classpath='#{cp}'"
+        cmd_args += ' -classpath'
+        cmd_args += " '#{cp}'"
+        
+        system(File.expand_path('bin/scala', Scalac.scala_home) + cmd_args)
+      end
+    end
+  end
+end
+
+Buildr::ShellProviders << Buildr::Scala::Shell

Added: buildr/trunk/lib/buildr/shell.rb
URL: 
http://svn.apache.org/viewvc/buildr/trunk/lib/buildr/shell.rb?rev=787458&view=auto
==============================================================================
--- buildr/trunk/lib/buildr/shell.rb (added)
+++ buildr/trunk/lib/buildr/shell.rb Tue Jun 23 00:01:31 2009
@@ -0,0 +1,43 @@
+module Buildr
+  module ShellProviders
+    
+    class << self
+      def add(p)
+        @providers ||= {}
+        @providers[p.lang] = p
+      end
+      alias :<< :add
+      
+      def providers
+        @providers ||= {}
+      end
+    end
+  end
+  
+  module Shell
+    include Extension
+    
+    first_time do
+      Project.local_task 'shell'
+    end
+    
+    after_define do |project|
+      project.task 'shell' => :compile do
+        lang = project.compile.language
+        trace "Launching shell based on language #{lang}"
+        
+        p = ShellProviders.providers[lang]
+        
+        if p
+          p.new(project).launch
+        else
+          fail "No shell provider defined for language #{lang}"
+        end
+      end
+    end
+  end
+  
+  class Project
+    include Shell
+  end
+end


Reply via email to