sprout 1.0.32.pre → 1.0.35.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 (208) hide show
  1. data/Gemfile +2 -1
  2. data/Gemfile.lock +4 -2
  3. data/README.textile +12 -13
  4. data/VERSION +1 -0
  5. data/doc/Dir.html +288 -0
  6. data/doc/Rake/Task.html +184 -0
  7. data/doc/Sprout.html +144 -0
  8. data/doc/Sprout/ArchiveUnpacker.html +1246 -0
  9. data/doc/Sprout/Base.html +126 -0
  10. data/doc/Sprout/Base/ClassMethods.html +434 -0
  11. data/doc/Sprout/Concern.html +353 -0
  12. data/doc/Sprout/Daemon.html +166 -0
  13. data/doc/Sprout/Daemon/ClassMethods.html +244 -0
  14. data/doc/Sprout/Daemon/InstanceMethods.html +601 -0
  15. data/doc/Sprout/Errors.html +101 -0
  16. data/doc/Sprout/Errors/ArchiveUnpackerError.html +125 -0
  17. data/doc/Sprout/Errors/DestinationExistsError.html +133 -0
  18. data/doc/Sprout/Errors/DuplicateMemberError.html +132 -0
  19. data/doc/Sprout/Errors/ExecutableError.html +125 -0
  20. data/doc/Sprout/Errors/ExecutableRegistrationError.html +132 -0
  21. data/doc/Sprout/Errors/ExecutionError.html +121 -0
  22. data/doc/Sprout/Errors/GeneratorError.html +125 -0
  23. data/doc/Sprout/Errors/InvalidArgumentError.html +132 -0
  24. data/doc/Sprout/Errors/LoadError.html +121 -0
  25. data/doc/Sprout/Errors/MissingArgumentError.html +132 -0
  26. data/doc/Sprout/Errors/MissingExecutableError.html +132 -0
  27. data/doc/Sprout/Errors/MissingGeneratorError.html +132 -0
  28. data/doc/Sprout/Errors/MissingTemplateError.html +132 -0
  29. data/doc/Sprout/Errors/ProcessRunnerError.html +121 -0
  30. data/doc/Sprout/Errors/RemoteFileLoaderError.html +110 -0
  31. data/doc/Sprout/Errors/SproutError.html +114 -0
  32. data/doc/Sprout/Errors/UnknownArchiveType.html +122 -0
  33. data/doc/Sprout/Errors/UsageError.html +121 -0
  34. data/doc/Sprout/Errors/ValidationError.html +121 -0
  35. data/doc/Sprout/Errors/VersionRequirementNotMetError.html +121 -0
  36. data/doc/Sprout/Executable.html +173 -0
  37. data/doc/Sprout/Executable/Boolean.html +483 -0
  38. data/doc/Sprout/Executable/ClassMethods.html +417 -0
  39. data/doc/Sprout/Executable/CollectionParam.html +483 -0
  40. data/doc/Sprout/Executable/FileParam.html +484 -0
  41. data/doc/Sprout/Executable/Files.html +292 -0
  42. data/doc/Sprout/Executable/InstanceMethods.html +2006 -0
  43. data/doc/Sprout/Executable/Number.html +141 -0
  44. data/doc/Sprout/Executable/Param.html +2818 -0
  45. data/doc/Sprout/Executable/ParameterFactory.html +232 -0
  46. data/doc/Sprout/Executable/Path.html +223 -0
  47. data/doc/Sprout/Executable/Paths.html +253 -0
  48. data/doc/Sprout/Executable/StringParam.html +213 -0
  49. data/doc/Sprout/Executable/Strings.html +167 -0
  50. data/doc/Sprout/Executable/Url.html +160 -0
  51. data/doc/Sprout/Executable/Urls.html +170 -0
  52. data/doc/Sprout/FileTarget.html +1109 -0
  53. data/doc/Sprout/Generator.html +689 -0
  54. data/doc/Sprout/Generator/Base.html +1626 -0
  55. data/doc/Sprout/Generator/Command.html +690 -0
  56. data/doc/Sprout/Generator/DirectoryManifest.html +476 -0
  57. data/doc/Sprout/Generator/FileManifest.html +572 -0
  58. data/doc/Sprout/Generator/Manifest.html +377 -0
  59. data/doc/Sprout/Generator/TemplateManifest.html +196 -0
  60. data/doc/Sprout/GeneratorGenerator.html +1018 -0
  61. data/doc/Sprout/Library.html +1141 -0
  62. data/doc/Sprout/LibraryGenerator.html +309 -0
  63. data/doc/Sprout/Log.html +496 -0
  64. data/doc/Sprout/MXMLC.html +6373 -0
  65. data/doc/Sprout/Platform.html +714 -0
  66. data/doc/Sprout/ProcessRunner.html +1352 -0
  67. data/doc/Sprout/ProgressBar.html +376 -0
  68. data/doc/Sprout/ProgressBarImpl.html +2119 -0
  69. data/doc/Sprout/ProgressBarManager.html +434 -0
  70. data/doc/Sprout/ProgressBarOutputStream.html +416 -0
  71. data/doc/Sprout/RDocParser.html +211 -0
  72. data/doc/Sprout/RemoteFileLoader.html +172 -0
  73. data/doc/Sprout/RemoteFileTarget.html +679 -0
  74. data/doc/Sprout/ReversedProgressBar.html +194 -0
  75. data/doc/Sprout/RubyFeature.html +155 -0
  76. data/doc/Sprout/RubyFeature/ClassMethods.html +1065 -0
  77. data/doc/Sprout/RubyGenerator.html +764 -0
  78. data/doc/Sprout/Specification.html +767 -0
  79. data/doc/Sprout/System.html +191 -0
  80. data/doc/Sprout/System/BaseSystem.html +1455 -0
  81. data/doc/Sprout/System/JavaSystem.html +122 -0
  82. data/doc/Sprout/System/OSXSystem.html +335 -0
  83. data/doc/Sprout/System/ThreadMock.html +193 -0
  84. data/doc/Sprout/System/UnixSystem.html +584 -0
  85. data/doc/Sprout/System/VistaSystem.html +251 -0
  86. data/doc/Sprout/System/WinNixSystem.html +325 -0
  87. data/doc/Sprout/System/WinSystem.html +571 -0
  88. data/doc/Sprout/ToolGenerator.html +931 -0
  89. data/doc/Sprout/VERSION.html +128 -0
  90. data/doc/SproutTestCase.html +1412 -0
  91. data/doc/String.html +286 -0
  92. data/doc/_index.html +1035 -0
  93. data/doc/class_list.html +36 -0
  94. data/doc/css/common.css +1 -0
  95. data/doc/css/full_list.css +53 -0
  96. data/doc/css/style.css +310 -0
  97. data/doc/file.README.html +96 -0
  98. data/doc/file.archive_unpacker.html +288 -0
  99. data/doc/file.base.html +208 -0
  100. data/doc/file.base_system.html +278 -0
  101. data/doc/file.boolean.html +135 -0
  102. data/doc/file.collection_param.html +139 -0
  103. data/doc/file.command.html +126 -0
  104. data/doc/file.concern.html +136 -0
  105. data/doc/file.daemon.html +309 -0
  106. data/doc/file.dir.html +76 -0
  107. data/doc/file.directory_manifest.html +122 -0
  108. data/doc/file.errors.html +147 -0
  109. data/doc/file.executable.html +638 -0
  110. data/doc/file.file_manifest.html +109 -0
  111. data/doc/file.file_param.html +120 -0
  112. data/doc/file.file_target.html +140 -0
  113. data/doc/file.files.html +85 -0
  114. data/doc/file.generator.html +296 -0
  115. data/doc/file.generator_class.html +72 -0
  116. data/doc/file.generator_generator.html +137 -0
  117. data/doc/file.generator_test.html +92 -0
  118. data/doc/file.generator_test_helper.html +67 -0
  119. data/doc/file.java_system.html +62 -0
  120. data/doc/file.library.html +291 -0
  121. data/doc/file.library_generator.html +74 -0
  122. data/doc/file.log.html +100 -0
  123. data/doc/file.manifest.html +67 -0
  124. data/doc/file.mxmlc.html +740 -0
  125. data/doc/file.number.html +67 -0
  126. data/doc/file.osx_system.html +79 -0
  127. data/doc/file.param.html +491 -0
  128. data/doc/file.parameter_factory.html +119 -0
  129. data/doc/file.path.html +81 -0
  130. data/doc/file.paths.html +80 -0
  131. data/doc/file.platform.html +124 -0
  132. data/doc/file.process_runner.html +224 -0
  133. data/doc/file.progress_bar.html +390 -0
  134. data/doc/file.rdoc_parser.html +145 -0
  135. data/doc/file.remote_file_loader.html +117 -0
  136. data/doc/file.remote_file_target.html +176 -0
  137. data/doc/file.ruby_base.html +64 -0
  138. data/doc/file.ruby_feature.html +244 -0
  139. data/doc/file.ruby_generator.html +118 -0
  140. data/doc/file.ruby_input.html +62 -0
  141. data/doc/file.ruby_test_case.html +78 -0
  142. data/doc/file.ruby_test_helper.html +61 -0
  143. data/doc/file.specification.html +248 -0
  144. data/doc/file.sprout.html +64 -0
  145. data/doc/file.sprout_test_case.html +280 -0
  146. data/doc/file.string.html +72 -0
  147. data/doc/file.string_param.html +76 -0
  148. data/doc/file.strings.html +71 -0
  149. data/doc/file.system.html +86 -0
  150. data/doc/file.template_manifest.html +67 -0
  151. data/doc/file.tool.html +92 -0
  152. data/doc/file.tool_generator.html +90 -0
  153. data/doc/file.unix_system.html +128 -0
  154. data/doc/file.url.html +71 -0
  155. data/doc/file.urls.html +70 -0
  156. data/doc/file.version.html +71 -0
  157. data/doc/file.vista_system.html +69 -0
  158. data/doc/file.win_nix_system.html +88 -0
  159. data/doc/file.win_system.html +129 -0
  160. data/doc/file_list.html +230 -0
  161. data/doc/frames.html +13 -0
  162. data/doc/index.html +96 -0
  163. data/doc/js/app.js +202 -0
  164. data/doc/js/full_list.js +149 -0
  165. data/doc/js/jquery.js +154 -0
  166. data/doc/method_list.html +3355 -0
  167. data/doc/top-level-namespace.html +192 -0
  168. data/lib/sprout/archive_unpacker.rb +203 -137
  169. data/lib/sprout/base.rb +38 -11
  170. data/lib/sprout/concern.rb +51 -0
  171. data/lib/sprout/daemon.rb +256 -0
  172. data/lib/sprout/executable.rb +40 -11
  173. data/lib/sprout/executable/boolean.rb +47 -1
  174. data/lib/sprout/executable/collection_param.rb +33 -1
  175. data/lib/sprout/executable/file_param.rb +16 -3
  176. data/lib/sprout/executable/files.rb +5 -0
  177. data/lib/sprout/executable/number.rb +5 -1
  178. data/lib/sprout/executable/param.rb +232 -16
  179. data/lib/sprout/executable/parameter_factory.rb +39 -1
  180. data/lib/sprout/executable/path.rb +7 -1
  181. data/lib/sprout/executable/paths.rb +6 -1
  182. data/lib/sprout/executable/string_param.rb +8 -1
  183. data/lib/sprout/executable/strings.rb +7 -1
  184. data/lib/sprout/executable/url.rb +8 -1
  185. data/lib/sprout/executable/urls.rb +7 -1
  186. data/lib/sprout/file_target.rb +11 -11
  187. data/lib/sprout/generator.rb +244 -0
  188. data/lib/sprout/generator/base.rb +0 -94
  189. data/lib/sprout/generators/generator/generator_generator.rb +35 -1
  190. data/lib/sprout/generators/generator/templates/generator_class.rb +3 -3
  191. data/lib/sprout/library.rb +75 -0
  192. data/lib/sprout/log.rb +11 -12
  193. data/lib/sprout/process_runner.rb +29 -9
  194. data/lib/sprout/remote_file_target.rb +20 -9
  195. data/lib/sprout/system/base_system.rb +11 -3
  196. data/lib/sprout/test/sprout_test_case.rb +1 -0
  197. data/lib/sprout/version.rb +7 -11
  198. data/rakefile.rb +7 -12
  199. data/script/add_param_handler.rb +43 -0
  200. data/sprout.gemspec +2 -3
  201. data/test/fixtures/executable/fdb.rb +764 -0
  202. data/test/fixtures/executable/flex3sdk_gem/fdb +60 -0
  203. data/test/fixtures/executable/mxmlc.rb +9 -11
  204. data/test/unit/daemon_test.rb +61 -0
  205. data/test/unit/process_runner_test.rb +21 -0
  206. data/test/unit/remote_file_target_test.rb +45 -11
  207. data/test/unit/sprout_test_helper.rb +1 -1
  208. metadata +210 -29
