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.

Files changed (211) hide show
  1. data/CHANGELOG.md +10 -0
  2. data/Gemfile +28 -0
  3. data/MIT-LICENSE +3 -2
  4. data/POSTINSTALL.rdoc +28 -0
  5. data/README.textile +152 -0
  6. data/bin/sprout +1 -131
  7. data/bin/sprout-generator +10 -0
  8. data/bin/sprout-library +11 -0
  9. data/bin/sprout-tool +10 -0
  10. data/lib/sprout.rb +4 -500
  11. data/lib/sprout/archive_unpacker.rb +122 -206
  12. data/lib/sprout/base.rb +90 -0
  13. data/lib/sprout/concern.rb +30 -0
  14. data/lib/sprout/dir.rb +23 -0
  15. data/lib/sprout/errors.rb +94 -0
  16. data/lib/sprout/executable.rb +496 -0
  17. data/lib/sprout/executable/boolean.rb +35 -0
  18. data/lib/sprout/executable/collection_param.rb +53 -0
  19. data/lib/sprout/executable/file_param.rb +53 -0
  20. data/lib/sprout/executable/files.rb +26 -0
  21. data/lib/sprout/executable/number.rb +10 -0
  22. data/lib/sprout/executable/param.rb +222 -0
  23. data/lib/sprout/executable/parameter_factory.rb +28 -0
  24. data/lib/sprout/executable/path.rb +21 -0
  25. data/lib/sprout/executable/paths.rb +21 -0
  26. data/lib/sprout/executable/string_param.rb +15 -0
  27. data/lib/sprout/executable/strings.rb +11 -0
  28. data/lib/sprout/executable/url.rb +10 -0
  29. data/lib/sprout/executable/urls.rb +10 -0
  30. data/lib/sprout/file_target.rb +76 -0
  31. data/lib/sprout/generator/base.rb +233 -0
  32. data/lib/sprout/generator/command.rb +67 -0
  33. data/lib/sprout/generator/directory_manifest.rb +49 -0
  34. data/lib/sprout/generator/file_manifest.rb +55 -0
  35. data/lib/sprout/generator/manifest.rb +13 -0
  36. data/lib/sprout/generator/template_manifest.rb +13 -0
  37. data/lib/sprout/generators/generator/generator_generator.rb +48 -0
  38. data/lib/sprout/generators/generator/templates/generator_class.rb +17 -0
  39. data/lib/sprout/generators/generator/templates/generator_executable +9 -0
  40. data/lib/sprout/generators/generator/templates/generator_template +1 -0
  41. data/lib/sprout/generators/generator/templates/generator_test.rb +37 -0
  42. data/lib/sprout/generators/generator/templates/generator_test_helper.rb +16 -0
  43. data/lib/sprout/generators/library/library_generator.rb +20 -0
  44. data/lib/sprout/generators/library/templates/library.gemspec +19 -0
  45. data/lib/sprout/generators/library/templates/library.rb +15 -0
  46. data/lib/sprout/generators/ruby/ruby_generator.rb +59 -0
  47. data/lib/sprout/generators/ruby/templates/ruby_base.rb +10 -0
  48. data/lib/sprout/generators/ruby/templates/ruby_executable +6 -0
  49. data/lib/sprout/generators/ruby/templates/ruby_gemfile +4 -0
  50. data/lib/sprout/generators/ruby/templates/ruby_input.rb +7 -0
  51. data/lib/sprout/generators/tool/templates/Gemfile +4 -0
  52. data/lib/sprout/generators/tool/templates/tool.gemspec +22 -0
  53. data/lib/sprout/generators/tool/templates/tool.rb +38 -0
  54. data/lib/sprout/generators/tool/tool_generator.rb +36 -0
  55. data/lib/sprout/library.rb +111 -0
  56. data/lib/sprout/log.rb +1 -0
  57. data/lib/sprout/platform.rb +71 -0
  58. data/lib/sprout/process_runner.rb +80 -40
  59. data/lib/sprout/progress_bar.rb +341 -0
  60. data/lib/sprout/rdoc_parser.rb +91 -0
  61. data/lib/sprout/remote_file_loader.rb +72 -50
  62. data/lib/sprout/remote_file_target.rb +44 -152
  63. data/lib/sprout/ruby_feature.rb +167 -0
  64. data/lib/sprout/specification.rb +197 -0
  65. data/lib/sprout/string.rb +19 -0
  66. data/lib/sprout/system.rb +35 -0
  67. data/lib/sprout/system/base_system.rb +225 -0
  68. data/lib/sprout/system/java_system.rb +9 -0
  69. data/lib/sprout/system/osx_system.rb +26 -0
  70. data/lib/sprout/system/unix_system.rb +72 -0
  71. data/lib/sprout/system/vista_system.rb +16 -0
  72. data/lib/sprout/system/win_nix_system.rb +41 -0
  73. data/lib/sprout/system/win_system.rb +76 -0
  74. data/lib/sprout/test/sprout_test_case.rb +211 -0
  75. data/lib/sprout/version.rb +9 -4
  76. data/rakefile.rb +85 -144
  77. data/script/console +10 -0
  78. data/script/destroy +14 -0
  79. data/script/generate +14 -0
  80. data/sprout.gemspec +26 -0
  81. data/test/fixtures/archive_unpacker/copyable/some_file.exe +0 -0
  82. data/test/fixtures/archive_unpacker/copyable/some_file.rb +0 -0
  83. data/test/fixtures/archive_unpacker/copyable/some_file.swc +0 -0
  84. data/test/fixtures/archive_unpacker/tgz/some folder.tgz +0 -0
  85. data/test/fixtures/archive_unpacker/tgz/some_file.tgz +0 -0
  86. data/test/fixtures/archive_unpacker/zip/some folder.zip +0 -0
  87. data/test/fixtures/archive_unpacker/zip/some_file.zip +0 -0
  88. data/test/fixtures/examples/app_generator.rb +127 -0
  89. data/test/fixtures/examples/echo_inputs.rb +151 -0
  90. data/test/fixtures/executable/echochamber_gem/bin/echochamber +3 -0
  91. data/test/fixtures/executable/echochamber_gem/echo_chamber.rb +10 -0
  92. data/test/fixtures/executable/flex3sdk_gem/flex3sdk.rb +11 -0
  93. data/test/fixtures/executable/flex3sdk_gem/mxmlc +3 -0
  94. data/test/fixtures/executable/flex3sdk_gem/mxmlc.bat +3 -0
  95. data/test/fixtures/executable/mxmlc.rb +805 -0
  96. data/test/fixtures/executable/params/input.as +0 -0
  97. data/test/fixtures/executable/params/input2.as +0 -0
  98. data/test/fixtures/executable/params/input3.as +0 -0
  99. data/test/fixtures/executable/params/mxmlc +5 -0
  100. data/test/fixtures/executable/path with spaces/input.as b/data/test/fixtures/executable/path with → spaces/input.as +0 -0
  101. data/test/fixtures/executable/path with spaces/input2.as b/data/test/fixtures/executable/path with → spaces/input2.as +0 -0
  102. data/test/fixtures/executable/path with spaces/input3.as b/data/test/fixtures/executable/path with → spaces/input3.as +0 -0
  103. data/test/fixtures/executable/paths/folder1/file1 +0 -0
  104. data/test/fixtures/executable/paths/folder1/file2 +0 -0
  105. data/test/fixtures/executable/paths/folder1/file3 +0 -0
  106. data/test/fixtures/executable/paths/folder2/file4 +0 -0
  107. data/test/fixtures/executable/paths/folder2/file5 +0 -0
  108. data/test/fixtures/executable/paths/folder3/file6 +0 -0
  109. data/test/fixtures/executable/src/Main.as +0 -0
  110. data/test/fixtures/executable/windows_line_endings +47 -0
  111. data/test/fixtures/generators/song_generator.rb +11 -0
  112. data/test/fixtures/generators/song_subclass/least_favorite.rb +10 -0
  113. data/test/fixtures/generators/song_subclass/templates/Song.txt +3 -0
  114. data/test/fixtures/generators/temp_generator.rb +24 -0
  115. data/test/fixtures/generators/templates/Main.as +9 -0
  116. data/test/fixtures/generators/templates/OtherFileTemplate +1 -0
  117. data/test/fixtures/generators/templates/SomeFile +1 -0
  118. data/test/fixtures/generators/templates/SomeSubclassFile +2 -0
  119. data/test/fixtures/generators/templates/Song.txt +3 -0
  120. data/test/fixtures/generators/templates/destroy +0 -0
  121. data/test/fixtures/generators/templates/generate +0 -0
  122. data/test/fixtures/library/archive/Archive.swc +0 -0
  123. data/test/fixtures/library/sources/lib/a/A.as +0 -0
  124. data/test/fixtures/library/sources/lib/b/B.as +0 -0
  125. data/test/fixtures/library/sources/src/Source.as +0 -0
  126. data/test/fixtures/process_runner/chmod_script.sh +3 -0
  127. data/test/fixtures/process_runner/dir with spaces/chmod_script.sh +3 -0
  128. data/test/fixtures/process_runner/failure +5 -0
  129. data/test/fixtures/process_runner/success +4 -0
  130. data/test/fixtures/remote_file_loader/md5/echochamber-test.zip +0 -0
  131. data/test/fixtures/remote_file_loader/md5/file_with_known_md5 +0 -0
  132. data/test/fixtures/remote_file_target/bin/echochamber +3 -0
  133. data/test/fixtures/remote_file_target/bin/echochamber.bat +3 -0
  134. data/test/fixtures/remote_file_target/echochamber-test.zip +0 -0
  135. data/test/fixtures/specification/asunit4.rb +25 -0
  136. data/test/fixtures/specification/ext/AsUnit-4.1.pre.swc +0 -0
  137. data/test/fixtures/specification/flashplayer.rb +30 -0
  138. data/test/fixtures/specification/flex4sdk.rb +72 -0
  139. data/test/fixtures/specification/flexunit4.sproutspec +17 -0
  140. data/test/fixtures/specification/lib/as3reflection/Reflection.as +0 -0
  141. data/test/fixtures/specification/src/AsUnit.as +0 -0
  142. data/test/fixtures/user/mxmlc_crlf +3 -0
  143. data/test/unit/archive_unpacker_test.rb +108 -0
  144. data/test/unit/boolean_param_test.rb +38 -0
  145. data/test/unit/executable_option_parser_test.rb +142 -0
  146. data/test/unit/executable_param_test.rb +76 -0
  147. data/test/unit/executable_test.rb +237 -0
  148. data/test/unit/fake_executable_task.rb +22 -0
  149. data/test/unit/fake_other_executable.rb +20 -0
  150. data/test/unit/fake_process_runner.rb +29 -0
  151. data/test/unit/file_param_test.rb +61 -0
  152. data/test/unit/file_target_test.rb +42 -0
  153. data/test/unit/files_param_test.rb +72 -0
  154. data/test/unit/generator_generator_test.rb +85 -0
  155. data/test/unit/generator_test.rb +333 -0
  156. data/test/unit/library_generator_test.rb +41 -0
  157. data/test/unit/library_test.rb +88 -0
  158. data/test/unit/osx_system_test.rb +20 -0
  159. data/test/unit/path_param_test.rb +43 -0
  160. data/test/unit/paths_param_test.rb +53 -0
  161. data/test/unit/platform_test.rb +76 -0
  162. data/test/unit/process_runner_test.rb +104 -0
  163. data/test/unit/rdoc_parser_test.rb +15 -0
  164. data/test/unit/remote_file_loader_test.rb +34 -0
  165. data/test/unit/remote_file_target_test.rb +105 -0
  166. data/test/unit/ruby_feature_test.rb +108 -0
  167. data/test/unit/ruby_generator_test.rb +70 -0
  168. data/test/unit/specification_test.rb +73 -0
  169. data/test/unit/sprout_test.rb +170 -0
  170. data/test/unit/sprout_test_helper.rb +18 -0
  171. data/test/unit/string_param_test.rb +19 -0
  172. data/test/unit/string_test.rb +20 -0
  173. data/test/unit/strings_param_test.rb +27 -0
  174. data/test/unit/test_helper.rb +1 -0
  175. data/test/unit/tool_generator_test.rb +43 -0
  176. data/test/unit/unix_system_test.rb +52 -0
  177. data/test/unit/user_test.rb +147 -0
  178. data/test/unit/vista_system_test.rb +40 -0
  179. data/test/unit/win_nix_system_test.rb +26 -0
  180. data/test/unit/win_system_test.rb +61 -0
  181. metadata +318 -113
  182. data/doc/Bundle +0 -14
  183. data/doc/Generator +0 -35
  184. data/doc/Library +0 -63
  185. data/doc/Task +0 -21
  186. data/doc/Tool +0 -20
  187. data/lib/platform.rb +0 -113
  188. data/lib/progress_bar.rb +0 -354
  189. data/lib/sprout/builder.rb +0 -51
  190. data/lib/sprout/bundle_resolver.rb +0 -349
  191. data/lib/sprout/commands/generate.rb +0 -9
  192. data/lib/sprout/dynamic_accessors.rb +0 -40
  193. data/lib/sprout/general_tasks.rb +0 -6
  194. data/lib/sprout/generator.rb +0 -7
  195. data/lib/sprout/generator/base_mixins.rb +0 -186
  196. data/lib/sprout/generator/named_base.rb +0 -227
  197. data/lib/sprout/project_model.rb +0 -278
  198. data/lib/sprout/simple_resolver.rb +0 -88
  199. data/lib/sprout/tasks/erb_resolver.rb +0 -118
  200. data/lib/sprout/tasks/gem_wrap_task.rb +0 -214
  201. data/lib/sprout/tasks/git_task.rb +0 -134
  202. data/lib/sprout/tasks/library_task.rb +0 -118
  203. data/lib/sprout/tasks/sftp_task.rb +0 -248
  204. data/lib/sprout/tasks/ssh_task.rb +0 -153
  205. data/lib/sprout/tasks/tool_task.rb +0 -836
  206. data/lib/sprout/tasks/zip_task.rb +0 -158
  207. data/lib/sprout/tool_task_model.rb +0 -19
  208. data/lib/sprout/user.rb +0 -415
  209. data/lib/sprout/version_file.rb +0 -89
  210. data/lib/sprout/zip_util.rb +0 -61
  211. 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,10 @@
1
+
2
+ module Sprout
3
+
4
+ module Executable
5
+
6
+ # Concrete param object for numberic values
7
+ class Number < Param; end
8
+ end
9
+ end
10
+
@@ -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
+