sprout 0.7.183-darwin → 0.7.191-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/sprout +1 -1
- data/doc/Generator +3 -3
- data/lib/sprout.rb +9 -12
- data/lib/sprout/commands/generate.rb +1 -6
- data/lib/sprout/generator.rb +2 -2
- data/lib/sprout/generator/base_mixins.rb +102 -108
- data/lib/sprout/generator/named_base.rb +1 -1
- data/lib/sprout/process_runner.rb +40 -4
- data/lib/sprout/project_model.rb +62 -33
- data/lib/sprout/tasks/sftp_task.rb +3 -0
- data/lib/sprout/tasks/ssh_task.rb +3 -0
- data/lib/sprout/tasks/tool_task.rb +3 -2
- data/lib/sprout/user.rb +10 -2
- data/lib/sprout/version.rb +1 -1
- data/rakefile.rb +6 -2
- metadata +20 -5
    
        data/bin/sprout
    CHANGED
    
    | @@ -118,7 +118,7 @@ begin | |
| 118 118 | 
             
                end
         | 
| 119 119 | 
             
                # Try to run the generator against user home and existing gems first
         | 
| 120 120 | 
             
                Sprout::Sprout.generate(sprout_name, 'project', [project_name])
         | 
| 121 | 
            -
            rescue  | 
| 121 | 
            +
            rescue RubiGen::GeneratorError
         | 
| 122 122 | 
             
                # Failing that, try to download a sprout gem by name
         | 
| 123 123 | 
             
                sprout(sprout_name, sprout_requirements)
         | 
| 124 124 | 
             
                # Then try again....
         | 
    
        data/doc/Generator
    CHANGED
    
    | @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            A SproutGenerator is a set of specifically configured folders and files that have been placed in a particular, expected location on disk.
         | 
| 2 | 
            -
            The Sprout generator feature is a minor modification to the standard  | 
| 2 | 
            +
            The Sprout generator feature is a minor modification to the standard Rubigen generators.
         | 
| 3 3 |  | 
| 4 | 
            -
            Sprouts modifies the underlying  | 
| 4 | 
            +
            Sprouts modifies the underlying Rubigen Generator implementation in that we need support for multiple languages or technologies while Rubigen is able to simply expect that it's generating Ruby code. 
         | 
| 5 5 |  | 
| 6 | 
            -
            Generators can exist in multiple different locations on disk, to learn how to create a new generator, see the  | 
