sprout 0.7.246 → 1.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sprout might be problematic. Click here for more details.
- data/CHANGELOG.md +10 -0
- data/Gemfile +28 -0
- data/MIT-LICENSE +3 -2
- data/POSTINSTALL.rdoc +28 -0
- data/README.textile +152 -0
- data/bin/sprout +1 -131
- data/bin/sprout-generator +10 -0
- data/bin/sprout-library +11 -0
- data/bin/sprout-tool +10 -0
- data/lib/sprout.rb +4 -500
- data/lib/sprout/archive_unpacker.rb +122 -206
- data/lib/sprout/base.rb +90 -0
- data/lib/sprout/concern.rb +30 -0
- data/lib/sprout/dir.rb +23 -0
- data/lib/sprout/errors.rb +94 -0
- data/lib/sprout/executable.rb +496 -0
- data/lib/sprout/executable/boolean.rb +35 -0
- data/lib/sprout/executable/collection_param.rb +53 -0
- data/lib/sprout/executable/file_param.rb +53 -0
- data/lib/sprout/executable/files.rb +26 -0
- data/lib/sprout/executable/number.rb +10 -0
- data/lib/sprout/executable/param.rb +222 -0
- data/lib/sprout/executable/parameter_factory.rb +28 -0
- data/lib/sprout/executable/path.rb +21 -0
- data/lib/sprout/executable/paths.rb +21 -0
- data/lib/sprout/executable/string_param.rb +15 -0
- data/lib/sprout/executable/strings.rb +11 -0
- data/lib/sprout/executable/url.rb +10 -0
- data/lib/sprout/executable/urls.rb +10 -0
- data/lib/sprout/file_target.rb +76 -0
- data/lib/sprout/generator/base.rb +233 -0
- data/lib/sprout/generator/command.rb +67 -0
- data/lib/sprout/generator/directory_manifest.rb +49 -0
- data/lib/sprout/generator/file_manifest.rb +55 -0
- data/lib/sprout/generator/manifest.rb +13 -0
- data/lib/sprout/generator/template_manifest.rb +13 -0
- data/lib/sprout/generators/generator/generator_generator.rb +48 -0
- data/lib/sprout/generators/generator/templates/generator_class.rb +17 -0
- data/lib/sprout/generators/generator/templates/generator_executable +9 -0
- data/lib/sprout/generators/generator/templates/generator_template +1 -0
- data/lib/sprout/generators/generator/templates/generator_test.rb +37 -0
- data/lib/sprout/generators/generator/templates/generator_test_helper.rb +16 -0
- data/lib/sprout/generators/library/library_generator.rb +20 -0
- data/lib/sprout/generators/library/templates/library.gemspec +19 -0
- data/lib/sprout/generators/library/templates/library.rb +15 -0
- data/lib/sprout/generators/ruby/ruby_generator.rb +59 -0
- data/lib/sprout/generators/ruby/templates/ruby_base.rb +10 -0
- data/lib/sprout/generators/ruby/templates/ruby_executable +6 -0
- data/lib/sprout/generators/ruby/templates/ruby_gemfile +4 -0
- data/lib/sprout/generators/ruby/templates/ruby_input.rb +7 -0
- data/lib/sprout/generators/tool/templates/Gemfile +4 -0
- data/lib/sprout/generators/tool/templates/tool.gemspec +22 -0
- data/lib/sprout/generators/tool/templates/tool.rb +38 -0
- data/lib/sprout/generators/tool/tool_generator.rb +36 -0
- data/lib/sprout/library.rb +111 -0
- data/lib/sprout/log.rb +1 -0
- data/lib/sprout/platform.rb +71 -0
- data/lib/sprout/process_runner.rb +80 -40
- data/lib/sprout/progress_bar.rb +341 -0
- data/lib/sprout/rdoc_parser.rb +91 -0
- data/lib/sprout/remote_file_loader.rb +72 -50
- data/lib/sprout/remote_file_target.rb +44 -152
- data/lib/sprout/ruby_feature.rb +167 -0
- data/lib/sprout/specification.rb +197 -0
- data/lib/sprout/string.rb +19 -0
- data/lib/sprout/system.rb +35 -0
- data/lib/sprout/system/base_system.rb +225 -0
- data/lib/sprout/system/java_system.rb +9 -0
- data/lib/sprout/system/osx_system.rb +26 -0
- data/lib/sprout/system/unix_system.rb +72 -0
- data/lib/sprout/system/vista_system.rb +16 -0
- data/lib/sprout/system/win_nix_system.rb +41 -0
- data/lib/sprout/system/win_system.rb +76 -0
- data/lib/sprout/test/sprout_test_case.rb +211 -0
- data/lib/sprout/version.rb +9 -4
- data/rakefile.rb +85 -144
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/sprout.gemspec +26 -0
- data/test/fixtures/archive_unpacker/copyable/some_file.exe +0 -0
- data/test/fixtures/archive_unpacker/copyable/some_file.rb +0 -0
- data/test/fixtures/archive_unpacker/copyable/some_file.swc +0 -0
- data/test/fixtures/archive_unpacker/tgz/some folder.tgz +0 -0
- data/test/fixtures/archive_unpacker/tgz/some_file.tgz +0 -0
- data/test/fixtures/archive_unpacker/zip/some folder.zip +0 -0
- data/test/fixtures/archive_unpacker/zip/some_file.zip +0 -0
- data/test/fixtures/examples/app_generator.rb +127 -0
- data/test/fixtures/examples/echo_inputs.rb +151 -0
- data/test/fixtures/executable/echochamber_gem/bin/echochamber +3 -0
- data/test/fixtures/executable/echochamber_gem/echo_chamber.rb +10 -0
- data/test/fixtures/executable/flex3sdk_gem/flex3sdk.rb +11 -0
- data/test/fixtures/executable/flex3sdk_gem/mxmlc +3 -0
- data/test/fixtures/executable/flex3sdk_gem/mxmlc.bat +3 -0
- data/test/fixtures/executable/mxmlc.rb +805 -0
- data/test/fixtures/executable/params/input.as +0 -0
- data/test/fixtures/executable/params/input2.as +0 -0
- data/test/fixtures/executable/params/input3.as +0 -0
- data/test/fixtures/executable/params/mxmlc +5 -0
- data/test/fixtures/executable/path with spaces/input.as b/data/test/fixtures/executable/path with → spaces/input.as +0 -0
- data/test/fixtures/executable/path with spaces/input2.as b/data/test/fixtures/executable/path with → spaces/input2.as +0 -0
- data/test/fixtures/executable/path with spaces/input3.as b/data/test/fixtures/executable/path with → spaces/input3.as +0 -0
- data/test/fixtures/executable/paths/folder1/file1 +0 -0
- data/test/fixtures/executable/paths/folder1/file2 +0 -0
- data/test/fixtures/executable/paths/folder1/file3 +0 -0
- data/test/fixtures/executable/paths/folder2/file4 +0 -0
- data/test/fixtures/executable/paths/folder2/file5 +0 -0
- data/test/fixtures/executable/paths/folder3/file6 +0 -0
- data/test/fixtures/executable/src/Main.as +0 -0
- data/test/fixtures/executable/windows_line_endings +47 -0
- data/test/fixtures/generators/song_generator.rb +11 -0
- data/test/fixtures/generators/song_subclass/least_favorite.rb +10 -0
- data/test/fixtures/generators/song_subclass/templates/Song.txt +3 -0
- data/test/fixtures/generators/temp_generator.rb +24 -0
- data/test/fixtures/generators/templates/Main.as +9 -0
- data/test/fixtures/generators/templates/OtherFileTemplate +1 -0
- data/test/fixtures/generators/templates/SomeFile +1 -0
- data/test/fixtures/generators/templates/SomeSubclassFile +2 -0
- data/test/fixtures/generators/templates/Song.txt +3 -0
- data/test/fixtures/generators/templates/destroy +0 -0
- data/test/fixtures/generators/templates/generate +0 -0
- data/test/fixtures/library/archive/Archive.swc +0 -0
- data/test/fixtures/library/sources/lib/a/A.as +0 -0
- data/test/fixtures/library/sources/lib/b/B.as +0 -0
- data/test/fixtures/library/sources/src/Source.as +0 -0
- data/test/fixtures/process_runner/chmod_script.sh +3 -0
- data/test/fixtures/process_runner/dir with spaces/chmod_script.sh +3 -0
- data/test/fixtures/process_runner/failure +5 -0
- data/test/fixtures/process_runner/success +4 -0
- data/test/fixtures/remote_file_loader/md5/echochamber-test.zip +0 -0
- data/test/fixtures/remote_file_loader/md5/file_with_known_md5 +0 -0
- data/test/fixtures/remote_file_target/bin/echochamber +3 -0
- data/test/fixtures/remote_file_target/bin/echochamber.bat +3 -0
- data/test/fixtures/remote_file_target/echochamber-test.zip +0 -0
- data/test/fixtures/specification/asunit4.rb +25 -0
- data/test/fixtures/specification/ext/AsUnit-4.1.pre.swc +0 -0
- data/test/fixtures/specification/flashplayer.rb +30 -0
- data/test/fixtures/specification/flex4sdk.rb +72 -0
- data/test/fixtures/specification/flexunit4.sproutspec +17 -0
- data/test/fixtures/specification/lib/as3reflection/Reflection.as +0 -0
- data/test/fixtures/specification/src/AsUnit.as +0 -0
- data/test/fixtures/user/mxmlc_crlf +3 -0
- data/test/unit/archive_unpacker_test.rb +108 -0
- data/test/unit/boolean_param_test.rb +38 -0
- data/test/unit/executable_option_parser_test.rb +142 -0
- data/test/unit/executable_param_test.rb +76 -0
- data/test/unit/executable_test.rb +237 -0
- data/test/unit/fake_executable_task.rb +22 -0
- data/test/unit/fake_other_executable.rb +20 -0
- data/test/unit/fake_process_runner.rb +29 -0
- data/test/unit/file_param_test.rb +61 -0
- data/test/unit/file_target_test.rb +42 -0
- data/test/unit/files_param_test.rb +72 -0
- data/test/unit/generator_generator_test.rb +85 -0
- data/test/unit/generator_test.rb +333 -0
- data/test/unit/library_generator_test.rb +41 -0
- data/test/unit/library_test.rb +88 -0
- data/test/unit/osx_system_test.rb +20 -0
- data/test/unit/path_param_test.rb +43 -0
- data/test/unit/paths_param_test.rb +53 -0
- data/test/unit/platform_test.rb +76 -0
- data/test/unit/process_runner_test.rb +104 -0
- data/test/unit/rdoc_parser_test.rb +15 -0
- data/test/unit/remote_file_loader_test.rb +34 -0
- data/test/unit/remote_file_target_test.rb +105 -0
- data/test/unit/ruby_feature_test.rb +108 -0
- data/test/unit/ruby_generator_test.rb +70 -0
- data/test/unit/specification_test.rb +73 -0
- data/test/unit/sprout_test.rb +170 -0
- data/test/unit/sprout_test_helper.rb +18 -0
- data/test/unit/string_param_test.rb +19 -0
- data/test/unit/string_test.rb +20 -0
- data/test/unit/strings_param_test.rb +27 -0
- data/test/unit/test_helper.rb +1 -0
- data/test/unit/tool_generator_test.rb +43 -0
- data/test/unit/unix_system_test.rb +52 -0
- data/test/unit/user_test.rb +147 -0
- data/test/unit/vista_system_test.rb +40 -0
- data/test/unit/win_nix_system_test.rb +26 -0
- data/test/unit/win_system_test.rb +61 -0
- metadata +318 -113
- data/doc/Bundle +0 -14
- data/doc/Generator +0 -35
- data/doc/Library +0 -63
- data/doc/Task +0 -21
- data/doc/Tool +0 -20
- data/lib/platform.rb +0 -113
- data/lib/progress_bar.rb +0 -354
- data/lib/sprout/builder.rb +0 -51
- data/lib/sprout/bundle_resolver.rb +0 -349
- data/lib/sprout/commands/generate.rb +0 -9
- data/lib/sprout/dynamic_accessors.rb +0 -40
- data/lib/sprout/general_tasks.rb +0 -6
- data/lib/sprout/generator.rb +0 -7
- data/lib/sprout/generator/base_mixins.rb +0 -186
- data/lib/sprout/generator/named_base.rb +0 -227
- data/lib/sprout/project_model.rb +0 -278
- data/lib/sprout/simple_resolver.rb +0 -88
- data/lib/sprout/tasks/erb_resolver.rb +0 -118
- data/lib/sprout/tasks/gem_wrap_task.rb +0 -214
- data/lib/sprout/tasks/git_task.rb +0 -134
- data/lib/sprout/tasks/library_task.rb +0 -118
- data/lib/sprout/tasks/sftp_task.rb +0 -248
- data/lib/sprout/tasks/ssh_task.rb +0 -153
- data/lib/sprout/tasks/tool_task.rb +0 -836
- data/lib/sprout/tasks/zip_task.rb +0 -158
- data/lib/sprout/tool_task_model.rb +0 -19
- data/lib/sprout/user.rb +0 -415
- data/lib/sprout/version_file.rb +0 -89
- data/lib/sprout/zip_util.rb +0 -61
- data/samples/gem_wrap/rakefile.rb +0 -17
@@ -0,0 +1,35 @@
|
|
1
|
+
module Sprout
|
2
|
+
|
3
|
+
module Executable
|
4
|
+
|
5
|
+
# Concrete param object for :boolean values
|
6
|
+
class Boolean < Param
|
7
|
+
attr_accessor :show_on_false
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@delimiter = ' '
|
12
|
+
@option_parser_type_name = 'BOOL'
|
13
|
+
@show_on_false = false
|
14
|
+
@value = false
|
15
|
+
@hidden_value = true
|
16
|
+
end
|
17
|
+
|
18
|
+
def value=(value)
|
19
|
+
value = (value == "true" || value === true) ? true : false
|
20
|
+
super value
|
21
|
+
end
|
22
|
+
|
23
|
+
def visible?
|
24
|
+
@visible ||= value
|
25
|
+
if(show_on_false)
|
26
|
+
return true unless value
|
27
|
+
else
|
28
|
+
return @visible
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Sprout
|
2
|
+
|
3
|
+
module Executable
|
4
|
+
# Included by any parameters that represent
|
5
|
+
# a collection of values, rather than a single
|
6
|
+
# value.
|
7
|
+
#
|
8
|
+
# Should only be included by classes that
|
9
|
+
# extend Sprout::Executable::Param.
|
10
|
+
#
|
11
|
+
module CollectionParam
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
super
|
15
|
+
@value = []
|
16
|
+
@delimiter = "+="
|
17
|
+
@option_parser_type_name = 'a,b,c'
|
18
|
+
end
|
19
|
+
|
20
|
+
# Assign the value and raise if
|
21
|
+
def value=(val)
|
22
|
+
if(val.is_a?(String) || !val.is_a?(Enumerable))
|
23
|
+
message = "The #{name} property is an Enumerable. It looks like you may have used the assignment operator (=) with (#{value.inspect}) where the append operator (<<) was expected."
|
24
|
+
raise Sprout::Errors::ExecutableError.new(message)
|
25
|
+
end
|
26
|
+
@value = val
|
27
|
+
end
|
28
|
+
|
29
|
+
# Hide the collection param if no items
|
30
|
+
# have been added to it.
|
31
|
+
def visible?
|
32
|
+
(!value.nil? && value.size > 0)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns a shell formatted string of the collection
|
36
|
+
def to_shell
|
37
|
+
prepare if !prepared?
|
38
|
+
validate
|
39
|
+
return '' if !visible?
|
40
|
+
return @to_shell_proc.call(self) unless @to_shell_proc.nil?
|
41
|
+
return value.join(' ') if hidden_name?
|
42
|
+
return to_shell_value.collect { |val|
|
43
|
+
"#{shell_name}#{delimiter}#{val}"
|
44
|
+
}.join(' ')
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_shell_value
|
48
|
+
value
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Sprout
|
2
|
+
|
3
|
+
module Executable
|
4
|
+
|
5
|
+
##
|
6
|
+
# Concrete param object for :file values
|
7
|
+
#
|
8
|
+
# This class is actually referenced in Excecutables with:
|
9
|
+
#
|
10
|
+
# add_param :some_name, File
|
11
|
+
#
|
12
|
+
# @see Sprout::Executable::ParameterFactory
|
13
|
+
#
|
14
|
+
class FileParam < Param
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
super
|
18
|
+
@option_parser_type_name = 'FILE'
|
19
|
+
end
|
20
|
+
|
21
|
+
def shell_value
|
22
|
+
clean_path value
|
23
|
+
end
|
24
|
+
|
25
|
+
def prepare_prerequisites
|
26
|
+
if file_task_name
|
27
|
+
self.value ||= belongs_to.rake_task_name
|
28
|
+
return
|
29
|
+
end
|
30
|
+
|
31
|
+
if prerequisite?(value)
|
32
|
+
file value
|
33
|
+
belongs_to.prerequisites << value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def validate
|
38
|
+
super
|
39
|
+
|
40
|
+
if(!file_task_name && !value.nil? && !File.exists?(value))
|
41
|
+
raise Sprout::Errors::InvalidArgumentError.new "No such file or directory - #{value}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def prerequisite?(file)
|
48
|
+
file && !file_is_output?(file)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Sprout
|
2
|
+
|
3
|
+
module Executable
|
4
|
+
|
5
|
+
##
|
6
|
+
# Concrete param object for collections of files
|
7
|
+
class Files < Executable::Param
|
8
|
+
include CollectionParam
|
9
|
+
|
10
|
+
def to_shell_value
|
11
|
+
value.collect do |path|
|
12
|
+
clean_path path
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def prepare_prerequisites
|
17
|
+
value.each do |f|
|
18
|
+
file f
|
19
|
+
belongs_to.prerequisites << f
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,222 @@
|
|
1
|
+
|
2
|
+
module Sprout
|
3
|
+
|
4
|
+
module Executable
|
5
|
+
|
6
|
+
##
|
7
|
+
# The abstract base class for all Executable parameters.
|
8
|
+
#
|
9
|
+
class Param
|
10
|
+
DEFAULT_DELIMITER = '='
|
11
|
+
DEFAULT_OPTION_PARSER_TYPE_NAME = 'STRING'
|
12
|
+
|
13
|
+
# These values should usually be pulled
|
14
|
+
# from the 'belongs_to' executable:
|
15
|
+
DEFAULT_PREFIX = '--'
|
16
|
+
DEFAULT_SHORT_PREFIX = '-'
|
17
|
+
|
18
|
+
attr_accessor :belongs_to
|
19
|
+
attr_accessor :description
|
20
|
+
attr_accessor :hidden_name
|
21
|
+
attr_accessor :hidden_value
|
22
|
+
attr_accessor :file_task_name
|
23
|
+
attr_accessor :name
|
24
|
+
attr_accessor :prefix
|
25
|
+
attr_accessor :reader
|
26
|
+
attr_accessor :required
|
27
|
+
attr_accessor :to_shell_proc
|
28
|
+
attr_accessor :type
|
29
|
+
attr_accessor :validator
|
30
|
+
attr_accessor :value
|
31
|
+
attr_accessor :visible
|
32
|
+
attr_accessor :writer
|
33
|
+
|
34
|
+
##
|
35
|
+
# Executable::Params join their name/value pair with an
|
36
|
+
# equals sign by default, this can be modified
|
37
|
+
# To a space or whatever you wish.
|
38
|
+
attr_accessor :delimiter
|
39
|
+
|
40
|
+
##
|
41
|
+
# Set the file_expression (blob) to append to each path
|
42
|
+
# in order to build the prerequisites FileList.
|
43
|
+
#
|
44
|
+
# Defaults to the parent Executable.default_file_expression
|
45
|
+
#
|
46
|
+
# NOTE: We should add support for file_expressionS
|
47
|
+
# since these are really just blobs that are sent
|
48
|
+
# to the FileList[expr] and that interface accepts
|
49
|
+
# an array.
|
50
|
+
attr_writer :file_expression
|
51
|
+
|
52
|
+
##
|
53
|
+
# Return the name with a single leading dash
|
54
|
+
# and underscores replaced with dashes
|
55
|
+
attr_writer :shell_name
|
56
|
+
|
57
|
+
def initialize
|
58
|
+
@description = 'Default Description'
|
59
|
+
@hidden_value = false
|
60
|
+
@hidden_name = false
|
61
|
+
@delimiter = DEFAULT_DELIMITER
|
62
|
+
@option_parser_type_name = DEFAULT_OPTION_PARSER_TYPE_NAME
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
# By default, Executable::Params only appear in the shell
|
67
|
+
# output when they are not nil
|
68
|
+
def visible?
|
69
|
+
!value.nil?
|
70
|
+
end
|
71
|
+
|
72
|
+
##
|
73
|
+
# Raise an exception if a required parameter is nil.
|
74
|
+
def required?
|
75
|
+
(required == true)
|
76
|
+
end
|
77
|
+
|
78
|
+
##
|
79
|
+
# Ensure this parameter is in a valid state, raise an appropriate
|
80
|
+
# exception if it is not.
|
81
|
+
def validate
|
82
|
+
if(required? && value.nil?)
|
83
|
+
raise Sprout::Errors::MissingArgumentError.new("#{name} is required and must not be nil")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# Set the default value of the parameter.
|
89
|
+
def default=(value)
|
90
|
+
self.value = value
|
91
|
+
@default = value
|
92
|
+
end
|
93
|
+
|
94
|
+
def default
|
95
|
+
@default
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Prepare the parameter for execution or delegation, depending
|
100
|
+
# on what context we're in.
|
101
|
+
def prepare
|
102
|
+
prepare_prerequisites
|
103
|
+
@prepared = true
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Returns true if this parameter has already been prepared.
|
108
|
+
def prepared?
|
109
|
+
@prepared
|
110
|
+
end
|
111
|
+
|
112
|
+
##
|
113
|
+
# Should the param name be hidden from the shell?
|
114
|
+
# Used for params like 'input' on mxmlc
|
115
|
+
def hidden_name?
|
116
|
+
@hidden_name
|
117
|
+
end
|
118
|
+
|
119
|
+
##
|
120
|
+
# Should the param value be hidden from the shell?
|
121
|
+
# Usually used for Boolean toggles like '-debug'
|
122
|
+
def hidden_value?
|
123
|
+
@hidden_value
|
124
|
+
end
|
125
|
+
|
126
|
+
##
|
127
|
+
# Leading character for each parameter
|
128
|
+
# Can sometimes be an empty string,
|
129
|
+
# other times it's a double dash '--'
|
130
|
+
# but usually it's just a single dash '-'
|
131
|
+
def prefix
|
132
|
+
@prefix ||= (belongs_to.nil?) ? DEFAULT_PREFIX : belongs_to.default_prefix
|
133
|
+
end
|
134
|
+
|
135
|
+
def short_prefix
|
136
|
+
@short_prefix ||= (belongs_to.nil?) ? DEFAULT_SHORT_PREFIX : belongs_to.default_short_prefix
|
137
|
+
end
|
138
|
+
|
139
|
+
def option_parser_declaration
|
140
|
+
declaration = [ prefix, option_parser_name ]
|
141
|
+
# TODO: Need to figure out how to support hidden name inputs...
|
142
|
+
#if(hidden_name?)
|
143
|
+
#declaration = [option_parser_type_output]
|
144
|
+
#
|
145
|
+
if(!hidden_value?)
|
146
|
+
declaration << delimiter << option_parser_type_output
|
147
|
+
end
|
148
|
+
declaration.join('')
|
149
|
+
end
|
150
|
+
|
151
|
+
def option_parser_short_name
|
152
|
+
[ short_prefix, short_name ].join('')
|
153
|
+
end
|
154
|
+
|
155
|
+
def short_name
|
156
|
+
@short_name ||= name.to_s.split('').shift
|
157
|
+
end
|
158
|
+
|
159
|
+
def shell_value
|
160
|
+
value.to_s
|
161
|
+
end
|
162
|
+
|
163
|
+
def file_expression
|
164
|
+
@file_expression ||= belongs_to.default_file_expression
|
165
|
+
end
|
166
|
+
|
167
|
+
def shell_name
|
168
|
+
@shell_name ||= prefix + name.to_s.split('_').join('-')
|
169
|
+
end
|
170
|
+
|
171
|
+
def to_shell
|
172
|
+
prepare if !prepared?
|
173
|
+
validate
|
174
|
+
return '' if !visible?
|
175
|
+
return @to_shell_proc.call(self) unless @to_shell_proc.nil?
|
176
|
+
return shell_value if hidden_name?
|
177
|
+
return shell_name if hidden_value?
|
178
|
+
return [shell_name, delimiter, shell_value].join
|
179
|
+
end
|
180
|
+
|
181
|
+
# Create a string that can be turned into a file
|
182
|
+
# that rdoc can parse to describe the customized
|
183
|
+
# or generated task using param name, type and
|
184
|
+
# description
|
185
|
+
def to_rdoc
|
186
|
+
result = ''
|
187
|
+
parts = description.split("\n") unless description.nil?
|
188
|
+
result << "# #{parts.join("\n# ")}\n" unless description.nil?
|
189
|
+
result << "def #{name}=(#{type})\n @#{name} = #{type}\nend\n\n"
|
190
|
+
return result
|
191
|
+
end
|
192
|
+
|
193
|
+
protected
|
194
|
+
|
195
|
+
def option_parser_name
|
196
|
+
name.to_s.gsub('_', '-')
|
197
|
+
end
|
198
|
+
|
199
|
+
def option_parser_type_name
|
200
|
+
@option_parser_type_name
|
201
|
+
end
|
202
|
+
|
203
|
+
def option_parser_type_output
|
204
|
+
type = hidden_value? ? '' : option_parser_type_name
|
205
|
+
required? ? type : "[#{type}]"
|
206
|
+
end
|
207
|
+
|
208
|
+
def prepare_prerequisites
|
209
|
+
end
|
210
|
+
|
211
|
+
def clean_path path
|
212
|
+
Sprout::System.create.clean_path path
|
213
|
+
end
|
214
|
+
|
215
|
+
def file_is_output? file
|
216
|
+
belongs_to.respond_to?(:output) && belongs_to.output.to_s == file
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
module Sprout::Executable
|
3
|
+
|
4
|
+
##
|
5
|
+
# A factory to create concrete Executable::Param
|
6
|
+
# entities from a set of known types.
|
7
|
+
#
|
8
|
+
# If an unrecognized Class reference is provided
|
9
|
+
# we will instantiate it and ensure that it
|
10
|
+
# responds to the public members of the
|
11
|
+
# Executable::Param interface.
|
12
|
+
class ParameterFactory
|
13
|
+
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def create type
|
17
|
+
# Didn't want to clobber the stdlib references
|
18
|
+
# to these two important data types...
|
19
|
+
# But wanted to keep the add_param interface
|
20
|
+
# clean and simple.
|
21
|
+
return StringParam.new if type == String
|
22
|
+
return FileParam.new if type == File
|
23
|
+
type.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Sprout
|
2
|
+
|
3
|
+
module Executable
|
4
|
+
|
5
|
+
##
|
6
|
+
# Concrete param object for :path values
|
7
|
+
class Path < Executable::Param
|
8
|
+
|
9
|
+
def prepare_prerequisites
|
10
|
+
if(value && !file_is_output?(value))
|
11
|
+
files = FileList[value + file_expression]
|
12
|
+
files.each do |f|
|
13
|
+
file f
|
14
|
+
belongs_to.prerequisites << f
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|