@@ -0,0 +1,117 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>File: remote_file_loader</title>
7
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
8
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+
10
+ <script type="text/javascript" charset="utf-8">
11
+ relpath = '';
12
+ if (relpath != '') relpath += '/';
13
+ </script>
14
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
15
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
16
+
17
+ </head>
18
+ <body>
19
+ <script type="text/javascript" charset="utf-8">
20
+ if (window.top.frames.main) document.body.className = 'frames';
21
+ </script>
22
+
23
+ <div id="header">
24
+ <div id="menu">
25
+
26
+ <a href="_index.html" title="Index">Index</a> &raquo;
27
+ <span class="title">File: remote_file_loader</span>
28
+
29
+
30
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
31
+ </div>
32
+
33
+ <div id="search">
34
+ <a id="class_list_link" href="#">Class List</a>
35
+ <a id="method_list_link" href="#">Method List</a>
36
+ <a id ="file_list_link" href="#">File List</a>
37
+ </div>
38
+
39
+ <div class="clear"></div>
40
+ </div>
41
+
42
+ <iframe id="search_frame"></iframe>
43
+
44
+ <div id="content"><div id='filecontents'>
45
+ <p>module Sprout</p>
46
+
47
+ <pre class="code"><span class='comment'>##
48
+ </span><span class='comment'># This class is used to load remote files from the network.
49
+ </span><span class='kw'>class</span> <span class='const'>RemoteFileLoader</span>
50
+
51
+ <span class='kw'>class</span> <span class='op'>&lt;&lt;</span> <span class='kw'>self</span>
52
+
53
+ <span class='kw'>def</span> <span class='id load'>load</span> <span class='id uri'>uri</span><span class='comma'>,</span> <span class='id md5'>md5</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id display_name'>display_name</span><span class='op'>=</span><span class='kw'>nil</span>
54
+ <span class='id fetch'>fetch</span> <span class='id uri'>uri</span><span class='period'>.</span><span class='id to_s'>to_s</span><span class='comma'>,</span> <span class='id display_name'>display_name</span>
55
+ <span class='kw'>end</span>
56
+
57
+ <span class='id private'>private</span>
58
+
59
+ <span class='kw'>def</span> <span class='id fetch'>fetch</span> <span class='id uri'>uri</span><span class='comma'>,</span> <span class='id display_name'>display_name</span><span class='op'>=</span><span class='kw'>nil</span>
60
+ <span class='kw'>begin</span>
61
+ <span class='kw'>return</span> <span class='id open_uri'>open_uri</span> <span class='id uri'>uri</span><span class='comma'>,</span> <span class='id display_name'>display_name</span>
62
+ <span class='kw'>rescue</span> <span class='const'>SocketError</span> <span class='op'>=&gt;</span> <span class='id sock_err'>sock_err</span>
63
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>RemoteFileLoaderError</span><span class='period'>.</span><span class='id new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>[ERROR] Failed to load file from: '</span><span class='embexpr_beg'>#{</span><span class='id uri'>uri</span><span class='period'>.</span><span class='id to_s'>to_s</span><span class='rbrace'>}</span><span class='tstring_content'>' - Please check that your machine has a connection to the internet.\n[REMOTE ERROR] </span><span class='embexpr_beg'>#{</span><span class='id sock_err'>sock_err</span><span class='period'>.</span><span class='id to_s'>to_s</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
64
+ <span class='kw'>rescue</span> <span class='const'>OpenURI</span><span class='op'>::</span><span class='const'>HTTPError</span> <span class='op'>=&gt;</span> <span class='id http_err'>http_err</span>
65
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>RemoteFileLoaderError</span><span class='period'>.</span><span class='id new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>[ERROR] Failed to load file from: '</span><span class='embexpr_beg'>#{</span><span class='id uri'>uri</span><span class='period'>.</span><span class='id to_s'>to_s</span><span class='rbrace'>}</span><span class='tstring_content'>'\n[REMOTE ERROR] </span><span class='embexpr_beg'>#{</span><span class='id http_err'>http_err</span><span class='period'>.</span><span class='id io'>io</span><span class='period'>.</span><span class='id read'>read</span><span class='period'>.</span><span class='id strip'>strip</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
66
+ <span class='kw'>rescue</span> <span class='const'>Errno</span><span class='op'>::</span><span class='const'>ECONNREFUSED</span> <span class='op'>=&gt;</span> <span class='id econ_err'>econ_err</span>
67
+ <span class='id raise'>raise</span> <span class='const'>Errno</span><span class='op'>::</span><span class='const'>ECONNREFUSED</span><span class='period'>.</span><span class='id new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>[ERROR] Connection refused at: '</span><span class='embexpr_beg'>#{</span><span class='id uri'>uri</span><span class='period'>.</span><span class='id to_s'>to_s</span><span class='rbrace'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
68
+ <span class='kw'>end</span>
69
+ <span class='kw'>end</span>
70
+
71
+ <span class='id private'>private</span>
72
+
73
+ <span class='kw'>def</span> <span class='id open_uri'>open_uri</span> <span class='id uri'>uri</span><span class='comma'>,</span> <span class='id display_name'>display_name</span><span class='op'>=</span><span class='kw'>nil</span>
74
+ <span class='id uri'>uri</span> <span class='op'>=</span> <span class='const'>URI</span><span class='period'>.</span><span class='id parse'>parse</span><span class='lparen'>(</span><span class='id uri'>uri</span><span class='rparen'>)</span>
75
+ <span class='id progress'>progress</span> <span class='op'>=</span> <span class='kw'>nil</span>
76
+ <span class='id response'>response</span> <span class='op'>=</span> <span class='kw'>nil</span>
77
+ <span class='id display_name'>display_name</span> <span class='op'>||=</span> <span class='id uri'>uri</span><span class='period'>.</span><span class='id path'>path</span><span class='period'>.</span><span class='id split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id pop'>pop</span>
78
+
79
+ <span class='comment'># Why was this here? Shouldn't the 'open' command work for other
80
+ </span> <span class='comment'># protocols like https?
81
+ </span> <span class='comment'>#
82
+ </span> <span class='comment'>#message = &quot;The RemoteFileTask failed for #{display_name}. We can only handle HTTP requests at this time, it seems you were trying: '#{uri.scheme}'&quot;
83
+ </span> <span class='comment'>#raise Sprout::Errors::RemoteFileLoaderError.new(message) if uri.scheme != 'http' || uri.scheme != 'https'
84
+ </span>
85
+ <span class='comment'># This is the strangest implementation I've seen in Ruby yet.
86
+ </span> <span class='comment'># Double lambda arguments with a block to top it off?! Gawsh.
87
+ </span> <span class='id open'>open</span><span class='lparen'>(</span><span class='id uri'>uri</span><span class='period'>.</span><span class='id to_s'>to_s</span><span class='comma'>,</span>
88
+ <span class='symbol'>:content_length_proc</span> <span class='op'>=&gt;</span> <span class='id lambda'>lambda</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id length'>length</span><span class='op'>|</span>
89
+ <span class='id length'>length</span> <span class='op'>||=</span> <span class='int'>0</span>
90
+ <span class='id progress'>progress</span> <span class='op'>=</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>ProgressBar</span><span class='period'>.</span><span class='id new'>new</span><span class='lparen'>(</span><span class='id display_name'>display_name</span><span class='comma'>,</span> <span class='id length'>length</span><span class='rparen'>)</span>
91
+ <span class='id progress'>progress</span><span class='period'>.</span><span class='id file_transfer_mode'>file_transfer_mode</span>
92
+ <span class='id progress'>progress</span><span class='period'>.</span><span class='id set'>set</span><span class='lparen'>(</span><span class='int'>0</span><span class='rparen'>)</span>
93
+ <span class='rbrace'>}</span><span class='comma'>,</span>
94
+ <span class='symbol'>:progress_proc</span> <span class='op'>=&gt;</span> <span class='id lambda'>lambda</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id length'>length</span><span class='op'>|</span>
95
+ <span class='id progress'>progress</span><span class='period'>.</span><span class='id set'>set</span> <span class='id length'>length</span> <span class='kw'>if</span> <span class='id progress'>progress</span>
96
+ <span class='rbrace'>}</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id f'>f</span><span class='op'>|</span>
97
+ <span class='id response'>response</span> <span class='op'>=</span> <span class='id f'>f</span><span class='period'>.</span><span class='id read'>read</span>
98
+ <span class='id progress'>progress</span><span class='period'>.</span><span class='id finish'>finish</span>
99
+ <span class='kw'>end</span>
100
+
101
+ <span class='id response'>response</span>
102
+ <span class='kw'>end</span>
103
+
104
+ <span class='kw'>end</span>
105
+ <span class='kw'>end</span></pre>
106
+
107
+ <p>end</p>
108
+ </div></div>
109
+
110
+ <div id="footer">
111
+ Generated on Wed Dec 22 11:58:32 2010 by
112
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
113
+ 0.6.3 (ruby-1.9.2).
114
+ </div>
115
+
116
+ </body>
117
+ </html>
@@ -0,0 +1,176 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>File: remote_file_target</title>
7
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
8
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+
10
+ <script type="text/javascript" charset="utf-8">
11
+ relpath = '';
12
+ if (relpath != '') relpath += '/';
13
+ </script>
14
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
15
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
16
+
17
+ </head>
18
+ <body>
19
+ <script type="text/javascript" charset="utf-8">
20
+ if (window.top.frames.main) document.body.className = 'frames';
21
+ </script>
22
+
23
+ <div id="header">
24
+ <div id="menu">
25
+
26
+ <a href="_index.html" title="Index">Index</a> &raquo;
27
+ <span class="title">File: remote_file_target</span>
28
+
29
+
30
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
31
+ </div>
32
+
33
+ <div id="search">
34
+ <a id="class_list_link" href="#">Class List</a>
35
+ <a id="method_list_link" href="#">Method List</a>
36
+ <a id ="file_list_link" href="#">File List</a>
37
+ </div>
38
+
39
+ <div class="clear"></div>
40
+ </div>
41
+
42
+ <iframe id="search_frame"></iframe>
43
+
44
+ <div id="content"><div id='filecontents'>
45
+ <p>require ‘digest/md5’</p>
46
+
47
+ <p>module Sprout</p>
48
+
49
+ <pre class="code"><span class='kw'>class</span> <span class='const'>RemoteFileTarget</span> <span class='op'>&lt;</span> <span class='const'>FileTarget</span>
50
+
51
+ <span class='id attr_accessor'>attr_accessor</span> <span class='symbol'>:archive_type</span>
52
+ <span class='id attr_accessor'>attr_accessor</span> <span class='symbol'>:url</span>
53
+ <span class='id attr_accessor'>attr_accessor</span> <span class='symbol'>:md5</span>
54
+
55
+ <span class='kw'>def</span> <span class='id validate'>validate</span>
56
+ <span class='kw'>super</span>
57
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>ValidationError</span><span class='period'>.</span><span class='id new'>new</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>RemoteFileTarget.url is a required field</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id url'>url</span><span class='period'>.</span><span class='id nil?'>nil?</span>
58
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>ValidationError</span><span class='period'>.</span><span class='id new'>new</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>RemoteFileTarget.md5 is a required field</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id md5'>md5</span><span class='period'>.</span><span class='id nil?'>nil?</span>
59
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>ValidationError</span><span class='period'>.</span><span class='id new'>new</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>RemoteFileTarget.archive_type is a required field</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id archive_type'>archive_type</span><span class='period'>.</span><span class='id nil?'>nil?</span>
60
+ <span class='kw'>end</span>
61
+
62
+ <span class='kw'>def</span> <span class='id resolve'>resolve</span>
63
+ <span class='id validate'>validate</span>
64
+ <span class='id load_unpack_or_ignore_archive'>load_unpack_or_ignore_archive</span>
65
+ <span class='kw'>self</span>
66
+ <span class='kw'>end</span>
67
+
68
+ <span class='comment'>##
69
+ </span> <span class='comment'># Do not cache this value...
70
+ </span> <span class='comment'>#
71
+ </span> <span class='comment'># This response can change over time IF:
72
+ </span> <span class='comment'># - The downloaded bytes do not match the expected MD5
73
+ </span> <span class='comment'># - AND the user confirms the prompt that they are OK with this
74
+ </span> <span class='kw'>def</span> <span class='id downloaded_file'>downloaded_file</span>
75
+ <span class='const'>File</span><span class='period'>.</span><span class='id join'>join</span><span class='lparen'>(</span><span class='const'>Sprout</span><span class='period'>.</span><span class='id cache'>cache</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id md5'>md5</span><span class='rbrace'>}</span><span class='tstring_content'>.</span><span class='embexpr_beg'>#{</span><span class='id archive_type'>archive_type</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
76
+ <span class='kw'>end</span>
77
+
78
+ <span class='kw'>def</span> <span class='id unpacked_file'>unpacked_file</span>
79
+ <span class='id upcased_pkg'>upcased_pkg</span> <span class='op'>=</span> <span class='id pkg_name'>pkg_name</span><span class='period'>.</span><span class='id upcase'>upcase</span>
80
+ <span class='id upcased_version'>upcased_version</span> <span class='op'>=</span> <span class='id pkg_version'>pkg_version</span><span class='period'>.</span><span class='id upcase'>upcase</span><span class='period'>.</span><span class='id gsub'>gsub</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>\.</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>_</span><span class='tstring_end'>'</span></span>
81
+ <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>SPROUT_</span><span class='embexpr_beg'>#{</span><span class='id upcased_pkg'>upcased_pkg</span><span class='rbrace'>}</span><span class='tstring_content'>_</span><span class='embexpr_beg'>#{</span><span class='id upcased_version'>upcased_version</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>||</span>
82
+ <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>SPROUT_</span><span class='embexpr_beg'>#{</span><span class='id upcased_pkg'>upcased_pkg</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>||</span>
83
+ <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id upcased_pkg'>upcased_pkg</span><span class='rbrace'>}</span><span class='tstring_content'>_</span><span class='embexpr_beg'>#{</span><span class='id upcased_version'>upcased_version</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>||</span>
84
+ <span class='const'>ENV</span><span class='lbracket'>[</span><span class='id upcased_pkg'>upcased_pkg</span><span class='rbracket'>]</span> <span class='op'>||</span>
85
+ <span class='const'>File</span><span class='period'>.</span><span class='id join'>join</span><span class='lparen'>(</span><span class='const'>Sprout</span><span class='period'>.</span><span class='id cache'>cache</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span><span class='comma'>,</span> <span class='id pkg_version'>pkg_version</span><span class='rparen'>)</span>
86
+ <span class='kw'>end</span>
87
+
88
+ <span class='id protected'>protected</span>
89
+
90
+ <span class='kw'>def</span> <span class='id logger'>logger</span>
91
+ <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Log</span>
92
+ <span class='kw'>end</span>
93
+
94
+ <span class='kw'>def</span> <span class='id expand_local_path'>expand_local_path</span> <span class='id path'>path</span>
95
+ <span class='const'>File</span><span class='period'>.</span><span class='id join'>join</span> <span class='id unpacked_file'>unpacked_file</span><span class='comma'>,</span> <span class='id path'>path</span>
96
+ <span class='kw'>end</span>
97
+
98
+ <span class='id private'>private</span>
99
+
100
+ <span class='kw'>def</span> <span class='id load_unpack_or_ignore_archive'>load_unpack_or_ignore_archive</span>
101
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='op'>!</span><span class='id unpacked_files_exist?'>unpacked_files_exist?</span><span class='rparen'>)</span>
102
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='op'>!</span><span class='const'>File</span><span class='period'>.</span><span class='id exists?'>exists?</span><span class='lparen'>(</span><span class='id downloaded_file'>downloaded_file</span><span class='rparen'>)</span><span class='rparen'>)</span>
103
+ <span class='id bytes'>bytes</span> <span class='op'>=</span> <span class='id download_archive'>download_archive</span>
104
+ <span class='id write_archive'>write_archive</span> <span class='id bytes'>bytes</span>
105
+ <span class='kw'>end</span>
106
+
107
+ <span class='comment'># If we *just* downloaded the file,
108
+ </span> <span class='comment'># use the bytes directly, otherwise
109
+ </span> <span class='comment'># read them off disk from a previous
110
+ </span> <span class='comment'># download attempt:
111
+ </span> <span class='id bytes'>bytes</span> <span class='op'>||=</span> <span class='const'>File</span><span class='period'>.</span><span class='id open'>open</span><span class='lparen'>(</span><span class='id downloaded_file'>downloaded_file</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>rb</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id read'>read</span>
112
+
113
+ <span class='kw'>if</span> <span class='id should_unpack?'>should_unpack?</span><span class='lparen'>(</span><span class='id bytes'>bytes</span><span class='comma'>,</span> <span class='id md5'>md5</span><span class='rparen'>)</span>
114
+ <span class='id unpack_archive'>unpack_archive</span>
115
+ <span class='kw'>end</span>
116
+ <span class='kw'>end</span>
117
+ <span class='kw'>end</span>
118
+
119
+ <span class='kw'>def</span> <span class='id unpacked_files_exist?'>unpacked_files_exist?</span>
120
+ <span class='const'>File</span><span class='period'>.</span><span class='id exists?'>exists?</span><span class='lparen'>(</span><span class='id unpacked_file'>unpacked_file</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='const'>Dir</span><span class='period'>.</span><span class='id empty?'>empty?</span><span class='lparen'>(</span><span class='id unpacked_file'>unpacked_file</span><span class='rparen'>)</span>
121
+ <span class='kw'>end</span>
122
+
123
+ <span class='kw'>def</span> <span class='id download_archive'>download_archive</span>
124
+ <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>RemoteFileLoader</span><span class='period'>.</span><span class='id load'>load</span> <span class='id url'>url</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span>
125
+ <span class='kw'>end</span>
126
+
127
+ <span class='kw'>def</span> <span class='id write_archive'>write_archive</span> <span class='id bytes'>bytes</span>
128
+ <span class='const'>FileUtils</span><span class='period'>.</span><span class='id mkdir_p'>mkdir_p</span> <span class='const'>File</span><span class='period'>.</span><span class='id dirname'>dirname</span><span class='lparen'>(</span><span class='id downloaded_file'>downloaded_file</span><span class='rparen'>)</span>
129
+ <span class='const'>File</span><span class='period'>.</span><span class='id open'>open</span> <span class='id downloaded_file'>downloaded_file</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>wb+</span><span class='tstring_end'>'</span></span> <span class='kw'>do</span> <span class='op'>|</span><span class='id f'>f</span><span class='op'>|</span>
130
+ <span class='id f'>f</span><span class='period'>.</span><span class='id write'>write</span> <span class='id bytes'>bytes</span>
131
+ <span class='kw'>end</span>
132
+ <span class='kw'>end</span>
133
+
134
+ <span class='kw'>def</span> <span class='id should_unpack?'>should_unpack?</span> <span class='id bytes'>bytes</span><span class='comma'>,</span> <span class='id expected_md5sum'>expected_md5sum</span>
135
+ <span class='kw'>if</span> <span class='id expected_md5sum'>expected_md5sum</span>
136
+ <span class='id downloaded_md5'>downloaded_md5</span> <span class='op'>=</span> <span class='const'>Digest</span><span class='op'>::</span><span class='const'>MD5</span><span class='period'>.</span><span class='id new'>new</span>
137
+ <span class='id downloaded_md5'>downloaded_md5</span> <span class='op'>&lt;&lt;</span> <span class='id bytes'>bytes</span>
138
+
139
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='id expected_md5sum'>expected_md5sum</span> <span class='op'>!=</span> <span class='id downloaded_md5'>downloaded_md5</span><span class='period'>.</span><span class='id hexdigest'>hexdigest</span><span class='rparen'>)</span>
140
+ <span class='kw'>return</span> <span class='id prompt_for_md5_failure'>prompt_for_md5_failure</span> <span class='id downloaded_md5'>downloaded_md5</span><span class='comma'>,</span> <span class='id expected_md5sum'>expected_md5sum</span>
141
+ <span class='kw'>end</span>
142
+ <span class='kw'>end</span>
143
+ <span class='kw'>return</span> <span class='kw'>true</span>
144
+ <span class='kw'>end</span>
145
+
146
+ <span class='kw'>def</span> <span class='id prompt_for_md5_failure'>prompt_for_md5_failure</span> <span class='id downloaded_md5'>downloaded_md5</span><span class='comma'>,</span> <span class='id expected_md5sum'>expected_md5sum</span>
147
+ <span class='id puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The MD5 Sum of the downloaded file (</span><span class='embexpr_beg'>#{</span><span class='id downloaded_md5'>downloaded_md5</span><span class='period'>.</span><span class='id hexdigest'>hexdigest</span><span class='rbrace'>}</span><span class='tstring_content'>) does not match what was expected (</span><span class='embexpr_beg'>#{</span><span class='id expected_md5sum'>expected_md5sum</span><span class='rbrace'>}</span><span class='tstring_content'>).</span><span class='tstring_end'>&quot;</span></span>
148
+ <span class='id puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Would you like to install anyway? [Yn]</span><span class='tstring_end'>&quot;</span></span>
149
+ <span class='id user_response'>user_response</span> <span class='op'>=</span> <span class='gvar'>$stdin</span><span class='period'>.</span><span class='id gets'>gets</span><span class='period'>.</span><span class='id chomp!'>chomp!</span>
150
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='id user_response'>user_response</span><span class='period'>.</span><span class='id downcase'>downcase</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>y</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
151
+ <span class='kw'>return</span> <span class='kw'>true</span>
152
+ <span class='kw'>else</span>
153
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>RemoteFileLoaderError</span><span class='period'>.</span><span class='id new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>MD5 Checksum failed</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
154
+ <span class='kw'>end</span>
155
+ <span class='kw'>end</span>
156
+
157
+ <span class='kw'>def</span> <span class='id unpack_archive'>unpack_archive</span>
158
+ <span class='id logger'>logger</span><span class='period'>.</span><span class='id puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unpacking archive at </span><span class='embexpr_beg'>#{</span><span class='id downloaded_file'>downloaded_file</span><span class='rbrace'>}</span><span class='tstring_content'> now. This can take anywhere from a few seconds to many minutes depending on your OS and the size of the archive.\n\nIf you're on windows, consider using this ample time to look into improving the zip utils in Ruby...</span><span class='tstring_end'>&quot;</span></span>
159
+ <span class='const'>FileUtils</span><span class='period'>.</span><span class='id mkdir_p'>mkdir_p</span> <span class='id unpacked_file'>unpacked_file</span>
160
+ <span class='id unpacker'>unpacker</span> <span class='op'>=</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>ArchiveUnpacker</span><span class='period'>.</span><span class='id new'>new</span>
161
+ <span class='id unpacker'>unpacker</span><span class='period'>.</span><span class='id unpack'>unpack</span> <span class='id downloaded_file'>downloaded_file</span><span class='comma'>,</span> <span class='id unpacked_file'>unpacked_file</span><span class='comma'>,</span> <span class='id archive_type'>archive_type</span>
162
+ <span class='kw'>end</span>
163
+
164
+ <span class='kw'>end</span></pre>
165
+
166
+ <p>end</p>
167
+ </div></div>
168
+
169
+ <div id="footer">
170
+ Generated on Wed Dec 22 11:58:32 2010 by
171
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
172
+ 0.6.3 (ruby-1.9.2).
173
+ </div>
174
+
175
+ </body>
176
+ </html>
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>File: ruby_base</title>
7
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
8
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+
10
+ <script type="text/javascript" charset="utf-8">
11
+ relpath = '';
12
+ if (relpath != '') relpath += '/';
13
+ </script>
14
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
15
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
16
+
17
+ </head>
18
+ <body>
19
+ <script type="text/javascript" charset="utf-8">
20
+ if (window.top.frames.main) document.body.className = 'frames';
21
+ </script>
22
+
23
+ <div id="header">
24
+ <div id="menu">
25
+
26
+ <a href="_index.html" title="Index">Index</a> &raquo;
27
+ <span class="title">File: ruby_base</span>
28
+
29
+
30
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
31
+ </div>
32
+
33
+ <div id="search">
34
+ <a id="class_list_link" href="#">Class List</a>
35
+ <a id="method_list_link" href="#">Method List</a>
36
+ <a id ="file_list_link" href="#">File List</a>
37
+ </div>
38
+
39
+ <div class="clear"></div>
40
+ </div>
41
+
42
+ <iframe id="search_frame"></iframe>
43
+
44
+ <div id="content"><div id='filecontents'>
45
+ <p>require ‘sprout’</p>
46
+
47
+ <p>module &lt;%= input.camel_case %&gt;</p>
48
+
49
+ <pre class="code"><span class='kw'>class</span> <span class='const'>Base</span>
50
+ <span class='id include'>include</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Executable</span>
51
+
52
+ <span class='kw'>end</span></pre>
53
+
54
+ <p>end</p>
55
+ </div></div>
56
+
57
+ <div id="footer">
58
+ Generated on Wed Dec 22 11:58:32 2010 by
59
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
60
+ 0.6.3 (ruby-1.9.2).
61
+ </div>
62
+
63
+ </body>
64
+ </html>
@@ -0,0 +1,244 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>File: ruby_feature</title>
7
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
8
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+
10
+ <script type="text/javascript" charset="utf-8">
11
+ relpath = '';
12
+ if (relpath != '') relpath += '/';
13
+ </script>
14
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
15
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
16
+
17
+ </head>
18
+ <body>
19
+ <script type="text/javascript" charset="utf-8">
20
+ if (window.top.frames.main) document.body.className = 'frames';
21
+ </script>
22
+
23
+ <div id="header">
24
+ <div id="menu">
25
+
26
+ <a href="_index.html" title="Index">Index</a> &raquo;
27
+ <span class="title">File: ruby_feature</span>
28
+
29
+
30
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
31
+ </div>
32
+
33
+ <div id="search">
34
+ <a id="class_list_link" href="#">Class List</a>
35
+ <a id="method_list_link" href="#">Method List</a>
36
+ <a id ="file_list_link" href="#">File List</a>
37
+ </div>
38
+
39
+ <div class="clear"></div>
40
+ </div>
41
+
42
+ <iframe id="search_frame"></iframe>
43
+
44
+ <div id="content"><div id='filecontents'>
45
+ <p>module Sprout</p>
46
+
47
+ <pre class="code"><span class='comment'>##
48
+ </span><span class='comment'># This class represents a Feature that is written in
49
+ </span><span class='comment'># Ruby code that exists on the other side of the
50
+ </span><span class='comment'># Ruby load path.
51
+ </span><span class='comment'>#
52
+ </span><span class='comment'># The idea here, is that one can +include+ the Sprout::RubyFeature
53
+ </span><span class='comment'># module into their concrete class, and then accept
54
+ </span><span class='comment'># requests to +register+ and +load+ from clients that
55
+ </span><span class='comment'># are interested in pluggable features.
56
+ </span><span class='comment'>#
57
+ </span><span class='comment'># An example is as follows:
58
+ </span><span class='comment'>#
59
+ </span><span class='comment'># require 'sprout'
60
+ </span><span class='comment'>#
61
+ </span><span class='comment'># class MyClass
62
+ </span><span class='comment'># include Sprout::RubyFeature
63
+ </span><span class='comment'># end
64
+ </span><span class='comment'>#
65
+ </span><span class='comment'># In some other Ruby file:
66
+ </span><span class='comment'>#
67
+ </span><span class='comment'># MyClass.load :other, 'other_gem', '&gt;= 1.0pre'
68
+ </span><span class='comment'>#
69
+ </span><span class='comment'># In the desired Ruby file:
70
+ </span><span class='comment'>#
71
+ </span><span class='comment'># class OtherClass
72
+ </span><span class='comment'># include Sprout::Executable
73
+ </span><span class='comment'>#
74
+ </span><span class='comment'># set :name, :other
75
+ </span><span class='comment'># set :pkg_name, 'other_gem'
76
+ </span><span class='comment'># set :pkg_version, '1.0.pre'
77
+ </span><span class='comment'>#
78
+ </span><span class='comment'># # do something...
79
+ </span><span class='comment'># end
80
+ </span><span class='comment'>#
81
+ </span><span class='comment'># MyClass.register OtherClass.new
82
+ </span><span class='comment'>#
83
+ </span><span class='kw'>module</span> <span class='const'>RubyFeature</span>
84
+
85
+ <span class='id extend'>extend</span> <span class='const'>Concern</span>
86
+
87
+ <span class='kw'>module</span> <span class='const'>ClassMethods</span>
88
+
89
+ <span class='comment'>##
90
+ </span> <span class='comment'># Register a new feature for future lookups
91
+ </span> <span class='kw'>def</span> <span class='id register'>register</span> <span class='id entity'>entity</span>
92
+ <span class='id validate_registration'>validate_registration</span> <span class='id entity'>entity</span>
93
+ <span class='id registered_entities'>registered_entities</span><span class='period'>.</span><span class='id unshift'>unshift</span> <span class='id entity'>entity</span>
94
+ <span class='id entity'>entity</span>
95
+ <span class='kw'>end</span>
96
+
97
+ <span class='comment'>##
98
+ </span> <span class='comment'># Load a feature by name.
99
+ </span> <span class='kw'>def</span> <span class='id load'>load</span> <span class='id name_or_names'>name_or_names</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id version_requirement'>version_requirement</span><span class='op'>=</span><span class='kw'>nil</span>
100
+ <span class='id entity'>entity</span> <span class='op'>=</span> <span class='id entity_for'>entity_for</span> <span class='id name_or_names'>name_or_names</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span><span class='comma'>,</span> <span class='id version_requirement'>version_requirement</span>
101
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id nil?'>nil?</span><span class='rparen'>)</span>
102
+ <span class='comment'># Try to require the pkg_name:
103
+ </span> <span class='id require_ruby_package'>require_ruby_package</span> <span class='id pkg_name'>pkg_name</span> <span class='kw'>unless</span> <span class='id pkg_name'>pkg_name</span><span class='period'>.</span><span class='id nil?'>nil?</span>
104
+ <span class='comment'># Update any entities that registered from our require:
105
+ </span> <span class='id update_registered_entities'>update_registered_entities</span>
106
+ <span class='comment'># search for the requested entity:
107
+ </span> <span class='id entity'>entity</span> <span class='op'>=</span> <span class='id entity_for'>entity_for</span> <span class='id name_or_names'>name_or_names</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span><span class='comma'>,</span> <span class='id version_requirement'>version_requirement</span>
108
+ <span class='kw'>end</span>
109
+
110
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id nil?'>nil?</span><span class='rparen'>)</span>
111
+ <span class='id message'>message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The requested entity: (</span><span class='embexpr_beg'>#{</span><span class='id name_or_names'>name_or_names</span><span class='rbrace'>}</span><span class='tstring_content'>) with pkg_name: (</span><span class='embexpr_beg'>#{</span><span class='id pkg_name'>pkg_name</span><span class='rbrace'>}</span><span class='tstring_content'>) and version: </span><span class='tstring_end'>&quot;</span></span>
112
+ <span class='id message'>message</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>(</span><span class='embexpr_beg'>#{</span><span class='id version_requirement'>version_requirement</span><span class='rbrace'>}</span><span class='tstring_content'>) does not appear to be loaded.</span><span class='tstring_end'>&quot;</span></span>
113
+ <span class='id message'>message</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span>
114
+ <span class='id message'>message</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>We did find (</span><span class='embexpr_beg'>#{</span><span class='id registered_entities'>registered_entities</span><span class='period'>.</span><span class='id size'>size</span><span class='rbrace'>}</span><span class='tstring_content'>) registered entities in that package:\n\n</span><span class='tstring_end'>&quot;</span></span>
115
+ <span class='id registered_entities'>registered_entities</span><span class='period'>.</span><span class='id each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id other'>other</span><span class='op'>|</span>
116
+ <span class='id message'>message</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&gt;&gt; name: (</span><span class='embexpr_beg'>#{</span><span class='id other'>other</span><span class='period'>.</span><span class='id name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>) pkg_name: (</span><span class='embexpr_beg'>#{</span><span class='id other'>other</span><span class='period'>.</span><span class='id pkg_name'>pkg_name</span><span class='rbrace'>}</span><span class='tstring_content'>) pkg_version: (</span><span class='embexpr_beg'>#{</span><span class='id other'>other</span><span class='period'>.</span><span class='id pkg_version'>pkg_version</span><span class='rbrace'>}</span><span class='tstring_content'>)\n</span><span class='tstring_end'>&quot;</span></span>
117
+ <span class='kw'>end</span>
118
+ <span class='id message'>message</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n\nYou may need to update your Gemfile and run 'bundle install' </span><span class='tstring_end'>&quot;</span></span>
119
+ <span class='id message'>message</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>to update your local gems.\n\n</span><span class='tstring_end'>&quot;</span></span>
120
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>LoadError</span><span class='period'>.</span><span class='id new'>new</span> <span class='id message'>message</span>
121
+ <span class='kw'>end</span>
122
+
123
+ <span class='id resolve_file_target'>resolve_file_target</span> <span class='id entity'>entity</span>
124
+ <span class='id entity'>entity</span>
125
+ <span class='kw'>end</span>
126
+
127
+ <span class='kw'>def</span> <span class='id clear_entities!'>clear_entities!</span>
128
+ <span class='ivar'>@registered_entities</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
129
+ <span class='kw'>end</span>
130
+
131
+ <span class='id protected'>protected</span>
132
+
133
+ <span class='kw'>def</span> <span class='id resolve_file_target'>resolve_file_target</span> <span class='id entity'>entity</span>
134
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span> <span class='symbol'>:resolve</span><span class='rparen'>)</span>
135
+ <span class='id entity'>entity</span><span class='period'>.</span><span class='id resolve'>resolve</span>
136
+ <span class='kw'>elsif</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span> <span class='symbol'>:file_target</span><span class='rparen'>)</span>
137
+ <span class='id file_target'>file_target</span> <span class='op'>=</span> <span class='id entity'>entity</span><span class='period'>.</span><span class='id file_target'>file_target</span>
138
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='id file_target'>file_target</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span> <span class='symbol'>:resolve</span><span class='rparen'>)</span>
139
+ <span class='id file_target'>file_target</span><span class='period'>.</span><span class='id resolve'>resolve</span>
140
+ <span class='kw'>end</span>
141
+ <span class='kw'>end</span>
142
+ <span class='kw'>end</span>
143
+
144
+ <span class='kw'>def</span> <span class='id validate_registration'>validate_registration</span> <span class='id entity'>entity</span>
145
+ <span class='kw'>if</span><span class='lparen'>(</span><span class='op'>!</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:name</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id entity'>entity</span><span class='period'>.</span><span class='id name'>name</span><span class='period'>.</span><span class='id nil?'>nil?</span><span class='rparen'>)</span>
146
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>UsageError</span><span class='period'>.</span><span class='id new'>new</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot register a RubyFeature without a 'name' getter</span><span class='tstring_end'>&quot;</span></span>
147
+ <span class='kw'>end</span>
148
+ <span class='kw'>end</span>
149
+
150
+ <span class='comment'>#
151
+ </span> <span class='comment'># Used by the Generator::Base to update inputs from
152
+ </span> <span class='comment'># empty class definitions to instances..
153
+ </span> <span class='kw'>def</span> <span class='id update_registered_entities'>update_registered_entities</span>
154
+ <span class='kw'>end</span>
155
+
156
+ <span class='kw'>def</span> <span class='id entity_for'>entity_for</span> <span class='id name_or_names'>name_or_names</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span><span class='comma'>,</span> <span class='id version_requirement'>version_requirement</span>
157
+ <span class='comment'># These commented blocks help immensely when debugging
158
+ </span> <span class='comment'># loading and registration issues, please leave them here:
159
+ </span> <span class='comment'>#puts &quot;+++++++++++++++++++++++++++&quot;
160
+ </span> <span class='comment'>#puts &quot;&gt;&gt; entity_for #{name_or_names} pkg_name: #{pkg_name} version: #{version_requirement}&quot;
161
+ </span> <span class='comment'>#registered_entities.each do |entity|
162
+ </span> <span class='comment'>#puts &quot;&gt;&gt; entity: #{entity.name} platform: #{entity.platform} pkg_name: #{entity.pkg_name} version: #{entity.pkg_version}&quot;
163
+ </span> <span class='comment'>#end
164
+ </span> <span class='id registered_entities'>registered_entities</span><span class='period'>.</span><span class='id reverse'>reverse</span><span class='period'>.</span><span class='id select'>select</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id entity'>entity</span><span class='op'>|</span>
165
+ <span class='id satisfies_name?'>satisfies_name?</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='comma'>,</span> <span class='id name_or_names'>name_or_names</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span>
166
+ <span class='id satisfies_platform?'>satisfies_platform?</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span>
167
+ <span class='id satisfies_pkg_name?'>satisfies_pkg_name?</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='comma'>,</span> <span class='id pkg_name'>pkg_name</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span>
168
+ <span class='id satisfies_version?'>satisfies_version?</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='comma'>,</span> <span class='id version_requirement'>version_requirement</span><span class='rparen'>)</span>
169
+ <span class='kw'>end</span><span class='period'>.</span><span class='id first'>first</span>
170
+ <span class='kw'>end</span>
171
+
172
+ <span class='kw'>def</span> <span class='id satisfies_environment?'>satisfies_environment?</span> <span class='id entity'>entity</span><span class='comma'>,</span> <span class='id environment'>environment</span>
173
+ <span class='comment'>#puts &quot;&gt;&gt; env: #{entity.environment} vs. #{environment}&quot;
174
+ </span> <span class='id environment'>environment</span><span class='period'>.</span><span class='id nil?'>nil?</span> <span class='op'>||</span> <span class='op'>!</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:environment</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id entity'>entity</span><span class='period'>.</span><span class='id environment'>environment</span><span class='period'>.</span><span class='id to_s'>to_s</span> <span class='op'>==</span> <span class='id environment'>environment</span><span class='period'>.</span><span class='id to_s'>to_s</span>
175
+ <span class='kw'>end</span>
176
+
177
+ <span class='kw'>def</span> <span class='id satisfies_pkg_name?'>satisfies_pkg_name?</span> <span class='id entity'>entity</span><span class='comma'>,</span> <span class='id expected'>expected</span>
178
+ <span class='comment'>#puts &quot;&gt;&gt; pkg_name: #{entity.pkg_name} vs. #{expected}&quot;
179
+ </span> <span class='id expected'>expected</span><span class='period'>.</span><span class='id nil?'>nil?</span> <span class='op'>||</span> <span class='op'>!</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:pkg_name</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id entity'>entity</span><span class='period'>.</span><span class='id pkg_name'>pkg_name</span><span class='period'>.</span><span class='id to_s'>to_s</span> <span class='op'>==</span> <span class='id expected'>expected</span><span class='period'>.</span><span class='id to_s'>to_s</span>
180
+ <span class='kw'>end</span>
181
+
182
+ <span class='kw'>def</span> <span class='id satisfies_name?'>satisfies_name?</span> <span class='id entity'>entity</span><span class='comma'>,</span> <span class='id expected'>expected</span>
183
+ <span class='comment'>#puts &quot;&gt;&gt; name: #{entity.name} vs. #{expected}&quot;
184
+ </span> <span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id expected'>expected</span><span class='period'>.</span><span class='id nil?'>nil?</span> <span class='op'>||</span> <span class='op'>!</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:name</span><span class='rparen'>)</span>
185
+ <span class='kw'>if</span> <span class='id expected'>expected</span><span class='period'>.</span><span class='id is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span>
186
+ <span class='kw'>return</span> <span class='id expected'>expected</span><span class='period'>.</span><span class='id include?'>include?</span> <span class='id entity'>entity</span><span class='period'>.</span><span class='id name'>name</span>
187
+ <span class='kw'>end</span>
188
+ <span class='kw'>return</span> <span class='id expected'>expected</span><span class='period'>.</span><span class='id to_s'>to_s</span> <span class='op'>==</span> <span class='id entity'>entity</span><span class='period'>.</span><span class='id name'>name</span><span class='period'>.</span><span class='id to_s'>to_s</span>
189
+ <span class='kw'>end</span>
190
+
191
+ <span class='kw'>def</span> <span class='id satisfies_platform?'>satisfies_platform?</span> <span class='id entity'>entity</span>
192
+ <span class='comment'>#puts&quot;&gt;&gt; satisfies platform?&quot;
193
+ </span> <span class='comment'># If not platform is defined, it's assumed to work on all platforms:
194
+ </span> <span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:platform</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id entity'>entity</span><span class='period'>.</span><span class='id platform'>platform</span><span class='period'>.</span><span class='id nil?'>nil?</span>
195
+ <span class='comment'>#puts &quot;&gt;&gt; platform: #{entity.platform}&quot;
196
+ </span> <span class='const'>Sprout</span><span class='period'>.</span><span class='id current_system'>current_system</span><span class='period'>.</span><span class='id can_execute?'>can_execute?</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id platform'>platform</span><span class='rparen'>)</span>
197
+ <span class='kw'>end</span>
198
+
199
+ <span class='kw'>def</span> <span class='id satisfies_version?'>satisfies_version?</span> <span class='id entity'>entity</span><span class='comma'>,</span> <span class='id version_requirement'>version_requirement</span><span class='op'>=</span><span class='kw'>nil</span>
200
+ <span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id version_requirement'>version_requirement</span><span class='period'>.</span><span class='id nil?'>nil?</span>
201
+ <span class='id req_version'>req_version</span> <span class='op'>=</span> <span class='const'>Gem</span><span class='op'>::</span><span class='const'>Requirement</span><span class='period'>.</span><span class='id create'>create</span> <span class='id version_requirement'>version_requirement</span>
202
+ <span class='id req_version'>req_version</span><span class='period'>.</span><span class='id satisfied_by?'>satisfied_by?</span><span class='lparen'>(</span><span class='const'>Gem</span><span class='op'>::</span><span class='const'>Version</span><span class='period'>.</span><span class='id create'>create</span><span class='lparen'>(</span><span class='id entity'>entity</span><span class='period'>.</span><span class='id pkg_version'>pkg_version</span><span class='rparen'>)</span><span class='rparen'>)</span>
203
+ <span class='kw'>end</span>
204
+
205
+ <span class='kw'>def</span> <span class='id require_ruby_package'>require_ruby_package</span> <span class='id name'>name</span>
206
+ <span class='kw'>begin</span>
207
+ <span class='id require'>require</span> <span class='id name'>name</span><span class='period'>.</span><span class='id to_s'>to_s</span>
208
+ <span class='kw'>rescue</span> <span class='const'>LoadError</span> <span class='op'>=&gt;</span> <span class='id e'>e</span>
209
+ <span class='id raise'>raise</span> <span class='const'>Sprout</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>LoadError</span><span class='period'>.</span><span class='id new'>new</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not load the required file (</span><span class='embexpr_beg'>#{</span><span class='id name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>) - Maybe you need to run 'gem install </span><span class='embexpr_beg'>#{</span><span class='id name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>' or maybe 'bundle install'?</span><span class='tstring_end'>&quot;</span></span>
210
+ <span class='kw'>end</span>
211
+ <span class='kw'>end</span>
212
+
213
+ <span class='comment'>##
214
+ </span> <span class='comment'># An entity has the following parameters:
215
+ </span> <span class='comment'># name
216
+ </span> <span class='comment'># pkg_name
217
+ </span> <span class='comment'># pkg_version
218
+ </span> <span class='comment'># platform
219
+ </span> <span class='comment'>#
220
+ </span> <span class='kw'>def</span> <span class='id registered_entities'>registered_entities</span>
221
+ <span class='ivar'>@registered_entities</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
222
+ <span class='kw'>end</span>
223
+ <span class='kw'>end</span>
224
+
225
+ <span class='kw'>end</span></pre>
226
+
227
+ <p>end</p>
228
+
229
+ <p>## # Mixin on the Rake::Task so # that our concrete entities # can
230
+ interoperate with some # knowledge of each other. class Rake::Task</p>
231
+
232
+ <pre class="code"><span class='id attr_accessor'>attr_accessor</span> <span class='symbol'>:sprout_entity</span></pre>
233
+
234
+ <p>end</p>
235
+ </div></div>
236
+
237
+ <div id="footer">
238
+ Generated on Wed Dec 22 11:58:32 2010 by
239
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
240
+ 0.6.3 (ruby-1.9.2).
241
+ </div>
242
+
243
+ </body>
244
+ </html>