| 6 | 
            +
            Generators can exist in multiple different locations on disk, to learn how to create a new generator, see the Rubigen documentation[http://rubigen.rubyforge.org/].
         | 
| 7 7 |  | 
| 8 8 | 
             
            To use a new or existing generator, simply enter it's name from within a project after calling
         | 
| 9 9 | 
             
              script/generate
         | 
    
        data/lib/sprout.rb
    CHANGED
    
    | @@ -35,12 +35,14 @@ require 'sprout/tasks/tool_task' | |
| 35 35 | 
             
            require 'sprout/general_tasks'
         | 
| 36 36 |  | 
| 37 37 | 
             
            module Sprout
         | 
| 38 | 
            +
              SUDO_INSTALL_GEMS = 'false' == ENV['SUDO_INSTALL_GEMS'] ? false : true
         | 
| 39 | 
            +
             | 
| 38 40 | 
             
              class SproutError < StandardError #:nodoc:
         | 
| 39 41 | 
             
              end
         | 
| 40 42 |  | 
| 41 43 | 
             
              # Sprouts is an open-source, cross-platform project generation and configuration tool
         | 
| 42 44 | 
             
              # for ActionScript 2, ActionScript 3, Adobe AIR and Flex projects. It is built on top 
         | 
| 43 | 
            -
              # of Ruby Gems,  | 
| 45 | 
            +
              # of Ruby Gems, Rubigen Generators and is intended to work on any platform that Ruby runs
         | 
| 44 46 | 
             
              # on including specifically, Windows XP, Windows Vista, Cygwin, OS X and Linux.
         | 
| 45 47 | 
             
              #
         | 
| 46 48 | 
             
              # Sprouts can be separated into some core concepts as follows:
         | 
| @@ -122,8 +124,8 @@ module Sprout | |
| 122 124 | 
             
                # This Rakefile will usually be loaded by the referenced Generator, and it should have a configured ProjectModel
         | 
| 123 125 | 
             
                # defined in it.
         | 
| 124 126 | 
             
                def self.generate(sprout_name, generator_name, params, project_path=nil)
         | 
| 125 | 
            -
                   | 
| 126 | 
            -
                  generator =  | 
| 127 | 
            +
                  RubiGen::Base.use_sprout_sources!(sprout_name, project_path)
         | 
| 128 | 
            +
                  generator = RubiGen::Base.instance(generator_name, params)
         | 
| 127 129 | 
             
                  generator.command(:create).invoke!
         | 
| 128 130 | 
             
                end
         | 
| 129 131 |  | 
| @@ -134,7 +136,7 @@ module Sprout | |
| 134 136 | 
             
                  confirmation = false
         | 
| 135 137 | 
             
                  count = 0
         | 
| 136 138 | 
             
                  # For each sprout found, remove it!
         | 
| 137 | 
            -
                   | 
| 139 | 
            +
                  RubiGen::GemGeneratorSource.new().each_sprout do |sprout|
         | 
| 138 140 | 
             
                    count += 1
         | 
| 139 141 | 
             
                    command = "#{get_gem_preamble} uninstall -x -a -i -q #{sprout.name}"
         | 
| 140 142 |  | 
| @@ -178,7 +180,7 @@ module Sprout | |
| 178 180 | 
             
                  usr = User.new()
         | 
| 179 181 | 
             
                  if(!usr.is_a?(WinUser))
         | 
| 180 182 | 
             
                    # Everyone but Win and Cygwin users get 'sudo '
         | 
| 181 | 
            -
                    return "sudo gem"
         | 
| 183 | 
            +
                    return "#{SUDO_INSTALL_GEMS ? 'sudo ' : ''}gem"
         | 
| 182 184 | 
             
                  elsif(!usr.is_a?(CygwinUser))
         | 
| 183 185 | 
             
                    # We're in the DOS Shell
         | 
| 184 186 | 
             
                    return "ruby #{get_executable_from_path('gem')}"
         | 
| @@ -322,7 +324,7 @@ EOF | |
| 322 324 | 
             
                # This method will actually download and install the provided gem by +name+ and +requirements+ if
         | 
| 323 325 | 
             
                # it is not found locally on the system.
         | 
| 324 326 | 
             
                def self.find_gem_spec(name, requirements=nil, recursed=false)
         | 
| 325 | 
            -
                  specs = Gem::cache.search(/.*#{name}$/)
         | 
| 327 | 
            +
                  specs = Gem::cache.search(/.*#{name}$/).reverse # Found specs are returned in order from oldest to newest!?
         | 
| 326 328 | 
             
                  requirement = nil
         | 
| 327 329 | 
             
                  if(requirements)
         | 
| 328 330 | 
             
                    requirement = Gem::Requirement.new(requirements)
         | 
| @@ -344,10 +346,7 @@ EOF | |
| 344 346 | 
             
                    msg << " #{requirements}" if requirements
         | 
| 345 347 | 
             
                    msg << " from #{gem_sources.join(', ')} with it's dependencies"
         | 
| 346 348 | 
             
                    Log.puts msg
         | 
| 347 | 
            -
                    parts = []
         | 
| 348 | 
            -
                    parts << "ins"
         | 
| 349 | 
            -
                    parts << "-r"
         | 
| 350 | 
            -
                    parts << name
         | 
| 349 | 
            +
                    parts = [ 'ins', '-r', name ]
         | 
| 351 350 | 
             
                    # This url should be removed once released, released gems should be hosted from the rubyforge
         | 
| 352 351 | 
             
                    # project, and development gems will be hosted on our domain.
         | 
| 353 352 | 
             
                    parts << "--source #{gem_sources.join(' --source ')}" if(Log.debug || name.index('sprout-'))
         | 
| @@ -425,8 +424,6 @@ EOF | |
| 425 424 | 
             
                  return @@project_rakefile ||= nil
         | 
| 426 425 | 
             
                end
         | 
| 427 426 |  | 
| 428 | 
            -
                private
         | 
| 429 | 
            -
             | 
| 430 427 | 
             
                # Look in the provided +dir+ for files that meet the criteria to be a valid Rakefile.
         | 
| 431 428 | 
             
                def self.child_rakefile(dir)
         | 
| 432 429 | 
             
                  @@default_rakefiles.each do |file|
         | 
| @@ -1,14 +1,9 @@ | |
| 1 | 
            -
            # Shamelessly copied from Ruby On Rails
         | 
| 2 | 
            -
            # Which happens to share the same MIT license!
         | 
| 3 | 
            -
             | 
| 4 1 | 
             
            =begin
         | 
| 5 | 
            -
            #require "#{RAILS_ROOT}/config/environment"
         | 
| 6 2 | 
             
            require 'rubygems'
         | 
| 7 3 | 
             
            gem 'activesupport', '>= 2.0.2'
         | 
| 8 4 | 
             
            require 'generator'
         | 
| 9 | 
            -
            #require 'generator/scripts/generate'
         | 
| 10 5 | 
             
            require 'sprout'
         | 
| 11 6 |  | 
| 12 7 | 
             
            ARGV.shift if ['--help', '-h'].include?(ARGV[0])
         | 
| 13 | 
            -
             | 
| 8 | 
            +
            RubiGen::Scripts::Generate.new.run(ARGV)
         | 
| 14 9 | 
             
            =end
         | 
    
        data/lib/sprout/generator.rb
    CHANGED
    
    
| @@ -1,132 +1,126 @@ | |
| 1 | 
            +
            module RubiGen # :nodoc:[all]
         | 
| 1 2 |  | 
| 2 | 
            -
             | 
| 3 | 
            -
              module Generator # :nodoc:[all]
         | 
| 4 | 
            -
             | 
| 5 | 
            -
                class Base # :nodoc:[all]
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  def initialize(runtime_args, runtime_options = {})
         | 
| 8 | 
            -
                    @args = runtime_args
         | 
| 9 | 
            -
                    parse!(@args, runtime_options)
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                    # Derive source and destination paths.
         | 
| 12 | 
            -
                    @source_root = options[:source] || File.join(spec.path, 'templates')
         | 
| 13 | 
            -
                    
         | 
| 14 | 
            -
                    if options[:destination]
         | 
| 15 | 
            -
                      @destination_root = options[:destination]
         | 
| 16 | 
            -
                    # The following two lines were changed:
         | 
| 17 | 
            -
                    #elsif defined? ::RAILS_ROOT
         | 
| 18 | 
            -
                    #  @destination_root = ::RAILS_ROOT
         | 
| 19 | 
            -
                    elsif defined? Sprout::Sprout.project_path
         | 
| 20 | 
            -
                      @destination_root = Sprout::Sprout.project_path
         | 
| 21 | 
            -
                    else
         | 
| 22 | 
            -
                      @destination_root = Dir.pwd
         | 
| 23 | 
            -
                    end
         | 
| 3 | 
            +
              class Base # :nodoc:[all]
         | 
| 24 4 |  | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 5 | 
            +
                def initialize(runtime_args, runtime_options = {})
         | 
| 6 | 
            +
                  @args = runtime_args
         | 
| 7 | 
            +
                  parse!(@args, runtime_options)
         | 
| 27 8 |  | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 9 | 
            +
                  # Derive source and destination paths.
         | 
| 10 | 
            +
                  @source_root = options[:source] || File.join(spec.path, 'templates')
         | 
| 11 | 
            +
                  
         | 
| 12 | 
            +
                  if options[:destination]
         | 
| 13 | 
            +
                    @destination_root = options[:destination]
         | 
| 14 | 
            +
                  elsif defined? Sprout::Sprout.project_path
         | 
| 15 | 
            +
                    @destination_root = Sprout::Sprout.project_path
         | 
| 16 | 
            +
                  else
         | 
| 17 | 
            +
                    @destination_root = Dir.pwd
         | 
| 30 18 | 
             
                  end
         | 
| 31 19 |  | 
| 20 | 
            +
                  # Silence the logger if requested.
         | 
| 21 | 
            +
                  logger.quiet = options[:quiet]
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  # Raise usage error if help is requested.
         | 
| 24 | 
            +
                  usage if options[:help]
         | 
| 32 25 | 
             
                end
         | 
| 33 26 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
                # of gems named sprout-#{sprout_name}-bundle are selected.
         | 
| 36 | 
            -
                class GemGeneratorSource < AbstractGemSource # :nodoc:[all]
         | 
| 37 | 
            -
                  
         | 
| 38 | 
            -
                  def initialize(name=nil)
         | 
| 39 | 
            -
                    super()
         | 
| 40 | 
            -
                    @sprout_name = name
         | 
| 41 | 
            -
                  end
         | 
| 27 | 
            +
              end
         | 
| 42 28 |  | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
                    }
         | 
| 52 | 
            -
                  end
         | 
| 29 | 
            +
              # GemGeneratorSource hits the mines to quarry for generators.  The latest versions
         | 
| 30 | 
            +
              # of gems named sprout-#{sprout_name}-bundle are selected.
         | 
| 31 | 
            +
              class GemGeneratorSource < AbstractGemSource # :nodoc:[all]
         | 
| 32 | 
            +
                
         | 
| 33 | 
            +
                def initialize(name=nil)
         | 
| 34 | 
            +
                  super()
         | 
| 35 | 
            +
                  @sprout_name = name
         | 
| 36 | 
            +
                end
         | 
| 53 37 |  | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
                     | 
| 60 | 
            -
             | 
| 61 | 
            -
                    }
         | 
| 62 | 
            -
                   | 
| 38 | 
            +
                # Yield latest versions of generator gems.
         | 
| 39 | 
            +
                def each
         | 
| 40 | 
            +
                  Gem::cache.search(/sprout-*#{@sprout_name}-bundle$/).inject({}) { |latest, gem|
         | 
| 41 | 
            +
                    hem = latest[gem.name]
         | 
| 42 | 
            +
                    latest[gem.name] = gem if hem.nil? or gem.version > hem.version
         | 
| 43 | 
            +
                    latest
         | 
| 44 | 
            +
                  }.values.each { |gem|
         | 
| 45 | 
            +
                    yield Spec.new(gem.name.sub(/sprout-*#{@sprout_name}-bundle$/, ''), gem.full_gem_path, label)
         | 
| 46 | 
            +
                  }
         | 
| 63 47 | 
             
                end
         | 
| 64 48 |  | 
| 65 | 
            -
                 | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
                  
         | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 49 | 
            +
                def each_sprout
         | 
| 50 | 
            +
                  Gem::cache.search(/^sprout-.*/).inject({}) { |latest, gem|
         | 
| 51 | 
            +
                    hem = latest[gem.name]
         | 
| 52 | 
            +
                    latest[gem.name] = gem if hem.nil? or gem.version > hem.version
         | 
| 53 | 
            +
                    latest
         | 
| 54 | 
            +
                  }.values.each { |gem|
         | 
| 55 | 
            +
                    yield Spec.new(gem.name, gem.full_gem_path, label)
         | 
| 56 | 
            +
                  }
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
              end
         | 
| 75 59 |  | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 60 | 
            +
              # GemPathSource looks for generators within any RubyGem's 
         | 
| 61 | 
            +
              # /sprout/generators/<generator_name>/<generator_name>_generator.rb file.
         | 
| 62 | 
            +
              # It will only include generators from sprouts whose name includes
         | 
| 63 | 
            +
              # #{sprout_name}-bundle
         | 
| 64 | 
            +
              class GemPathSource < AbstractGemSource # :nodoc:[all]
         | 
| 65 | 
            +
                
         | 
| 66 | 
            +
                def initialize(name=nil)
         | 
| 67 | 
            +
                  super()
         | 
| 68 | 
            +
                  @sprout_name = name
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                # Yield each generator within generator subdirectories.
         | 
| 72 | 
            +
                def each
         | 
| 73 | 
            +
                  generator_full_paths.each do |generator|
         | 
| 74 | 
            +
                    yield Spec.new(File.basename(generator).sub(/_generator.rb$/, ''), File.dirname(generator), label)
         | 
| 81 75 | 
             
                  end
         | 
| 76 | 
            +
                end
         | 
| 82 77 |  | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
                            end
         | 
| 78 | 
            +
                private
         | 
| 79 | 
            +
                  def generator_full_paths
         | 
| 80 | 
            +
                    @generator_full_paths ||=
         | 
| 81 | 
            +
                      Gem::cache.inject({}) do |latest, name_gem|
         | 
| 82 | 
            +
                        name, gem = name_gem
         | 
| 83 | 
            +
                        hem = latest[gem.name]
         | 
| 84 | 
            +
                        latest[gem.name] = gem if hem.nil? or gem.version > hem.version
         | 
| 85 | 
            +
                        latest
         | 
| 86 | 
            +
                      end.values.inject([]) do |mem, gem|
         | 
| 87 | 
            +
                        Dir[gem.full_gem_path + '/lib/sprout/**/generators/**/*_generator.rb'].each do |generator|
         | 
| 88 | 
            +
                          if(@sprout_name && gem.name.match(/sprout-#{@sprout_name}-bundle/))
         | 
| 89 | 
            +
                            mem << generator
         | 
| 96 90 | 
             
                          end
         | 
| 97 | 
            -
                          mem
         | 
| 98 91 | 
             
                        end
         | 
| 99 | 
            -
             | 
| 100 | 
            -
                end
         | 
| 101 | 
            -
             | 
| 102 | 
            -
                module Lookup # :nodoc:[all]
         | 
| 103 | 
            -
                  module ClassMethods # :nodoc:[all]
         | 
| 104 | 
            -
                    
         | 
| 105 | 
            -
                    def use_sprout_sources!(sprout_name, project_path=nil)
         | 
| 106 | 
            -
                      reset_sources
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                      # Project-specific generator paths
         | 
| 109 | 
            -
                      if project_path
         | 
| 110 | 
            -
                        sources << PathSource.new(:project, "#{project_path}/generators")
         | 
| 111 | 
            -
                        sources << PathSource.new(:script, "#{project_path}/script/generators")
         | 
| 112 | 
            -
                        sources << PathSource.new(:vendor, "#{project_path}/vendor/generators")
         | 
| 92 | 
            +
                        mem
         | 
| 113 93 | 
             
                      end
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
              end
         | 
| 114 96 |  | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 97 | 
            +
              module Lookup # :nodoc:[all]
         | 
| 98 | 
            +
                module ClassMethods # :nodoc:[all]
         | 
| 99 | 
            +
                  
         | 
| 100 | 
            +
                  def use_sprout_sources!(sprout_name, project_path=nil)
         | 
| 101 | 
            +
                    reset_sources
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                    # Project-specific generator paths
         | 
| 104 | 
            +
                    if project_path
         | 
| 105 | 
            +
                      sources << PathSource.new(:project, "#{project_path}/generators")
         | 
| 106 | 
            +
                      sources << PathSource.new(:script, "#{project_path}/script/generators")
         | 
| 107 | 
            +
                      sources << PathSource.new(:vendor, "#{project_path}/vendor/generators")
         | 
| 108 | 
            +
                    end
         | 
| 120 109 |  | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 110 | 
            +
                    # System-wide generator paths
         | 
| 111 | 
            +
                    system_path = "#{Sprout::Sprout.sprout_cache}/generators/#{sprout_name}"
         | 
| 112 | 
            +
                    if(File.exists?(system_path))
         | 
| 113 | 
            +
                      sources << PathSource.new(:system, system_path)
         | 
| 114 | 
            +
                    end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    # Gem generators will collect all
         | 
| 117 | 
            +
                    # rubygems that end with -bundle or -generators
         | 
| 118 | 
            +
                    if(Object.const_defined?(:Gem))
         | 
| 119 | 
            +
                      sources << GemGeneratorSource.new(sprout_name)
         | 
| 120 | 
            +
                      sources << GemPathSource.new(sprout_name)
         | 
| 127 121 | 
             
                    end
         | 
| 128 122 | 
             
                  end
         | 
| 129 123 | 
             
                end
         | 
| 130 | 
            -
             | 
| 131 124 | 
             
              end
         | 
| 125 | 
            +
             | 
| 132 126 | 
             
            end
         | 
| @@ -18,7 +18,7 @@ module Sprout | |
| 18 18 | 
             
                # Regardless of which format the name was sent in, the helper
         | 
| 19 19 | 
             
                # methods should provide valid results
         | 
| 20 20 | 
             
                #
         | 
| 21 | 
            -
                class NamedBase <  | 
| 21 | 
            +
                class NamedBase < RubiGen::Base
         | 
| 22 22 |  | 
| 23 23 | 
             
                  # Fully qualified class named including package name like 'flash.display.Sprite'
         | 
| 24 24 | 
             
                  attr_reader :full_class_name
         | 
| @@ -12,9 +12,10 @@ module Sprout #:nodoc: | |
| 12 12 | 
             
                def initialize(*command)
         | 
| 13 13 | 
             
                  @command = command
         | 
| 14 14 | 
             
                  begin
         | 
| 15 | 
            +
                    @alive = true
         | 
| 15 16 | 
             
                    usr = User.new()
         | 
| 16 17 | 
             
                    if(usr.is_a?(WinUser) && !usr.is_a?(CygwinUser))
         | 
| 17 | 
            -
                       | 
| 18 | 
            +
                      require_gem 'win32/open3', '0.2.5'
         | 
| 18 19 | 
             
                      Open3.popen3(*@command) do |w, r, e, pid|
         | 
| 19 20 | 
             
                      	@w = w
         | 
| 20 21 | 
             
                      	@r = r
         | 
| @@ -26,21 +27,56 @@ module Sprout #:nodoc: | |
| 26 27 | 
             
                      @pid, @w, @r, @e = open4.popen4(*@command)
         | 
| 27 28 | 
             
                    end
         | 
| 28 29 | 
             
                  rescue Errno::ENOENT => e
         | 
| 30 | 
            +
                    @alive = false
         | 
| 29 31 | 
             
                    part = command[0].split(' ').shift
         | 
| 30 32 | 
             
                    raise ProcessRunnerError.new("The expected executable was not found for command [#{part}], please check your system path and/or sprout definition")
         | 
| 31 33 | 
             
                  end
         | 
| 32 34 | 
             
                end
         | 
| 33 35 |  | 
| 36 | 
            +
                def alive?
         | 
| 37 | 
            +
                  @alive = update_status
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
                
         | 
| 40 | 
            +
                def update_status
         | 
| 41 | 
            +
                  pid_int = Integer("#{ @pid }")
         | 
| 42 | 
            +
                  begin
         | 
| 43 | 
            +
                    Process::kill 0, pid_int
         | 
| 44 | 
            +
                    true
         | 
| 45 | 
            +
                  rescue Errno::ESRCH
         | 
| 46 | 
            +
                    false
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
                
         | 
| 50 | 
            +
                def readpartial(count)
         | 
| 51 | 
            +
                  @r.readpartial(count)
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
                
         | 
| 54 | 
            +
                def readlines
         | 
| 55 | 
            +
                  @r.readlines
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
                
         | 
| 58 | 
            +
                def flush
         | 
| 59 | 
            +
                  @w.flush
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
                
         | 
| 62 | 
            +
                def getc
         | 
| 63 | 
            +
                  @r.getc
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
                
         | 
| 66 | 
            +
                def print(msg)
         | 
| 67 | 
            +
                  @w.print msg
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
                
         | 
| 34 70 | 
             
                def puts(msg)
         | 
| 35 71 | 
             
                  @w.puts(msg)
         | 
| 36 72 | 
             
                end
         | 
| 37 | 
            -
             | 
| 73 | 
            +
                
         | 
| 38 74 | 
             
                def read
         | 
| 39 | 
            -
                  return r.read
         | 
| 75 | 
            +
                  return @r.read
         | 
| 40 76 | 
             
                end
         | 
| 41 77 |  | 
| 42 78 | 
             
                def read_err
         | 
| 43 | 
            -
                  return e.read
         | 
| 79 | 
            +
                  return @e.read
         | 
| 44 80 | 
             
                end
         | 
| 45 81 | 
             
              end
         | 
| 46 82 | 
             
            end
         | 
    
        data/lib/sprout/project_model.rb
    CHANGED
    
    | @@ -5,21 +5,44 @@ module Sprout | |
| 5 5 | 
             
              #
         | 
| 6 6 | 
             
              # The default set of properties are also used from code generators, library tasks and sometimes tools.
         | 
| 7 7 | 
             
              #
         | 
| 8 | 
            +
              # The ProjectModel can be configured as follows:
         | 
| 9 | 
            +
              #   project_model :model do |p|
         | 
| 10 | 
            +
              #     p.name          = 'SomeProject'
         | 
| 11 | 
            +
              #     p.source_path   << 'somedir/otherdir'
         | 
| 12 | 
            +
              #     p.library_path  << 'somedir'
         | 
| 13 | 
            +
              #   end
         | 
| 14 | 
            +
              #
         | 
| 8 15 | 
             
              # This class should have some reasonable default values, but can be modified from any rakefile.
         | 
| 9 16 | 
             
              # If you don't find some properties that you'd like on the ProjectModel, you can simply add 
         | 
| 10 | 
            -
              # new properties and use them however you wish.  | 
| 11 | 
            -
              # like the following to any Rakefile before the model is used.
         | 
| 17 | 
            +
              # new properties and use them however you wish. 
         | 
| 12 18 | 
             
              #
         | 
| 13 | 
            -
              # | 
| 14 | 
            -
              # | 
| 15 | 
            -
              #      | 
| 19 | 
            +
              # Arbitrary properties can be added as follows:
         | 
| 20 | 
            +
              #   m = project_model :model do |p|
         | 
| 21 | 
            +
              #     p.unknown_property = 'someValue'
         | 
| 16 22 | 
             
              #   end
         | 
| 23 | 
            +
              # 
         | 
| 24 | 
            +
              #   puts "Unknown Property: #{m.unknown_property}"
         | 
| 25 | 
            +
              #
         | 
| 26 | 
            +
              # The ProjectModel is typically treated as if it is a Singleton, and many helper tasks
         | 
| 27 | 
            +
              # will automatically go look for their model at:
         | 
| 28 | 
            +
              # 
         | 
| 29 | 
            +
              #   Sprout::ProjectModel.instance
         | 
| 30 | 
            +
              #
         | 
| 31 | 
            +
              # Unlike a real Singleton, this static property will actually be populated with the most
         | 
| 32 | 
            +
              # recently instantiated ProjectModel, and any well-behaved helper task will also
         | 
| 33 | 
            +
              # allow you to send in a model as a prerequisite.
         | 
| 34 | 
            +
              #
         | 
| 35 | 
            +
              #   project_model :model_a
         | 
| 36 | 
            +
              #   project_model :model_b
         | 
| 37 | 
            +
              #
         | 
| 38 | 
            +
              #   desc 'Compile and run a'
         | 
| 39 | 
            +
              #   debug :debug_a => :model_a
         | 
| 40 | 
            +
              #
         | 
| 41 | 
            +
              #   desc 'Compile and run b'
         | 
| 42 | 
            +
              #   debug :debug_b => :model_b
         | 
| 17 43 | 
             
              #
         | 
| 18 44 | 
             
              class ProjectModel < Hash
         | 
| 19 45 |  | 
| 20 | 
            -
                @@DEFAULT_TEST_WIDTH  = 1000
         | 
| 21 | 
            -
                @@DEFAULT_TEST_HEIGHT = 550
         | 
| 22 | 
            -
                
         | 
| 23 46 | 
             
                # Relative path to the folder where compile time assets will be stored
         | 
| 24 47 | 
             
                attr_accessor :asset_dir
         | 
| 25 48 | 
             
                # The folder where binary files will be created. Usually this is where any build artifacts like SWF files get placed.
         | 
| @@ -33,6 +56,7 @@ module Sprout | |
| 33 56 | 
             
                # Possible values are:
         | 
| 34 57 | 
             
                # * sprout-flex2sdk-tool
         | 
| 35 58 | 
             
                # * sprout-flex3sdk-tool
         | 
| 59 | 
            +
                # * sprout-flex4sdk-tool (Experimental)
         | 
| 36 60 | 
             
                # * sprout-mtasc-tool
         | 
| 37 61 | 
             
                attr_accessor :compiler_gem_name
         | 
| 38 62 | 
             
                # The version number of the compiler gem to use
         | 
| @@ -94,34 +118,31 @@ module Sprout | |
| 94 118 | 
             
                attr_accessor :test_dir
         | 
| 95 119 | 
             
                # The test executable
         | 
| 96 120 | 
             
                attr_accessor :test_output
         | 
| 97 | 
            -
                # The test runner SWF width
         | 
| 98 | 
            -
                attr_writer :test_width
         | 
| 99 121 | 
             
                # The test runner SWF height
         | 
| 100 | 
            -
                 | 
| 122 | 
            +
                attr_accessor :test_height
         | 
| 123 | 
            +
                # The test runner SWF width
         | 
| 124 | 
            +
                attr_accessor :test_width
         | 
| 101 125 | 
             
                # The default width of the SWF file
         | 
| 102 126 | 
             
                # _(This value is overridden when embedded in an HTML page)_
         | 
| 103 127 | 
             
                attr_accessor :width
         | 
| 104 128 |  | 
| 105 | 
            -
                #  | 
| 106 | 
            -
                #  | 
| 107 | 
            -
                # model.foo = 'bar'
         | 
| 108 | 
            -
                # model.junk = true
         | 
| 109 | 
            -
                # and then just as easily reference those vars from
         | 
| 110 | 
            -
                # external generators...  
         | 
| 129 | 
            +
                # Static method that returns the most recently instantiated ProjectModel,
         | 
| 130 | 
            +
                # or instantiates one if none have been created yet.
         | 
| 111 131 | 
             
                def self.instance
         | 
| 112 132 | 
             
                  @@instance ||= ProjectModel.new
         | 
| 113 133 | 
             
                  yield @@instance if block_given?
         | 
| 114 134 | 
             
                  return @@instance
         | 
| 115 135 | 
             
                end
         | 
| 116 136 |  | 
| 117 | 
            -
                 | 
| 118 | 
            -
             | 
| 137 | 
            +
                # Decorates the static instance method.
         | 
| 138 | 
            +
                def self.setup
         | 
| 139 | 
            +
                  @@instance ||= ProjectModel.new
         | 
| 140 | 
            +
                  yield @@instance if block_given?
         | 
| 141 | 
            +
                  return @@instance
         | 
| 119 142 | 
             
                end
         | 
| 120 143 |  | 
| 121 | 
            -
                 | 
| 122 | 
            -
             | 
| 123 | 
            -
                  yield instance if block_given?
         | 
| 124 | 
            -
                  return instance
         | 
| 144 | 
            +
                def self.destroy # :nodoc:
         | 
| 145 | 
            +
                  @@instance = nil
         | 
| 125 146 | 
             
                end
         | 
| 126 147 |  | 
| 127 148 | 
             
                def initialize
         | 
| @@ -148,6 +169,8 @@ module Sprout | |
| 148 169 | 
             
                  @view_dir       = nil
         | 
| 149 170 | 
             
                  @controller_dir = nil
         | 
| 150 171 |  | 
| 172 | 
            +
                  @test_height    = 550
         | 
| 173 | 
            +
                  @test_width     = 900
         | 
| 151 174 | 
             
                  @@instance      = self
         | 
| 152 175 | 
             
                end
         | 
| 153 176 |  | 
| @@ -198,14 +221,7 @@ module Sprout | |
| 198 221 | 
             
                  return @controller_dir
         | 
| 199 222 | 
             
                end
         | 
| 200 223 |  | 
| 201 | 
            -
                 | 
| 202 | 
            -
                  @test_width ||= @@DEFAULT_TEST_WIDTH
         | 
| 203 | 
            -
                end
         | 
| 204 | 
            -
                
         | 
| 205 | 
            -
                def test_height
         | 
| 206 | 
            -
                  @test_height ||= @@DEFAULT_TEST_HEIGHT
         | 
| 207 | 
            -
                end
         | 
| 208 | 
            -
                
         | 
| 224 | 
            +
                # Alias for project_name
         | 
| 209 225 | 
             
                def name=(name)
         | 
| 210 226 | 
             
                  @project_name = name
         | 
| 211 227 | 
             
                end
         | 
| @@ -218,14 +234,27 @@ module Sprout | |
| 218 234 | 
             
                  return "[Sprout::ProjectModel project_name=#{project_name}]"
         | 
| 219 235 | 
             
                end
         | 
| 220 236 |  | 
| 237 | 
            +
                protected
         | 
| 238 | 
            +
                
         | 
| 239 | 
            +
                def method_missing(method_name, *args)
         | 
| 240 | 
            +
                  method_name = method_name.to_s
         | 
| 241 | 
            +
                  if method_name =~ /=$/
         | 
| 242 | 
            +
                    super if args.size > 1
         | 
| 243 | 
            +
                    self[method_name[0...-1]] = args[0]
         | 
| 244 | 
            +
                  else
         | 
| 245 | 
            +
                    super unless has_key?(method_name) and args.empty?
         | 
| 246 | 
            +
                    self[method_name]
         | 
| 247 | 
            +
                  end
         | 
| 248 | 
            +
                end
         | 
| 221 249 | 
             
              end
         | 
| 222 250 | 
             
            end
         | 
| 223 251 |  | 
| 224 | 
            -
             | 
| 252 | 
            +
            # Helper method to expose the project model as a Rake Task
         | 
| 253 | 
            +
            def project_model(task_name)
         | 
| 225 254 | 
             
              model = Sprout::ProjectModel.new
         | 
| 226 255 | 
             
              yield model if block_given?
         | 
| 227 256 |  | 
| 228 | 
            -
              t = task  | 
| 257 | 
            +
              t = task task_name
         | 
| 229 258 |  | 
| 230 259 | 
             
              def t.project_model=(model)
         | 
| 231 260 | 
             
                @model = model
         | 
| @@ -29,9 +29,12 @@ a) Get the same functionality in a cross-platform manner | |
| 29 29 | 
             
            b) Only require and use termios on systems that allow it
         | 
| 30 30 | 
             
            =end
         | 
| 31 31 |  | 
| 32 | 
            +
            #gem 'net-ssh', '1.1.4'
         | 
| 33 | 
            +
            #gem 'net-sftp', '1.1.1'
         | 
| 32 34 |  | 
| 33 35 | 
             
            require 'net/ssh'
         | 
| 34 36 | 
             
            require 'net/sftp'
         | 
| 37 | 
            +
             | 
| 35 38 | 
             
            #require 'termios'
         | 
| 36 39 |  | 
| 37 40 | 
             
            module Sprout
         | 
| @@ -29,6 +29,8 @@ a) Get the same functionality in a cross-platform manner | |
| 29 29 | 
             
            b) Only require and use termios on systems that allow it
         | 
| 30 30 | 
             
            =end
         | 
| 31 31 |  | 
| 32 | 
            +
            #gem 'net-ssh', '1.1.4'
         | 
| 33 | 
            +
            #gem 'net-sftp', '1.1.1'
         | 
| 32 34 |  | 
| 33 35 | 
             
            require 'net/ssh'
         | 
| 34 36 | 
             
            require 'net/sftp'
         | 
| @@ -65,6 +67,7 @@ module Sprout | |
| 65 67 | 
             
                  super(task_name, app)
         | 
| 66 68 | 
             
                  @name = name
         | 
| 67 69 | 
             
                  @host = nil
         | 
| 70 | 
            +
                  @queue = []
         | 
| 68 71 | 
             
                  @commands = []
         | 
| 69 72 | 
             
                end
         | 
| 70 73 |  | 
| @@ -300,6 +300,7 @@ module Sprout | |
| 300 300 | 
             
                  end
         | 
| 301 301 | 
             
                  return path
         | 
| 302 302 | 
             
                end
         | 
| 303 | 
            +
                
         | 
| 303 304 | 
             
              end
         | 
| 304 305 |  | 
| 305 306 | 
             
              #######################################################
         | 
| @@ -432,11 +433,12 @@ module Sprout | |
| 432 433 | 
             
                  result << "def #{name}=(#{type})\n  @#{name} = #{type}\nend\n\n"
         | 
| 433 434 | 
             
                  return result
         | 
| 434 435 | 
             
                end
         | 
| 435 | 
            -
             | 
| 436 | 
            +
                
         | 
| 436 437 | 
             
              end
         | 
| 437 438 |  | 
| 438 439 | 
             
              # Concrete param object for :string values
         | 
| 439 440 | 
             
              class StringParam < TaskParam # :nodoc:
         | 
| 441 | 
            +
                
         | 
| 440 442 | 
             
              end
         | 
| 441 443 |  | 
| 442 444 | 
             
              # Concrete param object for :symbol values
         | 
| @@ -534,7 +536,6 @@ module Sprout | |
| 534 536 | 
             
                  value.each_index do |index|
         | 
| 535 537 | 
             
                    path = value[index]
         | 
| 536 538 | 
             
                    value[index] = usr.clean_path path
         | 
| 537 | 
            -
            #        p = usr.clean_path p
         | 
| 538 539 | 
             
                  end
         | 
| 539 540 | 
             
                end
         | 
| 540 541 |  | 
    
        data/lib/sprout/user.rb
    CHANGED
    
    | @@ -47,6 +47,10 @@ module Sprout | |
| 47 47 | 
             
                def User.home=(path) # :nodoc:
         | 
| 48 48 | 
             
                  User.new().home = path
         | 
| 49 49 | 
             
                end
         | 
| 50 | 
            +
                
         | 
| 51 | 
            +
                def User.is_a?(type)
         | 
| 52 | 
            +
                  User.new().is_a?(type)
         | 
| 53 | 
            +
                end
         | 
| 50 54 |  | 
| 51 55 | 
             
                # Pass an executable or binary file name and find out if that file exists in the system
         | 
| 52 56 | 
             
                # path or not
         | 
| @@ -192,11 +196,15 @@ module Sprout | |
| 192 196 | 
             
                    return Platform::IMPL
         | 
| 193 197 | 
             
                  end
         | 
| 194 198 | 
             
                end
         | 
| 199 | 
            +
                
         | 
| 200 | 
            +
                def get_process_runner(command)
         | 
| 201 | 
            +
                  return ProcessRunner.new(command)
         | 
| 202 | 
            +
                end
         | 
| 195 203 |  | 
| 196 204 | 
             
                def execute(tool, options='')
         | 
| 197 205 | 
             
                  Log.puts(">> Execute: #{File.basename(tool)} #{options}")
         | 
| 198 206 | 
             
                  tool = clean_path(tool)
         | 
| 199 | 
            -
                  runner =  | 
| 207 | 
            +
                  runner = get_process_runner("#{tool} #{options}")
         | 
| 200 208 |  | 
| 201 209 | 
             
                  result = runner.read
         | 
| 202 210 | 
             
                  error = runner.read_err
         | 
| @@ -210,7 +218,7 @@ module Sprout | |
| 210 218 |  | 
| 211 219 | 
             
                def execute_silent(tool, options='')
         | 
| 212 220 | 
             
                  tool = clean_path(tool)
         | 
| 213 | 
            -
                  return  | 
| 221 | 
            +
                  return get_process_runner("#{tool} #{options}")
         | 
| 214 222 | 
             
                end
         | 
| 215 223 |  | 
| 216 224 | 
             
                def execute_thread(tool, options='')
         | 
    
        data/lib/sprout/version.rb
    CHANGED
    
    
    
        data/rakefile.rb
    CHANGED
    
    | @@ -55,14 +55,17 @@ def apply_shared_spec(s) | |
| 55 55 |  | 
| 56 56 | 
             
                s.add_dependency('rubyzip', '>= 0.9.1')
         | 
| 57 57 | 
             
                s.add_dependency('archive-tar-minitar', '>= 0.5.1')
         | 
| 58 | 
            -
                s.add_dependency(' | 
| 58 | 
            +
                s.add_dependency('rubigen', '>= 1.3.2')
         | 
| 59 59 | 
             
                s.add_dependency('net-sftp')
         | 
| 60 | 
            +
                s.add_dependency('net-ssh')
         | 
| 60 61 | 
             
            end
         | 
| 61 62 |  | 
| 62 63 | 
             
            osx_spec = Gem::Specification.new do |s|
         | 
| 63 64 | 
             
              apply_shared_spec(s)
         | 
| 64 65 | 
             
              s.platform = 'darwin'
         | 
| 65 66 | 
             
              # Add osx-specific dependencies here
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              # Can't really depend on rb-appscript b/c this requires OS X dev-tool disk
         | 
| 66 69 | 
             
              #s.add_dependency('rb-appscript', '>= 0.5.0')
         | 
| 67 70 | 
             
              s.add_dependency('open4', '>= 0.9.6')
         | 
| 68 71 | 
             
            end
         | 
| @@ -78,12 +81,13 @@ win_spec = Gem::Specification.new do |s| | |
| 78 81 | 
             
              apply_shared_spec(s)
         | 
| 79 82 | 
             
              s.platform = 'mswin32'
         | 
| 80 83 | 
             
              # Add win-specific dependencies here
         | 
| 81 | 
            -
              s.add_dependency('win32-open3')
         | 
| 84 | 
            +
              s.add_dependency('win32-open3', '0.2.5')
         | 
| 82 85 | 
             
            end
         | 
| 83 86 |  | 
| 84 87 | 
             
            ruby_spec = Gem::Specification.new do |s|
         | 
| 85 88 | 
             
              apply_shared_spec(s)
         | 
| 86 89 | 
             
              s.platform = Gem::Platform::RUBY
         | 
| 90 | 
            +
              s.add_dependency('open4', '>= 0.9.6')
         | 
| 87 91 | 
             
            end
         | 
| 88 92 |  | 
| 89 93 | 
             
            Rake::GemPackageTask.new(osx_spec) do |pkg|
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: sprout
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0.7. | 
| 4 | 
            +
              version: 0.7.191
         | 
| 5 5 | 
             
            platform: darwin
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Luke Bayes
         | 
| @@ -9,11 +9,12 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 |  | 
| 12 | 
            -
            date: 2008- | 
| 12 | 
            +
            date: 2008-07-19 00:00:00 -07:00
         | 
| 13 13 | 
             
            default_executable: sprout
         | 
| 14 14 | 
             
            dependencies: 
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 16 16 | 
             
              name: rubyzip
         | 
| 17 | 
            +
              type: :runtime
         | 
| 17 18 | 
             
              version_requirement: 
         | 
| 18 19 | 
             
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 19 20 | 
             
                requirements: 
         | 
| @@ -23,6 +24,7 @@ dependencies: | |
| 23 24 | 
             
                version: 
         | 
| 24 25 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 25 26 | 
             
              name: archive-tar-minitar
         | 
| 27 | 
            +
              type: :runtime
         | 
| 26 28 | 
             
              version_requirement: 
         | 
| 27 29 | 
             
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 28 30 | 
             
                requirements: 
         | 
| @@ -31,16 +33,28 @@ dependencies: | |
| 31 33 | 
             
                    version: 0.5.1
         | 
| 32 34 | 
             
                version: 
         | 
| 33 35 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 34 | 
            -
              name:  | 
| 36 | 
            +
              name: rubigen
         | 
| 37 | 
            +
              type: :runtime
         | 
| 35 38 | 
             
              version_requirement: 
         | 
| 36 39 | 
             
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 37 40 | 
             
                requirements: 
         | 
| 38 41 | 
             
                - - ">="
         | 
| 39 42 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 40 | 
            -
                    version:  | 
| 43 | 
            +
                    version: 1.3.2
         | 
| 41 44 | 
             
                version: 
         | 
| 42 45 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 43 46 | 
             
              name: net-sftp
         | 
| 47 | 
            +
              type: :runtime
         | 
| 48 | 
            +
              version_requirement: 
         | 
| 49 | 
            +
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 50 | 
            +
                requirements: 
         | 
| 51 | 
            +
                - - ">="
         | 
| 52 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 53 | 
            +
                    version: "0"
         | 
| 54 | 
            +
                version: 
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 56 | 
            +
              name: net-ssh
         | 
| 57 | 
            +
              type: :runtime
         | 
| 44 58 | 
             
              version_requirement: 
         | 
| 45 59 | 
             
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 46 60 | 
             
                requirements: 
         | 
| @@ -50,6 +64,7 @@ dependencies: | |
| 50 64 | 
             
                version: 
         | 
| 51 65 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 52 66 | 
             
              name: open4
         | 
| 67 | 
            +
              type: :runtime
         | 
| 53 68 | 
             
              version_requirement: 
         | 
| 54 69 | 
             
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 55 70 | 
             
                requirements: 
         | 
| @@ -145,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 145 160 | 
             
            requirements: []
         | 
| 146 161 |  | 
| 147 162 | 
             
            rubyforge_project: sprout
         | 
| 148 | 
            -
            rubygems_version: 1.0 | 
| 163 | 
            +
            rubygems_version: 1.2.0
         | 
| 149 164 | 
             
            signing_key: 
         | 
| 150 165 | 
             
            specification_version: 2
         | 
| 151 166 | 
             
            summary: Sprouts is an open-source, cross-platform project generation, configuration and build tool.
         |