HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Ruby27-x64/share/doc/ruby/html/Bundler/GemVersionPromoter.html
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">

<title>class Bundler::GemVersionPromoter - 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="class">
<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">
    
    <div id="parent-class-section" class="nav-section">
  <h3>Parent</h3>

  
  <p class="link"><a href="../Object.html">Object</a>
  
</div>

    
    
    <!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
  <h3>Methods</h3>

  <ul class="link-list" role="directory">
    
    <li ><a href="#method-c-new">::new</a>
    
    <li ><a href="#method-i-debug_format_result">#debug_format_result</a>
    
    <li ><a href="#method-i-either_version_older_than_locked">#either_version_older_than_locked</a>
    
    <li ><a href="#method-i-filter_dep_specs">#filter_dep_specs</a>
    
    <li ><a href="#method-i-level-3D">#level=</a>
    
    <li ><a href="#method-i-major-3F">#major?</a>
    
    <li ><a href="#method-i-minor-3F">#minor?</a>
    
    <li ><a href="#method-i-move_version_to_end">#move_version_to_end</a>
    
    <li ><a href="#method-i-post_sort">#post_sort</a>
    
    <li ><a href="#method-i-segments_do_not_match">#segments_do_not_match</a>
    
    <li ><a href="#method-i-sort_dep_specs">#sort_dep_specs</a>
    
    <li ><a href="#method-i-sort_versions">#sort_versions</a>
    
    <li ><a href="#method-i-unlocking_gem-3F">#unlocking_gem?</a>
    
  </ul>
</div>

  </div>
</nav>

<main role="main" aria-labelledby="class-Bundler::GemVersionPromoter">
  <h1 id="class-Bundler::GemVersionPromoter" class="class">
    class Bundler::GemVersionPromoter
  </h1>

  <section class="description">
    
<p>This class contains all of the logic for determining the next version of a Gem to update to based on the requested level (patch, minor, major). Primarily designed to work with <a href="Resolver.html"><code>Resolver</code></a> which will provide it the list of available dependency versions as found in its index, before returning it to to the resolution engine to select the best version.</p>

  </section>

  
  <section id="5Buntitled-5D" class="documentation-section">
    

    

    
    <section class="constants-list">
      <header>
        <h3>Constants</h3>
      </header>
      <dl>
      
        <dt id="DEBUG">DEBUG
        
        <dd>
        
      
      </dl>
    </section>
    

    
    <section class="attribute-method-details" class="method-section">
      <header>
        <h3>Attributes</h3>
      </header>

      
      <div id="attribute-i-level" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">level</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-locked_specs" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">locked_specs</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-prerelease_specified" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">prerelease_specified</span><span
            class="attribute-access-type">[RW]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-strict" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">strict</span><span
            class="attribute-access-type">[RW]</span>
        </div>

        <div class="method-description">
        
        <p>By default, strict is false, meaning every available version of a gem is returned from sort_versions. The order gives preference to the requested level (:patch, :minor, :major) but in complicated requirement cases some gems will by necessity by promoted past the requested level, or even reverted to older versions.</p>

<p>If strict is set to true, the results from <a href="GemVersionPromoter.html#method-i-sort_versions"><code>sort_versions</code></a> will be truncated, eliminating any version outside the current level scope. This can lead to unexpected outcomes or even <a href="VersionConflict.html"><code>VersionConflict</code></a> exceptions that report a version of a gem not existing for versions that indeed do existing in the referenced source.</p>
        
        </div>
      </div>
      
      <div id="attribute-i-unlock_gems" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">unlock_gems</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
    </section>
    

    
     <section id="public-class-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Public Class Methods</h3>
       </header>

    
      <div id="method-c-new" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">new</span><span
            class="method-args">(locked_specs = SpecSet.new([]), unlock_gems = [])</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Given a list of <a href="GemVersionPromoter.html#attribute-i-locked_specs"><code>locked_specs</code></a> and a list of gems to unlock creates a <a href="GemVersionPromoter.html"><code>GemVersionPromoter</code></a> instance.</p>

<p>@param <a href="GemVersionPromoter.html#attribute-i-locked_specs"><code>locked_specs</code></a> [SpecSet] All current locked specs. Unlike <a href="Definition.html"><code>Definition</code></a></p>

<pre>where this list is empty if all gems are being updated, this should
always be populated for all gems so this class can properly function.</pre>

<p>@param <a href="GemVersionPromoter.html#attribute-i-unlock_gems"><code>unlock_gems</code></a> [String] List of gem names being unlocked. If empty,</p>

