File: C:/Ruby27-x64/share/doc/ruby/html/Bundler/Thor/Util.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>module Bundler::Thor::Util - RDoc Documentation</title>
<script type="text/javascript">
var rdoc_rel_prefix = "../../";
var index_rel_prefix = "../../";
</script>
<script src="../../js/navigation.js" defer></script>
<script src="../../js/search.js" defer></script>
<script src="../../js/search_index.js" defer></script>
<script src="../../js/searcher.js" defer></script>
<script src="../../js/darkfish.js" defer></script>
<link href="../../css/fonts.css" rel="stylesheet">
<link href="../../css/rdoc.css" rel="stylesheet">
<body id="top" role="document" class="module">
<nav role="navigation">
<div id="project-navigation">
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
<h2>
<a href="../../index.html" rel="home">Home</a>
</h2>
<div id="table-of-contents-navigation">
<a href="../../table_of_contents.html#pages">Pages</a>
<a href="../../table_of_contents.html#classes">Classes</a>
<a href="../../table_of_contents.html#methods">Methods</a>
</div>
</div>
<div id="search-section" role="search" class="project-section initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
<div id="search-field-wrapper">
<input id="search-field" role="combobox" aria-label="Search"
aria-autocomplete="list" aria-controls="search-results"
type="text" name="search" placeholder="Search" spellcheck="false"
title="Type to search, Up and Down to navigate, Enter to load">
</div>
<ul id="search-results" aria-label="Search Results"
aria-busy="false" aria-expanded="false"
aria-atomic="false" class="initially-hidden"></ul>
</form>
</div>
</div>
<div id="class-metadata">
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
<h3>Methods</h3>
<ul class="link-list" role="directory">
<li ><a href="#method-c-camel_case">::camel_case</a>
<li ><a href="#method-c-escape_globs">::escape_globs</a>
<li ><a href="#method-c-escape_html">::escape_html</a>
<li ><a href="#method-c-find_by_namespace">::find_by_namespace</a>
<li ><a href="#method-c-find_class_and_command_by_namespace">::find_class_and_command_by_namespace</a>
<li ><a href="#method-c-find_class_and_task_by_namespace">::find_class_and_task_by_namespace</a>
<li ><a href="#method-c-globs_for">::globs_for</a>
<li ><a href="#method-c-load_thorfile">::load_thorfile</a>
<li ><a href="#method-c-namespace_from_thor_class">::namespace_from_thor_class</a>
<li ><a href="#method-c-namespaces_in_content">::namespaces_in_content</a>
<li ><a href="#method-c-ruby_command">::ruby_command</a>
<li ><a href="#method-c-snake_case">::snake_case</a>
<li ><a href="#method-c-thor_classes_in">::thor_classes_in</a>
<li ><a href="#method-c-thor_root">::thor_root</a>
<li ><a href="#method-c-thor_root_glob">::thor_root_glob</a>
<li ><a href="#method-c-user_home">::user_home</a>
</ul>
</div>
</div>
</nav>
<main role="main" aria-labelledby="module-Bundler::Thor::Util">
<h1 id="module-Bundler::Thor::Util" class="module">
module Bundler::Thor::Util
</h1>
<section class="description">
<p>This module holds several utilities:</p>
<p>1) Methods to convert thor namespaces to constants and vice-versa.</p>
<pre class="ruby"><span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">namespace_from_thor_class</span>(<span class="ruby-constant">Foo</span><span class="ruby-operator">::</span><span class="ruby-constant">Bar</span><span class="ruby-operator">::</span><span class="ruby-constant">Baz</span>) <span class="ruby-comment">#=> "foo:bar:baz"</span>
</pre>
<p>2) Loading thor files and sandboxing:</p>
<pre class="ruby"><span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">load_thorfile</span>(<span class="ruby-string">"~/.thor/foo"</span>)
</pre>
</section>
<section id="5Buntitled-5D" class="documentation-section">
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Class Methods</h3>
</header>
<div id="method-c-camel_case" class="method-detail ">
<div class="method-heading">
<span class="method-name">camel_case</span><span
class="method-args">(str)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Receives a string and convert it to camel case. <a href="Util.html#method-c-camel_case"><code>camel_case</code></a> returns CamelCase.</p>
<h4 id="method-c-camel_case-label-Parameters">Parameters<span><a href="#method-c-camel_case-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<h4 id="method-c-camel_case-label-Returns">Returns<span><a href="#method-c-camel_case-label-Returns">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<div class="method-source-code" id="camel_case-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 104</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">camel_case</span>(<span class="ruby-identifier">str</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">str</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp">/_/</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/[A-Z]+.*/</span>
<span class="ruby-identifier">str</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">"_"</span>).<span class="ruby-identifier">map</span>(<span class="ruby-operator">&</span><span class="ruby-value">:capitalize</span>).<span class="ruby-identifier">join</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-escape_globs" class="method-detail ">
<div class="method-heading">
<span class="method-name">escape_globs</span><span
class="method-args">(path)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns a string that has had any glob characters escaped. The glob characters are `* ? { } [ ]`.</p>
<h4 id="method-c-escape_globs-label-Examples">Examples<span><a href="#method-c-escape_globs-label-Examples">¶</a> <a href="#top">↑</a></span></h4>
<pre class="ruby"><span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">escape_globs</span>(<span class="ruby-string">'[apps]'</span>) <span class="ruby-comment"># => '\[apps\]'</span>
</pre>
<h4 id="method-c-escape_globs-label-Parameters">Parameters<span><a href="#method-c-escape_globs-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<h4 id="method-c-escape_globs-label-Returns">Returns<span><a href="#method-c-escape_globs-label-Returns">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<div class="method-source-code" id="escape_globs-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 263</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">escape_globs</span>(<span class="ruby-identifier">path</span>)
<span class="ruby-identifier">path</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/[*?{}\[\]]/</span>, <span class="ruby-string">'\\\\\\&'</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-escape_html" class="method-detail ">
<div class="method-heading">
<span class="method-name">escape_html</span><span
class="method-args">(string)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns a string that has had any HTML characters escaped.</p>
<h4 id="method-c-escape_html-label-Examples">Examples<span><a href="#method-c-escape_html-label-Examples">¶</a> <a href="#top">↑</a></span></h4>
<pre class="ruby"><span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">escape_html</span>(<span class="ruby-string">'<div>'</span>) <span class="ruby-comment"># => "&lt;div&gt;"</span>
</pre>
<h4 id="method-c-escape_html-label-Parameters">Parameters<span><a href="#method-c-escape_html-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<h4 id="method-c-escape_html-label-Returns">Returns<span><a href="#method-c-escape_html-label-Returns">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<div class="method-source-code" id="escape_html-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 279</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">escape_html</span>(<span class="ruby-identifier">string</span>)
<span class="ruby-constant">CGI</span>.<span class="ruby-identifier">escapeHTML</span>(<span class="ruby-identifier">string</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-find_by_namespace" class="method-detail ">
<div class="method-heading">
<span class="method-name">find_by_namespace</span><span
class="method-args">(namespace)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Receives a namespace and search for it in the <a href="Base.html"><code>Bundler::Thor::Base</code></a> subclasses.</p>
<h4 id="method-c-find_by_namespace-label-Parameters">Parameters<span><a href="#method-c-find_by_namespace-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<dl class="rdoc-list note-list"><dt>namespace<String>
<dd>
<p>The namespace to search for.</p>
</dd></dl>
<div class="method-source-code" id="find_by_namespace-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 24</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">find_by_namespace</span>(<span class="ruby-identifier">namespace</span>)
<span class="ruby-identifier">namespace</span> = <span class="ruby-node">"default#{namespace}"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">namespace</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">namespace</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^:/</span>
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">subclasses</span>.<span class="ruby-identifier">detect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">klass</span><span class="ruby-operator">|</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">namespace</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">namespace</span> }
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-find_class_and_command_by_namespace" class="method-detail ">
<div class="method-heading">
<span class="method-name">find_class_and_command_by_namespace</span><span
class="method-args">(namespace, fallback = true)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Receives a namespace and tries to retrieve a Bundler::Thor or <a href="Group.html"><code>Bundler::Thor::Group</code></a> class from it. It first searches for a class using the all the given namespace, if it's not found, removes the highest entry and searches for the class again. If found, returns the highest entry as the class name.</p>
<h4 id="method-c-find_class_and_command_by_namespace-label-Examples">Examples<span><a href="#method-c-find_class_and_command_by_namespace-label-Examples">¶</a> <a href="#top">↑</a></span></h4>
<pre class="ruby"><span class="ruby-keyword">class</span> <span class="ruby-constant">Foo</span><span class="ruby-operator">::</span><span class="ruby-constant">Bar</span> <span class="ruby-operator"><</span> <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">baz</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">class</span> <span class="ruby-constant">Baz</span><span class="ruby-operator">::</span><span class="ruby-constant">Foo</span> <span class="ruby-operator"><</span> <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Group</span>
<span class="ruby-keyword">end</span>
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">namespace_to_thor_class</span>(<span class="ruby-string">"foo:bar"</span>) <span class="ruby-comment">#=> Foo::Bar, nil # will invoke default command</span>
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">namespace_to_thor_class</span>(<span class="ruby-string">"baz:foo"</span>) <span class="ruby-comment">#=> Baz::Foo, nil</span>
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">namespace_to_thor_class</span>(<span class="ruby-string">"foo:bar:baz"</span>) <span class="ruby-comment">#=> Foo::Bar, "baz"</span>
</pre>
<h4 id="method-c-find_class_and_command_by_namespace-label-Parameters">Parameters<span><a href="#method-c-find_class_and_command_by_namespace-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<p>namespace<String></p>
<div class="method-source-code" id="find_class_and_command_by_namespace-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 131</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">find_class_and_command_by_namespace</span>(<span class="ruby-identifier">namespace</span>, <span class="ruby-identifier">fallback</span> = <span class="ruby-keyword">true</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">namespace</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-string">":"</span>) <span class="ruby-comment"># look for a namespaced command</span>
<span class="ruby-identifier">pieces</span> = <span class="ruby-identifier">namespace</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">":"</span>)
<span class="ruby-identifier">command</span> = <span class="ruby-identifier">pieces</span>.<span class="ruby-identifier">pop</span>
<span class="ruby-identifier">klass</span> = <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">find_by_namespace</span>(<span class="ruby-identifier">pieces</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">":"</span>))
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">klass</span> <span class="ruby-comment"># look for a Bundler::Thor::Group with the right name</span>
<span class="ruby-identifier">klass</span> = <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">find_by_namespace</span>(<span class="ruby-identifier">namespace</span>)
<span class="ruby-identifier">command</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">klass</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">fallback</span> <span class="ruby-comment"># try a command in the default namespace</span>
<span class="ruby-identifier">command</span> = <span class="ruby-identifier">namespace</span>
<span class="ruby-identifier">klass</span> = <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Util</span>.<span class="ruby-identifier">find_by_namespace</span>(<span class="ruby-string">""</span>)
<span class="ruby-keyword">end</span>
[<span class="ruby-identifier">klass</span>, <span class="ruby-identifier">command</span>]
<span class="ruby-keyword">end</span></pre>
</div>
</div>
<div class="aliases">
Also aliased as: <a href="Util.html#method-c-find_class_and_task_by_namespace">find_class_and_task_by_namespace</a>
</div>
</div>
<div id="method-c-find_class_and_task_by_namespace" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">find_class_and_task_by_namespace</span><span
class="method-args">(namespace, fallback = true)</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="Util.html#method-c-find_class_and_command_by_namespace">find_class_and_command_by_namespace</a>
</div>
</div>
<div id="method-c-globs_for" class="method-detail ">
<div class="method-heading">
<span class="method-name">globs_for</span><span
class="method-args">(path)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Where to look for Bundler::Thor files.</p>
<div class="method-source-code" id="globs_for-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 212</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">globs_for</span>(<span class="ruby-identifier">path</span>)
<span class="ruby-identifier">path</span> = <span class="ruby-identifier">escape_globs</span>(<span class="ruby-identifier">path</span>)
[<span class="ruby-node">"#{path}/Thorfile"</span>, <span class="ruby-node">"#{path}/*.thor"</span>, <span class="ruby-node">"#{path}/tasks/*.thor"</span>, <span class="ruby-node">"#{path}/lib/tasks/*.thor"</span>]
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-load_thorfile" class="method-detail ">
<div class="method-heading">
<span class="method-name">load_thorfile</span><span
class="method-args">(path, content = nil, debug = false)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Receives a path and load the thor file in the path. The file is evaluated inside the sandbox to avoid namespacing conflicts.</p>
<div class="method-source-code" id="load_thorfile-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 152</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">load_thorfile</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">content</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">debug</span> = <span class="ruby-keyword">false</span>)
<span class="ruby-identifier">content</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">binread</span>(<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Sandbox</span>.<span class="ruby-identifier">class_eval</span>(<span class="ruby-identifier">content</span>, <span class="ruby-identifier">path</span>)
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">StandardError</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">e</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-node">"WARNING: unable to load thorfile #{path.inspect}: #{e.message}"</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">debug</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">first</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-namespace_from_thor_class" class="method-detail ">
<div class="method-heading">
<span class="method-name">namespace_from_thor_class</span><span
class="method-args">(constant)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Receives a constant and converts it to a Bundler::Thor namespace. Since Bundler::Thor commands can be added to a sandbox, this method is also responsible for removing the sandbox namespace.</p>
<p>This method should not be used in general because it's used to deal with older versions of Bundler::Thor. On current versions, if you need to get the namespace from a class, just call namespace on it.</p>
<h4 id="method-c-namespace_from_thor_class-label-Parameters">Parameters<span><a href="#method-c-namespace_from_thor_class-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<dl class="rdoc-list note-list"><dt>constant<Object>
<dd>
<p>The constant to be converted to the thor path.</p>
</dd></dl>
<h4 id="method-c-namespace_from_thor_class-label-Returns">Returns<span><a href="#method-c-namespace_from_thor_class-label-Returns">¶</a> <a href="#top">↑</a></span></h4>
<dl class="rdoc-list note-list"><dt><a href="../../String.html"><code>String</code></a>
<dd>
<p>If we receive Foo::Bar::Baz it returns “foo:bar:baz”</p>
</dd></dl>
<div class="method-source-code" id="namespace_from_thor_class-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 43</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">namespace_from_thor_class</span>(<span class="ruby-identifier">constant</span>)
<span class="ruby-identifier">constant</span> = <span class="ruby-identifier">constant</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/^Bundler::Thor::Sandbox::/</span>, <span class="ruby-string">""</span>)
<span class="ruby-identifier">constant</span> = <span class="ruby-identifier">snake_case</span>(<span class="ruby-identifier">constant</span>).<span class="ruby-identifier">squeeze</span>(<span class="ruby-string">":"</span>)
<span class="ruby-identifier">constant</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-namespaces_in_content" class="method-detail ">
<div class="method-heading">
<span class="method-name">namespaces_in_content</span><span
class="method-args">(contents, file = __FILE__)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Given the contents, evaluate it inside the sandbox and returns the namespaces defined in the sandbox.</p>
<h4 id="method-c-namespaces_in_content-label-Parameters">Parameters<span><a href="#method-c-namespaces_in_content-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<p>contents<String></p>
<h4 id="method-c-namespaces_in_content-label-Returns">Returns<span><a href="#method-c-namespaces_in_content-label-Returns">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="Object">Array</a></p>
<div class="method-source-code" id="namespaces_in_content-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 58</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">namespaces_in_content</span>(<span class="ruby-identifier">contents</span>, <span class="ruby-identifier">file</span> = <span class="ruby-keyword">__FILE__</span>)
<span class="ruby-identifier">old_constants</span> = <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">subclasses</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">subclasses</span>.<span class="ruby-identifier">clear</span>
<span class="ruby-identifier">load_thorfile</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">contents</span>)
<span class="ruby-identifier">new_constants</span> = <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">subclasses</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">subclasses</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">old_constants</span>)
<span class="ruby-identifier">new_constants</span>.<span class="ruby-identifier">map!</span>(<span class="ruby-operator">&</span><span class="ruby-value">:namespace</span>)
<span class="ruby-identifier">new_constants</span>.<span class="ruby-identifier">compact!</span>
<span class="ruby-identifier">new_constants</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-ruby_command" class="method-detail ">
<div class="method-heading">
<span class="method-name">ruby_command</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Return the path to the ruby interpreter taking into account multiple installations and windows extensions.</p>
<div class="method-source-code" id="ruby_command-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 220</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">ruby_command</span>
<span class="ruby-ivar">@ruby_command</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
<span class="ruby-identifier">ruby_name</span> = <span class="ruby-constant">RbConfig</span><span class="ruby-operator">::</span><span class="ruby-constant">CONFIG</span>[<span class="ruby-string">"ruby_install_name"</span>]
<span class="ruby-identifier">ruby</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">RbConfig</span><span class="ruby-operator">::</span><span class="ruby-constant">CONFIG</span>[<span class="ruby-string">"bindir"</span>], <span class="ruby-identifier">ruby_name</span>)
<span class="ruby-identifier">ruby</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">RbConfig</span><span class="ruby-operator">::</span><span class="ruby-constant">CONFIG</span>[<span class="ruby-string">"EXEEXT"</span>]
<span class="ruby-comment"># avoid using different name than ruby (on platforms supporting links)</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">ruby_name</span> <span class="ruby-operator">!=</span> <span class="ruby-string">"ruby"</span> <span class="ruby-operator">&&</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:readlink</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">alternate_ruby</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">RbConfig</span><span class="ruby-operator">::</span><span class="ruby-constant">CONFIG</span>[<span class="ruby-string">"bindir"</span>], <span class="ruby-string">"ruby"</span>)
<span class="ruby-identifier">alternate_ruby</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">RbConfig</span><span class="ruby-operator">::</span><span class="ruby-constant">CONFIG</span>[<span class="ruby-string">"EXEEXT"</span>]
<span class="ruby-comment"># ruby is a symlink</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">symlink?</span> <span class="ruby-identifier">alternate_ruby</span>
<span class="ruby-identifier">linked_ruby</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">readlink</span> <span class="ruby-identifier">alternate_ruby</span>
<span class="ruby-comment"># symlink points to 'ruby_install_name'</span>
<span class="ruby-identifier">ruby</span> = <span class="ruby-identifier">alternate_ruby</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">linked_ruby</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">ruby_name</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">linked_ruby</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">ruby</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">NotImplementedError</span> <span class="ruby-comment"># rubocop:disable HandleExceptions</span>
<span class="ruby-comment"># just ignore on windows</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># escape string in case path to ruby executable contain spaces.</span>
<span class="ruby-identifier">ruby</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp">/.*\s.*/m</span>, <span class="ruby-string">'"\&"'</span>)
<span class="ruby-identifier">ruby</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-snake_case" class="method-detail ">
<div class="method-heading">
<span class="method-name">snake_case</span><span
class="method-args">(str)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Receives a string and convert it to snake case. SnakeCase returns snake_case.</p>
<h4 id="method-c-snake_case-label-Parameters">Parameters<span><a href="#method-c-snake_case-label-Parameters">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<h4 id="method-c-snake_case-label-Returns">Returns<span><a href="#method-c-snake_case-label-Returns">¶</a> <a href="#top">↑</a></span></h4>
<p><a href="../../String.html"><code>String</code></a></p>
<div class="method-source-code" id="snake_case-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 90</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">snake_case</span>(<span class="ruby-identifier">str</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">downcase</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^[A-Z_]+$/</span>
<span class="ruby-identifier">str</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\B[A-Z]/</span>, <span class="ruby-string">'_\&'</span>).<span class="ruby-identifier">squeeze</span>(<span class="ruby-string">"_"</span>) <span class="ruby-operator">=~</span> <span class="ruby-regexp">/_*(.*)/</span>
<span class="ruby-node">$+</span>.<span class="ruby-identifier">downcase</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-thor_classes_in" class="method-detail ">
<div class="method-heading">
<span class="method-name">thor_classes_in</span><span
class="method-args">(klass)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns the thor classes declared inside the given class.</p>
<div class="method-source-code" id="thor_classes_in-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 74</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">thor_classes_in</span>(<span class="ruby-identifier">klass</span>)
<span class="ruby-identifier">stringfied_constants</span> = <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">constants</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&</span><span class="ruby-value">:to_s</span>)
<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">Thor</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">subclasses</span>.<span class="ruby-identifier">select</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subclass</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">subclass</span>.<span class="ruby-identifier">name</span>
<span class="ruby-identifier">stringfied_constants</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">subclass</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-node">"#{klass.name}::"</span>, <span class="ruby-string">""</span>))
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-thor_root" class="method-detail ">
<div class="method-heading">
<span class="method-name">thor_root</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns the root where thor files are located, depending on the OS.</p>
<div class="method-source-code" id="thor_root-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 191</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">thor_root</span>
<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">user_home</span>, <span class="ruby-string">".thor"</span>).<span class="ruby-identifier">tr</span>(<span class="ruby-string">'\\'</span>, <span class="ruby-string">"/"</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-thor_root_glob" class="method-detail ">
<div class="method-heading">
<span class="method-name">thor_root_glob</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Returns the files in the thor root. On Windows <a href="Util.html#method-c-thor_root"><code>thor_root</code></a> will be something like this:</p>
<pre>C:\Documents and Settings\james\.thor</pre>
<p>If we don't gsub the \ character, <a href="../../Dir.html#method-c-glob"><code>Dir.glob</code></a> will fail.</p>
<div class="method-source-code" id="thor_root_glob-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 202</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">thor_root_glob</span>
<span class="ruby-identifier">files</span> = <span class="ruby-constant">Dir</span>[<span class="ruby-node">"#{escape_globs(thor_root)}/*"</span>]
<span class="ruby-identifier">files</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
<span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">file</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">file</span>, <span class="ruby-string">"main.thor"</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">file</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-user_home" class="method-detail ">
<div class="method-heading">
<span class="method-name">user_home</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="user_home-source">
<pre><span class="ruby-comment"># File lib/bundler/vendor/thor/lib/thor/util.rb, line 167</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">user_home</span>
<span class="ruby-identifier">@@user_home</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">ENV</span>[<span class="ruby-string">"HOME"</span>]
<span class="ruby-constant">ENV</span>[<span class="ruby-string">"HOME"</span>]
<span class="ruby-keyword">elsif</span> <span class="ruby-constant">ENV</span>[<span class="ruby-string">"USERPROFILE"</span>]
<span class="ruby-constant">ENV</span>[<span class="ruby-string">"USERPROFILE"</span>]
<span class="ruby-keyword">elsif</span> <span class="ruby-constant">ENV</span>[<span class="ruby-string">"HOMEDRIVE"</span>] <span class="ruby-operator">&&</span> <span class="ruby-constant">ENV</span>[<span class="ruby-string">"HOMEPATH"</span>]
<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">ENV</span>[<span class="ruby-string">"HOMEDRIVE"</span>], <span class="ruby-constant">ENV</span>[<span class="ruby-string">"HOMEPATH"</span>])
<span class="ruby-keyword">elsif</span> <span class="ruby-constant">ENV</span>[<span class="ruby-string">"APPDATA"</span>]
<span class="ruby-constant">ENV</span>[<span class="ruby-string">"APPDATA"</span>]
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-string">"~"</span>)
<span class="ruby-keyword">rescue</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">ALT_SEPARATOR</span>
<span class="ruby-string">"C:/"</span>
<span class="ruby-keyword">else</span>
<span class="ruby-string">"/"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
</section>
</main>
<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>