PageRenderTime 57ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 1ms

/gems/gems/facets-2.4.3/doc/rdoc/more/classes/EnumerablePass.html

https://github.com/teejayvanslyke/terminus
HTML | 216 lines | 193 code | 22 blank | 1 comment | 0 complexity | ceac151044897acb86366f6e65165e8a MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <!DOCTYPE html
  3. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html>
  6. <head>
  7. <title>Module: EnumerablePass</title>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  9. <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
  10. <script language="JavaScript" type="text/javascript">
  11. // <![CDATA[
  12. function toggleSource( id )
  13. {
  14. var elem
  15. var link
  16. if( document.getElementById )
  17. {
  18. elem = document.getElementById( id )
  19. link = document.getElementById( "l_" + id )
  20. }
  21. else if ( document.all )
  22. {
  23. elem = eval( "document.all." + id )
  24. link = eval( "document.all.l_" + id )
  25. }
  26. else
  27. return false;
  28. if( elem.style.display == "block" )
  29. {
  30. elem.style.display = "none"
  31. link.innerHTML = "show source"
  32. }
  33. else
  34. {
  35. elem.style.display = "block"
  36. link.innerHTML = "hide source"
  37. }
  38. }
  39. function openCode( url )
  40. {
  41. window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
  42. }
  43. // ]]>
  44. </script>
  45. </head>
  46. <body>
  47. <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
  48. <td class="file-title"><span class="file-title-prefix">Module</span><br />EnumerablePass</td>
  49. <td align="right">
  50. <table cellspacing="0" cellpadding="2">
  51. <tr valign="top">
  52. <td>In:</td>
  53. <td>
  54. <a href="../files/lib/more/facets/enumerablepass_rb.html">lib/more/facets/enumerablepass.rb</a>
  55. </td>
  56. </tr>
  57. </table>
  58. </td>
  59. </tr>
  60. </table>
  61. <!-- banner header -->
  62. <div id="bodyContent">
  63. <div id="content">
  64. <div class="description"><h1><a href="EnumerablePass.html">EnumerablePass</a></h1>
  65. <p>
  66. This is a simple reimplementation of the core <a
  67. href="Enumerable.html">Enumerable</a> module to allow the methods to take
  68. and pass-on arbitrary arguments to the underlying each call. This library
  69. uses Enumerator and scans <a href="Enumerable.html">Enumerable</a> so it
  70. can alwasy stay in sync.
  71. </p>
  72. <p>
  73. NOTE Any <a href="Enumerable.html">Enumerable</a> method with a negative
  74. arity cannot do pass arguments due to ambiguity in the argument count. So
  75. the methods inject and zip do NOT work this way, but simply work as they do
  76. in <a href="Enumerable.html">Enumerable</a>. The method <a
  77. href="EnumerablePass.html#M000782">find</a> (and <a
  78. href="EnumerablePass.html#M000783">detect</a>) though has been made to work
  79. by removing its rarely used optional parameter and providing instead an
  80. optional keyword parameter (:ifnone =&gt; &#8230;). Please keep these
  81. difference in mind.
  82. </p>
  83. <pre>
  84. class T
  85. include EnumerablePass
  86. def initialize(arr)
  87. @arr = arr
  88. end
  89. def each(n)
  90. arr.each{ |e| yield(e+n) }
  91. end
  92. end
  93. t = T.new([1,2,3])
  94. t.collect(4)
  95. #=&gt; [5,6,7]
  96. </pre>
  97. </div>
  98. <div class="sectiontitle">Methods</div>
  99. <ul>
  100. <li><a href="#M000783">detect</a></li>
  101. <li><a href="#M000782">find</a></li>
  102. <li><a href="#M000781">wrap_enumerable_method</a></li>
  103. </ul>
  104. <div class="sectiontitle">Public Class methods</div>
  105. <div class="method">
  106. <div class="title">
  107. <a name="M000781"></a><b>wrap_enumerable_method</b>( methodname )
  108. </div>
  109. <div class="sourcecode">
  110. <p class="source-link">[ <a href="javascript:toggleSource('M000781_source')" id="l_M000781_source">show source</a> ]</p>
  111. <div id="M000781_source" class="dyn-source">
  112. <pre>
  113. <span class="ruby-comment cmt"># File lib/more/facets/enumerablepass.rb, line 78</span>
  114. <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">wrap_enumerable_method</span>( <span class="ruby-identifier">methodname</span> )
  115. <span class="ruby-identifier">m</span> = <span class="ruby-identifier">methodname</span>
  116. <span class="ruby-identifier">meth</span> = <span class="ruby-constant">Enumerable</span>.<span class="ruby-identifier">instance_method</span>(<span class="ruby-identifier">m</span>)
  117. <span class="ruby-identifier">arity</span> = <span class="ruby-identifier">meth</span>.<span class="ruby-identifier">arity</span>
  118. <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">arity</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-value">0</span>
  119. <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span>
  120. <span class="ruby-identifier">class_eval</span> <span class="ruby-node">%{
  121. def #{m}( *args, &amp;yld )
  122. enum_for(:each, *args).#{m}( &amp;yld )
  123. end
  124. }</span>
  125. <span class="ruby-keyword kw">when</span> <span class="ruby-value">1</span>
  126. <span class="ruby-identifier">class_eval</span> <span class="ruby-node">%{
  127. def #{m}( *args, &amp;yld )
  128. args, each_args = args[0...#{arity}], args[#{arity}..-1]
  129. enum_for(:each, *each_args).#{m}( *args, &amp;yld )
  130. end
  131. }</span>
  132. <span class="ruby-keyword kw">else</span>
  133. <span class="ruby-identifier">class_eval</span> <span class="ruby-node">%{
  134. def #{m}( *args, &amp;yld )
  135. enum_for(:each).#{m}( *args, &amp;yld )
  136. end
  137. }</span>
  138. <span class="ruby-keyword kw">end</span>
  139. <span class="ruby-keyword kw">end</span>
  140. </pre>
  141. </div>
  142. </div>
  143. </div>
  144. <div class="sectiontitle">Public Instance methods</div>
  145. <div class="method">
  146. <div class="title">
  147. <a name="M000783"></a><b>detect</b>(*args, &amp;yld)
  148. </div>
  149. <div class="description">
  150. <p>
  151. Alias for <a href="EnumerablePass.html#M000782">find</a>
  152. </p>
  153. </div>
  154. </div>
  155. <div class="method">
  156. <div class="title">
  157. <a name="M000782"></a><b>find</b>(*args, &amp;yld)
  158. </div>
  159. <div class="description">
  160. <p>
  161. Make exception for <a href="EnumerablePass.html#M000782">find</a> (a
  162. negative arity method) to accept keyword argument.
  163. </p>
  164. <pre>
  165. ObjectSpace.find(Class, :ifnone=&gt;lambda{1}) { |e| ... }
  166. ObjectSpace.find(Class, :ifnone=&gt;lambda{1}) { |e| ... }
  167. </pre>
  168. </div>
  169. <div class="aka">
  170. This method is also aliased as
  171. <a href="EnumerablePass.html#M000783">detect</a>
  172. </div>
  173. <div class="sourcecode">
  174. <p class="source-link">[ <a href="javascript:toggleSource('M000782_source')" id="l_M000782_source">show source</a> ]</p>
  175. <div id="M000782_source" class="dyn-source">
  176. <pre>
  177. <span class="ruby-comment cmt"># File lib/more/facets/enumerablepass.rb, line 117</span>
  178. <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">find</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">yld</span>) <span class="ruby-comment cmt"># future use **keys ?</span>
  179. <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Hash</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">last</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">:ifnone</span>)
  180. <span class="ruby-identifier">ifnone</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">:ifnone</span>)
  181. <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">empty?</span>
  182. <span class="ruby-identifier">enum_for</span>(<span class="ruby-identifier">:each</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>).<span class="ruby-identifier">find</span>( <span class="ruby-identifier">ifnone</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">yld</span> )
  183. <span class="ruby-keyword kw">else</span>
  184. <span class="ruby-identifier">enum_for</span>(<span class="ruby-identifier">:each</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>).<span class="ruby-identifier">find</span>( <span class="ruby-operator">&amp;</span><span class="ruby-identifier">yld</span> )
  185. <span class="ruby-keyword kw">end</span>
  186. <span class="ruby-keyword kw">end</span>
  187. </pre>
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. </div>
  193. </body>
  194. </html>