<pre>all gems will be considered unlocked.</pre>

<p>@return [GemVersionPromoter]</p>
          
          

          
          <div class="method-source-code" id="new-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 38</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">locked_specs</span> = <span class="ruby-constant">SpecSet</span>.<span class="ruby-identifier">new</span>([]), <span class="ruby-identifier">unlock_gems</span> = [])
  <span class="ruby-ivar">@level</span> = <span class="ruby-value">:major</span>
  <span class="ruby-ivar">@strict</span> = <span class="ruby-keyword">false</span>
  <span class="ruby-ivar">@locked_specs</span> = <span class="ruby-identifier">locked_specs</span>
  <span class="ruby-ivar">@unlock_gems</span> = <span class="ruby-identifier">unlock_gems</span>
  <span class="ruby-ivar">@sort_versions</span> = {}
  <span class="ruby-ivar">@prerelease_specified</span> = {}
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
    </section>
  
     <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Public Instance Methods</h3>
       </header>

    
      <div id="method-i-level-3D" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">level=</span><span
            class="method-args">(value)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>@param value [Symbol] One of three Symbols: :major, :minor or :patch.</p>
          
          

          
          <div class="method-source-code" id="level-3D-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 48</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">level=</span>(<span class="ruby-identifier">value</span>)
  <span class="ruby-identifier">v</span> = <span class="ruby-keyword">case</span> <span class="ruby-identifier">value</span>
      <span class="ruby-keyword">when</span> <span class="ruby-constant">String</span>, <span class="ruby-constant">Symbol</span>
        <span class="ruby-identifier">value</span>.<span class="ruby-identifier">to_sym</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;Unexpected level #{v}. Must be :major, :minor or :patch&quot;</span> <span class="ruby-keyword">unless</span> [<span class="ruby-value">:major</span>, <span class="ruby-value">:minor</span>, <span class="ruby-value">:patch</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">v</span>)
  <span class="ruby-ivar">@level</span> = <span class="ruby-identifier">v</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-major-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">major?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>@return [bool] Convenience method for testing value of level variable.</p>
          
          

          
          <div class="method-source-code" id="major-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 92</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">major?</span>
  <span class="ruby-identifier">level</span> <span class="ruby-operator">==</span> <span class="ruby-value">:major</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-minor-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">minor?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>@return [bool] Convenience method for testing value of level variable.</p>
          
          

          
          <div class="method-source-code" id="minor-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 97</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">minor?</span>
  <span class="ruby-identifier">level</span> <span class="ruby-operator">==</span> <span class="ruby-value">:minor</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-sort_versions" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">sort_versions</span><span
            class="method-args">(dep, spec_groups)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Given a <a href="Dependency.html"><code>Dependency</code></a> and an <a href="../Array.html"><code>Array</code></a> of SpecGroups of available versions for a gem, this method will return the <a href="../Array.html"><code>Array</code></a> of SpecGroups sorted (and possibly truncated if strict is true) in an order to give preference to the current level (:major, :minor or :patch) when resolution is deciding what versions best resolve all dependencies in the bundle. @param dep [Dependency] The <a href="Dependency.html"><code>Dependency</code></a> of the gem. @param spec_groups [SpecGroup] An array of SpecGroups for the same gem</p>

<pre>named in the @dep param.</pre>

<p>@return [SpecGroup] A new instance of the SpecGroup <a href="../Array.html"><code>Array</code></a> sorted and</p>

