sprout 0.7.183-darwin → 0.7.191-darwin
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|