<pre>possibly filtered.</pre>
          
          

          
          <div class="method-source-code" id="sort_versions-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 68</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sort_versions</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">spec_groups</span>)
  <span class="ruby-identifier">before_result</span> = <span class="ruby-node">&quot;before sort_versions: #{debug_format_result(dep, spec_groups).inspect}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">DEBUG</span>

  <span class="ruby-ivar">@sort_versions</span>[<span class="ruby-identifier">dep</span>] <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-identifier">gem_name</span> = <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>

    <span class="ruby-comment"># An Array per version returned, different entries for different platforms.</span>
    <span class="ruby-comment"># We only need the version here so it&#39;s ok to hard code this to the first instance.</span>
    <span class="ruby-identifier">locked_spec</span> = <span class="ruby-identifier">locked_specs</span>[<span class="ruby-identifier">gem_name</span>].<span class="ruby-identifier">first</span>

    <span class="ruby-keyword">if</span> <span class="ruby-identifier">strict</span>
      <span class="ruby-identifier">filter_dep_specs</span>(<span class="ruby-identifier">spec_groups</span>, <span class="ruby-identifier">locked_spec</span>)
    <span class="ruby-keyword">else</span>
      <span class="ruby-identifier">sort_dep_specs</span>(<span class="ruby-identifier">spec_groups</span>, <span class="ruby-identifier">locked_spec</span>)
    <span class="ruby-keyword">end</span>.<span class="ruby-identifier">tap</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">specs</span><span class="ruby-operator">|</span>
      <span class="ruby-keyword">if</span> <span class="ruby-constant">DEBUG</span>
        <span class="ruby-identifier">warn</span> <span class="ruby-identifier">before_result</span>
        <span class="ruby-identifier">warn</span> <span class="ruby-node">&quot; after sort_versions: #{debug_format_result(dep, specs).inspect}&quot;</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 id="private-instance-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Private Instance Methods</h3>
       </header>

    
      <div id="method-i-debug_format_result" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">debug_format_result</span><span
            class="method-args">(dep, spec_groups)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="debug_format_result-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 183</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">debug_format_result</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">spec_groups</span>)
  <span class="ruby-identifier">a</span> = [<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">to_s</span>,
       <span class="ruby-identifier">spec_groups</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">sg</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">sg</span>.<span class="ruby-identifier">version</span>, <span class="ruby-identifier">sg</span>.<span class="ruby-identifier">dependencies_for_activated_platforms</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">dp</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">dp</span>.<span class="ruby-identifier">name</span>, <span class="ruby-identifier">dp</span>.<span class="ruby-identifier">requirement</span>.<span class="ruby-identifier">to_s</span>] }] }]
  <span class="ruby-identifier">last_map</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">sg_data</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">sg_data</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">version</span>, <span class="ruby-identifier">sg_data</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">aa</span><span class="ruby-operator">|</span> <span class="ruby-identifier">aa</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot; &quot;</span>) }] }
  [<span class="ruby-identifier">a</span>.<span class="ruby-identifier">first</span>, <span class="ruby-identifier">last_map</span>, <span class="ruby-identifier">level</span>, <span class="ruby-identifier">strict</span> <span class="ruby-operator">?</span> <span class="ruby-value">:strict</span> <span class="ruby-operator">:</span> <span class="ruby-value">:not_strict</span>]
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-either_version_older_than_locked" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">either_version_older_than_locked</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="either_version_older_than_locked-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 153</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">either_version_older_than_locked</span>
  <span class="ruby-ivar">@a_ver</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@locked_version</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@b_ver</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@locked_version</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-filter_dep_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">filter_dep_specs</span><span
            class="method-args">(spec_groups, locked_spec)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="filter_dep_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 103</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">filter_dep_specs</span>(<span class="ruby-identifier">spec_groups</span>, <span class="ruby-identifier">locked_spec</span>)
  <span class="ruby-identifier">res</span> = <span class="ruby-identifier">spec_groups</span>.<span class="ruby-identifier">select</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">spec_group</span><span class="ruby-operator">|</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">locked_spec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">major?</span>
      <span class="ruby-identifier">gsv</span> = <span class="ruby-identifier">spec_group</span>.<span class="ruby-identifier">version</span>
      <span class="ruby-identifier">lsv</span> = <span class="ruby-identifier">locked_spec</span>.<span class="ruby-identifier">version</span>

      <span class="ruby-identifier">must_match</span> = <span class="ruby-identifier">minor?</span> <span class="ruby-operator">?</span> [<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> [<span class="ruby-value">0</span>, <span class="ruby-value">1</span>]

      <span class="ruby-identifier">matches</span> = <span class="ruby-identifier">must_match</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span> <span class="ruby-identifier">gsv</span>.<span class="ruby-identifier">segments</span>[<span class="ruby-identifier">idx</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">lsv</span>.<span class="ruby-identifier">segments</span>[<span class="ruby-identifier">idx</span>] }
      <span class="ruby-identifier">matches</span>.<span class="ruby-identifier">uniq</span> <span class="ruby-operator">==</span> [<span class="ruby-keyword">true</span>] <span class="ruby-operator">?</span> (<span class="ruby-identifier">gsv</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">lsv</span>) <span class="ruby-operator">:</span> <span class="ruby-keyword">false</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-keyword">true</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">sort_dep_specs</span>(<span class="ruby-identifier">res</span>, <span class="ruby-identifier">locked_spec</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-move_version_to_end" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">move_version_to_end</span><span
            class="method-args">(result, version)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="move_version_to_end-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 178</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">move_version_to_end</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">version</span>)
  <span class="ruby-identifier">move</span>, <span class="ruby-identifier">keep</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">partition</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">to_s</span> }
  <span class="ruby-identifier">keep</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">move</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-post_sort" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">post_sort</span><span
            class="method-args">(result)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Specific version moves can&#39;t always reliably be done during sorting as not all elements are compared against each other.</p>
          
          

          
          <div class="method-source-code" id="post_sort-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 168</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">post_sort</span>(<span class="ruby-identifier">result</span>)
  <span class="ruby-comment"># default :major behavior in Bundler does not do this</span>
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">result</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">major?</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">unlocking_gem?</span>
    <span class="ruby-identifier">result</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">move_version_to_end</span>(<span class="ruby-identifier">result</span>, <span class="ruby-ivar">@locked_version</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-segments_do_not_match" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">segments_do_not_match</span><span
            class="method-args">(level)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="segments_do_not_match-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 157</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">segments_do_not_match</span>(<span class="ruby-identifier">level</span>)
  <span class="ruby-identifier">index</span> = [<span class="ruby-value">:major</span>, <span class="ruby-value">:minor</span>].<span class="ruby-identifier">index</span>(<span class="ruby-identifier">level</span>)
  <span class="ruby-ivar">@a_ver</span>.<span class="ruby-identifier">segments</span>[<span class="ruby-identifier">index</span>] <span class="ruby-operator">!=</span> <span class="ruby-ivar">@b_ver</span>.<span class="ruby-identifier">segments</span>[<span class="ruby-identifier">index</span>]
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-sort_dep_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">sort_dep_specs</span><span
            class="method-args">(spec_groups, locked_spec)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="sort_dep_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 121</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sort_dep_specs</span>(<span class="ruby-identifier">spec_groups</span>, <span class="ruby-identifier">locked_spec</span>)
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">spec_groups</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">locked_spec</span>
  <span class="ruby-ivar">@gem_name</span> = <span class="ruby-identifier">locked_spec</span>.<span class="ruby-identifier">name</span>
  <span class="ruby-ivar">@locked_version</span> = <span class="ruby-identifier">locked_spec</span>.<span class="ruby-identifier">version</span>

  <span class="ruby-identifier">result</span> = <span class="ruby-identifier">spec_groups</span>.<span class="ruby-identifier">sort</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">|</span>
    <span class="ruby-ivar">@a_ver</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">version</span>
    <span class="ruby-ivar">@b_ver</span> = <span class="ruby-identifier">b</span>.<span class="ruby-identifier">version</span>

    <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@prerelease_specified</span>[<span class="ruby-ivar">@gem_name</span>]
      <span class="ruby-identifier">a_pre</span> = <span class="ruby-ivar">@a_ver</span>.<span class="ruby-identifier">prerelease?</span>
      <span class="ruby-identifier">b_pre</span> = <span class="ruby-ivar">@b_ver</span>.<span class="ruby-identifier">prerelease?</span>

      <span class="ruby-keyword">next</span> <span class="ruby-value">-1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">a_pre</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">b_pre</span>
      <span class="ruby-keyword">next</span>  <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">b_pre</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a_pre</span>
    <span class="ruby-keyword">end</span>

    <span class="ruby-keyword">if</span> <span class="ruby-identifier">major?</span>
      <span class="ruby-ivar">@a_ver</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-ivar">@b_ver</span>
    <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">either_version_older_than_locked</span>
      <span class="ruby-ivar">@a_ver</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-ivar">@b_ver</span>
    <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">segments_do_not_match</span>(<span class="ruby-value">:major</span>)
      <span class="ruby-ivar">@b_ver</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-ivar">@a_ver</span>
    <span class="ruby-keyword">elsif</span> <span class="ruby-operator">!</span><span class="ruby-identifier">minor?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">segments_do_not_match</span>(<span class="ruby-value">:minor</span>)
      <span class="ruby-ivar">@b_ver</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-ivar">@a_ver</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-ivar">@a_ver</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-ivar">@b_ver</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">post_sort</span>(<span class="ruby-identifier">result</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-unlocking_gem-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">unlocking_gem?</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="unlocking_gem-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/gem_version_promoter.rb, line 162</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">unlocking_gem?</span>
  <span class="ruby-identifier">unlock_gems</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">unlock_gems</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@gem_name</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>