pax_global_header00006660000000000000000000000064144670145440014523gustar00rootroot0000000000000052 comment=6992224f6fbd8ca3314163a57b355e422a60886c mavengem-mavengem-2.0.1/000077500000000000000000000000001446701454400151175ustar00rootroot00000000000000mavengem-mavengem-2.0.1/.github/000077500000000000000000000000001446701454400164575ustar00rootroot00000000000000mavengem-mavengem-2.0.1/.github/workflows/000077500000000000000000000000001446701454400205145ustar00rootroot00000000000000mavengem-mavengem-2.0.1/.github/workflows/maven.yml000066400000000000000000000021771446701454400223540ustar00rootroot00000000000000# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Java CI with Maven on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B package --file pom.xml # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - name: Update dependency graph if: github.ref == 'refs/heads/master' uses: advanced-security/maven-dependency-submission-action@v3 mavengem-mavengem-2.0.1/.gitignore000066400000000000000000000000421446701454400171030ustar00rootroot00000000000000*Backup release.properties target mavengem-mavengem-2.0.1/.travis.yml000066400000000000000000000003231446701454400172260ustar00rootroot00000000000000language: java sudo: false before_install: - rm ~/.m2/settings.xml - export MAVEN_SKIP_RC=true install: mvn install -Dmaven.test.skip -Dinvoker.skip -Ptorquebox script: mvn verify -Ptorquebox -Dinvoker.skip mavengem-mavengem-2.0.1/LICENSE000066400000000000000000000257611446701454400161370ustar00rootroot00000000000000Eclipse Public License -v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. mavengem-mavengem-2.0.1/README.md000066400000000000000000000021051446701454400163740ustar00rootroot00000000000000# mavengem this project consists of two modules. one is converting a rubygems repository into maven repository. this happens either via registered the protocol handler in JVM or by using a special ```MavenGemURLConnection``` which turns a rubygems repository on the fly to maven repository. the second module uses this to add a transport extension to maven allowing to use gems from a rubygems repository as gem artifacts inside a POM. see also [http://maven.apache.org/wagon/](maven-wagon). License ------- As the wagon code was more or less stolen from EPL licensed code [https://github.com/apache/maven-wagon/blob/master/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java](LightweightHttpWagon.java) this code is under the same license: EPL Contributing ------------ 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Added some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request meta-fu ------- enjoy :) mavengem-mavengem-2.0.1/mavengem-protocol/000077500000000000000000000000001446701454400205555ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/README.md000066400000000000000000000044551446701454400220440ustar00rootroot00000000000000# mavengem protocol convert a rubygems repository into a maven repository. ## usage via protocol handler ``` org.torquebox.mojo.mavengem.Handler.registerMavenGemProtocol() URL url = new URL("mavengem:https://rubygems.org/maven/releases/rubygems/rails/maven-metadata.xml"); ``` here https://rubygems.org is a rubgems repository the path "/maven/releases/rubygems/rails/maven-metadata.xml" does not exist there but the mavengem protocol adds it on the fly using metadata from the rubygems repository. for configuration pass in a ```RubygemsFactory``` ``` RubygemsFactory factory = ... Handler.registerMavenGemProtocol(factory) ``` more details belowsee below for the configuration options. the protocol handler can be registered only once. ## use the MavenGemURLConnection directly ``` URLConnection con = new org.torquebox.mojo.mavengem.MavenGemURLConnection(new URL("https://rubygems.org"), "/maven/releases/rubygems/rails/maven-metadata.xml") ``` it is also possible to leave the basepath ``` MavenGemURLConnection(new URL("https://rubygems.org", "/rubygems/rails/maven-metadata.xml") ``` for configuration again via a ```RubygemsFactory``` ``` RubygemsFactory factory = ... MavenGemURLConnection(factory, new URL("https://rubygems.org"), "/rubygems/rails/maven-metadata.xml") ``` ## configuration when not using a explicit ```RubygemsFactory``` a default factory is used. ### configure the default RubygemsFactory this is done via system properties. the default cache directory is **$HOME/.mavengem**. to change this to something else use the system property **mavengem.cachedir**. to change the mirror setting use the system property **mavengem.mirror**. setting this means that **ALL** request go through this mirror whether it is a request to rubygems.org or to any other rubygems repository. to have more control over the mirrors, i.e. one mirror per domain, you need to use an explicit ```RubygemsFactory``` to configure it. ### configure RubygemsFactory whenever you use an instance of ```RubygemsFactory``` no system properties are used to configure it, only the constructor arguments. here you can set the cache directory and the "catch-all-mirror" as with the default ```RubygemsFactory``` via the system properties. and you also can pass in a ```Map``` which can map a given rubygems repository url to mirror. mavengem-mavengem-2.0.1/mavengem-protocol/pom.xml000066400000000000000000000020161446701454400220710ustar00rootroot00000000000000 4.0.0 mavengem org.jruby.maven 2.0.1 mavengem-protocol jar Protocol Handler for Mavengem: org.jruby.maven rubygems-tools ${project.version} org.jruby jruby ${jruby.version} junit junit 4.13.1 test mavengem-mavengem-2.0.1/mavengem-protocol/src/000077500000000000000000000000001446701454400213445ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/000077500000000000000000000000001446701454400222705ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/000077500000000000000000000000001446701454400232115ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/000077500000000000000000000000001446701454400240005ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/torquebox/000077500000000000000000000000001446701454400260305ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/torquebox/mojo/000077500000000000000000000000001446701454400267745ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/torquebox/mojo/mavengem/000077500000000000000000000000001446701454400305735ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/torquebox/mojo/mavengem/Handler.java000066400000000000000000000047121446701454400330170ustar00rootroot00000000000000package org.torquebox.mojo.mavengem; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; public class Handler extends URLStreamHandler { public static String KEY = "java.protocol.handler.pkgs"; public static String PKG = "org.torquebox.mojo"; public static String PING_URL = "mavengem:https://rubygems.org" + MavenGemURLConnection.PING; private static RubygemsFactory factory; private String uri; public synchronized static boolean isMavenGemProtocolRegistered() { return System.getProperties().contains(KEY); } public synchronized static boolean registerMavenGemProtocol() throws MalformedURLException { return registerMavenGemProtocol(RubygemsFactory.defaultFactory()); } public synchronized static boolean registerMavenGemProtocol(RubygemsFactory rubygemsFactory) { if (ping()) { // we can register the protocol only once return false; } factory = rubygemsFactory; if (System.getProperties().contains(KEY)) { String current = System.getProperty(KEY); if (!current.contains(PKG)) { System.setProperty(KEY, current + "|" + PKG); } } else { System.setProperty(KEY, PKG); } return ping(); } private static boolean ping() { try { // this url works offline as /maven/releases/ping is // not a remote resource. but using the protocol here // will register this instance Handler and other // classloaders will be able to use the mavengem-protocol as well // this does not go online see MavenGemURLConnection URL url = new URL(PING_URL); try (InputStream in = url.openStream()) { byte[] data = new byte[in.available()]; in.read(data, 0, data.length); return "pong".equals(new String(data)); } } catch (IOException e) { return false; } } @Override protected void parseURL(URL u, String spec, int start, int end) { uri = spec.substring(start, end); super.parseURL(u, spec, start, end); } @Override protected URLConnection openConnection(URL url) throws IOException { return MavenGemURLConnection.create(factory, uri); } } MavenGemURLConnection.java000066400000000000000000000131261446701454400354640ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/torquebox/mojo/mavengempackage org.torquebox.mojo.mavengem; import org.torquebox.mojo.rubygems.GemArtifactFile; import org.torquebox.mojo.rubygems.RubygemsFile; import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.nio.file.NoSuchFileException; public class MavenGemURLConnection extends URLConnection { public static final String MAVEN_RELEASES = "/maven/releases"; public static final String PING = MAVEN_RELEASES + "/ping"; private static final RubygemsFactory NO_RUBYGEMS_FACTORY = null; // package private for testing final URL baseurl; final String path; final RubygemsFactory factory; private final Proxy proxy; private InputStream in; private long timestamp = -1; private int counter = 12; // seconds public MavenGemURLConnection(URL baseurl, String path) throws MalformedURLException { this(NO_RUBYGEMS_FACTORY, baseurl, path, Proxy.NO_PROXY); } public MavenGemURLConnection(URL baseurl, String path, Proxy proxy) throws MalformedURLException { this(NO_RUBYGEMS_FACTORY, baseurl, path, proxy); } public MavenGemURLConnection(RubygemsFactory factory, URL baseurl, String path) throws MalformedURLException { this(factory, baseurl, path, Proxy.NO_PROXY); } public MavenGemURLConnection(RubygemsFactory factory, URL baseurl, String path, Proxy proxy) throws MalformedURLException { super(baseurl); this.proxy = proxy == null ? Proxy.NO_PROXY : proxy; this.factory = factory == null ? RubygemsFactory.defaultFactory() : factory; this.baseurl = baseurl; this.path = path.startsWith(MAVEN_RELEASES) ? path : MAVEN_RELEASES + path; } public static MavenGemURLConnection create(String uri) throws MalformedURLException { return create(NO_RUBYGEMS_FACTORY, uri, Proxy.NO_PROXY); } public static MavenGemURLConnection create(String uri, Proxy proxy) throws MalformedURLException { return create(NO_RUBYGEMS_FACTORY, uri, proxy); } public static MavenGemURLConnection create(RubygemsFactory factory, String uri) throws MalformedURLException { return create(factory, uri, Proxy.NO_PROXY); } public static MavenGemURLConnection create(RubygemsFactory factory, String uri, Proxy proxy) throws MalformedURLException { int index = uri.indexOf(MAVEN_RELEASES); String path = uri.substring(index); String baseurl = uri.substring(0, index); return new MavenGemURLConnection(factory, new URL(baseurl), path, proxy); } @Override synchronized public InputStream getInputStream() throws IOException { if (in == null) { connect(); } return in; } @Override synchronized public long getLastModified() { if (timestamp == -1) { try { connect(); } catch (IOException e) { // ignore } } return timestamp; } @Override synchronized public void connect() throws IOException { connect(factory.getOrCreate(baseurl)); } private void connect(Rubygems facade) throws IOException { RubygemsFile file = facade.get(path); switch (file.state()) { case FORBIDDEN: throw new IOException("forbidden: " + file + " on " + baseurl); case NOT_EXISTS: if (path.equals(PING)) { in = new ByteArrayInputStream("pong".getBytes()); break; } throw new FileNotFoundException(file.toString() + " on " + baseurl); case NO_PAYLOAD: switch (file.type()) { case GEM_ARTIFACT: // we can pass in null as dependenciesData since we have already the gem in = openInputStream(baseurl + "/gems/" + ((GemArtifactFile) file).gem(null).filename() + ".gem"); case GEM: // TODO timestamp in = openInputStream(baseurl + "/" + file.remotePath()); default: throw new FileNotFoundException("view - not implemented. " + file + " on " + baseurl); } case ERROR: if (file.getException() instanceof NoSuchFileException) { throw new FileNotFoundException(file.toString() + " on " + baseurl); } throw new IOException(file.toString() + " on " + baseurl, file.getException()); case TEMP_UNAVAILABLE: try { Thread.sleep(1000); } catch (InterruptedException ignore) { } if (--counter > 0) { connect(facade); } break; case PAYLOAD: in = facade.getInputStream(file); timestamp = facade.getModified(file); break; case NEW_INSTANCE: default: throw new RuntimeException("BUG: should never reach here. " + file + " on " + baseurl); } } private InputStream openInputStream(final String uri) throws IOException { if (proxy == Proxy.NO_PROXY) { return new URL(uri).openStream(); } System.err.println(proxy); return new URL(uri).openConnection(proxy).getInputStream(); } } mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/torquebox/mojo/mavengem/Rubygems.java000066400000000000000000000031661446701454400332410ustar00rootroot00000000000000package org.torquebox.mojo.mavengem; import org.jruby.embed.IsolatedScriptingContainer; import org.torquebox.mojo.rubygems.DefaultRubygemsGateway; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.cuba.RubygemsFileSystem; import org.torquebox.mojo.rubygems.layout.CachingProxyStorage; import org.torquebox.mojo.rubygems.layout.ProxiedRubygemsFileSystem; import org.torquebox.mojo.rubygems.layout.ProxyStorage; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.HashMap; import java.util.Map; public class Rubygems { private static RubygemsGateway gateway = new DefaultRubygemsGateway(new IsolatedScriptingContainer()); private static Map facades = new HashMap(); private final ProxyStorage storage; private final RubygemsFileSystem files; Rubygems(URL url, File baseCacheDir) { // we do not want to expose credentials inside the directory name File cachedir = new File(baseCacheDir, url.toString().replaceFirst("://[^:]+:[^:]+@", "://").replaceAll("[/:.]", "_")); this.storage = new CachingProxyStorage(cachedir, url); this.files = new ProxiedRubygemsFileSystem(gateway, storage); } public InputStream getInputStream(RubygemsFile file) throws IOException { return this.storage.getInputStream(file); } public RubygemsFile get(String path) { return this.files.get(path); } public long getModified(RubygemsFile file) { return this.storage.getModified(file); } } RubygemsFactory.java000066400000000000000000000075551446701454400345200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/main/java/org/torquebox/mojo/mavengempackage org.torquebox.mojo.mavengem; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.Map; public class RubygemsFactory { public static final String MAVENGEM_MIRROR = "mavengem.mirror"; public static final String MAVENGEM_CACHEDIR = "mavengem.cachedir"; static final URL NO_MIRROR; private static final Map facades = new HashMap<>(); public static File DEFAULT_CACHEDIR = new File(System.getProperty("user.home"), ".mavengem"); static RubygemsFactory factory; static { try { NO_MIRROR = new URL("http://example.com/no_mirror"); } catch (MalformedURLException e) { throw new RuntimeException("can not happen", e); } } // keep package access for testing final File cacheDir; final Map mirrors; final URL catchAllMirror; public RubygemsFactory() throws MalformedURLException { this(DEFAULT_CACHEDIR, NO_MIRROR, null); } public RubygemsFactory(URL mirror) throws MalformedURLException { this(DEFAULT_CACHEDIR, mirror, null); } public RubygemsFactory(Map mirrors) throws MalformedURLException { this(DEFAULT_CACHEDIR, NO_MIRROR, mirrors); } public RubygemsFactory(File cacheDir) throws MalformedURLException { this(cacheDir, NO_MIRROR, null); } public RubygemsFactory(File cacheDir, URL mirror) throws MalformedURLException { this(cacheDir, mirror, null); } public RubygemsFactory(File cacheDir, Map mirrors) throws MalformedURLException { this(cacheDir, NO_MIRROR, mirrors); } private RubygemsFactory(File cacheDir, URL mirror, Map mirrors) throws MalformedURLException { this(cacheDir, mirror, mirrors, true); } private RubygemsFactory(File cacheDir, URL mirror, Map mirrors, boolean check) throws MalformedURLException { if (check) { if (cacheDir == null) { throw new IllegalArgumentException("cache directory can not be null"); } if (mirror == null) { throw new IllegalArgumentException("mirror can not be null"); } } if (mirror != null) { this.catchAllMirror = mirror; } else { if (System.getProperty(MAVENGEM_MIRROR) != null) { this.catchAllMirror = new URL(System.getProperty(MAVENGEM_MIRROR)); } else { this.catchAllMirror = NO_MIRROR; } } this.mirrors = mirrors == null ? null : new HashMap<>(mirrors); if (cacheDir != null) { this.cacheDir = cacheDir; } else if (System.getProperty(MAVENGEM_CACHEDIR) != null) { this.cacheDir = new File(System.getProperty(MAVENGEM_CACHEDIR)); } else { this.cacheDir = DEFAULT_CACHEDIR; } } public static synchronized RubygemsFactory defaultFactory() throws MalformedURLException { if (factory == null) { factory = new RubygemsFactory(null, null, null, false); } return factory; } public Rubygems getOrCreate(URL url) throws MalformedURLException { if (this.catchAllMirror != NO_MIRROR) { url = this.catchAllMirror; } else if (this.mirrors != null && this.mirrors.containsKey(url)) { url = mirrors.get(url); } // FIXME the cachedir when coming from the facades map // FIXME can be different as map get shared between factories synchronized (facades) { Rubygems result = facades.get(url); if (result == null) { result = new Rubygems(url, this.cacheDir); facades.put(url, result); } return result; } } } mavengem-mavengem-2.0.1/mavengem-protocol/src/test/000077500000000000000000000000001446701454400223235ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/000077500000000000000000000000001446701454400232445ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/org/000077500000000000000000000000001446701454400240335ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/org/torquebox/000077500000000000000000000000001446701454400260635ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/org/torquebox/mojo/000077500000000000000000000000001446701454400270275ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/org/torquebox/mojo/mavengem/000077500000000000000000000000001446701454400306265ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/org/torquebox/mojo/mavengem/HandlerTest.java000066400000000000000000000105441446701454400337120ustar00rootroot00000000000000package org.torquebox.mojo.mavengem; import org.junit.Before; import org.junit.Test; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; import java.net.URL; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.startsWith; import static org.junit.Assert.assertThat; public class HandlerTest { private boolean result; private File cacheDir; @Before public void setup() throws Exception { cacheDir = new File(System.getProperty("basedir"), "target/cache4test"); result = Handler.registerMavenGemProtocol(new RubygemsFactory(cacheDir)); } @Test public void registerProtocol() throws Exception { assertThat(result, is(true)); assertThat(Handler.registerMavenGemProtocol(null), is(false)); assertThat(Handler.registerMavenGemProtocol(), is(false)); } @Test public void ping() throws Exception { URL url = new URL("mavengem:https://rubygems.org/something/maven/releases/ping"); byte[] data = new byte[4]; url.openStream().read(data, 0, 4); String result = new String(data); assertThat(result, is("pong")); } @Test public void railsMavenMetadata() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "https___rubygems_org/info/rails.compact"); cached.delete(); URL url = new URL("mavengem:https://rubygems.org/maven/releases/rubygems/rails/maven-metadata.xml"); try (InputStream in = url.openStream()) { byte[] data = new byte[in.available()]; in.read(data, 0, in.available()); String result = new String(data); assertThat(result, startsWith("")); assertThat(result, containsString("4.2.5")); assertThat(result, endsWith("\n")); } assertThat(cached.getPath(), cached.isFile(), is(true)); } @Test public void railsPom() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "https___rubygems_org/api/v2/rubygems/rails/versions/4.2.5.json"); cached.delete(); URL url = new URL("mavengem:https://rubygems.org/maven/releases/rubygems/rails/4.2.5/rails-4.2.5.pom"); try (InputStream in = url.openStream()) { byte[] data = new byte[in.available()]; in.read(data, 0, in.available()); String result = new String(data); assertThat(result, startsWith("")); assertThat(result, containsString("4.2.5")); assertThat(result, containsString("Full-stack web application framework.")); assertThat(result, containsString("gem")); assertThat(result, endsWith("\n")); } assertThat(cached.getPath(), cached.isFile(), is(true)); } @Test(expected = FileNotFoundException.class) public void fileNotFoundOnWrongBaseURL() throws Exception { // this test goes online to rubygems.org URL url = new URL("mavengem:https://rubygems.org/something/not/right/here/maven/releases/rubygems/rails/maven-metadata.xml"); url.openStream(); } @Test(expected = FileNotFoundException.class) public void fileNotFoundOnDirectory() throws Exception { // this test goes online to rubygems.org URL url = new URL("mavengem:https://rubygems.org/maven/releases/rubygems/rails"); url.openStream(); } @Deprecated public void virtusPomWithAuthentication() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "http___rubygems_org/quick/Marshal.4.8/v/virtus-1.0.5.gemspec.rz"); cached.delete(); URL url = new URL("mavengem:http://me:andthecorner@rubygems.org/maven/releases/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); try (InputStream in = url.openStream()) { // just read the file byte[] data = new byte[in.available()]; in.read(data, 0, in.available()); } // the cached dir does not expose the credentials assertThat(cached.getPath(), cached.exists(), is(true)); } } MavenGemURLConnectionTest.java000066400000000000000000000160031446701454400363540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/org/torquebox/mojo/mavengempackage org.torquebox.mojo.mavengem; import org.junit.Before; import org.junit.Test; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.Map; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.startsWith; import static org.junit.Assert.assertThat; public class MavenGemURLConnectionTest { private File cacheDir; private RubygemsFactory factory; @Before public void setup() throws Exception { cacheDir = new File(System.getProperty("basedir"), "target/cache4test"); factory = new RubygemsFactory(cacheDir); } private void assertCached(URLConnection url, File cached) throws Exception { cached.delete(); try (InputStream in = url.getInputStream()) { // just read the file byte[] data = new byte[in.available()]; in.read(data, 0, in.available()); } // the cached dir does not expose the credentials assertThat(cached.getPath(), cached.exists(), is(true)); } @Test public void ping() throws Exception { URLConnection url = new MavenGemURLConnection(new URL("https://rubygems.org/something"), "/maven/releases/ping"); byte[] data = new byte[4]; url.getInputStream().read(data, 0, 4); String result = new String(data); assertThat(result, is("pong")); } @Test public void railsMavenMetadata() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "https___rubygems_org/info/rails.compact"); cached.delete(); URLConnection url = new MavenGemURLConnection(factory, new URL("https://rubygems.org"), "/maven/releases/rubygems/rails/maven-metadata.xml"); String result = download(url); assertThat(result, startsWith("")); assertThat(result, containsString("4.2.5")); assertThat(result, endsWith("\n")); assertThat(cached.getPath(), cached.isFile(), is(true)); } String download(URLConnection url) throws Exception { try (InputStream in = url.getInputStream()) { byte[] data = new byte[in.available()]; in.read(data, 0, in.available()); return new String(data); } } @Test public void railsPom() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "https___rubygems_org/api/v2/rubygems/rails/versions/4.2.5.json"); cached.delete(); URLConnection url = new MavenGemURLConnection(factory, new URL("https://rubygems.org"), "/rubygems/rails/4.2.5/rails-4.2.5.pom"); String result = download(url); assertThat(result, startsWith("")); assertThat(result, containsString("4.2.5")); assertThat(result, containsString("Full-stack web application framework.")); assertThat(result, containsString("gem")); assertThat(result, endsWith("\n")); assertThat(cached.getPath(), cached.isFile(), is(true)); } @Test(expected = FileNotFoundException.class) public void fileNotFoundOnWrongBaseURL() throws Exception { // this test goes online to rubygems.org URLConnection url = new MavenGemURLConnection(factory, new URL("https://rubygems.org/something/not/right/here"), "/maven/releases/rubygems/rails/maven-metadata.xml"); url.getInputStream(); } @Test(expected = FileNotFoundException.class) public void fileNotFoundOnDirectory() throws Exception { // this test goes online to rubygems.org URLConnection url = new MavenGemURLConnection(factory, new URL("https://rubygems.org"), "/maven/releases/rubygems/rails"); url.getInputStream(); } @Deprecated public void virtusPomWithAuthentication() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "http___rubygems_org/quick/Marshal.4.8/v/virtus-1.0.5.gemspec.rz"); // with the /maven/releases prefix URLConnection url = new MavenGemURLConnection(factory, new URL("http://me:andthecorner@rubygems.org"), "/maven/releases/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); // the cached dir does not expose the credentials assertCached(url, cached); // without the /maven/releases prefix url = new MavenGemURLConnection(factory, new URL("http://me:andthecorner@rubygems.org"), "/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); // the cached dir does not expose the credentials assertCached(url, cached); } @Deprecated public void virtusPomWithMirror() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "http___rubygems_org/quick/Marshal.4.8/v/virtus-1.0.5.gemspec.rz"); RubygemsFactory factory = new RubygemsFactory(cacheDir, new URL("http://me:andthecorner@rubygems.org")); // with the /maven/releases prefix URLConnection url = new MavenGemURLConnection(factory, new URL("http://example.com"), "/maven/releases/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); // the cached dir does not expose the credentials assertCached(url, cached); // without the /maven/releases prefix url = new MavenGemURLConnection(factory, new URL("http://example.com"), "/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); // the cached dir does not expose the credentials assertCached(url, cached); } @Deprecated public void virtusPomWithMirrors() throws Exception { // this test goes online to rubygems.org File cached = new File(cacheDir, "http___rubygems_org/quick/Marshal.4.8/v/virtus-1.0.5.gemspec.rz"); Map mirrors = new HashMap(); mirrors.put(new URL("http://example.com"), new URL("http://me:andthecorner@rubygems.org")); mirrors.put(new URL("http://hans:glueck@example.org"), new URL("http://rubygems.org")); RubygemsFactory factory = new RubygemsFactory(cacheDir, mirrors); // with the /maven/releases prefix URLConnection url = new MavenGemURLConnection(factory, new URL("http://example.com"), "/maven/releases/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); // the cached dir does not expose the credentials assertCached(url, cached); // without the /maven/releases prefix url = new MavenGemURLConnection(factory, new URL("http://example.org"), "/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); assertCached(url, cached); // go direct here cached = new File(cacheDir, "https___rubygems_org/quick/Marshal.4.8/v/virtus-1.0.5.gemspec.rz"); url = new MavenGemURLConnection(factory, new URL("https://rubygems.org"), "/rubygems/virtus/1.0.5/virtus-1.0.5.pom"); assertCached(url, cached); } } RubygemsFactoryTest.java000066400000000000000000000105421446701454400354010ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-protocol/src/test/java/org/torquebox/mojo/mavengempackage org.torquebox.mojo.mavengem; import org.junit.Test; import java.io.File; import java.net.URL; import java.util.HashMap; import java.util.Map; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; public class RubygemsFactoryTest { @Test public void defaultsOnDefaultFactory() throws Exception { RubygemsFactory.factory = null; System.getProperties().remove("mavengem.cachedir"); System.getProperties().remove("mavengem.mirror"); RubygemsFactory factory = RubygemsFactory.defaultFactory(); assertThat(factory.mirrors, nullValue()); assertThat(factory.catchAllMirror, is(RubygemsFactory.NO_MIRROR)); assertThat(factory.cacheDir.getName(), is(".mavengem")); } @Test public void defaultFactory() throws Exception { System.setProperty("mavengem.cachedir", "some/thing"); System.setProperty("mavengem.mirror", "https://example.org"); RubygemsFactory.factory = null; RubygemsFactory factory = RubygemsFactory.defaultFactory(); assertThat(factory.mirrors, nullValue()); assertThat(factory.catchAllMirror, is(new URL("https://example.org"))); assertThat(factory.cacheDir, is(new File("some/thing"))); } @Test public void defaultsOnInstance() throws Exception { RubygemsFactory factory = new RubygemsFactory(); assertThat(factory.mirrors, nullValue()); assertThat(factory.catchAllMirror, is(RubygemsFactory.NO_MIRROR)); assertThat(factory.cacheDir.getName(), is(".mavengem")); } @Test public void cachedir() throws Exception { RubygemsFactory factory = new RubygemsFactory(new File("some/thing")); assertThat(factory.mirrors, nullValue()); assertThat(factory.catchAllMirror, is(RubygemsFactory.NO_MIRROR)); assertThat(factory.cacheDir, is(new File("some/thing"))); } @Test public void mirror() throws Exception { RubygemsFactory factory = new RubygemsFactory(new URL("https://example.org")); assertThat(factory.mirrors, nullValue()); assertThat(factory.catchAllMirror, is(new URL("https://example.org"))); assertThat(factory.cacheDir.getName(), is(".mavengem")); } @Test public void mirrors() throws Exception { Map mirrors = new HashMap(); RubygemsFactory factory = new RubygemsFactory(mirrors); assertThat(factory.mirrors, is(mirrors)); assertThat(factory.catchAllMirror, is(RubygemsFactory.NO_MIRROR)); assertThat(factory.cacheDir.getName(), is(".mavengem")); } @Test public void cachedirAndMirror() throws Exception { RubygemsFactory factory = new RubygemsFactory(new File("some/thing"), new URL("https://example.org")); assertThat(factory.mirrors, nullValue()); assertThat(factory.catchAllMirror, is(new URL("https://example.org"))); assertThat(factory.cacheDir, is(new File("some/thing"))); } @Test public void cachedirAndMirrors() throws Exception { Map mirrors = new HashMap(); RubygemsFactory factory = new RubygemsFactory(new File("some/thing"), mirrors); assertThat(factory.mirrors, is(mirrors)); assertThat(factory.catchAllMirror, is(RubygemsFactory.NO_MIRROR)); assertThat(factory.cacheDir, is(new File("some/thing"))); } @Test(expected = IllegalArgumentException.class) public void cachedirAndMirrorsPrecondition() throws Exception { Map mirrors = new HashMap(); new RubygemsFactory(null, mirrors); } @Test(expected = IllegalArgumentException.class) public void cachedirPrecondition() throws Exception { new RubygemsFactory((File) null); } @Test(expected = IllegalArgumentException.class) public void mirrorPrecondition() throws Exception { new RubygemsFactory((URL) null); } @Test(expected = IllegalArgumentException.class) public void cachedirAndMirrorPreconditionFile() throws Exception { new RubygemsFactory(null, new URL("https://example.com")); } @Test(expected = IllegalArgumentException.class) public void cachedirAndMirrorPreconditionURL() throws Exception { new RubygemsFactory(new File("some/thing"), (URL) null); } } mavengem-mavengem-2.0.1/mavengem-wagon/000077500000000000000000000000001446701454400200275ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/README.md000066400000000000000000000105001446701454400213020ustar00rootroot00000000000000# mavengem wagon extend maven to use mavengem-protocol for configuring a rubygems repository. this allows to use gem-artifacts as dependencies. ## usage pom.xml setup ``` ... mavengems mavengem:http://rubygems.org org.jruby.maven mavengem-wagon 2.0.0 ``` the same with POM using ruby-DSL ``` repository :id => :mavengems, :url => 'mavengem:https://rubygems.org' extension 'org.jruby.maven:mavengem-wagon:2.0.0' ``` the wagon extension allos the use of the **mavengem:** protocol in the repository url. ## configuration the configuration happens inside settings.xml (default location is $HOME/.m2/settings.xml) and uses the **id** from the repository to allow further configurations. ### cache directory for the mavengem protocol ``` mavengems ${user.home}/.cachedir ``` ### username/password authentication PENDING wating for a new release for the underlying nexus-ruby-tools library to get this feature working ``` mavengems my_login my_password ``` ### mirror use a mirror for the configured server ``` mavengems https://rubygems.org ``` the usename and password in a configuration with mirror will be used for the mirror: ``` mavengems my_login my_password https://rubygems.org ``` ## possible problems warning like this might pop up but let the build pass. ``` [WARNING] Failure to transfer com.github.jnr:jffi:1.3.0-SNAPSHOT/maven-metadata.xml from mavengem:https://rubygems.org was cached in the local repository, resolution will not be reattempted until the update interval of mavengems has elapsed or updates are forced. Original error: Could not transfer metadata com.github.jnr:jffi:1.3.0-SNAPSHOT/maven-metadata.xml from/to mavengems (mavengem:https://rubygems.org): Cannot access mavengem:https://rubygems.org with type default using the available connector factories: BasicRepositoryConnectorFactory [WARNING] Could not transfer metadata com.github.jnr:jnr-x86asm/maven-metadata.xml from/to mavengems (mavengem:https://rubygems.org): Cannot access mavengem:https://rubygems.org with type default using the available connector factories: BasicRepositoryConnectorFactory ``` the only way to avoid such warning or in case the build fails, is to use maven-3.3.x and add .mvn/extensions.xml to your project with: ``` org.jruby.maven mavengem-wagon 2.0.0 ``` or ``` io.takari.polyglot polyglot-ruby 0.1.16 ``` using any of the jruby-maven-plugins like ``` org.jruby.maven gem-maven-plugin 3.0.0 true ... rubygems compass 1.0.3 gem ``` the extensions config set to ```true``` means that the gems get resolved before the ```mavengem``` gets registered, i.e. the ```mavengem``` protocol does not yet work. the .mvn/extensions.xml is the only way to fix this. maybe the extensions config of the gem-maven-plugin can be set to false. the resolution of the gems will work. mavengem-mavengem-2.0.1/mavengem-wagon/pom.xml000066400000000000000000000022101446701454400213370ustar00rootroot00000000000000 4.0.0 mavengem org.jruby.maven 2.0.1 mavengem-wagon Mavengem Protocol Wagon org.jruby.maven mavengem-protocol ${project.version} org.apache.maven.wagon wagon-provider-api 2.10 maven-invoker-plugin ${project.build.directory}/localrepo src/it/settings.xml mavengem-mavengem-2.0.1/mavengem-wagon/src/000077500000000000000000000000001446701454400206165ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/it/000077500000000000000000000000001446701454400212325ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_with_auth/000077500000000000000000000000001446701454400246205ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_with_auth/pom.xml000066400000000000000000000023441446701454400261400ustar00rootroot00000000000000 4.0.0 mirror org.torquebox.mojo.test 0.1.0 rubygems jar-dependencies 0.2.6 gem mavengems-with-mirror-with-auth mavengem:http://rubygems.org central http://central true true org.jruby.maven mavengem-wagon 2.0.0 mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_with_auth/postbuild.groovy000066400000000000000000000016001446701454400300710ustar00rootroot00000000000000import java.io.* import org.codehaus.plexus.util.FileUtils String log = FileUtils.fileRead( new File( basedir, "build.log" ) ); [ "Downloaded from mavengems-with-mirror-with-auth: mavengem:http://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.pom", "Downloaded from mavengems-with-mirror-with-auth: mavengem:http://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.gem" ].each { if ( !log.contains( it ) ) throw new RuntimeException( "log file does not contain '" + it + "'" ); } [ 'target/cachedir/https___rubygems_org/api/v2/rubygems/jar-dependencies/versions/0.2.6.json', 'target/cachedir/https___rubygems_org/gems/j/jar-dependencies-0.2.6.gem', 'target/cachedir/https___rubygems_org/info/jar-dependencies.compact' ].each { if ( !new File(basedir, it).exists() ) throw new RuntimeException( "expected file missing: '" + it + "'" ); } true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_with_auth/prebuild.groovy000066400000000000000000000000761446701454400277000ustar00rootroot00000000000000new File("${localRepositoryPath}/rubygems").deleteDir() true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_without_auth/000077500000000000000000000000001446701454400253505ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_without_auth/pom.xml000066400000000000000000000023361446701454400266710ustar00rootroot00000000000000 4.0.0 mirror org.torquebox.mojo.test 0.1.0 rubygems jar-dependencies 0.2.6 gem mavengems-with-mirror mavengem:http://rubygems.org central http://central true true org.jruby.maven mavengem-wagon 2.0.0 mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_without_auth/postbuild.groovy000066400000000000000000000015541446701454400306310ustar00rootroot00000000000000import java.io.* import org.codehaus.plexus.util.FileUtils String log = FileUtils.fileRead( new File( basedir, "build.log" ) ); [ "Downloaded from mavengems-with-mirror: mavengem:http://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.pom", "Downloaded from mavengems-with-mirror: mavengem:http://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.gem" ].each { if ( !log.contains( it ) ) throw new RuntimeException( "log file does not contain '" + it + "'" ); } [ 'target/cachedir/https___rubygems_org/api/v2/rubygems/jar-dependencies/versions/0.2.6.json', 'target/cachedir/https___rubygems_org/gems/j/jar-dependencies-0.2.6.gem', 'target/cachedir/https___rubygems_org/info/jar-dependencies.compact' ].each { if ( !new File(basedir, it).exists() ) throw new RuntimeException( "expected file missing: '" + it + "'" ); } true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/mirror_without_auth/prebuild.groovy000066400000000000000000000000761446701454400304300ustar00rootroot00000000000000new File("${localRepositoryPath}/rubygems").deleteDir() true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_with_auth/000077500000000000000000000000001446701454400253145ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_with_auth/pom.xml000066400000000000000000000023531446701454400266340ustar00rootroot00000000000000 4.0.0 no-mirror org.torquebox.mojo.test 0.1.0 rubygems jar-dependencies 0.2.6 gem mavengems-without-mirror-with-auth mavengem:https://rubygems.org central http://central true true org.jruby.maven mavengem-wagon 2.0.0 mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_with_auth/postbuild.groovy000066400000000000000000000016101446701454400305660ustar00rootroot00000000000000import java.io.* import org.codehaus.plexus.util.FileUtils String log = FileUtils.fileRead( new File( basedir, "build.log" ) ); [ "Downloaded from mavengems-without-mirror-with-auth: mavengem:https://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.pom", "Downloaded from mavengems-without-mirror-with-auth: mavengem:https://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.gem" ].each { if ( !log.contains( it ) ) throw new RuntimeException( "log file does not contain '" + it + "'" ); } [ 'target/cachedir/https___rubygems_org/api/v2/rubygems/jar-dependencies/versions/0.2.6.json', 'target/cachedir/https___rubygems_org/gems/j/jar-dependencies-0.2.6.gem', 'target/cachedir/https___rubygems_org/info/jar-dependencies.compact' ].each { if ( !new File(basedir, it).exists() ) throw new RuntimeException( "expected file missing: '" + it + "'" ); } true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_with_auth/prebuild.groovy000066400000000000000000000000761446701454400303740ustar00rootroot00000000000000new File("${localRepositoryPath}/rubygems").deleteDir() true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_without_auth/000077500000000000000000000000001446701454400260445ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_without_auth/pom.xml000066400000000000000000000023451446701454400273650ustar00rootroot00000000000000 4.0.0 no-mirror org.torquebox.mojo.test 0.1.0 rubygems jar-dependencies 0.2.6 gem mavengems-without-mirror mavengem:https://rubygems.org central http://central true true org.jruby.maven mavengem-wagon 2.0.0 mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_without_auth/postbuild.groovy000066400000000000000000000015641446701454400313260ustar00rootroot00000000000000import java.io.* import org.codehaus.plexus.util.FileUtils String log = FileUtils.fileRead( new File( basedir, "build.log" ) ); [ "Downloaded from mavengems-without-mirror: mavengem:https://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.pom", "Downloaded from mavengems-without-mirror: mavengem:https://rubygems.org/rubygems/jar-dependencies/0.2.6/jar-dependencies-0.2.6.gem" ].each { if ( !log.contains( it ) ) throw new RuntimeException( "log file does not contain '" + it + "'" ); } [ 'target/cachedir/https___rubygems_org/api/v2/rubygems/jar-dependencies/versions/0.2.6.json', 'target/cachedir/https___rubygems_org/gems/j/jar-dependencies-0.2.6.gem', 'target/cachedir/https___rubygems_org/info/jar-dependencies.compact' ].each { if ( !new File(basedir, it).exists() ) throw new RuntimeException( "expected file missing: '" + it + "'" ); } true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/no_mirror_without_auth/prebuild.groovy000066400000000000000000000000761446701454400311240ustar00rootroot00000000000000new File("${localRepositoryPath}/rubygems").deleteDir() true mavengem-mavengem-2.0.1/mavengem-wagon/src/it/settings.xml000066400000000000000000000027231446701454400236200ustar00rootroot00000000000000 mavengems-without-mirror ${user.dir}/target/cachedir mavengems-with-mirror ${user.dir}/target/cachedir https://rubygems.org mavengems-without-mirror-with-auth my_login my_password ${user.dir}/target/cachedir mavengems-with-mirror-with-auth my_login my_password ${user.dir}/target/cachedir https://rubygems.org it-repo true local.central @localRepositoryUrl@ true true mavengem-mavengem-2.0.1/mavengem-wagon/src/main/000077500000000000000000000000001446701454400215425ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/java/000077500000000000000000000000001446701454400224635ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/java/org/000077500000000000000000000000001446701454400232525ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/java/org/torquebox/000077500000000000000000000000001446701454400253025ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/java/org/torquebox/mojo/000077500000000000000000000000001446701454400262465ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/java/org/torquebox/mojo/mavengem/000077500000000000000000000000001446701454400300455ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/java/org/torquebox/mojo/mavengem/wagon/000077500000000000000000000000001446701454400311605ustar00rootroot00000000000000MavenGemWagon.java000066400000000000000000000131061446701454400344400ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/java/org/torquebox/mojo/mavengem/wagonpackage org.torquebox.mojo.mavengem.wagon; import org.apache.maven.wagon.ConnectionException; import org.apache.maven.wagon.InputData; import org.apache.maven.wagon.OutputData; import org.apache.maven.wagon.ResourceDoesNotExistException; import org.apache.maven.wagon.StreamWagon; import org.apache.maven.wagon.TransferFailedException; import org.apache.maven.wagon.authentication.AuthenticationException; import org.apache.maven.wagon.authorization.AuthorizationException; import org.apache.maven.wagon.proxy.ProxyInfo; import org.apache.maven.wagon.resource.Resource; import org.torquebox.mojo.mavengem.MavenGemURLConnection; import org.torquebox.mojo.mavengem.RubygemsFactory; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.InetSocketAddress; import java.net.MalformedURLException; import java.net.Proxy; import java.net.Proxy.Type; import java.net.SocketAddress; import java.net.URL; import java.net.URLConnection; public class MavenGemWagon extends StreamWagon { public static final String MAVEN_GEM_PREFIX = "mavengem:"; private Proxy proxy = Proxy.NO_PROXY; private RubygemsFactory _factory_; // configurable and set via the settings.xml, i.e. names here need to match // the names in settings.xml private File cachedir; private String mirror; @Override public void fillInputData(InputData inputData) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException { Resource resource = inputData.getResource(); try { URLConnection urlConnection = newConnection(resource.getName()); InputStream is = urlConnection.getInputStream(); inputData.setInputStream(is); resource.setLastModified(urlConnection.getLastModified()); resource.setContentLength(urlConnection.getContentLength()); } catch (MalformedURLException e) { throw new TransferFailedException("Invalid repository URL: " + e.getMessage(), e); } catch (FileNotFoundException e) { throw new ResourceDoesNotExistException("Unable to locate resource in repository", e); } catch (IOException e) { throw new TransferFailedException("Error transferring file: " + e.getMessage(), e); } } private RubygemsFactory rubygemsFactory() throws MalformedURLException { if (_factory_ == null) { // use the default if not set if (cachedir == null) { cachedir = RubygemsFactory.DEFAULT_CACHEDIR; } if (mirror != null) { _factory_ = new RubygemsFactory(cachedir, withAuthentication(mirror)); } else { _factory_ = new RubygemsFactory(cachedir); } } return _factory_; } public URLConnection newConnection(String resourceName) throws MalformedURLException { return new MavenGemURLConnection(rubygemsFactory(), getRepositoryURL(), "/" + resourceName, proxy); } @Override public boolean resourceExists(String resourceName) throws TransferFailedException, AuthorizationException { try { newConnection(resourceName).connect(); return true; } catch (FileNotFoundException e) { return false; } catch (MalformedURLException e) { throw new TransferFailedException("Invalid repository URL: " + e.getMessage(), e); } catch (IOException e) { throw new TransferFailedException("Error transferring file: " + e.getMessage(), e); } } @Override public void fillOutputData(OutputData outputData) throws TransferFailedException { throw new RuntimeException("only download is provided"); } @Override public void closeConnection() throws ConnectionException { } private URL withAuthentication(String url) throws MalformedURLException { if (authenticationInfo != null && authenticationInfo.getUserName() != null) { String credentials = authenticationInfo.getUserName() + ":" + authenticationInfo.getPassword(); url = url.replaceFirst("^(https?://)(.*)$", "$1" + credentials + "@$2"); } return new URL(url); } private URL getRepositoryURL() throws MalformedURLException { String url = getRepository().getUrl().substring(MAVEN_GEM_PREFIX.length()); return withAuthentication(url); } private Proxy getProxy(ProxyInfo proxyInfo) { return new Proxy(getProxyType(proxyInfo), getSocketAddress(proxyInfo)); } private Type getProxyType(ProxyInfo proxyInfo) { if (ProxyInfo.PROXY_SOCKS4.equals(proxyInfo.getType()) || ProxyInfo.PROXY_SOCKS5.equals(proxyInfo.getType())) { return Type.SOCKS; } else { return Type.HTTP; } } private SocketAddress getSocketAddress(ProxyInfo proxyInfo) { return InetSocketAddress.createUnresolved(proxyInfo.getHost(), proxyInfo.getPort()); } @Override protected void openConnectionInternal() throws ConnectionException, AuthenticationException { try { final ProxyInfo proxyInfo = getProxyInfo(getRepositoryURL().getProtocol(), getRepository().getHost()); if (proxyInfo != null) { this.proxy = getProxy(proxyInfo); } } catch (MalformedURLException e) { throw new ConnectionException("cannot create repository url", e); } } } mavengem-mavengem-2.0.1/mavengem-wagon/src/main/resources/000077500000000000000000000000001446701454400235545ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/resources/META-INF/000077500000000000000000000000001446701454400247145ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/resources/META-INF/plexus/000077500000000000000000000000001446701454400262345ustar00rootroot00000000000000mavengem-mavengem-2.0.1/mavengem-wagon/src/main/resources/META-INF/plexus/components.xml000066400000000000000000000005201446701454400311400ustar00rootroot00000000000000 org.apache.maven.wagon.Wagon mavengem org.torquebox.mojo.mavengem.wagon.MavenGemWagon per-lookup mavengem-mavengem-2.0.1/pom.xml000066400000000000000000000063251446701454400164420ustar00rootroot00000000000000 4.0.0 org.sonatype.oss oss-parent 9 org.jruby.maven mavengem 2.0.1 pom Mavengem Protocol and Mavengem Wagon mavengem protocol converts a rubygems repository on the fly to a maven repository and the mavengem wagon uses it to provide gem artifacts to maven POMs http://github.com/jruby/mavengem scm:git:git://github.com/jruby/mavengem.git scm:git:ssh://git@github.com/jruby/mavengem.git http://github.com/jruby/mavengem EPL http://opensource.org/licenses/eclipse-1.0.txt repo mkristian Christian Meier m.kristian@web.de headius Charles Oliver Nutter headius@headius.com rubygems-tools mavengem-protocol mavengem-wagon 9.4.3.0 false true sonatype https://oss.sonatype.org/content/repositories/snapshots/ false true sonatype https://oss.sonatype.org/content/repositories/snapshots/ maven-invoker-plugin 2.0.0 ${project.build.directory}/it true integration-test install run maven-compiler-plugin 3.3 8 8 mavengem-mavengem-2.0.1/rubygems-tools/000077500000000000000000000000001446701454400201125ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/README.md000066400000000000000000000215101446701454400213700ustar00rootroot00000000000000 # design notes # some files on rubygems.org are actually virtual, like . storing all gems inside a single directory may or may not the right thing. the nexus-ruby-tools decided it is not a good thing to do because of past inode on the filesystem with such huge directories. ## directory layout - local vs. remote ## this is the main idea of having ```storage```-path and the ```remote```-path in a ```RubygemsFile``` object. for each file type of the rubygems repo there is special implementation for this type, with ```storage``` and```remote``` path, ```type``` and ```name```. together with the ```RubygemsFileFactory``` interface all those sub-classes of ```RubygemsFile``` allow to define the storage directory layout vs. the remote layout. the remote layout is used to access a rubygems repository via any ruby tools. ## converting a path into a RubygemsFile object ## the pattern matching follows the some ideas of a **cuba** gem from the ruby-world - to explain the name of the package used. so basically each directory knows its content and either creates the right ```RubygemsFile``` or delegates to the sub-directory. each directory has its own **cuba** class. so the implementations of ```Cuba``` and the ```DefaultRubygemsFileFactory``` define the directory layout. ### the remote directory layout ### . ├── api │ └── v1 │ └── dependencies ├── gems │ ├── _-0.1.gem │ ├── yaml-1.2.0.gem │ └── zip-2.0.2.gem ├── latest_specs.4.8.gz ├── prerelease_specs.4.8.gz ├── quick | └── Marshal.4.8 | ├── _-.0.1.gemspec.rz | ├── yaml-1.1.0.gem | ├── yaml-1.2.0.gem | └── zip-2.0.2.gem └── specs.4.8.gz ### the storage directory layout ### . ├── api │ └── v1 │ └── dependencies | ├── _.json.rz | ├── yaml.json.rz | └── zip.json.rz ├── gems │ ├── _ | │ └── _-0.1.gem | ├── y | │ ├── yaml-1.1.0.gem | │ └── yaml-1.2.0.gem | └── z | └── zip-2.0.2.gem ├── latest_specs.4.8.gz ├── prerelease_specs.4.8.gz ├── quick | └── Marshal.4.8 | ├── _ | │ └── _-0.1.gemspec.rz | ├── y | │ ├── yaml-1.1.0.gemspec.rz | │ └── yaml-1.2.0.gemspec.rz | └── z | └── zip-2.0.2.gemspec.rz └── specs.4.8.gz ## rubygems repositories - hosted and proxied ## on hosted rubygems repositories you can add gems, maybe you can delete gems and you can retrieve gems. on proxied rubygems repository there is only retrieve, maybe an additional delete is possible. the add and delete on hosted one is only allowed on gem files since these actions need to update some metadata (specs.4.8.gz, latest_specs.4.8.gz, prerelease\_specs.4.8.gz). other files can be derieved from the gem file, like quick/Marshal.4.8/zip-2.0.2.gemspec.rz or api/v1/dependencies/zip.json.rz the hosted repository uses some kind of local storage and the proxied repository will get the data from remote http server. some request will be generated on the fly like the ones used by a very popular gem dependency manager (bundler gem): looking at this example from the "bundler API" . the response will be generated from the files api/v1/dependencies/maven-tools.json.rz, api/v1/dependencies/zip.json.rz and api/v1/dependencies/bundler.json.rz. in the hosted case these files can be again generated from the stored gem files. in the proxied case for example api/v1/dependencies/bundler.json.rz is just the response of . ## layout concept ## the layout is almost like the ```RubygemsFileFactory``` but adds another aspect to ```RubygemsFile``` a payload and a state. the payload can be anything or an Exception. the latter goes allong with state ```ERROR``` possible states are NEW\_INSTANCE, NOT\_EXISTS, ERROR, NO\_PAYLOAD, TEMP\_UNAVAILABLE, FORBIDDEN, PAYLOAD a layout implementation is associated with a ```Storage``` and modelled to serve one http method: GET, POST, DELETE. it knows where and how to store the different ```RubygemsFile```s or how to generate others content from the stored ones. ### layouts for hosted repo ### * HostedGETLayout * HostedPOSTLayout * HostedDELETELayout ### layouts for proxied/grouped repo ### * ProxiedGETLayout * DeleteLayout there is not POST-layout since nothing can be posted onto a proxy. the ```DeleteLayout``` allows to delete all "stored" content but the generated content returns a ```RubygemsFile``` with state FORBIDDEN ## assemble everything into a RubygemsFileSystem ## a ```RubygemsFileSystem``` has methods to return a plain ```RubygemsFile``` (with state NEW_INSTANCE) * file( String path ) * file( String path, String query ) or the get methods: * get( String path ) * get( String path, String query ) the post methods * post( InputStream is, String path ) * post( InputStream is, RubygemsFile file ) the delete method * delete( String path ) # tests with using SimpleStorage and CachingStorage # the ```SimpleStorage``` uses the hard disk to store files and uses ```InputStream```s as payload for ```RubygemsFile```. the ```CachingStorage``` is ```ProxyStoarge``` again caching the files on hard disk and using an URL for the 'remote' rubygems repository. these are used to run a big part of the unit tests with. ## sample using the test storages ## just to illustrate how to use a ```ProxiedRubygemsFileSystem``` or a ```HostedRubygemsFileSystem``` using the ```SimpleStorage``` or ```CachingStorage``` respectively. not that the difference between the hosted and proxied case is how the instance variable ```fileSystem``` get set with either a ```ProxiedRubygemsFileSystem``` or a ```HostedRubygemsFileSystem```. protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { RubygemsFile file = fileSystem.get( getPathInfo( req ), req.getQueryString() ); switch( file.state() ) { case FORBIDDEN: resp.sendError( HttpServletResponse.SC_FORBIDDEN ); break; case NOT_EXISTS: resp.sendError( HttpServletResponse.SC_NOT_FOUND ); break; case NO_PAYLOAD: // do something break; case ERROR: throw new ServletException( file.getException() ); case TEMP_UNAVAILABLE: resp.setHeader("Retry-After", "120");//seconds resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE ); break; case PAYLOAD: resp.setContentType( file.type().mime() ); if ( file.type().encoding() != null ) { resp.setCharacterEncoding( file.type().encoding() ); } if( file.type().isVaryAccept() ) { resp.setHeader("Vary", "Accept"); } IOUtil.copy( (InputStream) file.get(), resp.getOutputStream() ); break; case NEW_INSTANCE: throw new ServletException( "BUG: should never reach here" ); } } the code for using a ```RubygemsFileSystem``` in a nexus plugin is very similar, it just needs to deal with a different payload and exceptions. ## Storage and ProxyStorage ## these interfaces are the main ones to integrate with the nexus-2.x plugins. the ```ProxyStorage``` has some extra methods to allow to deal with Bundler API of rubygems repositories. those Bundler API responses are volatile but to allow some short lifed cache they have to treated differently from the hosted case. the nexus-2.x ruby plugin has three implementation of the ```Storage``` and ```ProxyStorage``` for hosted, proxied and grouped case but uses the ```RubygemsFileSystem``` from here. mavengem-mavengem-2.0.1/rubygems-tools/pom.xml000066400000000000000000000126241446701454400214340ustar00rootroot00000000000000 4.0.0 mavengem org.jruby.maven 2.0.1 rubygems-tools Rubygems Tools commons-codec commons-codec 1.11 org.jruby jruby ${jruby.version} pom org.sonatype.sisu.litmus litmus-testsupport 1.9 test commons-io commons-io 2.7 test rubygems maven-tools 1.2.1 gem provided rubygems virtus 1.0.5 gem provided rubygems descendants_tracker 0.0.4 gem provided rubygems thread_safe 0.3.6 gem provided rubygems equalizer 0.0.11 gem provided rubygems coercible 1.0.0 gem provided rubygems axiom-types 0.1.1 gem provided rubygems ice_nine 0.11.2 gem provided rubygems minitest 5.18.1 gem provided mavengems mavengem:https://rubygems.org 3.0.0 org.jruby.maven mavengem-wagon 2.0.0 target/rubygems-provided gems/** specifications/* ${basedir}/src/main/resources org.jruby.maven gem-maven-plugin ${jruby-plugins.version} initialize true org.jruby.maven minitest-maven-plugin ${jruby-plugins.version} spec ${project.basedir}/src/test/minispecs/*rb mavengem-mavengem-2.0.1/rubygems-tools/src/000077500000000000000000000000001446701454400207015ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/000077500000000000000000000000001446701454400216255ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/000077500000000000000000000000001446701454400225465ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/000077500000000000000000000000001446701454400233355ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/000077500000000000000000000000001446701454400253655ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/000077500000000000000000000000001446701454400263315ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/000077500000000000000000000000001446701454400301665ustar00rootroot00000000000000AbstractMetadataBuilder.java000066400000000000000000000026431446701454400354720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public abstract class AbstractMetadataBuilder { private static final SimpleDateFormat formater = new SimpleDateFormat("yyyyMMddHHmmss"); static { formater.setTimeZone(TimeZone.getTimeZone("UTC")); } protected final String timestamp; public AbstractMetadataBuilder(long modified) { timestamp = formatTimestamp(modified); } private static String formatTimestamp(final long modified) { synchronized (formater) { return formater.format(new Date(modified)); } } } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/ApiV1File.java000066400000000000000000000027431446701454400325570ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * there are currently only two supported files inside the /api/v1 directory: gems and api_key. * the constructor allows all file-names * * @author christian */ public class ApiV1File extends RubygemsFile { ApiV1File(RubygemsFileFactory factory, String storage, String remote, String name) { super(factory, FileType.API_V1, storage, remote, name); set(null);// no payload } /** * convenient method to convert a gem-filename into GemFile * * @param filename of the gem * @return GemFile */ public GemFile gem(String filename) { return factory.gemFile(filename.replaceFirst(".gem$", "")); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/ApiV2File.java000066400000000000000000000025001446701454400325470ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * for the only v2 API currently, /api/v2/rubygems/NAME/versions/VERSION.json */ public class ApiV2File extends RubygemsFile { private final String version; ApiV2File(RubygemsFileFactory factory, String storage, String remote, String name, String version) { super(factory, FileType.JSON_API, storage, remote, name); this.version = version; set(null);// no payload } /** * the version of the gem */ public String version() { return version; } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/BaseGemFile.java000066400000000000000000000052721446701454400331420ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; public class BaseGemFile extends RubygemsFile { private final String filename; private final String version; private final String platform; /** * contructor using the full filename of a gem. there is no version nor platform info available */ BaseGemFile(RubygemsFileFactory factory, FileType type, String storage, String remote, String filename) { this(factory, type, storage, remote, filename, null, null); } /** * constructor using name, version and platform to build the filename of a gem */ BaseGemFile(RubygemsFileFactory factory, FileType type, String storage, String remote, String name, String version, String platform) { super(factory, type, storage, remote, name); this.filename = toFilename(name, version, platform); this.version = version; this.platform = platform; } /** * helper method to concatenate name, version * and platform in the same manner as rubygems create filenames * of gems. */ public static String toFilename(String name, String version, String platform) { StringBuilder filename = new StringBuilder(name); if (version != null) { filename.append("-").append(version); if (platform != null && !"ruby".equals(platform)) { filename.append("-").append(platform); } } return filename.toString(); } /** * the full filename of the gem */ public String filename() { return filename; } /** * the version of the gem * * @return can be null */ public String version() { return version; } /** * the platform of the gem * * @return can be null */ public String platform() { return platform; } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/BundleRunner.java000066400000000000000000000050761446701454400334440ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.embed.PathType; import org.jruby.embed.ScriptingContainer; import org.jruby.runtime.builtin.IRubyObject; /** * wrapper around the bundle command using the a jruby ScriptingContainer * to execute it. * * @author christian */ public class BundleRunner extends ScriptWrapper { /** * @param ruby ScriptingContainer to use */ public BundleRunner(ScriptingContainer ruby) { super(ruby, newScript(ruby)); } /** * create a new ruby object of the bundler command */ private static Object newScript(final ScriptingContainer scriptingContainer) { IRubyObject runnerClass = scriptingContainer.parse(PathType.CLASSPATH, "nexus/bundle_runner.rb").run(); return scriptingContainer.callMethod(runnerClass, "new", IRubyObject.class); } /** * execute bundle install * * @return STDOUT from the command execution as String */ public String install() { return callMethod("exec", "install", String.class); } /** * execute bundle show * * @return STDOUT from the command execution as String */ public String show() { return callMethod("exec", "show", String.class); } /** * execute bundle config * * @return STDOUT from the command execution as String */ public String config() { return callMethod("exec", "config", String.class); } /** * execute bundle show {gem-name} * * @param gemName to be passed to the show command * @return STDOUT from the command execution as String */ public String show(String gemName) { return callMethod("exec", new String[]{"show", gemName}, String.class); } } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/BundlerApiFile.java000066400000000000000000000033531446701454400336620ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.util.Arrays; /** * belongs to the path /api/v1/dependencies?gems=name1,name2, now backed by the compact index api at /info/gemname * * @author christian */ public class BundlerApiFile extends RubygemsFile { private final String[] names; BundlerApiFile(RubygemsFileFactory factory, String remote, String... names) { super(factory, FileType.BUNDLER_API, storageName(remote, names = sortedNames(names)), remote, null); this.names = names; } private static String storageName(String remote, String[] names) { return remote.replaceFirst("\\?gems=.*$", "/" + String.join("+", names) + ".gems"); } private static String[] sortedNames(String[] names) { String[] sorted = names.clone(); Arrays.sort(sorted); return sorted; } /** * names of gems from the query parameter 'gems' */ public String[] gemnames() { return names; } }CompactInfoFile.java000066400000000000000000000021341446701454400337540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * for the new API, /info/GEM */ public class CompactInfoFile extends RubygemsFile { CompactInfoFile(RubygemsFileFactory factory, String storage, String remote, String name) { super(factory, FileType.COMPACT, storage, remote, name); set(null);// no payload } }DefaultRubygemsFileFactory.java000066400000000000000000000233331446701454400362100ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.torquebox.mojo.rubygems.cuba.RootCuba; import org.torquebox.mojo.rubygems.cuba.api.ApiCuba; import org.torquebox.mojo.rubygems.cuba.api.ApiV1Cuba; import org.torquebox.mojo.rubygems.cuba.api.ApiV1DependenciesCuba; import org.torquebox.mojo.rubygems.cuba.gems.GemsCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenPrereleasesRubygemsArtifactIdCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesRubygemsArtifactIdCuba; import org.torquebox.mojo.rubygems.cuba.quick.QuickCuba; import org.torquebox.mojo.rubygems.cuba.quick.QuickMarshalCuba; import java.security.SecureRandom; public class DefaultRubygemsFileFactory implements RubygemsFileFactory { public static final String ID = "DefaultRubygemsFileFactory"; private static final String SEPARATOR = "/"; private static final String GEMS = "/" + RootCuba.GEMS; private static final String QUICK_MARSHAL = "/" + RootCuba.QUICK + "/" + QuickCuba.MARSHAL_4_8; private static final String API_V1 = "/" + RootCuba.API + "/" + ApiCuba.V1; private static final String API_V2 = "/" + RootCuba.API + "/" + ApiCuba.V2; @Deprecated private static final String API_V1_DEPS = API_V1 + "/" + ApiV1Cuba.DEPENDENCIES; private static final String API_V2_RUBYGEMS = API_V2 + "/rubygems"; private static final String INFO = "info"; private static final String MAVEN_PRERELEASED_RUBYGEMS = "/" + RootCuba.MAVEN + "/" + MavenCuba.PRERELEASES + "/" + MavenReleasesCuba.RUBYGEMS; private static final String MAVEN_RELEASED_RUBYGEMS = "/" + RootCuba.MAVEN + "/" + MavenCuba.RELEASES + "/" + MavenReleasesCuba.RUBYGEMS; private final static SecureRandom random = new SecureRandom(); static { random.setSeed(System.currentTimeMillis()); } private String join(String... parts) { return String.join("", parts); } private String toPath(String name, String version, String timestamp, boolean snapshot) { String v1 = snapshot ? version + "-" + timestamp : version; String v2 = snapshot ? version + MavenPrereleasesRubygemsArtifactIdCuba.SNAPSHOT : version; return join(snapshot ? MAVEN_PRERELEASED_RUBYGEMS : MAVEN_RELEASED_RUBYGEMS, SEPARATOR, name, SEPARATOR, v2, SEPARATOR, name + '-' + v1); } @Override public Sha1File sha1(RubygemsFile file) { return new Sha1File(this, file.storagePath() + ".sha1", file.remotePath() + ".sha1", file); } @Override public NoContentFile noContent(final String path) { return new NoContentFile(this, path); } @Override public NotFoundFile notFound(String path) { return new NotFoundFile(this, path); } @Override public PomFile pomSnapshot(String name, String version, String timestamp) { return new PomFile(this, toPath(name, version, timestamp, true) + ".pom", name, version, true); } @Override public GemArtifactFile gemArtifactSnapshot(String name, String version, String timestamp) { return new GemArtifactFile(this, toPath(name, version, timestamp, true) + ".gem", name, version, true); } @Override public PomFile pom(String name, String version) { return new PomFile(this, toPath(name, version, null, false) + ".pom", name, version, false); } @Override public GemArtifactFile gemArtifact(String name, String version) { return new GemArtifactFile(this, toPath(name, version, null, false) + ".gem", name, version, false); } @Override public MavenMetadataSnapshotFile mavenMetadataSnapshot(String name, String version) { String path = join(MAVEN_PRERELEASED_RUBYGEMS, SEPARATOR, name, SEPARATOR, version + MavenPrereleasesRubygemsArtifactIdCuba.SNAPSHOT, SEPARATOR, MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML); return new MavenMetadataSnapshotFile(this, path, name, version); } @Override public MavenMetadataFile mavenMetadata(String name, boolean prereleased) { String path = join(prereleased ? MAVEN_PRERELEASED_RUBYGEMS : MAVEN_RELEASED_RUBYGEMS, SEPARATOR, name, SEPARATOR, MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML); return new MavenMetadataFile(this, path, name, prereleased); } @Override public Directory directory(String path, String... items) { if (!path.endsWith("/")) { path += "/"; } return new Directory(this, path, // that is the name path.substring(0, path.length() - 1).replaceFirst(".*\\/", ""), items); } @Override public RubygemsDirectory rubygemsDirectory(String path) { if (!path.endsWith("/")) { path += "/"; } return new RubygemsDirectory(this, path); } @Override public GemArtifactIdDirectory gemArtifactIdDirectory(String path, String name, boolean prereleases) { if (!path.endsWith("/")) { path += "/"; } return new GemArtifactIdDirectory(this, path, name, prereleases); } @Override public Directory gemArtifactIdVersionDirectory(String path, String name, String version, boolean prerelease) { if (!path.endsWith("/")) { path += "/"; } return new GemArtifactIdVersionDirectory(this, path, name, version, prerelease); } @Override public GemFile gemFile(String name, String version, String platform) { String filename = BaseGemFile.toFilename(name, version, platform); return new GemFile(this, join(GEMS, SEPARATOR, name.substring(0, 1), SEPARATOR, filename, GemsCuba.GEM), join(GEMS, SEPARATOR, filename, GemsCuba.GEM), name, version, platform); } @Override public GemFile gemFile(String name) { return new GemFile(this, join(GEMS, SEPARATOR, name.substring(0, 1), SEPARATOR, name, GemsCuba.GEM), join(GEMS, SEPARATOR, name, GemsCuba.GEM), name); } @Override public GemspecFile gemspecFile(String name, String version, String platform) { return new GemspecFile(this, join(API_V2_RUBYGEMS, SEPARATOR, name, SEPARATOR, "versions", SEPARATOR, version, ".json"), join(API_V2_RUBYGEMS, SEPARATOR, name, SEPARATOR, "versions", SEPARATOR, version, ".json"), name, version, platform); } @Override public GemspecFile gemspecFile(String name) { return new GemspecFile(this, join(QUICK_MARSHAL, SEPARATOR, name.substring(0, 1), SEPARATOR, name, QuickMarshalCuba.GEMSPEC_RZ), join(QUICK_MARSHAL, SEPARATOR, name, QuickMarshalCuba.GEMSPEC_RZ), name); } @Override @Deprecated public DependencyFile dependencyFile(String name) { return new DependencyFile(this, join(API_V1_DEPS, SEPARATOR, name, ApiV1DependenciesCuba.RUBY), join(API_V1_DEPS, "?gems=" + name), name); } @Override public ApiV2File rubygemsInfoV2(String name, String version) { return new ApiV2File(this, join(API_V2_RUBYGEMS, SEPARATOR, name, SEPARATOR, "versions", SEPARATOR, version, ".json"), join(API_V2_RUBYGEMS, SEPARATOR, name, SEPARATOR, "versions", SEPARATOR, version, ".json"), name, version); } @Override public CompactInfoFile compactInfo(String name) { return new CompactInfoFile(this, join("/info", SEPARATOR, name, ".compact"), join("/info", SEPARATOR, name), name); } @Override public BundlerApiFile bundlerApiFile(String names) { // normalize query string first names = names.replaceAll("%2C", ",").replaceAll(",,", ",").replaceAll("\\s+", "").replaceAll(",\\s*$", ""); return new BundlerApiFile(this, join(API_V1_DEPS, "?gems=" + names), names.split(",")); } @Override public BundlerApiFile bundlerApiFile(String... names) { StringBuilder gems = new StringBuilder("?gems="); boolean first = true; for (String name : names) { if (first) { first = false; } else { gems.append(","); } gems.append(name); } return new BundlerApiFile(this, join(API_V1_DEPS, gems.toString()), names); } @Override public ApiV1File apiV1File(String name) { return new ApiV1File(this, join(API_V1, SEPARATOR, Long.toString(Math.abs(random.nextLong())), ".", name), join(API_V1, SEPARATOR, name), name); } @Override public SpecsIndexFile specsIndexFile(SpecsIndexType type) { return this.specsIndexFile(type.filename().replace(RootCuba._4_8, "")); } @Override public SpecsIndexFile specsIndexFile(String name) { return new SpecsIndexFile(this, join(SEPARATOR, name, RootCuba._4_8), name); } @Override public SpecsIndexZippedFile specsIndexZippedFile(String name) { return new SpecsIndexZippedFile(this, join(SEPARATOR, name, RootCuba._4_8, RootCuba.GZ), name); } @Override public SpecsIndexZippedFile specsIndexZippedFile(SpecsIndexType type) { return this.specsIndexZippedFile(type.filename().replace(RootCuba._4_8, "")); } } DefaultRubygemsGateway.java000066400000000000000000000115721446701454400354040ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.RubyInstanceConfig; import org.jruby.embed.ScriptingContainer; import java.io.InputStream; public class DefaultRubygemsGateway implements RubygemsGateway { private final ScriptingContainer container; private Object dependencyHelperImplClass; private Object gemspecHelperImplClass; private Object specsHelperImplClass; private Object mergeSpecsHelperImplClass; private Object dependencyDataImplClass; private Object rubygemsV2GemInfoImplClass; private Object compactDependencyDataImplClass; /** * Ctor that accepts prepared non-null scripting container. */ public DefaultRubygemsGateway(final ScriptingContainer container) { this.container = container; this.container.setCompileMode(RubyInstanceConfig.CompileMode.OFF); dependencyHelperImplClass = container.runScriptlet("require 'nexus/dependency_helper_impl';" + "Nexus::DependencyHelperImpl"); gemspecHelperImplClass = container.runScriptlet("require 'nexus/gemspec_helper_impl';" + "Nexus::GemspecHelperImpl"); specsHelperImplClass = container.runScriptlet("require 'nexus/specs_helper_impl';" + "Nexus::SpecsHelperImpl"); mergeSpecsHelperImplClass = container.runScriptlet("require 'nexus/merge_specs_helper_impl';" + "Nexus::MergeSpecsHelperImpl"); dependencyDataImplClass = container.runScriptlet("require 'nexus/dependency_data_impl';" + "Nexus::DependencyDataImpl"); rubygemsV2GemInfoImplClass = container.runScriptlet("require 'nexus/rubygems_v2_gem_info_impl';" + "Nexus::RubygemsV2GemInfoImpl"); compactDependencyDataImplClass = container.runScriptlet("require 'nexus/compact_dependency_data';" + "Nexus::CompactDependencyData"); } @Override public void terminate() { dependencyHelperImplClass = null; gemspecHelperImplClass = null; specsHelperImplClass = null; mergeSpecsHelperImplClass = null; dependencyDataImplClass = null; rubygemsV2GemInfoImplClass = null; compactDependencyDataImplClass = null; container.terminate(); } @Override public SpecsHelper newSpecsHelper() { return container.callMethod(specsHelperImplClass, "new", SpecsHelper.class); } @Override public MergeSpecsHelper newMergeSpecsHelper() { return container.callMethod(mergeSpecsHelperImplClass, "new", MergeSpecsHelper.class); } @Override public DependencyHelper newDependencyHelper() { return container.callMethod(dependencyHelperImplClass, "new", DependencyHelper.class); } @Override public GemspecHelper newGemspecHelper(InputStream gemspec) { return container.callMethod(gemspecHelperImplClass, "from_gemspec_rz", gemspec, GemspecHelper.class); } @Override public GemspecHelper newGemspecHelperFromGem(InputStream gem) { return container.callMethod(gemspecHelperImplClass, "from_gem", gem, GemspecHelper.class); } @Override public GemspecHelper newGemspecHelperFromV2GemInfo(InputStream gem) { return container.callMethod(gemspecHelperImplClass, "from_rubygems_v2_gem_info", gem, GemspecHelper.class); } @Override public DependencyData newDependencyData(InputStream dependency, String name, long modified) { return container.callMethod(dependencyDataImplClass, "new", new Object[]{dependency, name, modified}, DependencyData.class); } @Override public RubygemsV2GemInfo newRubygemsV2GemInfo(InputStream apiV2FileIS, String name, String version, long modified) { return container.callMethod(rubygemsV2GemInfoImplClass, "new", new Object[]{apiV2FileIS, name, version, modified}, RubygemsV2GemInfo.class); } @Override public DependencyData newCompactDependencyData(InputStream dependency, String name, long modified) { return container.callMethod(compactDependencyDataImplClass, "new", new Object[]{dependency, name, modified}, DependencyData.class); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/DependencyData.java000066400000000000000000000032241446701454400337020ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * abstract the info of ONE gem which is delivered by * bundler API via /api/v1/dependencies?gems=n1,n2 *

* all the versions collected are jruby compatible. *

* retrieve the right java compatible platform * for a gem version. *

* with an extra modified attribute to build the right timestamp. * * @author christian */ public interface DependencyData { /** * all available versions of the a gem * * @return String[] all JRuby compatible versions */ String[] versions(boolean prereleased); /** * retrieve the rubygems platform for a given version * * @return either the platform of the null */ String platform(String version); /** * the name of the gem */ String name(); /** * when was the version data last modified. */ long modified(); }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/DependencyFile.java000066400000000000000000000022641446701454400337130ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represents /api/v1/dependencies/{name}.ruby * where the file content is the response of /api/v1/dependencies?gems={name} * * @author christian */ public class DependencyFile extends RubygemsFile { DependencyFile(RubygemsFileFactory factory, String storage, String remote, String name) { super(factory, FileType.DEPENDENCY, storage, remote, name); } }DependencyHelper.java000066400000000000000000000054761446701454400342040ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.io.ByteArrayInputStream; import java.io.InputStream; /** * helper to collect or merge dependency data from DependencyFiles * or extract the dependency data from a given GemspecFile. * the remote data from BundlerApiFile is collection of the same * dependency data format which can added as well. *

* after adding all the data, you can retrieve the list of gemnames for which * there are dependency data and retrieve them as marshalled stream (same format as * DependencyFile or BundlerApiFile). * * @author christian */ public interface DependencyHelper { /** * add dependency data to instance * * @param marshalledDependencyData stream of the marshalled "ruby" data */ void add(InputStream marshalledDependencyData); /** * add dependency data to instance * * @param compactInfo stream of compact info for the given gem * @param name the name of the gem * @param modified last modified date of the compact info */ void addCompact(InputStream compactInfo, String name, long modified); /** * add dependency data to instance from a rzipped gemspec object. * * @param gemspec rzipped stream of the marshalled gemspec object */ void addGemspec(InputStream gemspec); /** * freezes the instance - no more added of data is allowed - and returns * the list of gemnames for which dependency data was added. * * @return String[] of gemnames */ String[] getGemnames(); /** * marshal ruby object with dependency data for the given gemname. * * @param gemname * @return ByteArrayInputStream of binary data */ ByteArrayInputStream getInputStreamOf(String gemname); /** * marshal ruby object with dependency data for all the dependency data, * either with or without duplicates. * * @return ByteArrayInputStream of binary data */ ByteArrayInputStream getInputStream(boolean unique); }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/Directory.java000066400000000000000000000032251446701454400327770ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * represents a directory with entries/items *

* has no payload. * * @author christian */ public class Directory extends RubygemsFile { /** * directory items */ final List items; public Directory(RubygemsFileFactory factory, String path, String name, String... items) { super(factory, FileType.DIRECTORY, path, path, name); set(null);// no payload this.items = new ArrayList<>(Arrays.asList(items)); } /** * @return String[] the directory entries */ public String[] getItems() { return items.toArray(new String[items.size()]); } protected void addToString(StringBuilder builder) { super.addToString(builder); builder.append(", items=").append(items); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/FileType.java000066400000000000000000000050761446701454400325620ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * enum of possible file types with a rubygems repo including * the gem-artifacts and some virtual files like "not_found", etc *

* they all carry the mime-type, the encoding and a varyAccept boolean. * * @author christian */ public enum FileType { GEM("binary/octet-stream", true), GEMSPEC("binary/octet-stream", true), DEPENDENCY("application/octet-stream", true), MAVEN_METADATA("application/xml", "utf-8", true), MAVEN_METADATA_SNAPSHOT("application/xml", "utf-8", true), POM("application/xml", "utf-8", true), SPECS_INDEX("application/octet-stream", true), SPECS_INDEX_ZIPPED("application/x-gzip", true), DIRECTORY("text/html", "utf-8"), BUNDLER_API("application/octet-stream", true), API_V1("text/plain", "ASCII"), // for the api_key GEM_ARTIFACT("binary/octet-stream", true), SHA1("text/plain", "ASCII"), NOT_FOUND(null), FORBIDDEN(null), TEMP_UNAVAILABLE(null), NO_CONTENT("text/plain"), JSON_API("text/plain", "utf-8"), COMPACT("test/plain", "utf-8"); private final String encoding; private final String mime; private final boolean varyAccept; private FileType(String mime) { this(mime, null, false); } private FileType(String mime, boolean varyAccept) { this(mime, null, varyAccept); } private FileType(String mime, String encoding) { this(mime, encoding, false); } private FileType(String mime, String encoding, boolean varyAccept) { this.mime = mime; this.encoding = encoding; this.varyAccept = varyAccept; } public boolean isVaryAccept() { return varyAccept; } public String encoding() { return encoding; } public String mime() { return this.mime; } } GemArtifactFile.java000066400000000000000000000046071446701454400337470ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; public class GemArtifactFile extends RubygemsFile { private final String version; private final boolean snapshot; private GemFile gem; GemArtifactFile(RubygemsFileFactory factory, String path, String name, String version, boolean snapshot) { super(factory, FileType.GEM_ARTIFACT, path, path, name); this.version = version; this.snapshot = snapshot; } /** * the version of the gem */ public String version() { return version; } /** * whether it is a snapshot or not */ public boolean isSnapshot() { return snapshot; } /** * is lazy state of the associated GemFile. the GemFile needs to * have the right platform for which the {@link RubygemsV2GemInfo} is needed * to retrieve this platform. a second call can be done without RubygemsV2GemInfo ! * * @param dependencies can be null * @return the associated GemFile - can be null if RubygemsV2GemInfo was never passed in */ public GemFile gem(DependencyData dependencies) { if (this.gem == null && dependencies != null) { String platform = dependencies.platform(version()); if (platform != null) { this.gem = factory.gemFile(name(), version(), platform); } } return this.gem; } /** * the associated DependencyFile object for the gem-artifact */ public CompactInfoFile dependency() { return factory.compactInfo(name()); } }GemArtifactIdDirectory.java000066400000000000000000000040711446701454400353040ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.util.Arrays; /** * represent /maven/releases/rubygems/{artifactId} or /maven/prereleases/rubygems/{artifactId} * * @author christian */ public class GemArtifactIdDirectory extends Directory { private final boolean prereleased; GemArtifactIdDirectory(RubygemsFileFactory factory, String path, String name, boolean prereleased) { super(factory, path, name); items.add("maven-metadata.xml"); items.add("maven-metadata.xml.sha1"); this.prereleased = prereleased; } /** * whether to show prereleased or released gems inside the directory */ public boolean isPrerelease() { return prereleased; } /** * the DependencyFile of the given gem */ public CompactInfoFile dependency() { return this.factory.compactInfo(name()); } /** * setup the directory items. for each version one item, either * released or prereleased version. */ public void setItems(DependencyData data) { if (!prereleased) { // we list ALL versions when not on prereleased directory this.items.addAll(0, Arrays.asList(data.versions(false))); } this.items.addAll(0, Arrays.asList(data.versions(true))); } }GemArtifactIdVersionDirectory.java000066400000000000000000000033211446701454400366470ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represent /maven/releases/rubygems/{artifactId}/{version} or /maven/prereleases/rubygems/{artifactId}/{version} * * @author christian */ public class GemArtifactIdVersionDirectory extends Directory { /** * setup the directory items */ GemArtifactIdVersionDirectory(RubygemsFileFactory factory, String path, String name, String version, boolean prerelease) { super(factory, path, name); String base = name + "-" + version + "."; this.items.add(base + "pom"); this.items.add(base + "pom.sha1"); this.items.add(base + "gem"); this.items.add(base + "gem.sha1"); if (prerelease) { this.items.add("maven-metadata.xml"); this.items.add("maven-metadata.xml.sha1"); } } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/GemFile.java000066400000000000000000000034431446701454400323450ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represents /gems/{name}-{version}.gem or /gems/{name}-{platform}-{version}.gem or /gems/{filename}.gem * * @author christian */ public class GemFile extends BaseGemFile { /** * setup with full filename */ GemFile(RubygemsFileFactory factory, String storage, String remote, String filename) { super(factory, FileType.GEM, storage, remote, filename); } /** * setup with name, version and platform */ GemFile(RubygemsFileFactory factory, String storage, String remote, String name, String version, String platform) { super(factory, FileType.GEM, storage, remote, name, version, platform); } /** * retrieve the associated gemspec */ public GemspecFile gemspec() { if (version() != null) { return factory.gemspecFile(name(), version(), platform()); } else { return factory.gemspecFile(filename()); } } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/GemRunner.java000066400000000000000000000076151446701454400327440ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.embed.PathType; import org.jruby.embed.ScriptingContainer; import org.jruby.runtime.builtin.IRubyObject; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class GemRunner extends ScriptWrapper { private final String baseUrl; public GemRunner(ScriptingContainer ruby, String baseUrl) { super(ruby, newScript(ruby)); this.baseUrl = baseUrl; } private static Object newScript(final ScriptingContainer scriptingContainer) { IRubyObject runnerClass = scriptingContainer.parse(PathType.CLASSPATH, "nexus/gem_runner.rb").run(); return scriptingContainer.callMethod(runnerClass, "new", IRubyObject.class); } public String install(String repoId, String... gems) { List args = new ArrayList(); args.add("install"); args.add("-r"); addNoDocu(args); setSource(args, repoId); args.addAll(Arrays.asList(gems)); return callMethod("exec", args.toArray(), String.class); } private void setSource(List args, String repoId) { args.add("--clear-sources"); args.add("--source"); args.add(baseUrl + repoId + "/"); args.add("--update-sources"); } public String install(File... gems) { List args = new ArrayList(); args.add("install"); args.add("-l"); addNoDocu(args); for (File gem : gems) { args.add(gem.getAbsolutePath()); } return callMethod("exec", args.toArray(), String.class); } private void addNoDocu(List args) { args.add("--no-rdoc"); args.add("--no-ri"); } public String push(String repoId, File gem) { List args = new ArrayList(); args.add("push"); args.add("--key"); args.add("test"); args.add("--host"); args.add(baseUrl + repoId); args.add(gem.getAbsolutePath()); return callMethod("exec", args.toArray(), String.class); } public String clearCache() { List args = new ArrayList(); args.add("sources"); args.add("--clear-all"); return callMethod("exec", args.toArray(), String.class); } public String list() { return list(null); } public String list(String repoId) { List args = new ArrayList(); args.add("list"); if (repoId == null) { args.add("-l"); } else { args.add("-r"); setSource(args, repoId); } return callMethod("exec", args.toArray(), String.class); } public String nexus(File config, File gem) { List args = new ArrayList(); args.add("nexus"); args.add("--nexus-config"); args.add(config.getAbsolutePath()); args.add(gem.getAbsolutePath()); // make sure the custom gem command is loaded when the gem is installed callMethod("load_plugins"); return callMethod("exec", args.toArray(), String.class); } } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/GemspecFile.java000066400000000000000000000034431446701454400332200ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represents /quick/Marshal.4.8/{name}-{version}.gemspec.rz or /quick/Marshal.4.8/{name}-{platform}-{version}.gemspec.rz * or /quick/Marshal.4.8/{filename}.gemspec.rz * * @author christian */ public class GemspecFile extends BaseGemFile { /** * setup with full filename */ GemspecFile(RubygemsFileFactory factory, String storage, String remote, String name) { super(factory, FileType.GEMSPEC, storage, remote, name); } /** * setup with name, version and platform */ GemspecFile(RubygemsFileFactory factory, String storage, String remote, String name, String version, String platform) { super(factory, FileType.GEMSPEC, storage, remote, name, version, platform); } /** * retrieve the associated gem-file */ public GemFile gem() { if (version() != null) { return factory.gemFile(name(), version(), platform()); } else { return factory.gemFile(filename()); } } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/GemspecHelper.java000066400000000000000000000042531446701454400335600ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.runtime.builtin.IRubyObject; import java.io.ByteArrayInputStream; /** * wrapper around a Gem::Specification ruby object with some extra * helper methods and only delegate a few needed methods to the underlying object. * * @author christian */ public interface GemspecHelper { /** * the filename of associated gem * * @return filename */ String filename(); /** * get name of gem * * @return name of the gem */ String name(); /** * get gemspec object * * @return the wrapped Gem::Specification object */ IRubyObject gemspec(); /** * create pom XML out of the gemspec used for gem-artifacts. * gem versions with alphabets are "prereleased" versions and * the closet to them are snapshot versions in maven. but some * released gems do have depdendencies to prereleased version, so * both SNAPSHOT and non-SNAPSHOT version of prereleased gem-artifacts * need to be provided. * * @param snapshot whether to use snapshot version * @return pom XML */ String pom(boolean snapshot); /** * marshals the gemspec and deflate it and turns it into a ByteArrayInputStream. * that is the format XYZ.gemspec.rz of a rubygems repo. * * @return the stream to binray data */ ByteArrayInputStream getRzInputStream(); } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/IOUtil.java000066400000000000000000000040301446701454400321730ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; public class IOUtil { /** * Copy bytes from an InputStream to an OutputStream. */ public static void copy(final InputStream input, final OutputStream output) throws IOException { final byte[] buffer = new byte[4096]; int n = 0; while (-1 != (n = input.read(buffer))) { output.write(buffer, 0, n); } } public static ByteArrayInputStream toGzipped(final InputStream input) throws IOException { ByteArrayOutputStream gzipped = new ByteArrayOutputStream(); try (GZIPOutputStream out = new GZIPOutputStream(gzipped)) { copy(input, out); } return new ByteArrayInputStream(gzipped.toByteArray()); } public static ByteArrayInputStream toGunzipped(final InputStream input) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); copy(new GZIPInputStream(input), out); return new ByteArrayInputStream(out.toByteArray()); } } MavenMetadataFile.java000066400000000000000000000030441446701454400342620ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represents /maven/releases/rubygems/{name}/maven-metadata.xml or /maven/prereleases/rubygems/{name}/maven-metadata.xml * * @author christian */ public class MavenMetadataFile extends RubygemsFile { private final boolean prereleased; MavenMetadataFile(RubygemsFileFactory factory, String path, String name, boolean prereleased) { super(factory, FileType.MAVEN_METADATA, path, path, name); this.prereleased = prereleased; } /** * whether it is a prerelease or not */ public boolean isPrerelease() { return prereleased; } /** * retrieve the associated DependencyFile */ public CompactInfoFile dependency() { return factory.compactInfo(name()); } }MavenMetadataSnapshotFile.java000066400000000000000000000027611446701454400360070ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represents /maven/prereleases/rubygems/{name}/{version}-SNAPSHOT/maven-metadata.xml * * @author christian */ public class MavenMetadataSnapshotFile extends RubygemsFile { private final String version; MavenMetadataSnapshotFile(RubygemsFileFactory factory, String path, String name, String version) { super(factory, FileType.MAVEN_METADATA_SNAPSHOT, path, path, name); this.version = version; } /** * version of the gem */ public String version() { return version; } /** * retrieve the associated DependencyFile */ public DependencyFile dependency() { return factory.dependencyFile(name()); } }MergeSpecsHelper.java000066400000000000000000000025421446701454400341520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.io.ByteArrayInputStream; import java.io.InputStream; /** * helper to merge several specs-index files into one * * @author christian */ public interface MergeSpecsHelper { /** * add the specs data to the MergeSpecsHelper object * * @param specsData as InputStream */ void add(InputStream specsData); /** * marshal ruby object with * * @param latest whether of not * @return ByteArrayInputStream of binary data */ ByteArrayInputStream getInputStream(boolean latest); }MetadataBuilder.java000066400000000000000000000041721446701454400340050ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; public class MetadataBuilder extends AbstractMetadataBuilder { private final StringBuilder xml; private final DependencyData deps; private boolean closed = false; public MetadataBuilder(DependencyData deps) { super(deps.modified()); this.deps = deps; xml = new StringBuilder(); xml.append("\n"); xml.append(" rubygems\n"); xml.append(" ").append(deps.name()).append("\n"); xml.append(" \n"); xml.append(" \n"); } public void appendVersions(boolean isPrerelease) { for (String version : deps.versions(isPrerelease)) { xml.append(" ").append(version); if (isPrerelease) { xml.append("-SNAPSHOT"); } xml.append("\n"); } } public void close() { if (!closed) { xml.append(" \n"); xml.append(" ") .append(timestamp) .append("\n"); xml.append(" \n"); xml.append("\n"); closed = true; } } public String toString() { close(); return xml.toString(); } } MetadataSnapshotBuilder.java000066400000000000000000000052501446701454400355230ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; public class MetadataSnapshotBuilder extends AbstractMetadataBuilder { protected final StringBuilder xml; public MetadataSnapshotBuilder(String name, String version, long modified) { super(modified); String dotted = timestamp.substring(0, 8) + "." + timestamp.substring(8); String value = version + "-" + dotted + "-1"; xml = new StringBuilder(); xml.append("\n"); xml.append(" rubygems\n"); xml.append(" ").append(name).append("\n"); xml.append(" \n"); xml.append(" \n"); xml.append(" \n"); xml.append(" ").append(dotted).append("\n"); xml.append(" 1\n"); xml.append(" \n"); xml.append(" ").append(timestamp).append("\n"); xml.append(" \n"); xml.append(" \n"); xml.append(" gem\n"); xml.append(" ").append(value).append("\n"); xml.append(" ").append(timestamp).append("\n"); xml.append(" \n"); xml.append(" \n"); xml.append(" pom\n"); xml.append(" ").append(value).append("\n"); xml.append(" ").append(timestamp).append("\n"); xml.append(" \n"); xml.append(" \n"); xml.append(" \n"); xml.append(" \n"); xml.append("\n"); } public String toString() { return xml.toString(); } } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/NoContentFile.java000066400000000000000000000021721446701454400335420ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * A {@link RubygemsFile} which indicates a no content payload. * * @since 2.14 */ public class NoContentFile extends RubygemsFile { public NoContentFile(RubygemsFileFactory factory, String path) { super(factory, FileType.NO_CONTENT, path, path, null); // no payload set(null); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/NotFoundFile.java000066400000000000000000000020171446701454400333650ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; public class NotFoundFile extends RubygemsFile { public NotFoundFile(RubygemsFileFactory factory, String path) { super(factory, FileType.NOT_FOUND, null, path, null); markAsNotExists(); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/PomFile.java000066400000000000000000000033661446701454400323740ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; public class PomFile extends RubygemsFile { private final String version; private final boolean snapshot; PomFile(RubygemsFileFactory factory, String path, String name, String version, boolean snapshot) { super(factory, FileType.POM, path, path, name); this.version = version; this.snapshot = snapshot; } public String version() { return version; } public boolean isSnapshot() { return snapshot; } public GemspecFile gemspec(DependencyData dependencies) { String platform = dependencies.platform(version()); return factory.gemspecFile(name(), version(), platform); } public GemFile gem(DependencyData dependencies) { String platform = dependencies.platform(version()); return factory.gemFile(name(), version(), platform); } public CompactInfoFile dependency() { return factory.compactInfo(name()); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/RepairHelper.java000066400000000000000000000027461446701454400334240ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * helper to purge broken files or to recreate the complete specs index * of hosted rubygems repository. * * @author christian */ public interface RepairHelper { /** * recreate the complete rubygems specs index * * @param directory where the repository is located */ void recreateRubygemsIndex(String directory); /** * purge broken dependency files * * @param directory where the repository is located */ void purgeBrokenDepencencyFiles(String directory); /** * purge broken gemspec files * * @param directory where the repository is located */ void purgeBrokenGemspecFiles(String directory); }RubygemsDirectory.java000066400000000000000000000024361446701454400344410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.torquebox.mojo.rubygems.cuba.api.ApiV1DependenciesCuba; public class RubygemsDirectory extends Directory { RubygemsDirectory(RubygemsFileFactory factory, String path) { super(factory, path, "rubygems"); } public void setItems(String... items) { for (String item : items) { if (item.endsWith(ApiV1DependenciesCuba.RUBY)) { this.items.add(item.replace(ApiV1DependenciesCuba.RUBY, "")); } } } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/RubygemsFile.java000066400000000000000000000162521446701454400334340ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * it abstracts any file within the rubygems repository. it carries the name, the local path and the remote path. *

* you can pass in a payload which is meant to retrieve the actual content of the underlying file from the local * storage. the payload can be an exception which also sets the state to ERROR. *

* beside the PAYLOAD and ERROR state it can have other states: NOT_EXISTS, NO_PAYLOAD, TEMP_UNAVAILABLE, FORBIDDEN * * @author christian */ public class RubygemsFile { /** * factory to create associated objects */ final RubygemsFileFactory factory; private final String name; private final String storage; private final String remote; private final FileType type; private Object payload; private State state = State.NEW_INSTANCE; RubygemsFile(RubygemsFileFactory factory, FileType type, String storage, String remote, String name) { this.factory = factory; this.type = type; this.storage = storage; this.remote = remote; this.name = name; } /** * name of the file - meaning of name depends on file-type */ public String name() { return name; } /** * local path of the file */ public String storagePath() { return storage; } /** * remote path of the file */ public String remotePath() { return remote; } /** * type of the file */ public FileType type() { return type; } /** * state of the file */ public State state() { return state; } protected void addToString(StringBuilder builder) { builder.append("type=").append(type.name()) .append(", storage=").append(storage) .append(", remote=").append(remote); if (name != null) { builder.append(", name=").append(name); } builder.append(", state=").append(state.name()); if (state == State.ERROR) { builder.append(", exception=").append(getException().getClass().getSimpleName()) .append(": ").append(getException().getMessage()); } else if (state == State.PAYLOAD) { builder.append(", payload=").append(get().toString()); } } public String toString() { StringBuilder builder = new StringBuilder("RubygemsFile["); addToString(builder); builder.append("]"); return builder.toString(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((remote == null) ? 0 : remote.hashCode()); result = prime * result + ((storage == null) ? 0 : storage.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } RubygemsFile other = (RubygemsFile) obj; if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } if (remote == null) { if (other.remote != null) { return false; } } else if (!remote.equals(other.remote)) { return false; } if (storage == null) { if (other.storage != null) { return false; } } else if (!storage.equals(other.storage)) { return false; } if (type != other.type) { return false; } return true; } /** * retrieve the payload - whatever was set via {@link RubygemsFile#set(Object)} or * {@link RubygemsFile#setException(Exception)} */ public Object get() { return payload; } /** * sets the payload and set the state to NO_PAYLOAD or PAYLOAD respectively */ public void set(Object payload) { state = payload == null ? State.NO_PAYLOAD : State.PAYLOAD; this.payload = payload; } /** * retrieve the exception if state == ERROR otherwise null */ public Exception getException() { if (hasException()) { return (Exception) payload; } else { return null; } } /** * sets the state to ERROR and the exception as payload * * @param e (should not be null) */ public void setException(Exception e) { set(e); state = State.ERROR; } /** * true if state == ERROR */ public boolean hasException() { return state == State.ERROR; } /** * reset the payload and state to NEW_INSTANCE - same as newly constructed object */ public void resetState() { payload = null; state = State.NEW_INSTANCE; } /** * any state member of NEW_INSTANCE, NO_PAYLOAD, State.PAYLOAD will return true */ public boolean exists() { return state == State.NEW_INSTANCE || state == State.NO_PAYLOAD || state == State.PAYLOAD; } /** * state == NOT_EXISTS */ public boolean notExists() { return state == State.NOT_EXISTS; } /** * state == NO_PAYLOAD */ public boolean hasNoPayload() { return state == State.NO_PAYLOAD; } /** * state == PAYLOAD */ public boolean hasPayload() { return state == State.PAYLOAD; } /** * state == FORBIDDEN */ public boolean forbidden() { return state == State.FORBIDDEN; } /** * make file as not existing (state = NOT_EXISTS) */ public void markAsNotExists() { state = State.NOT_EXISTS; } /** * make file as temporary unavailable (state = TEMP_UNAVAILABLE) */ public void markAsTempUnavailable() { state = State.TEMP_UNAVAILABLE; } /** * make file as forbidden (state = FORBIDDEN) */ public void markAsForbidden() { state = State.FORBIDDEN; } public static enum State { NEW_INSTANCE, NOT_EXISTS, ERROR, NO_PAYLOAD, TEMP_UNAVAILABLE, FORBIDDEN, PAYLOAD } } RubygemsFileFactory.java000066400000000000000000000166151446701454400347100ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * interface for a factory to create RubygemsFile * * @author christian */ public interface RubygemsFileFactory { /** * create Directory with given entries * * @return Directory */ Directory directory(String path, String... entries); /** * create RubygemsDirectory /maven/releases/rubygems or /maven/prerelease/rubygems * * @return RubygemsDirectory */ RubygemsDirectory rubygemsDirectory(String path); /** * create Directory /maven/releases/rubygems/{artifactId} or /maven/prerelease/rubygems/{artifactId} * * @param prereleases flag to create released or prereleased gem, i.e. without or with SNAPSHOT in version * @return RubygemsDirectory */ Directory gemArtifactIdDirectory(String path, String artifactId, boolean prereleases); /** * create Directory /maven/releases/rubygems/{artifactId}/{version} or * /maven/prerelease/rubygems/{artifactId}/{version} * * @return RubygemsDirectory */ Directory gemArtifactIdVersionDirectory(String path, String artifactId, String version, boolean prereleases); /** * create GemFile /gems/{name}-{version}.gem or /gems/{name}-{version}-{platform}.gem * * @param platform can be null * @return GemFile */ GemFile gemFile(String name, String version, String platform); /** * create GemFile /gems/{filename}.gem * * @return GemFile */ GemFile gemFile(String filename); /** * create GemspecFile /quick/Marshal.4.8/{name}-{version}.gemspec.rz or * /quick/Marshal.4.8/{name}-{version}-{platform}.gemspec.rz * * @param platform can be null * @return GemspecFile */ GemspecFile gemspecFile(String name, String version, String platform); /** * create GemspecFile /quick/Marshal.4.8/{filename}.gemspec.rz * * @return GemspecFile */ GemspecFile gemspecFile(String filename); /** * create DependencyFile /api/v1/dependencies/{name}.ruby for * a given gem-name * * @param name of the gemfile * @return DependencyFile */ @Deprecated DependencyFile dependencyFile(String name); ApiV2File rubygemsInfoV2(String name, String version); CompactInfoFile compactInfo(String name); /** * create BundlerApiFile /api/v1/dependencies?gems=name1,name2,etc * * @param namesCommaSeparated which is a list of gem-names separated with a comma * @return BundlerApiFile */ BundlerApiFile bundlerApiFile(String namesCommaSeparated); /** * create BundlerApiFile /api/v1/dependencies?gems=name1,name2,etc * * @param names list of gem-names * @return BundlerApiFile */ BundlerApiFile bundlerApiFile(String... names); /** * create ApiV1File /api/v1/gem or /api/v1/api_key * * @param name which is either 'gem' or 'api_key' * @return ApiV1File */ ApiV1File apiV1File(String name); /** * create SpecsIndexFile /specs.4.8 or /latest_specs.4.8 or /prerelease_specs.4.8 * * @param name which is either 'specs' or 'latest_specs' or 'prerelease_specs' * @return SpecsIndexFile */ SpecsIndexFile specsIndexFile(String name); /** * create SpecsIndexFile /specs.4.8 or /latest_specs.4.8 or /prerelease_specs.4.8 */ SpecsIndexFile specsIndexFile(SpecsIndexType type); /** * create SpecsIndexZippedFile /specs.4.8.gz or /latest_specs.4.8.gz or /prerelease_specs.4.8.gz * * @param name which is either 'specs' or 'latest_specs' or 'prerelease_specs' */ SpecsIndexZippedFile specsIndexZippedFile(String name); /** * create SpecsIndexZippedFile /specs.4.8 or /latest_specs.4.8 or /prerelease_specs.4.8 */ SpecsIndexZippedFile specsIndexZippedFile(SpecsIndexType type); /** * create MavenMetadataFile /maven/releases/rubygems/{name}/maven-metadata.xml or * /maven/prereleases/rubygems/{name}/maven-metadata.xml * * @param name gem name * @param prereleased a flag whether to add '-SNAPSHOT' to version or not * @return MavenMetadataFile */ MavenMetadataFile mavenMetadata(String name, boolean prereleased); /** * create MavenMetadataSnapshotFile /maven/prereleases/rubygems/{name}/{version}/maven-metadata.xml * * @param name gem name * @param version of the gem * @return MavenMetadataSnapshotFile */ MavenMetadataSnapshotFile mavenMetadataSnapshot(String name, String version); /** * create PomFile /maven/prereleases/rubygems/{name}/{version}/{name}-{version}-SNAPSHOT.pom * * @param name gem name * @param version of the gem * @param timestamp when the gem was created * @return PomFile */ PomFile pomSnapshot(String name, String version, String timestamp); /** * create PomFile /maven/releases/rubygems/{name}/{version}/{name}-{version}.pom * * @param name gem name * @param version of the gem * @return PomFile */ PomFile pom(String name, String version); /** * create PomFile /maven/prereleases/rubygems/{name}/{version}/{name}-{version}-SNAPSHOT.gem * * @param name gem name * @param version of the gem * @param timestamp when the gem was created * @return PomFile */ GemArtifactFile gemArtifactSnapshot(String name, String version, String timestamp); /** * create PomFile /maven/releases/rubygems/{name}/{version}/{name}-{version}.gem * * @param name gem name * @param version of the gem * @return PomFile */ GemArtifactFile gemArtifact(String name, String version); /** * create NotFoundFile for any path name not belonging to the rubygems world * * @return NotFoundFile */ NotFoundFile notFound(String path); /** * create Sha1File for a given RubygemsFile * * @param file the sha1 is for this RubygemsFile * @return Sha1File */ Sha1File sha1(RubygemsFile file); /** * Create a NoContentFile for /api/v1/dependencies and /api/v1/dependencies?gems= * * @param path for this RubygemsFile * @return NoContentFile */ NoContentFile noContent(String path); }RubygemsGateway.java000066400000000000000000000074211446701454400340750ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.io.InputStream; /** * factory for all the ruby classes. all those ruby classes come with java interface * so they can be used easily from java. * * @author christian */ public interface RubygemsGateway { /** * Cleans up resources used by gateway and terminates it along with the underlying scripting container. */ void terminate(); /** * create a new instance of GemspecHelper * * @param gemspec the stream to the rzipped marshalled Gem::Specification ruby-object * @return an empty GemspecHelper */ GemspecHelper newGemspecHelper(InputStream gemspec); /** * create a new instance of GemspecHelper * * @param gem the stream to the from which the gemspec gets extracted * @return an empty GemspecHelper */ GemspecHelper newGemspecHelperFromGem(InputStream gem); /** * create a new instance of GemspecHelper * * @param v2GemInfo the stream to the v2 API gem info * @return an empty GemspecHelper */ GemspecHelper newGemspecHelperFromV2GemInfo(InputStream v2GemInfo); /** * create a new instance of DependencyHelper * * @return an empty DependencyHelper */ DependencyHelper newDependencyHelper(); /** * create a new instance of SpecsHelper * * @return an empty SpecsHelper */ SpecsHelper newSpecsHelper(); /** * create a new instance of MergeSpecsHelper * * @return an empty MergeSpecsHelper */ MergeSpecsHelper newMergeSpecsHelper(); /** * create a new instance of DependencyData and parse * the given dependency data * * @param dependency the input-stream with the dependency data * @param name of gem of the dependency data * @param modified when the dependency data were last modified * @return dependency data */ DependencyData newDependencyData(InputStream dependency, String name, long modified); /** * create a new instance of RubygemsV2GemInfo and parse * the given v2 API endpoint * * @param dependency the input-stream with the gem info data * @param name of gem of the gem info data * @param version of gem of the gem info data * @param modified when the gem info data were last modified * @return gem info data */ RubygemsV2GemInfo newRubygemsV2GemInfo(InputStream dependency, String name, String version, long modified); /** * create a new instance of DependencyData and parse * the given compact dependency data * * @param dependency the input-stream with the dependency data * @param name of gem of the dependency data * @param modified when the dependency data were last modified * @return dependency data */ DependencyData newCompactDependencyData(InputStream dependency, String name, long modified); } RubygemsV2GemInfo.java000066400000000000000000000002761446701454400342310ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygemspackage org.torquebox.mojo.rubygems; public interface RubygemsV2GemInfo { public String version(); public String platform(); public String name(); public long modified(); } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/ScriptWrapper.java000066400000000000000000000036411446701454400336420ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.embed.ScriptingContainer; public abstract class ScriptWrapper { protected final ScriptingContainer scriptingContainer; private final Object object; public ScriptWrapper(ScriptingContainer scriptingContainer, Object object) { this.scriptingContainer = scriptingContainer; this.object = object; } protected void callMethod(String methodName, Object singleArg) { scriptingContainer.callMethod(object, methodName, singleArg); } protected T callMethod(String methodName, Object singleArg, Class returnType) { return scriptingContainer.callMethod(object, methodName, singleArg, returnType); } protected T callMethod(String methodName, Object[] args, Class returnType) { return scriptingContainer.callMethod(object, methodName, args, returnType); } protected T callMethod(String methodName, Class returnType) { return scriptingContainer.callMethod(object, methodName, returnType); } protected void callMethod(String methodName) { scriptingContainer.callMethod(object, methodName); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/Sha1Digest.java000066400000000000000000000042031446701454400327640ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * Simple convenient wrapper around SHA1 MessageDigest */ public class Sha1Digest { private final MessageDigest digest; /** * new Sha1Digest */ public Sha1Digest() { try { digest = MessageDigest.getInstance("SHA1"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("no SHA1 digest on system"); } } /** * update the underlying digest * * @param b byte to be updated */ public void update(byte b) { digest.update(b); } /** * update the underlying digest * * @param bytes to be updated */ public void update(byte[] bytes) { digest.update(bytes); } /** * finalized the digest and produces a hex-dump * * @return hex dump of the digest */ public String hexDigest() { StringBuilder dig = new StringBuilder(); for (byte b : digest.digest()) { if (b < 0) { dig.append(Integer.toHexString(256 + b)); } else if (b < 16) { dig.append("0").append(Integer.toHexString(b)); } else { dig.append(Integer.toHexString(b)); } } return dig.toString(); } } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/Sha1File.java000066400000000000000000000026341446701454400324320ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * a SHA1 digest of give RubygemsFile * * @author christian */ public class Sha1File extends RubygemsFile { private final RubygemsFile source; Sha1File(RubygemsFileFactory factory, String storage, String remote, RubygemsFile source) { super(factory, FileType.SHA1, storage, remote, source.name()); this.source = source; if (source.notExists()) { markAsNotExists(); } } /** * the source for which the SHA1 digest * * @return RubygemsFile */ public RubygemsFile getSource() { return source; } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/SpecsHelper.java000066400000000000000000000100731446701454400332470ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.runtime.builtin.IRubyObject; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.List; /** * helper around specs index like adding a spec to the index or deleting a spec from the index. * since spec index is marshal ruby object it offers a method to get the data for an empty spec index. * when to create a DependencyFile you need to interate over all versions of a given gem. * * @author christian */ public interface SpecsHelper { /** * create an emptry spec index, i.e. create marshaled ruby object for an empty spec index * * @return the stream to data */ ByteArrayInputStream createEmptySpecs(); /** * adds the given spec to the spec index. the action depends on the SpecsIndexTyep:

    *
  • release: only adds the spec if it belongs to released gem
  • *
  • prerelease: only adds the spec if it belongs to prereleased gem
  • *
  • latest: only adds the spec if it belongs to released gem and make sure we have only one version per gemname
* it only returns the new specs index if it changes, i.e. if the given spec already exists in the specs index * then a null gets returned. * * @param spec a Gem::Specification ruby object * @param specsIndex the InputStream to the spec index * @param type whether it is release, prerelease or latest * @return the next spec index as ByteArrayInputStream if there was a change or null * if the spec index remained the same */ ByteArrayInputStream addSpec(IRubyObject spec, InputStream specsIndex, SpecsIndexType type); /** * it deletes the given spec from the spec index. if spec does not exist
    *
  • release: only adds the spec if it belongs to released gem
  • *
  • prerelease: only adds the spec if it belongs to prereleased gem
  • *
  • latest: only adds the spec if it belongs to released gem and make sure we have only one version per gemname
*

* it only returns the new specs index if it changes, i.e. if the given spec did not exsists in the specs index * then a null gets returned. *

* this method keeps a state and is meant to be called with all three specs-index types and with 'latest' type * at the end. in can happen that the latest spec index needs to reconstructed from release specs index * for this the release spec index remains as state of the class until the call with latest specs index is done. * * @param spec a Gem::Specification ruby object * @param specsIndex the InputStream to the spec index * @param type whether it is release, prerelease or latest * @return the next spec index as ByteArrayInputStream */ ByteArrayInputStream deleteSpec(IRubyObject spec, InputStream specsIndex, SpecsIndexType type); /** * collect all versions from the given specs index for given gemname. * * @param gemname for which the version list shall be retrieved * @param specsIndex InputStream to specs index * @return */ List listAllVersions(String gemname, InputStream specsIndex); } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/SpecsIndexFile.java000066400000000000000000000027711446701454400337050ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represents /specs.4.8 or /prereleased_specs.4.8 or /latest_specs.4.8 * * @author christian */ public class SpecsIndexFile extends RubygemsFile { private final SpecsIndexType specsType; SpecsIndexFile(RubygemsFileFactory factory, String path, String name) { super(factory, FileType.SPECS_INDEX, path, path, name); specsType = SpecsIndexType.fromFilename(path); } /** * retrieve the SpecsIndexType */ public SpecsIndexType specsType() { return specsType; } /** * get the gzipped version of this file */ public SpecsIndexZippedFile zippedSpecsIndexFile() { return factory.specsIndexZippedFile(name()); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/SpecsIndexType.java000066400000000000000000000040441446701454400337420ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; public enum SpecsIndexType { RELEASE, PRERELEASE, LATEST; public static SpecsIndexType fromFilename(String name) { try { // possible names are: // latest_specs.4.8 latest_specs.4.8.gz // prerelease_specs.4.8 prerelease_specs.4.8.gz // specs.4.8 specs.4.8.gz name = name.replace(".gz", "") .replace("/", "") // no leading slash .toUpperCase(); if ("SPECS.4.8".equals(name)) // 'specs' case { return RELEASE; } name = name.replace("SPECS.4.8", "") .replace("_", ""); return valueOf(name); } catch (IllegalArgumentException e) { return null; // not a valid filename } } public String filename() { StringBuilder name = new StringBuilder(); if (this != RELEASE) { name.append(name().toLowerCase().replaceFirst("^release", "")) .append("_"); } return name.append("specs.4.8").toString(); } public String filepath() { return "/" + filename(); } public String filepathGzipped() { return filepath() + ".gz"; } }SpecsIndexZippedFile.java000066400000000000000000000030271446701454400347750ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; /** * represents /specs.4.8.gz or /prereleased_specs.4.8.gz or /latest_specs.4.8.gz * * @author christian */ public class SpecsIndexZippedFile extends RubygemsFile { private final SpecsIndexType specsType; SpecsIndexZippedFile(RubygemsFileFactory factory, String path, String name) { super(factory, FileType.SPECS_INDEX_ZIPPED, path, path, name); specsType = SpecsIndexType.fromFilename(storagePath()); } /** * retrieve the SpecsIndexType */ public SpecsIndexType specsType() { return specsType; } /** * get the un-gzipped version of this file */ public SpecsIndexFile unzippedSpecsIndexFile() { return factory.specsIndexFile(name()); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/000077500000000000000000000000001446701454400311005ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/Context.java000066400000000000000000000034661446701454400334000ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba; import org.torquebox.mojo.rubygems.RubygemsFileFactory; /** * the Context carries the original path and the query string * from the (HTTP) request as well the RubygemsFileFactory which * is used by the Cuba objects to create RubygemsFiles. *

* it is basically the static part of the State object and is immutable. * * @author christian */ public class Context { public final String original; public final String query; public final RubygemsFileFactory factory; public Context(RubygemsFileFactory factory, String original, String query) { this.original = original; this.query = query; this.factory = factory; } public String toString() { StringBuilder b = new StringBuilder(getClass().getSimpleName()); b.append("<").append(original); if (!query.isEmpty()) { b.append("?").append(query); } b.append(">"); return b.toString(); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/Cuba.java000066400000000000000000000020271446701454400326160ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba; import org.torquebox.mojo.rubygems.RubygemsFile; public interface Cuba { /** * create the RubygemsFile for the given State * * @return RubygemsFile */ RubygemsFile on(State state); }DefaultRubygemsFileSystem.java000066400000000000000000000061431446701454400367770ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba; import org.torquebox.mojo.rubygems.RubygemsFileFactory; import org.torquebox.mojo.rubygems.cuba.api.ApiCuba; import org.torquebox.mojo.rubygems.cuba.api.ApiV1Cuba; import org.torquebox.mojo.rubygems.cuba.api.ApiV1DependenciesCuba; import org.torquebox.mojo.rubygems.cuba.api.ApiV2Cuba; import org.torquebox.mojo.rubygems.cuba.api.ApiV2RubygemsCuba; import org.torquebox.mojo.rubygems.cuba.api.CompactInfoCuba; import org.torquebox.mojo.rubygems.cuba.gems.GemsCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenPrereleasesCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenPrereleasesRubygemsCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesCuba; import org.torquebox.mojo.rubygems.cuba.maven.MavenReleasesRubygemsCuba; import org.torquebox.mojo.rubygems.cuba.quick.QuickCuba; import org.torquebox.mojo.rubygems.cuba.quick.QuickMarshalCuba; import org.torquebox.mojo.rubygems.layout.DefaultLayout; import org.torquebox.mojo.rubygems.layout.Layout; public class DefaultRubygemsFileSystem extends RubygemsFileSystem { public DefaultRubygemsFileSystem(RubygemsFileFactory fileLayout, Layout getLayout, Layout postLayout, Layout deleteLayout) { super(fileLayout, getLayout, postLayout, deleteLayout, // TODO move to javax.inject new RootCuba( new ApiCuba( new ApiV1Cuba(new ApiV1DependenciesCuba()), new ApiV2Cuba(new ApiV2RubygemsCuba()), new QuickCuba(new QuickMarshalCuba()), new GemsCuba()), new QuickCuba(new QuickMarshalCuba()), new GemsCuba(), new MavenCuba( new MavenReleasesCuba(new MavenReleasesRubygemsCuba()), new MavenPrereleasesCuba(new MavenPrereleasesRubygemsCuba())), new CompactInfoCuba() )); } public DefaultRubygemsFileSystem(Layout getLayout, Layout postLayout, Layout deleteLayout) { this(new DefaultLayout(), getLayout, postLayout, deleteLayout); } public DefaultRubygemsFileSystem() { this(new DefaultLayout(), null, null, null); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/RootCuba.java000066400000000000000000000060351446701454400334650ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba; import org.torquebox.mojo.rubygems.RubygemsFile; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * cuba for / * * @author christian */ public class RootCuba implements Cuba { public static final String _4_8 = ".4.8"; public static final String GZ = ".gz"; public static final String API = "api"; public static final String QUICK = "quick"; public static final String GEMS = "gems"; public static final String MAVEN = "maven"; public static final String INFO = "info"; private static final Pattern SPECS = Pattern.compile("^((prerelease_|latest_)?specs)" + _4_8 + "(" + GZ + ")?$"); private final Cuba api; private final Cuba quick; private final Cuba gems; private final Cuba maven; private final Cuba info; public RootCuba(Cuba api, Cuba quick, Cuba gems, Cuba maven, Cuba info) { this.api = api; this.quick = quick; this.gems = gems; this.maven = maven; this.info = info; } /** * directories [api, quick, gems, maven] *

* files [specs.4.8, latest_specs.4.8, prerelease_specs.4.8, specs.4.8.gz, latest_specs.4.8.gz, * prerelease_specs.4.8.gz] */ public RubygemsFile on(State state) { switch (state.name) { case API: return state.nested(api); case QUICK: return state.nested(quick); case GEMS: return state.nested(gems); case MAVEN: return state.nested(maven); case INFO: return state.nested(info); case "": return state.context.factory.directory(state.context.original, "api/", "quick/", "gems/", "maven/", "specs.4.8", "latest_specs.4.8", "prerelease_specs.4.8", "specs.4.8.gz", "latest_specs.4.8.gz", "prerelease_specs.4.8.gz"); default: } Matcher m = SPECS.matcher(state.name); if (m.matches()) { if (m.group(3) == null) { return state.context.factory.specsIndexFile(m.group(1)); } return state.context.factory.specsIndexZippedFile(m.group(1)); } return state.context.factory.notFound(state.context.original); } }RubygemsFileSystem.java000066400000000000000000000074641446701454400355010ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.RubygemsFileFactory; import org.torquebox.mojo.rubygems.layout.Layout; import java.io.InputStream; public class RubygemsFileSystem { private final Cuba cuba; private final RubygemsFileFactory factory; private final Layout getLayout; private final Layout postLayout; private final Layout deleteLayout; protected RubygemsFileSystem(RubygemsFileFactory factory, Layout getLayout, Layout postLayout, Layout deleteLayout, Cuba cuba) { this.cuba = cuba; this.factory = factory; this.getLayout = getLayout; this.postLayout = postLayout; this.deleteLayout = deleteLayout; } public RubygemsFile file(String path) { return visit(factory, path, null); } public RubygemsFile file(String path, String query) { return visit(factory, path, query); } public RubygemsFile get(String path) { return visit(getLayout, path, null); } public RubygemsFile get(String path, String query) { return visit(getLayout, path, query); } private RubygemsFile visit(RubygemsFileFactory factory, String originalPath, String query) { //normalize PATH-Separator from Windows platform to valid URL-Path // https://github.com/sonatype/nexus-ruby-support/issues/38 originalPath = originalPath.replace('\\', '/'); if (!originalPath.startsWith("/")) { originalPath = "/" + originalPath; } String path = originalPath; if (query == null) { if (originalPath.contains("?")) { int index = originalPath.indexOf("?"); if (index > -1) { query = originalPath.substring(index + 1); path = originalPath.substring(0, index); } } else { query = ""; } } return new State(new Context(factory, originalPath, query), path, null).nested(cuba); } public RubygemsFile post(InputStream is, String path) { if (postLayout != null) { RubygemsFile file = visit(postLayout, path, ""); if (!file.forbidden() && file.type() != FileType.NOT_FOUND) { post(is, file); } return file; } RubygemsFile file = visit(factory, path, ""); file.markAsForbidden(); return file; } public void post(InputStream is, RubygemsFile file) { postLayout.addGem(is, file); } public RubygemsFile delete(String path) { return visit(deleteLayout, path, ""); } public String toString() { StringBuilder b = new StringBuilder(getClass().getSimpleName()); b.append("<").append(cuba.getClass().getSimpleName()).append(">"); return b.toString(); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/State.java000066400000000000000000000047231446701454400330310ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba; import org.torquebox.mojo.rubygems.RubygemsFile; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * this is the State with the current directory name * and the not parsed path. *

* it can be visited by a Cuba object to eval itself via the nested * method. * * @author christian */ public class State { static Pattern PATH_PART = Pattern.compile("^/([^/]*).*"); public final String path; public final String name; public final Context context; public State(Context ctx, String path, String name) { this.context = ctx; this.path = path; this.name = name; } /** * it passes on the next directory of the remaining path (can be empty) * or there is no next directory then a RubygemsFile marked * as notFound is created. */ public RubygemsFile nested(Cuba cuba) { if (path.isEmpty()) { // that is an directory, let the cuba object create the // right RubygemsFile for it return cuba.on(new State(context, "", "")); } Matcher m = PATH_PART.matcher(path); if (m.matches()) { String name = m.group(1); return cuba.on(new State(context, this.path.substring(1 + name.length()), name)); } return context.factory.notFound(context.original); } public String toString() { StringBuilder b = new StringBuilder(getClass().getSimpleName()); b.append("<").append(path).append(",").append(name).append("> )"); return b.toString(); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/000077500000000000000000000000001446701454400316515ustar00rootroot00000000000000ApiCuba.java000066400000000000000000000042041446701454400337410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.RootCuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /api/ * * @author christian */ public class ApiCuba implements Cuba { public static final String V1 = "v1"; public static final String V2 = "v2"; private final Cuba v1; private final Cuba v2; private final Cuba quick; private final Cuba gems; public ApiCuba(Cuba v1, Cuba v2, Cuba quick, Cuba gems) { this.v1 = v1; this.v2 = v2; this.quick = quick; this.gems = gems; } /** * directory [v1,quick] */ @Override public RubygemsFile on(State state) { switch (state.name) { case V1: return state.nested(v1); case V2: return state.nested(v2); case RootCuba.QUICK: return state.nested(quick); case RootCuba.GEMS: return state.nested(gems); case "": String[] items = {V1, RootCuba.QUICK, RootCuba.GEMS}; return state.context.factory.directory(state.context.original, items); default: return state.context.factory.notFound(state.context.original); } } }ApiV1Cuba.java000066400000000000000000000036451446701454400341600ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /api/v1 * * @author christian */ public class ApiV1Cuba implements Cuba { public static final String DEPENDENCIES = "dependencies"; private static final String GEMS = "gems"; private static final String API_KEY = "api_key"; private final Cuba apiV1Dependencies; public ApiV1Cuba(Cuba cuba) { this.apiV1Dependencies = cuba; } /** * directory [dependencies], files [api_key,gems] */ @Override public RubygemsFile on(State state) { switch (state.name) { case DEPENDENCIES: return state.nested(apiV1Dependencies); case GEMS: case API_KEY: return state.context.factory.apiV1File(state.name); case "": return state.context.factory.directory(state.context.original, API_KEY, DEPENDENCIES); default: return state.context.factory.notFound(state.context.original); } } }ApiV1DependenciesCuba.java000066400000000000000000000057201446701454400364630ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * cuba for /api/v1/dependencies * * @author christian */ public class ApiV1DependenciesCuba implements Cuba { public static final String RUBY = ".ruby"; private static final Pattern FILE = Pattern.compile("^([^/]+)[.]" + RUBY.substring(1) + "$"); /** * no sub-directories *

* if there is query string with "gems" parameter then BundlerApiFile or * DependencyFile gets created. *

* otherwise all {name}.ruby will be created as DependencyFile *

* the directory itself does not produce the directory listing - only the empty Directory * object. */ @Override public RubygemsFile on(State state) { if (state.name.isEmpty()) { if (state.context.query.startsWith("gems=")) { if (state.context.query.contains(",") || state.context.query.contains("%2C")) { return state.context.factory.bundlerApiFile(state.context.query.substring(5)); } else if (state.context.query.length() > 5) { return state.context.factory.compactInfo(state.context.query.substring(5)); } } if (state.context.original.endsWith("/")) { return state.context.factory.directory(state.context.original); } else { return state.context.factory.noContent(state.context.original); } } Matcher m; if (state.name.length() == 1) { if (state.path.length() < 2) { return state.context.factory.directory(state.context.original); } m = FILE.matcher(state.path.substring(1)); } else { m = FILE.matcher(state.name); } if (m.matches()) { return state.context.factory.compactInfo(m.group(1)); } return state.context.factory.notFound(state.context.original); } } ApiV2Cuba.java000066400000000000000000000030731446701454400341540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /api/v2 to fetch gem details * * @author christian */ public class ApiV2Cuba implements Cuba { public static final String RUBYGEMS = "rubygems"; private final Cuba apiV2Rubygems; public ApiV2Cuba(Cuba apiV2Rubygems) { this.apiV2Rubygems = apiV2Rubygems; } /** * directory [dependencies], files [api_key,gems] */ @Override public RubygemsFile on(State state) { if (state.name.equals(ApiV2Cuba.RUBYGEMS)) { return state.nested(apiV2Rubygems); } return state.context.factory.notFound(state.context.original); } }ApiV2RubygemsCuba.java000066400000000000000000000025671446701454400357010ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /api/v2/rubygems to fetch gem details */ public class ApiV2RubygemsCuba implements Cuba { /** * directory [dependencies], files [api_key,gems] */ @Override public RubygemsFile on(State state) { if (state.name.isEmpty()) { return state.context.factory.notFound(state.context.original); } return state.nested(new ApiV2RubygemsNameCuba(state.name)); } }ApiV2RubygemsNameCuba.java000066400000000000000000000030551446701454400364730ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /api/v2/rubygems to fetch gem details */ public class ApiV2RubygemsNameCuba implements Cuba { public static final String VERSIONS = "versions"; private final String name; public ApiV2RubygemsNameCuba(String name) { this.name = name; } /** * directory [dependencies], files [api_key,gems] */ @Override public RubygemsFile on(State state) { if (state.name.equals(VERSIONS)) { return state.nested(new ApiV2RubygemsNameVersionsCuba(name)); } return state.context.factory.notFound(state.context.original); } }ApiV2RubygemsNameVersionsCuba.java000066400000000000000000000033001446701454400402150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /api/v2/rubygems/NAME/versions/VERSION */ public class ApiV2RubygemsNameVersionsCuba implements Cuba { private final String name; public ApiV2RubygemsNameVersionsCuba(String name) { this.name = name; } /** * directory [dependencies], files [api_key,gems] */ @Override public RubygemsFile on(State state) { if (state.name.isEmpty()) { return state.context.factory.notFound(state.context.original); } String version = state.name; int jsonExt = version.indexOf(".json"); if (jsonExt != -1) { version = version.substring(0, jsonExt); } return state.nested(new ApiV2RubygemsNameVersionsNumberCuba(name, version)); } }ApiV2RubygemsNameVersionsNumberCuba.java000066400000000000000000000026601446701454400413760ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /api/v2/rubygems/GEM/versions/NUM * * @author christian */ public class ApiV2RubygemsNameVersionsNumberCuba implements Cuba { private final String name; private final String version; public ApiV2RubygemsNameVersionsNumberCuba(String name, String version) { this.name = name; this.version = version; } @Override public RubygemsFile on(State state) { return state.context.factory.rubygemsInfoV2(name, version); } } CompactInfoCuba.java000066400000000000000000000030761446701454400354400ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/api/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.api; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /info/GEMNAME */ public class CompactInfoCuba implements Cuba { public CompactInfoCuba() { } /** * json listing of all versions of a given gem with dependencies */ @Override public RubygemsFile on(State state) { if (state.name != null) { String baseName = state.name; int ext = baseName.indexOf(".compact"); if (ext != -1) { baseName = baseName.substring(0, ext); } return state.context.factory.compactInfo(baseName); } return state.context.factory.noContent(state.path); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/gems/000077500000000000000000000000001446701454400320335ustar00rootroot00000000000000GemsCuba.java000066400000000000000000000042751446701454400343150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/gems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.gems; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * cuba for /gems * * @author christian */ public class GemsCuba implements Cuba { public static final String GEM = ".gem"; private static final Pattern FILE = Pattern.compile("^([^/]/)?([^/]+)" + GEM + "$"); /** * no sub-directories *

* create GemFiles for {name}-{version}.gem or {first-char-of-name}/{name}-{version}.gem *

* the directory itself does not produce the directory listing - only the empty Directory * object. */ @Override public RubygemsFile on(State state) { Matcher m; if (state.name.length() == 1) { if (state.path.length() < 2) { return state.context.factory.directory(state.context.original); } m = FILE.matcher(state.path.substring(1)); } else { m = FILE.matcher(state.name); } if (m.matches()) { return state.context.factory.gemFile(m.group(2)); } if (state.name.isEmpty()) { return state.context.factory.directory(state.context.original); } return state.context.factory.notFound(state.context.original); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/000077500000000000000000000000001446701454400322065ustar00rootroot00000000000000MavenCuba.java000066400000000000000000000036471446701454400346450ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /maven * * @author christian */ public class MavenCuba implements Cuba { public static final String RELEASES = "releases"; public static final String PRERELEASES = "prereleases"; private final Cuba releases; private final Cuba prereleases; public MavenCuba(Cuba releases, Cuba prereleases) { this.releases = releases; this.prereleases = prereleases; } /** * directories [releases,prereleases] */ @Override public RubygemsFile on(State state) { switch (state.name) { case RELEASES: return state.nested(releases); case PRERELEASES: return state.nested(prereleases); case "": return state.context.factory.directory(state.context.original, PRERELEASES, RELEASES); default: return state.context.factory.notFound(state.context.original); } } }MavenPrereleasesCuba.java000066400000000000000000000032731446701454400370330ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /maven/prereleases/ * * @author christian */ public class MavenPrereleasesCuba implements Cuba { private final Cuba mavenPrereleasesRubygems; public MavenPrereleasesCuba(Cuba cuba) { mavenPrereleasesRubygems = cuba; } /** * directory [rubygems] */ @Override public RubygemsFile on(State state) { switch (state.name) { case MavenReleasesCuba.RUBYGEMS: return state.nested(mavenPrereleasesRubygems); case "": return state.context.factory.directory(state.context.original, MavenReleasesCuba.RUBYGEMS); default: return state.context.factory.notFound(state.context.original); } } }MavenPrereleasesRubygemsArtifactIdCuba.java000066400000000000000000000044141446701454400425020ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.MavenMetadataFile; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /maven/prereleases/rubygems/{artifactId} * * @author christian */ public class MavenPrereleasesRubygemsArtifactIdCuba implements Cuba { public static final String SNAPSHOT = "-SNAPSHOT"; private final String name; public MavenPrereleasesRubygemsArtifactIdCuba(String name) { this.name = name; } /** * directories one for each version of the gem with given name/artifactId *

* files [maven-metadata.xml,maven-metadata.xml.sha1] */ @Override public RubygemsFile on(State state) { switch (state.name) { case MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML: return state.context.factory.mavenMetadata(name, true); case MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML + ".sha1": MavenMetadataFile file = state.context.factory.mavenMetadata(name, true); return state.context.factory.sha1(file); case "": return state.context.factory.gemArtifactIdDirectory(state.context.original, name, true); default: return state.nested(new MavenPrereleasesRubygemsArtifactIdVersionCuba(name, state.name.replace(SNAPSHOT, ""))); } } }MavenPrereleasesRubygemsArtifactIdVersionCuba.java000066400000000000000000000066561446701454400440620ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.MavenMetadataSnapshotFile; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * cuba for /maven/prereleases/rubygems/{artifactId}/{version}-SNAPSHOT/ * * @author christian */ public class MavenPrereleasesRubygemsArtifactIdVersionCuba implements Cuba { private static final Pattern FILE = Pattern.compile("^.*?([^-][^-]*)\\.(gem|pom|gem.sha1|pom.sha1)$"); private final String artifactId; private final String version; public MavenPrereleasesRubygemsArtifactIdVersionCuba(String artifactId, String version) { this.artifactId = artifactId; this.version = version; } /** * directories one for each version of the gem with given name/artifactId *

* files [{artifactId}-{version}-SNAPSHOT.gem,{artifactId}-{version}-SNAPSHOT.gem.sha1, * {artifactId}-{version}-SNAPSHOT.pom,{artifactId}-{version}-SNAPSHOT.pom.sha1] */ @Override public RubygemsFile on(State state) { Matcher m = FILE.matcher(state.name); if (m.matches()) { switch (m.group(2)) { case "gem": return state.context.factory.gemArtifactSnapshot(artifactId, version, m.group(1)); case "pom": return state.context.factory.pomSnapshot(artifactId, version, m.group(1)); case "gem.sha1": RubygemsFile file = state.context.factory.gemArtifactSnapshot(artifactId, version, m.group(1)); return state.context.factory.sha1(file); case "pom.sha1": file = state.context.factory.pomSnapshot(artifactId, version, m.group(1)); return state.context.factory.sha1(file); default: } } switch (state.name) { case MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML: return state.context.factory.mavenMetadataSnapshot(artifactId, version); case MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML + ".sha1": MavenMetadataSnapshotFile file = state.context.factory.mavenMetadataSnapshot(artifactId, version); return state.context.factory.sha1(file); case "": return state.context.factory.gemArtifactIdVersionDirectory(state.context.original, artifactId, version, true); default: return state.context.factory.notFound(state.context.original); } } }MavenPrereleasesRubygemsCuba.java000066400000000000000000000026571446701454400405560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /maven/prereleases/rubygems/ * * @author christian */ public class MavenPrereleasesRubygemsCuba implements Cuba { /** * directories one for each gem (name without version) */ @Override public RubygemsFile on(State ctx) { if (ctx.name.isEmpty()) { return ctx.context.factory.rubygemsDirectory(ctx.context.original); } return ctx.nested(new MavenPrereleasesRubygemsArtifactIdCuba(ctx.name)); } }MavenReleasesCuba.java000066400000000000000000000034071446701454400363230ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /maven/releases/ * * @author christian */ public class MavenReleasesCuba implements Cuba { public static final String RUBYGEMS = "rubygems"; private final Cuba mavenReleasesRubygems; public MavenReleasesCuba(Cuba mavenReleasesRubygems) { this.mavenReleasesRubygems = mavenReleasesRubygems; } /** * directory [rubygems] */ @Override public RubygemsFile on(State state) { switch (state.name) { case MavenReleasesCuba.RUBYGEMS: return state.nested(mavenReleasesRubygems); case "": return state.context.factory.directory(state.context.original, MavenReleasesCuba.RUBYGEMS); default: return state.context.factory.notFound(state.context.original); } } }MavenReleasesRubygemsArtifactIdCuba.java000066400000000000000000000044301446701454400417710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.MavenMetadataFile; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /maven/releases/rubygems/{artifactId} * * @author christian */ public class MavenReleasesRubygemsArtifactIdCuba implements Cuba { public static final String MAVEN_METADATA_XML = "maven-metadata.xml"; private final String artifactId; public MavenReleasesRubygemsArtifactIdCuba(String artifactId) { this.artifactId = artifactId; } /** * directories one for each version of the gem with given name/artifactId *

* files [maven-metadata.xml,maven-metadata.xml.sha1] */ @Override public RubygemsFile on(State state) { switch (state.name) { case MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML: return state.context.factory.mavenMetadata(artifactId, false); case MavenReleasesRubygemsArtifactIdCuba.MAVEN_METADATA_XML + ".sha1": MavenMetadataFile file = state.context.factory.mavenMetadata(artifactId, false); return state.context.factory.sha1(file); case "": return state.context.factory.gemArtifactIdDirectory(state.context.original, artifactId, false); default: return state.nested(new MavenReleasesRubygemsArtifactIdVersionCuba(artifactId, state.name)); } } }MavenReleasesRubygemsArtifactIdVersionCuba.java000066400000000000000000000055001446701454400433360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * cuba for /maven/prereleases/rubygems/{artifactId}/{version}/ * * @author christian */ public class MavenReleasesRubygemsArtifactIdVersionCuba implements Cuba { private static final Pattern FILE = Pattern.compile("^.*\\.(gem|pom|gem.sha1|pom.sha1)$"); private final String artifactId; private final String version; public MavenReleasesRubygemsArtifactIdVersionCuba(String artifactId, String version) { this.artifactId = artifactId; this.version = version; } /** * directories one for each version of the gem with given name/artifactId *

* files [{artifactId}-{version}.gem,{artifactId}-{version}.gem.sha1, * {artifactId}-{version}.pom,{artifactId}-{version}.pom.sha1] */ @Override public RubygemsFile on(State state) { Matcher m = FILE.matcher(state.name); if (m.matches()) { switch (m.group(1)) { case "gem": return state.context.factory.gemArtifact(artifactId, version); case "pom": return state.context.factory.pom(artifactId, version); case "gem.sha1": RubygemsFile file = state.context.factory.gemArtifact(artifactId, version); return state.context.factory.sha1(file); case "pom.sha1": file = state.context.factory.pom(artifactId, version); return state.context.factory.sha1(file); default: } } switch (state.name) { case "": return state.context.factory.gemArtifactIdVersionDirectory(state.context.original, artifactId, version, false); default: return state.context.factory.notFound(state.context.original); } } }MavenReleasesRubygemsCuba.java000066400000000000000000000026611446701454400400420ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/maven/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.maven; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /maven/releases/rubygems/ * * @author christian */ public class MavenReleasesRubygemsCuba implements Cuba { /** * directories one for each gem (name without version) */ @Override public RubygemsFile on(State state) { if (state.name.isEmpty()) { return state.context.factory.rubygemsDirectory(state.context.original); } return state.nested(new MavenReleasesRubygemsArtifactIdCuba(state.name)); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/quick/000077500000000000000000000000001446701454400322145ustar00rootroot00000000000000QuickCuba.java000066400000000000000000000032641446701454400346540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/quick/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.quick; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; /** * cuba for /quick/ * * @author christian */ public class QuickCuba implements Cuba { public static final String MARSHAL_4_8 = "Marshal.4.8"; private final Cuba quickMarshal; public QuickCuba(Cuba cuba) { this.quickMarshal = cuba; } /** * directory [Marshal.4.8] */ @Override public RubygemsFile on(State state) { switch (state.name) { case MARSHAL_4_8: return state.nested(quickMarshal); case "": return state.context.factory.directory(state.context.original, MARSHAL_4_8); default: return state.context.factory.notFound(state.context.original); } } }QuickMarshalCuba.java000066400000000000000000000043701446701454400361630ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/cuba/quick/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.cuba.quick; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.Cuba; import org.torquebox.mojo.rubygems.cuba.State; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * cuba for /quick/Marshal.4.8 * * @author christian */ public class QuickMarshalCuba implements Cuba { public static final String GEMSPEC_RZ = ".gemspec.rz"; private static Pattern FILE = Pattern.compile("^([^/]/)?([^/]+)" + GEMSPEC_RZ + "$"); /** * no sub-directories *

* create GemspecFiles for {name}-{version}.gemspec.rz or {first-char-of-name}/{name}-{version}.gemspec.rz *

* the directory itself does not produce the directory listing - only the empty Directory * object. */ @Override public RubygemsFile on(State state) { Matcher m; if (state.name.length() == 1) { if (state.path.length() < 2) { return state.context.factory.directory(state.context.original); } m = FILE.matcher(state.path.substring(1)); } else { m = FILE.matcher(state.name); } if (m.matches()) { return state.context.factory.gemspecFile(m.group(2)); } if (state.name.isEmpty()) { return state.context.factory.directory(state.context.original); } return state.context.factory.notFound(state.context.original); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/000077500000000000000000000000001446701454400315035ustar00rootroot00000000000000CachingProxyStorage.java000066400000000000000000000145731446701454400362240ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.BundlerApiFile; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.FileTime; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * it uses the SimpleStorage to cache the remote files. * * @author christian */ public class CachingProxyStorage extends SimpleStorage implements ProxyStorage { protected final String baseurl; private final ConcurrentMap locks = new ConcurrentSkipListMap(); private final long ttl; private final int timeout; public CachingProxyStorage(File basedir, URL baseurl) { this(basedir, baseurl, 3600000); } public CachingProxyStorage(File basedir, URL baseurl, long timeToLiveOfVolatileFiles) { super(basedir); this.baseurl = baseurl.toExternalForm().replaceFirst("/$", ""); this.ttl = timeToLiveOfVolatileFiles; this.timeout = 60000; } @Override public boolean isExpired(DependencyFile file) { return isExpiredTTL(toPath(file)); } @Override public boolean isExpired(CompactInfoFile file) { return isExpiredTTL(toPath(file)); } private boolean isExpiredTTL(Path file) { Path path = file; if (Files.notExists(path)) { return true; } try { long mod = Files.getLastModifiedTime(path).toMillis(); long now = System.currentTimeMillis(); return now - mod > this.ttl; } catch (IOException e) { return true; } } @Override public void retrieve(BundlerApiFile file) { try { file.set(toUrl(file)); } catch (IOException e) { file.setException(e); } } @Override public void retrieve(DependencyFile file) { retrieveVolatile(file); } @Override public void retrieve(CompactInfoFile file) { retrieveVolatile(file); } @Override public void retrieve(SpecsIndexZippedFile file) { retrieveVolatile(file); } @Override public void retrieve(RubygemsFile file) { super.retrieve(file); if (file.notExists()) { download(file); } } private void download(RubygemsFile file) { try { URLConnection url = toUrl(file).openConnection(); create(url.getInputStream(), file); if (file.hasPayload()) { setLastModified(toPath(file), url); file.resetState(); super.retrieve(file); } } catch (FileNotFoundException e) { file.markAsNotExists(); } catch (IOException e) { file.setException(e); } } protected boolean retrieveVolatile(RubygemsFile file) { Path path = toPath(file); if (Files.notExists(path)) { download(file); return file.hasPayload(); } try { long mod = Files.getLastModifiedTime(path).toMillis(); long now = System.currentTimeMillis(); if (now - mod > this.ttl) { update(file, path); } else { retrieve(file); } } catch (IOException e) { file.setException(e); } return file.hasPayload(); } private Lock lock(RubygemsFile file) { Lock l = new ReentrantLock(); Lock ll = locks.putIfAbsent(file.remotePath(), l); return ll == null ? l : ll; } private void unlock(RubygemsFile file) { Lock l = locks.remove(file.remotePath()); if (l != null) { l.unlock(); } } protected void update(RubygemsFile file, Path path) { Lock lock = lock(file); if (lock.tryLock()) { try { URLConnection url = toUrl(file).openConnection(); update(url.getInputStream(), file); setLastModified(path, url); } catch (IOException e) { file.setException(e); } finally { unlock(file); } } else { try { if (!lock.tryLock(timeout, TimeUnit.MILLISECONDS)) { file.markAsTempUnavailable(); } else { // assume nothing to be done lock.unlock(); } } catch (InterruptedException e) { // ignore } } } protected void setLastModified(Path path, URLConnection url) throws IOException { long mod = url.getLastModified(); if (mod == 0) { mod = System.currentTimeMillis(); } Files.setLastModifiedTime(path, FileTime.fromMillis(mod)); } protected URLStreamLocation toUrl(RubygemsFile file) throws MalformedURLException { return new URLStreamLocation(new URL(baseurl + file.remotePath())); } @Override public void expireNow(RubygemsFile file) { toPath(file).toFile().setLastModified(0); } } DELETELayout.java000066400000000000000000000071661446701454400344410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.ApiV1File; import org.torquebox.mojo.rubygems.ApiV2File; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.GemFile; import org.torquebox.mojo.rubygems.GemspecFile; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; /** * layout for HTTP DELETE request. allows to delete

    *
  • SpecsIndexZippedFile
  • *
  • GemFile
  • *
  • GemspecFile
  • *
  • DependencyFile
  • *
*

* and disallows

    *
  • SpecsIndexFile
  • *
  • ApiV1File
  • *
* * @author christian */ public class DELETELayout extends NoopDefaultLayout { public DELETELayout(RubygemsGateway gateway, Storage store) { super(gateway, store); } @Override public SpecsIndexFile specsIndexFile(String name) { SpecsIndexFile file = super.specsIndexFile(name); file.markAsForbidden(); return file; } @Override public SpecsIndexZippedFile specsIndexZippedFile(String name) { SpecsIndexZippedFile file = super.specsIndexZippedFile(name); store.delete(file); return file; } @Override public ApiV1File apiV1File(String name) { ApiV1File file = super.apiV1File(name); file.markAsForbidden(); return file; } @Override public GemFile gemFile(String name, String version, String platform) { GemFile file = super.gemFile(name, version, platform); store.delete(file); return file; } @Override public GemFile gemFile(String name) { GemFile file = super.gemFile(name); store.delete(file); return file; } @Override public GemspecFile gemspecFile(String name, String version, String platform) { GemspecFile file = super.gemspecFile(name, version, platform); store.delete(file); return file; } @Override public GemspecFile gemspecFile(String name) { GemspecFile file = super.gemspecFile(name); store.delete(file); return file; } @Override @Deprecated public DependencyFile dependencyFile(String name) { DependencyFile file = super.dependencyFile(name); store.delete(file); return file; } @Override public ApiV2File rubygemsInfoV2(String name, String version) { ApiV2File file = super.rubygemsInfoV2(name, version); store.delete(file); return file; } @Override public CompactInfoFile compactInfo(String name) { CompactInfoFile file = super.compactInfo(name); store.delete(file); return file; } } DefaultLayout.java000066400000000000000000000024451446701454400350560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.DefaultRubygemsFileFactory; import org.torquebox.mojo.rubygems.RubygemsFile; import java.io.InputStream; /** * adds dummy implementation for {@link Layout#addGem(InputStream, RubygemsFile)} * * @author christian */ public class DefaultLayout extends DefaultRubygemsFileFactory implements Layout { @Override public void addGem(InputStream is, RubygemsFile file) { throw new RuntimeException("not implemented !"); } }DependencyHelper.java000066400000000000000000000050241446701454400355060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import java.io.ByteArrayInputStream; import java.io.InputStream; /** * helper to collect or merge dependency data from DependencyFiles * or extract the dependency data from a given GemspecFile. * the remote data from BundlerApiFile is collection of the same * dependency data format which can added as well. *

* after adding all the data, you can retrieve the list of gemnames for which * there are dependency data and retrieve them as marshalled stream (same format as * DependencyFile or BundlerApiFile). * * @author christian */ public interface DependencyHelper { /** * add dependency data to instance * * @param marshalledDependencyData stream of the marshalled "ruby" data */ void add(InputStream marshalledDependencyData); /** * add dependency data to instance from a rzipped gemspec object. * * @param gemspec rzipped stream of the marshalled gemspec object */ void addGemspec(InputStream gemspec); /** * freezes the instance - no more added of data is allowed - and returns * the list of gemnames for which dependency data was added. * * @return String[] of gemnames */ String[] getGemnames(); /** * marshal ruby object with dependency data for the given gemname. * * @param gemname * @return ByteArrayInputStream of binary data */ ByteArrayInputStream getInputStreamOf(String gemname); /** * marshal ruby object with dependency data for all the dependency data, * either with or without duplicates. * * @return ByteArrayInputStream of binary data */ ByteArrayInputStream getInputStream(boolean unique); }GETLayout.java000066400000000000000000000275451446701454400341210ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.ApiV1File; import org.torquebox.mojo.rubygems.ApiV2File; import org.torquebox.mojo.rubygems.BundlerApiFile; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.DependencyData; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.DependencyHelper; import org.torquebox.mojo.rubygems.Directory; import org.torquebox.mojo.rubygems.GemArtifactFile; import org.torquebox.mojo.rubygems.GemArtifactIdDirectory; import org.torquebox.mojo.rubygems.GemFile; import org.torquebox.mojo.rubygems.GemspecFile; import org.torquebox.mojo.rubygems.MavenMetadataFile; import org.torquebox.mojo.rubygems.MavenMetadataSnapshotFile; import org.torquebox.mojo.rubygems.MetadataBuilder; import org.torquebox.mojo.rubygems.MetadataSnapshotBuilder; import org.torquebox.mojo.rubygems.PomFile; import org.torquebox.mojo.rubygems.RubygemsDirectory; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.RubygemsV2GemInfo; import org.torquebox.mojo.rubygems.Sha1Digest; import org.torquebox.mojo.rubygems.Sha1File; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.IOException; import java.io.InputStream; /** * a base layout for HTTP GET requests. * *

    *
  • ensure the zipped specs.4.8 are in place before retrieving the specs.4.8 itself
  • *
  • generate the pom.xml from the associated gemspec file
  • *
  • attach the gem with the right platform the GemArtifactFiles
  • *
  • collect all DependencyFiles and merge them for the BundlerApiFile payload
  • *
  • generate the Sha1Files and MavenMetadataFiles on the fly
  • *
  • generate directory listing for some "virtual" directories
  • *
* * @author christian */ public class GETLayout extends DefaultLayout implements Layout { protected final RubygemsGateway gateway; protected final Storage store; public GETLayout(RubygemsGateway gateway, Storage store) { this.gateway = gateway; this.store = store; } /** * this allows sub-classes to add more functionality, like creating an * empty SpecsIndexZippedFile. */ protected void retrieveZipped(SpecsIndexZippedFile specs) { store.retrieve(specs); } @Override public SpecsIndexFile specsIndexFile(String name) { SpecsIndexFile specs = super.specsIndexFile(name); // just make sure we have a zipped file, i.e. create an empty one retrieveZipped(specs.zippedSpecsIndexFile()); // now retrieve the unzipped one store.retrieve(specs); return specs; } @Override public SpecsIndexZippedFile specsIndexZippedFile(String name) { SpecsIndexZippedFile specs = super.specsIndexZippedFile(name); retrieveZipped(specs); return specs; } /** * subclasses can overwrite this, to collect the dependencies files differently. i.e. * a proxy might want to load only the missing or expired dependency files. * * @param file with the list of gem-names * @param deps the result set of InputStreams to all the DependencyFile of the * given list of gem-names */ protected void retrieveAll(BundlerApiFile file, DependencyHelper deps) throws IOException { for (String name : file.gemnames()) { CompactInfoFile compactInfo = compactInfo(name); try (InputStream is = store.getInputStream(compactInfo)) { deps.addCompact(is, name, store.getModified(compactInfo)); } } } @Override public BundlerApiFile bundlerApiFile(String namesCommaSeparated) { BundlerApiFile file = super.bundlerApiFile(namesCommaSeparated); DependencyHelper deps = gateway.newDependencyHelper(); try { retrieveAll(file, deps); if (!file.hasException()) { store.memory(deps.getInputStream(false), file); } } catch (IOException e) { file.setException(e); } return file; } @Override public RubygemsDirectory rubygemsDirectory(String path) { RubygemsDirectory dir = super.rubygemsDirectory(path); Directory d = directory("/api/v1/dependencies/"); dir.setItems(store.listDirectory(d)); // copy the error over to the original directory if (d.hasException()) { dir.setException(d.getException()); } return dir; } @Override public GemArtifactIdDirectory gemArtifactIdDirectory(String path, String name, boolean prereleases) { GemArtifactIdDirectory dir = super.gemArtifactIdDirectory(path, name, prereleases); try { dir.setItems(newDependencyData(dir.dependency())); } catch (IOException e) { dir.setException(e); } return dir; } @Override public MavenMetadataFile mavenMetadata(String name, boolean prereleased) { MavenMetadataFile file = super.mavenMetadata(name, prereleased); try { MetadataBuilder meta = new MetadataBuilder(newDependencyData(file.dependency())); meta.appendVersions(file.isPrerelease()); store.memory(meta.toString(), file); } catch (IOException e) { file.setException(e); } return file; } @Override public MavenMetadataSnapshotFile mavenMetadataSnapshot(String name, String version) { MavenMetadataSnapshotFile file = super.mavenMetadataSnapshot(name, version); MetadataSnapshotBuilder meta = new MetadataSnapshotBuilder(name, version, store.getModified(file.dependency())); store.memory(meta.toString(), file); return file; } /** * generate the pom.xml and set it as payload to the given PomFile */ protected void setPomPayload(PomFile file, boolean snapshot) { try { DependencyData dependencyData = newDependencyData(file.dependency()); if ("java".equals(dependencyData.platform(file.version()))) { pomFromGem(file, snapshot, dependencyData); } else { pomFromGemspec(file, snapshot, dependencyData); } } catch (IOException e) { file.setException(e); } } private void pomFromGemspec(PomFile file, boolean snapshot, DependencyData dependencyData) throws IOException { GemspecFile gemspec = file.gemspec(dependencyData); if (gemspec.notExists()) { file.markAsNotExists(); } else { try (InputStream is = store.getInputStream(gemspec)) { store.memory(gateway.newGemspecHelperFromV2GemInfo(is).pom(snapshot), file); } } } private void pomFromGem(PomFile file, boolean snapshot, DependencyData dependencyData) throws IOException { GemFile gem = file.gem(dependencyData); if (gem.notExists()) { file.markAsNotExists(); } else { try (InputStream is = store.getInputStream(gem)) { store.memory(gateway.newGemspecHelperFromGem(is).pom(snapshot), file); } } } /** * retrieve the gem with the right platform and attach it to the GemArtifactFile */ protected void setGemArtifactPayload(GemArtifactFile file) { try { // the dependency-data is needed to find out // whether the gem has the default platform or the java platform GemFile gem = file.gem(newDependencyData(file.dependency())); if (gem == null) { file.markAsNotExists(); } else { // retrieve the gem and set it as payload store.retrieve(gem); file.set(gem.get()); } } catch (IOException e) { file.setException(e); } } @Override public PomFile pomSnapshot(String name, String version, String timestamp) { PomFile file = super.pomSnapshot(name, version, timestamp); setPomPayload(file, true); return file; } @Override public PomFile pom(String name, String version) { PomFile file = super.pom(name, version); setPomPayload(file, false); return file; } @Override public GemArtifactFile gemArtifactSnapshot(String name, String version, String timestamp) { GemArtifactFile file = super.gemArtifactSnapshot(name, version, timestamp); setGemArtifactPayload(file); return file; } @Override public GemArtifactFile gemArtifact(String name, String version) { GemArtifactFile file = super.gemArtifact(name, version); setGemArtifactPayload(file); return file; } @Override public Sha1File sha1(RubygemsFile file) { Sha1File sha = super.sha1(file); if (sha.notExists()) { return sha; } try (InputStream is = store.getInputStream(file)) { Sha1Digest digest = new Sha1Digest(); int i = is.read(); while (i != -1) { digest.update((byte) i); i = is.read(); } store.memory(digest.hexDigest(), sha); } catch (IOException e) { sha.setException(e); } return sha; } /** * load all the dependency data into an object. */ protected DependencyData newDependencyData(CompactInfoFile file) throws IOException { try (InputStream is = store.getInputStream(file)) { return gateway.newCompactDependencyData(is, file.name(), store.getModified(file)); } } protected RubygemsV2GemInfo newRubygemsV2GemInfo(ApiV2File file) throws IOException { try (InputStream is = store.getInputStream(file)) { return gateway.newRubygemsV2GemInfo(is, file.name(), file.version(), store.getModified(file)); } } @Override public GemFile gemFile(String name, String version, String platform) { GemFile gem = super.gemFile(name, version, platform); store.retrieve(gem); return gem; } @Override public GemFile gemFile(String filename) { GemFile gem = super.gemFile(filename); store.retrieve(gem); return gem; } @Override public GemspecFile gemspecFile(String name, String version, String platform) { GemspecFile gemspec = super.gemspecFile(name, version, platform); store.retrieve(gemspec); return gemspec; } @Override public GemspecFile gemspecFile(String filename) { GemspecFile gemspec = super.gemspecFile(filename); store.retrieve(gemspec); return gemspec; } @Override public ApiV1File apiV1File(String name) { ApiV1File file = super.apiV1File(name); if (!"api_key".equals(name)) { file.markAsForbidden(); } return file; } } HostedDELETELayout.java000066400000000000000000000130351446701454400356000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.jruby.runtime.builtin.IRubyObject; import org.torquebox.mojo.rubygems.ApiV1File; import org.torquebox.mojo.rubygems.ApiV2File; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.GemFile; import org.torquebox.mojo.rubygems.GemspecFile; import org.torquebox.mojo.rubygems.GemspecHelper; import org.torquebox.mojo.rubygems.IOUtil; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.SpecsHelper; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexType; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.IOException; import java.io.InputStream; import java.util.zip.GZIPInputStream; /** * on hosted rubygems repositories you can delete only gem files. deleting * a gem file also means to adjust the specs.4.8 indices and their associated * dependency file as well deleting the gemspec file of the gem. *

* note: to restrict deleting to gem file is more precaution then a necessity. *

  • it is possible to regenerate the gemspec file from the gem
  • *
  • to generate the dependencies file from the stored gems of the same name
  • *
  • even the specs.4.8 can be regenerated from the stored gems
* * @author christian * @see HostedGETLayout */ // TODO why not using DELETELayout instead of NoopDefaultLayout ? public class HostedDELETELayout extends NoopDefaultLayout { public HostedDELETELayout(RubygemsGateway gateway, Storage store) { super(gateway, store); } @Override public SpecsIndexFile specsIndexFile(String name) { SpecsIndexFile file = super.specsIndexFile(name); file.markAsForbidden(); return file; } @Override public GemspecFile gemspecFile(String name, String version, String platform) { GemspecFile file = super.gemspecFile(name, version, platform); file.markAsForbidden(); return file; } @Override public GemspecFile gemspecFile(String name) { GemspecFile file = super.gemspecFile(name); file.markAsForbidden(); return file; } @Override @Deprecated public DependencyFile dependencyFile(String name) { DependencyFile file = super.dependencyFile(name); file.markAsForbidden(); return file; } @Override public ApiV2File rubygemsInfoV2(String name, String version) { ApiV2File file = super.rubygemsInfoV2(name, version); file.markAsForbidden(); return file; } @Override public CompactInfoFile compactInfo(String name) { CompactInfoFile file = super.compactInfo(name); file.markAsForbidden(); return file; } @Override public ApiV1File apiV1File(String name) { ApiV1File file = super.apiV1File(name); file.markAsForbidden(); return file; } @Override public GemFile gemFile(String name, String version, String platform) { GemFile file = super.gemFile(name, version, platform); deleteGemFile(file); return file; } @Override public GemFile gemFile(String name) { GemFile file = super.gemFile(name); deleteGemFile(file); return file; } /** * delete the gem and its metadata in the specs.4.8 indices and * dependency file */ private void deleteGemFile(GemFile file) { store.retrieve(file); try (InputStream is = store.getInputStream(file)) { GemspecHelper spec = gateway.newGemspecHelperFromGem(is); deleteSpecFromIndex(spec.gemspec()); // delete dependencies so the next request will recreate it delete(super.dependencyFile(spec.name())); // delete the gemspec.rz altogether delete(super.gemspecFile(file.filename())); } catch (IOException e) { file.setException(e); } store.delete(file); } /** * delete given spec (a Ruby Object) and delete it from all the specs.4.8 indices. */ private void deleteSpecFromIndex(IRubyObject spec) throws IOException { SpecsHelper specs = gateway.newSpecsHelper(); for (SpecsIndexType type : SpecsIndexType.values()) { SpecsIndexZippedFile specsIndex = ensureSpecsIndexZippedFile(type); try (InputStream in = new GZIPInputStream(store.getInputStream(specsIndex))) { try (InputStream result = specs.deleteSpec(spec, in, type)) { // if nothing was added the content is NULL if (result != null) { store.update(IOUtil.toGzipped(result), specsIndex); } } } } } } HostedGETLayout.java000066400000000000000000000140271446701454400352570ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.ApiV2File; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.DependencyHelper; import org.torquebox.mojo.rubygems.GemFile; import org.torquebox.mojo.rubygems.GemspecFile; import org.torquebox.mojo.rubygems.GemspecHelper; import org.torquebox.mojo.rubygems.IOUtil; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.SpecsHelper; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexType; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * this hosted layout for HTTP GET will ensure that the zipped version of the specs.4.8 * do exists before retrieving the unzipped ones. it also creates missing gemspec and dependency * files if missing. * * @author christian */ public class HostedGETLayout extends GETLayout { public HostedGETLayout(RubygemsGateway gateway, Storage store) { super(gateway, store); } @Override protected void retrieveZipped(SpecsIndexZippedFile specs) { super.retrieveZipped(specs); if (specs.notExists()) { try (InputStream content = gateway.newSpecsHelper().createEmptySpecs()) { // just update in case so no need to deal with concurrency // since once the file is there no update happen again store.update(IOUtil.toGzipped(content), specs); store.retrieve(specs); } catch (IOException e) { specs.setException(e); } } } @Override public GemspecFile gemspecFile(String name, String version, String platform) { GemspecFile gemspec = super.gemspecFile(name, version, platform); if (gemspec.notExists()) { createGemspec(gemspec); } return gemspec; } @Override public GemspecFile gemspecFile(String filename) { GemspecFile gemspec = super.gemspecFile(filename); if (gemspec.notExists()) { createGemspec(gemspec); } return gemspec; } /** * create the gemspec from the stored gem file. if the gem file does not * exists, the GemspecFile gets makred as NOT_EXISTS. */ protected void createGemspec(GemspecFile gemspec) { GemFile gem = gemspec.gem(); if (gem.notExists()) { gemspec.markAsNotExists(); } else { try (InputStream is = store.getInputStream(gemspec.gem())) { GemspecHelper spec = gateway.newGemspecHelperFromGem(is); // just update in case so no need to deal with concurrency // since once the file is there no update happen again store.update(spec.getRzInputStream(), gemspec); store.retrieve(gemspec); } catch (IOException e) { gemspec.setException(e); } } } @Override @Deprecated public DependencyFile dependencyFile(String name) { DependencyFile file = super.dependencyFile(name); store.retrieve(file); if (file.notExists()) { createDependency(file); } return file; } @Override public ApiV2File rubygemsInfoV2(String name, String version) { ApiV2File file = super.rubygemsInfoV2(name, version); store.retrieve(file); return file; } @Override public CompactInfoFile compactInfo(String name) { CompactInfoFile file = super.compactInfo(name); store.retrieve(file); return file; } /** * create the DependencyFile for the given gem name */ protected void createDependency(DependencyFile file) { try { SpecsIndexFile specs = specsIndexFile(SpecsIndexType.RELEASE); store.retrieve(specs); if (specs.hasException()) { file.setException(specs.getException()); return; } List versions; SpecsHelper specsHelper = gateway.newSpecsHelper(); try (InputStream is = store.getInputStream(specs)) { versions = specsHelper.listAllVersions(file.name(), is); } specs = specsIndexFile(SpecsIndexType.PRERELEASE); store.retrieve(specs); try (InputStream is = store.getInputStream(specs)) { versions.addAll(specsHelper.listAllVersions(file.name(), is)); } DependencyHelper gemspecs = gateway.newDependencyHelper(); for (String version : versions) { // ruby platform is not part of the gemname GemspecFile gemspec = gemspecFile(file.name() + "-" + version.replaceFirst("-ruby$", "")); try (InputStream is = store.getInputStream(gemspec)) { gemspecs.addGemspec(is); } } try (InputStream is = gemspecs.getInputStream(false)) { store.update(is, file); } store.retrieve(file); } catch (IOException e) { file.setException(e); } } } HostedPOSTLayout.java000066400000000000000000000160551446701454400354300ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.jruby.runtime.builtin.IRubyObject; import org.torquebox.mojo.rubygems.ApiV1File; import org.torquebox.mojo.rubygems.ApiV2File; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.GemFile; import org.torquebox.mojo.rubygems.GemspecFile; import org.torquebox.mojo.rubygems.GemspecHelper; import org.torquebox.mojo.rubygems.IOUtil; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.SpecsHelper; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexType; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.GZIPInputStream; /** * to make a HTTP POST to hosted repository allows only two path:
    *
  • /api/v1/gem
  • *
  • /gems/{name-version(-platform)}.gem
*

* all other paths are forbidden. *

* when uploading a gem all the specs.4.8 files will be updated. *

* the dependency file for the gemname and gemspec file will be generated on * demand. * * @author christian * @see HostedGETLayout */ public class HostedPOSTLayout extends NoopDefaultLayout { public HostedPOSTLayout(RubygemsGateway gateway, Storage store) { super(gateway, store); } @Override public void addGem(InputStream in, RubygemsFile file) { if (file.type() != FileType.GEM && file.type() != FileType.API_V1) { throw new RuntimeException("BUG: not allowed to store " + file); } try { store.create(in, file); if (file.hasNoPayload()) { // an error or something else but we need the payload now return; } GemspecHelper spec; try (InputStream is = store.getInputStream(file)) { spec = gateway.newGemspecHelperFromGem(is); } // check gemname matches coordinates from its specification switch (file.type()) { case GEM: if (!(((GemFile) file).filename() + ".gem").equals(spec.filename())) { store.delete(file); // now set the error for further processing file.setException(new IOException("filename " + file.name() + " does not match gemname: " + spec.filename())); return; } break; case API_V1: try (InputStream is = store.getInputStream(file)) { store.create(is, ((ApiV1File) file).gem(spec.filename())); } store.delete(file); break; default: throw new RuntimeException("BUG"); } addSpecToIndex(spec.gemspec()); // delete dependencies so the next request will recreate it delete(super.dependencyFile(spec.name())); // delete gemspec so the next request will recreate it delete(super.gemspecFile(spec.filename().replaceFirst(".gem$", ""))); } catch (IOException e) { file.setException(e); } } /** * add a spec (Ruby Object) to the specs.4.8 indices. */ private void addSpecToIndex(IRubyObject spec) throws IOException { SpecsHelper specs = gateway.newSpecsHelper(); for (SpecsIndexType type : SpecsIndexType.values()) { SpecsIndexZippedFile specsIndex = ensureSpecsIndexZippedFile(type); ByteArrayInputStream gzippedResult = null; try (InputStream in = new GZIPInputStream(store.getInputStream(specsIndex))) { try (InputStream result = specs.addSpec(spec, in, type)) { // if nothing was added the content is NULL if (result != null) { gzippedResult = IOUtil.toGzipped(result); } } } if (gzippedResult != null) { store.update(gzippedResult, specsIndex); } } } @Override public ApiV1File apiV1File(String name) { ApiV1File apiV1 = super.apiV1File(name); if (!"api_key".equals(apiV1.name())) { apiV1.markAsForbidden(); } return apiV1; } @Override public SpecsIndexFile specsIndexFile(SpecsIndexType type) { SpecsIndexFile file = super.specsIndexFile(type); file.markAsForbidden(); return file; } @Override public SpecsIndexZippedFile specsIndexZippedFile(SpecsIndexType type) { SpecsIndexZippedFile file = super.specsIndexZippedFile(type); file.markAsForbidden(); return file; } @Override public SpecsIndexFile specsIndexFile(String name) { SpecsIndexFile file = super.specsIndexFile(name); file.markAsForbidden(); return file; } @Override public SpecsIndexZippedFile specsIndexZippedFile(String name) { SpecsIndexZippedFile file = super.specsIndexZippedFile(name); file.markAsForbidden(); return file; } @Override public GemspecFile gemspecFile(String name, String version, String platform) { GemspecFile file = super.gemspecFile(name, version, platform); file.markAsForbidden(); return file; } @Override public GemspecFile gemspecFile(String name) { GemspecFile file = super.gemspecFile(name); file.markAsForbidden(); return file; } @Override @Deprecated public DependencyFile dependencyFile(String name) { DependencyFile file = super.dependencyFile(name); file.markAsForbidden(); return file; } @Override public ApiV2File rubygemsInfoV2(String name, String version) { ApiV2File file = super.rubygemsInfoV2(name, version); file.markAsForbidden(); return file; } @Override public CompactInfoFile compactInfo(String name) { CompactInfoFile file = super.compactInfo(name); file.markAsForbidden(); return file; } } HostedRubygemsFileSystem.java000066400000000000000000000026171446701454400372460ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; /** * this class assembles the hosted repository for GET, POST and DELETE request. * * @author christian */ public class HostedRubygemsFileSystem extends DefaultRubygemsFileSystem { public HostedRubygemsFileSystem(RubygemsGateway gateway, Storage store) { super(new DefaultLayout(), new HostedGETLayout(gateway, store), new HostedPOSTLayout(gateway, store), new HostedDELETELayout(gateway, store)); } }mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/Layout.java000066400000000000000000000026421446701454400336270ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.RubygemsFileFactory; import java.io.InputStream; /** * it adds a single extra method to the RubygemsFileFactory * * @author christian */ public interface Layout extends RubygemsFileFactory { /** * some layout needs to be able to "upload" gem-files * * @param is the InputStream which is used to store the given file * @param file which can be GemFile or ApiV1File with name "gem" */ void addGem(InputStream is, RubygemsFile file); }NoopDefaultLayout.java000066400000000000000000000120161446701454400357050ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.BundlerApiFile; import org.torquebox.mojo.rubygems.Directory; import org.torquebox.mojo.rubygems.GemArtifactFile; import org.torquebox.mojo.rubygems.IOUtil; import org.torquebox.mojo.rubygems.MavenMetadataFile; import org.torquebox.mojo.rubygems.MavenMetadataSnapshotFile; import org.torquebox.mojo.rubygems.PomFile; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.Sha1File; import org.torquebox.mojo.rubygems.SpecsIndexType; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.IOException; import java.io.InputStream; /** * adds default behavior for all RubygemsFile:

    *
  • all the generated files are marked as forbidden
  • *
  • all other files get passed to the DefaultLayout
*

* it adds a few helper methods for sub classes. * * @author christian */ public class NoopDefaultLayout extends DefaultLayout { protected final RubygemsGateway gateway; protected final Storage store; public NoopDefaultLayout(RubygemsGateway gateway, Storage store) { this.gateway = gateway; this.store = store; } // all those files are generated on the fly @Override public Sha1File sha1(RubygemsFile file) { Sha1File sha = super.sha1(file); sha.markAsForbidden(); return sha; } @Override public PomFile pomSnapshot(String name, String version, String timestamp) { PomFile file = super.pomSnapshot(name, version, timestamp); file.markAsForbidden(); return file; } @Override public GemArtifactFile gemArtifactSnapshot(String name, String version, String timestamp) { GemArtifactFile file = super.gemArtifactSnapshot(name, version, timestamp); file.markAsForbidden(); return file; } @Override public PomFile pom(String name, String version) { PomFile file = super.pom(name, version); file.markAsForbidden(); return file; } @Override public GemArtifactFile gemArtifact(String name, String version) { GemArtifactFile file = super.gemArtifact(name, version); file.markAsForbidden(); return file; } @Override public MavenMetadataSnapshotFile mavenMetadataSnapshot(String name, String version) { MavenMetadataSnapshotFile file = super.mavenMetadataSnapshot(name, version); file.markAsForbidden(); return file; } @Override public MavenMetadataFile mavenMetadata(String name, boolean prereleased) { MavenMetadataFile file = super.mavenMetadata(name, prereleased); file.markAsForbidden(); return file; } @Override public Directory directory(String path, String... items) { Directory file = super.directory(path, items); file.markAsForbidden(); return file; } @Override public BundlerApiFile bundlerApiFile(String names) { BundlerApiFile file = super.bundlerApiFile(names); file.markAsForbidden(); return file; } /** * on an empty storage there are no specs.4.8.gz, latest_specs.4.8.gz or prereleased_specs.4.8.gz * files. this method will create fresh and empty such files (having an empty index). */ protected SpecsIndexZippedFile ensureSpecsIndexZippedFile(SpecsIndexType type) throws IOException { SpecsIndexZippedFile specs = super.specsIndexZippedFile(type); store.retrieve(specs); if (specs.notExists()) { try (InputStream content = gateway.newSpecsHelper().createEmptySpecs()) { store.create(IOUtil.toGzipped(content), specs); if (specs.hasNoPayload()) { store.retrieve(specs); } if (specs.hasException()) { throw new IOException(specs.getException()); } } } return specs; } /** * delete underlying file from storage. */ protected void delete(RubygemsFile file) throws IOException { store.delete(file); if (file.hasException()) { throw new IOException(file.getException()); } } } ProxiedGETLayout.java000066400000000000000000000127451446701454400354500ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.ApiV2File; import org.torquebox.mojo.rubygems.BundlerApiFile; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.DependencyHelper; import org.torquebox.mojo.rubygems.GemFile; import org.torquebox.mojo.rubygems.GemspecFile; import org.torquebox.mojo.rubygems.GemspecHelper; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.RubygemsGateway; import java.io.IOException; import java.io.InputStream; import java.util.LinkedList; import java.util.List; public class ProxiedGETLayout extends GETLayout { private final ProxyStorage store; public ProxiedGETLayout(RubygemsGateway gateway, ProxyStorage store) { super(gateway, store); this.store = store; } private void maybeCreate(GemspecFile gemspec) { if (gemspec.notExists() || gemspec.hasException()) { Exception exp = gemspec.getException(); GemFile gem = gemspec.gem(); store.retrieve(gem); if (gem.exists()) { try { GemspecHelper helper = gateway.newGemspecHelperFromGem(store.getInputStream(gem)); store.update(helper.getRzInputStream(), gemspec); store.expireNow(gemspec); } catch (IOException e) { // in this case we stick to the original error of the gemspec file if (exp != null) { gemspec.setException(exp); } } } } } @Override public GemspecFile gemspecFile(String name, String version, String platform) { GemspecFile gemspec = super.gemspecFile(name, version, platform); maybeCreate(gemspec); return gemspec; } @Override public GemspecFile gemspecFile(String filename) { GemspecFile gemspec = super.gemspecFile(filename); maybeCreate(gemspec); return gemspec; } @Override @Deprecated public DependencyFile dependencyFile(String name) { DependencyFile file = super.dependencyFile(name); store.retrieve(file); return file; } @Override public ApiV2File rubygemsInfoV2(String name, String version) { ApiV2File file = super.rubygemsInfoV2(name, version); store.retrieve(file); return file; } @Override public CompactInfoFile compactInfo(String name) { CompactInfoFile file = super.compactInfo(name); store.retrieve(file); return file; } @Override protected void retrieveAll(BundlerApiFile file, DependencyHelper deps) throws IOException { List expiredNames = new LinkedList<>(); for (String name : file.gemnames()) { CompactInfoFile dep = super.compactInfo(name); if (store.isExpired(dep)) { expiredNames.add(name); } else { store.retrieve(dep); try (InputStream is = store.getInputStream(dep)) { deps.addCompact(is, name, store.getModified(dep)); } } } if (expiredNames.size() > 0) { BundlerApiFile expired = super.bundlerApiFile(expiredNames.toArray(new String[expiredNames.size()])); store.retrieve(expired); if (expired.hasException()) { file.setException(expired.getException()); } else if (expired.hasPayload()) { DependencyHelper bundlerDeps = gateway.newDependencyHelper(); try (InputStream bundlerResult = store.getInputStream(expired)) { bundlerDeps.addCompact(bundlerResult, expired.name(), store.getModified(expired)); } for (String gemname : expiredNames) { CompactInfoFile dep = super.compactInfo(gemname); // first store the data for caching store.update(bundlerDeps.getInputStreamOf(gemname), dep); // then add it to collector try (InputStream is = store.getInputStream(dep)) { deps.addCompact(is, gemname, store.getModified(dep)); } } } else { // no payload so let's fall back and add the expired content for (String name : expiredNames) { CompactInfoFile dep = super.compactInfo(name); store.retrieve(dep); try (InputStream is = store.getInputStream(dep)) { deps.addCompact(is, name, store.getModified(dep)); } } } } } } ProxiedRubygemsFileSystem.java000066400000000000000000000024241446701454400374260ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.RubygemsGateway; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; public class ProxiedRubygemsFileSystem extends DefaultRubygemsFileSystem { public ProxiedRubygemsFileSystem(RubygemsGateway gateway, ProxyStorage store) { super(new DefaultLayout(), new ProxiedGETLayout(gateway, store), null, // no POST allowed new DELETELayout(gateway, store)); } }ProxyStorage.java000066400000000000000000000031521446701454400347360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.BundlerApiFile; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.RubygemsFile; public interface ProxyStorage extends Storage { /** * retrieve the payload of the given file. */ void retrieve(BundlerApiFile file); /** * checks whether the underlying file on the storage is expired. *

* note: dependency files are volatile can be cached only for a short periods * (when they come from https://rubygems.org). */ boolean isExpired(DependencyFile file); boolean isExpired(CompactInfoFile file); /** * expire the given file now, i.e. set the last modified timestamp to 0 */ void expireNow(RubygemsFile file); } SimpleStorage.java000066400000000000000000000206411446701454400350500ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.apache.commons.codec.binary.Base64; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.Directory; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.security.SecureRandom; import java.util.zip.GZIPInputStream; /** * simple storage implementation using the system's filesystem. * it uses InputStreams as payload. * * @author christian */ public class SimpleStorage implements Storage { private final SecureRandom random = new SecureRandom(); private final File basedir; /** * create the storage with given base-directory. */ public SimpleStorage(File basedir) { this.basedir = basedir; this.random.setSeed(System.currentTimeMillis()); } @Override public InputStream getInputStream(RubygemsFile file) throws IOException { if (file.hasException()) { throw new IOException(file.getException()); } InputStream is; if (file.get() == null) { is = Files.newInputStream(toPath(file)); } else { is = ((StreamLocation) file.get()).openStream(); } // reset state since we have a payload and no exceptions file.resetState(); return is; } /** * convert RubygemsFile into a Path. */ protected Path toPath(RubygemsFile file) { return new File(basedir, file.storagePath()).toPath(); } @Override public long getModified(RubygemsFile file) { return toPath(file).toFile().lastModified(); } @Override public void retrieve(RubygemsFile file) { file.resetState(); Path path = toPath(file); if (Files.notExists(path)) { file.markAsNotExists(); } else { try { set(file, path); } catch (IOException e) { file.setException(e); } } } @Override public void retrieve(DependencyFile file) { retrieve((RubygemsFile) file); } @Override public void retrieve(CompactInfoFile file) { retrieve((RubygemsFile) file); } @Override public void retrieve(SpecsIndexZippedFile file) { retrieve((RubygemsFile) file); } @Override public void retrieve(SpecsIndexFile file) { SpecsIndexZippedFile zipped = file.zippedSpecsIndexFile(); retrieve(zipped); if (zipped.notExists()) { file.markAsNotExists(); } if (zipped.hasException()) { file.setException(zipped.getException()); } else { file.set(new URLGzipStreamLocation((StreamLocation) zipped.get())); } } @Override public void create(InputStream is, RubygemsFile file) { Path target = toPath(file); Path mutex = target.resolveSibling(target.getFileName() + ".lock"); Path source = target.resolveSibling("tmp." + Math.abs(random.nextLong())); try { createDirectory(source.getParent()); Files.createFile(mutex); Files.copy(is, source); Files.move(source, target, StandardCopyOption.ATOMIC_MOVE); set(file, target); } catch (FileAlreadyExistsException e) { mutex = null; file.markAsTempUnavailable(); } catch (IOException e) { file.setException(e); } finally { if (mutex != null) { mutex.toFile().delete(); } source.toFile().delete(); } } /** * set the payload * * @param file which gets the payload * @param path the path to the payload * @throws MalformedURLException */ private void set(RubygemsFile file, Path path) throws MalformedURLException { file.set(new URLStreamLocation(path.toUri().toURL())); } @Override public void update(InputStream is, RubygemsFile file) { Path target = toPath(file); Path source = target.resolveSibling("tmp." + Math.abs(random.nextLong())); try { createDirectory(source.getParent()); Files.copy(is, source); Files.move(source, target, StandardCopyOption.ATOMIC_MOVE); set(file, target); } catch (IOException e) { file.setException(e); } finally { source.toFile().delete(); } } /** * create a directory if it is not existing */ protected void createDirectory(Path parent) throws IOException { if (!Files.exists(parent)) { Files.createDirectories(parent); } } @Override public void delete(RubygemsFile file) { try { Files.deleteIfExists(toPath(file)); } catch (IOException e) { file.setException(e); } } @Override public void memory(ByteArrayInputStream data, RubygemsFile file) { file.set(new BytesStreamLocation(data)); } @Override public void memory(String data, RubygemsFile file) { memory(new ByteArrayInputStream(data.getBytes()), file); } @Override public String[] listDirectory(Directory dir) { String[] list = toPath(dir).toFile().list(); if (list == null) { list = new String[0]; } return list; } static interface StreamLocation { InputStream openStream() throws IOException; } static class URLStreamLocation implements StreamLocation { public static final String RUBYGEMS_TOOLS_USER_AGENT = "org.jruby.maven:rubygems-tools"; private URL url; private Base64 base64 = new Base64(); URLStreamLocation(URL url) { this.url = url; } public URLConnection openConnection() throws IOException { URLConnection con = url.openConnection(); con.setRequestProperty("User-Agent", RUBYGEMS_TOOLS_USER_AGENT); String userinfo = this.url.getUserInfo(); if (userinfo != null) { String basicAuth = "Basic " + base64.encodeBase64String(URLDecoder.decode(userinfo, "UTF-8").getBytes(StandardCharsets.UTF_8)); con.setRequestProperty("Authorization", basicAuth); } return con; } @Override public InputStream openStream() throws IOException { return openConnection().getInputStream(); } } static class BytesStreamLocation implements StreamLocation { private ByteArrayInputStream stream; BytesStreamLocation(ByteArrayInputStream stream) { this.stream = stream; } @Override public InputStream openStream() throws IOException { return stream; } } static class URLGzipStreamLocation implements StreamLocation { private StreamLocation stream; URLGzipStreamLocation(StreamLocation stream) { this.stream = stream; } @Override public InputStream openStream() throws IOException { return new GZIPInputStream(stream.openStream()); } } } mavengem-mavengem-2.0.1/rubygems-tools/src/main/java/org/torquebox/mojo/rubygems/layout/Storage.java000066400000000000000000000070141446701454400337540ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.Directory; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; /** * storage abstraction using RubygemsFile. all the CRUD methods do set the * the payload. these CRUD methods do NOT throw exceptions but sets those exceptions * as payload of the passed in RubygemsFile. *

* for GroupRepositories the SpecsIndexFile, SpecsIndexZippedFile * and DependencyFile needs to be merged, all other files will be served the first find. * * @author christian */ public interface Storage { /** * create the given file from an InputStream. */ void create(InputStream is, RubygemsFile file); /** * retrieve the payload of the given file. */ void retrieve(RubygemsFile file); /** * retrieve the payload of the given file. */ void retrieve(SpecsIndexFile file); /** * retrieve the payload of the given file. */ void retrieve(SpecsIndexZippedFile file); /** * retrieve the payload of the given file. */ void retrieve(DependencyFile file); /** * retrieve the payload of the given file. */ void retrieve(CompactInfoFile file); /** * update the given file from an InputStream. */ void update(InputStream is, RubygemsFile file); /** * delete the given file. */ void delete(RubygemsFile file); /** * use the String to generate the payload * for the RubygemsFile instance. */ void memory(ByteArrayInputStream data, RubygemsFile file); /** * use the String can converts it with to byte array * for the the payload of the RubygemsFile instance. */ void memory(String data, RubygemsFile file); /** * get an inputStream to actual file from the physical storage. * * @throws IOException on IO related errors or * wrapped the exception if the payload has an exception. */ InputStream getInputStream(RubygemsFile file) throws IOException; /** * get the last-modified unix time for the given file from the physical storage location. */ long getModified(RubygemsFile file); /** * list given Directory from the physical storage location. */ String[] listDirectory(Directory dir); } mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/000077500000000000000000000000001446701454400236375ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/000077500000000000000000000000001446701454400250015ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/bundle_runner.rb000066400000000000000000000031351446701454400301720ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'bundler' require 'bundler/cli' require 'stringio' module Nexus class BundleRunner def _out @out ||= StringIO.new end def _err @err ||= StringIO.new end def exec( *args ) $stdout = _out $stderr = _err ENV['PATH'] ||= '' # just make sure bundler has a PATH variable Bundler::CLI.start( args ) _out.string rescue SystemExit => e raise err.string if e.exit_code != 0 _out.string rescue Exception => e STDOUT.puts _out.string STDERR.puts _err.string trace = e.backtrace.join("\n\t") raise "#{e.message}\n\t#{trace}" ensure $stdout = STDOUT $stderr = STDERR #Thor::Shell::Basic.stdout.reopen end end end # this makes it easy for a scripting container to # create an instance of this class Nexus::BundleRunner mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/check.rb000066400000000000000000000024021446701454400264010ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # module Nexus class Check def check_gemspec_rz(gemfile, gemspec) spec_from_gem = Gem::Package.new( gemfile ).spec spec_from_gemspec = Marshal.load( Zlib::Inflate.inflate( Gem.read_binary( gemspec) ) ) spec_from_gem == spec_from_gemspec end def check_spec_name( gemfile ) Gem::Format.from_file_by_path( gemfile ).spec.name end def specs_size( specsfile ) specs = Marshal.load( Gem.read_binary( specsfile ) ) specs.size end end end Nexus::Check.new mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/compact_dependency_data.rb000066400000000000000000000044651446701454400321540ustar00rootroot00000000000000require 'nexus/rubygems_helper' java_import org.torquebox.mojo.rubygems.DependencyData # Dependency data based on the compact index format module Nexus class CompactDependencyData include DependencyData include RubygemsHelper attr_reader :name, :modified # contructor parsing dependency data # @param data [Array, IO, String] either the unmarshalled array or # the stream or filename to the marshalled data def initialize( data, name, modified ) data = read_binary(data) @name = name @modified = modified @versions = {} @dependencies = {} # Format is as follows: # First line: "---" # [version-platform] [space] [comma-delimited-deps] [pipe] [checksum] [comma] [min_ruby] [comma] [min_rubygems] [newline] # The version-platform is [version] [dash] [platform]. # The deps and mins are specified as [gemname] [colon] [comparator] [space] [version]. data.lines.filter_map do |line| line.match(/^(?\S+?)(?:-(?\S+))? (?.*)\|checksum:(?[a-f0-9]+)(?:,(?.*))?$/)&.named_captures end.sort do |match1, match2| Gem::Version.new(match1['version']) <=> Gem::Version.new(match2['version']) end.each do |match| platform = match['platform'] version = match['version'] if platform.nil? @versions[version] ||= match match['platform'] = "ruby" elsif platform.downcase =~ /(java|jruby)/ # java overwrites since it has higher prio @versions[version] = match end @dependencies[version] = match['deps'].split(',').map {|dep| dep.split(':')} end end # returns all the version # @param prereleases [boolean] whether or not to include prereleased # versions # @return [Array] an array of versions def versions(prereleases) if prereleases @versions.keys.select {|v| v =~ /[a-zA-Z]/} else @versions.keys.select {|v| !(v =~ /[a-zA-Z]/)} end end # retrieve the platform for a given version # @param version [String] the version to query # @return [String] the platform def platform(version) @versions[version]&.[]('platform') end def dependencies(version) @dependencies[version] end end end mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/dependency_data_impl.rb000066400000000000000000000047311446701454400314630ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/rubygems_helper' java_import org.torquebox.mojo.rubygems.DependencyData # parsed dependency data and restructure to retrieve the platform for # given version or give the list of all version. # # @author Christian Meier module Nexus class DependencyDataImpl include DependencyData include RubygemsHelper attr_reader :name, :modified # contructor parsing dependency data # @param data [Array, IO, String] either the unmarshalled array or # the stream or filename to the marshalled data def initialize( data, name, modified ) data = marshal_load( data ) unless data.is_a?( Array ) @name = name @modified = modified @versions = {} data.sort do |m,n| Gem::Version.new(m[:number]) <=> Gem::Version.new(n[:number]) end.select do |d| is_ruby = d[:platform].downcase =~ /ruby/ is_java = d[:platform].downcase =~ /(java|jruby)/ if is_ruby @versions[ d[:number] ] ||= d[:platform] end if is_java # java overwrites since it has higher prio @versions[ d[:number] ] = d[:platform] end end end # returns all the version # @param prereleases [boolean] whether or not to include prereleased # versions # @return [Array] an array of versions def versions( prereleases ) if prereleases @versions.keys.select { |v| v =~ /[a-zA-Z]/ } else @versions.keys.select { |v| ! ( v =~ /[a-zA-Z]/ ) } end end # retrieve the platform for a given version # @param version [String] the version to query # @return [String] the platform def platform( version ) @versions[ version ] end end end mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/dependency_helper_impl.rb000066400000000000000000000105371446701454400320320ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/rubygems_helper' java_import org.torquebox.mojo.rubygems.DependencyHelper # this class can collect dependency data (which are an array of hashes). # the collected data can be added as either marshaled stream of dependency # data or marshaled stream of rzipped gemspec files. # # the basic idea is either to merge those dependency data and then # marshal them again. or to have an array of dependecy data and # split or group with their gemname as criterium. # # @author Christian Meier module Nexus class DependencyHelperImpl include DependencyHelper include RubygemsHelper # create an object with no dependencies added def initialize @result = [] end # add dependencies # @param dep [IO, String] can be filename or an IO object def add( is ) @result += marshal_load( is ) end # add dependencies # @param dep [IO, String] can be filename or an IO object def add_compact( is, name, modified ) compact_info = CompactDependencyData.new(is, name, modified) compact_info.versions(false).each do |version| @result << dependency_data( compact_info.name, version, compact_info.platform(version), compact_info.dependencies(version)) end end # add dependency from given (rzipped) gemspec file # @param dep [IO, String] can be filename or an IO object def add_gemspec( is ) spec = runzip( is ) @result << dependency_data( spec.name, spec.version.to_s, spec.platform.to_s, deps_from( spec ) ) end # return the list of gemnames from the dependency added so far. # freezes the state, i.e. adding more dependencies or gemspecs will # raise errors. # @return [Array[String]] def gemnames map.keys end # get the marshaled array of dependencies as stream for the # given gemname. this method will freeze the state, i.e. adding # more dependencies or gemspecs will raise errors. # @param gemname [String] # @return [IO] array of dependencies as stream def input_stream_of( gemname ) marshal_dump( map[ gemname ] || [] ) end alias :get_input_stream_of :input_stream_of # get the marshaled array of all dependencies as stream with or # without duplicates # @param unique [boolean] # @return [IO] array of dependencies as stream def input_stream( unique ) r = if unique @result.uniq { |n| "#{n[:name]}-#{n[:number]}-#{n[:platform]}" } else @result end marshal_dump( r ) end alias :get_input_stream :input_stream # string representation with internal data # @return [String] def to_s @result.inspect end private def map @map ||= split end def split @result.freeze map = {} @result.each do |d| bucket = map[ d[:name] ] ||= [] bucket << d end map end def deps_from( spec ) spec.runtime_dependencies.collect do |d| # issue https://github.com/sonatype/nexus-ruby-support/issues/25 name = case d.name when Array d.name.first else d.name end [ name, d.requirement.to_s ] end end def dependency_data( gemname, number, platform, deps ) { :name => gemname, :number => number, :platform => platform, :dependencies => deps } end end end mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/gem_runner.rb000066400000000000000000000027741446701454400275010ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'rubygems/gem_runner' require 'rubygems/exceptions' require 'rubygems/spec_fetcher' require 'stringio' module Nexus class GemRunner < Gem::GemRunner def load_plugins Gem.load_plugins end def exec( *args ) out = StringIO.new err = StringIO.new Gem::DefaultUserInteraction.ui = Gem::StreamUI.new( STDIN, out, err ) run args out.string rescue Gem::SystemExitException => e begin raise err.string if e.exit_code != 0 rescue RuntimeError # happens when reaching user input end out.string ensure Gem::SpecFetcher.fetcher = nil end end end # this makes it easy for a scripting container to # create an instance of this class Nexus::GemRunner mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/gemspec_helper_impl.rb000066400000000000000000000123761446701454400313420ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/rubygems_helper' require 'maven/tools/pom' # we do not need openssl, so let rubygems find the dummy $LOAD_PATH.insert(0, File.expand_path(File.dirname(__FILE__))) require 'rubygems/package' java_import org.torquebox.mojo.rubygems.GemspecHelper # wrapper around a Gem::Specification object with some extra # helper methods and only delegate a few needed methods to # the underlying object. # # @author Christian Meier # workaround https://github.com/jruby/jruby/issues/2035 until # the next version of maven-tools gem is released if Encoding.default_external.to_s != 'UTF-8' warn "set default encoding to UTF-8 for current runtime" Encoding.default_external = 'utf-8' end module Nexus class GemspecHelperImpl include GemspecHelper include RubygemsHelper # getter for the wrapped Gem::Specification object attr_reader :gemspec GEM_TYPE = :gem GEMSPEC_TYPE = :gemspec RUBYGEMS_V2_INFO = :rubygems_v2_info # contructor for GemspecHelperImpl # @param io [IO, String] stream or filename # @param data_type [boolean] whether io belongs to gemspec.rz file # or gem file def initialize( io, data_type ) case data_type when GEM_TYPE @gemspec = load_spec( io ) when GEMSPEC_TYPE @gemspec = runzip( io ) when RUBYGEMS_V2_INFO @gemspec = rubygems_v2_info_gemspec( io ) end end # extract the gemspec from the given gem file # @param gem [IO,String] stream or filename # @return [GemspecHelperImpl] wrapper around the gemspec def self.from_gem( gem ) new( gem, GEM_TYPE ) end # extract the gemspec from the given gemspec.rz file # @param gem [IO,String] stream or filename # @return [GemspecHelperImpl] wrapper around the gemspec def self.from_gemspec_rz( gemspec_rz ) new( gemspec_rz, GEMSPEC_TYPE ) end def self.from_rubygems_v2_gem_info( rg_v2_info ) new(rg_v2_info, RUBYGEMS_V2_INFO) end # filename of the associated gem file # @return [String] filename def filename @gemspec.file_name end # name of the associated gem file # @return [String] name def name @gemspec.name end # generates the pom XML from the gemspec # @param snapshot [boolean] whether or not to use a snapshot version. # snapshot versions only works with prereleased # gem version # @return [String] pom XML def pom( snapshot ) proj = Maven::Tools::POM.new( @gemspec, snapshot ) proj.to_s end # the binary content for a gemspec.rz file from the # underlying Gem::Specification object. # @return [IO] stream to the content def rz_input_stream rzip( @gemspec ) end alias :get_rz_input_stream :rz_input_stream # string representation of Gem::Specification object # @return [String] def to_s @gemspec.inspect end private def load_spec( gemfile ) case gemfile when String Gem::Package.new( gemfile ).spec else io = StringIO.new( read_binary( gemfile ) ) # this part if basically copied from rubygems/package.rb Gem::Package::TarReader.new( io ) do |reader| reader.each do |entry| case entry.full_name when 'metadata' then return Gem::Specification.from_yaml entry.read when 'metadata.gz' then args = [entry] args << { :external_encoding => Encoding::UTF_8 } if Object.const_defined?(:Encoding) && Zlib::GzipReader.method(:wrap).arity != 1 Zlib::GzipReader.wrap(*args) do |gzio| return Gem::Specification.from_yaml gzio.read end end end end raise "failed to load spec from #{gemfile}" end end def rubygems_v2_info_gemspec( io ) info = json_load(io) Gem::Specification.new(info["name"], info["version"]) do |spec| spec.summary = info["summary"] spec.homepage = info["homepage_uri"] spec.description = info["description"] spec.licenses = info["licenses"] spec.authors = info["authors"].split(', ') # v2 API does not appear to provide emails # spec.emails = info["emails"] spec.metadata["source_code_uri"] = info["source_code_uri"] info["dependencies"]["runtime"].each do |dep| spec.add_dependency(dep["name"], *dep["requirements"].split(", ")) end end end end end mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/merge_specs_helper_impl.rb000066400000000000000000000037641446701454400322140ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/rubygems_helper' java_import org.torquebox.mojo.rubygems.MergeSpecsHelper # this class can collect specs-index data (which are an array of arrays). # there are no duplicates in the merged data and the output can be # set to have only latest version of each 'gem' inside the array. # # @author Christian Meier module Nexus class MergeSpecsHelperImpl include MergeSpecsHelper include RubygemsHelper # contructor to setup internal empty array def initialize @result = [] end # add a specs index to object # @para source [IO, String] stream or filename of specs def add( source ) @result += load_specs( source ) end # returns a marshaled stream on the data either for all gems or # for the latest gems # @param latest [boolean] whether only the data of the lastest or all # @return [IO] marshaled merge specs data as stream def input_stream( latest ) if latest dump_specs( regenerate_latest( @result ) ) else dump_specs( @result ) end ensure @result.freeze end alias :get_input_stream :input_stream # string representation with internal data # @return [String] def to_s @result.inspect end end end mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/openssl.rb000066400000000000000000000000711446701454400270070ustar00rootroot00000000000000# dummy so needed bits of rubygems loads without openssl mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/rubygems_helper.rb000066400000000000000000000113661446701454400305310ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'zlib' require 'json' java_import java.io.ByteArrayInputStream # this module just has a bunch of helper method dealing # with reading binary data from a file or stream. marshalling # and unmarshalling binary data, dito. rzip and runzip them. # # @author Christian Meier module Nexus module RubygemsHelper # read binary data either from a file or a stream # @param io [IO, String] either a stream or a filename # @return [String] packed as character data def read_binary( io ) case io when String Gem.read_binary( io ) else result = [] while ( ( b = io.read ) != -1 ) do result << b end result.pack 'C*' end end # ruby-unzip a stream or file and unmarshal it to an object. # @param io [IO, String] stream or filename # @return [Object] unmarshalled object def runzip( io ) Marshal.load( Zlib::Inflate.inflate( read_binary( io ) ) ) end # marshal a given object and turn it into a ruby-zip stream. # @param obj [Object] any ruby object # @return [IO] stream with rzipped marshalled object def rzip( obj ) ByteArrayInputStream.new( Gem.deflate( Marshal.dump( obj ) ).to_java_bytes ) end # unmarshal object from stream or file # @param io [IO, String] stream or filename # @return [Object] unmarshalled object def marshal_load( io ) Marshal.load( read_binary( io ) ) end # marshal given object and turn it to a stream # @param obj [Object] any ruby object # @return [IO] stream of the marshalled object def marshal_dump( obj) ByteArrayInputStream.new( Marshal.dump( obj ).to_java_bytes ) end # render the given array of gem information # using the compact index format # @param obj [Array] an array of gem info as Hash instances # @return [IO-like] stream of the dumped object def compact_dump(obj) compact = "---\n" + obj.map {|gem| version = gem[:number] platform = gem[:platform] if platform.nil? || platform == "ruby" platform = "" end deps = gem[:dependencies].map {|name_req| name_req.join(':')}.join(',') checksum = "0" "#{version}#{platform} #{deps}|checksum:#{checksum}" }.join("\n") end # load json object from stream or file # @param io [IO, String] stream or filename # @return [Object] json result in Ruby object def json_load( io ) JSON.load( read_binary( io ) ) end def load_specs( io ) marshal_load( io ) end def dump_specs( specs ) specs.uniq! specs.sort! marshal_dump( compact_specs( specs ) ) end def compact_specs( specs ) names = {} versions = {} platforms = {} specs.map do |( name, version, platform )| names[ name ] = name unless names.include? name versions[ version ] = version unless versions.include? version platforms[ platform ] = platform unless platforms.include? platform [ names[ name ], versions[ version ], platforms[ platform ] ] end end def do_add_spec( spec, source, latest = false ) specs = load_specs( source ) new_entry = [ spec.name, spec.version, spec.platform.to_s ] unless specs.member?( new_entry ) if latest new_specs = regenerate_latest( specs + [ new_entry ] ) dump_specs( new_specs ) if new_specs != specs else specs << new_entry dump_specs( specs ) end end end def regenerate_latest( specs ) specs.sort! specs.uniq! map = {} specs.each do |s| list = map[ s[ 0 ] ] ||= [] list << s end result = [] map.each do |name, list| list.sort! list.uniq! lastest_versions = {} list.each do |i| version = i[1] platform = i[2] lastest_versions[ platform ] = i end result += lastest_versions.collect { |k, v| v } end result end end end mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/rubygems_v2_gem_info_impl.rb000066400000000000000000000011201446701454400324500ustar00rootroot00000000000000require 'nexus/rubygems_helper' java_import org.torquebox.mojo.rubygems.RubygemsV2GemInfo # parsed dependency data and restructure to retrieve the platform for # given version or give the list of all version. # # @author Christian Meier module Nexus class RubygemsV2GemInfoImpl include RubygemsV2GemInfo include RubygemsHelper attr_reader :name, :version, :modified def initialize(data, name, version, modified) @name, @version, @modified = name, version, modified @data = json_load(data) end def platform @data["platform"] end end end mavengem-mavengem-2.0.1/rubygems-tools/src/main/resources/nexus/specs_helper_impl.rb000066400000000000000000000113761446701454400310330ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/rubygems_helper' java_import org.torquebox.mojo.rubygems.SpecsHelper # this class can collect dependency data (which are an array of hashes). # the collected data can be added as either marshaled stream of dependency # data or marshaled stream of rzipped gemspec files. # # the basic idea is either to merge those dependency data and then # marshal them again. or to have an array of dependecy data and # split or group with their gemname as criterium. # # @author Christian Meier module Nexus class SpecsHelperImpl include SpecsHelper include RubygemsHelper # dump an empty string # @return [IO] stream to data def create_empty_specs dump_specs( [] ) end # collect all version/platform of given specs index # for the given name. the string elements are {version}-{platform} # @param gemname [String] # @param source [IO, String] filename or an IO object of the specs index # @return [Array[String]] the version-platform data def list_all_versions( name, source ) specs = load_specs( source ) specs.select do |s| s[0].to_s == name end.collect do |s| "#{s[1]}-#{s[2]}" end end # add the given spec to specs index. action depends on # given type to match the release and prerelease version # with specs index type. it returns nil of nothing changed # on the given index. # @param spec [Gem::Specification] to be added # @param source [IO, String] filename or an IO object of the specs index # @param type [String, Symbol] the type of specs index :release, :prerelease, :latest # @return [IO, NilClass] eiher the stream to changed specs index or nil def add_spec( spec, source, type ) case type.to_s.downcase.to_sym when :latest do_add_spec( spec, source, true ) unless spec.version.prerelease? when :release do_add_spec( spec, source ) unless spec.version.prerelease? when :prerelease do_add_spec( spec, source ) if spec.version.prerelease? end end # delete the given spec from the specs index. action depends on # given type to match the release and prerelease version # with specs index type. it returns nil of nothing changed # on the given index. # # it assumes that the method is called with all three specs index # types and the last call has to be with "latest" type. # the method will keep some state which is needed for the call with # "latest". # # @param spec [Gem::Specification] to be deleted # @param source [IO, String] filename or an IO object of the specs index # @param type [String, Symbol] the type of specs index :release, :prerelease, :latest # @return [IO, NilClass] eiher the stream to changed specs index or nil def delete_spec( spec, source, type ) if @releases == false raise 'already run method with type == :latest once' end specs = load_specs( source ) old_entry = [ spec.name, spec.version, spec.platform.to_s ] if specs.member? old_entry specs.delete old_entry case type.to_s.downcase.to_sym when :latest if @releases # assume @releases is up to date specs = regenerate_latest( @releases ) @releases = false else raise 'did not run method with type == :release' end when :release @releases = specs end dump_specs( specs ) end end # string representation with internal data # @return [String] def to_s self.inspect end private def do_add_spec( spec, source, latest = false ) specs = load_specs( source ) new_entry = [ spec.name, spec.version, spec.platform.to_s ] unless specs.member?( new_entry ) if latest new_specs = regenerate_latest( specs + [ new_entry ] ) dump_specs( new_specs ) if new_specs != specs else specs << new_entry dump_specs( specs ) end end end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/000077500000000000000000000000001446701454400216605ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/000077500000000000000000000000001446701454400240345ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/000077500000000000000000000000001446701454400246055ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/000077500000000000000000000000001446701454400251345ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/000077500000000000000000000000001446701454400267715ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/jbundler/000077500000000000000000000000001446701454400305765ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/jbundler/versions/000077500000000000000000000000001446701454400324465ustar00rootroot000000000000000.8.0.pre.json000066400000000000000000000027521446701454400345200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/jbundler/versions{"name":"jbundler","downloads":347628,"version":"0.8.0.pre","version_created_at":"2015-04-13T13:46:25.567Z","version_downloads":3114,"platform":"ruby","authors":"Christian Meier","info":"managing jar dependencies with or without bundler. adding bundler like handling of version ranges for jar dependencies.\n","licenses":["MIT"],"metadata":{},"yanked":false,"sha":"db0a74e4cf8a432191d81c7179a832292f0f469dff37983d2aa01ab53813d354","project_uri":"https://rubygems.org/gems/jbundler","gem_uri":"https://rubygems.org/gems/jbundler-0.8.0.pre.gem","homepage_uri":"https://github.com/mkristian/jbundler","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/jbundler/0.8.0.pre","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[{"name":"rake","requirements":"~\u003e 10.0"}],"runtime":[{"name":"bundler","requirements":"~\u003e 1.7"},{"name":"jar-dependencies","requirements":"~\u003e 0.1.11"},{"name":"maven-tools","requirements":"~\u003e 1.0.8"},{"name":"ruby-maven","requirements":"\u003c 3.1.2, \u003e= 3.1.1.0.6"}]},"built_at":"2015-04-13T00:00:00.000Z","created_at":"2015-04-13T13:46:25.567Z","description":"managing jar dependencies with or without bundler. adding bundler like handling of version ranges for jar dependencies.\n","downloads_count":3114,"number":"0.8.0.pre","summary":"managing jar dependencies","rubygems_version":"\u003e 1.3.1","ruby_version":"\u003e= 0","prerelease":true,"requirements":[]}mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/psych/000077500000000000000000000000001446701454400301175ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/psych/versions/000077500000000000000000000000001446701454400317675ustar00rootroot000000000000005.1.0.pre1.json000066400000000000000000000031751446701454400341200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/psych/versions{"name":"psych","downloads":38331095,"version":"5.1.0.pre1","version_created_at":"2023-01-26T16:14:29.241Z","version_downloads":184,"platform":"ruby","authors":"Aaron Patterson, SHIBATA Hiroshi, Charles Oliver Nutter","info":"Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]\nfor its YAML parsing and emitting capabilities. In addition to wrapping libyaml,\nPsych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format.\n","licenses":["MIT"],"metadata":{"msys2_mingw_dependencies":"libyaml"},"yanked":false,"sha":"b7b470045ad149ea48272b532d414b8ca01fcf60407e500bae7f7dd0b293180c","project_uri":"https://rubygems.org/gems/psych","gem_uri":"https://rubygems.org/gems/psych-5.1.0.pre1.gem","homepage_uri":"https://github.com/ruby/psych","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/psych/5.1.0.pre1","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[],"runtime":[{"name":"stringio","requirements":"\u003e= 0"}]},"built_at":"2023-01-26T00:00:00.000Z","created_at":"2023-01-26T16:14:29.241Z","description":"Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]\nfor its YAML parsing and emitting capabilities. In addition to wrapping libyaml,\nPsych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format.\n","downloads_count":184,"number":"5.1.0.pre1","summary":"Psych is a YAML parser and emitter","rubygems_version":"\u003e= 0","ruby_version":"\u003e= 2.4.0","prerelease":true,"requirements":[]}mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/rails/000077500000000000000000000000001446701454400301035ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/rails/versions/000077500000000000000000000000001446701454400317535ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/rails/versions/7.0.1.json000066400000000000000000000046711446701454400333210ustar00rootroot00000000000000{"name":"rails","downloads":451769890,"version":"7.0.1","version_created_at":"2022-01-06T21:55:27.202Z","version_downloads":557856,"platform":"ruby","authors":"David Heinemeier Hansson","info":"Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.","licenses":["MIT"],"metadata":{"changelog_uri":"https://github.com/rails/rails/releases/tag/v7.0.1","bug_tracker_uri":"https://github.com/rails/rails/issues","source_code_uri":"https://github.com/rails/rails/tree/v7.0.1","mailing_list_uri":"https://discuss.rubyonrails.org/c/rubyonrails-talk","documentation_uri":"https://api.rubyonrails.org/v7.0.1/","rubygems_mfa_required":"true"},"yanked":false,"sha":"3f03f0a134807e99ae587206d25d199ed4f6f715818ef1c1ac618c845487d8f9","project_uri":"https://rubygems.org/gems/rails","gem_uri":"https://rubygems.org/gems/rails-7.0.1.gem","homepage_uri":"https://rubyonrails.org","wiki_uri":null,"documentation_uri":"https://api.rubyonrails.org/v7.0.1/","mailing_list_uri":"https://discuss.rubyonrails.org/c/rubyonrails-talk","source_code_uri":"https://github.com/rails/rails/tree/v7.0.1","bug_tracker_uri":"https://github.com/rails/rails/issues","changelog_uri":"https://github.com/rails/rails/releases/tag/v7.0.1","funding_uri":null,"dependencies":{"development":[],"runtime":[{"name":"actioncable","requirements":"= 7.0.1"},{"name":"actionmailbox","requirements":"= 7.0.1"},{"name":"actionmailer","requirements":"= 7.0.1"},{"name":"actionpack","requirements":"= 7.0.1"},{"name":"actiontext","requirements":"= 7.0.1"},{"name":"actionview","requirements":"= 7.0.1"},{"name":"activejob","requirements":"= 7.0.1"},{"name":"activemodel","requirements":"= 7.0.1"},{"name":"activerecord","requirements":"= 7.0.1"},{"name":"activestorage","requirements":"= 7.0.1"},{"name":"activesupport","requirements":"= 7.0.1"},{"name":"bundler","requirements":"\u003e= 1.15.0"},{"name":"railties","requirements":"= 7.0.1"}]},"built_at":"2022-01-06T00:00:00.000Z","created_at":"2022-01-06T21:55:27.202Z","description":"Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.","downloads_count":557856,"number":"7.0.1","summary":"Full-stack web application framework.","rubygems_version":"\u003e= 1.8.11","ruby_version":"\u003e= 2.7.0","prerelease":false,"requirements":[]}mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/zip/000077500000000000000000000000001446701454400275735ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/zip/versions/000077500000000000000000000000001446701454400314435ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/api/v2/rubygems/zip/versions/2.0.2.json000066400000000000000000000023431446701454400327770ustar00rootroot00000000000000{"name":"zip","downloads":3206554,"version":"2.0.2","version_created_at":"2010-05-26T12:27:58.237Z","version_downloads":3206553,"platform":"ruby","authors":"Postmodern, Thomas Sondergaard, Sam Lown","info":"zip is a Ruby library for reading and writing Zip files. Unlike the official rubyzip, zip is compatible with Ruby 1.9.1.","licenses":null,"metadata":{},"yanked":false,"sha":"a129a9c8977c9a1f3600593ead89d085ad171e8d3fa91e647d80b04b294ec0a5","project_uri":"https://rubygems.org/gems/zip","gem_uri":"https://rubygems.org/gems/zip-2.0.2.gem","homepage_uri":"http://github.com/postmodern/rubyzip2","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/zip/2.0.2","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[],"runtime":[]},"built_at":"2010-05-25T22:00:00.000Z","created_at":"2010-05-26T12:27:58.237Z","description":"zip is a Ruby library for reading and writing Zip files. Unlike the official rubyzip, zip is compatible with Ruby 1.9.1.","downloads_count":3206553,"number":"2.0.2","summary":"zip is a Ruby library for reading and writing Zip files","rubygems_version":"\u003e= 0","ruby_version":null,"prerelease":false,"requirements":null}mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/000077500000000000000000000000001446701454400247675ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/h/000077500000000000000000000000001446701454400252165ustar00rootroot00000000000000hufflepuf-0.1.0-universal-java-1.5.gem000066400000000000000000000100001446701454400334640ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/hmetadata.gz0000444000000000000000000000071700000000000013404 0ustar00wheelwheel00000000000000 0YSSM0 W쩥3.@=pH@rw&)I;+ihώZUs:twdHN`GGG^=PLbԛQӈi=>`(bҪ!rʌ>S,QJP{Q|[3 ߾+Yf]A孛ӂDޒ7Li d"Oy) LpVH0Oc@~b7Ü QjEy,mGjKdx|a|FL s фFvGsB-q[G)KҰl'Bh2߮@G>˘$*y޽m9\7K(2\ _, c1,)@]T$t lEܬb[>SDLZ*Qdata.tar.gz0000444000000000000000000000004300000000000013312 0ustar00wheelwheel00000000000000 0YSb``T.checksums.yaml.gz0000444000000000000000000000041600000000000014546 0ustar00wheelwheel00000000000000 0YSe;R0 D"cY>9~aRqzDJ(vr~}aSFʡbkZpJIE{2zr|RQیKd3wn|Z2z&r.9)g&5qF y2,4hUI;hjSxV<'M%Vcpk"+3-gs<;*bGul\‡ĥ_^قf !}!i) jqF͸]mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/h/hufflepuf-0.1.0.gem000066400000000000000000000100001446701454400303150ustar00rootroot00000000000000metadata.gz0000444000000000000000000000070400000000000013400 0ustar00wheelwheel00000000000000/YSSo0 0=S$hN\*7q[&)IބqchWJMώkUU*.}'rZp3<:0.}?Ѽ'$vϛKAM}S7j0!: %FV܎SfbqH?r[ ܚY~,fA욛}Foݜ|QfaJ[%ykqM`s-wR@eZ $nO%A(֊TpwՖ,x126FvGs뷚C-qZG)mkҰlgJh2m@G>`$*y޾m9\7K(2\+_,.qW*E"== ,=u.X-(Mlgh2wvۯ"3=U=>J6gIWsۛuՑמ/ev>Ew $Yp;W}&cMh+ HkZր&^[n+&'cChufflepuf-0.2.0-universal-java-1.5.gem000066400000000000000000000330001446701454400334720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/hmetadata.gz0000444000000000000000000000072700000000000013405 0ustar00wheelwheel00000000000000$5YSSMo0W 4Z.@8q)&$mliBw&~)כ(Md_F2ܲ+4S4Nz^jRgPUnJ6Da>&y\W/K9eY c1,!@]ȾT΋f{zXzg]DtQ }dxܿК$H2mdata.tar.gz0000444000000000000000000002364200000000000013324 0ustar00wheelwheel00000000000000$5YSC.mܱmwwlݱmmwl{ޱmF.h7Mo$9ccidjnncjhe3 33'';.+B naffy#J01a\;pjt^Rۮ;Qx4~E&t*\Zo@&ft]jPi5I;^Ƕjzo/J?c (l:gqm W|;zAQmUor㘢dth )Cjrx|5ke:p]V zcvT-"ZĮ۵͹3dk~|S^بEe>`eKizڔ'u ~3[0^X-Xz500v|UzУSlP~xZXq}<`Q]wk kGTAL8|εg)ߎGYT̽3^xriW93+GZٻnb0iH RH\*-'H? /c.R{S&ޞIOi7Å9 MZrf1ȀҢ=J(E 3zm(+9uTiFz5;QeZ4`U+zT(gE/IOOVm5,P^Ӡg-ޭ9mvchXd&밴ŗ–\͸ηEM(Ik0̋MGuEb9t8 KhTsWҕ [8*UkehLDYV>385sm0x}K`% S!Sy8f7vREP Q"D^{7}u W"0\^BI?$.`IUJ)H҇A*ƖMYmC@?jzZ 3ۄ@:w摧3iOAJ*0*BHsR6Ć o_Be;IoփeAfx\gBcLV$nR] giyP2ޥx,PhG_o]LIX|adOQNi2?tSM wMkSFXdD$:(U5׎mNc䯬;$R-Y[ q:fE>'mK9g99C*CJۙ8=5T]ݰG̉w<"SNmJ?7R;'w˩>\̫WF3 [wjGKf8\jSTdhˮGPU3{=ȁHm#$"+.zlxпjeϫKlLhxx¶Kx{>1r_H=VyO7 fɦ )#Al[ZA7S+9w]O e E-7!Xo6qIaeJpf(]3o66[#0ǝP; Vk(Hֺ3,$ʖUx|A!Z۶b+oN9-H* qT۸,xjn|:+W>G!4Ӡ_ kǚ=H~)z b^xV}vmGe.Ϳ~ǥ`V3%:1ϖrmѝĊIǂDm܋!?;Y<ة3VLX /r3IU镇-, FfJ-2{LclyCkwA~׮}iS޽cPN%ŴDA#Nh|sEō%(VkNzQ S2݄&7Z/"mUEy[ϦKqոMi&t+ȲRA_c6Tz|)~Вo%۴|.$S%q%Q s@B~,Ya"ħ(d1r]MV2ʐd-n;PTΛ}_0 _obLR dnژX2i gS≣g2%YxEX>n$~#S/p5O}_x[bm%q`;AI]ӺH%LȄp#Qh`N:')#C]&Wg&f]i>i]dj.[urO$68׽hϭG߷~LsוL_ ]Ȏ'B9 h@iߗ9)Fnܠw<7 P8>l=M3F9 F"tCE1uaIMĺJ,9~Dj^8eyauP\|U:d NxMٌTΫZw{֭ 麠FC 䦂NMp73иp{5vQg-vk^?&|.@@)Mb\ }"Ƶ/FJ!~=sꕪ4G!HֈNB/#+,gRN/׺L?A6?jkr4Žz@^J0(^F7l=Gf"e?G4 KMpg &+ulQ"Ͻ d;d){8/دAtu̳L\o\k(PNu˱+|ۣ5%ZM1۸ѡskδ{?pʝk&܉B0.zwmܺE3d6ӲDvPS5A|-S]k_^IHbA\`NND߈W}y}2Wsn!X[ LF9vw*J#%= ǻaq7Faq! fJ2(2aہbI}`v3a_.F,=KkzJm`A|;>N&6"x!!q}rSwl[ r1}Tb@Ã.yxZn1˛qڙoOP^%헿M捃y%{@He{iWGQ9 DÝHrbH. #b,-940.c] N܉~{uHᵣ7ͤs=WC~Q!R>5 Zg-`#蛸[aB))b)A0 "kcY Ub-h]dw1nBބW: L|ƨ9/C<{`d;6Cbh^`δD bYHOpTs4/XO2&I--ycHN[r<8ޏ_u"bp۝Eyjy stx@ X/<$ab 1RȔ|~U0SHEżß%>5p5GJJ=Zya/|3φ"?mǙO91Sq= ¿V6K@5}RqA w9tKqKrb ][Z :,VbN" &4 ͚j꾣 =X3Ց4 r75onH`|hj\&‰#qk^ ?yndBvk3jZjs[Bwq}r]Dp9W·;|}Y8 pffU7 1F 1j!+>yda Z?"[t\->.}TJ=v4SiЬ$Ύ_ %pih=cF=mYiuR y|1!h:?0 LPfL*Pl'ߪmy: e)kYfgOiE.XPT.i|ƙAA'$b|(7Vu\d . Uf|7B02T$W9u}3 2gw4%z1~4-s,n3-N&١Խ,Ol'Hso ,C,W< 4n_a2{31V,Rˆ(WR%^[D%4%i)~rQѷ6#mk^=杗;PZ Ipe7+ky~u* AO%=U [ZNlwNg\.:GPjl& x#CM~[tgאE\^x/K <&O,ĊNi oXͽ5>6|})lU@a,9ݗ=@gшc_swISRvɳ BgL$Pƫa9n'PK~qM(5o|]O1^ rZc ^zh:3lXcd@$<-ei7oWp /܍yrUWLӁ>VgPd8[RT!R?_MSh Vf Jj V>=\^x0sQ"(C8cz}J{rEܫͲc={)}^pd(v֖=*hf@n+ (-h!|63VV:xpy (Y]b$Ýq@ c#':+K O zyj튆>+ Q8nVFtOC)xˋݹ~gwzh֧LyqVlʡH{ӱ⬈Mf&tW?vJ;7qG,DWLdSCʀw[h iBFکd/BFVN}~PFGv+<`Ʈ^ʥeJ}Zl)՟gUa<=+?fh];.rXs%f'ϳF'; ()lt}_A_}VnȭD*poIŌQ;`\m@}sզ"f|?/0, &"i0@>EywgCkm@vJs;IoU]'kl0$=-);w7(pMUSJr&Q)9}l;qF]ePtR@0 A#^;fьܣ;eF"A3-&XI<=XhL%'˦6C=^8삃X ,cv޼rX 2Ճd6)2I9KͳjHN /T=/(qE*,.S?}J/`)Iᨔ c0m 2z512tk0w'1oeƤ%WmIM(;~0t96fōRTtI9ՙTgЬVUB^}`o Wh,+l籝ZNˋ c"_+iroA>i+R,=sCԖSئ{}iyێǍp[JN w8D7R}2bUX*3 gLAjq` c[d 0ʄ^]k‡Z lj·QB'"'q:K7QV5„.v$ N mv^ݑFߊ܅ύh? QF.5,− 5 '+.Jn50y'wÏ4GЅTk\Cϭ s>dss˯YP}ڼB7B#s|FƬ\.%f= ~^FϿPz -z|Y_WDMVuk^w_y YNr;vϓNfStw|t@U l֜l"l-G )};k93SY(dNiJTZwik?,pwX re6;dQSNr{),H;|U]c]l oI}ЪCO ]H)Qw^fWF@LǢ>;ﭾui?WE>6nF\ @-${j)>0K_?\-;#3 Clf jͤi'\/.|mo'95z0ĸ k"A}?$'+o6cx_:Tѩk[fiҲ6oB Oٌfw0h^hP1ҿ׳Ki\lLzN6@2O XTGV(Uka+!u8v Tl&lsV}R#woNqL£/Pnpmdz8_ʆS@dt|{KqL7d Fᛃh-+3%!ڮ_)gue-d.p c-[aMuF Ǻ~-t wg~mWLa@deQjC_JU)&Ǘi`";jR<wiM6 -#d\-p=J%M` U%zXfT*vpߥ3:zݥs>KPxkmV/HՒ0V cԪ[ S{+w2@%9:ܝ1$Rɠlܳ18:1~t"\]^ F KrC fV2P%TvݐM^퉡eMS?ѯ-x}7>a!%6*1HGY׃O,754̰;*fKSF 䎥 )c\78%ʠO/& Lh2? Ib꼪wDU*A3YB ,()5=( ,i%QK, Fdc1OOjy}&FIOPtq6_5X`hp,ŀ_Omavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/h/hufflepuf-0.2.0-x86-mswin32-60.gem000066400000000000000000000100001446701454400324640ustar00rootroot00000000000000metadata.gz0000444000000000000000000000072000000000000013376 0ustar00wheelwheel0000000000000010YSSo0 0=& 4'.CB&)I{mߏM]I+5?;EQ85CsO&< f^ytvqjOI_V8rSVj0!: ׅK;o6up}In)3zDLqvH?&rj[ \Y,fAlmQmJ/oY|UFaJk%yKM`s-wҜ4@iZtISDQz-9anÕ>nvԔLp131bm0uGyG#v3 <eQïj )Sa,It1 7Gy/n:YF'IPs݅lKy 35—;a,%KW["Dg&X*EN3E4vgRdg=;data.tar.gz0000444000000000000000000000004300000000000013312 0ustar00wheelwheel0000000000000010YSb``T.checksums.yaml.gz0000444000000000000000000000041400000000000014544 0ustar00wheelwheel0000000000000010YSeucA }Fkyo8kѣW.qnyF3~,vp܌,򎖬A<.NuB#\x=i_e˯`I4Ö岂PZtD)\м[i.]}ӡ!pO!.c 8^[zyҹO b5Nت)ڊyplor.i,V2C83a~-Vۢmavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/m/000077500000000000000000000000001446701454400252235ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/m/my-0.1.0-java.gem000066400000000000000000000100001446701454400277020ustar00rootroot00000000000000metadata.gz0000444000000000000000000000065012423435261013441 0ustar00wheelwheel00000000000000:NTSˎ0߯0n':d; ƹM\3jNvh8Q:goԞ|{$GJ}h;phI {'?_+ VFG|B)>&0L`&H?'u&*3h:̌};Qj~e}+tu䴡(hB}hE?H-ЉW2u\0˪eO6q`%hX2rį|ʍq)86RZ}]Hkby vMFJq>-@K.smRBTloxY6նMӅucժբiuS3#.fCVއ'IuP{$*/2~tPŵDv?*lJ6+{yt*tZ}dU u3:҂[2øp?"ePoAQӍ<_#`bbbD echecksums.yaml.gz0000444000000000000000000000041412423435261014605 0ustar00wheelwheel00000000000000:NTe+V@ E}W 3|g éb Mvr~}BD MGJgThg/l<ɉK `(*p5O߫ ]2u(Z@rjpmY-ȌDIJ2i`SG-MJygDšDCׇs,c9;mԱ] nk0ڛ&}fd#/˔餱V:޼摕) I67Lbw:ɟmavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/p/000077500000000000000000000000001446701454400252265ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/p/psych-5.1.0.pre1-java.gem000066400000000000000000002110001446701454400312640ustar00rootroot00000000000000metadata.gz0000444000000000000000000000216614364522741013453 0ustar00wheelwheel00000000000000cWo6_/8mؐ I$(tPFRN<ߑȖ⷟/~9;㟅Ѷ|Hi=W )˅*I9}ˊ ;+I4;lxT%B`6kdpʍyfG&;iHDG?t6~Kcg Bs&zn=%%Eܺ]jZD8eh #ڿ7.,%oX =c-|G"%=)5[\c$i~kLŃH.Eu}'pv[N@.pј_(e)}ihiq kҿM9s|č+Ș5+SHt{"w`',Z9eV|">(ۭ̔BvIqs~Q2gG%wT/Kyߗ`&k3RဦGAS*JHymB ZYI>tAﴌ Q@>V)yhLBisqjݕq$ umSd>?=;9/Fxp;tvRy&IܗWQ6Mlݿ.86>E]q̨JkK#*t uo:>}w 3) jl]c5:R۵g>l`ܴvP΄j֟B_ԡ`tm0;A'%* \s{ pڟ3׿O\sx647 (˩VhཟnWP.Z}$BH&e1;w̶uM@)9wӎ$62 data.tar.gz0000444000000000000000000017737314364522741013406 0ustar00wheelwheel00000000000000c}m{6hVQ|+*($%NWD[rI--kԒwfdq=9 `03V`;g~>ϟ>n7ןtg?=g߱3R&i-zl_Df'&|]7ÃG%}z߮ oJ̲MvGƐ?{iz9sןg\/g03vw7Nu,[?%ͧߝ{#U&A0󛍆7?>7zR ¸/;ؼ4mw65c*qaGtUjjOL?+eԀ 4ggۯX7|Ya51|O>%UdlvrؕLy<>ht[ߴ]:Hw^7^NͫFv[k^TKƩci#:ClnpЇ5hesܮVs j%d'(wX,#O!Bnu1&J`}0|P;j|c?qIW5PfT?@쯍 Mr#daf5nfʦ7Ta̓}6+h &P1M_:i[ڟ~w֧o7>H7WA?;GR cLA#갣'{@cF *(N[xpX0a $0=y B6;1]f)&P\g$f܎)N45Y&ʺ]UAreH42fƩeZlPW1WI ˈ*k]vWqdkεYL]?`8Nsư-=#ЉIOtۚR7?c̴c^" 5gJ^n4qrm׋Tdaϧ3 UBP?8pHW1[H6J80lP}b0h/{/v0'llo2jls;Pw뜱kwή`-r+%4/ym>mA 7sL`S'qQnhp;ӹe 6f3b} [@މy9u}S.Lڄ9T1zKeI^G}ly \EۈaQ7CL` ٌ3}c@%[V+THqLppBVggnU>+`dB:vȟ[O0I;o$ĚpEf|e9 @WVB2p}m"gI _U^$f7 .Ԑa`e@(Po1o8>rSKV7_e@lU&DPC:n34$taYzOƓ'DV>8..,&=e}%J';G&X7(%ESSkjuxQiW!ʤ9 nDP׻akKiL 9V% ]B=Y脊PTtd45$2d @ uD\U(J +,gkNspIi-hUN ]shc Cn`O::m4A aIzv=TmWPJ;!'UkNa6n:oau5@0ThI?u9*c<,\cmJH&`([** u'>t]d8Uah+ąȴ}35`rK@CYӿvFumkbF)#B$+:MX~zar Y\bmw)zf9! <0N)Js^6"h SiD~E=˵olO?_b{Ԙ^Ĝ,#/oY9zǪh`:vQюM n{d[3؄1 kA~MS㚼ܝ!@ 槑9 ~ڳmS1XCqp+0BdF@fqu;N0m̮ܰ_nsO'gAhȎc$_@ 5 C2mEbxO3NbcfJtZq;7Mv&ecym}.ME] XgC Mq`/'_t,[6@8P˥i_?KNMsPxꋮvׇ'阞a K &mIr\`"隸y\KHbF@ʮ&hFp0a 3@XSSLМ3ڧM z*B\d{(7izfY zy@ ٸbp!Gꗛ1tvlR 4AP^9=#0~Ekr#?KE-g4qއ8NH_Aak"2Jh/q[Hml=vw*wF[pu %- 6I},ܮ,g&Q4n]Mmד^n[>Mû> 饑;^bxo.9O3d?QM"ҋ[P/(RZ?w޶m(4'fAgj,ZBED=!.V(JT\cCϪ~zc8mYZg{9AG+ r-97NV|[^FzxGA\^1t̫:Z@[\ 𵘵G{SRay.u>"F],SUP ЮJ8x0P: Mh@*=3{ F.?.lAlXMC/+""{14MfQ7vUNʪԪ 12YNP%A!tvso]9 1+j=_1(m }Z)SΪnX^># BRq̧ė#NRXT@T"Ónwx<[ )ܯf2ּS*O%>}(mE9~bZer;dGVo(g8ʔ"baྚVSok  _gN*M-gbY,ЩRٰ"cd{ iz ʶ٦Z.$fuD)gN+TWs!71o,9:jhm$1Ͻ ԒwwU:ݗ!D_f?*&ZuD>4PiPS:JEo%S91P(%7F<HP_aZ6L ZJ?ْ~O拽$LgvyN3}\We_,^cVѶX4-)VuAc&dُ2pW!Dt6ElCMSu=h.6>sXX"/s1l`恖ycx) >DND 7_PLcmᅀ_klXZ_ qu*,YKzҶ2G?@Я͞n|20-aN<IG$N%FH@[9@@hg@>fV>[ehr)3ı;cqCZʟ+E^*xoYTCPw*<ީ^ڲ.ɦ&@׹RqY/39/b3Dq0ćksԦ~CQǕ:>UUMS[#AUjx5h(VJx׳Mҭ20b#l7!(#豖4f :#wv9wa5Di4ؠk3MPqvFI|8'tMI[d*zh_ަSjLL[Z]_e;_ӅMi)r!) @&z ^繟Xˁ_ɍKm4+DqV;N%Ci n-]Sڙg]b47ErGRxIg0ܔa>\i Aq܉ADsGG)]H3{Ox~ ^ rc.(%C٘i6Ͱv3 <+AG:٢^V0~0~kzw34U Z=D/3aZD1ɪM҂-rU ^hQ͊udҽ)j{*fLWB5;\3#ѹPusBD"W#VH̘jji 繬y j5J,ˎ1t2/o7RNF(=R`nsXCRP1)]=Io, V7$|P#)ŏNo zwt,%ݬw:4yU?;@w4@a S S~O`+nuU_s!@tHh %_N#d= fJ5FI}&Q]awrp.̼zE%ٱ ^2~R<>X`k(x6R0CJ$'oaw(˲G |n;zZc Q[GhFAҞ7y"ؖ/U FB̝QsU4:$N!6Ю#p|A$q^;S0Z+(<D)_rut7(Ll$ѽdv_ ZՙRQreUL̟GV!Gi8 vF+>P# 舔⌀2ხa(ǞI%]lt) Tjޯ*'˗-qRP*yٚt$=[[j1ʵeI;NGKnԌ';5)e۾iCn+AXyu(܍Tl |2m@~* Bqz(g7AR8B 6un/вkt"JYqdvZʏvtZ88e\H 쀕~blkf+tX o,T|y '^cz0JhܜV`hI~/SdxK[ͲG&U*Z`LMWJmѻ% 9oo1JMgToNEsDzwi0*[4v(t K=]+CS%g@3]3kڇ34-3+Qr^3(,M'=0l9>9ZJ} C=?ɋj6S,ҽ03\"Sf䶍9Az0޵3(60DuOx3s SF y r*&5mL\~t ')`}j4 UeWyULG?`@a)RMIϔ0;ҁ:kxNvl5E+E|&&r B/Y]9I7Fb"Ը 9n wbgQ;yUԑmY,H;~okyXciٮa14PIIJ xɆ4[8w8q Ee, ]A;4mV(oxAzT@5i jyE p&ĻfcP,AdY"A* b=/k7DFggpc )CEg3qmn8+~%yBOhGs͙8%@D"<'~,|F-lLͩk䷣ j*/K).~/:;zeHUt=~飤zsQayn6 Wgzqfm톘³(4+mdBӍL8i"!W;j&@(wӓBl`K+;degP]'-?7m*rjR85Fa 9@HȂIP/wjȣ %&[Q& 'P\ˬQ&Pfh fqa!+^VL$}@IxvX` a{d  F=:v F6tj˥ *P54aZ͒p.cs-lPM(6ʢaOKg-To]1oa;H~Nt-)ŀ`:Z{-l=PO*q$?ɝNT4-"Ll0Fډb)/J/,)רl.,tvtg3/b^"x6 i^Qs:U7itbd`6⇿2ppA"'+Cls<(4'{5gk61ФOrB% Tk3RIGe0(K Rfi|9kȋv 6c>K5so+Tlg*<Ԑ:0xCU*$1{\)60c)2Vƻ&> NЮ!oaWkfINnK'Dm'𮳚Ța&9f]w@ż^7c2( IKPdڳ؝)BY(\yDR6R2kCU0X=GX$ܹ[2zpJ(I"W$'6r9@&T3b ;.7 qjbQ$Džtvy *< Cr}oj!  絇_xR,!\Jzqd"x49lI0/kd䎊"op/ I ̤UgY3?N⑹;s6qNn˸+G`O%S&(qt%"kA[ ¦d5jicf;8sjsYTRe8zܚuv5F641 y:Ӛ Ȑr>3sd딋'u$%}M-{9ކ"y!t~GN 0N3q0o5Ӄ \GQmQJSaG1RC1Yd:XߦidSO~>pئ)Ql ڽAc܄E6OYL|_.&,EE ',0%W_B?#3'pfyɀf4OoG2_F!'BZJ Ft{6 |咸(/VriSRbFXo0t(?"@H9V}3Ӽa%mYlAt0wJt&_tK'x bj6eT.jl)̪trea7r{byN-oU$ \=Xb\tWlOe/xZY'.\xY!=Dph-bYKxj=VZŠVEJ⎉ TSu\$uiϿZ67Rϫϫϫϫϫϫ_1lɅ3R~i%RY9\WDȽ$#^P{y33ruJށVuP\/sn¬by#轝wVĬ53*\ϹaMPV@wD "5#!Ebش`ZHq& 3 *uƓ ;'x#sAԟy%./H'mLbSǧ/C&T!m߇"QX4,$:d:d7g xj@bdf%Q ~pj5IRGş0ƓQ%aJ\EHnQoA&r7I>O?Iy>^˖w&<[2Hy'Wݛ!a #S*_F1Ɣ! I\$G+ηpcĘQ[qӧOViVu{01?3.M6?,|XzW\n:C>MJZV^L*=>ckSrL6Wmt}~E$kGG4;/Aќ5KJt-B Q46:[VbJ+@Sa탦}4@_j}ǛBL;iF<ԻʏطlS7? gdWR[<9 j???il`@#paբD}O0Mꩦٮs^ݪQ*F2DS? xl ޴޶!L~kw[g0Yg׆>!7 # {pͶG-\Y$˵dغ5X SD+/̩ow7T]d}AὴMi&JW8Oo|5?6~vtnM1R@ևJk:b?YOM0&f֒W}``kkV pi}=|7G~5"o4Ԝ*@K9зf|5fUuGQ(R#m./cxhW{W8$KXěḎ5U0G܄'F0E!zzN)D{=$\aQ[-} ?_LyXEfP3W:kLd|[}:{r:?;搧VTrkc"WPX.W. P׸;琰VdM*3V_oC3V"s=;jrka6j<ܨ ʼFb"M b3!XBMI*`y e R?=u])hjN)#'V?NzkVp4 T* ב"9eU #0 3HC?k$vEtQ{oo^5hwp&\ ,Hߠan36e@4śpW=`A˰PܲM#y|7{Zh _Jl#IhԹD\؀Ul 3aAG-ϖ_F{@-,TȄR!0|L#K9]G4BBy2!1Q9"6XU"y֥Ahԕż +/˰ٻJ"'q5 QSAi 5)"TL)*JT(`R*m@Bg}@0HV*}v$ ڧL7 ?4zƒ4UNGcA%*^Me#a'!X,* ' MWqmF 3H;hNz yzSA@U6= y?8k,`A9']7+* 8 `16JX=m x;I9m0cSD!bMME> }V5r`" CB7Hd9$D6JK#dV@;AXౠ/4'x/dOp_1`Hhη1aE)ljgokfeO?e$nefjCI 9pA9 !-&q &xTpnx˸S5B ʠyAI'pA@D`Ӟ`ZTW#|)$B$2#5F^b?AQLIN8A@tBsCnBb'=HLd~s͠beT?J*0T:)d}- []/De'&泟-&gėަ6؆$6 :H0M^n.ON:^e|WCBK2/C"r>.L"q9(V(w\E8 xtjjFjPAQF3^@.\Fy_yh Mdx ^γra!cf24˸ *BM6Ԥ8#C}0wEf빞n` s=cb:| r)S C)Lee=e%pG[ y+!9)FA",A&d!<[.v$O2%܅;- g20|т6TQ`{]qC(ve0q,A o!W0W5<}OH @,$ rrAnf` jh<J '"~fN ڱxYP{.@޽,->%H!@bNmDR#J%ˣ{I1 ÛJ ўrnO5@CL=] #ÿ)XXPUpo J1}6R \i|i^$~:NpHܘ  םaP\2ѓyО(cCP)RtT(jAX7&Fm78olbu ?X?o#K3{{#[8pw>v}YD_?C,*chj 5bs+Mf8dD g?=1W=Ŧ zBaӊCfUw 98"9M3%7@HеVvֆFT+M ܠp%t*V8q=nc*Fx{RnV/0 c7~42EInM8'ab Y115GA`Lؽ3S$8 3ovtCac 2|CoQqhCR_EqZ4p LpQC _v'GU0Uc OG t!8ݱ>`+2CQl=,,<(>qdyf$Vb ' L@{ (P/)}W^FPIK#Kk[gW#[[k[HV hVtK?H aS uE_ =E$j}%X^yPz.*T)X X(| wp'R>נH˟ i|#tO`Z PD ]}C٦*d?xtޡ`hPdBK}q`!xsrk|xE-p-e ?# &`o,aa$ ĺDW+Rvŧ `i Y0kY;`X [ ٯ@Y9@1\~%KC[Gk6رpӷrgf(fh+ p B䓽!t&y^ tfzܯB uyЈD5!Dԃ4ORK)w/ R *T^(ǘHDT w! Z=61?nL ${ްr9p4O:)c G1u@::7H* 6G Ϣ'` vmt  ~aЙ |:q.}!Gl;: "4\3Senȗ!JVfC1]̳ |`%W%vvGlOH Zp `:) oc+T31`D@U\ 08#!wĘ ,41217:T9~D"K$P*pI`فd[}6#Lְ!6X^Yw/6@;h@X%bw (A̦>3桯lcʡ;5M(^` X(̼bUH -F/ eQ1)sh@+C<jc+7@!%N Jr 2<* ~FFg&0j6DP/$XJ<!#e# } }f1#čO t"V=qX^`Iv $Fl+. 4: cзmpOdɚXs-̈́HaU5' NަC);CIɜH+9#2SrJg v`ЁZ oHI#$ocmw, (m@2t{AL~Nld@l/dFR<T]u{Ar\Mw. gJT8P+YtBv ]=Z2xDXx.YOf qjH=NaCW"O=ideؗDV~nfo]#>@ #*T Euچ3s3#>>@8m43зз틨DEQb'7(+##ɕ)Er(Ay BQ-c h52X+i+J@G2uiX|ZAĈʂQ9u020mJ6`bB7W,`K(""0IfTe"P D{-wJ^懁CcoccGS֏](UX4i#>a#}d 6QCekI @Ь ߇ *b^G 2({e&C51ciyHODG((dVq\0'y+W4YW,dvcBf̰v#_r]3=P0N]DAN v& %6y1+3ap2&^W >8L u%d4-dHGeU.NNS:00+>fB Xm. g,n_F}I(lX(gmG~d}@9,Y? [f-&poKXUd")}+g r+試I6|m e% o>V=6Hg'f'^p ̻`z#A`+B  kdxA f%y&9 q#Ǻ`!.q */~X*`;)XvX\&D<6li9 ˁVHjR)ْ McD, ;b!O ф "6M7MI{o%%e?߿E}[;6}$zkP{Mя(PUV#CG`zP=` mD˽Cڐ0bZpR88h+rP+98>Tό%hLp>Q*^^ZKQa c0 % 4 B?a/TnY:Bg1X~o #ᣵtZ?|\N0D9)@y(Q ZpM"#L_ $8".<֮PR;W̟c~A4<'4ow` mViXGl* :|n `]&w_q_&GݍكȘwLZ.|@ ~}˿NWgc>d ^^Apė did/ofe{cР!@e^hpXcK}+3c#;{Kv eoɱUzZ2Ha%̲"P>&"^yS_-HL{!kFAmAA]xǿ[@0.P>QDsOVVxqi%'qphg#I%1n\!k{zt/$Mge;ux󪧳߯ۈGFX88KIBQkuFN3k\Hv[].|-3j1/6 *~EMExW߭0} ZNbݴ^F8!(y-IiS+R0Eh ,ylԗzg޻,,)qp۹]iUָCO]*w=+w$Z7W=wV~pHʪcoFTPlI1\ e-^GѶݷD/>uyqCDC}7Cc^J_Wbrynr#ĘbrY(ҦcS%ԯ^:U^t4RKx Wǜ^lP(MB8`0 u ﱪvX1O]^6IqCqOwK=Y[6+feiES;Փ5UGb3VcL;a4R޸oW=z+ꞤᯚYbdSO'߀1>;|H'mqBi-S}+)o#H ӻ ֽ]t`ͳyWܮ]\qa\^c56ܩ ztë 5U["ͱxNܢH>(baIeUvGij9iRNŜ26Ǖi~Ik%β J&MTl3CnzkWNMZ2OgC1~Վ­rbRfs}gdc懪zM~+5L˗SyWvRhA9' WpWMY&$u:vl+h!S'f/gr Jde$}ط=!|+ؑu"[$?K߇qtbC?E:XrܣᾓMtSf[nK,~-Q'3lA.BҦuh=,;a͇gR&}na~jf}VN>qv?$YfYgIQ_4{/YY-\]WA97zޚgKlcLaק1"a>-U*SiyaCYm- p叚pI .HsfdKSBDl2|}C "ٹBW m=cզZ3=>zy1[[/,I2Yv 9y鍫/)jP!{ny{a~[xFӖ}1-twY-C)׿\2^q>6C:swgw}⒯\k#F[#r5:~+(/ۣΩBށij6iYX7; 9Uwmoڵ1oV/=#cb~z!iƢJM>{rZo^m負b1qJm;/o%OT[[{]O+z|Ph8qmfVtVxS-=O 4In|}d bgmR#?6j|gs;S ,+p`9@W!E:)[»:$Cfޝ"pIx>H wXy|{5BCttqol|TpaI>1'}Ip~b=Y]p ~{HnZsQEo)nym9`\(msc9|?{#r/Ҽk?GѾ4TWx+Si G?9^!L 7_l9$=NѲsJN\JFcSٍMϝS}jBcWᦨvO{ ytmRĽn^:gtT g;Ȼ9Qv螤%5 0 NYg&KjEޮ;&Vw+4]DK{'+hΘlVmBz!)k.]O8Eʓ$Wm2"mε+i׼ޜzaϖ.׸4v55nZmeM_[$WwW۩Zy%y:Lq^煂 Zu5e$W *zWerj}cDI^?zS$5AvЅ5y3\K W+[eW6r@oǎ%<;,z>oT~Gc)רǝc n{v W>2}:OV6[.WZ\YvgrTNQa.BeB+L_tnm ƌޖtt<+kOuW-tz!3jebjٖ E}z=Mr%ysCH/ /P6šRR$ɽjoz[_a('=,SYz蔤qn] nHHzsVsuzG ɼ)mTږ[շڸhssMjgr^4MRXҰN{M7G>(oyD;֋ݍN>~p˖{/6XoZȣX^vҶ)=[u>(N=6ňDؐ1yYI m-+=i i*/֝,4K.ɬvCg]Pm:3<<]$wyQR>yM5ga2'V[?]Q^^\mG 78cQbݼչ{OXS3˱ ^8]~gVĺ%zϊ}}Y1R2dQwΖP5c}J(}uuZ_>]pImE=J=*2oQs~Z͐޵En~Iy^aZ{ eK?+޾#o/C['WU8G3JpHþ^]}ef%9ZB?N0KReyM;ۼ58{ו\Ӱ=\F6DswʼnfVe|4o}i4gE3g3^sag-_?߮>b'=1Yz窬z8-%!;diR[zvlT/m19*V܊uu⤻iް`Wge}e$c֠;8Nн*d4Zuw;On9ʐ럥zr.bT93ZT7Z~?ة2B6&ly&~a4áMOkwQzz׌ Ԋkv^6j<]V3{˰8fmܝ݃3 w -8An5E $]Y\OwUR;12zx_[vnʱS*I6g\=U ݦ?x;] T݇.4gz3i3L ֦.@?>RWEо Q`3k-SUQ rWKԫ)D[je >:-bb B̫=Zs'ށ#߮Y5C,μbB4śkcɪ,>'A Q8V!!;mdU`vUuS@րji?6tӮ3lЕ AÁ=jHڷy{Ձ^69lJ!x7Q$v>yf '=)n 2b8ѷ9/ã!,Yh@9F7 DU*ACo ~X4LָlJLۄBT; F2SMR vn}-J1x &AojVrwM-8`e!\2`׆q9J^g$+:i 2?6׫oh ,bx*zW$y~;[S. ؏Rqj Zeq <UuGF' P9 s__yhܫcb ) 8!q((`N1=xU-J9$/ɖJK!طU5xqC@L(p:V{[Qo."Kwp's%%8t3X랷](Ё" = (r%PO>Z.dEC3v׿Ȇh٭GrYl 0%oŵ}pk2 KߺPY|`ڨ,e? /dYp)$kgq=)V"+bRgF PUmR>\G/V0C?٣̝Tm[@_5|`}K M?ȡ&Iea0QIw6ʙpaH#EKl>с`jHL=Y;z/PwzKqu˳ JR10}xmxoxpT^щU"Etr?3F&lb@5POy[{  ĎnwN56~M+Pj/4$ό_OGBYsGFso$YǍii82IJhZ>Us#ثG-U}Od:N4gXI q.݃4 ѾXl+ƽ~XX~R%y䚾2|0&ea_Z{SG{Ð|3$@<WVmx}i>]yz;Emq }t^ƈnr9?h iکCc8<tKVޑ ptSk=Q(_P.I|Wd$9%"Z6\ J'% +k}M[xh~ XP=+4K-[LB4vTE@bJwVMS`G ̣O\$B6uFk$ ƪ Fޓj־˟%C 62*Y;I>4F|k^2ZnMG RZ꽻 =9#_~C,M̯DQF'9U oҶB'F``C#+u o_q78TGLU6>F^aR!ežhlay?Un(!Z> {0aϼ%SƑ ȭSt J:CE7څtLfZ~HQEPXnQ:HqOTf&^γf>GkS0%tƓuPubMLX#):RcPV*[a6;GQF-҉4@F.ң(mH#Vmϑ{N]tK]A?kL~pƣ:GQ&DA ⺰eq>&{f*Iߝ3N&1vρx [F%^nи+XGs"_RDg+OK<@wƆDl@ ,!jW]>6wzdr3*Is8s/NhK gD‚a6%3}RO dȔdiok&~ wV }A\s=m "HgPd Fhy ɼªd4`9}ՁR(W3/Qmp3C3W3/]}];>] L} x|q~"^&DV'Jv }GBI JV{1c!EEzk y=@hW0!OeΆ0΂%^bi  "}-:tD=uwc1߇-O_u -mǙ}KA gFg#][zå1/&~tj݊%{e>j $-f751;4PE:TJFNOsC+Q3y|ւiq`!w]Z`-= Q^۾uQkVJ%g>pNⱯ DϴaL+4qJ1ZA9-|'~?n)t v1 f/dV+|R^}L6a$(.{epA=&ՃhGqѢ`{B`%j*bkHQY OktN@&$IVSɎ1e78uʨu{\jүw",G&<{Ϣbё%q9gFWǽ9cnV/ҩBJ$]%Y3F{:7? I:啸"qxj$RELIpE')xW x >]>㫌pZpa6ZL7GV>Vd!rkD'GWm~ mUx4_fA|!~8Z  F% C>a.Կv1]>8gJQ7T*2Nav3kb,{Aԃ>R@GM{Vg%\|ǭqy2>ιq[p.aBJǾ;҈@'ooe`cʌP,qby)ќxG,D$s-x:h."tn_JRSSB"WwyzC z&XҺ6/ %L#ΐOt EeaV6)lXSTh V4Jӳ)ʽ46MZ$Q&VGe7n 4}64hn4Z\QtV6ȕg\qP+8jhe6ڀ4Ql0MʠhloU^Ks~j65 "D9r}3,S~AF5kNC.pB)9$Tr8nUxw[Sܳ/= l>WoLf>A& HwxQ˒*PY b"ot;۷^-h36x+a[WSɝAK(5bXk$J jۃ CWEyPetj'͛.yzMtw >V6U$5@1aeEhΩB`PBHe@phJ:;6Nfz•i Kէm#I<|IuPn҆[0=wقA kӁ][N.ɘN6-B[DRCo/!IUm$I}J߇hE0ј=*RPBJBAז" 'JO NC@Xn_ Q xРe[!_7g_Oi:MzhЭЧqP]PA~hJ2(hWPspzsu8,R%Ǟfe<*'Fcã4Vy!˲NcF*#!OOFדU3_r= [>\X1jt4U]?`huN y"4 l Fw"≮Ҙ pdY+{'q@O0BW7AϪ׃'O,kE[ˉLaĈ )I'a4i)̆3꠱#*xbΆ~mҋ+?R /"eSd֥&җi,/*D>BsثS.F1hlSu&"5KgHcbXҘc%Mp)+QN"*J4ܣ4tx_ac&}N=1ƿv!z#nh\#v潇Lrn:I"/kELx+ :"P&hG CȀвHlS{T$ϓ:shDAn^3tr0!9l#ǎ#1`i}:%xmJoIEF+b܆ml8 SCg87;jQ+ ah!`ۻl|@tGGCvA\R|I@rMdF4Žd_ /+7s䦩C< QbҝjRגH]sb,r8*cN̖ܨl+AEQwA_cZsgHYm4DB8o5U} zǩ xw't^\QO/PmX_Q]Ѡcf"8ݸώ5% uS=r ظ<3%!9Ř!cooq}"TLjU0 ն!wB (pkb?WTLnĺ= 6z}Fsű3 C,4^̳8W~G3Ev'ק3e?rMpv1K9uߗu[I_lK!=-WUѕNȆ1[FVms6 Cv_s9 ԐvBB_aڪ<\g* hM$v_;Q`ty_llʝ{T_v Z\ +BJ}#PYw%x=EHơBc%ZL Q6,_xF>J7'4JQkgsr{*ek-YPaD5O\bb8%4YaC+~0Ƕ\U0MV|Ǧ,`v"] s[,&6v":[;%IJ!8EfЖэ*4iJu`U?o.uRΰfSy U$EqMx  ﳣ@;7} 5jgI*'d JJ慁ͳ 7m Iڂ0 ĞK V1JO|$iL*l [6.[J?|,ӯ͕_Bn&j.LkJưboUNg)4z.*tPZuS;U$%X{RSBnt1l=9*c3Jf0Tt\!źcz*kI^O Q+Ʌ:;b?3>5S>-?Č\m'6_`%sfPvN :]?LhadLifPya;1oagG][E+I(ey=]lrͫ n%*~tZCD&T!VIXx'3>ijdD%꘭k %oZ^ZK9ij] c·E]ebz~+QIZNN[deI[&AwO{ĝ랔UZT3I*<_eˡ"!?g淕.o)7C?c^weʞ KgzQT:.p?}p #2)j#Y{!+6݆b)U{)F9> ϫ 5c_1`wÝ$^}^d#91V&M{{QW_5w@9Jnu Mew_ͭ񏶰 !enpN.s*OHr?}Sw}7oFb>N2pniBWvϩAZݹW)2ަcS髛v&EaYG*2Ŗn '70?췢/w;&Ω"Xׄ|,K:jVFf>3fX%)}caM|0; PS9f-&էfoH}gznJ͹7ۭTcUm K=0>~!8Ad3;M+~Z&,!J8+׺)WF;{GBRoQn}8V!S 1J>c9gq|Tl O Ã)S1=GJu@' -(sCɂk2\ -pFp.M ilu%LY(u d^P<Oe/Y /~ޣOO@ ئ{RY0rG޻~ HDZ@zcE(9SkÛ`4 ƣ?'m48SX0"<G鐂̆31.ִ0}<-y\QQt|QM<"F :qm'Nfq*žik,|*8kۘ@sSV^Ү)W>\ط`s, "Ջq.ON)*We>Yݲ0ԓ ԢCۿmCj!-rza  UT#=ZDjmѮJp];\D\MM#gJDjKxj[BcLjK_7/oORY75X&IU^ @w9FfR迍{G>㿣%BfKvN5i^&)|.HA; BL ¦&n{]whC3W -R,^Ciu-/T 2êLp] y8jҘ6!> VT3`dfGy~a+VqM5@~ЮMv:f\xHC|Յ[a;Wᢂ gj,;ޠ\^U2W&m>OˉsT, =Fj^n;v5ږVJۯƩJ6'X I=ũ֋HIs}Ne#Od9 y-d'bե0}+ju>þ:B9 $nCMPXSΛDFwS,~/ȜpvZ2a Q:U9L$sj=sQmdiuW[!'XiB xwqi?#i>k4g lnaEE2_pIܴljDS~ߦwXð-? ōy2r1Jc gjmT"kLׯR>RQk WH,r~:iwZQ ^'RLۗ%.r-e塆 Q+' '"rKoߵmȞi"(x,&4U[Nտ0!ؑbVY}尺[>O^GNK雛NkA+y/F㹅rhٶ#+\sPtU2e3f,3mޅXTMy _FÛw/1 "3dԲ ]e46C!} #|Zci`l.G&NvÇ*TJ ۜd1_riL8݄j*ř8;/?L"p жС-RVfRݻlw%h0Fee[̚L]chCl~Ծ,rXF`@%;#U`)ePˈz-sBG+½^ʍXCSCV~(S(%VhK_EC0+x0$>kwH{Eі`YWmt8saB%oH: ϫ [tR82~K3 lybqGa4^c;Vfⴗ;'}谲Fe^embs/Us:1l >q*֕M08;9ø3p/mi^*dj['}eHHi#k8ylpQ*&mbvU+\+5 6R]DzqkY8o֫sVG"E[xomֹ@S:B N)C~23ԅv7x]bqJ5SPz(9y}{PIue|7n"n}"+ Jms%xxЙaO(.{x_uT=icͧ 2zߓ$WS͉p5yzv{[z9ݻ.#j7!LΊCdʅ%: \uBr*_#St$sÊy/g.k*onqT_bGВvڱm_bGO;KNJӎoڧ~/KD*zUy^b*1PمZt{ScL% vg MVLMn?wRE7ji[r:xvcm%`T3@y ̙3*zTL`\02[/o8oa+%rG a yh2Vzk) )Kռ~FXKf<{Y+44Cm),"e>.OԽy2O2d cm}%̻n!CeLEn;UB40Ld&N׊l(2e'C&"rnEgm(gT]@<ٱk/x;i2&x.>QgCB|ia 8Wava3mPacoFh;z`h~w]#(W499 PZ|B%﹨#)[Y{ MSqԧnc bJ"5OɑZ >,VHը՜04C vrMUy,lMq]^na]EgQc/+_ыD3B5E"h$-d ^D  |Yd;}#xBӀaT瀼=:{az^B dEEy%s+` ke҆]&!Z& 34 |aS(/5VF4;'^'Rƨt2K86R!o0I8@nMTߪ֎j t)*yNqYa˽Fqvd嘞RVKsU`0N`c5ÝBlf7͂6ls]{ԩlj(-}(NHP[ Nm)K`'-bO~aPpyY83d?yJ#s@+Cr )A(? H8G~B\,d*Rt`up >y_x/#!6txhR7ȷۆ(^My D0#C8/b_b~7ecDTه ݆ۗ'O7@:]л1^h8%N[w/lyv`m2:&+ cI(CsnA*}ұfݢKM|TMY"OcTwnme H(,~YrHtCLœfz K*5$5p .mܖN1t;GW䜩(əIM;JK:2k2ddԳt 1 m ->Uj_0 #CL#hL*)::؅DlJqD_[!^!l ?8'~uM~I~.F~NqO)/:0xַ1/-s[pSx\n -`P%aJ_##E 0~LVs=]銽0A\5yqy 3޴FȜ +NU;ȏ|yhv?lgV_M6|~k$e(@Zь6 )$qbQvi{wJ ҋCN)ksSy9eUU%`\"+$\u>s9hG{8W "ʤNKDfXPipsa&R^R^ DjUpSEBorz* u7d ؚ/ B5| | &P"5 &Ou$.5X.d4! °'y\LyY o-'d>档S εX:s!RtIJ$  j~/biꔙ}!K >(t6|ͳM5թOHEkg4dMXL%ՓϦMGjK0*k&+㌑"|4pxjlN>E|ey4S*FLs)꣚=~;zGH! rUl'SvL{41EzMvs5LDS=l0k]8^I 5^Gm>9׹BW qyubw3(8瞕ږT>vtuKB0ڲ([%^]Vtar"\zmA{9tv;}#L}$#6Yl<E7hLN&37#$) $qmal^= siCR;D,8Dݠ*ϡX}5pz>@q c1rpb2&R{4e3iOu+B[|DyuE ͭX89U AX32oBLD%)xHD)Ng2dEx^2=r o\ =ow1gSS'Lb隉,5}+>I"*_#yC%w].nȽPnׯ֚s q "? CpPa ?gP{S_U C U~qAVwzpfDL\v@[GYYy fLa7q޳uۜS8..T2mІF R[=YMNTx.'9{[t޴Gz-r=d{}#avCmt?$eŭ<7?`vŏ(+F]5b[sm9;޺c=~:F̀^'~8?[~yLZ` ,{7,}*i?+CkxE5l_Z-==SE-!"of8vn+?މ-\%/hkl3RE6鶭)YF)%wOn/<y' y@7lozCYkBβgD - x`v[a":Upǵ!_؋^dP3*h.>[/66J;5jsJBZ&yST]csIk1}eO\o Y6 O ~ 0H8]Tr-hAv=.40z]ohk'h:MsRL8vi'.5s䭎fu0xQ G!\IJKf @хpǎBw-!nEwC!+^k{gtB;ƨ {1@rjAh\8^&+EU>Ç,^9m2hY(_0oӽHu3_.#CW 蚷0|(tCk46.=t)Їy,t7߬牄--lEmyt%1#  cpIW,zX2~Lғ&}`f(4|WnBv_rU?/jBp~?/]DAO;R!$_PKW)?}Nji~/._9H?%︿oҩww'l_2xFنȿbS?\Ta`047Br77q7=.A?Y? 5g0z\\\ì cm I%iY%ID4KPD0gtcv:9:9?T.3gǂq*;cɿ4 ;WЯzyրzi~{hE.n Fcw房W?q\i_A`埵"!g +6?VwR?+uG{ӿ /wO|?˥,74~/GHAAH(#֮ awvcLЯῤ@`M%N72 %`payf3 зvOp)=˃&/pCXO˶ f@'58X\cO7G˯r  C` [GOW,x@;G|sӟ nڌ{\jYfi#`{3O?$%%ʀe5OQ5Yi 6٣4v}yl}g" gbbHN?f5ww%x}el@(>\1cvs|,򛼁?`( vt;uooGwI]EyLЇA S/f98zX.@K0̻ @_OG_sa=̑OւgP, :@`Dgru{bSBd+F:{2HOCE5=v?-s//ףWfbq@.Wk{k;=@We>sȞ`om/=_c_g=ܟq`ab19W,sQ_BaƯn{5\s۟vxv_ h?a9 `vC.t`jO o~F*+wZL9_㏟DŽ@G X_GG } Cn1~#x_f=Ƿil6p0`5p3? |ӯ㶰ף6~DK0velA.Kbl W~ dH7ka4E_ũ?8Wz +Ldpp̬ 6,t t{_?zO'GB` O;a3_+y3&{z n4nD\ISx)Wܧ}&}h>wJ!rtn$˕" jz8Kڸ0j]# _ÈptHw`@|4';j nNfBUf!.^V =J]y7buRkx U1o~@j%?Iwj'ͤ6VWc^RU(T6c>P( 2(k3'bђfP9v5u͵A7 e2J8;nФ5V_8L^MdzSwRcw谠5v9!^] M/V?_z#Yc>;IVN`Qٴ"*Qo,0@'L һ@ϹG!YpL'bJ.CytO*ݲ<"r\Ⱥ%qY2?E3ܑӕPSZQ/X.)qlJp_{Xð~Y,$N#3m0_j ~3Z.\zX4e9r@n?|gw%{=7Z VCj@Cpt9+_h$q'=Sv|B<w/,EH7@(*HOp~Ds R aCVA! gI"&Xd5{\7Xns~'eȰxL]WK9? ; \ʿ2Q9Li 'J=烁(7[!X'D>xtZ=Q'iL5pEaoc/CWlq+KWkCo֚;&L຺kqF%>VGq2F)9D.jbF!_R]lfr!fcjD%>6isS"Ւ%KbL#+jQդuXM$3&R_g1%alԏOynOk5=}$ajr KE9opfc 4udO׌hp c!.XGC~:D=Ǔ55.w[5JlO‘| ~Nu gGmZg1?Yy]>]TŴ_j>P1 +_ϪfriBc3Υ"v^4:䏈,N ]GNwO>o8)h)OI9$yn/ϓ-z w.X >|x!t'| +_8׼3@Cr9LC7|M'R Yᯕ_ _onk&g iv;I󊑻H?"Iq>>wK2n.oH jJӣNmYd.qW?-IqII7fƯ7p8樂i iBXmVXY ʣqڿOV-%ߔ.yX+{~(qI/w@,̶K/xw0*SbEWa^ 20>M.AMp6mr%4\&qX7DU cc6Z?ۯM{ϑdLTiN)/BӋ[ʳLxM״|m:[&=)i&؂&`!jۄdQ]6 ] ԕV1==mjB˪7iX}A$za6 7\RJb0@*@ɠ KGiE 6/FL}My"epT[}Ϧ#|Xcxt >`'c42D-u3tBEvH3o ,F`peaa7Mk3NYr:5/]oR1=nLMEn[x5h|>y~ p˗, tӘZTQI ;NQڽ3b v ^C!.07g1Z X!vV- K@ЁnVEq92\a79')o&WܯYsfTOcAs1/pz%R!]ؒ5& &u- @W)*NlqǠvfKڔY͞> RC^\!=WԼ/ns ov[ o|;op% 3|7=?~d>FNFf ww`!#2>d.Xk XCMf>2. XhSr<ɁpSocӺ)e.it*NRFRX (`|2,|[bmk#/q7+-HިqF#ipLJܜ׆'+܁`B`_2i7>ڂGWk\|p{b8G9Z߿'`+ MGݪa#_v!?ҋ3򷺪M~5#v38Lc &7uH%B77jFKձWMiӑ/4hvi>( q\@:CHPH^)zpbߠԇ,"^H z^ws`ApC]:u탫%O.t0\aJ%#4Kd")ֱd^O=F>%V.!90Co1~8xÂ^Ĝ @V%Eg2=| lCgH#3j|`Ek =>|3/1Z,w$/ UxiWxδOsadzQ"Era.i20>I687ꛜ69a Cݷ_`ݮ-x_ DVOA3qź~_y9 r;3G >On.h XFo tAm‹p< (Cky'k?\ <^eNU}KɜqbI31yQhМ}@[&<@cn̏L˲N bw)7c`#4J9P(0+|j2C,l`&c%@j467v -#Kp 0Oښٚ1|s$˸ zxm@)tpO|6xGp|tU oL$2@@kA"w$Prx^Jg(5j2;|&8\\H7~ "y4Y{5#6ݓ1HX-}^iáv'Ɂ+&a1d@ÚA#`m_⵱]6Q5 !"e|fJ(knK̬܈yέ0Y[0i!auaCEfMWu2ޒA&#cKʨ!ȗ$BacD W4SJiDT$ ,$MhH,Z&ϩ zl?1O  DH=c؞5-n٨jPR5|g:O4<uޤ?0M 4nv{[qa/Z-Bj| "18\imHkSgkd7>^aaQ)\md+[)1R9!rCF6:mf%6O t\7? fÞp?Z^x۲I >GNht&%D> xxo=LlY͢y}S/6|_}G&Guh8yR|ݧ('oHaW%_쿀1ɢ8r[ҰĕОy* SW, BaKƯ8?r2x؋. K;*xBlQV_#VDɤ ʵG$ԙ]L38fY2\moXK^Q}0M1x_bzvOMg ?_mwf<._fqO̤@YLwJ lAkMnۊjn!e~TA&z>gv ?ͨqF& qPv+Ğd3,zEL3/q]7:O6sQ%83._Hr ųs: ExY7h֡0niNKǂGyTQkz%?~<7:ZRfqAyK,h|(SR "ycGʗ[>f#nri'R9Xo<ȝE?wΝc7ջQsfg5lY$W1^:n7_i7[;k+ 3ƴeSPbtJ?ۯIu.N-C>Y_|%GJ)kq$S 4rA+%JFpEB:~O4șPYQ'#&t5ׯA֋DNa+8#J~3n6J2LFt ϴ#:7)^܁4c8DJ4'NE'd2Gq05A- 'tBfYh0Ȱ$` ڈ)R (O!6 *YhID!Ř $'d>RÜsOY%eiyip7x&l mT0b~.r OFwUEs~L7¿=%Iimetx z'4~@Йɀ[Zٔz;;%I[LzQ e555 mE ԊIO,Xzw[MuZx(Z(}ihY`J~#?NѷdĔ1\rz/|ƾEpf>zNG{{8gÊT1w x=4 v!\Vſ";fO}WեE$ŔX;-z G_XOjFlbmގc~NBS9QbE##1 l-e-]ciED`-?nnfTO< ؞ 9ʡ΀6:sWmb%L(ۨ:ꙎI6%Yb6)A̅!"3bEmHf~ZV){ EshSMVq6Z5ӼafDoY{~cӼl?y:y~} 20!t5$t+S݁su(N;H[#Fm=R^=y' %x4hx+ה zzIۿ}pØmlVr\w;!_I4b㵦PJlBBG ?32^d>;YڔDn*3ĊasUgXVd}PqCW|1zhWP$gQOg\aBł\|`Acy'Y͸VL:wXǶ:DZm"z5q&,ҟK2ù/ϛQN̙͌]ȭ.wm6{?Y+(si.rPڣxTP)0+*󖱙Tox|]Ūh$O- 1 vf@L)kt@{$-w]996.lN+Cyt[˅YV4Tsna_3G9ؗ  (}YkȰMU9x2zMЛm We,xsZhý@Mp@Rm%3QΌR iNaZV0LA#Dhc'Έ)Ф> JA×9 %4] q.c{8}ϕ\ag\6Kpb c†g+f?3n P|zCw>ٿUdK.M'3Ü{^uUx'K6fI*\KMQMuv(;`SrHJJy2>Y\.y&*QToݥb'ګZXaBGo:[c9kԁ\HEp.ù[pml.B?\MS%o톣ӏƔgr5g*1E,~ z!aU~h1Tf?R}al d1gЯo6:^ŃUi/ɱD=ԍ^*[_y{d^ j?vTaXs58AT9|:P7@ԕ_($oIUmyQ r4 Nb?z$MS̟De4*$R}**٪Csܗ^Ӆң:='T74zD <{/ghXc/4 ԺDG(R4] 6][TBIv3=Z[K@Zv9Gs Q)a{̊ziz͌40TgQ\_)r)8e,|a.}w_PL.f9d}X1V^3^cn- 8n< 6%*Uf0%RsKe0+aJ%7 *$$(T,F-ղQXuß^~6zbvɫ]Osk.g~ϊ <۵&٘X%Ӊ(<:Af,A9l`1`Tt&>.N<-.ſڏ$}ݿ4~ mrEZO@f-g"QJ^{:)GPb ,㈁*-2NG;D<-yp##淡?gPSGoIJ\`Bޘºtr,}97xC ЊDž/47]c+AȆ".'I `Y5M%ȱfFk&VU&GnЋ1Ϩi! &7'G^Va<{0\-JUP/ե|® EHsS9'qdvh6trpў]<>w#l6`Jw߼7| GwX v4Y<ߏ)S.\C  Wvhh8hUi׮!}xPiƻ-A?Wp4^~~^X~}xf﹍1nRPo@4ogB_574D=VOvV_:8i0O)d:$=LEaua [*˭ V44~CsRY 2-ي̪HPwɤǖCipzfrz6Ƈֳ(;wՂ3@U5[‰gA%OZͮ==Ih9۪|5Kݰj6Qox[_~T~wZ e`= e/# \[kyuH-3[ ]2l(Q2ήSJU u(wnf'g:#d4po#'vՙ蔤0ͺ!k0rٺZ۽47z>a@ʅ#1 NUёv#'zY^ovj+%z}oS曯ޤp |OmX7NrWrZ Tn ὔӾBe^r3&KZpX`X35 |'^ŷ*qLz a6R!#h:MʸWZ|e/ VAeKp@U`j8!>zYC٧݌ꔫ M ̍EAn܋q\k(Oi +ݸuewۍ FLjFB.1LV܌BKܢl̂dlUZ=7;(O9!beVVv<@ko*ֆ\kͦZe-ׂn %Vpkv! 'B|\ n $gWPl)dTtl*gg' ehhǬ NZo|qJi=\@_KU`,׫p6X#H3N=W**tjЅBS0M^w9(aˮ@4 G^[`+joU ;c9;4_ML?k(m 5԰jP0+)1*O '>DWA~f3+Lmmxƻ+lц5PQRo<4_sm_.?!_ϏƓ_k%ޭU:(Pԅi)PYw<99G%j56ۚ`40="~HWJ̟5}՜ߛFǏ=⬮{-AM;u3Je Q|i.Vm'H Q }h墍>TY:Ϟҥwa-?/~Z|t6T,}Y{BhydJrI*td5a7By#R##t }+T%VW9y4WVm@>2+e}ҭK`ŊzCz9ocRȤ +u%pLZKNK9Q;`Ə Zє<,l&YKG#X`.d?;|>F.=H{ޛ|w6C[F'I/vMVQz܋T6;f( `Ha-PekA`G&hU4堬h]/3 eei++,N).^UV_2_ueX󯺥ૠ)A#cJYM=J+N( 7t-Ű14%iXb| e_c܅1f|Vd}3G77 ρri.g 4m2企~T.1 w%9=Ҏv8k:3Ip9*Rib YILM(2Mҳ.ؕG$R>5]<~u6GR,lRb4 ٫tuY*L :fތm.#m\MOFC$pjGGD\N%gIE#P .k2xW[TPQ1Xc=gf!&b!XXb/^Zn{n_`%P9(TN˕SeoTqM"́i80i*ӧe81v`ٷXcivG>L:t^d^# "vSzɴ5 g6p6%^p`\sc ms.^ecLߌNo F l- YRsH970 `;cr',CC3n ݟiXzdCy{x?'S S0PAtr(7{@hʏÍp=}Lqۻ߃AHa<֞}ӫwQo6's-hէ88<ɝ]"KyZrj>\BEZe`v-ʰ&czxο9CwC f>qfHK=>O'qllذ>8)>2І>fYnDAļvz J2(L+K46mawuwVmޚJ2WmǕeGJ8>)BSiwg|X_?gIvr_Q P4HM %Y mmm@-s_aأ Ziٗھ݉X@`b_qS1W<$zinT5}6x/D>t[ixoU w̫XBgb.BJ4t_0Gvy^_f϶( ŋE7  G[|H) ŋj{OvL%?T|_V79PgɃ83ZauU_w̔6O^u<+`MQrSX^f\; ;leGÆ7 ~nzy~  {F cҍS8{m,p(ZyedCC! h0P-_OZ%=\ޕ67;Pt_ɤULW'( FcߪQz}`w~Itg;ț];ό % f)E4o%WVEjkG&~T?1Hoȫ4ߥT^jrͅ`gu)Vo3őOlS,61BEW}[3?ꪳCǪ8jTEW偢Ӑ|0c `x]QkTB_P_LS` VJ],DXoZ86!054W/Ws@Jм~\$2T_WWAum w lm%|Z4r˪Ь \d6m|-bw'("Ua@[8r<!qڻ۴*z+7In3Ȱic*Ş1@Үɛ?OͪPRѐ[uǭ_2WbY JGR [C(.WD}Ƥٸ&?c1_`e?ndYeҐ 'a9pp2_!GvMlou_B=7rjfi`w {)etW8CbpPk,9}w~+[K-"']Q8FӅmj(oHn36z "&r$Uܭi\&p ;B&1SF+B+9+ 6+ZCa?Hr8ы=y]q섲Ѿۗ r&z6@:]W=(Q좬#Ы A=S4*JT>쌳A%p̼)]3sH?K Y,b35Lՙ\.F('V:Oy5k& l*[k(ɜl<`2NauiIn/*meC; ńt?Gf&w'' ],DwFj+;ݮ76 ׂ!+a l'FJ)0im8c$/a+&r,’W{|upYĚRR_fY)J2lܟxttJ#|t9º!͸^MX3kh|Kb<,d8'y7/ڳsi##Op*ncn_Fǭ38^ʡGbk}w\k6i_9UUo5jȨD2S6Mيi 2+˘+0c:2L㈒̰@fdK86'DB\Zv)C *i(/z}: lb".%iD]cK޷!hX_8%B{[zƟ>spn]āktf_KίjBs,?XyFBZ5|JZszeN.Orl#Mb5΀;)f")C\axŢr +Mc-PJ- (^-l984b=/zU&rM_v)񥗫LQgCR TKڃ hv&#3:SU?ɩκ_sdZl8nq!=OΦh{|GLT3ћo71V8e ĺ PLG2Id݊b(gUGfOR רReTBa([שLRQχ[3r`do`)JdeL3?|5Lii@ZR2$A5e '`Ø1 *a=O9M5n2!t=c"B-J#بCއ_7/AtNBu'0H͈bK[9aq B g_i^4a"ٶdʌYj.-_i=bEi6vDu7]4þٶͺ6.O-"nn8j#B$@ R#p|RR`]a#lUmnDI⾓ .`_huT  >0X3gDhZR\pĬZNFtۖUEKWHYUʵY`K!υY<,PSQJw~,)T̪)y\y:C7b(XxZtZMm> 3YٌOCӉ"2Th1ъq(~|='V@w>b|ܨm>(bsFVqQq6KAk@Ou1%l*OX%16qk9ved_KE1 }ȇte |'U.\1xucZ,Kv2\r8 a`qgR1b|xuz5sɷF3Ny2C9|޽$V\G_3Cx.Eoe-j2\?{u%Yrگ'ބ9Jxf4HRŇ922(gY2=n]< a#`u8a`L-JB;%f P:];S70œm#btVreCL4-dhZ;0.QECf|\"RnlRfͮoҼw4]rSdݽl8~ ݎ&sg.d\qtI9526i>wxy;3_!YY195DgӔ/H28`q (3bXIQO`p17J `㐣Gsހ.&Ry -o)9(ԗ?Ro-~EеwQg579sw 0|hdiP2Gc?s#ǽ+{8<ⷓo eIMX -de#B\RFqk 9$gL|d9|P_QIv:]nM[B`1K9+S)QT"YB*b&uNdrʏwMIGI c:ّGՅc>yIQObXp[Ƈ1؈f+/[>8WD"f'3X:Na*OV'IANs|kioʘ3ChNw6IEx"CnITi 皱JP m 8&> Q)f~1PvݦCE,3)TM2[o a;O(eM髟W~ WW]*|蛫W89#jeΪ|m{LsFOEl*"U'W;+NsI|yԌv~P.k=0*)$e$ʹgՎMVk*z6qrL'!WH6D}蓎`^a Qh2>KuYډFGteSqlh'!YE#s^ V/Z܏託^@9bT0β6cW13WdmReMhK4t(CϮTQ,t3J-<}bp䳁LŃTNcy6RIKΓW1j-!3 5 4D8K&)FGtX؂p]ﰦN5лO,.HP A ;~̹;KF.{ e4ƎM4KĪɋsϸ T#d#µ;)E 1;O ~ރ^z[ϯ"LHRzUpJч_*8_5puG(Ϊk9 ZCZB$9>a9j.:ݝw~~ Z~?8~dj/h|ZLvvRgB>qƵ7^ubշb4󧹅+W4W^ly VN|d(y($fn7U)P. sYrA>_u29^x(@QcE QT(t\0c( s=0A8zߎ?Knx@DwS6%6v*W=x H 1#ѽ׮r)Xr^et7$fmX*06 xMJMإa5F.ÁJw`3|4FdtwQ7NY8Ecd"i,pTc5dz~,@+Vkji ލȧ8,5_6ZbFzqKϘ$Z3/T+,׻ݶRO\znpe_B[4F0 8ir?6H޵-lI,"ߧ옪checksums.yaml.gz0000444000000000000000000000045414364522741014617 0ustar00wheelwheel00000000000000ce+v\A Dbؠ_ffYZAY} m^uK;?W.K 2DRǷ+q*w]d'x$ڝ,Ѹ0xƤ: '9dOm7)j2,g`#|h)o@m=[Pڤ3( [pTTeQ+uc8^Bw=xf_>>x,u(2xS6\1K,rP#Z/۶G&aqRLmavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/z/000077500000000000000000000000001446701454400252405ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/gems/z/zip-2.0.2.gem000066400000000000000000001750001446701454400271740ustar00rootroot00000000000000data.tar.gz0000644000000000000000000016635500000000000013337 0ustar00wheelwheel00000000000000K{_G0|Oсlb!$.(&68l ~$O `֒F;#gי-ݥ >hy{3˧Q\pNE/lllڪv^(_]]ZEA2;Y:ޘh6M߳$ջdW$WxŽh NKuV5N0R8ϣ7z}ryC -i]vw$7q'Xg8SѸxfh -S"uL~l?R۝GЏw=NhQc~3 Q7i4Ŷ~?/K+8}vv)46#{7dfQoZcXXezSZUGzdZ {1Ǫ9zGwIJQ@r ̙Ʋs{ȼ0ӌKESg/YY:ރ~0s%@15 ׸nTU P# >Yb 5"cbuzi BzۻJUs[Ntk4@!uGt u%@Va'gxCgo4UPWVN\%1r8ycX/lX<Οm<ź]Ξ?y4%j i;S=DPt4gJ-׭lBb֚K+ Vl 2K ̡,1fá%Ƣ\Ê/RCQ|ЖrFJ.8B1,zPpljSRROH[ >~7x낼0/#nomݦf<޾m-DV@**yF2{L#8@t:?2Tz=OfSf錁GyÒWssrj I{om2&u5k]TC sjh(UF[S6nJ܍ ^ c7uWse"P͔,Emq}rȑ@@X-s ,n>ln7Ջ*C ~?l83;b2Von,Fm*l bG8Ei RW^³yMl7iCKN@d€gJwkByUL8:IRv7ʑ~4+"&7|7b2 g}M-mAۈPpx| +XIS1Z8\j6gU]c @mB$et.cҨyʜ9~V8Ǧ/?6AETzsv#c]Lw8:硑#5&"lZȧhO+4!7S l^؉8(Un N.Y 9EԜX`"DfN}ʓ̻ cbCmkΖ87p8h(8fh:UZn9-An x|}p_v䲳Te,L<VL+`G!e \8  > ^:͒)bR IFjtw@`n1[XaފSQGYMzeʔпpXXtF3ԌN* 4@ȧnNjن){/w*>bLҝc1 Ρt0IIXDPVٹ٦wF6SXdLVGFan3=7|u~ o&ռ_^ld UXP#f9M/5tƹ vI9ha[LȘ!QB f߁{;%w\ɞ%hddH$qK֙3 x"8,殪DPdQ)J5R* 4jfi.Ef +C,Bc֝!jhw;.O܍eN7Վm\5i]T<tj9g@(" CDì~%808x' h 8 6p Ps6B H7Hy$h.5jI}>2velAviH~'1ʌS{SdM2'+#\.PbZm6cb~ +ӺӞZh2U6„͒*P"̂0;e(+s"LߏVg]drѮLTn-j ϐLPܵ/%&oBAMOjǧ?$iyRE_Qo2` .-EʤRNk^k\RGk)*Hz0ޔ\3^@{ŻrVOIy a9 &$&~p*wq>zҗOOOŮ` x+M>և4@u9!7iy.~j[O)A- ݞT4~_Ӟ>͖\H#kLou U݁mdJ"nȏd# xmUjx>qֵ1Ta9Mπ*e DobEhva,@x3FwZgF.[]lE*xp1^ iIڏ#aa0.e *Nux{PslċTMmd$MLoLa^n$wԈ7: 2t{%:*~2: h zF<,i@d j:8U咰4U~K{j nSAETt{iij3iMNٴ9רM[ {/@ջ$'DQ~=&Zs3fhǗkf\fF__^Q񔢗5Cեq&5`0xs㉍5Woo5 ՛d [{S2^k-hS2.3B|C'$q\;VΛQO4A6-=<,Vn-O G5 tW;MV/@4ɤa\<ƤMo!z}6ҽKcLp|,~ "|zmVE` kkθylUJ)R+ӨpY5|o!#rqa 26|bB2z; ujLEe;{6f2C5q5FxyMQgxH#Y«.K8fGX;`&@ w@m 6X()6 L nycKSse";V[7%pһE3'sK`6di:؄(N q!'rģsh$&3<\V|?KkicbԇEj|\}喋 ٘ R pXeAᑣ;vԱCqmB2n=K{dY0Ltvw8Gv.u+&vЖ%' ҅H|s kSi*)XІk,n@iWhrTE+h<#nD;/uDQhr_ɔ q"쨾H4p7Ų9/@v)>y0rDZa>32_GCffN윇dUm*]D%m"[( =cl̕ b/}6d ^*e;0k/.FРSnMx?~g&0'Y?{y^$ !qgg˸Dӌ6{āCUl,މE6PF}8Ƀ%4t846ʉ>jifBl(.OB8,a4׾䙣@/ `sj@Y'c/ h,˭=7=hnȗ\\ ہMY6P|bsa!Gh/j9St|]_ ;M8[p^ǃ(~$ i o`n""-D٘w2MOWm>l{| }> ,fcdUާ9GCxfa]#k6Z0h '.BOI]ud"64(JGf$.-=YsWe]wУ3EUi:|iwtû/ 'pMrZ_,ڀ6"y.Un!,XnvHB'k%M6Yv rL9<2h5tuE=F6r,|FFznro6@iz@G~40|I2 >3oDG[K7qHnfv:GG8>8n#ggᎯ* \$ڎ:Y跸:)9ג+/g?>Urfb,jQؽu-s,#KZIEyķf!YՏ}wZ 6QcTs-Z 'r}7e- ΎmWv8^!25Ho ju_Ġ[brDtC8F^CnRؔj& aɋ veGpնV[~}*sL1AvHw !(zXڂgv&?x9)9T\ټAdLUBFѦVQ]y.e)|&^[1&T=/)1j iHӢ8F\!;3dl"EmQQX*JW>$er ky/=fq~&I̎lRqV7[ͽ%` qyYB:fF[S_{`9/ w З!e`Rw3\cFٓ#鐞X,.@1OKiv\Oq!ǁl=MSE:&|_ʒh7M9;l$Ge; l2& oIrс~b zzCDDk UXj&@ϴ! 'B-6aeQ],v.K]H1=&ᠿJOܾ`Wnwv{vg|}BoFH1n$a x07W@sk}|Tq?OfWXv\{uܩ|ȏ톚/w3N] 9`"-_-IXxDdUga}$9--~U`SC"!7[ɦkՒEo\t"#19ZvO1Z۪Q|#E;y:ICKv!I{Q9X|QF,Ȼp-,%F>E"ć#XUψ6§07VOx،7H%^ Йٔ T#hpBՀ(0W$H^P\_Qȭy!xdSc&N~*YA<$PJFtl*^;)k \V :Y٠#C9s9WBNY/&sC5,VRC1jͯƮD]am\NwNl]68o5 f`O24ȀYoxy5]_0]opf Aأ(#&hDQk(mP,XR )ΦZ=ỾPQ욮X0aoRsCi{l>Fq0un=ԡ8hG惱a[HWqK+m8@6ɔpDMbwɄXи/do@M<ف:n򥑕Εng[+HX(6N Ʒ.(:"dutK 5Mi7GWCZ,4tsҟIlcuҨGQ>_|Y]n p4tWpv 8#e<78ۀg_;(15XTޯbgK4 joy B$g-ƚl%dn6?ƒclL<4t#)5(Pf:vi;nCʫQTeFCmXj<²7S ?a4餳u.ܖ%۶MG38Xi btߢS(s8)93HZA*#ކThg>A# Kv?Wc'e͆\|Ŏ/.K\,U Ri [|6 Z[Ѻ5 {Z*7[,΄ S}]Wܮ՗q=߮*Pc.+Ώ%Ex;bb=;=lrMijDu4v˘ыmUOdJ} yo^ī@)`r&\Hͦnd|b=jP{ 4y#*634WS8#<} _WJ_p3iN8R0H %iŲiSc%b s25jȑL<|۞[?ZF8nphEX]2}|1R섪UZ>_[Ja`zOhku3xC`?ykRGQ(OhQ o;q=~ts8=qͭGNl.{Mv}6!谙 |'È(R&jxIcSKoRR'Q5>GRRȿfn^W>ԀhD-3,$xY_s/1^*i'Z5a؞8y|J=l&\.p`{3z>]"<3=uֻF D%nP& \Qy5PñdY6SLP$s{,3ez$IQ]'ljm}AiLumCq |_bM͓UyR|+52>LӐ_*&Zძz0 ~bjʸh~ :~abYPb^(ql .ȲզTҮ(4M&_R܍紧Gh0{W_nm/HW*uz 0?Y}Aܷ[M5pѰtqb߿@նhp"`E*I@90~/Qڇ>jc44 K"M @wyBPk r)M %L5 2%\\1bY&c^&j%IڹpEO ?9mūv}x!}pW nGmu]ú"w=gWF3 7Qc2 Ϻ4IMz] [c6؞\oV*m,ZB?#[܊yM>@?u&rF9yxؚq^KH#6npLֺaǁ,MشM"xb9)Q*\:GLX(w%awMj_EL 0dn܄6͈d8*:kIAs8?.Zu_*6TB+5َQ#u4awֲpY8SRpv9-%10Z i A^Ua8 Na= ~kЍN$M ՚ kZ +.^N{rLMa\伋whb:eaZ$6qnPuS59`t:;z A n(Y@`Npۼ8ċ: vn \GͶKbt GgKep̳[\m̗ڭv ݿg|ց赇ċGBxG¢_; Wo+FZjKPۉXk^#&$0w+t(?t@ 4T6!K6 t-t~&oHpz.g=r!?ggӧVr~1C'ptnj݇sUl@n֘\^О/پo1$k7`fFu4$q?$77I9 c<6PhUgIhP_P#| 2$Fƣ^$&[j'ףpR sjxU]sڐl6;cZ*Wد _sؕ@F@ FD]f6{:#-]s[.MC֤o-[~orýj(;/lq}uESȪX]{ZiÎ&7"IM PI aS>ԥ \t:Y)' ~ XT\cN)i(|cMM\r)UM fE 4lwwb<yv.biKuؚMݙM0+0E+p#rW;CpˍD\h6Pa|4S T<}JOia )}_L,%n4<XmIëq+qzOPB5(Y%Xwt8hHpVB:<)l@O'$.}_)vhUIJ ~&@ +% akЂͧ0HBxx H)O" T@q" w7Tv"4{TEHwͯ=$,mUBgW< : 힇QOoبd-LL8- gmr|z$U@)6l9(`TAT<Z;H;-/oaW4éӬa_6@ ɞC]iv6v+6bGUV44Kb~:B T6A_a4Gw9{ġVlzG ֐zkfL|vOS!' _.Vm=X2NX+z3;cr#}rovcMhG BQq9.# d\8Cҋ)Fգ4E_e49ܫ(M`FO1Z|U7wp^7 ѻ?Za+%ZKb]&\usetë‚12-,鲑'&Hx޷@:ײ.[[zd%|jUzASx |P+em/{ ?S X`jK_?cgFЌɾڠh7>~D?0΃9=Z슑|2Li_#K wrr|}ɳ_Q~wsWeǀ_xp셈swAmGxMx`%n:9sr^jn@ɚDfy-D.f9sыd⧳.?:89x~|v~͟/g1#69aR9#1uI[PxnC =I ^M1 $eibu!bmKȰItLhKWߟ BlGH<3 [KkCOkAa9XHlL2_ETr2Ov[4 ҺheLFI5(Nm&3b@˓P){ubobyGl =C!kj␸9*˥ܑ9%h,b \nƮ̑ng5&粢}M)\>+t"(aPf@%:OY,N-Z: vDG1; <"i(k?!ŞX[&i<`3%н \<)>^NyH>tƚ?a8ldrbfUIEVbxJͥZytj.}0do [2~[Y%hތ 9 xɝ}cJ$iݢxjvj qlh|e_奎 d#Уnu+*Zv`ԡ}nt:GG]n?}29n3\!YGZ UW)^YsIn jM xccE,%Rhs~Bӛ^͵I~}}<?T!<2;ε8O,]p< HNgGϊmyqͼB!'hR;|l=iS&2/ C jdqVN4[}Q?h[{ fcHZ,#+(+^qfCs!%t`q“ -TZ$6Q ;XOOtDŽHb9H9t7E-yIP+-GP87è9+P(H]!G!v)w-5$#"` W o!/G&I;~`W -U )t^0͚ (9-Wlp#s i 99!09%,Pu,'$3{Qe}já)̼>Q:1E.SMM\XT";;PrN"y}N/vA;̝k۰K-;7n6 SlJZnK\rl۠.g\%v5&w˜-UG #d1Cao+Sg16wGQ$wHasP6Xi#f^Ƙ= KzzbSFHBAr"B…0ΉV8˘O8hV陸6Bl[ ϣ>nzY$Q |X + ֢S192s1_[k8q_oZ0N8qo `xnW3KÙF՜v?`'sJEb#7Gʱlj+ O!}a\ĸZw:BSZ&,EmxG/.L!yt\y v%;Ʀux w88Tx)<{s8|.N_o{y|rA-?8zC:8<=;?(7?SuoH1LoL'Ϩmo\?HtOqZۏ;-w~6F= /9%WQE)Zp(k?GoM`8?^+*1J@J"{ Vu90 #;=n\(|VQp Jt4(g e ˭E4n~^on* 2B1RQʜ8UssK?;>?Tָ کQ*Xwqe{zgW߫^\i^}x}a[PgQvp>3e?@ꈜڠoD~u$aK${]4H}GA> dLR xq5;~<GȾ4 ӛn~;""q*CpmOMN2P;K`~EhŌz Q&|QhK G>%zoS4%2Ye=l7jTn0ҖynOюLB[đB5 j{5Sn.Mac.]uLAojkQfF&w@LG=&\TsȼمU>+; 4$1n lΞc!іǘrGNF(> dN'KSJ@3l,_oyvx{H j~/?S67&3 )XdOIM57AN2?=:8CagGgN@#"` QS8LN>;>קZ])t{'sihryK?8cMS\/ϫI̡_1v٭EJ:N6R333[>8C|V=`ZhmgpfQYMyݯ~OiK4nS&gÊB"xiȡW|y c< ՒB~mכdf[9A\ȻEȓ0FE!~vg=}\ZOWlco?٥VF*JJWo(Jz hJw`c:˄dך3 {=:\;a[Qܙ^7Z?Gax[*'"١%/S*+dW124hV, zE/+W۷ȬEI> H9wЖnuUQhTSTD"qꖐ!-f1P^$Xk5sk;YHʺm @ܗ-3<ĮCZ倅7-[Sy+hyÌ0`Vc"t?˙V0D0 ,ep ^ a!OP*: Gh&Thtp:S/I䦭8Tr;M]`o½Xl=Xy7EC4|oIJzA7Ez̷CrYbB7K1V i&&'Z2& êp]W9$68imA0Ġ<(]%Oh%$8_+BU]auj=ϪNMͫвԉ֮jV^ViqŔ.-iTt-Ӟln-퇅}6͟U/;K 1OfM) YX \e\laܢbٲ6tv%ҍ 2tӶU+ko^hc+[YJ9gI?xye_^^}O)rsƛV\G,S"iN0e69fI:{&m7uI/0?8S{ʆob.1'-^u`v.(@񭶝8QTww Ss`(>L[nگ=F>OOp{o@#&WְN|1Z[ug-Wm6c!} JuL=S٩+} +5Y#wn"Eאs1`o/$Tأe|aXz1! j VUٴ1.M,r=F7 ? %EpWqUȄnAU+XsD6Wg];rC*V%y)[rKUB,טYmBU-TzA(l(cK9=X)~NT(xd7/8}۾ZZ`HU_ĢO}=rFGsl\.o*X#-8>y i`с ,R2g]` ~W.ir[5C]}Pŵ-ʢ06nws7ۄмΎ]H52B3gUEE)RN Ľ6J)40#mNĘ ԭ?}|&vQ{tEZ70EyIhj(R$Y|ԆSgO"u_h25Wm3x|@@0ܠyR SIUwvn.ꪟiza)}:58Ɔz 1['YnpCY|Ti.v( gQv\'̖FNVk1!;kT3ò&^> }cB#*75%LC)A3s/ْZܧU{cBr?N;ӣ g64,nAy1]tyAgG N}n[bKP#nF見.q%"'tI{ġͬxB:aa^hxԡ HU& r!BT^#sQ^"('WMG otd>{.l:_/2Bw>Dg0F=1&=ҍ]%oD/;s[HPDۨ:W![)(}d|t)DW2}gM*C8كRN~_bOʬJ~RD2d ЇA1>?Ǻ<+;h%ޗ3{.UdAdwiFBZOs'$ZP;ɺs$#vۖr2)iNBݕtlu\Q /PYr`Ь1OtVji.=mZLC ob iE˳sL@e0&E˃]+NִiD~7<^׵AuUH@ ;ݎ ^u@ebh &8%zouzU Z[ "z mئ@ݱ7;ɾݽf 3%:nuw 3{0"e燏:55wa|㼲|v~@9JmI.6Ue9[,u..%1+O"s>a ^K4 K픏֨`ub-a(i%D鸥T @Dv֫5VSPzy_-& _U-Vx9gXV!"4w~DOޛ!,weSZcYwӇ\♉gñd6Wݩ4w@/C icfyah%9v?6PjʶWOaѶ4pw7xLG*[@ 4)VH:Su,V9 6'M7"Ez rPн} u #*WIH:kK뵦w850L.vCU '7f8`:Wà~1KUK4tIZRG(΢aAhl ܾyrާP׵.GUqzAwD=qEWo0NaU EӛB(,mPܷ<.G-F -8ʕ7 e|cJXQ/5 c+X)6q \еQ4A|߫e}guܚ>I~(MoE0Wt@=?y}ypѳӋƯ_ !*oHenjt0E޵m}llmԥy:0tjZUwq8SAE=UsSP.$MG'ϺϻE' \֞ ׀GPuC{{;=I^b#>%Kqhw,z)wG>hR͎B*W4aN7.w-=MĊ IBһ•B4}B۸K.F%f+)Z(Z6wO I,_/Z$kp:8~2OaL9Z]IKOReq/`?Ŕ|&Nu F#躵*N{B&cԳZ=zB5rBSWgt-Vþ=YqB!6}=X@ï;Úhx"uIX /u<:wE]PWwUFUaA916JuEOqY8GbrIlC-0fYl^:q* `u *=MIl֣<{`-u|q^xeIh%ĕ6NMh${sIhoΌD(o3 RlPcjwߣ|ߝ?SG^|BfK7,p4Φ:p6`Khw7iZESI %_k`2y+ɀ׏%ggՊ3dR]ZRGNg^,bK&WbN ޗ QK$RZqۀR&wWv r6ښ~}oi5u4*Wt*[fVEoK$dmH1ȓYxOBI2"|W0[:5r+N` 3(3$ YXc]x,E„`'ubC&)e%HKVPk09=1OʚqwoS8cu. ,7f\f5r> oSڜvnƅQ'M CͯAȻ*X'R12GŭZ?;3bj$3/6ь<7$l9*FkTT?H*Е=g6LgSn(:GشS||?"uzQb[#ReӰUbA9Jg ay`ca]B(}/6DahPֳxt0x2z 7"@FY ١J'b$ZAICiqtv(nb(;=1U/l1:ZъOcx_h$yY*Pb,Dd3>-Iy:Z+G3SmVsTXWO isvRr^0Ԯ'Ϡڀ~n7eٜsǴu:gGGuJwI)ދ{@jYm kjdbl^dik $vmLjhc,yʖ56i&K$1T?r-JfWOu"&KY;˾mDBhHE9xyfh6$yLɽ!%!K3:pQ!D䖹G 2KR ~{Jx #,S:LEF?p:܊A쏾qGd)B`($ 踇N(Nke [kVB9\SEwr}A4y\]1 KiX=52JU" !O1:*apAGƹ֝M}uV ˜ ۅ;\ n7@)`Ƭ,\ \ `FL&`f\Β!LC\w^dwe=?iD<h]"Ahw*$XfSHČ{|1n )gݐ%!KkkMkI? B{LnT!4}  j8UhXn(-1Txsfer#ElcWU)b62SxNFMrQӍ6萴+)\l_(O̜tq]caNG,uTK] Ρ1mP%q.;'U^*G06^nZҊiq;g)u-;QdmBMZkgM| /CV`[ ,1v,8ͰĄL͠A1 q*Ib< k^sόKF-em뿶js / P`]˶kEɛ$:1a{t:6j*[\^gW沵^f2EyU_T][](,m4Zo6qW|BmeiCnMN^B%G8>Ъ=X|Lrʲǣ!(FdV"A0-ҢnR'NAp:^ݕV8` G]6:*vuYMb0ق]{F$Bv"E\"Ԗl[C:D-JF&/${M٨ VA'frBLHWZynl!m'º['ke*zE mOdɭm:MG.KĊhi6M)Pn*GTǘ`SyC42YJ# CTzy$xv')Zzhw:/@(YM ұ̉}l"=T({badiQ + XQCyx@yRPvCƈ-Of[񼸆^ZJ+SEu$#񳺳|ܣWN,U۲צGށljWH. imYlVn,[i^+h~fC ybIBCgxDG epbr*M6v2Wo(LA2,*=N`PYSALBٵ=tѾnCGu70z&,EZ吝ݔIx?V#Bn7nx7«׿UW`9*nRxU<#d5ӌ_|==F7xWvd*:X=T~Ц- ‹Bq@\LW v)nCH|~ Ml$aTUPZbcRoBwl#lߑ6A5%vi]4s)g6L:P`}?Y<3_=) B4[6eB/۳e{=B*^Sisu$B_~7_E0 ͳ`$2}HZ4jJY\RoP/Zn^on zTEv3Lk{1/ChLǔ L]@~:6ӫ1dʣ<ήg.`**oj_0%z^\'*=oެTˌ}%mFa89qde%Ԋm)g\z`cXnUF\_rjZX]碢'|,K=$eq_L4/̦U].XHd\.O"bze_֤jfD8{ '~zK\8I` :|;Kr~`k a $<KD+kr aʻc1S`{dEdCRDө5FJe <~ _́TJrW")cu\"Z|B ww=1!vrٚy(s3 ^fWJ,hjM2V"yH^.Y¿iT#QDwj{ Ż;u$\E'rدոa53j2n~ wZ᧲%,Nwd ' &l-z&Yru=UúnNGy:**-1 dqln~˽ѹfP4іq_t [K8?rK\Y3msw'sy~A?Tsv3Cnrއ_)cGzuFQrcu0٢%;`fiZfoWM|dO396Q@ :ϟq _;2pb2>, [)L@qx)vC9(C]@To]0ka hfM t]R%A2I_ǖʟb*:y[b TOĠlUU8+R&#ݣ"HmI M돨A`tQ\8"fެ]e ɍ N 7h"{HO=s9籙CUfD2GZe*a+S)9wS `U:y[8ܑTZ:օj FScQ6ʯʛmh2 NSux_M]xd΄z =0NĨ]q1@fW}IñdB{P6~t\^SF66wd, cx o~g ۸73`;ʧI5M0ڷU6w5*Swqީ-NRM_${;p#}Q].n17n [~YÆH*f+vWktu++y[/{U3C:]M7U@_dstGѿ0^\{h=Dt\ 5 +LK'bR٥zZ^;I7Mu9|j9<l^vxDpb}|lBM4_F6o΄&`}+; cڥ Bfk')ۣN3G )U#Mu(l֨zDHМMp3ȹb=(%xYGUu0?U%*/^6*ƛtFލWc v߱uu6`fQиJ֨`eߥa{=:*].d3_O+*jؑP>mm0vwiu{{U9T6nݮj7&&|cb4ǭVmևvuGh4= &3wFQu] >͒wj6!7exZ@x$iF#LY@W]t3] |xQѝ$W.dRQ(o)DVZ5 ߡR1#>jbEYIu; Mq%͒MW9] GivY^}XЫ7Fl*Kg@`SE~1"L5|&]HYJF5B־C{𸒫@ԓLBaB&@ϻn9q+=-9<툫ҍ[}Žݖ.v!,ِ=~.a ,{X@B~Ωudϐg,=uԩSN:' r=K j%S)|a5<t:hu9Za+8Yl*cZCq,c>C1Z!Ukloݰ. D5 3*ؒB+cyނc1xMw BwtH∽HAThWőya쾂ZElcMh, [ן5m#ʌfBKB-$]M_Ok+kB? \8x>P)n7ޫ.5T p nAB1EBY+ $4KSXPs\ rG8%eN pc;j3m=^o Tk>Ua7hm`DU5R>VA84R ,!] Mk%B6]0}+ <>V\Т89'y{9@ӐmQ4B%PVebwdJlf{xLSV,i{pՠZPm+\VW qP9y4j{ B rF O4X"LRyԁX}^SjD`;tiLO4]g 6xLѯFl=4dh׹FiM/46H&;-jL J矸$oz!:yASqvKy ^m *f>y ( Ĺm`JH:'^ҫG/ۗ6Y7[nk-+F'.TRLfp*#c%t1qamaEtoتQX0PIӶAW?B'c9"yCz,s7 ݥ֙細`gV+ѩ/)NTXGCS\XheS f͊UH̷XejVw. u"AacXvr^}u'+6SAjrGg]z'3ڸ$PsfV 6QUKK&1h>Pm +~b *2ƅUcKqÑv}wTMrZTbO:5$Ve#RM4<1a4,#;\`CNU{-ԏ]AURfⶈ@d 2TN7S\NTd؟d'.$ޚ+LfFE)I"!2il$Vx^՚>MUc"`܍`kU|ɏab0<)cԖh ,XspQL 8}CX Q~\6 6⑦uGh?\.g !tzX۾7"g6ImúGc7mK0VMYA߳d0ˬL  Ij툞-x%̟"ZkF 9 Åί#fKs T;vˬӧ~-P,rwGZ_B(tuBq5%J4fG`I&<镠bx*Td1~_'+xp7/hgP<[77I{BܾR E G}nUelKlH hi^&&+?>Uߎ^Qs H.Gu|&[ f CNn˧/̩FP &Qgϝ?[_$3& T _r9=4CgUP1%$=d.ԗ6iO *ůbr?FND:d. )H8?$J`Pʥ0<なdKQ'y]rtSX.'W%5<ȜvTګňC#BN@ߦE ,[8DuWkwn˧/CK+`Dd،$W#6^~; 4&ĺ԰\/ˏW*%61)w}S(\c5"8;dcVP*^Yxxq|}euyqhuK%|:d\i@&P4[/dZwy3C`@e[+р si jym+r"s.*wu/yBn>J# mIMp,)CoDRb/_tnvuaXmtE;D$G<CTs)-X Wxs/.->tqmeuvyA~/Qe|F%iF[:P8)"*(Ɲ.e{=ᴝ|e|GHʖ ttUmca8}.tBVz} :ʊWh P:gm M(jZӑNpɑԒ@Ғ.ʛBR)W7- Fe";iaҍ9VR58egQ>\i#ao2X<"w1v$CZ#Fؠ2DO"<݉8#T uwGЄ-#\N&&;|seDLOӑR0,{ϓR|BqY:*Z%,2uǮxT4 PC6|"jX//j0U yR{C9u uxckָbDNJ8|nq9(ٯ薬m<NYoǧ_Q DS,~xN'88M_<"[(m=/yE}m:qTm|ް[ܻ'^C{[~=w[_b}~w?s'_W3?+Μzowҋ}䱟z'~く?/zsӣ??|}ɗ3?GOP̿?|{^{Vk_|5/gPiOyn ޲m_|n7o_w)=?hY՗+=Gw7z|?x?_w:o|Ow?O}ۿ?p7NjE?/yg?}'#wgwFO,~ӣ_=x,z ~_U׷~]}nwts~뫏}/'57?7ʻ}]/yeo~{' ߟ=}O|/ijЧ;G?zS{Sc=q?4m+ΜY~Z?>Uݙ3:iɩ'<2v0pv=B*y<,_X\Xos.ACW U071N^vrh["E'Yt1a v%=^2o"Y+z w(h=9NSY,O%lp ᷚflrѹyJ#Hn cn{F*9J+(#§ㄐl\ Uy"? !,6ek;WԨq*B u݄N.JGso7h4&QCj&l"sQAK+%/qA2@Iusvן#ݶB4y zk(/kVg^jaEe"V, LwL wJDF_ؗ/Tm_HH7DHBaZv3"̡&5{c " >&bl;bJ#asra"]m:W ݀?Wh Ek"gqrEBTivpjy]}Eq쪡ܓ ԶIX+"cgpEKN`8npa(0t\4a17`0HzwS(7A3 I~ wFx_R,:y#f&lm y(9{F`DslР*F`BPLam.IVk/C!P{b]7Hl:'QJ_3᪲.Pqʼnr;2#])iZΣ@ wj`^zC *KY'afޡ1k!-NL]i'%K@+p5H"^6)%"&,2 '"f Kw1q;% /o{Q$cI "pCis8B:x= iVNx)rmOG۰r=d/]4Zwni0J CdCp5qeQiڬƠוdZyfIt=D L(: +S<$GI!(mM7埕歠sۅiW o=tSy2f: VI TIiyierOYz RZ^a<.g|MuDvδ%YuIKOթ%7`OmB>| p9K70!^3+0zEq?Y> x@>h6 ]4`i4M: U|^bъ=f^6xmDZ^7C= Z̶ =4ƀЩ2_JU =\%]-UnfDbYkL_A529~߱VY:yaSb4:aepv(UycN >\iarY6ͲX>5&O>-9܆Y 8Uy`|j0VV+Mw9R*3%,f6Y0sw y@5/9[.(Scd,E:פ,}r Ap^ W{C^)`mi7bdiwEVN,~|EzB"M?t0ְaF a!,ö a@"Blk<~B "jĎ57Ab~:-"V ;.q+pb$_j%_((hb%7%spY0KE}쪤DSgltZL!- _P-.>l 2 ,b u ܞ]'xL 9Z—c:ܶߴY}ȇ5JRNi>_eN', aQ-ͨCCm_Xv$[#j v's="mNjAn1H[Xb&, M?E@1#L:i]`m-YY'GX=Rl# ^fnbGWMyݤcaOmS-90.:^| !,:И飔>la8vT[Ǿ@ZzJi3U:Fo:ΰ/j|7&ލ+/ӈ zBgx*3}p'0iM[`E2vzzP^ʾToJR<-28RVS1n4bPr'oz7=Ǻ# ^)9iĥu,ƛDRǒ ^U],o.LA7Ѽ0=ϔ`aҮ“s?yE: qj8鐵QT학*s(5mVE9@6ݼ~ӹDdчQ},-:j&l5N l H!=TD; -SUʅ$RWNngRk`1dE1;ʔ/'n? ee?jۀ@[o`nʁZBX/*#2uCR*_W44efCS26m5/woIGyg׵ = SƤѮB?m}̎ՋAG7^ߨ!"E!њ`X] VzM: _gMI%\fb[d$֩;",1_g,GF=`'re3uu/7EH,6ew͆32l :5%[UV٨OO;uK^_$ą=eWgFB'jr!;y^ꐖ~wS|(+_$hb́ s7=X2U&.GYKwiB8 MK*w-֗ b(+x !U/A Fs:иny\ZlOnH=Op$ ŠT!Nx V[JyUa4vpgX,Vags&.ؖxnGմ,`;uLe!!ۖ%zΪvOlذ#4js+:hM6ٝ0ZFLF,\rJ%S*,4ĒΖ+1-FgCIڪ2AY-B;$%YlhQJKLCܞn93X \x+.fwDYQ1Z KHnUփ^{C%Xf=lfq7r7nm,F*EkQ}ʚG[d҅5u(bRp{> O4c>-m+uEbTF'ȃ(ɘiGj{c3TO8nA$ ኁ̺W. bfy^qPTcꦵFei 里3~یitА]>khZ\ݾ<sn&yqnCos*y]F#?2B2Ă?SG[TbD\xo :][io5C$@A&h.7r8#awG=‘00wa^MXeܗYrd ͮS+:Jn[npu&cI B+ {DAPBG, v; $EڅG='G]/¤p;piyܑ/(]m (WؙcTo|^Lq*GBWH;Nzo6gh/ GΨ׹S+x2 !WXeKƧ1w>oMvud2LܙsϾ^yG~\'^%ȷW_vEGP%+…ա#O^~WYץ??ģ](^*'ʽo.}M%߾.{Q 1{uj7F?kyū|tW76Ow=뫞{s">:Ўp(5wkj/Z+u_G~m=K~uk>q_; KT)7z71%sx0U~?W_7+f7}cv;ѧ^?j)Ng2Ve]]O˟Q9c?1e&cw3yeG|GřEƉN*!y QSql}2Op0=?{w 4I{ h{daw^LJ# 6:d cMV'O3o:zYCxQ\ճ3Hٻ>{Wrr#4Puם+ȷ WZ $ yq赕/}o>c77~Z7߼w~?~-?/} >S{>xዾN/|>GȷE5+!lr\sc_#Y:_=}_ڏ}OO|ҹ{~g7ڷ]խ3Wg֩x{.ةCg?k^_^ϛҧb=ms _[_9"jY#"g5+O_뿷% +fa׽>t?Wmꗾu0GGOoY?~{?K7?O?KwF(9} y|;_{0;Wٹƿj|{u.>7K_t/?e._{ǾηOzOLJWّOo&zCi1ՃQ?sÒ$|]ӱQL*uD#)XbN Kog8|||~YT|_XļNa>U3d=S]~&|@vK'\r. +\n5zmEާP@z\I%a<zA䣃Q҄lr%HgGo:&iy":\n5WX5U 5Sl4EJC8yhoyQmGxaEzy@!EāCyidu H#eN:p#"-.d(9;~cRF g'ni R.w<2r3|ԫ>`dile7@fi-)3hCd @e -2rq G{~'D;`3krJ4uQഈy hEԥ߹:<Vòbu(~PlB(~Gdi4o-ʎmȰ_` ~S [`浼0ڋϫL[+]Ai5gݞ傐Jw2!6Y귥-_|a27/ޱegr2<<&Lj:g+u04AUh0<l҉I4*VXKv:if0rVbh3ء " X2u߶۸nx`lblj 4#Ffw%)"A66;Ann(:đ)I =A?Em3#zUJo.Ym|GCWOpS?19Uߎc凖V3;wlSW˰剬n8|@1jyrdbaJVQ@"+Zuf #q'-Xh☓΀SOќṣ Nk+EfgMMъx!&$Q%,QaQj|A#h7ۥfH݈(*RAm5/cBSD3[wD--ir(x,Hj)n]? 0ťl@,WF=+69>Xd;Z '#Ī2Gn%1"k3-Q hh3赛2 V^:w^F[`t6+Z`F dCA }d$oC"QnE ˘%\afED{f7DTϨ K"OQbxWTNW̚[ΰSc*ˠu?7TVԺd B߰p 8ٖ2&IԠ\Ob_"Lli=n`P6Fy%N+TdRiX'[L"8`TRmqb0H?C$Ttİ}hhXņ2,d+R4\FPM~4*y@T`e'{^-[PHW?= FHi-`iӰұ#@vUn{ݍPi/1tAHPZj|q.i֙Ƃa$ʠb]Ț̻l~youMHVUw-j`TM)! fV66A!l!rOZTi.搸`G^3spW+eZg-]uhJ{)(GbܾUl*4N[UNS ,}Q;A0t\@,2VPF˴",*⯟*2[= hV*cŒ8UyK\Dnrq,m7P-2f_Yj(MK.+_J&zil & nxa:ĠN$.?y6FLOOD |w$g5kv\le᳔GJ $ uVe_bQ}HZmUwd(T+ɓcb ֭`ˊX&6;*c?ɰز U)" ҰuiHͮnRp R-Tw^wd_+ C(\g /O2I29-2G?Jl(rE!Z$^dr`?j`&^*x^QRxZ*EIt1$&{R)^lLK o̽Rq~ Fx q܁'ݙ$W4'3K Q|'z,~'KpH;i@aG?-M95#M:d%PιϩLMMY:pnYwm>'e ~p)ֶPҢɈd/b(jC17+';\5ݟLfųAR>E5mz̀BoGv@. ɢ} 갊f_\XApVoMXm%c:uwkɨ^#V?0w5u~{ak,NFT}S"]myPFe5./. _&5VJ9 ®`:8 '#}c_ljDuiy4º:KJߢ&9Do>pI*=̦r ):FgP4 C#VN ˢ22 46lA,&8t*oc3 A#Yezo r:lKMήe!<h1ȄDW֠.rȑYiB?ǞO|ޒ:69>iMs[>.d Ji<7`[.xrՙQ#ҹsDWi[//WVk+ Ojml\]#Ojc5~quy;7'qai\}yNagή94F8X?#bî)\Ah^C KJPS9ӆ$MW? @PY (-&FmFu֝Yj;ts-! Y 9 0Emu~YoP`R0`Զ5XT܏d t-Q$I2rMu2W-lJl>Z=*Y <@RTM1bvHGWr-92ꉪפ3*y}2 VLm s4ŀ2JYl>ȸx-d,ܦJ|OZ&n -OeV2)S-+D%^ZE [UM"3ljc/qr"rB//,[VkV8*ꑿ΃3/wR'DID?'sN>^R|Rdp+ZC|4PQ\\)w5'_U`5 6%+`` ؄l"ӝ4DQ.fB^]_W㋰/&tǗ82Ѧ2@M%YX"91n7D:˨EFti:f M~Suڐ[:^K^vXQh[K%'h"@ lzp#X/3H8GmHqzRbjHl6*E<+W13X^ih{Tjp[NUS!U6UyT 3R̤͡K ݇M;YkC):5:^+W+x@L58{]KAiP̞eQhÏGy9 V Y^\8́r;^t斝gD1 TS@zͭMb'EڡRȩU]} `]obUDhl=(AFEɦ)_s:Iȫf-MQ4C&/۝ULb6Fv;n[q\qX,Yʪ'kɱKdL4!d1Yʥ Y$r7&s}HfY.]DU @Rh'碚 IZWO$< !M1R()LLyP!LYTႂV#IGk0eO^$+Fos=>$l͊ӡZ%)n*Šp#3F! o?>kfF:F׼pW*R6F::s]Ҁ?W@8l >k"UJ =&i78&ΰ̈ϗ<@VeT M< o-m^~3noM-yYChF2uW_e{d(3d 6>uWx 8Gl(xz)MC7UAJ 33T"qʜN@fҟp <.9/Jѓ_AHƫ߁²JWUع1^2yû6f?g("ʲ_q&wHK`8{QTs$g+uLDhISТybmٶX԰<I1Ɛڍf``E0bXȧa ̨ "[D*x&z딑o`eLȃګj,Hj\VoXV[p# Z;3LEљDu ? GYY^N"HES-խD '́H"ImpV)xoeX447^Wu}§g8쉇E= w]N~^_ 񤦳15|Aw-Q1fcLNU %}">fVS-He4xM=cma-ߠ˜0 ]gy'l|?=W;l#[0dKJȀEM?ȼgd(q5Ey 3aAd [`{.U+ j)鳿QH\fmiFi)8gvgH~I+u@%yB>نQ` )!s+J]8tZያXO\Wt&j݅oK7f܅%t|g#GC6wȅW0_6O8)\hMGE8UDɾ .U+FdݝYҼ+i3J?e}j T=tLrm1'/k2a]thX{dEŊQ ψZ?w~5dCm }bɮ!կ7m$ZQlHBvYӻ0=c UbhcwS WW/ 1h'_s9NHϠwGiG']g(R8{"(SծB),*hJ/X;Y4qv" v2IO\`>qҢ |;vo2mN3Q$$%Fauۀ/$@M 9CiW g9|ebGQ~[; U*XaU1 8Qge0aD\VŜfFWanc@H_v$cGs29~2glƎhVNlX.L(//nH ,b`6<=occS-o8tLYgrq`VTsᤌP ;4ru5:24MN?׼xldCO]rxq4E\f1o;۽p(Cl)=Yd!QvN/|EzB"M?bl1̐QBO63a ciE,7x"jĎ57A)bqntZD0&\  q$Fh%HQ͆@pѕMUK4I%D+%t3@h %\W+2) ZMs.A2KUjl_Ujb_&R9{ƖKAA!^nh *2{JSnAX'-\#E(nVn)#GE! A2Jq>k.3 d3W8ǝjb]f&dx ϐ)El4S(ꄬ_X](}z"Kլ}dI_/s٨f CC;>bF K C.P;4U{׹滦YayJljcV ݦÈƅ*}|Cx^%.GFCdd њHÁɻFv<^xN:o[jmy;tdh_F""ip%G)8=SJX&x{p?VH>Ca!|m6z_@m 6*" imG(t PNdMZȷ%k.9Zr,KN\,%nI #0/N_GzQx0'wZ dz~s=XsuK)Yv~Ľ$+Ͳ?퐈odܣuCC:o;ܠ› 636f7ۙ+3FŤl;Pj@obg7Ex.z;GsD@oFdp{Vc; B&Sf|$}й|ERӛhq9_e־[mr aBVplܥ(FCSAԃ̫cîvOTe9 P]ޫ&VߊX9T@AߤCEa21)kG\Xu>[ vc+0@$|/87 NH۸)9B(.);K:bṯd5}@!-fƱfG)} 2c\bkhYKO)MF4ucsJ-GE1ٔ.j|7&ލ+/O& ;8~lx1:x •o+[hT!5er;u5?i'4| em-APޏrR%W=D-VdkwXY=(e;UJv=TG+&;|AWshVYiKG6茏D `9␫!^_bUih5lUD3.ZPo+2W7E^{݇6vR_ˌVA'Qh]nt|o hlg[)E_ml7.xd[Fv;:zҀ>29Bhk#9\]eܸJJ`,1 / 72k 6kUȭ䡼׀\ξ,6h$5çp)|+1'i]]&'g H"|ۥaR{-=yNvZٝ+ מN.!]FОE]ɺ1*GB[Ƒ $dqj~raH\y"0DGJH>p;-S?, g.у]ø-W0nW amdxG~WBzc=4IQ |5Eۆ%-(Cެ<#ۗeopEaFסx"NWIF42eO!Cɯ8JоmmF@vwyFːBP`2)`ZKIdCൗOMh9& \"}SrHLa/AM?KBճ},iALQb 3MbRޮO^~b>g'b K](غuLnUuP&M<7ts4Lhreޤ3꨹&5q\|JFcX q&ȡCgayb46w{l1E1Cʔ7/n͉Wq6XUs!"iuuz"WgV)f>񖲛[Y^b6hM9V p^&Sl0BzEr%φ)ug",ML,eAAK?-]B~#I<@Jd ֝wgk)ұt9m*A1ԽcX1Š#} bF/ot躡{XI\۴G `FS},.Wb`%bU7fRMn!$%NøEt">$ AkF=\'r)T|РK+\7AVR;.gcNKV() LPӦR';MJaQ\C3cdTjyJF ("c`,-GM&IĖ*(rFJ!Q4x@ diԚd5ːv =- @(xKGBﰳF]ahKnCІq`v?y"'m6]>z- MǻBnmask+s W!L>#Q0ӆHp#% ȗDm]KxqXc aΣamبHb!̆*wXbm~nGUkV!qr7rZ> jmE:Qc(1q΢6f2 fNբ18g*^OC3 ÍqZBU0Shti|Wԓ443 [l 7mˏxC [};އi,e2lWZ7jҦv+2bВi(3iJ ;e{j2P!NґtD9oA:֊B&IYR[`f4ynA&*noT[9bhoutM^= ,3'*$(ۢW T~Ryy`|Mw _R܃w\5F=D&Q"~>rI]h 3)\vMb?@]ad [Zc%مŅŇXYV6 ppnQo ]8qc?]_QO:2BR,r[9iZezXksF__fXjZO&WO&N3mi^,)DHrd-.,be[ tβ*$O"ĴGD4=;#ĘWm9F3v(v^89#|"TY;޺PM9 dqV.]~kYݗiy*N)Ӧf *NxheB.[cZȠ$TPrh޸SHS(ZP?,3 q>.̳ ZFGA©v ~3?>{ꇾ,C?69̛fSF^ FI9cŭ lP*>5R+GaE?:]/:\yy 4FxKYNĔ;?F}"^,j3LJUzu c͔kDr:9|fE aHnJˈۙ7Faä́f/ל4 ^Byiɛpik3:\.ҥR(Ytme8/|vÜg>r6MdlaOerl—(Uu\$Y! AN/ā;Lbf! _@8 ̋fiۺ Ӥ Ha ]e*f0N{%^W$[~ s7>0`="z,kP\#OPZq7ᩴصVE/Fh2P5. 4\v)PWNqPC_h+0xH7 IxHU zSgLK/qӖħr0%$HϳK/ $`g>wX 4ENPUkHZE1ɂd;x\Ei඾=*qL2< hcߎEKH=kB\Ycj8LBn渝Cxܯn&[ f UsP9ܦ[MfuP:`-9Elٖ>wPڬxuiIX :Uf2M -CwɔoBPD)8H3ڑ6SPzeI'Qh.9Џ,?P?(~|-c2D#DG\MbL(,x(v(cLwu8'WT:lc rGGѿhzM葉rˡ !W6[j]<^ޠ}:bce'm@R7@կ]FM&K=h{׸ Z?PNf¤s^W68Z^KKڿv 3kfnag0)b:4`^%fGPuݝe8uZ-m>(̶UVdn!l4wVS* dG99|N9;iaLB2~IA]>7$+@yBU^UAYKͫLyׇ6٧" =y׵C_Ą\ ,\NbTA^bl2r t <ێCʮƊ(AmLsu:`us &JsvML{ RrATħ=t>:3Bm-RVrlzui * xMsBVXQ*ˇL"D nݢȠQoӞUx nC0M7 jhNR7gnгq1UtȒ8/cv׽% OաvYlf˚&J~Y9,tvV2Ut[gáLQv|k'M",ޤXD t|3Q25`'rlSHV,4s]2uɸ%k^w zhܓݦ3yTख़% Ϣޮ7~3U;П0d՞S_fntOWEqf9tɨKAtԅ=4q|*TeRCEgdM".B%3UF|GicniSToj>_fȼɷEJ@Eٵag/3.&0]AgmD79 "Gsa cN\RKȲ _5,K2;+u L!~Mt +!<刅zqxٲkfXX|d` @ %M DlJmetadata.gz0000644000000000000000000000146300000000000013405 0ustar00wheelwheel00000000000000KUo0_a h&&44D/ucENrML;k9;I6g:|1xdE#7ec>K ͮz>.gUu1>QƳbe{J& o6ϷWo>]=,]hfqӣXsU:.]t}j۲7P7qŊo ?\;'!jt7p,qlI09v6 NvВͧܵDmVUv{ҙ6/.|D% i0vDZ,!|;$D-ַM/E5*޲gVɴ`Lj`C Ҙ&2:gHV#BaRq;{ \߽^@j hhɉQy)yhx prll~,^ZǗu+Y85 ?% N4/Nd [cm]0M,SƠ#8qEFTv9o6⑃:$mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/info/000077500000000000000000000000001446701454400247675ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/info/hashdb.compact000066400000000000000000000001231446701454400275640ustar00rootroot00000000000000--- 2.0 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/info/hufflepuf.compact000066400000000000000000000005751446701454400303320ustar00rootroot00000000000000--- 0.1.0 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd 0.1.0-universal-java-1.5 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd 0.2.0-universal-java-1.5 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd 0.2.0-x86-mswin32-60 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/info/jbundler.compact000066400000000000000000000107731446701454400301540ustar00rootroot00000000000000--- 0.0.1 ruby-maven:= 3.0.3.0.29.0.pre,thor:= 0.14.6|checksum:e9897fe33f35b44057a7d64c3af6f0f5d3459f5b6ac544b7d20c844710deae55 0.2.0 ruby-maven:= 3.0.4.0.29.0|checksum:7e9b594e2589fb102ed938860a37102fb0622dd5ec197895100882688444d545 0.2.1 ruby-maven:= 3.0.4.0.29.0|checksum:6366c69f406cd5958404fde5e2aa10f4a367fccb40cbd8e5102263bca587f2d0 0.2.2 ruby-maven:= 3.0.4.0.29.0|checksum:8616b50c875d35c4281b958f6ecbb5da6c41cabb28f7eb919e186090ff676ee5 0.3.0 ruby-maven:= 3.0.4.0.29.0|checksum:800828d35d7ee143f50e134dcadb7657dc5fad0737b3ef36ce040463d80e2d64 0.3.1 ruby-maven:= 3.0.4.0.29.0|checksum:8af72619f93348861bd4e93272d63dfceeef95caf6600721cb6842d1d3e72c94 0.3.2 ruby-maven:= 3.0.4.1|checksum:029b00e2271698ceb046f0b8f390e84bbda794fbd1970be35f7b1d5315256847 0.4.1 maven-tools:~> 0.32.1,ruby-maven:~> 3.0.4|checksum:5535deb672dc83de90e50ea6bf2cbf7bfd1259bcd1dcb18dffbca132da8a5537 0.4.2 maven-tools:~> 0.32.1,ruby-maven:~> 3.0.4|checksum:ef4ffd2a6faa7d41c4bccb8b1549bbc7343151bcb7d9e92e3aeb76ffb3df7a35 0.4.3 maven-tools:~> 0.32.1,ruby-maven:~> 3.0.4|checksum:f472779ec1d839a28acd68310947d03c6c28c1f8fc9184bba1942f325f0be316 0.5.1 bundler:~> 1.2,ruby-maven:< 3.1.1&>= 3.1.0.0.1|checksum:0d7fe5bd44250fc09e22d4df38c06e86b8dcb0025901c8dc83331f1cd85dafd1 0.5.2 bundler:~> 1.2,ruby-maven:< 3.1.1&>= 3.1.0.0.1|checksum:e0afbf8d33e02972109394d079adb7485647bbd634bda9eb2c967629f0534ba9 0.5.3 bundler:~> 1.2,ruby-maven:< 3.1.1&>= 3.1.0.0.1|checksum:fae4ccf2d140f5109c87fe8a22dcbd5bc1c2c5e68e8e6a261217da97cdb8130a 0.5.4 bundler:~> 1.2,ruby-maven:< 3.1.2&>= 3.1.1.0.1|checksum:bb25ab31a86dd57def0a20a3f0825af4d6213937b19d02caf3dd956f0f60447c 0.5.5 bundler:~> 1.5,ruby-maven:< 3.1.2&>= 3.1.1.0.1|checksum:487bd7bc231adc21fd79740ae35117845d16403d051ecb55192d1336c2e83210 0.6.0 bundler:~> 1.5,jar-dependencies:~> 0.0.4,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:a06eb669c5c9848692f5d0e970ffcc2743eec1fc15074a68a36a3f30d6f440ef 0.6.1 bundler:~> 1.5,jar-dependencies:~> 0.0.4,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:ea75f76d1b4e45e6e1d41f21956c462a3220f41de3483140178d6f8975af846a 0.6.2 bundler:~> 1.5,jar-dependencies:~> 0.0.6,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:40d06702f058788ebef5c649ec1ee9e2b472fe1a05e2ecc57ede9293bf96e5ca 0.6.3 bundler:~> 1.5,jar-dependencies:~> 0.0.6,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:d03de479a1daba4e423768a78d894862dbf276b624b7c84ca97c70c14853a164 0.6.4 bundler:~> 1.5,jar-dependencies:~> 0.1.3,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:cc04f5c1b10d6bbfb5560e90347c7307b600f5383c99922f4e18b49494f38878 0.7.0 bundler:~> 1.5,jar-dependencies:~> 0.1.7,maven-tools:~> 1.0.6,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:6bb05ec851456c95caf404af3609c9d2d3bf8895c402b06367c039029f1efd53 0.7.1 bundler:~> 1.5,jar-dependencies:~> 0.1.7,maven-tools:~> 1.0.6,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:93aa7e97d1e4f12524f4744d357ee3f35602da1397b018dacb30580ad0a1e805 0.7.2 bundler:~> 1.5,jar-dependencies:~> 0.1.7,maven-tools:~> 1.0.6,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:f945d719d885a271d68dc925390bb3426cf9d37388d5259320a1355f3882596c 0.7.3 bundler:~> 1.5,jar-dependencies:~> 0.1.8,maven-tools:~> 1.0.6,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:b4871c17e232b2239c8c4fe0658e1ead166f32800cd48765789b98d4ef7e8dfb 0.7.4 bundler:~> 1.5,jar-dependencies:~> 0.1.8,maven-tools:~> 1.0.6,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:ec030ced26e345f2c0f4420a56759ec007b25b0a6739b0134da4383747cfab4e 0.8.0.pre bundler:~> 1.7,jar-dependencies:~> 0.1.11,maven-tools:~> 1.0.8,ruby-maven:< 3.1.2&>= 3.1.1.0.6|checksum:db0a74e4cf8a432191d81c7179a832292f0f469dff37983d2aa01ab53813d354,rubygems:> 1.3.1 0.8.0 bundler:~> 1.5,jar-dependencies:~> 0.1.15,maven-tools:~> 1.0.11,ruby-maven:>= 3.3.3&~> 3.3|checksum:6a97b62b181f79ea545c032ba1a5fd64d7df86ea7695a9487e016a1487494039 0.9.0 bundler:~> 1.5,jar-dependencies:~> 0.2,maven-tools:~> 1.0.10,ruby-maven:>= 3.3.3&~> 3.3|checksum:6a6eb2e7923fe6c61418a82ddcfd5f7dbeafbcf126de042c55fa8ca96ba829d4 0.9.1 bundler:~> 1.5,jar-dependencies:~> 0.2,maven-tools:~> 1.0.10,ruby-maven:>= 3.3.3&~> 3.3|checksum:ae09ed719db84b43c6cbe2b4f3bc9291cd855e1b800a6ce70978cab71bf9f46e 0.9.2 bundler:~> 1.5,jar-dependencies:~> 0.2,maven-tools:~> 1.0.10,ruby-maven:>= 3.3.3&~> 3.3|checksum:975c909a72f203d67a78332847ecbce3048331d839c7da5b264358bee882e85a 0.9.3 bundler:~> 1.5,jar-dependencies:~> 0.3,maven-tools:~> 1.1,ruby-maven:>= 3.3.8&~> 3.3|checksum:a1974dbdba6c13ad6d4948cbf8d1324fbb9a80167356b124654b2e2ed86b5376 0.9.4 bundler:< 3.0.0&> 1.5,jar-dependencies:~> 0.3,maven-tools:~> 1.1,ruby-maven:>= 3.3.8&~> 3.3|checksum:e280242720904665bd000d7cd82ff2bcca443b589999d0a9e3e34e5bcabf5e11 mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/info/psych.compact000066400000000000000000000316041446701454400274710ustar00rootroot00000000000000--- 1.1.0 |checksum:d324d5d1fcf293f45cc8c3d23edb2aac2651bf6de5adc665ffe47e6aed064f34,ruby:>= 1.9.2 1.1.1 |checksum:97d159dc4735ed28a73c26d9aa2fe488addd1c075081d2ae43b260ce6ad0e761,ruby:>= 1.9.2 1.2.0 |checksum:dea2772eba66af409ed35f176a731d13260f71737c889322aabeb44aea0be047,ruby:>= 1.9.2 1.2.1 |checksum:c0318a5f932cf740c86ab8559533419ff749f242526d6131327332f6f613501a,ruby:>= 1.9.2 1.2.2.rc1 |checksum:5d90fb89fb5e10ae49a64dec5ecdad869d0f696de76c925deb5068a21a5830c5,ruby:>= 1.9.2,rubygems:> 1.3.1 1.2.2 |checksum:c028176ef403fa1eae6311d8d721b01cf59860b48a43fd2bed54e3ba7dfbc0d3,ruby:>= 1.9.2 1.3.0 |checksum:5a03572c69a92bcd01dfd3c196fda7ad823a5473c79c1f24db159608962414d0,ruby:>= 1.9.2 1.3.1 |checksum:c5b544915d804943ad666ed509fe48b06b33f00dcf2608a83b211491991a10a3,ruby:>= 1.9.2 1.3.2 |checksum:4cf1159b78f0142fa3f240919b60bd0d2a7d7cebe6afd84ed22b95e7683d42f4,ruby:>= 1.9.2 1.3.3 |checksum:8ee83fb9a40a83b2eb3aecdd3d455c2e856f8a492ef9983a67c2b62ba7e5d754,ruby:>= 1.9.2 1.3.4 |checksum:a4e4525592059522cc5bba44bd8223dabc29a47a7f48b9e51ce0203617f853b2,ruby:>= 1.9.2 2.0.0 |checksum:d394b18c83790e0a5ed95f5ed847bca178f0ba12a550da495cdcd8720592e708,ruby:>= 1.9.2 2.0.1 |checksum:2d85b6e9d167c668ff955ec9edd767e6f0075bf55847ec968ea49f4ef4114d7a,ruby:>= 1.9.2 2.0.2 |checksum:4bcb66a0159aff5d8c4c91cfac789dde532f952611c41ef11b44d9679498f88c,ruby:>= 1.9.2 2.0.3 |checksum:b4039e3e0aa465aafb83163b300f1564309a4d6b5806568edadf6177837a163e,ruby:>= 1.9.2 2.0.4 |checksum:39ce00d0649cd3fbb3f87d3dc4b7ecd01dc8ffd84173a33963d0f55f7942eb2f,ruby:>= 1.9.2 2.0.5 |checksum:4f8458fbf1628df11e973d62a1ca7d3817a3bb11214aadc984d8caf9c05ec55e,ruby:>= 1.9.2 2.0.6 |checksum:dd3d8662d682e771bc2205b44de7e241c30869eca8395a02776aca878d678d00,ruby:>= 1.9.2 2.0.7 |checksum:093ffdd8ec8deda3006c4b255005ac85be19b8ed120836040bf58d8656da326f,ruby:>= 1.9.2 2.0.8 |checksum:0dcaf5c3c5c34ad7389079240723f9e2fa28924b358a2fdb862b7ed3c11d8116,ruby:>= 1.9.2 2.0.9 |checksum:3e32440c4262e421a7b0c23cf1739530ed152f8da191ecf0c8245be3923f3ce6,ruby:>= 1.9.2 2.0.10 |checksum:69c10325171ffba7d5b2669bc84519804c0a4498dad8bf08f149a1bd2642f21e,ruby:>= 1.9.2 2.0.11 |checksum:9a0f04a59098c7a16495f03d88421bf2edf9067f2a37c4026bb82eb069ef465e,ruby:>= 1.9.2 2.0.12 |checksum:879990cb62844898fec506f1aa7012ddb87c55ce8f7bbc89fc607e2ff638aa87,ruby:>= 1.9.2 2.0.13 |checksum:731e44df80f1fbe28b7d753830b138f2100c7cb9ff52137a061c151af474fdb5,ruby:>= 1.9.2 2.0.14.pre1-java jar-dependencies:>= 0.1.7|checksum:f33e7cff27d4bc21bb5e181c255159f9a3cb05f1b7e0cebc967637c3766bd796,ruby:>= 1.9.2,rubygems:> 1.3.1 2.0.14 |checksum:5a10f4110ab3fed7f78911fdbb9986fc023e8c1a3d025cac1467b1da758d3086,ruby:>= 1.9.2 2.0.14-java jar-dependencies:>= 0.1.7|checksum:7b2848f2259873c1347d3f5c8071bfd335287472313b6e365af1873327468ab6,ruby:>= 1.9.2 2.0.15 |checksum:ac7afd35a2e6ec6eef08a3c7b5e1127be20e6521b4c8346988acd3d46548982f,ruby:>= 1.9.2 2.0.15-java jar-dependencies:>= 0.1.7|checksum:60a72ea1bc1ebfc4886eb8caca5ea09fe21441fd087b7e2af7aa9f0564fc9db8,ruby:>= 1.9.2 2.0.16 |checksum:17e2e26295571de42a494e3cd74f7d0d8990e87defe5b1c4a1a3f958c26a1d5d,ruby:>= 1.9.2 2.0.16-java jar-dependencies:>= 0.1.7|checksum:188f700136ea3854a627d4151654601daf641c4db103b6dfcd901846ebc7fc0d,ruby:>= 1.9.2 2.0.17 |checksum:e85529ced4f91728a63c945f8bdf5206e71fc3192b9ac0e7ba251dbf0d398513,ruby:>= 1.9.2 2.0.17-java jar-dependencies:>= 0.1.7|checksum:ca0587385301145f528baa8311a956c9db575237bf4d743557b678e3f2e3bf58,ruby:>= 1.9.2 2.1.0 |checksum:92bf0d9bd47e4fafc74f6fad89e207f21348878c201ac36967ec587526d3dde9,ruby:>= 1.9.2 2.1.0-java jar-dependencies:>= 0.1.7|checksum:18acf02957c7d0dead47954c2524fda308d9ebf6dfc02c2f47c32c0220be8b34,ruby:>= 1.9.2 2.1.1 |checksum:5e448c008cc3da4fdc32bc2163a2cba851d1510469a59ef8c7735787bdef0d03,ruby:>= 1.9.2 2.1.1-java jar-dependencies:>= 0.1.7|checksum:443591275ae686e4bb656074c733bbced42ee104529e194567f243fa40da00b1,ruby:>= 1.9.2 2.2.0 |checksum:291fedab5e36e072322b8d57c98a6c3a9f1a35b5576a7d51eb55ccd41482a723,ruby:>= 1.9.2 2.2.0-java jar-dependencies:>= 0.1.7|checksum:78df0b96c61ccf5559be69c0f1a4876191595b8c3f63659f5f42049f78de52fb,ruby:>= 1.9.2 2.2.1 |checksum:a3694d16c426b7d49670dc18c05f3697b1a365db3953297aba8dec335c77a823,ruby:>= 1.9.2 2.2.1-java jar-dependencies:>= 0.1.7|checksum:6f9337f75a33b091a014d62dfbcbd00e257d01aeff92cea4c22ab3338c178e93,ruby:>= 1.9.2 2.2.2 |checksum:fe2b5ad9e8e58f28921a76de5808a8bb828a13a3daa0942f2e8c073f46d54175,ruby:>= 1.9.2 2.2.2-java jar-dependencies:>= 0.1.7|checksum:82a4f81b863b035d28cdfaa803fca4c5018022f7458dedc91cd2ddc0785100da,ruby:>= 1.9.2 2.2.3 |checksum:93214f74a5f4ac40c3c74a953111453777986e3ed3151f552c6010ebffb724b2,ruby:>= 1.9.2 2.2.3-java jar-dependencies:>= 0.1.7|checksum:b500bcf23703d4dc12787093553b79978349f90f4b382dc2733c608f1899eec2,ruby:>= 1.9.2 2.2.4 |checksum:ead57d2c55c6a691efa52f068f16be04a2a56b8fd0b5fb1a80b1e3699401ced7,ruby:>= 1.9.2 2.2.4-java jar-dependencies:>= 0.1.7|checksum:37ee70e7573d871fbccbe448457202b56c69ac331f3017d4d3f50d87500199fd,ruby:>= 1.9.2 3.0.0.beta2 |checksum:78a19ffb6c42039c53e06f7188bbd54108e4a44a35db42d16bbeef80049a6df6,ruby:>= 1.9.2 3.0.0.beta2-java jar-dependencies:>= 0.1.7|checksum:1c47b1b872e659453048533d2f5e8c395ea76f25888f616c5237305faeed7e86,ruby:>= 1.9.2 3.0.0.beta2-x86-mingw32 |checksum:d4723578b502bbd7c355503beb24800a8240cf5d271b6e69365ce9eb6dbd6e60,ruby:< 2.5&>= 2.2 3.0.0.beta2-x64-mingw32 |checksum:c09a8f18b0fab95097a19079acc12d7f8264c36b074a3fb94b70f580ea283aea,ruby:< 2.5&>= 2.2 3.0.0.beta3 |checksum:64fa0e8b707fe875a9ec4f5a480e3b45828a9f75cab50ad67fd063b09eb95d45,ruby:>= 1.9.2 3.0.0.beta3-java jar-dependencies:>= 0.1.7|checksum:bede239c1f77a60a5190bf3a3654dc455359b77441d5bce6a8768084d55e70b5,ruby:>= 1.9.2 3.0.0.beta3-x64-mingw32 |checksum:10edd472c1aefcb739fd6e89163a744651cd22703409149882acc4b7ffeea7a2,ruby:< 2.5&>= 2.2 3.0.0.beta3-x86-mingw32 |checksum:ac667fc18f10c605eda2da4154f105ee4bf6bafbe1bfa370ee1dcc0ea53db624,ruby:< 2.5&>= 2.2 3.0.0.beta4 |checksum:d20492d3fa880efddb52fea74ead9e52a596de5f0c211e21e3b362a8985959af,ruby:>= 1.9.2 3.0.0.beta4-java jar-dependencies:>= 0.1.7|checksum:17ee095aadb3a92cb42dab47bbc242289215f505fd3e6ab7c8adeecf0ceb1a50,ruby:>= 1.9.2 3.0.2 |checksum:afa73d8022238ed8d1f67ed7b8a1f2ea42174e9e7e5e62ad93bea8effecf3e3d,ruby:>= 2.2.2 3.0.2-java jar-dependencies:>= 0.1.7|checksum:3a5531f63d72df41762dccac3bc6723cceea123accdbca33b6f32b5287c34705,ruby:>= 2.2.2 3.0.2-x64-mingw32 |checksum:7202ae636e49c3ed407a1b312c0f2c073e79701fc550b9b3a447fced98ff62a3,ruby:< 2.5&>= 2.2 3.0.2-x86-mingw32 |checksum:bade629592fc3198bd974f6f08b67ac0bde9c6693631b4f881861dbaebb35540,ruby:< 2.5&>= 2.2 3.0.3.pre1-java jar-dependencies:>= 0.1.7|checksum:47938ebbbf331cc9d0b927a28d7411f2756a510303a687eede652605d99ec4d7,ruby:>= 2.2.2 3.0.3.pre1 |checksum:e438011cfb0668e5282308a57d620d90f3bac9aaa74cb9c2ef2775db7c41d4a4,ruby:>= 2.2.2 3.0.3.pre2 |checksum:1597fd576102289bab2a8c09127fb4c597c482c9173ada054438fbc67f1e2552,ruby:>= 2.2.2 3.0.3.pre2-java jar-dependencies:>= 0.1.7|checksum:43a8f9d5cfc3c13c4de18b5a358672e3473606f51ac07dcf9860c6ce8fb98fcf,ruby:>= 2.2.2 3.0.3.pre2-x64-mingw32 |checksum:c6dbfe119804ddb45746a695b86c974ee2833a2aa5e9d28668af9cec1dc07e99,ruby:< 2.5&>= 2.2 3.0.3.pre2-x86-mingw32 |checksum:55fa54e4055373d296fed4c6d32ee3771269bf04e3947bb440ed3b86968bc3f4,ruby:< 2.5&>= 2.2 3.0.3.pre3 |checksum:935e0cd4bdb2d1cac31dda1ebed0f1c6449fbf40294601a7829744f75cc96e84,ruby:>= 2.2.2 3.0.3.pre3-java jar-dependencies:>= 0.1.7|checksum:a59605b3f86edffa30e6f208521589505a18ef0829561d88511ef8bde53442cb,ruby:>= 2.2.2 3.0.3.pre3-x64-mingw32 |checksum:371b1fcf37c56856dbf124b8497fdbc55a7b619c7545abf56b26dd3fe326fe6d,ruby:< 2.5&>= 2.2 3.0.3.pre4-java jar-dependencies:>= 0.1.7|checksum:24e655b9cc196649d76ff41e696460eb2d1222348e2f24d973bb892c86af63de,ruby:>= 2.2.2 3.0.3.pre5-java jar-dependencies:>= 0.1.7|checksum:5b115280af0d2176c186517ba3ae1518814f056841b4117ff4a613b73214de09,ruby:>= 2.2.2 3.0.3-java jar-dependencies:>= 0.1.7|checksum:b27ced88e52c1a50b0ecb831ce6a05129b1ddd46a8722517ef6a1af32ae235d8,ruby:>= 2.2.2 3.0.3 |checksum:ea006cf47bf92229d5972b7225c253c751b8fed17538d099b0e1a32be6d066c8,ruby:>= 2.2.2 3.0.3-x64-mingw32 |checksum:1457595ee9709644f1af12a7125b1ca1f3ee53190fa5d66aac759090e903663b,ruby:< 2.5&>= 2.2 3.0.3-x86-mingw32 |checksum:658a41d92547f3ff0161f4b8cf436b95c72da47ef7429ec42af3386b6b69020e,ruby:< 2.5&>= 2.2 3.1.0 |checksum:a858cf8d4bc636fd6dc635131c4df24d25da910278a873a0fbe4927d17155b26,ruby:>= 2.2.2 3.1.0-java jar-dependencies:>= 0.1.7|checksum:911e98a580860dca16fb73ec59114a684ce89a34815a01de455077313c68f205,ruby:>= 2.2.2 3.1.0-x64-mingw32 |checksum:460ad06ecea53316c4ed27c54720e51bc1d973eefe09de3faf4e10d4311ebdd5,ruby:< 2.6&>= 2.3 3.1.0-x86-mingw32 |checksum:2453109c60cd74c097d4570043c6c1c8ebf3161fc437672e585d88b690cd91c7,ruby:< 2.6&>= 2.3 3.2.0 |checksum:b896027249300cbc15e03c64a28fef6983458c572306bb86326d27394faf8e39,ruby:>= 2.4.0 3.2.0-java jar-dependencies:>= 0.1.7|checksum:79ab89dddecaf03828922068035d2dac61a648f79b182648523dd027151c292e,ruby:>= 2.4.0 3.2.1 |checksum:0236a5b255e0a26ca9c640e3422c13d17dca72afd4aa68109be09c410a67805f,ruby:>= 2.4.0 3.2.1-java jar-dependencies:>= 0.1.7|checksum:7f3427f44d7361c309bfa140446f2d52658bb5334d5e5471727c34831efb48e0,ruby:>= 2.4.0 3.3.0 |checksum:14c0a2e194ae1b1c1ca96b10b4e8c36af1642dbf4fef25a6518d9b47706a1965,ruby:>= 2.4.0 3.3.0-java jar-dependencies:>= 0.1.7|checksum:8308aa5998667aba6fd4636ded57c5d0dc47bdcb9c4d9be4ef134d3e75428612,ruby:>= 2.4.0 3.3.1 |checksum:2a01e5eb59b1a80d287f0b5e3c980eca5e5609c811eb7f7ee0f7564254dac48a,ruby:>= 2.4.0 3.3.1-java jar-dependencies:>= 0.1.7|checksum:de1c962898f84b925e207a163b8b6e9fe7c00d59ff39dbb5d545d4b1d5fb49e8,ruby:>= 2.4.0 3.3.2 |checksum:c56a258f2382ec8809119c26e0c10b8f5859bfe1fef8abb263901075a7e52a82,ruby:>= 2.4.0 3.3.2-java jar-dependencies:>= 0.1.7|checksum:92efa6eaaf14d4d5a1ad3f57f803b7d23305755cd8cd9e272fa3fba16daa6a4b,ruby:>= 2.4.0 4.0.0 |checksum:08603aba1fb1974de3e8353016d5a12e0300a6a801bd63fd786369d43a78dcd0,ruby:>= 2.4.0 4.0.0-java jar-dependencies:>= 0.1.7|checksum:23438e71005f076573f9b9cd99543eb3bcba4c52ac560c49fade26823cec92c3,ruby:>= 2.4.0 4.0.1 |checksum:eda0eeb95da45986e9086b07c8ea269104035be956dc3bf6e8ab5a9905dee5c5,ruby:>= 2.4.0 4.0.1-java jar-dependencies:>= 0.1.7|checksum:c0b636ae2ee8cface0a5718f93f3b220d03e9c45d235ae0316b90dcc8ff30ce1,ruby:>= 2.4.0 4.0.2 |checksum:99e5a57d01eefbb7f9e9266ed9a9960cb9c2cfed77028fec0a3cfc08f11d64af,ruby:>= 2.4.0 4.0.2-java jar-dependencies:>= 0.1.7|checksum:7e8ee809bcfaf896ffcf945fda931b6be8d7783439e70e87c67000be119e3947,ruby:>= 2.4.0 4.0.3 stringio:>= 0|checksum:c75238c1a201c37249a5403c23442ce0647d5a5632306856c5d85a5db227fa99,ruby:>= 2.4.0 4.0.3-java jar-dependencies:>= 0.1.7|checksum:4a6bf752fa70bf481419387c1bc2e6f9a735f878b1fe666df6c6b58f24fea969,ruby:>= 2.4.0 4.0.4 stringio:>= 0|checksum:82fbfc7c10caf87aeae9d7010574db2de4f8f0463e76a184cb83d85907f85430,ruby:>= 2.4.0 4.0.4-java jar-dependencies:>= 0.1.7|checksum:1ceb672d703af0742367e98291dc118cbd1aec82bc3231d94ac850f19271898e,ruby:>= 2.4.0 4.0.5 stringio:>= 0|checksum:1ca8744356fcf6e2caa40c84c0160867c6537b6423b6b8e85fef2ea102a2cdab,ruby:>= 2.4.0 4.0.5-java jar-dependencies:>= 0.1.7|checksum:081c716e8a07661896392d053e2b9067b14f0bfbd823e70814d2fc0b884c31ff,ruby:>= 2.4.0 3.3.3 |checksum:20aba2cbb1c08b168ed7ba6dfb98ce3921605c18e46dfbb28d3cee4277673fa6,ruby:>= 2.4.0 3.3.3-java jar-dependencies:>= 0.1.7|checksum:df479b898141024723f9437a2cf558b9ff52f1c62fb445da8b8d91c0448c6207,ruby:>= 2.4.0 3.3.4 |checksum:f0aae8574d0c86b711472e6a57cc036655e2549f02390ca7266f3b6d1814d1a0,ruby:>= 2.4.0 3.3.4-java jar-dependencies:>= 0.1.7|checksum:9bb77527613d89575871b7a4e535dd2fce9674ffda46033f42c7ee85ad84358d,ruby:>= 2.4.0 4.0.6 stringio:>= 0|checksum:f70425c3dca8d8fbe4c1de7270d921e35eb6eb44cf2b2e4f961dc8031330b876,ruby:>= 2.4.0 4.0.6-java jar-dependencies:>= 0.1.7|checksum:78f8708f8b139ee9b258c2f51b4d55dcccc8e7f567f728ba2f9868685bec8623,ruby:>= 2.4.0 5.0.0 stringio:>= 0|checksum:fe1b31d87cb899443cda72e2ed8fc372578dc0cd4442c9ec270ae3d8d1fab747,ruby:>= 2.4.0 5.0.0-java jar-dependencies:>= 0.1.7|checksum:842f121c03f7a4f72b4f328106a54e7a449652d3877a9837e5c743cd26dc62c5,ruby:>= 2.4.0 5.0.1 stringio:>= 0|checksum:43264252cc33b8e626fb940cddc7379d00f7583500680da32c74a54bd9b000d0,ruby:>= 2.4.0 5.0.1-java jar-dependencies:>= 0.1.7|checksum:c4a94895e325d326063f9d53f5e4f231a5df3a6e593ce9563d19b35fe11f800d,ruby:>= 2.4.0 5.0.2.pre1 stringio:>= 0|checksum:42c463a379cccbd94a881da63e87bac710d85d804db2b04951a09735f5bd7d91,ruby:>= 2.4.0 5.0.2 stringio:>= 0|checksum:f7a9ab55191c6c04eaef84c804f2e6c6d9eeafc5f37a35d388d15c4c76165432,ruby:>= 2.4.0 5.0.2-java jar-dependencies:>= 0.1.7|checksum:ff0e49f36964b33d965e2d3fd7af9b940bcdee5dd659b4206baad218c8d80c5b,ruby:>= 2.4.0 5.1.0.pre1-java jar-dependencies:>= 0.1.7|checksum:515acf3a71f6eb8ab041c0508c4e510e95cdc9c12fc7c585422c16c0baa28d76,ruby:>= 2.4.0 5.1.0.pre1 stringio:>= 0|checksum:b7b470045ad149ea48272b532d414b8ca01fcf60407e500bae7f7dd0b293180c,ruby:>= 2.4.0 5.1.0 stringio:>= 0|checksum:7f17a4c4d89eed786eac4a122cd1a7092679c524d2576d9e0e6d6452d6aa4ad7,ruby:>= 2.4.0 5.1.0-java jar-dependencies:>= 0.1.7|checksum:c1e1d90017d0bd8735ac55dcd9ef0007c414eabc2633972d05de66698bd471da,ruby:>= 2.4.0 mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/info/rake.compact000066400000000000000000000222031446701454400272600ustar00rootroot00000000000000--- 0.4.11 |checksum:ceab46efc69e21259f97393a92d1f4ec29582ec1137545183abbd11b26459e94,ruby:> 0.0.0 0.4.12 |checksum:0e0d9357893053a369e7f9f3fc13eb4a61aff3058dd419fcb61f73d762e0b9ed,ruby:> 0.0.0 0.4.13 |checksum:29bc67c0b4668ad2e431de0d06e7501577202e85c04b16608bc748718daced10,ruby:> 0.0.0 0.4.14 |checksum:6c164b4dc70b96746fb1653d611460ec605cb17e6773a670b956a31242da4e68,ruby:> 0.0.0 0.4.15 |checksum:308a4187f532a694d81a8e111a3cab80bca72b9cbb96923bb1b8564eecf55911,ruby:> 0.0.0 0.4.8 |checksum:d71e9b6d7776fd8293eb5d28ca3cef33b4aa09b8045d4ebf35baa5ba575bfa86,ruby:> 0.0.0 0.4.9 |checksum:4a74e2893f5ed0304f8b6c7cd8f46167e116b774f70e12b432cfc8915bd9a020,ruby:> 0.0.0 0.5.0 |checksum:8a77471f03ffccbaf1837930370d2a03c5aa764d694bf60a26711223414faf23,ruby:> 0.0.0 0.5.3 |checksum:8544394c7e83c56e4856e58ebe2f85fadeff981dd8c3361ac81a7b43b4305855,ruby:> 0.0.0 0.5.4 |checksum:dec1f52850b86bf4dd42a8d35931957fff2fc257345a91c5ae3614154acc814b,ruby:> 0.0.0 0.6.0 |checksum:70f6539518e9e3a487b04cf1e5bc6b2d40da4672996eb732fa41fa28069a1d8a,ruby:> 0.0.0 0.6.2 |checksum:42218787f9f570afcd9770c01b56f76ef41b572df648d5f1c06132829150fd19,ruby:> 0.0.0 0.7.0 |checksum:0a984cf90ed300af78f345de7e8b8406ef5a8f0c0a629351506c6d266df75546,ruby:> 0.0.0 0.7.1 |checksum:053b509165221b9cd568f1fe14bc4a8e4fb08faf0f069c7db9c5f9ee772f05bd,ruby:> 0.0.0 0.7.2 |checksum:0d7a8992692c61c70b6960a959a23171fa513beb47096fa7c8970a19477b99ed,ruby:> 0.0.0 0.7.3 |checksum:4ed1dcade70490ee45fd7eba5e2a831675594d789e5fecb6da1cc525b3b991b5,ruby:> 0.0.0 0.8.0 |checksum:8b7c3eff140ee82d38c9a504e16f54876fd619296cdecb006748f01bec3b6a81 0.8.1 |checksum:7cd2e89c7736a7829f1fbc2a2ecbd7f911ee68d170ea31ad2b8277b943380227 0.8.2 |checksum:6d932c26000dbbd95c3a059e11239e2a525dd9d1ef9a26168ef3919d1e23292f 0.8.3 |checksum:c4792392fa21fd3b00b4909947cff70dcf327ebf07b86858a35b711f7391db9c 0.8.4 |checksum:ce856915b6b65a9f3fd5689a88f39010bbb8a7a68e685beaee4e1bd8687b7d65 0.8.5 |checksum:cb39a683e0756954f12e54c841c8670931af4ce7fc4751e28d05185008e9c837 0.8.6 |checksum:49f8f701dd28a74eaf2587bd3915856fbf865142e7167d6ad1c2231a7c275cd7 0.8.7 |checksum:10b37bdad695497c98aa8d7632e2aa5a589ddae2abaa42d24e5950de4ffde10f 0.4.10 |checksum:d9cdf5e13126b304f390080283f62038cf2c5eee3486c266ff028db08dadbda0,ruby:> 0.0.0 0.9.0.beta.0 |checksum:b0e98e47b19fbfe23cb0a3d76104212f1a09c9ddcfd8e364616515325684129f,rubygems:>= 1.3.2 0.9.0.beta.1 |checksum:054b5bb2de435d649b7a17aa15c221f9b2aa98adeb54580fd058d68feaafc4e1,rubygems:>= 1.3.2 0.9.0.beta.2 |checksum:59c3c67cba5a48e3dfaa509cbe6af1425954db7f22661ec58a658560b838016d,rubygems:>= 1.3.2 0.9.0.beta.4 |checksum:57277a891eeeaa2bf93eb2b6339a25a42c47fb5f9bf71a521bf15fc83c0adf17,rubygems:>= 1.3.2 0.9.0.beta.5 |checksum:e29cba357aa5dd7a9b809eb6d1a749f9e4a4eb9e9aadfd9bcc76553048fe8425,rubygems:>= 1.3.2 0.9.0 |checksum:762fc0d94d409f949ee68d440472c5282dfca0c861323b7c5a3a38213229b631,rubygems:>= 1.3.2 0.9.1 |checksum:834727db723c3cef0b4880cfa729808135aa3a24b5b2b12c6ebc2636ff2ff9ca,rubygems:>= 1.3.2 0.9.2 |checksum:c55b525b421fd833a93171ad3d7f04528ca8e87d99ac273f8933038942a5888c,rubygems:>= 1.3.2 0.9.3.beta.1 |checksum:30cf0630917e891b1cfd09a9611a8f8d70ae82e09ed2a141dd34ed994e7c175f,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.2.2 |checksum:d83ceb634b73530b3e56dbc3cf2c143cddb4317fd3142855f298adffcac5c4a6,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.3.beta.2 |checksum:27bc46192698d87415308ef6bf68143c943b7225880bd8e8517e14919dbf2ce5,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.3.beta.3 |checksum:a68df2844ac17947662b5f30464afe94f22010feef269e9330b332d06a0bd225,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.0.0.beta.1 |checksum:f642c76318f87934f3de7f83e30f4928ffc0af5caf25cd558251c99d69e4d13f,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.0.0.beta.2 |checksum:2078df1416b62c6e811b8b52b86ca44741012b9f87cdf52a8f732058e8792f51,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.3.beta.4 |checksum:a69dc72717d57d7431528fa5c182925eed846dc131d7254d23663267f293dc01,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.3 |checksum:f58b49198013ceaf893c1ee3113799c3f2930d6331e7dbd55509eb212980799d,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.0.0 |checksum:50c6ef8415a88c8fe60a87d7508094a3c6f51f1ba36963ab56572fdac3b86c1c,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.4 |checksum:616f21351617a57b9bc8cad9ba13cd431e07340928384532c9f727ae4183dce6,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.0.1 |checksum:6b3424d3eae8ccc7b9a1c8128caedb6035799aa04eb1f2a7fa619f6f5ee5faf2,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.5 |checksum:96300b919dac5225795f7253e8a73b95513ab79f539f9c60045cc0a411efcd8f,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.0.2 |checksum:58c64d3f10f8ce13941a21b25fb9df401f08e4f503c075d7a95bfcd08027324c,ruby:>= 1.8.6,rubygems:>= 1.3.2 0.9.6 |checksum:0cde8637bc097b984b602d7db77b1982b3a0be5ab014f1e533b6b517ca807e26,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.0.3 |checksum:ee2ed7d45f6390ac9cba94e101e7b7ba198a0f1b54aaf33708793648fd707b27,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.0.4 |checksum:4137018e07c9bb79d5ff1085d2dd1aeeba1437de36f281ff737295e835035f0c,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.1.0.beta.1 |checksum:84166efface7de58618014c34aca17584d1dc8e1331666adc9a93c3e4ed3fb9c,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.1.0.beta.2 |checksum:b99b27ecfe0bd252b253b9a9ea20200e4574ca1317779eea916ce47f3b7ad4b9,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.1.0.beta.3 |checksum:81081eabd77a7f4275ba0dcc2cfe55727b64eb25393b17098c60f30fbe4ae38e,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.1.0 |checksum:f8b06839ab1df58879bcacc8351927a2cda0e9daa91ea5b01f3d8d08e3c53abb,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.1.1 |checksum:85e446590871dd3469c80dfe70a0296c20b76a9006af6b728c1f47d0b460412d,ruby:>= 1.8.6,rubygems:>= 1.3.2 10.2.0 |checksum:88e6d8f36e5baf221238cb646ead0e5fd9a065805227fbab772f995c83fbe19f,ruby:>= 1.9,rubygems:>= 1.3.2 10.2.1 |checksum:bf0e63be924118e15c8cf7948200252afcff98b950e155f497b4f500339bab4e,ruby:>= 1.9,rubygems:>= 1.3.2 10.2.2 |checksum:c90b61a6c77c88512ed7d148a8398f2b635ff1a3405cba6dd89473d8fb0fb9fd,ruby:>= 1.8.7,rubygems:>= 1.3.2 10.3.0 |checksum:eb84d908f896e6e646ada64feaef7e205c4f87befa8071c543eaeba702825e53,ruby:>= 1.8.7,rubygems:>= 1.3.2 10.3.1 |checksum:25d0a9cccb145d69e7c91bafbee80f44a4838ef04e07c657e45585c069b61a6a,ruby:>= 1.8.7,rubygems:>= 1.3.2 10.3.2 |checksum:b504ad9d610b85ef0856a4771d024e4a66656c63a17121a3ed1d4d7db39c775b,ruby:>= 1.8.7,rubygems:>= 1.3.2 10.4.0 |checksum:887f72d6711c31576abab37f1f7db45972402cc8544fa9a67c06d2c0f0ef2028,ruby:>= 1.8.7,rubygems:>= 1.3.2 10.4.1 |checksum:82cfce8fb9c53bc2d96acc88456056b1ed5aab162b85f9419b7c5f7edbff8690,ruby:>= 1.8.7,rubygems:>= 1.3.2 10.4.2 |checksum:28970905a7bb57ba7ebcd2eda820ccea622f549b101d7590353b0647711ec0e6,ruby:>= 1.8.7,rubygems:>= 1.3.2 10.5.0 |checksum:2b55a1ad44b5c945719d8a97c302a316af770b835187d12143e83069df5a8a49,ruby:>= 1.8.7,rubygems:>= 1.3.2 11.0.1 |checksum:c4c902e78f2eb4d87ce7f18fe13483ab92d964197431113f422233dca340feda,ruby:>= 1.9.3,rubygems:>= 1.3.2 11.1.0 |checksum:aef48a72ef8101b4400f3eb67a7adc27e39cedcbfe83bf57f1d759f00596b4f7,ruby:>= 1.9.3,rubygems:>= 1.3.2 11.1.1 |checksum:0fe21c345852d5fea819e1388408f512a0859dc5b700bdfdd974c02e58641c41,ruby:>= 1.9.3,rubygems:>= 1.3.2 11.1.2 |checksum:1f2fb518497639c8fe2212f76fef8cd2e0c3832ae339d2466c7490d2e6f1d549,ruby:>= 1.9.3,rubygems:>= 1.3.2 11.2.0 |checksum:3fcf829793505ef9543c3bf2814a068072a4b0b2e56f1bb62456c2b08be96668,ruby:>= 1.9.3,rubygems:>= 1.3.2 11.2.2 |checksum:ce75c108d785fa7697074f65a960d60424f3fd03f832635058a9100cec99ee54,ruby:>= 1.9.3,rubygems:>= 1.3.2 11.3.0 |checksum:8af6541547dd7e031fa78c1c978084862b7bc3ab670c2b2f539054e8d9aad232,ruby:>= 1.9.3,rubygems:>= 1.3.2 12.0.0.beta1 |checksum:bac96d95926789ab4c107f6e15090caf2792c92bc092cabaeb6cb90ff9acbf7b,ruby:>= 1.9.3,rubygems:>= 1.3.2 12.0.0 |checksum:f6b43059e2923ddd30128fbbf4eb2e610c020b888ad97b57d7d94abc12734806,ruby:>= 1.9.3,rubygems:>= 1.3.2 12.1.0 |checksum:5cbb774dfd1c31c4ef19e365728b8a9ecb8b0b74349496c32e3a993aee7dd855,ruby:>= 1.9.3,rubygems:>= 1.3.2 12.2.0 |checksum:9fb7f1a647184d6c3ec2e6d6b077151d36bdefa3da0c792183db61552db4074c,ruby:>= 1.9.3,rubygems:>= 1.3.2 12.2.1 |checksum:7d412aa225feb3b360ba89ac160ce9d5c6775693fc073a40b3ac434670764c21,ruby:>= 1.9.3,rubygems:>= 1.3.2 12.3.0 |checksum:4ebebe2c58050b29a03c3f33a23f4a19bca16cd39c7723653dc0b68f343b17a4,ruby:>= 2.0.0,rubygems:>= 1.3.2 12.3.1 |checksum:cf37840d136743411e4bd601885363e34dce537675306464528b0cafe428b1c5,ruby:>= 2.0.0,rubygems:>= 1.3.2 12.3.2 |checksum:56362f144a29ffbc5e49161a80ca4e2e6b7da2946170067d624d7603ed51c5eb,ruby:>= 2.0.0,rubygems:>= 1.3.2 12.3.3 |checksum:f7694adb4fe638da35452300cee6c545e9c377a0e3190018ac04d590b3c26ab3,ruby:>= 2.0.0,rubygems:>= 1.3.2 13.0.0.pre.1 |checksum:0976e0a51d1420686cd3adaac3e92850e3b660b5ed4bb25fd9ca235f062ba808,ruby:>= 2.2,rubygems:>= 1.3.2 13.0.0 |checksum:06195347674818f4979ba22561a24b9d07f692758e4aabe5bcb12da55e058816,ruby:>= 2.2,rubygems:>= 1.3.2 13.0.1 |checksum:292a08eb3064e972e3e07e4c297d54a93433439ff429e58a403ae05584fad870,ruby:>= 2.2,rubygems:>= 1.3.2 13.0.2 |checksum:fb0b9e1628ce246eb7fbd95d0737be1ac3b03823991d7cfccf6bd28768498861,ruby:>= 2.2,rubygems:>= 1.3.2 13.0.3 |checksum:c728b33a5bd09534290a700ff17dc0b34d6d32aae23a34f463c4cfe4aa2833c6,ruby:>= 2.2,rubygems:>= 1.3.2 13.0.4 |checksum:03efaede20ea9881ec6f6134a7de5e97aefe51f1111f6c7f78a1fa50aaf5f448,ruby:>= 2.2 13.0.5 |checksum:3c0a0d8bbe86e944771f28de1d1dfb3ae208ba1e14c1a29f9d51e1167b49b9a8,ruby:>= 2.2 13.0.6 |checksum:5ce4bf5037b4196c24ac62834d8db1ce175470391026bd9e557d669beeb19097,ruby:>= 2.2 mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/info/zip.compact000066400000000000000000000001251446701454400271370ustar00rootroot00000000000000--- 2.0.2 |checksum:a129a9c8977c9a1f3600593ead89d085ad171e8d3fa91e647d80b04b294ec0a5 mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/latest_specs.4.8.gz000066400000000000000000000002321446701454400273740ustar00rootroot00000000000000cT(MKI-(Mcbs tO͵ K-*ϋfT233`fT,*M2ݢ9C٠F0yҼ2ݬIJD]C=SHpnnqyfDS*Ć4N$ ҋ mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/000077500000000000000000000000001446701454400251425ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/prereleases/000077500000000000000000000000001446701454400274545ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/prereleases/rubygems/000077500000000000000000000000001446701454400313115ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/prereleases/rubygems/psych/000077500000000000000000000000001446701454400324375ustar00rootroot000000000000005.1.0.pre1-SNAPSHOT/000077500000000000000000000000001446701454400351245ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/prereleases/rubygems/psychpsych-5.1.0.pre1-123213123.gem000066400000000000000000001160001446701454400412260ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOTmetadata.gz0000444000000000000000000000205514364523321013443 0ustar00wheelwheel00000000000000ѦcVo6_/8]lk-VI:[T{dlOmX>x`엟EX> %ri/@(KS\h}M<Bq87Aw<I($(7Yn25v=nDt}!\xMWWP )<@ʯ5> жkǝY<:ޘKf /טew(>8Fq`_H)CBx'>D5VFq O$H B-:w9>{V|ªPR6O1\ID2z2X(lmb)wW7W:KW䪕<%] wWv Gta#LV}6dꔹZE+1V=C aI1)opaQ--&B1*Ycvˬ\! P0LXf8>Ug1zFeN]%P5gzETP)u࣢서{2[`F9T581) vFՔd78 >B zh9hn=<h9-4/L⡬Ju~g[!rئ}|cT9 !5FaK}2HE ^d =+q"\cq0$m!kB;R ;c8 "I鳃?NT(}s-X*9g `>d<} CFԜ"b/]RM#%sR`7Gס-!S- data.tar.gz0000444000000000000000000010446114364523321013365 0ustar00wheelwheel00000000000000Ѧc}yG>EG&e #16m5^e, Ҍvf:C#,Q]]]]]]U: 4bo_쳲r֭'wemVoݼs͛kPՕ}8IP9?r|nQFx>|I"/{/I*۰, ,÷ /G3x 꽩,w9 ~bYN9[Q L#} ~6w3$=_tũ?LZQ|ZT+[Gh  0"{/fR\kuҺZK0Hk44@h'QϷvįT6Ek /BKS?N)TxVA$̏ q{a$}ޙMF /Ĉ80O'zfJg&Ns/p_鍑x)V"/FA}oP By*KY4NE L(z)7=l! 'ij)Q?8>uk4>YS}G@2jb ?֋~=Jڕdy Q_x(TUy8%] gu'ai w^0c~ݧmu־x֓Q؇զmݗJmO+?[;O{}Wzb{i[;/l<.L-`W`Vg=m?7omojVn ̧{bC;|'^{߁؝{JygB ?/Te%`r ~~ҁlvNmnol=o'7u.@٫`1NK o`kws?˽]NSlm#A>oVPc@CAR gD~œ6EU5ߘ"(}t?w_}kҍ%@[JVd mmOo_Zp-#F1dAa`~F!68} H03 öH.`GҟƓְ[7WsUֿx\*B8x|܂=GT.yҢ# OQYC/c2Al,Ozq0B 'Ox-F^1 >P%%1YT12jtA=1k M p:e(Fq0O-f,${֑M6%2 ě0:Nt%+6XzK&a%@'>X$%zB^""uyk* b;by} Jh kKKK95Y̵ n(G*T6~@U|Za*Y|h4ܭ`~%pCsx%`ఱ{kOD0EP}R{ mh,= sK^%tTxJ"&V]S]!Gx'@bI"֬{%[zז%VZkOV Vai k.R?חq]Ne*P@>RGl 14G#&?ْbH77 :x﷌W{Q\jn4Vocnli dDܿ/JURκ(RKyX˻@E6lKt|ҽъkGTdducUӾ,Rǯ/7y=D\,R`^F4$TP+(.r7 `k")ўq&Ү$%` t!,Z@ZHh>-+`H&К@>Q J;["nFV6A苷' 8(`H+^`]piovzHåNp&BTAIm(Mr}INS^CT DvItv7PPdmEmCz/e?VDNu3Ňͺ~Դ4ЉWT+*Lcz@XALb)_($h'aFрm 4d4$~?ZZM^]bz ft~['A17:¡-)XїGpIE޾]_]oY_E8q4'͈K`9jyZؕ-f:i>84_XWk ?Hagb`K kis߾T9(|)?(oqk|6uбhtV{ ֮\O?As84*׮7}laU2_dk|u;<{;P4^DmhsQAE*TLPZۀf2,|\_zD_QwH+qG#8F5k1,É/Bm{(7 q<zwN[+3ڭun[%/-b?~ś;R?m֛֜Ihׇy׍ *ӷ)$| O:{֦<*Jτunuqjj*Ж :M_{q!wv~=!"-_6T1#Eu=iSw#/wQRj7>.ҨF?Ia 8mmزlOqHwW m4=RcUhh&u 2u7֥ T?w }ĭ¸tR^yU"]:߰C)/>E!ڥDҪKK\iὄP[M+}gQ/;澷ۛ;O0vԢ4#\ZF[^܄u녟TXHRGG5fư~5E (z fZC3Cgfaap={&r\І(%yћSŧjcT@!S:iYZw)J2؋/R %R:`q,8 z~w(]U M $PwmaDh-,=,Z] Z ca0aݩ^8pLO`b;ѦݏzGW#ѿ?޼u?{PQomiB%pW݀Ğ ,}.Ɖˍ4uceGd9uuzDqS<@ݣL&IoݫAdd@C+񊭝Tq:]s1QF]`?UqIUJEvH FA_lAڥoEv Ư.0.u7v*iu% ʭހ@ B S]hC;(,ׇҦj3;Muَ.2 pANu ]Cͥ׉0yٍGIΓ[6¹o"?9J$Db/_* pXvi]${񻀜_%Q^p֊d>e1}ݬ͕7'{h_}q,"SONFirh"adL{M4myHAT{g=%on=ADpˤUYmQ7x@TYP[(L[$\Az(qcxR^AgDhȲ̓+ME{8M4?r ~SYzy}t?<8l fDh!б_ vá X39UܰϸD 9Lc`RQ7ld$:Sp-s~k m{ɠW]4b_Lv{zi7&aT—)+3O*2^ V^`Ytx۴8eꆫx0[Uhg h-sO 'Lopuuv?.4a-eɦ!AwCK+Y0.#Ur0Rk#nצgUӋhdLEu RtXmQMw>VE0M sMYwbR~*m`a]jc&4:GN*j=1 =͒S`3t${WB<{oS)O sܭ.OTۼ5| ̸sK4]f$p:WtgF/:-+6խkg+ .4U>FmQXlE޲^ۜ+WUkښT-Jy~]OԆK:֧2x |/&K`/W0l#v./4tB5:nwvTxR= _ N <x0*m9:TS]Ժhzw?4i49 |8+_q=.z11HSТ5-R0z#ZB g^4hiru>vke,.RGQaH7C2S 0*YƇE:QUIc8SX)𨵪B#AE{*J).X0 ʠi֠nCFȠQX2:\ '҃3:[mws9o"h2Xv?9CSnW4Hɯ(afQa\h7bN(d|tH'iIHjyya y  1Qw7r810T[DE EJHJ@o͜ȤJ Z$;Q2Em4&wPT?;Z ʵ [|?!zL?/+vEI2iB8%Ujʕpd0h>MZ-n/4fcRw(K8^H6 v*Z=Fv. ŀdLbݦ-H-̻e'0pfrP%!/%LSlڢTY}u!IdY9wnFMeWƿ l&d_D9"2we\+W_̬)%~)"fsoUS 9`R,ւÄ)r1t%e,9d2 .]Vw~ݿ^fsJ ysyj;"OL6!R} qKܔ|rko5X(-p/GY&ϗXp37ES̛ ٴJIYDoB9eyj= ,'ezX]f%(Lb E8Y]mzlou%BvJJL.VK>&j %Ji23GB"}I<t &)C܆C AVw]Ӂf!q0/#HeKV!qԺbuUbMlJK9'@䯃ff!XJ+33T]l&$v)X{UyC'+rukb|Kզe#Kv*ۢt ܌T(ƚ -u1Q Mq2Xp쟗kw.IQM24 MqRT5p쟗<^itKbcX. &.1Zh6EƖrבz $ [0*1%̗0! Y7̹^ "rJQ)ʰ Z[)Jvp5[L'uϳ=?W_|࠳7"щ2뽹hK+ 4Z.յ7_|03Ip^dS>Q'Z%Y$BgaY)yp(B89'T+!E>cɟehĥ.G{F\9jtE+EQrőh[a 5:F4aq|- Ve~ `nM`Bu}څX84/67YC7ݟ>4n39UӉk4Ym\3!0K+9UI K??:u6Mm켚 -~Z,$+zL܇3gXKgɛ\ Ћ^ Ћy62꥾\qCr @]ũeb*ކWY!)s1Uv7BCr"z>WN%ltD#u:7:u>e\쌲./12)k\~ldfVb4R_&pQ4 -Sg]~8-{ 8/6n3Sc3E"5$L ; 'K3I3p7#ޘzW[v;(ufW"L'$/Q19]qg*1N]&RVP'1ꛪ&==Rdg["Š8)%N2D|23E*Nɨ9 Ɇڴ~m~Mw=Gؠ3k6QQץT`b~kH QT.([ߌä6T0CNwH6|ɡ;LW5ռVMV]pn,]-z6TwT bԡ~{h.klVу*~:Q CZo[C~x`H]z>>y2w4e~А,GX/Dz9PCodh_2țz otK(&P-D ~VjfEХΝ?jH(:,5#0#u9o?n :|V-T@,ܗ'~Y2OA{B%'4(ql9]DU$;-(0]2e7neJƆu۽1CU)Yy+[R« K.6ѷש+ ̤iuQB\ʂ}f}Z /@q l iȟf1!lb#лC[l& 0S˙hjdnmXϢs9hm1˶zgicZp-wY[t }>.nqAtOqLcȄL>[⎌-:[9!t#4ͅS#u긠,Yyo-DI̴񂱴,fZei++KVa'W؉b5Ll+.m)hK:q9,24JT*dp!T t"b8X%nCJACUl'sNO}WVVn/6 ?<_`Q7_\i)mZ>˭?$AA^& iA߲knC?IS?shđ(O4H9侬?gʛ֥.O2p":xuuZ5o˽> Pd 1 -Re5Oeףb UnZ=-ͱSqZgψGAF>nb6-ot+B"PL) `BJՄQҝQx`t83)0dH3Mk5\>fVחv${03s6ϴٮ6+<L[ww%yq^~)sBw*/#~U?jN;__E윙d WKgo_ݕy< RTq ~"H>`pC wy0OZ HF<dSvP0TKAϝ%0TnM ҫC)jCVW#*L-<6\to/bg@d$="J2#.--A QU+ӳEu^zb] uj^U*^=̬>҈+1Ϣ\F1&a"Z p'eT( Y8zWY{ᩏdq '5O t9MYpʳvatG(BI~`:')⊸6B6ǰѪAưPGE%э7XA &&$p y)k9u0;-mz:!{X!6RW?I0 0Iv^V[r1)BcxLN]4Gr{=^<(l'މ5,ǓC}!ԼZiסZ1եPHr/irPRZ:"2 $@PK>^a]cJ$׀ݹyzUژphʼnɬg3~T;qA<&)8.O9ޥDKvzMKr߹X[Snʷv񘢚YR+X嶲_yP"f^! g>ٺynR2lj҅)Th2|R3捙 e@l6#t^kBi=p,=mlYqC?=BbrF!ȴvWZ2ߏh%UVcx =GBb'v`ݺ*ŇCX# "T{!#B>p蘟Y8d='u*sT Ί/+٪ $+ZԑCdr@ѫn$?(Ғ?? ħ5kDo]JIyV-4 zVE錠?o4!M䢔4q5ȗڞq6 Nc6:m$b[P)=(dcr$z)ei0z,EI0$ *C0"2>;1Eһ.RG`33<,́/O$IR#yJI*M|HN d9qig<~)*rEX:a_(4ꨓh& B^\ѠO9Oc<_jCa׳~?E [ UNw֚qư]30㌬K}qŔ"wD]B蔊ar5380_͟LުYw&1@lUE\c:<='\5jR<`M c.Y``Ya<Fni`w &E@wU D-}߇GBmzqj]1ds% 3BQ1=`^ 0WZcpڴ }X v,'f`dỸR^4kѐ#;@{DO)cjm] B-rD"ȕJ#zή"nsd'Kp^1j#.}I.,WqZ1p@T.S!# OP:WuO91dI *uZrz¥mN1m]ND,K#AkjI*IE^ds^ypIU z+_m5J/: w.5t:He%)BCnD\R6^П\RqMeT^~))gkC[qb1tW3Q y{1Mtn2bv3OȊؤ\}ս^x L>d Hؐ;jg,.ubEW# ArH*Jh5Id%ffW6;]ʐa4Y+ kB-nGd(*1OHZ)?|Э)hºHy1d;G Wɝf%o)23jvGM}iŏiǰ%&>4\X7DU c}$7ks"Y-18#0$:3Ln3w2VI8l%Ӻ}@E.]fz~tiqP/CPpg<e*^n#v*^z7ԾĖ,Xy6߇yMNmd;mdfyw2r/o![Eùh8 hh̗Bbo#)a1|S }I鑉,{t+NmHbTדHJ`BT@Ek&kU֖s"wh$"umѶ$.rRBQM/vmhmXŗs m xŪZɭ21rl(&*}LܸJkbmW;NC>t]&li&Z͆Rw ˢ1x/+C|(4jI7 ztj~RdpyޫY׻κ-1պ7]g9lywYa|2 J8uvGf;lj.;_q]E%h\J.BC+L/2 4m!З)G7Nk7>>vXt؁E\nۂBM|6ys={c썃?E/S(Dh5'V"ʢb?u uruS ~"e5(2AolpC چR0 a#㚥Eֺ s3b]Y.l8,xߤZ{?CY!# k\.ҏm^X- ֓=,Z|h_6t֍ZXҊ1쮯ߤk(/2K5)(c z}*Α)6 VX@=Q=h9`QAXyPAmʩna3 OS-yiw9 l[.P$n]]AʺwK~|E@9VnTʍܾ0Z=V=>˾Sܜ"x]\=[fHb[˭g gMT_dgGɞfoT ԂmŋSWI} fOV■޽9{|Yz#I{ xS}bOmFzyO6:C'82΋ND:(>Gg@8}񂲤rqa;eg^Dr]fvuTOw(^=mUP`\}*ڱ%H2L=~0@6RhY)r^2bҘ(V\]6^ei)I$%vމBNׇR}v|bcB6C{jxL$l e (P'I4xur#OhY&Npx ^N 2YQ+~4m7-7p-}ĩA*O61z1Z09R1%ˀLs*_V{C3ۤԙk8fKC( ^MKWCz!n GVP5eo3J4-럑);u+RnZxgF^5WW #N|I6_)щgFto$lL>S8KubeUrg#Yy]).zu틼9UϽzέչl0ɦݥ)~SUdljeR-Mi}{e-_:e77c) |"jclTPAHrNvs"EphF9 x}8 `0UE־^_DUbBe*B>FR M9#EjCΨfHN _-{j.R+ö<&h#H5e?Nj.h:;U0Z8ř̶PhD2׺/7h_gXћRK]6é{fN3%Uxh$pd-N\ݕYG@&HN^=yP]hibXKxPU0T.TC#5Q!E3[m.ZG qBgryBZrv$WZj`V2#SP@x`Qd)6m 5EfiZƂ뢔hl̵}Yl\`Jf3MR^w&Ֆ4H¦ cݡ\V1"c#8-L\ ުu96@A7SMg 74ʝɊ+vaZSv{kqw7RW՛kwwgv`^/!>2N:|ֹcOCXNJgJ*;-fC+325|k.V(W'ݹw %"]1w' O`9LV t:E1 }ŻZY_'~b"=7q S}a^X籢GΤ~CT# f/Mϡ6Q?5WW\];ksh1EKo~JAl=j66Q}5L'!6U9?c@UOqALPhVt^.&ȀPnwjD@(IcG42M60y푥ݾ\hV,1aUOq,b)گYPmZysC t2󑁁}-֬ h?:wWu/m] N_SiR!iC~DctQa.ڴⶶٻ ]=;;Y7^=%lTQBs:_g$t?"st,fdM{0i!PBlxs#E 8yL^) 2@$N^2BB7w37GE˃iha"*x=GŦ|ѰgoWyt"daIfR>%9JM{\;@V /VV[GH h*/M ?('Y'y;QhmajR6 m4Azo.M~ 5v38e |:HH!sB6.㎚*sXN|Ȁ7vS5345ikH/")+: N<сx,;-H90g>Q< tJ\頻'[ִcD<67pI> u|2E/@ȧ Ha!6X0o}~ @V}N;?UbC'&M>#j߰KtYia:TEu2ҋyy"$\j 3FI]㩫]5Z:1j8t٤E6i2S=7/fv*69mr5^rX7mu|ɶl-- x-(:pD8HTt[lv#3+*2G"2z.9nFw~ܣHvEBsU²xc hni,+'ǡ: )^LQ8X"emŠDC+ DEA4c %X[zH9ć} Y<͛-Vq_žGhLlfP` TզzCG6qSel ]}) ,)`s)0C5 <U]eZIoʼnI$6%ee3QumoFk,k[q qVa kI-|4>h1Q֥ٞBfV3pZbS~d3Ñ>\nI z>AҤ11*BfyD|𝦈G=Kdyp9qd;~;|f,V%:9аjH!ֲ<6.;~V`LT-nd,F?ɑUlfJ*k>!4,^VY+`s1*&gÔ_ic*:k)JR]첟ƠQ%!ٗbBa|ә i'a2 biWaij|>GEf2 ~F=i=h0a&:񐁉-)LϦ9nP-nXaͪ5߹>pP ^;@\^4CtBvQ<(X)+7 No(CjL{hM̍p~%e2|i_+7WcVkâR0-1O2}<$+z"."g>d;>P.8+En}@| {vqr&b ]4X'ݖpnAg(-@f=i0Wf 6߾{3cuw9N(~#2]Q:zRg('OHiWn ;D$s鞆O/j0B +SV>!Xk%-߲+N<ʝ,2%W³ $Q Vg$VDnI'F H"{?C]L3e?I*Y.ˮt`lezCU?Q}0M1x^bnCT9s0C/cp+3uJܙ|'@YŦ;= l"ҋ )G-H}]5šӏ*($9 |݃ΓbQS1m16 ľ|ۭ{|.?ϰl"_YMf_ՑRZ.#0?k( I*{`i ȿآxp,UsAӼԾ:U4&)2,0mR |6mvbLfM)#zÜߘ0J8#lYfL>&a }{{SŁqT"uDyx%Iz CJ`:6I+n Ou7#!\ޣQ7?e_Ǯp o^sO_ e.sHR̉bS' Xӊ j;)t:Qͺ@LhT$&L(jd lXZީB6l2@Kvhmp %B})Vcn-@i:zfbMq25 A쁐!<;bEdu RG圏G ܶfJqD7 ÞS>Hf5Rn9B[6T!Ρ)&hV)qVnҬajLBv謽1H" $dlbNv_^tĒ/,@ ⶮ;/ d i[>rU]CG*wV\8M[[B?\MRojFg.iw՜M,I (7$*3-ؗ<:lڕ1J[;t<W$WrH@6S|{렳eA?KΨ,j*2 HGgR@kR|]}9Ih=Wr% D9//ePQ!OJepЦRv,PSzC׍zD`<}/03D$:`5rfuZ:?%~E[쟵d.KjnMU"Lw`c/'åQms|}UeKȘm 6f"?m8OTjΒfTQ/0ѥ Q?@3[l Ӳs0k&&TM:KF\M=E|Ҝx)' CKnz\QTs%|T]X~T//.Z /`w5%@[_RXşf}/,+g_RL΅lߵ%C"]1ַ^n3}ǖ[2Ld!E Q 7 JmKo* ^Ϗ"%/$8ƃOjQ-g"ʃ(T|ytlUH*fuWlw SrQuBx\ qW`RITd9UlOkIA_[kѼ`Iqio<`"(L:A,Ne Murq*!|.\Z?z/mj\[.mے9',S7!q#1G\[{z%Љ>RE.HEƸQ,%~Yq@cߑ!Y۳b~[3 p%MF&^m֍|ǠK6TO`a Zw@qh71(ꄪH.Hˑdb,A5Sh 頻~z !>S6PQmU2V@p|L{)J:EHWiL%:4Luf9m֗4 #Pb-  Bngo=[O 0?= lp%y`q򼥣V[3i,MҼٽh)r70 }]SivIAt)n\e*c^)8ʚ{*ZC>ʑ@co}4q4鹳w']k=鬣3X\Mx |QP5>I`gqŐ$xUeZGHd9=u2q)x@Q^Jbn6rV(<XoѼ9ᎽԭS%0ܒ/1p/ rʂ3тX`DG+Qiƌx9T-0:T%!yt|?.Z_guuݬ߁_vGq' aĚISJmL +/S{0&Q,FuZz%wңņLj?%7piHt(xh<\ϓA]4b;`ۇ c!|t{w〺}z+K?#@un؛\]i4/o [;g֦1=ZnzQe -b<J}" P a*2t4sǡ>q0H9zIa /F~KAG'Z {qjn.!<|U4B}HLuyؖC?]Ӏ1iNs~rRpX(#uK| ʎݞ;mG6 pѦ6`2аrG2yQz)%qu >Y-8Ju,t a'ƿxX܆>pk>rvf;3δ|g+_VE=`'[EG,ŋ3/9w4* -c‰'N[MP7zHC/=^[mo0:G_?ݨ7~.r#(L?<A)@hйHGˁq7t]tgV׿٥. B1~%QԶV>D''nN> B@>O-ytLJ3Pb#>b'-ӬK/\]}XyBou2tug0 }eҞ Eёv=+)j?>5>xn?QTbV .bZne}Q4YxĒ(GK*-YD z'~R 3!VT]ܨ;rPG06kz`M1l~i!VaǑ'_rF?i{פp(P}-o9m81[tpYۼO@4Iap^f8hu(vǑՕ{JXm`Ҁʪզ$"Q5N{V *jtЄFS0ՄI^5Gn  ȃ‚k(<#$ 36ATPCNTQ=gO[Z VF?r! Ioq=Ay(zG5++,N`lӘXxCS8dڅFSoU_T_k͛sk믶L͛yk%sЯKSmӲ%_@eď>ۉŚl5h`h{Dҹ&_ڝh4N<`J+8meVh߷OЬ{qcI,c8=;d&g0@I>! 5n=G?LƱZ3$-D!ɂ- F|~0FW~9;bo?)zʾ~nAèvİͽ"CSD}X)z&Ѕ)y©B:dT>r1F:.>ӳ՟~aoNkݲfa 瑉*4G3՜͇Վ`JņБ*#+i "QYScڀ}$N8 ]*.+lL{5w3&̺eQWVpiUvX! Ȫdhטi4s~?xUWWWs?$l9Gra ܥXGӈn-iMm?k _X_Fqt< C30ʰ)tuU[2X"FG&j | 8N_QYӖOU?&,)FšدšDhe#jo*Q*NW( 7uuH*g!tm "oxǒ+cj.t7;+ky:.[Q&aoqy.14 wi7=ʞ[q:LnPIR9@Ֆi! IҴKؕإ},FkRՕ>)=|i*E+SL(VKGP~7N1.{D$|DdJۯ9grh ipJј Ma7f;^)FyKyX8}3~$bX|)ݧ[۝nmo7(VyV9 >HE=/?WN^92t$:6]Io5OSs_8fc8Ɔ}7$sgG( ]!2aRK;{Ʃ=ԳM gCmnC"J5tڄG̀k\du@9\H5()q/~g9oMI9(zxFDWlUnH?h@Չ995aJ>2 A0 TdgR&y'TgТX,l+oS '+h׷Θѓ>D'2CjwY9v6('X('-O³Du#@dK 9_no[L 3Vn;S 9S0PAtr((kgokwMvk҂S*4'$v;;AH+x=}yr?$i+ʓAdO*lLݜ]1"Ϟ[/C"R GyO6@^ޛ4m]m-sana>:5E7"J&ha>^c_V&bw_m~_1qf8$;0} 9gweE;H#iȌ&oWc90v=U]U]hw6>O׬'e7 )KDT_nu1U׻]MR}[5xw^xU,^7qcUk4s{'.XgJ,_ЈtKY^_6k K ًE7  -\daE ý"z46{獠>[=燜 c}Sqh[?B/`T!uzyܴs 8|}&DQP )EoFxuOh&^e/㆝60B=#d~QMz=:i<9P0!d54Ãx'1]noG>=/@Ѿ=L YdWC( oo8<^? (o"Y+Gg@-Cih]v!B"teCmzmSb.HWiKlO/5VsSAA'o瀺JUt6{hq$[UhGdRfdc"[?YC @1*J NC|a^pLuUF% rbX1t1ObGZ'~ !E"aTR'ţk;)G!*{ hj2$߉oPAi B)!Jn1Of@ܲbY,*$@ 3v+ hZ3xR #EM[pWyPæu_zaU { G`N 2o1`\%h[4GKi_W1`&"*ZEBCA_ Zl}c1G.'!ۛO֞F,MVf<#|Um Bo{b[.gm[.lڨQ#}5ije3T_Gݤ㑯,5C=NO,Ә ,%{xߌaJeU i0B]u8h?Z%Ҥ؄R.^0(x2¸u(!\Oq =Dw eH&BߢJayQIF"sCTiJsaY}2Hb*ZM2ue# |"r9VK2@]4Eh=[:$A}BDn>(7Q[St"2<^t_b/'Զt)&Y9wy_5U"(.-8gdo@ʺK uK; b~=HXEsJ;RM4^b%bpOu+0$bz[9YU1zҿ^^o q|Ȉz('r;g͋-mHLDٵ2ÅK٣f5A5NkW *IܡR0UuB?c$9  kE˖Y:Q]m1D;byw}) C^e8ՙaȻnr< T12rTWͿ|v@iŽ11ί9Gj~Yupq$ݦGLiw"w˅=He!NfㄴdE.~>tZ$JHVJhd)SCw^'+)9 A*t%֎/yz/qK]g%6-*Z4kDF %l_ S%Jğ.g3}ӼzʮT۴n>sPև>w- 8/nzvW1V%ɑǣPt,s9jQu/`i kyJQU%}菀:x]KO3xzk\Vdn4A9iD<$AKM92#=mgLDӗ4cX!AEѷӌi[U!myZ.OI=wѱk]Y3'fOmF/Ro+yi$ņ\1Nޢk%:do~ ;\5Pcj9XSP2_8n"Ϗ|Gا}},G*Ra̝ʝS JI1G c͌Lid`~_H Y=Rfv6j\64eOcC ADaڡ\s WVɖZMw Vao.А-&,/.2 I u t>",n˷`ߝ)T^4 eBM%eymSo ycbrH",VR}o NA[3s:OeqIs]ְ,в&=!XX㜙2)֪3sc*80nFf#^Z"]@띅tk6lG4+DmhІOc =Apd6d#2C~@өwMVq"i^g+f*5œj2D~R#hUkNQ8l+JĹRE)kf}W9Py_:Z Q|7P$V:ӷ^㭫<`CUL~vq`Cq͢,RATZ>t 9Xv 3o0"5sWVM6V4C:rd)b5)/7Y|,?φ~bw.0 ƔC"yH<66#ъ#9Pŕ2"frl|/ y):Û\JE$x,42{" E OCW=O_MllfF< #"CBf(hx][}[hw:(~وJP`1++ ,=9hT]jA#:,cBB,7monP݆}/śx@#@ȿn2 6_4%D\Z SW@mqX0AemɶIM*ReKՍ/&*Ԏ 6Aw)P܋َ` >1BXL8<)T>DPUmjU#}Cu@'۟\eVjɶl:INJ0:cޘ=C="Ak.YMCĢ/ͅ47."e50fD-[=~lx<9<⮧aژ@(+?E2q[vIldKKf.W̓L5n'-7,,h+Ičf-Ⱦ+>itbY(,p´Hכ] j. e:+UP~M+IU '{xyIemJm&2k7:DtWo=#˻LTH_pe/M0b䊖N K_LC;!0ǐeVr**6Lݷ=8#9D/I̡\_3INtބr˺-F{I/_ҨY͒ߥL}; BFThH%^,| _ҤDM5+a;7zeǪS eNXzH(zr{3[+n3P\2>̺!æ[SuxmH/j/CKd]R8z2OE"?s r$x6{@흆z7 6w1H޻G6xOP4. \ej>^G U4jnwR5YdWZQ29%(o뗻Ft!։.|u'? /옶m 2*ֻ'mA7.)z9<ۀ"YzTjE6NtijP60}\B%= uuJ^sm@ݠ2k.}Wcw a.vs3ƆWGTbߘ Ϭbh+ Nd쥧S,w%7F~EMFt\է_@$q6+IEGQEU̒͗]񭔮(+pȰ[,PDE? "W }6]2 S2K#GָxBhJȪij~M k8O[QI\k=q_ =&Sˎ ( 4Ҝ͟-\3Q,3V4p5U/a-TlGڲjy1}9HG:ioK ALJY1e++[ 6ȿtOZd\*_.rKJSGO wзP, g$ѭ(s^.mSk0/T(,T<57 MP"L2B6զ:Ǩ<`iTp/$_6)kYfgzA |:$J1e1m%rubet62 Wfh.*ZJ Fɢflٸ ;O/,KV\0H/pΤ4g2Phݻ{/}y{no!ۉJtH"Io1҄H&;fuhc|Ow85> ^zkaWRs( FtNcSQQW eg햎MoU/R ^^Onu?dPKht HThU$xGy 1s/Rv30 Ц²~ћݴd#}3$ZP>2`Ǎ/o* ǣɚ8d RZW+פ(mX1GJ{ ӚlKOp`+6#ae,)g' 8f@Lnspp=ދiaV<?"쇧)y8>Y7jՔ}{D=j}0jϸ)IBA7H^\ZeZg/GєjoPRS2&" 4O/l^۬ZNqtHpɋlx}Y1L0 ~`]-늡)E po:t 1L +tVl13qPuN3t$sE: D)ŶݽÝo`+ )F&3Nϋ:f,mLn tZ5&<>NKM?/ R)^.se 6Yo syg%,AZ~gT*i" ; k qrNF {J1,J 5iҎ| M:u"ݱUYtHȐ;,<9ç"!=0eTb3~#'@8Z>y3ZBog[)8%3a/ҜN0OZEۂ*)?IO_~% S[CrFš 83c.ͼ'TEҨ384β xs|m!H3`mfaOGaOZHW"SW41 d[_Z\eb\M^Vv$jCwSa[čaӑSʆJDgG-2䧚}Qn"@6kZWW c3QI>x>LmdoW2h߽x8@S= k6jTkeQ=TC-|O E̿X]?!\DFj Zg/ٜ@#Vr՛#SN˽qb\+&G}NDh$]6Sy93ń#j29M'I[vp\I~xph+-> -ST)v':ԩbl\7=l/Jh׷ذeP| 3 ^o1=@[y" ӭsh69/ Mmavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/000077500000000000000000000000001446701454400267455ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/rubygems/000077500000000000000000000000001446701454400306025ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/rubygems/psych/000077500000000000000000000000001446701454400317305ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/rubygems/psych/5.1.0.pre1/000077500000000000000000000000001446701454400332375ustar00rootroot00000000000000psych-5.1.0.pre1.gem000066400000000000000000001160001446701454400363030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/rubygems/psych/5.1.0.pre1metadata.gz0000444000000000000000000000205514364523321013443 0ustar00wheelwheel00000000000000ѦcVo6_/8]lk-VI:[T{dlOmX>x`엟EX> %ri/@(KS\h}M<Bq87Aw<I($(7Yn25v=nDt}!\xMWWP )<@ʯ5> жkǝY<:ޘKf /טew(>8Fq`_H)CBx'>D5VFq O$H B-:w9>{V|ªPR6O1\ID2z2X(lmb)wW7W:KW䪕<%] wWv Gta#LV}6dꔹZE+1V=C aI1)opaQ--&B1*Ycvˬ\! P0LXf8>Ug1zFeN]%P5gzETP)u࣢서{2[`F9T581) vFՔd78 >B zh9hn=<h9-4/L⡬Ju~g[!rئ}|cT9 !5FaK}2HE ^d =+q"\cq0$m!kB;R ;c8 "I鳃?NT(}s-X*9g `>d<} CFԜ"b/]RM#%sR`7Gס-!S- data.tar.gz0000444000000000000000000010446114364523321013365 0ustar00wheelwheel00000000000000Ѧc}yG>EG&e #16m5^e, Ҍvf:C#,Q]]]]]]U: 4bo_쳲r֭'wemVoݼs͛kPՕ}8IP9?r|nQFx>|I"/{/I*۰, ,÷ /G3x 꽩,w9 ~bYN9[Q L#} ~6w3$=_tũ?LZQ|ZT+[Gh  0"{/fR\kuҺZK0Hk44@h'QϷvįT6Ek /BKS?N)TxVA$̏ q{a$}ޙMF /Ĉ80O'zfJg&Ns/p_鍑x)V"/FA}oP By*KY4NE L(z)7=l! 'ij)Q?8>uk4>YS}G@2jb ?֋~=Jڕdy Q_x(TUy8%] gu'ai w^0c~ݧmu־x֓Q؇զmݗJmO+?[;O{}Wzb{i[;/l<.L-`W`Vg=m?7omojVn ̧{bC;|'^{߁؝{JygB ?/Te%`r ~~ҁlvNmnol=o'7u.@٫`1NK o`kws?˽]NSlm#A>oVPc@CAR gD~œ6EU5ߘ"(}t?w_}kҍ%@[JVd mmOo_Zp-#F1dAa`~F!68} H03 öH.`GҟƓְ[7WsUֿx\*B8x|܂=GT.yҢ# OQYC/c2Al,Ozq0B 'Ox-F^1 >P%%1YT12jtA=1k M p:e(Fq0O-f,${֑M6%2 ě0:Nt%+6XzK&a%@'>X$%zB^""uyk* b;by} Jh kKKK95Y̵ n(G*T6~@U|Za*Y|h4ܭ`~%pCsx%`ఱ{kOD0EP}R{ mh,= sK^%tTxJ"&V]S]!Gx'@bI"֬{%[zז%VZkOV Vai k.R?חq]Ne*P@>RGl 14G#&?ْbH77 :x﷌W{Q\jn4Vocnli dDܿ/JURκ(RKyX˻@E6lKt|ҽъkGTdducUӾ,Rǯ/7y=D\,R`^F4$TP+(.r7 `k")ўq&Ү$%` t!,Z@ZHh>-+`H&К@>Q J;["nFV6A苷' 8(`H+^`]piovzHåNp&BTAIm(Mr}INS^CT DvItv7PPdmEmCz/e?VDNu3Ňͺ~Դ4ЉWT+*Lcz@XALb)_($h'aFрm 4d4$~?ZZM^]bz ft~['A17:¡-)XїGpIE޾]_]oY_E8q4'͈K`9jyZؕ-f:i>84_XWk ?Hagb`K kis߾T9(|)?(oqk|6uбhtV{ ֮\O?As84*׮7}laU2_dk|u;<{;P4^DmhsQAE*TLPZۀf2,|\_zD_QwH+qG#8F5k1,É/Bm{(7 q<zwN[+3ڭun[%/-b?~ś;R?m֛֜Ihׇy׍ *ӷ)$| O:{֦<*Jτunuqjj*Ж :M_{q!wv~=!"-_6T1#Eu=iSw#/wQRj7>.ҨF?Ia 8mmزlOqHwW m4=RcUhh&u 2u7֥ T?w }ĭ¸tR^yU"]:߰C)/>E!ڥDҪKK\iὄP[M+}gQ/;澷ۛ;O0vԢ4#\ZF[^܄u녟TXHRGG5fư~5E (z fZC3Cgfaap={&r\І(%yћSŧjcT@!S:iYZw)J2؋/R %R:`q,8 z~w(]U M $PwmaDh-,=,Z] Z ca0aݩ^8pLO`b;ѦݏzGW#ѿ?޼u?{PQomiB%pW݀Ğ ,}.Ɖˍ4uceGd9uuzDqS<@ݣL&IoݫAdd@C+񊭝Tq:]s1QF]`?UqIUJEvH FA_lAڥoEv Ư.0.u7v*iu% ʭހ@ B S]hC;(,ׇҦj3;Muَ.2 pANu ]Cͥ׉0yٍGIΓ[6¹o"?9J$Db/_* pXvi]${񻀜_%Q^p֊d>e1}ݬ͕7'{h_}q,"SONFirh"adL{M4myHAT{g=%on=ADpˤUYmQ7x@TYP[(L[$\Az(qcxR^AgDhȲ̓+ME{8M4?r ~SYzy}t?<8l fDh!б_ vá X39UܰϸD 9Lc`RQ7ld$:Sp-s~k m{ɠW]4b_Lv{zi7&aT—)+3O*2^ V^`Ytx۴8eꆫx0[Uhg h-sO 'Lopuuv?.4a-eɦ!AwCK+Y0.#Ur0Rk#nצgUӋhdLEu RtXmQMw>VE0M sMYwbR~*m`a]jc&4:GN*j=1 =͒S`3t${WB<{oS)O sܭ.OTۼ5| ̸sK4]f$p:WtgF/:-+6խkg+ .4U>FmQXlE޲^ۜ+WUkښT-Jy~]OԆK:֧2x |/&K`/W0l#v./4tB5:nwvTxR= _ N <x0*m9:TS]Ժhzw?4i49 |8+_q=.z11HSТ5-R0z#ZB g^4hiru>vke,.RGQaH7C2S 0*YƇE:QUIc8SX)𨵪B#AE{*J).X0 ʠi֠nCFȠQX2:\ '҃3:[mws9o"h2Xv?9CSnW4Hɯ(afQa\h7bN(d|tH'iIHjyya y  1Qw7r810T[DE EJHJ@o͜ȤJ Z$;Q2Em4&wPT?;Z ʵ [|?!zL?/+vEI2iB8%Ujʕpd0h>MZ-n/4fcRw(K8^H6 v*Z=Fv. ŀdLbݦ-H-̻e'0pfrP%!/%LSlڢTY}u!IdY9wnFMeWƿ l&d_D9"2we\+W_̬)%~)"fsoUS 9`R,ւÄ)r1t%e,9d2 .]Vw~ݿ^fsJ ysyj;"OL6!R} qKܔ|rko5X(-p/GY&ϗXp37ES̛ ٴJIYDoB9eyj= ,'ezX]f%(Lb E8Y]mzlou%BvJJL.VK>&j %Ji23GB"}I<t &)C܆C AVw]Ӂf!q0/#HeKV!qԺbuUbMlJK9'@䯃ff!XJ+33T]l&$v)X{UyC'+rukb|Kզe#Kv*ۢt ܌T(ƚ -u1Q Mq2Xp쟗kw.IQM24 MqRT5p쟗<^itKbcX. &.1Zh6EƖrבz $ [0*1%̗0! Y7̹^ "rJQ)ʰ Z[)Jvp5[L'uϳ=?W_|࠳7"щ2뽹hK+ 4Z.յ7_|03Ip^dS>Q'Z%Y$BgaY)yp(B89'T+!E>cɟehĥ.G{F\9jtE+EQrőh[a 5:F4aq|- Ve~ `nM`Bu}څX84/67YC7ݟ>4n39UӉk4Ym\3!0K+9UI K??:u6Mm켚 -~Z,$+zL܇3gXKgɛ\ Ћ^ Ћy62꥾\qCr @]ũeb*ކWY!)s1Uv7BCr"z>WN%ltD#u:7:u>e\쌲./12)k\~ldfVb4R_&pQ4 -Sg]~8-{ 8/6n3Sc3E"5$L ; 'K3I3p7#ޘzW[v;(ufW"L'$/Q19]qg*1N]&RVP'1ꛪ&==Rdg["Š8)%N2D|23E*Nɨ9 Ɇڴ~m~Mw=Gؠ3k6QQץT`b~kH QT.([ߌä6T0CNwH6|ɡ;LW5ռVMV]pn,]-z6TwT bԡ~{h.klVу*~:Q CZo[C~x`H]z>>y2w4e~А,GX/Dz9PCodh_2țz otK(&P-D ~VjfEХΝ?jH(:,5#0#u9o?n :|V-T@,ܗ'~Y2OA{B%'4(ql9]DU$;-(0]2e7neJƆu۽1CU)Yy+[R« K.6ѷש+ ̤iuQB\ʂ}f}Z /@q l iȟf1!lb#лC[l& 0S˙hjdnmXϢs9hm1˶zgicZp-wY[t }>.nqAtOqLcȄL>[⎌-:[9!t#4ͅS#u긠,Yyo-DI̴񂱴,fZei++KVa'W؉b5Ll+.m)hK:q9,24JT*dp!T t"b8X%nCJACUl'sNO}WVVn/6 ?<_`Q7_\i)mZ>˭?$AA^& iA߲knC?IS?shđ(O4H9侬?gʛ֥.O2p":xuuZ5o˽> Pd 1 -Re5Oeףb UnZ=-ͱSqZgψGAF>nb6-ot+B"PL) `BJՄQҝQx`t83)0dH3Mk5\>fVחv${03s6ϴٮ6+<L[ww%yq^~)sBw*/#~U?jN;__E윙d WKgo_ݕy< RTq ~"H>`pC wy0OZ HF<dSvP0TKAϝ%0TnM ҫC)jCVW#*L-<6\to/bg@d$="J2#.--A QU+ӳEu^zb] uj^U*^=̬>҈+1Ϣ\F1&a"Z p'eT( Y8zWY{ᩏdq '5O t9MYpʳvatG(BI~`:')⊸6B6ǰѪAưPGE%э7XA &&$p y)k9u0;-mz:!{X!6RW?I0 0Iv^V[r1)BcxLN]4Gr{=^<(l'މ5,ǓC}!ԼZiסZ1եPHr/irPRZ:"2 $@PK>^a]cJ$׀ݹyzUژphʼnɬg3~T;qA<&)8.O9ޥDKvzMKr߹X[Snʷv񘢚YR+X嶲_yP"f^! g>ٺynR2lj҅)Th2|R3捙 e@l6#t^kBi=p,=mlYqC?=BbrF!ȴvWZ2ߏh%UVcx =GBb'v`ݺ*ŇCX# "T{!#B>p蘟Y8d='u*sT Ί/+٪ $+ZԑCdr@ѫn$?(Ғ?? ħ5kDo]JIyV-4 zVE錠?o4!M䢔4q5ȗڞq6 Nc6:m$b[P)=(dcr$z)ei0z,EI0$ *C0"2>;1Eһ.RG`33<,́/O$IR#yJI*M|HN d9qig<~)*rEX:a_(4ꨓh& B^\ѠO9Oc<_jCa׳~?E [ UNw֚qư]30㌬K}qŔ"wD]B蔊ar5380_͟LުYw&1@lUE\c:<='\5jR<`M c.Y``Ya<Fni`w &E@wU D-}߇GBmzqj]1ds% 3BQ1=`^ 0WZcpڴ }X v,'f`dỸR^4kѐ#;@{DO)cjm] B-rD"ȕJ#zή"nsd'Kp^1j#.}I.,WqZ1p@T.S!# OP:WuO91dI *uZrz¥mN1m]ND,K#AkjI*IE^ds^ypIU z+_m5J/: w.5t:He%)BCnD\R6^П\RqMeT^~))gkC[qb1tW3Q y{1Mtn2bv3OȊؤ\}ս^x L>d Hؐ;jg,.ubEW# ArH*Jh5Id%ffW6;]ʐa4Y+ kB-nGd(*1OHZ)?|Э)hºHy1d;G Wɝf%o)23jvGM}iŏiǰ%&>4\X7DU c}$7ks"Y-18#0$:3Ln3w2VI8l%Ӻ}@E.]fz~tiqP/CPpg<e*^n#v*^z7ԾĖ,Xy6߇yMNmd;mdfyw2r/o![Eùh8 hh̗Bbo#)a1|S }I鑉,{t+NmHbTדHJ`BT@Ek&kU֖s"wh$"umѶ$.rRBQM/vmhmXŗs m xŪZɭ21rl(&*}LܸJkbmW;NC>t]&li&Z͆Rw ˢ1x/+C|(4jI7 ztj~RdpyޫY׻κ-1պ7]g9lywYa|2 J8uvGf;lj.;_q]E%h\J.BC+L/2 4m!З)G7Nk7>>vXt؁E\nۂBM|6ys={c썃?E/S(Dh5'V"ʢb?u uruS ~"e5(2AolpC چR0 a#㚥Eֺ s3b]Y.l8,xߤZ{?CY!# k\.ҏm^X- ֓=,Z|h_6t֍ZXҊ1쮯ߤk(/2K5)(c z}*Α)6 VX@=Q=h9`QAXyPAmʩna3 OS-yiw9 l[.P$n]]AʺwK~|E@9VnTʍܾ0Z=V=>˾Sܜ"x]\=[fHb[˭g gMT_dgGɞfoT ԂmŋSWI} fOV■޽9{|Yz#I{ xS}bOmFzyO6:C'82΋ND:(>Gg@8}񂲤rqa;eg^Dr]fvuTOw(^=mUP`\}*ڱ%H2L=~0@6RhY)r^2bҘ(V\]6^ei)I$%vމBNׇR}v|bcB6C{jxL$l e (P'I4xur#OhY&Npx ^N 2YQ+~4m7-7p-}ĩA*O61z1Z09R1%ˀLs*_V{C3ۤԙk8fKC( ^MKWCz!n GVP5eo3J4-럑);u+RnZxgF^5WW #N|I6_)щgFto$lL>S8KubeUrg#Yy]).zu틼9UϽzέչl0ɦݥ)~SUdljeR-Mi}{e-_:e77c) |"jclTPAHrNvs"EphF9 x}8 `0UE־^_DUbBe*B>FR M9#EjCΨfHN _-{j.R+ö<&h#H5e?Nj.h:;U0Z8ř̶PhD2׺/7h_gXћRK]6é{fN3%Uxh$pd-N\ݕYG@&HN^=yP]hibXKxPU0T.TC#5Q!E3[m.ZG qBgryBZrv$WZj`V2#SP@x`Qd)6m 5EfiZƂ뢔hl̵}Yl\`Jf3MR^w&Ֆ4H¦ cݡ\V1"c#8-L\ ުu96@A7SMg 74ʝɊ+vaZSv{kqw7RW՛kwwgv`^/!>2N:|ֹcOCXNJgJ*;-fC+325|k.V(W'ݹw %"]1w' O`9LV t:E1 }ŻZY_'~b"=7q S}a^X籢GΤ~CT# f/Mϡ6Q?5WW\];ksh1EKo~JAl=j66Q}5L'!6U9?c@UOqALPhVt^.&ȀPnwjD@(IcG42M60y푥ݾ\hV,1aUOq,b)گYPmZysC t2󑁁}-֬ h?:wWu/m] N_SiR!iC~DctQa.ڴⶶٻ ]=;;Y7^=%lTQBs:_g$t?"st,fdM{0i!PBlxs#E 8yL^) 2@$N^2BB7w37GE˃iha"*x=GŦ|ѰgoWyt"daIfR>%9JM{\;@V /VV[GH h*/M ?('Y'y;QhmajR6 m4Azo.M~ 5v38e |:HH!sB6.㎚*sXN|Ȁ7vS5345ikH/")+: N<сx,;-H90g>Q< tJ\頻'[ִcD<67pI> u|2E/@ȧ Ha!6X0o}~ @V}N;?UbC'&M>#j߰KtYia:TEu2ҋyy"$\j 3FI]㩫]5Z:1j8t٤E6i2S=7/fv*69mr5^rX7mu|ɶl-- x-(:pD8HTt[lv#3+*2G"2z.9nFw~ܣHvEBsU²xc hni,+'ǡ: )^LQ8X"emŠDC+ DEA4c %X[zH9ć} Y<͛-Vq_žGhLlfP` TզzCG6qSel ]}) ,)`s)0C5 <U]eZIoʼnI$6%ee3QumoFk,k[q qVa kI-|4>h1Q֥ٞBfV3pZbS~d3Ñ>\nI z>AҤ11*BfyD|𝦈G=Kdyp9qd;~;|f,V%:9аjH!ֲ<6.;~V`LT-nd,F?ɑUlfJ*k>!4,^VY+`s1*&gÔ_ic*:k)JR]첟ƠQ%!ٗbBa|ә i'a2 biWaij|>GEf2 ~F=i=h0a&:񐁉-)LϦ9nP-nXaͪ5߹>pP ^;@\^4CtBvQ<(X)+7 No(CjL{hM̍p~%e2|i_+7WcVkâR0-1O2}<$+z"."g>d;>P.8+En}@| {vqr&b ]4X'ݖpnAg(-@f=i0Wf 6߾{3cuw9N(~#2]Q:zRg('OHiWn ;D$s鞆O/j0B +SV>!Xk%-߲+N<ʝ,2%W³ $Q Vg$VDnI'F H"{?C]L3e?I*Y.ˮt`lezCU?Q}0M1x^bnCT9s0C/cp+3uJܙ|'@YŦ;= l"ҋ )G-H}]5šӏ*($9 |݃ΓbQS1m16 ľ|ۭ{|.?ϰl"_YMf_ՑRZ.#0?k( I*{`i ȿآxp,UsAӼԾ:U4&)2,0mR |6mvbLfM)#zÜߘ0J8#lYfL>&a }{{SŁqT"uDyx%Iz CJ`:6I+n Ou7#!\ޣQ7?e_Ǯp o^sO_ e.sHR̉bS' Xӊ j;)t:Qͺ@LhT$&L(jd lXZީB6l2@Kvhmp %B})Vcn-@i:zfbMq25 A쁐!<;bEdu RG圏G ܶfJqD7 ÞS>Hf5Rn9B[6T!Ρ)&hV)qVnҬajLBv謽1H" $dlbNv_^tĒ/,@ ⶮ;/ d i[>rU]CG*wV\8M[[B?\MRojFg.iw՜M,I (7$*3-ؗ<:lڕ1J[;t<W$WrH@6S|{렳eA?KΨ,j*2 HGgR@kR|]}9Ih=Wr% D9//ePQ!OJepЦRv,PSzC׍zD`<}/03D$:`5rfuZ:?%~E[쟵d.KjnMU"Lw`c/'åQms|}UeKȘm 6f"?m8OTjΒfTQ/0ѥ Q?@3[l Ӳs0k&&TM:KF\M=E|Ҝx)' CKnz\QTs%|T]X~T//.Z /`w5%@[_RXşf}/,+g_RL΅lߵ%C"]1ַ^n3}ǖ[2Ld!E Q 7 JmKo* ^Ϗ"%/$8ƃOjQ-g"ʃ(T|ytlUH*fuWlw SrQuBx\ qW`RITd9UlOkIA_[kѼ`Iqio<`"(L:A,Ne Murq*!|.\Z?z/mj\[.mے9',S7!q#1G\[{z%Љ>RE.HEƸQ,%~Yq@cߑ!Y۳b~[3 p%MF&^m֍|ǠK6TO`a Zw@qh71(ꄪH.Hˑdb,A5Sh 頻~z !>S6PQmU2V@p|L{)J:EHWiL%:4Luf9m֗4 #Pb-  Bngo=[O 0?= lp%y`q򼥣V[3i,MҼٽh)r70 }]SivIAt)n\e*c^)8ʚ{*ZC>ʑ@co}4q4鹳w']k=鬣3X\Mx |QP5>I`gqŐ$xUeZGHd9=u2q)x@Q^Jbn6rV(<XoѼ9ᎽԭS%0ܒ/1p/ rʂ3тX`DG+Qiƌx9T-0:T%!yt|?.Z_guuݬ߁_vGq' aĚISJmL +/S{0&Q,FuZz%wңņLj?%7piHt(xh<\ϓA]4b;`ۇ c!|t{w〺}z+K?#@un؛\]i4/o [;g֦1=ZnzQe -b<J}" P a*2t4sǡ>q0H9zIa /F~KAG'Z {qjn.!<|U4B}HLuyؖC?]Ӏ1iNs~rRpX(#uK| ʎݞ;mG6 pѦ6`2аrG2yQz)%qu >Y-8Ju,t a'ƿxX܆>pk>rvf;3δ|g+_VE=`'[EG,ŋ3/9w4* -c‰'N[MP7zHC/=^[mo0:G_?ݨ7~.r#(L?<A)@hйHGˁq7t]tgV׿٥. B1~%QԶV>D''nN> B@>O-ytLJ3Pb#>b'-ӬK/\]}XyBou2tug0 }eҞ Eёv=+)j?>5>xn?QTbV .bZne}Q4YxĒ(GK*-YD z'~R 3!VT]ܨ;rPG06kz`M1l~i!VaǑ'_rF?i{פp(P}-o9m81[tpYۼO@4Iap^f8hu(vǑՕ{JXm`Ҁʪզ$"Q5N{V *jtЄFS0ՄI^5Gn  ȃ‚k(<#$ 36ATPCNTQ=gO[Z VF?r! Ioq=Ay(zG5++,N`lӘXxCS8dڅFSoU_T_k͛sk믶L͛yk%sЯKSmӲ%_@eď>ۉŚl5h`h{Dҹ&_ڝh4N<`J+8meVh߷OЬ{qcI,c8=;d&g0@I>! 5n=G?LƱZ3$-D!ɂ- F|~0FW~9;bo?)zʾ~nAèvİͽ"CSD}X)z&Ѕ)y©B:dT>r1F:.>ӳ՟~aoNkݲfa 瑉*4G3՜͇Վ`JņБ*#+i "QYScڀ}$N8 ]*.+lL{5w3&̺eQWVpiUvX! Ȫdhטi4s~?xUWWWs?$l9Gra ܥXGӈn-iMm?k _X_Fqt< C30ʰ)tuU[2X"FG&j | 8N_QYӖOU?&,)FšدšDhe#jo*Q*NW( 7uuH*g!tm "oxǒ+cj.t7;+ky:.[Q&aoqy.14 wi7=ʞ[q:LnPIR9@Ֆi! IҴKؕإ},FkRՕ>)=|i*E+SL(VKGP~7N1.{D$|DdJۯ9grh ipJј Ma7f;^)FyKyX8}3~$bX|)ݧ[۝nmo7(VyV9 >HE=/?WN^92t$:6]Io5OSs_8fc8Ɔ}7$sgG( ]!2aRK;{Ʃ=ԳM gCmnC"J5tڄG̀k\du@9\H5()q/~g9oMI9(zxFDWlUnH?h@Չ995aJ>2 A0 TdgR&y'TgТX,l+oS '+h׷Θѓ>D'2CjwY9v6('X('-O³Du#@dK 9_no[L 3Vn;S 9S0PAtr((kgokwMvk҂S*4'$v;;AH+x=}yr?$i+ʓAdO*lLݜ]1"Ϟ[/C"R GyO6@^ޛ4m]m-sana>:5E7"J&ha>^c_V&bw_m~_1qf8$;0} 9gweE;H#iȌ&oWc90v=U]U]hw6>O׬'e7 )KDT_nu1U׻]MR}[5xw^xU,^7qcUk4s{'.XgJ,_ЈtKY^_6k K ًE7  -\daE ý"z46{獠>[=燜 c}Sqh[?B/`T!uzyܴs 8|}&DQP )EoFxuOh&^e/㆝60B=#d~QMz=:i<9P0!d54Ãx'1]noG>=/@Ѿ=L YdWC( oo8<^? (o"Y+Gg@-Cih]v!B"teCmzmSb.HWiKlO/5VsSAA'o瀺JUt6{hq$[UhGdRfdc"[?YC @1*J NC|a^pLuUF% rbX1t1ObGZ'~ !E"aTR'ţk;)G!*{ hj2$߉oPAi B)!Jn1Of@ܲbY,*$@ 3v+ hZ3xR #EM[pWyPæu_zaU { G`N 2o1`\%h[4GKi_W1`&"*ZEBCA_ Zl}c1G.'!ۛO֞F,MVf<#|Um Bo{b[.gm[.lڨQ#}5ije3T_Gݤ㑯,5C=NO,Ә ,%{xߌaJeU i0B]u8h?Z%Ҥ؄R.^0(x2¸u(!\Oq =Dw eH&BߢJayQIF"sCTiJsaY}2Hb*ZM2ue# |"r9VK2@]4Eh=[:$A}BDn>(7Q[St"2<^t_b/'Զt)&Y9wy_5U"(.-8gdo@ʺK uK; b~=HXEsJ;RM4^b%bpOu+0$bz[9YU1zҿ^^o q|Ȉz('r;g͋-mHLDٵ2ÅK٣f5A5NkW *IܡR0UuB?c$9  kE˖Y:Q]m1D;byw}) C^e8ՙaȻnr< T12rTWͿ|v@iŽ11ί9Gj~Yupq$ݦGLiw"w˅=He!NfㄴdE.~>tZ$JHVJhd)SCw^'+)9 A*t%֎/yz/qK]g%6-*Z4kDF %l_ S%Jğ.g3}ӼzʮT۴n>sPև>w- 8/nzvW1V%ɑǣPt,s9jQu/`i kyJQU%}菀:x]KO3xzk\Vdn4A9iD<$AKM92#=mgLDӗ4cX!AEѷӌi[U!myZ.OI=wѱk]Y3'fOmF/Ro+yi$ņ\1Nޢk%:do~ ;\5Pcj9XSP2_8n"Ϗ|Gا}},G*Ra̝ʝS JI1G c͌Lid`~_H Y=Rfv6j\64eOcC ADaڡ\s WVɖZMw Vao.А-&,/.2 I u t>",n˷`ߝ)T^4 eBM%eymSo ycbrH",VR}o NA[3s:OeqIs]ְ,в&=!XX㜙2)֪3sc*80nFf#^Z"]@띅tk6lG4+DmhІOc =Apd6d#2C~@өwMVq"i^g+f*5œj2D~R#hUkNQ8l+JĹRE)kf}W9Py_:Z Q|7P$V:ӷ^㭫<`CUL~vq`Cq͢,RATZ>t 9Xv 3o0"5sWVM6V4C:rd)b5)/7Y|,?φ~bw.0 ƔC"yH<66#ъ#9Pŕ2"frl|/ y):Û\JE$x,42{" E OCW=O_MllfF< #"CBf(hx][}[hw:(~وJP`1++ ,=9hT]jA#:,cBB,7monP݆}/śx@#@ȿn2 6_4%D\Z SW@mqX0AemɶIM*ReKՍ/&*Ԏ 6Aw)P܋َ` >1BXL8<)T>DPUmjU#}Cu@'۟\eVjɶl:INJ0:cޘ=C="Ak.YMCĢ/ͅ47."e50fD-[=~lx<9<⮧aژ@(+?E2q[vIldKKf.W̓L5n'-7,,h+Ičf-Ⱦ+>itbY(,p´Hכ] j. e:+UP~M+IU '{xyIemJm&2k7:DtWo=#˻LTH_pe/M0b䊖N K_LC;!0ǐeVr**6Lݷ=8#9D/I̡\_3INtބr˺-F{I/_ҨY͒ߥL}; BFThH%^,| _ҤDM5+a;7zeǪS eNXzH(zr{3[+n3P\2>̺!æ[SuxmH/j/CKd]R8z2OE"?s r$x6{@흆z7 6w1H޻G6xOP4. \ej>^G U4jnwR5YdWZQ29%(o뗻Ft!։.|u'? /옶m 2*ֻ'mA7.)z9<ۀ"YzTjE6NtijP60}\B%= uuJ^sm@ݠ2k.}Wcw a.vs3ƆWGTbߘ Ϭbh+ Nd쥧S,w%7F~EMFt\է_@$q6+IEGQEU̒͗]񭔮(+pȰ[,PDE? "W }6]2 S2K#GָxBhJȪij~M k8O[QI\k=q_ =&Sˎ ( 4Ҝ͟-\3Q,3V4p5U/a-TlGڲjy1}9HG:ioK ALJY1e++[ 6ȿtOZd\*_.rKJSGO wзP, g$ѭ(s^.mSk0/T(,T<57 MP"L2B6զ:Ǩ<`iTp/$_6)kYfgzA |:$J1e1m%rubet62 Wfh.*ZJ Fɢflٸ ;O/,KV\0H/pΤ4g2Phݻ{/}y{no!ۉJtH"Io1҄H&;fuhc|Ow85> ^zkaWRs( FtNcSQQW eg햎MoU/R ^^Onu?dPKht HThU$xGy 1s/Rv30 Ц²~ћݴd#}3$ZP>2`Ǎ/o* ǣɚ8d RZW+פ(mX1GJ{ ӚlKOp`+6#ae,)g' 8f@Lnspp=ދiaV<?"쇧)y8>Y7jՔ}{D=j}0jϸ)IBA7H^\ZeZg/GєjoPRS2&" 4O/l^۬ZNqtHpɋlx}Y1L0 ~`]-늡)E po:t 1L +tVl13qPuN3t$sE: D)ŶݽÝo`+ )F&3Nϋ:f,mLn tZ5&<>NKM?/ R)^.se 6Yo syg%,AZ~gT*i" ; k qrNF {J1,J 5iҎ| M:u"ݱUYtHȐ;,<9ç"!=0eTb3~#'@8Z>y3ZBog[)8%3a/ҜN0OZEۂ*)?IO_~% S[CrFš 83c.ͼ'TEҨ384β xs|m!H3`mfaOGaOZHW"SW41 d[_Z\eb\M^Vv$jCwSa[čaӑSʆJDgG-2䧚}Qn"@6kZWW c3QI>x>LmdoW2h߽x8@S= k6jTkeQ=TC-|O E̿X]?!\DFj Zg/ٜ@#Vr՛#SN˽qb\+&G}NDh$]6Sy93ń#j29M'I[vp\I~xph+-> -ST)v':ԩbl\7=l/Jh׷ذeP| 3 ^o1=@[y" ӭsh69/ Mmavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/rubygems/zip/000077500000000000000000000000001446701454400314045ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/rubygems/zip/2.0.2/000077500000000000000000000000001446701454400320435ustar00rootroot00000000000000zip-2.0.2.gem000066400000000000000000001750001446701454400337200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/maven/releases/rubygems/zip/2.0.2data.tar.gz0000644000000000000000000016635500000000000013337 0ustar00wheelwheel00000000000000K{_G0|Oсlb!$.(&68l ~$O `֒F;#gי-ݥ >hy{3˧Q\pNE/lllڪv^(_]]ZEA2;Y:ޘh6M߳$ջdW$WxŽh NKuV5N0R8ϣ7z}ryC -i]vw$7q'Xg8SѸxfh -S"uL~l?R۝GЏw=NhQc~3 Q7i4Ŷ~?/K+8}vv)46#{7dfQoZcXXezSZUGzdZ {1Ǫ9zGwIJQ@r ̙Ʋs{ȼ0ӌKESg/YY:ރ~0s%@15 ׸nTU P# >Yb 5"cbuzi BzۻJUs[Ntk4@!uGt u%@Va'gxCgo4UPWVN\%1r8ycX/lX<Οm<ź]Ξ?y4%j i;S=DPt4gJ-׭lBb֚K+ Vl 2K ̡,1fá%Ƣ\Ê/RCQ|ЖrFJ.8B1,zPpljSRROH[ >~7x낼0/#nomݦf<޾m-DV@**yF2{L#8@t:?2Tz=OfSf錁GyÒWssrj I{om2&u5k]TC sjh(UF[S6nJ܍ ^ c7uWse"P͔,Emq}rȑ@@X-s ,n>ln7Ջ*C ~?l83;b2Von,Fm*l bG8Ei RW^³yMl7iCKN@d€gJwkByUL8:IRv7ʑ~4+"&7|7b2 g}M-mAۈPpx| +XIS1Z8\j6gU]c @mB$et.cҨyʜ9~V8Ǧ/?6AETzsv#c]Lw8:硑#5&"lZȧhO+4!7S l^؉8(Un N.Y 9EԜX`"DfN}ʓ̻ cbCmkΖ87p8h(8fh:UZn9-An x|}p_v䲳Te,L<VL+`G!e \8  > ^:͒)bR IFjtw@`n1[XaފSQGYMzeʔпpXXtF3ԌN* 4@ȧnNjن){/w*>bLҝc1 Ρt0IIXDPVٹ٦wF6SXdLVGFan3=7|u~ o&ռ_^ld UXP#f9M/5tƹ vI9ha[LȘ!QB f߁{;%w\ɞ%hddH$qK֙3 x"8,殪DPdQ)J5R* 4jfi.Ef +C,Bc֝!jhw;.O܍eN7Վm\5i]T<tj9g@(" CDì~%808x' h 8 6p Ps6B H7Hy$h.5jI}>2velAviH~'1ʌS{SdM2'+#\.PbZm6cb~ +ӺӞZh2U6„͒*P"̂0;e(+s"LߏVg]drѮLTn-j ϐLPܵ/%&oBAMOjǧ?$iyRE_Qo2` .-EʤRNk^k\RGk)*Hz0ޔ\3^@{ŻrVOIy a9 &$&~p*wq>zҗOOOŮ` x+M>և4@u9!7iy.~j[O)A- ݞT4~_Ӟ>͖\H#kLou U݁mdJ"nȏd# xmUjx>qֵ1Ta9Mπ*e DobEhva,@x3FwZgF.[]lE*xp1^ iIڏ#aa0.e *Nux{PslċTMmd$MLoLa^n$wԈ7: 2t{%:*~2: h zF<,i@d j:8U咰4U~K{j nSAETt{iij3iMNٴ9רM[ {/@ջ$'DQ~=&Zs3fhǗkf\fF__^Q񔢗5Cեq&5`0xs㉍5Woo5 ՛d [{S2^k-hS2.3B|C'$q\;VΛQO4A6-=<,Vn-O G5 tW;MV/@4ɤa\<ƤMo!z}6ҽKcLp|,~ "|zmVE` kkθylUJ)R+ӨpY5|o!#rqa 26|bB2z; ujLEe;{6f2C5q5FxyMQgxH#Y«.K8fGX;`&@ w@m 6X()6 L nycKSse";V[7%pһE3'sK`6di:؄(N q!'rģsh$&3<\V|?KkicbԇEj|\}喋 ٘ R pXeAᑣ;vԱCqmB2n=K{dY0Ltvw8Gv.u+&vЖ%' ҅H|s kSi*)XІk,n@iWhrTE+h<#nD;/uDQhr_ɔ q"쨾H4p7Ų9/@v)>y0rDZa>32_GCffN윇dUm*]D%m"[( =cl̕ b/}6d ^*e;0k/.FРSnMx?~g&0'Y?{y^$ !qgg˸Dӌ6{āCUl,މE6PF}8Ƀ%4t846ʉ>jifBl(.OB8,a4׾䙣@/ `sj@Y'c/ h,˭=7=hnȗ\\ ہMY6P|bsa!Gh/j9St|]_ ;M8[p^ǃ(~$ i o`n""-D٘w2MOWm>l{| }> ,fcdUާ9GCxfa]#k6Z0h '.BOI]ud"64(JGf$.-=YsWe]wУ3EUi:|iwtû/ 'pMrZ_,ڀ6"y.Un!,XnvHB'k%M6Yv rL9<2h5tuE=F6r,|FFznro6@iz@G~40|I2 >3oDG[K7qHnfv:GG8>8n#ggᎯ* \$ڎ:Y跸:)9ג+/g?>Urfb,jQؽu-s,#KZIEyķf!YՏ}wZ 6QcTs-Z 'r}7e- ΎmWv8^!25Ho ju_Ġ[brDtC8F^CnRؔj& aɋ veGpնV[~}*sL1AvHw !(zXڂgv&?x9)9T\ټAdLUBFѦVQ]y.e)|&^[1&T=/)1j iHӢ8F\!;3dl"EmQQX*JW>$er ky/=fq~&I̎lRqV7[ͽ%` qyYB:fF[S_{`9/ w З!e`Rw3\cFٓ#鐞X,.@1OKiv\Oq!ǁl=MSE:&|_ʒh7M9;l$Ge; l2& oIrс~b zzCDDk UXj&@ϴ! 'B-6aeQ],v.K]H1=&ᠿJOܾ`Wnwv{vg|}BoFH1n$a x07W@sk}|Tq?OfWXv\{uܩ|ȏ톚/w3N] 9`"-_-IXxDdUga}$9--~U`SC"!7[ɦkՒEo\t"#19ZvO1Z۪Q|#E;y:ICKv!I{Q9X|QF,Ȼp-,%F>E"ć#XUψ6§07VOx،7H%^ Йٔ T#hpBՀ(0W$H^P\_Qȭy!xdSc&N~*YA<$PJFtl*^;)k \V :Y٠#C9s9WBNY/&sC5,VRC1jͯƮD]am\NwNl]68o5 f`O24ȀYoxy5]_0]opf Aأ(#&hDQk(mP,XR )ΦZ=ỾPQ욮X0aoRsCi{l>Fq0un=ԡ8hG惱a[HWqK+m8@6ɔpDMbwɄXи/do@M<ف:n򥑕Εng[+HX(6N Ʒ.(:"dutK 5Mi7GWCZ,4tsҟIlcuҨGQ>_|Y]n p4tWpv 8#e<78ۀg_;(15XTޯbgK4 joy B$g-ƚl%dn6?ƒclL<4t#)5(Pf:vi;nCʫQTeFCmXj<²7S ?a4餳u.ܖ%۶MG38Xi btߢS(s8)93HZA*#ކThg>A# Kv?Wc'e͆\|Ŏ/.K\,U Ri [|6 Z[Ѻ5 {Z*7[,΄ S}]Wܮ՗q=߮*Pc.+Ώ%Ex;bb=;=lrMijDu4v˘ыmUOdJ} yo^ī@)`r&\Hͦnd|b=jP{ 4y#*634WS8#<} _WJ_p3iN8R0H %iŲiSc%b s25jȑL<|۞[?ZF8nphEX]2}|1R섪UZ>_[Ja`zOhku3xC`?ykRGQ(OhQ o;q=~ts8=qͭGNl.{Mv}6!谙 |'È(R&jxIcSKoRR'Q5>GRRȿfn^W>ԀhD-3,$xY_s/1^*i'Z5a؞8y|J=l&\.p`{3z>]"<3=uֻF D%nP& \Qy5PñdY6SLP$s{,3ez$IQ]'ljm}AiLumCq |_bM͓UyR|+52>LӐ_*&Zძz0 ~bjʸh~ :~abYPb^(ql .ȲզTҮ(4M&_R܍紧Gh0{W_nm/HW*uz 0?Y}Aܷ[M5pѰtqb߿@նhp"`E*I@90~/Qڇ>jc44 K"M @wyBPk r)M %L5 2%\\1bY&c^&j%IڹpEO ?9mūv}x!}pW nGmu]ú"w=gWF3 7Qc2 Ϻ4IMz] [c6؞\oV*m,ZB?#[܊yM>@?u&rF9yxؚq^KH#6npLֺaǁ,MشM"xb9)Q*\:GLX(w%awMj_EL 0dn܄6͈d8*:kIAs8?.Zu_*6TB+5َQ#u4awֲpY8SRpv9-%10Z i A^Ua8 Na= ~kЍN$M ՚ kZ +.^N{rLMa\伋whb:eaZ$6qnPuS59`t:;z A n(Y@`Npۼ8ċ: vn \GͶKbt GgKep̳[\m̗ڭv ݿg|ց赇ċGBxG¢_; Wo+FZjKPۉXk^#&$0w+t(?t@ 4T6!K6 t-t~&oHpz.g=r!?ggӧVr~1C'ptnj݇sUl@n֘\^О/پo1$k7`fFu4$q?$77I9 c<6PhUgIhP_P#| 2$Fƣ^$&[j'ףpR sjxU]sڐl6;cZ*Wد _sؕ@F@ FD]f6{:#-]s[.MC֤o-[~orýj(;/lq}uESȪX]{ZiÎ&7"IM PI aS>ԥ \t:Y)' ~ XT\cN)i(|cMM\r)UM fE 4lwwb<yv.biKuؚMݙM0+0E+p#rW;CpˍD\h6Pa|4S T<}JOia )}_L,%n4<XmIëq+qzOPB5(Y%Xwt8hHpVB:<)l@O'$.}_)vhUIJ ~&@ +% akЂͧ0HBxx H)O" T@q" w7Tv"4{TEHwͯ=$,mUBgW< : 힇QOoبd-LL8- gmr|z$U@)6l9(`TAT<Z;H;-/oaW4éӬa_6@ ɞC]iv6v+6bGUV44Kb~:B T6A_a4Gw9{ġVlzG ֐zkfL|vOS!' _.Vm=X2NX+z3;cr#}rovcMhG BQq9.# d\8Cҋ)Fգ4E_e49ܫ(M`FO1Z|U7wp^7 ѻ?Za+%ZKb]&\usetë‚12-,鲑'&Hx޷@:ײ.[[zd%|jUzASx |P+em/{ ?S X`jK_?cgFЌɾڠh7>~D?0΃9=Z슑|2Li_#K wrr|}ɳ_Q~wsWeǀ_xp셈swAmGxMx`%n:9sr^jn@ɚDfy-D.f9sыd⧳.?:89x~|v~͟/g1#69aR9#1uI[PxnC =I ^M1 $eibu!bmKȰItLhKWߟ BlGH<3 [KkCOkAa9XHlL2_ETr2Ov[4 ҺheLFI5(Nm&3b@˓P){ubobyGl =C!kj␸9*˥ܑ9%h,b \nƮ̑ng5&粢}M)\>+t"(aPf@%:OY,N-Z: vDG1; <"i(k?!ŞX[&i<`3%н \<)>^NyH>tƚ?a8ldrbfUIEVbxJͥZytj.}0do [2~[Y%hތ 9 xɝ}cJ$iݢxjvj qlh|e_奎 d#Уnu+*Zv`ԡ}nt:GG]n?}29n3\!YGZ UW)^YsIn jM xccE,%Rhs~Bӛ^͵I~}}<?T!<2;ε8O,]p< HNgGϊmyqͼB!'hR;|l=iS&2/ C jdqVN4[}Q?h[{ fcHZ,#+(+^qfCs!%t`q“ -TZ$6Q ;XOOtDŽHb9H9t7E-yIP+-GP87è9+P(H]!G!v)w-5$#"` W o!/G&I;~`W -U )t^0͚ (9-Wlp#s i 99!09%,Pu,'$3{Qe}já)̼>Q:1E.SMM\XT";;PrN"y}N/vA;̝k۰K-;7n6 SlJZnK\rl۠.g\%v5&w˜-UG #d1Cao+Sg16wGQ$wHasP6Xi#f^Ƙ= KzzbSFHBAr"B…0ΉV8˘O8hV陸6Bl[ ϣ>nzY$Q |X + ֢S192s1_[k8q_oZ0N8qo `xnW3KÙF՜v?`'sJEb#7Gʱlj+ O!}a\ĸZw:BSZ&,EmxG/.L!yt\y v%;Ʀux w88Tx)<{s8|.N_o{y|rA-?8zC:8<=;?(7?SuoH1LoL'Ϩmo\?HtOqZۏ;-w~6F= /9%WQE)Zp(k?GoM`8?^+*1J@J"{ Vu90 #;=n\(|VQp Jt4(g e ˭E4n~^on* 2B1RQʜ8UssK?;>?Tָ کQ*Xwqe{zgW߫^\i^}x}a[PgQvp>3e?@ꈜڠoD~u$aK${]4H}GA> dLR xq5;~<GȾ4 ӛn~;""q*CpmOMN2P;K`~EhŌz Q&|QhK G>%zoS4%2Ye=l7jTn0ҖynOюLB[đB5 j{5Sn.Mac.]uLAojkQfF&w@LG=&\TsȼمU>+; 4$1n lΞc!іǘrGNF(> dN'KSJ@3l,_oyvx{H j~/?S67&3 )XdOIM57AN2?=:8CagGgN@#"` QS8LN>;>קZ])t{'sihryK?8cMS\/ϫI̡_1v٭EJ:N6R333[>8C|V=`ZhmgpfQYMyݯ~OiK4nS&gÊB"xiȡW|y c< ՒB~mכdf[9A\ȻEȓ0FE!~vg=}\ZOWlco?٥VF*JJWo(Jz hJw`c:˄dך3 {=:\;a[Qܙ^7Z?Gax[*'"١%/S*+dW124hV, zE/+W۷ȬEI> H9wЖnuUQhTSTD"qꖐ!-f1P^$Xk5sk;YHʺm @ܗ-3<ĮCZ倅7-[Sy+hyÌ0`Vc"t?˙V0D0 ,ep ^ a!OP*: Gh&Thtp:S/I䦭8Tr;M]`o½Xl=Xy7EC4|oIJzA7Ez̷CrYbB7K1V i&&'Z2& êp]W9$68imA0Ġ<(]%Oh%$8_+BU]auj=ϪNMͫвԉ֮jV^ViqŔ.-iTt-Ӟln-퇅}6͟U/;K 1OfM) YX \e\laܢbٲ6tv%ҍ 2tӶU+ko^hc+[YJ9gI?xye_^^}O)rsƛV\G,S"iN0e69fI:{&m7uI/0?8S{ʆob.1'-^u`v.(@񭶝8QTww Ss`(>L[nگ=F>OOp{o@#&WְN|1Z[ug-Wm6c!} JuL=S٩+} +5Y#wn"Eאs1`o/$Tأe|aXz1! j VUٴ1.M,r=F7 ? %EpWqUȄnAU+XsD6Wg];rC*V%y)[rKUB,טYmBU-TzA(l(cK9=X)~NT(xd7/8}۾ZZ`HU_ĢO}=rFGsl\.o*X#-8>y i`с ,R2g]` ~W.ir[5C]}Pŵ-ʢ06nws7ۄмΎ]H52B3gUEE)RN Ľ6J)40#mNĘ ԭ?}|&vQ{tEZ70EyIhj(R$Y|ԆSgO"u_h25Wm3x|@@0ܠyR SIUwvn.ꪟiza)}:58Ɔz 1['YnpCY|Ti.v( gQv\'̖FNVk1!;kT3ò&^> }cB#*75%LC)A3s/ْZܧU{cBr?N;ӣ g64,nAy1]tyAgG N}n[bKP#nF見.q%"'tI{ġͬxB:aa^hxԡ HU& r!BT^#sQ^"('WMG otd>{.l:_/2Bw>Dg0F=1&=ҍ]%oD/;s[HPDۨ:W![)(}d|t)DW2}gM*C8كRN~_bOʬJ~RD2d ЇA1>?Ǻ<+;h%ޗ3{.UdAdwiFBZOs'$ZP;ɺs$#vۖr2)iNBݕtlu\Q /PYr`Ь1OtVji.=mZLC ob iE˳sL@e0&E˃]+NִiD~7<^׵AuUH@ ;ݎ ^u@ebh &8%zouzU Z[ "z mئ@ݱ7;ɾݽf 3%:nuw 3{0"e燏:55wa|㼲|v~@9JmI.6Ue9[,u..%1+O"s>a ^K4 K픏֨`ub-a(i%D鸥T @Dv֫5VSPzy_-& _U-Vx9gXV!"4w~DOޛ!,weSZcYwӇ\♉gñd6Wݩ4w@/C icfyah%9v?6PjʶWOaѶ4pw7xLG*[@ 4)VH:Su,V9 6'M7"Ez rPн} u #*WIH:kK뵦w850L.vCU '7f8`:Wà~1KUK4tIZRG(΢aAhl ܾyrާP׵.GUqzAwD=qEWo0NaU EӛB(,mPܷ<.G-F -8ʕ7 e|cJXQ/5 c+X)6q \еQ4A|߫e}guܚ>I~(MoE0Wt@=?y}ypѳӋƯ_ !*oHenjt0E޵m}llmԥy:0tjZUwq8SAE=UsSP.$MG'ϺϻE' \֞ ׀GPuC{{;=I^b#>%Kqhw,z)wG>hR͎B*W4aN7.w-=MĊ IBһ•B4}B۸K.F%f+)Z(Z6wO I,_/Z$kp:8~2OaL9Z]IKOReq/`?Ŕ|&Nu F#躵*N{B&cԳZ=zB5rBSWgt-Vþ=YqB!6}=X@ï;Úhx"uIX /u<:wE]PWwUFUaA916JuEOqY8GbrIlC-0fYl^:q* `u *=MIl֣<{`-u|q^xeIh%ĕ6NMh${sIhoΌD(o3 RlPcjwߣ|ߝ?SG^|BfK7,p4Φ:p6`Khw7iZESI %_k`2y+ɀ׏%ggՊ3dR]ZRGNg^,bK&WbN ޗ QK$RZqۀR&wWv r6ښ~}oi5u4*Wt*[fVEoK$dmH1ȓYxOBI2"|W0[:5r+N` 3(3$ YXc]x,E„`'ubC&)e%HKVPk09=1OʚqwoS8cu. ,7f\f5r> oSڜvnƅQ'M CͯAȻ*X'R12GŭZ?;3bj$3/6ь<7$l9*FkTT?H*Е=g6LgSn(:GشS||?"uzQb[#ReӰUbA9Jg ay`ca]B(}/6DahPֳxt0x2z 7"@FY ١J'b$ZAICiqtv(nb(;=1U/l1:ZъOcx_h$yY*Pb,Dd3>-Iy:Z+G3SmVsTXWO isvRr^0Ԯ'Ϡڀ~n7eٜsǴu:gGGuJwI)ދ{@jYm kjdbl^dik $vmLjhc,yʖ56i&K$1T?r-JfWOu"&KY;˾mDBhHE9xyfh6$yLɽ!%!K3:pQ!D䖹G 2KR ~{Jx #,S:LEF?p:܊A쏾qGd)B`($ 踇N(Nke [kVB9\SEwr}A4y\]1 KiX=52JU" !O1:*apAGƹ֝M}uV ˜ ۅ;\ n7@)`Ƭ,\ \ `FL&`f\Β!LC\w^dwe=?iD<h]"Ahw*$XfSHČ{|1n )gݐ%!KkkMkI? B{LnT!4}  j8UhXn(-1Txsfer#ElcWU)b62SxNFMrQӍ6萴+)\l_(O̜tq]caNG,uTK] Ρ1mP%q.;'U^*G06^nZҊiq;g)u-;QdmBMZkgM| /CV`[ ,1v,8ͰĄL͠A1 q*Ib< k^sόKF-em뿶js / P`]˶kEɛ$:1a{t:6j*[\^gW沵^f2EyU_T][](,m4Zo6qW|BmeiCnMN^B%G8>Ъ=X|Lrʲǣ!(FdV"A0-ҢnR'NAp:^ݕV8` G]6:*vuYMb0ق]{F$Bv"E\"Ԗl[C:D-JF&/${M٨ VA'frBLHWZynl!m'º['ke*zE mOdɭm:MG.KĊhi6M)Pn*GTǘ`SyC42YJ# CTzy$xv')Zzhw:/@(YM ұ̉}l"=T({badiQ + XQCyx@yRPvCƈ-Of[񼸆^ZJ+SEu$#񳺳|ܣWN,U۲צGށljWH. imYlVn,[i^+h~fC ybIBCgxDG epbr*M6v2Wo(LA2,*=N`PYSALBٵ=tѾnCGu70z&,EZ吝ݔIx?V#Bn7nx7«׿UW`9*nRxU<#d5ӌ_|==F7xWvd*:X=T~Ц- ‹Bq@\LW v)nCH|~ Ml$aTUPZbcRoBwl#lߑ6A5%vi]4s)g6L:P`}?Y<3_=) B4[6eB/۳e{=B*^Sisu$B_~7_E0 ͳ`$2}HZ4jJY\RoP/Zn^on zTEv3Lk{1/ChLǔ L]@~:6ӫ1dʣ<ήg.`**oj_0%z^\'*=oެTˌ}%mFa89qde%Ԋm)g\z`cXnUF\_rjZX]碢'|,K=$eq_L4/̦U].XHd\.O"bze_֤jfD8{ '~zK\8I` :|;Kr~`k a $<KD+kr aʻc1S`{dEdCRDө5FJe <~ _́TJrW")cu\"Z|B ww=1!vrٚy(s3 ^fWJ,hjM2V"yH^.Y¿iT#QDwj{ Ż;u$\E'rدոa53j2n~ wZ᧲%,Nwd ' &l-z&Yru=UúnNGy:**-1 dqln~˽ѹfP4іq_t [K8?rK\Y3msw'sy~A?Tsv3Cnrއ_)cGzuFQrcu0٢%;`fiZfoWM|dO396Q@ :ϟq _;2pb2>, [)L@qx)vC9(C]@To]0ka hfM t]R%A2I_ǖʟb*:y[b TOĠlUU8+R&#ݣ"HmI M돨A`tQ\8"fެ]e ɍ N 7h"{HO=s9籙CUfD2GZe*a+S)9wS `U:y[8ܑTZ:օj FScQ6ʯʛmh2 NSux_M]xd΄z =0NĨ]q1@fW}IñdB{P6~t\^SF66wd, cx o~g ۸73`;ʧI5M0ڷU6w5*Swqީ-NRM_${;p#}Q].n17n [~YÆH*f+vWktu++y[/{U3C:]M7U@_dstGѿ0^\{h=Dt\ 5 +LK'bR٥zZ^;I7Mu9|j9<l^vxDpb}|lBM4_F6o΄&`}+; cڥ Bfk')ۣN3G )U#Mu(l֨zDHМMp3ȹb=(%xYGUu0?U%*/^6*ƛtFލWc v߱uu6`fQиJ֨`eߥa{=:*].d3_O+*jؑP>mm0vwiu{{U9T6nݮj7&&|cb4ǭVmևvuGh4= &3wFQu] >͒wj6!7exZ@x$iF#LY@W]t3] |xQѝ$W.dRQ(o)DVZ5 ߡR1#>jbEYIu; Mq%͒MW9] GivY^}XЫ7Fl*Kg@`SE~1"L5|&]HYJF5B־C{𸒫@ԓLBaB&@ϻn9q+=-9<툫ҍ[}Žݖ.v!,ِ=~.a ,{X@B~Ωudϐg,=uԩSN:' r=K j%S)|a5<t:hu9Za+8Yl*cZCq,c>C1Z!Ukloݰ. D5 3*ؒB+cyނc1xMw BwtH∽HAThWőya쾂ZElcMh, [ן5m#ʌfBKB-$]M_Ok+kB? \8x>P)n7ޫ.5T p nAB1EBY+ $4KSXPs\ rG8%eN pc;j3m=^o Tk>Ua7hm`DU5R>VA84R ,!] Mk%B6]0}+ <>V\Т89'y{9@ӐmQ4B%PVebwdJlf{xLSV,i{pՠZPm+\VW qP9y4j{ B rF O4X"LRyԁX}^SjD`;tiLO4]g 6xLѯFl=4dh׹FiM/46H&;-jL J矸$oz!:yASqvKy ^m *f>y ( Ĺm`JH:'^ҫG/ۗ6Y7[nk-+F'.TRLfp*#c%t1qamaEtoتQX0PIӶAW?B'c9"yCz,s7 ݥ֙細`gV+ѩ/)NTXGCS\XheS f͊UH̷XejVw. u"AacXvr^}u'+6SAjrGg]z'3ڸ$PsfV 6QUKK&1h>Pm +~b *2ƅUcKqÑv}wTMrZTbO:5$Ve#RM4<1a4,#;\`CNU{-ԏ]AURfⶈ@d 2TN7S\NTd؟d'.$ޚ+LfFE)I"!2il$Vx^՚>MUc"`܍`kU|ɏab0<)cԖh ,XspQL 8}CX Q~\6 6⑦uGh?\.g !tzX۾7"g6ImúGc7mK0VMYA߳d0ˬL  Ij툞-x%̟"ZkF 9 Åί#fKs T;vˬӧ~-P,rwGZ_B(tuBq5%J4fG`I&<镠bx*Td1~_'+xp7/hgP<[77I{BܾR E G}nUelKlH hi^&&+?>Uߎ^Qs H.Gu|&[ f CNn˧/̩FP &Qgϝ?[_$3& T _r9=4CgUP1%$=d.ԗ6iO *ůbr?FND:d. )H8?$J`Pʥ0<なdKQ'y]rtSX.'W%5<ȜvTګňC#BN@ߦE ,[8DuWkwn˧/CK+`Dd،$W#6^~; 4&ĺ԰\/ˏW*%61)w}S(\c5"8;dcVP*^Yxxq|}euyqhuK%|:d\i@&P4[/dZwy3C`@e[+р si jym+r"s.*wu/yBn>J# mIMp,)CoDRb/_tnvuaXmtE;D$G<CTs)-X Wxs/.->tqmeuvyA~/Qe|F%iF[:P8)"*(Ɲ.e{=ᴝ|e|GHʖ ttUmca8}.tBVz} :ʊWh P:gm M(jZӑNpɑԒ@Ғ.ʛBR)W7- Fe";iaҍ9VR58egQ>\i#ao2X<"w1v$CZ#Fؠ2DO"<݉8#T uwGЄ-#\N&&;|seDLOӑR0,{ϓR|BqY:*Z%,2uǮxT4 PC6|"jX//j0U yR{C9u uxckָbDNJ8|nq9(ٯ薬m<NYoǧ_Q DS,~xN'88M_<"[(m=/yE}m:qTm|ް[ܻ'^C{[~=w[_b}~w?s'_W3?+Μzowҋ}䱟z'~く?/zsӣ??|}ɗ3?GOP̿?|{^{Vk_|5/gPiOyn ޲m_|n7o_w)=?hY՗+=Gw7z|?x?_w:o|Ow?O}ۿ?p7NjE?/yg?}'#wgwFO,~ӣ_=x,z ~_U׷~]}nwts~뫏}/'57?7ʻ}]/yeo~{' ߟ=}O|/ijЧ;G?zS{Sc=q?4m+ΜY~Z?>Uݙ3:iɩ'<2v0pv=B*y<,_X\Xos.ACW U071N^vrh["E'Yt1a v%=^2o"Y+z w(h=9NSY,O%lp ᷚflrѹyJ#Hn cn{F*9J+(#§ㄐl\ Uy"? !,6ek;WԨq*B u݄N.JGso7h4&QCj&l"sQAK+%/qA2@Iusvן#ݶB4y zk(/kVg^jaEe"V, LwL wJDF_ؗ/Tm_HH7DHBaZv3"̡&5{c " >&bl;bJ#asra"]m:W ݀?Wh Ek"gqrEBTivpjy]}Eq쪡ܓ ԶIX+"cgpEKN`8npa(0t\4a17`0HzwS(7A3 I~ wFx_R,:y#f&lm y(9{F`DslР*F`BPLam.IVk/C!P{b]7Hl:'QJ_3᪲.Pqʼnr;2#])iZΣ@ wj`^zC *KY'afޡ1k!-NL]i'%K@+p5H"^6)%"&,2 '"f Kw1q;% /o{Q$cI "pCis8B:x= iVNx)rmOG۰r=d/]4Zwni0J CdCp5qeQiڬƠוdZyfIt=D L(: +S<$GI!(mM7埕歠sۅiW o=tSy2f: VI TIiyierOYz RZ^a<.g|MuDvδ%YuIKOթ%7`OmB>| p9K70!^3+0zEq?Y> x@>h6 ]4`i4M: U|^bъ=f^6xmDZ^7C= Z̶ =4ƀЩ2_JU =\%]-UnfDbYkL_A529~߱VY:yaSb4:aepv(UycN >\iarY6ͲX>5&O>-9܆Y 8Uy`|j0VV+Mw9R*3%,f6Y0sw y@5/9[.(Scd,E:פ,}r Ap^ W{C^)`mi7bdiwEVN,~|EzB"M?t0ְaF a!,ö a@"Blk<~B "jĎ57Ab~:-"V ;.q+pb$_j%_((hb%7%spY0KE}쪤DSgltZL!- _P-.>l 2 ,b u ܞ]'xL 9Z—c:ܶߴY}ȇ5JRNi>_eN', aQ-ͨCCm_Xv$[#j v's="mNjAn1H[Xb&, M?E@1#L:i]`m-YY'GX=Rl# ^fnbGWMyݤcaOmS-90.:^| !,:И飔>la8vT[Ǿ@ZzJi3U:Fo:ΰ/j|7&ލ+/ӈ zBgx*3}p'0iM[`E2vzzP^ʾToJR<-28RVS1n4bPr'oz7=Ǻ# ^)9iĥu,ƛDRǒ ^U],o.LA7Ѽ0=ϔ`aҮ“s?yE: qj8鐵QT학*s(5mVE9@6ݼ~ӹDdчQ},-:j&l5N l H!=TD; -SUʅ$RWNngRk`1dE1;ʔ/'n? ee?jۀ@[o`nʁZBX/*#2uCR*_W44efCS26m5/woIGyg׵ = SƤѮB?m}̎ՋAG7^ߨ!"E!њ`X] VzM: _gMI%\fb[d$֩;",1_g,GF=`'re3uu/7EH,6ew͆32l :5%[UV٨OO;uK^_$ą=eWgFB'jr!;y^ꐖ~wS|(+_$hb́ s7=X2U&.GYKwiB8 MK*w-֗ b(+x !U/A Fs:иny\ZlOnH=Op$ ŠT!Nx V[JyUa4vpgX,Vags&.ؖxnGմ,`;uLe!!ۖ%zΪvOlذ#4js+:hM6ٝ0ZFLF,\rJ%S*,4ĒΖ+1-FgCIڪ2AY-B;$%YlhQJKLCܞn93X \x+.fwDYQ1Z KHnUփ^{C%Xf=lfq7r7nm,F*EkQ}ʚG[d҅5u(bRp{> O4c>-m+uEbTF'ȃ(ɘiGj{c3TO8nA$ ኁ̺W. bfy^qPTcꦵFei 里3~یitА]>khZ\ݾ<sn&yqnCos*y]F#?2B2Ă?SG[TbD\xo :][io5C$@A&h.7r8#awG=‘00wa^MXeܗYrd ͮS+:Jn[npu&cI B+ {DAPBG, v; $EڅG='G]/¤p;piyܑ/(]m (WؙcTo|^Lq*GBWH;Nzo6gh/ GΨ׹S+x2 !WXeKƧ1w>oMvud2LܙsϾ^yG~\'^%ȷW_vEGP%+…ա#O^~WYץ??ģ](^*'ʽo.}M%߾.{Q 1{uj7F?kyū|tW76Ow=뫞{s">:Ўp(5wkj/Z+u_G~m=K~uk>q_; KT)7z71%sx0U~?W_7+f7}cv;ѧ^?j)Ng2Ve]]O˟Q9c?1e&cw3yeG|GřEƉN*!y QSql}2Op0=?{w 4I{ h{daw^LJ# 6:d cMV'O3o:zYCxQ\ճ3Hٻ>{Wrr#4Puם+ȷ WZ $ yq赕/}o>c77~Z7߼w~?~-?/} >S{>xዾN/|>GȷE5+!lr\sc_#Y:_=}_ڏ}OO|ҹ{~g7ڷ]խ3Wg֩x{.ةCg?k^_^ϛҧb=ms _[_9"jY#"g5+O_뿷% +fa׽>t?Wmꗾu0GGOoY?~{?K7?O?KwF(9} y|;_{0;Wٹƿj|{u.>7K_t/?e._{ǾηOzOLJWّOo&zCi1ՃQ?sÒ$|]ӱQL*uD#)XbN Kog8|||~YT|_XļNa>U3d=S]~&|@vK'\r. +\n5zmEާP@z\I%a<zA䣃Q҄lr%HgGo:&iy":\n5WX5U 5Sl4EJC8yhoyQmGxaEzy@!EāCyidu H#eN:p#"-.d(9;~cRF g'ni R.w<2r3|ԫ>`dile7@fi-)3hCd @e -2rq G{~'D;`3krJ4uQഈy hEԥ߹:<Vòbu(~PlB(~Gdi4o-ʎmȰ_` ~S [`浼0ڋϫL[+]Ai5gݞ傐Jw2!6Y귥-_|a27/ޱegr2<<&Lj:g+u04AUh0<l҉I4*VXKv:if0rVbh3ء " X2u߶۸nx`lblj 4#Ffw%)"A66;Ann(:đ)I =A?Em3#zUJo.Ym|GCWOpS?19Uߎc凖V3;wlSW˰剬n8|@1jyrdbaJVQ@"+Zuf #q'-Xh☓΀SOќṣ Nk+EfgMMъx!&$Q%,QaQj|A#h7ۥfH݈(*RAm5/cBSD3[wD--ir(x,Hj)n]? 0ťl@,WF=+69>Xd;Z '#Ī2Gn%1"k3-Q hh3赛2 V^:w^F[`t6+Z`F dCA }d$oC"QnE ˘%\afED{f7DTϨ K"OQbxWTNW̚[ΰSc*ˠu?7TVԺd B߰p 8ٖ2&IԠ\Ob_"Lli=n`P6Fy%N+TdRiX'[L"8`TRmqb0H?C$Ttİ}hhXņ2,d+R4\FPM~4*y@T`e'{^-[PHW?= FHi-`iӰұ#@vUn{ݍPi/1tAHPZj|q.i֙Ƃa$ʠb]Ț̻l~youMHVUw-j`TM)! fV66A!l!rOZTi.搸`G^3spW+eZg-]uhJ{)(GbܾUl*4N[UNS ,}Q;A0t\@,2VPF˴",*⯟*2[= hV*cŒ8UyK\Dnrq,m7P-2f_Yj(MK.+_J&zil & nxa:ĠN$.?y6FLOOD |w$g5kv\le᳔GJ $ uVe_bQ}HZmUwd(T+ɓcb ֭`ˊX&6;*c?ɰز U)" ҰuiHͮnRp R-Tw^wd_+ C(\g /O2I29-2G?Jl(rE!Z$^dr`?j`&^*x^QRxZ*EIt1$&{R)^lLK o̽Rq~ Fx q܁'ݙ$W4'3K Q|'z,~'KpH;i@aG?-M95#M:d%PιϩLMMY:pnYwm>'e ~p)ֶPҢɈd/b(jC17+';\5ݟLfųAR>E5mz̀BoGv@. ɢ} 갊f_\XApVoMXm%c:uwkɨ^#V?0w5u~{ak,NFT}S"]myPFe5./. _&5VJ9 ®`:8 '#}c_ljDuiy4º:KJߢ&9Do>pI*=̦r ):FgP4 C#VN ˢ22 46lA,&8t*oc3 A#Yezo r:lKMήe!<h1ȄDW֠.rȑYiB?ǞO|ޒ:69>iMs[>.d Ji<7`[.xrՙQ#ҹsDWi[//WVk+ Ojml\]#Ojc5~quy;7'qai\}yNagή94F8X?#bî)\Ah^C KJPS9ӆ$MW? @PY (-&FmFu֝Yj;ts-! Y 9 0Emu~YoP`R0`Զ5XT܏d t-Q$I2rMu2W-lJl>Z=*Y <@RTM1bvHGWr-92ꉪפ3*y}2 VLm s4ŀ2JYl>ȸx-d,ܦJ|OZ&n -OeV2)S-+D%^ZE [UM"3ljc/qr"rB//,[VkV8*ꑿ΃3/wR'DID?'sN>^R|Rdp+ZC|4PQ\\)w5'_U`5 6%+`` ؄l"ӝ4DQ.fB^]_W㋰/&tǗ82Ѧ2@M%YX"91n7D:˨EFti:f M~Suڐ[:^K^vXQh[K%'h"@ lzp#X/3H8GmHqzRbjHl6*E<+W13X^ih{Tjp[NUS!U6UyT 3R̤͡K ݇M;YkC):5:^+W+x@L58{]KAiP̞eQhÏGy9 V Y^\8́r;^t斝gD1 TS@zͭMb'EڡRȩU]} `]obUDhl=(AFEɦ)_s:Iȫf-MQ4C&/۝ULb6Fv;n[q\qX,Yʪ'kɱKdL4!d1Yʥ Y$r7&s}HfY.]DU @Rh'碚 IZWO$< !M1R()LLyP!LYTႂV#IGk0eO^$+Fos=>$l͊ӡZ%)n*Šp#3F! o?>kfF:F׼pW*R6F::s]Ҁ?W@8l >k"UJ =&i78&ΰ̈ϗ<@VeT M< o-m^~3noM-yYChF2uW_e{d(3d 6>uWx 8Gl(xz)MC7UAJ 33T"qʜN@fҟp <.9/Jѓ_AHƫ߁²JWUع1^2yû6f?g("ʲ_q&wHK`8{QTs$g+uLDhISТybmٶX԰<I1Ɛڍf``E0bXȧa ̨ "[D*x&z딑o`eLȃګj,Hj\VoXV[p# Z;3LEљDu ? GYY^N"HES-խD '́H"ImpV)xoeX447^Wu}§g8쉇E= w]N~^_ 񤦳15|Aw-Q1fcLNU %}">fVS-He4xM=cma-ߠ˜0 ]gy'l|?=W;l#[0dKJȀEM?ȼgd(q5Ey 3aAd [`{.U+ j)鳿QH\fmiFi)8gvgH~I+u@%yB>نQ` )!s+J]8tZያXO\Wt&j݅oK7f܅%t|g#GC6wȅW0_6O8)\hMGE8UDɾ .U+FdݝYҼ+i3J?e}j T=tLrm1'/k2a]thX{dEŊQ ψZ?w~5dCm }bɮ!կ7m$ZQlHBvYӻ0=c UbhcwS WW/ 1h'_s9NHϠwGiG']g(R8{"(SծB),*hJ/X;Y4qv" v2IO\`>qҢ |;vo2mN3Q$$%Fauۀ/$@M 9CiW g9|ebGQ~[; U*XaU1 8Qge0aD\VŜfFWanc@H_v$cGs29~2glƎhVNlX.L(//nH ,b`6<=occS-o8tLYgrq`VTsᤌP ;4ru5:24MN?׼xldCO]rxq4E\f1o;۽p(Cl)=Yd!QvN/|EzB"M?bl1̐QBO63a ciE,7x"jĎ57A)bqntZD0&\  q$Fh%HQ͆@pѕMUK4I%D+%t3@h %\W+2) ZMs.A2KUjl_Ujb_&R9{ƖKAA!^nh *2{JSnAX'-\#E(nVn)#GE! A2Jq>k.3 d3W8ǝjb]f&dx ϐ)El4S(ꄬ_X](}z"Kլ}dI_/s٨f CC;>bF K C.P;4U{׹滦YayJljcV ݦÈƅ*}|Cx^%.GFCdd њHÁɻFv<^xN:o[jmy;tdh_F""ip%G)8=SJX&x{p?VH>Ca!|m6z_@m 6*" imG(t PNdMZȷ%k.9Zr,KN\,%nI #0/N_GzQx0'wZ dz~s=XsuK)Yv~Ľ$+Ͳ?퐈odܣuCC:o;ܠ› 636f7ۙ+3FŤl;Pj@obg7Ex.z;GsD@oFdp{Vc; B&Sf|$}й|ERӛhq9_e־[mr aBVplܥ(FCSAԃ̫cîvOTe9 P]ޫ&VߊX9T@AߤCEa21)kG\Xu>[ vc+0@$|/87 NH۸)9B(.);K:bṯd5}@!-fƱfG)} 2c\bkhYKO)MF4ucsJ-GE1ٔ.j|7&ލ+/O& ;8~lx1:x •o+[hT!5er;u5?i'4| em-APޏrR%W=D-VdkwXY=(e;UJv=TG+&;|AWshVYiKG6茏D `9␫!^_bUih5lUD3.ZPo+2W7E^{݇6vR_ˌVA'Qh]nt|o hlg[)E_ml7.xd[Fv;:zҀ>29Bhk#9\]eܸJJ`,1 / 72k 6kUȭ䡼׀\ξ,6h$5çp)|+1'i]]&'g H"|ۥaR{-=yNvZٝ+ מN.!]FОE]ɺ1*GB[Ƒ $dqj~raH\y"0DGJH>p;-S?, g.у]ø-W0nW amdxG~WBzc=4IQ |5Eۆ%-(Cެ<#ۗeopEaFסx"NWIF42eO!Cɯ8JоmmF@vwyFːBP`2)`ZKIdCൗOMh9& \"}SrHLa/AM?KBճ},iALQb 3MbRޮO^~b>g'b K](غuLnUuP&M<7ts4Lhreޤ3꨹&5q\|JFcX q&ȡCgayb46w{l1E1Cʔ7/n͉Wq6XUs!"iuuz"WgV)f>񖲛[Y^b6hM9V p^&Sl0BzEr%φ)ug",ML,eAAK?-]B~#I<@Jd ֝wgk)ұt9m*A1ԽcX1Š#} bF/ot躡{XI\۴G `FS},.Wb`%bU7fRMn!$%NøEt">$ AkF=\'r)T|РK+\7AVR;.gcNKV() LPӦR';MJaQ\C3cdTjyJF ("c`,-GM&IĖ*(rFJ!Q4x@ diԚd5ːv =- @(xKGBﰳF]ahKnCІq`v?y"'m6]>z- MǻBnmask+s W!L>#Q0ӆHp#% ȗDm]KxqXc aΣamبHb!̆*wXbm~nGUkV!qr7rZ> jmE:Qc(1q΢6f2 fNբ18g*^OC3 ÍqZBU0Shti|Wԓ443 [l 7mˏxC [};އi,e2lWZ7jҦv+2bВi(3iJ ;e{j2P!NґtD9oA:֊B&IYR[`f4ynA&*noT[9bhoutM^= ,3'*$(ۢW T~Ryy`|Mw _R܃w\5F=D&Q"~>rI]h 3)\vMb?@]ad [Zc%مŅŇXYV6 ppnQo ]8qc?]_QO:2BR,r[9iZezXksF__fXjZO&WO&N3mi^,)DHrd-.,be[ tβ*$O"ĴGD4=;#ĘWm9F3v(v^89#|"TY;޺PM9 dqV.]~kYݗiy*N)Ӧf *NxheB.[cZȠ$TPrh޸SHS(ZP?,3 q>.̳ ZFGA©v ~3?>{ꇾ,C?69̛fSF^ FI9cŭ lP*>5R+GaE?:]/:\yy 4FxKYNĔ;?F}"^,j3LJUzu c͔kDr:9|fE aHnJˈۙ7Faä́f/ל4 ^Byiɛpik3:\.ҥR(Ytme8/|vÜg>r6MdlaOerl—(Uu\$Y! AN/ā;Lbf! _@8 ̋fiۺ Ӥ Ha ]e*f0N{%^W$[~ s7>0`="z,kP\#OPZq7ᩴصVE/Fh2P5. 4\v)PWNqPC_h+0xH7 IxHU zSgLK/qӖħr0%$HϳK/ $`g>wX 4ENPUkHZE1ɂd;x\Ei඾=*qL2< hcߎEKH=kB\Ycj8LBn渝Cxܯn&[ f UsP9ܦ[MfuP:`-9Elٖ>wPڬxuiIX :Uf2M -CwɔoBPD)8H3ڑ6SPzeI'Qh.9Џ,?P?(~|-c2D#DG\MbL(,x(v(cLwu8'WT:lc rGGѿhzM葉rˡ !W6[j]<^ޠ}:bce'm@R7@կ]FM&K=h{׸ Z?PNf¤s^W68Z^KKڿv 3kfnag0)b:4`^%fGPuݝe8uZ-m>(̶UVdn!l4wVS* dG99|N9;iaLB2~IA]>7$+@yBU^UAYKͫLyׇ6٧" =y׵C_Ą\ ,\NbTA^bl2r t <ێCʮƊ(AmLsu:`us &JsvML{ RrATħ=t>:3Bm-RVrlzui * xMsBVXQ*ˇL"D nݢȠQoӞUx nC0M7 jhNR7gnгq1UtȒ8/cv׽% OաvYlf˚&J~Y9,tvV2Ut[gáLQv|k'M",ޤXD t|3Q25`'rlSHV,4s]2uɸ%k^w zhܓݦ3yTख़% Ϣޮ7~3U;П0d՞S_fntOWEqf9tɨKAtԅ=4q|*TeRCEgdM".B%3UF|GicniSToj>_fȼɷEJ@Eٵag/3.&0]AgmD79 "Gsa cN\RKȲ _5,K2;+u L!~Mt +!<刅zqxٲkfXX|d` @ %M DlJmetadata.gz0000644000000000000000000000146300000000000013405 0ustar00wheelwheel00000000000000KUo0_a h&&44D/ucENrML;k9;I6g:|1xdE#7ec>K ͮz>.gUu1>QƳbe{J& o6ϷWo>]=,]hfqӣXsU:.]t}j۲7P7qŊo ?\;'!jt7p,qlI09v6 NvВͧܵDmVUv{ҙ6/.|D% i0vDZ,!|;$D-ַM/E5*޲gVɴ`Lj`C Ҙ&2:gHV#BaRq;{ \߽^@j hhɉQy)yhx prll~,^ZǗu+Y85 ?% N4/Nd [cm]0M,SƠ#8qEFTv9o6⑃:$mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/prerelease_specs.4.8.gz000066400000000000000000000001201446701454400302230ustar00rootroot00000000000000cfT((Jebs tO͵ K-*ϋfT733KJ-IdfT,*M2=>mavengem-mavengem-2.0.1/rubygems-tools/src/test/hostedrepo/specs.4.8.gz000066400000000000000000000002671446701454400260300ustar00rootroot00000000000000", ""); } } RubygemsGatewayTest.java000066400000000000000000000073751446701454400350000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.apache.commons.io.IOUtils; import org.jruby.embed.PathType; import org.jruby.runtime.builtin.IRubyObject; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.sonatype.sisu.litmus.testsupport.TestSupport; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; public class RubygemsGatewayTest extends TestSupport { @Rule public TestJRubyContainerRule testJRubyContainerRule = new TestJRubyContainerRule(); private IRubyObject check; @Before public void setUp() throws Exception { check = testJRubyContainerRule.getScriptingContainer().parse(PathType.CLASSPATH, "nexus/check.rb").run(); } @Test public void testGenerateGemspecRz() throws Exception { String gem = "src/test/resources/gems/n/nexus-0.1.0.gem"; GemspecHelper spec; try (InputStream is = new FileInputStream(gem)) { spec = testJRubyContainerRule.getRubygemsGateway().newGemspecHelperFromGem(is); } String gemspecPath = "target/nexus-0.1.0.gemspec.rz"; try (InputStream is = spec.getRzInputStream()) { dumpStream(is, new File(gemspecPath)); } boolean equalSpecs = testJRubyContainerRule.getScriptingContainer().callMethod(check, "check_gemspec_rz", new Object[]{gem, gemspecPath}, Boolean.class); assertThat("spec from stream equal spec from gem", equalSpecs, equalTo(true)); } @Test public void testPom() throws Exception { File some = new File("src/test/resources/rb-fsevent-0.9.4.gemspec.rz"); String pom; try (InputStream is = new FileInputStream(some)) { pom = testJRubyContainerRule.getRubygemsGateway().newGemspecHelper(is).pom(false); } assertThat(pom.replace("\n", "").replaceAll(".*$", "").replaceAll("^.*|.*$", ""), equalTo("Very simple & usable FSEvents API")); } @Test public void testEmptyDependencies() throws Exception { File empty = new File("target/empty"); // create empty dependencies file DependencyHelper deps = testJRubyContainerRule.getRubygemsGateway().newDependencyHelper(); try (InputStream is = deps.getInputStream(false)) { dumpStream(is, empty); } int size = testJRubyContainerRule.getScriptingContainer().callMethod(check, "specs_size", empty.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(0)); } private void dumpStream(final InputStream is, File target) throws IOException { try (FileOutputStream output = new FileOutputStream(target)) { IOUtils.copy(is, output); } } } SpecsHelperTest.java000066400000000000000000000303361446701454400340670ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.apache.commons.io.IOUtils; import org.jruby.embed.PathType; import org.jruby.runtime.builtin.IRubyObject; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.sonatype.sisu.litmus.testsupport.TestSupport; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasSize; public class SpecsHelperTest extends TestSupport { @Rule public TestJRubyContainerRule scriptingContainerRule = new TestJRubyContainerRule(); private SpecsHelper specsHelper; private IRubyObject check; @Before public void setUp() throws Exception { check = scriptingContainerRule.getScriptingContainer().parse(PathType.CLASSPATH, "nexus/check.rb").run(); specsHelper = scriptingContainerRule.getRubygemsGateway().newSpecsHelper(); } @Test public void testEmptySpecs() throws Exception { File empty = new File("target/empty"); dumpStream(specsHelper.createEmptySpecs(), empty); int size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", empty.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(0)); } @Test public void testListAllVersions() throws Exception { File some = new File("src/test/resources/some_specs"); List versions = specsHelper.listAllVersions("bla_does_not_exist", new FileInputStream(some)); assertThat("versions size", versions, hasSize(0)); versions = specsHelper.listAllVersions("activerecord", new FileInputStream(some)); assertThat("versions size", versions, hasSize(1)); assertThat("version", versions.get(0), equalTo("3.2.11-ruby")); } @Test public void testAddLatestGemToSpecs() throws Exception { File empty = new File("src/test/resources/empty_specs"); File target = new File("target/test_specs"); File gem = new File("src/test/resources/gems/n/nexus-0.1.0.gem"); IRubyObject spec1 = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); // add gem InputStream is = specsHelper.addSpec(spec1, new FileInputStream(empty), SpecsIndexType.LATEST); // add another gem with different platform gem = new File("src/test/resources/gems/n/nexus-0.1.0-java.gem"); IRubyObject specJ = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); is = specsHelper.addSpec(specJ, is, SpecsIndexType.LATEST); dumpStream(is, target); int size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(2)); // add a gem with newer version gem = new File("src/test/resources/gems/n/nexus-0.2.0.gem"); IRubyObject spec = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); is = specsHelper.addSpec(spec, new FileInputStream(target), SpecsIndexType.LATEST); dumpStream(is, target); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(2)); // add both the gems with older version is = specsHelper.addSpec(spec1, new FileInputStream(target), SpecsIndexType.LATEST); assertThat("no change", is, nullValue()); is = specsHelper.addSpec(specJ, new FileInputStream(target), SpecsIndexType.LATEST); assertThat("no change", is, nullValue()); } @Test public void testDeleteLatestGemToSpecs() throws Exception { File empty = new File("src/test/resources/empty_specs"); File latestSpecsFile = new File("target/test_latest_specs"); File releaseSpecsFile = new File("target/test_release_specs"); File gem = new File("src/test/resources/gems/n/nexus-0.1.0.gem"); IRubyObject spec = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); // add gem InputStream releaseStream = specsHelper.addSpec(spec, new FileInputStream(empty), SpecsIndexType.RELEASE); // add another gem with different platform gem = new File("src/test/resources/gems/n/nexus-0.1.0-java.gem"); spec = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); releaseStream = specsHelper.addSpec(spec, releaseStream, SpecsIndexType.RELEASE); dumpStream(releaseStream, releaseSpecsFile); // add a gem with newer version to release and latest index gem = new File("src/test/resources/gems/n/nexus-0.2.0.gem"); IRubyObject s = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); releaseStream = specsHelper.addSpec(s, new FileInputStream(releaseSpecsFile), SpecsIndexType.RELEASE); dumpStream(releaseStream, releaseSpecsFile); InputStream is = specsHelper.addSpec(s, new FileInputStream(empty), SpecsIndexType.LATEST); dumpStream(is, latestSpecsFile); // check the latest index int size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", latestSpecsFile.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(1)); // check the release index size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", releaseSpecsFile.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(3)); // first delete it from the release specs index is = specsHelper.deleteSpec(s, new FileInputStream(releaseSpecsFile), SpecsIndexType.RELEASE); dumpStream(is, releaseSpecsFile); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", releaseSpecsFile.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(2)); // then delete it from the latest specs index is = specsHelper.deleteSpec(s, new FileInputStream(latestSpecsFile), SpecsIndexType.LATEST); dumpStream(is, latestSpecsFile); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", latestSpecsFile.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(2)); // now delete one more spec specsHelper = scriptingContainerRule.getRubygemsGateway().newSpecsHelper(); is = specsHelper.deleteSpec(spec, new FileInputStream(releaseSpecsFile), SpecsIndexType.RELEASE); dumpStream(is, releaseSpecsFile); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", releaseSpecsFile.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(1)); is = specsHelper.deleteSpec(spec, new FileInputStream(latestSpecsFile), SpecsIndexType.LATEST); dumpStream(is, latestSpecsFile); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", latestSpecsFile.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(1)); } @Test public void testAddDeleteReleasedGemToSpecs() throws Exception { File empty = new File("src/test/resources/empty_specs"); File target = new File("target/test_specs"); File gem = new File("src/test/resources/gems/n/nexus-0.1.0.gem"); IRubyObject spec = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); // add released gem InputStream is = specsHelper.addSpec(spec, new FileInputStream(empty), SpecsIndexType.RELEASE); dumpStream(is, target); int size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(1)); // delete gem is = specsHelper.deleteSpec(spec, new FileInputStream(target), SpecsIndexType.RELEASE); dumpStream(is, target); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(0)); // try adding released gem as prereleased is = specsHelper.addSpec(spec, new FileInputStream(empty), SpecsIndexType.PRERELEASE); assertThat("no change", is, nullValue()); // adding to latest is = specsHelper.addSpec(spec, new FileInputStream(empty), SpecsIndexType.LATEST); dumpStream(is, target); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(1)); } @Test public void testAddDeletePrereleasedGemToSpecs() throws Exception { File empty = new File("src/test/resources/empty_specs"); File target = new File("target/test_specs"); File gem = new File("src/test/resources/gems/n/nexus-0.1.0.pre.gem"); IRubyObject spec = scriptingContainerRule.getRubygemsGateway().newGemspecHelperFromGem(new FileInputStream(gem)).gemspec(); // add prereleased gem InputStream is = specsHelper.addSpec(spec, new FileInputStream(empty), SpecsIndexType.PRERELEASE); dumpStream(is, target); int size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(1)); // delete gem is = specsHelper.deleteSpec(spec, new FileInputStream(target), SpecsIndexType.PRERELEASE); dumpStream(is, target); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(0)); // try adding prereleased gem as released is = specsHelper.addSpec(spec, new FileInputStream(empty), SpecsIndexType.RELEASE); assertThat("no change", is, nullValue()); // adding to latest is = specsHelper.addSpec(spec, new FileInputStream(empty), SpecsIndexType.LATEST); assertThat("no change", is, nullValue()); size = scriptingContainerRule.getScriptingContainer().callMethod(check, "specs_size", target.getAbsolutePath(), Integer.class); assertThat("specsfile size", size, equalTo(0)); } private void dumpStream(final InputStream is, File target) throws IOException { try { FileOutputStream output = new FileOutputStream(target); try { IOUtils.copy(is, output); } finally { IOUtils.closeQuietly(output); } } finally { IOUtils.closeQuietly(is); } } } TestJRubyContainer.java000066400000000000000000000046701446701454400345520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.embed.ScriptingContainer; import java.io.File; import java.util.HashMap; import java.util.Map; /** * Encapsulates all JRuby related containers and helpers into one class and manages their lifecycle. Hence, * this helper is reusable as in test rules, but also in other constructs. */ class TestJRubyContainer { private ScriptingContainer scriptingContainer; private RubygemsGateway rubygemsGateway; public void start() { scriptingContainer = createScriptingContainer(); rubygemsGateway = new DefaultRubygemsGateway(scriptingContainer); } public void stop() { if (rubygemsGateway != null) { rubygemsGateway.terminate(); } rubygemsGateway = null; scriptingContainer = null; } public ScriptingContainer getScriptingContainer() { return scriptingContainer; } public RubygemsGateway getRubygemsGateway() { return rubygemsGateway; } private ScriptingContainer createScriptingContainer() { final String rubygems = new File("target/test-classes/rubygems").getAbsolutePath(); final String gemfile = new File("target/test-classes/it/Gemfile").getAbsolutePath(); final Map env = new HashMap(); env.put("GEM_HOME", rubygems); env.put("GEM_PATH", rubygems); env.put("BUNDLE_GEMFILE", gemfile); env.put("PATH", ""); // bundler needs a PATH set env.put("DEBUG", "true"); final ScriptingContainer scriptingContainer = new ScriptingContainer(); scriptingContainer.setEnvironment(env); return scriptingContainer; } }TestJRubyContainerRule.java000066400000000000000000000033041446701454400353730ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; import org.jruby.embed.ScriptingContainer; import org.junit.rules.ExternalResource; /** * Simple Junit rule to expose managed container. If a test needs access to container in more specific places, * ie. ctor and so, take a look at {@link RubyScriptingTestSupport}. */ public class TestJRubyContainerRule extends ExternalResource { private TestJRubyContainer testScriptingContainer = new TestJRubyContainer(); @Override protected void before() throws Throwable { super.before(); testScriptingContainer.start(); } @Override protected void after() { super.after(); testScriptingContainer.stop(); } public ScriptingContainer getScriptingContainer() { return testScriptingContainer.getScriptingContainer(); } public RubygemsGateway getRubygemsGateway() { return testScriptingContainer.getRubygemsGateway(); } }mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/TestUtils.java000066400000000000000000000022001446701454400330160ustar00rootroot00000000000000/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems; class TestUtils { public static String lastLine(String text) { String[] lines = lines(text); return lines[lines.length - 1]; } public static String[] lines(String text) { return text.split("\\n"); } public static int numberOfLines(String text) { return lines(text).length; } }mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/000077500000000000000000000000001446701454400315365ustar00rootroot00000000000000DELETELayoutTest.java000066400000000000000000000200751446701454400353260ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.junit.Test; import org.sonatype.sisu.litmus.testsupport.TestSupport; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; import java.io.File; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; public class DELETELayoutTest extends TestSupport { private final DefaultRubygemsFileSystem bootstrap = new DefaultRubygemsFileSystem(new DELETELayout(null, new SimpleStorage(new File("target"))), null, null); @Test public void testSpecsZippedIndex() throws Exception { String[] pathes = { "/specs.4.8.gz", "/prerelease_specs.4.8.gz", "/latest_specs.4.8.gz" }; assertFound(pathes, FileType.SPECS_INDEX_ZIPPED); } @Test public void testSpecsUnzippedIndex() throws Exception { String[] pathes = { "/specs.4.8", "/prerelease_specs.4.8", "/latest_specs.4.8" }; assertForbidden(pathes); } @Test public void testSha1() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/maven-metadata.xml.sha1", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha1", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.sha1", "/maven/prereleases/rubygems/jbundler/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sha1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha1" }; assertForbidden(pathes); } @Test public void testGemArtifact() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem" }; assertForbidden(pathes); } @Test public void testPom() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom" }; assertForbidden(pathes); } @Test public void testMavenMetadata() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/maven-metadata.xml", "/maven/prereleases/rubygems/jbundler/maven-metadata.xml" }; assertForbidden(pathes); } @Test public void testMavenMetadataSnapshot() throws Exception { String[] pathes = {"/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml"}; assertForbidden(pathes); } @Test public void testBundlerApi() throws Exception { String[] pathes = {"/api/v1/dependencies?gems=nexus,bundler"}; assertForbidden(pathes); } @Test public void testApiV1() throws Exception { String[] pathes = {"/api/v1/gems", "/api/v1/api_key"}; assertForbidden(pathes); } @Test public void testDependency() throws Exception { String[] pathes = { "/api/v1/dependencies?gems=nexus", "/api/v1/dependencies/jbundler.ruby", "/api/v1/dependencies/b/bundler.ruby" }; assertFound(pathes, FileType.COMPACT); } @Test public void testGemspec() throws Exception { String[] pathes = {"/quick/Marshal.4.8/jbundler.gemspec.rz", "/quick/Marshal.4.8/b/bundler.gemspec.rz"}; assertFound(pathes, FileType.GEMSPEC); } @Test public void testGem() throws Exception { String[] pathes = {"/gems/jbundler.gem", "/gems/b/bundler.gem"}; assertFound(pathes, FileType.GEM); } @Test public void testDirectory() throws Exception { String[] pathes = { "/", "/api", "/api/", "/api/v1", "/api/v1/", "/api/v1/dependencies/", "/gems/", "/gems", }; assertForbidden(pathes); String[] mpathes = { "/maven/releases/rubygems/jbundler", "/maven/releases/rubygems/jbundler/1.2.3", "/maven/prereleases/rubygems/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT", }; assertFiletype(mpathes, FileType.DIRECTORY); } @Test public void testNoContent() throws Exception { String[] pathes = { "/api/v1/dependencies", "/api/v1/dependencies?gems=", }; assertFiletype(pathes, FileType.NO_CONTENT); } @Test public void testNotFound() throws Exception { String[] pathes = { "/asa", "/asa/", "/api/a", "/api/v1ds", "/api/v1/ds", "/api/v1/dependencies/jbundler.jruby", "/api/v1/dependencies/b/bundler.jruby.zd", "/api/v1/dependencies/basd/bundler.ruby", "/quick/Marshal.4.8/jbundler.jssaon.rz", "/quick/Marshal.4.8/b/bundler.gemspec.rzd", "/quick/Marshal.4.8/basd/bundler.gemspec.rz", "/gems/jbundler.jssaonrz", "/gems/b/bundler.gemsa", "/gems/basd/bundler.gem", "/maven/releasesss/rubygemsss/a", "/maven/releases/rubygemsss/jbundler", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gema", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom2", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.msa", "/maven/prereleases/rubygemsss/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1a", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sh1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gema", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom2", }; assertFiletype(pathes, FileType.NOT_FOUND); } protected void assertFiletype(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), equalTo(null)); assertThat(path, file.hasException(), is(false)); } } protected void assertFound(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.notExists(), is(false)); } } protected void assertForbidden(String[] pathes) { for (String path : pathes) { assertThat(path, bootstrap.get(path).forbidden(), is(true)); } } } DefaultLayoutTest.java000066400000000000000000000564351446701454400357610ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.junit.Before; import org.junit.Test; import org.sonatype.sisu.litmus.testsupport.TestSupport; import org.torquebox.mojo.rubygems.BundlerApiFile; import org.torquebox.mojo.rubygems.DependencyData; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.GemArtifactFile; import org.torquebox.mojo.rubygems.GemFile; import org.torquebox.mojo.rubygems.GemspecFile; import org.torquebox.mojo.rubygems.MavenMetadataFile; import org.torquebox.mojo.rubygems.MavenMetadataSnapshotFile; import org.torquebox.mojo.rubygems.PomFile; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.RubygemsV2GemInfo; import org.torquebox.mojo.rubygems.SpecsIndexFile; import org.torquebox.mojo.rubygems.SpecsIndexType; import org.torquebox.mojo.rubygems.SpecsIndexZippedFile; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; import org.torquebox.mojo.rubygems.cuba.RubygemsFileSystem; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; public class DefaultLayoutTest extends TestSupport { private RubygemsFileSystem fileSystem; private DefaultLayout layout; @Before public void setUp() throws Exception { layout = new DefaultLayout(); fileSystem = new DefaultRubygemsFileSystem(layout, null, null); } @Test public void testGemArtifact() throws Exception { String path = "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem"; RubygemsFile file = fileSystem.get(path); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get(path); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo(path)); assertThat(file.remotePath(), equalTo(path)); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.GEM_ARTIFACT)); GemArtifactFile file3 = (GemArtifactFile) file; DependencyData deps = new DependencyDataMock(); assertThat(file3.version(), equalTo("1.2.3")); assertThat(file3.gem(deps).name(), equalTo("jbundler")); assertThat(file3.gem(deps).version(), equalTo("1.2.3")); assertThat(file3.isSnapshot(), equalTo(false)); } @Test public void testGemSnapshotArtifact() throws Exception { String path = "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123123123.gem"; RubygemsFile file = fileSystem.get(path); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get(path); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo(path)); assertThat(file.remotePath(), equalTo(path)); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.GEM_ARTIFACT)); GemArtifactFile file3 = (GemArtifactFile) file; DependencyData deps = new DependencyDataMock(); assertThat(file3.version(), equalTo("1.2.3")); assertThat(file3.gem(deps).name(), equalTo("jbundler")); assertThat(file3.gem(deps).version(), equalTo("1.2.3")); assertThat(file3.isSnapshot(), equalTo(true)); } @Test public void testPomRelease() throws Exception { String path = "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom"; RubygemsFile file = fileSystem.get(path); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get(path); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo(path)); assertThat(file.remotePath(), equalTo(path)); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.POM)); PomFile file3 = (PomFile) file; DependencyData deps = new DependencyDataMock(); assertThat(file3.version(), equalTo("1.2.3")); assertThat(file3.gemspec(deps).name(), equalTo("jbundler")); assertThat(file3.gemspec(deps).version(), equalTo("1.2.3")); assertThat(file3.gemspec(deps).platform(), equalTo("ruby")); assertThat(file3.isSnapshot(), equalTo(false)); } @Test public void testPomSnapshot() throws Exception { String path = "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123123123.pom"; RubygemsFile file = fileSystem.get(path); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get(path); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo(path)); assertThat(file.remotePath(), equalTo(path)); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.POM)); PomFile file3 = (PomFile) file; DependencyData deps = new DependencyDataMock(); assertThat(file3.version(), equalTo("1.2.3")); assertThat(file3.gemspec(deps).filename(), equalTo("jbundler-1.2.3")); assertThat(file3.gemspec(deps).version(), equalTo("1.2.3")); assertThat(file3.isSnapshot(), equalTo(true)); } @Test public void testMetadataXmlReleases() throws Exception { String path = "/maven/releases/rubygems/jbundler/maven-metadata.xml"; RubygemsFile file = fileSystem.get(path); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get(path); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo(path)); assertThat(file.remotePath(), equalTo(path)); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.MAVEN_METADATA)); MavenMetadataFile file3 = (MavenMetadataFile) file; assertThat(file3.dependency().name(), equalTo("jbundler")); assertThat(file3.isPrerelease(), equalTo(false)); } @Test public void testMetadataXmlPrereleases() throws Exception { String path = "/maven/prereleases/rubygems/jbundler/maven-metadata.xml"; RubygemsFile file = fileSystem.get(path); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get(path); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo(path)); assertThat(file.remotePath(), equalTo(path)); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.MAVEN_METADATA)); MavenMetadataFile file3 = (MavenMetadataFile) file; assertThat(file3.dependency().name(), equalTo("jbundler")); assertThat(file3.isPrerelease(), equalTo(true)); } @Test public void testMetadataXmlSnapshots() throws Exception { String path = "/maven/prereleases/rubygems/jbundler/9.2.3-SNAPSHOT/maven-metadata.xml"; RubygemsFile file = fileSystem.get(path); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get(path); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo(path)); assertThat(file.remotePath(), equalTo(path)); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.MAVEN_METADATA_SNAPSHOT)); MavenMetadataSnapshotFile file3 = (MavenMetadataSnapshotFile) file; assertThat(file3.version(), equalTo("9.2.3")); } @Test public void testGemfile() throws Exception { RubygemsFile file = fileSystem.get("/gems/jbundler-9.2.1.gem"); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get("/gems/j/jbundler-9.2.1.gem"); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo("/gems/j/jbundler-9.2.1.gem")); assertThat(file.remotePath(), equalTo("/gems/jbundler-9.2.1.gem")); assertThat(file.name(), equalTo("jbundler-9.2.1")); assertThat(file.type(), equalTo(FileType.GEM)); GemFile file3 = (GemFile) file; assertThat((GemFile) file, equalTo(file3.gemspec().gem())); assertThat(file3.version(), equalTo(null)); assertThat(file3.platform(), equalTo(null)); assertThat(file3.filename(), equalTo("jbundler-9.2.1")); assertThat(file3.gemspec().name(), equalTo("jbundler-9.2.1")); } @Test public void testGemfile2() throws Exception { RubygemsFile file = layout.gemFile("jbundler", "9.2.1", "java"); assertThat(file, notNullValue()); RubygemsFile file2 = layout.gemFile("jbundler", "9.2.1", "java"); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo("/gems/j/jbundler-9.2.1-java.gem")); assertThat(file.remotePath(), equalTo("/gems/jbundler-9.2.1-java.gem")); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.GEM)); GemFile file3 = (GemFile) file; assertThat((GemFile) file, equalTo(file3.gemspec().gem())); assertThat(file3.filename(), equalTo("jbundler-9.2.1-java")); assertThat(file3.name(), equalTo("jbundler")); assertThat(file3.version(), equalTo("9.2.1")); assertThat(file3.platform(), equalTo("java")); assertThat(file3.gemspec().name(), equalTo("jbundler")); } @Test public void testGemspecfile() throws Exception { RubygemsFile file = fileSystem.get("/quick/Marshal.4.8/jbundler-9.2.1.gemspec.rz"); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get("/quick/Marshal.4.8/j/jbundler-9.2.1.gemspec.rz"); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo("/quick/Marshal.4.8/j/jbundler-9.2.1.gemspec.rz")); assertThat(file.remotePath(), equalTo("/quick/Marshal.4.8/jbundler-9.2.1.gemspec.rz")); assertThat(file.name(), equalTo("jbundler-9.2.1")); assertThat(file.type(), equalTo(FileType.GEMSPEC)); GemspecFile file3 = (GemspecFile) file; assertThat((GemspecFile) file, equalTo(file3.gem().gemspec())); assertThat(file3.version(), equalTo(null)); assertThat(file3.platform(), equalTo(null)); assertThat(file3.filename(), equalTo("jbundler-9.2.1")); assertThat(file3.gem().name(), equalTo("jbundler-9.2.1")); } @Test public void testGemspecfile2() throws Exception { RubygemsFile file = layout.gemspecFile("jbundler", "9.2.1", "java"); assertThat(file, notNullValue()); RubygemsFile file2 = layout.gemspecFile("jbundler", "9.2.1", "java"); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo("/api/v2/rubygems/jbundler/versions/9.2.1.json")); assertThat(file.remotePath(), equalTo("/api/v2/rubygems/jbundler/versions/9.2.1.json")); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.GEMSPEC)); GemspecFile file3 = (GemspecFile) file; assertThat((GemspecFile) file, equalTo(file3.gem().gemspec())); assertThat(file3.filename(), equalTo("jbundler-9.2.1-java")); assertThat(file3.name(), equalTo("jbundler")); assertThat(file3.version(), equalTo("9.2.1")); assertThat(file3.platform(), equalTo("java")); assertThat(file3.gem().name(), equalTo("jbundler")); } @Test public void testDependencyFile() throws Exception { RubygemsFile file = fileSystem.get("/api/v1/dependencies/jbundler.ruby"); assertThat(file, notNullValue()); RubygemsFile file2 = fileSystem.get("/api/v1/dependencies?gems=jbundler"); assertThat(file, equalTo(file2)); file2 = fileSystem.get("/api/v1/dependencies/j/jbundler.ruby"); assertThat(file, equalTo(file2)); assertThat(file.storagePath(), equalTo("/info/jbundler.compact")); assertThat(file.remotePath(), equalTo("/info/jbundler")); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.COMPACT)); } @Test public void testBundlerApiFile1() throws Exception { RubygemsFile file = fileSystem.get("/api/v1/dependencies?gems=jbundler"); assertThat(file, notNullValue()); assertThat(file.storagePath(), equalTo("/info/jbundler.compact")); assertThat(file.remotePath(), equalTo("/info/jbundler")); assertThat(file.name(), equalTo("jbundler")); assertThat(file.type(), equalTo(FileType.COMPACT)); } @Test public void testBundlerApiFile2() throws Exception { RubygemsFile file = fileSystem.get("/api/v1/dependencies?gems=jbundler,bundler"); assertThat(file, notNullValue()); assertThat(file.storagePath(), equalTo("/api/v1/dependencies/bundler+jbundler.gems")); assertThat(file.name(), nullValue()); assertThat(file.remotePath(), equalTo("/api/v1/dependencies?gems=jbundler,bundler")); assertThat(((BundlerApiFile) file).gemnames(), equalTo(new String[]{"bundler", "jbundler"})); assertThat(file.type(), equalTo(FileType.BUNDLER_API)); } @Test public void testBundlerApiFile3() throws Exception { RubygemsFile file = fileSystem.get("/api/v1/dependencies?gems=jbundler%2Cbundler"); assertThat(file, notNullValue()); assertThat(file.storagePath(), equalTo("/api/v1/dependencies/bundler+jbundler.gems")); assertThat(file.name(), nullValue()); assertThat(file.remotePath(), equalTo("/api/v1/dependencies?gems=jbundler,bundler")); assertThat(((BundlerApiFile) file).gemnames(), equalTo(new String[]{"bundler", "jbundler"})); assertThat(file.type(), equalTo(FileType.BUNDLER_API)); } @Test public void testSpecsIndexFile() throws Exception { RubygemsFile file = fileSystem.get("/specs.4.8.gz"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.SPECS_INDEX_ZIPPED)); RubygemsFile file2 = fileSystem.get("/specs.4.8"); assertThat(file2.type(), equalTo(FileType.SPECS_INDEX)); assertThat((SpecsIndexZippedFile) file, equalTo(((SpecsIndexFile) file2).zippedSpecsIndexFile())); assertThat((SpecsIndexFile) file2, equalTo(((SpecsIndexZippedFile) file).unzippedSpecsIndexFile())); assertThat(file.storagePath(), equalTo("/specs.4.8.gz")); assertThat(file.remotePath(), equalTo("/specs.4.8.gz")); assertThat(file2.storagePath(), equalTo("/specs.4.8")); assertThat(file2.remotePath(), equalTo("/specs.4.8")); assertThat(file.name(), equalTo("specs")); SpecsIndexZippedFile file3 = (SpecsIndexZippedFile) file; assertThat(file3.specsType(), equalTo(SpecsIndexType.RELEASE)); assertThat(file3.storagePath(), equalTo(SpecsIndexType.RELEASE.filepathGzipped())); SpecsIndexFile file4 = (SpecsIndexFile) file2; assertThat(file4.specsType(), equalTo(SpecsIndexType.RELEASE)); assertThat(file4.storagePath(), equalTo(SpecsIndexType.RELEASE.filepath())); } @Test public void testLatestSpecsIndexFile() throws Exception { RubygemsFile file = fileSystem.get("/latest_specs.4.8.gz"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.SPECS_INDEX_ZIPPED)); RubygemsFile file2 = fileSystem.get("/latest_specs.4.8"); assertThat(file2.type(), equalTo(FileType.SPECS_INDEX)); assertThat((SpecsIndexZippedFile) file, equalTo(((SpecsIndexFile) file2).zippedSpecsIndexFile())); assertThat((SpecsIndexFile) file2, equalTo(((SpecsIndexZippedFile) file).unzippedSpecsIndexFile())); assertThat(file.storagePath(), equalTo("/latest_specs.4.8.gz")); assertThat(file.remotePath(), equalTo("/latest_specs.4.8.gz")); assertThat(file2.storagePath(), equalTo("/latest_specs.4.8")); assertThat(file2.remotePath(), equalTo("/latest_specs.4.8")); assertThat(file.name(), equalTo("latest_specs")); SpecsIndexZippedFile file3 = (SpecsIndexZippedFile) file; assertThat(file3.specsType(), equalTo(SpecsIndexType.LATEST)); assertThat(file3.storagePath(), equalTo(SpecsIndexType.LATEST.filepathGzipped())); SpecsIndexFile file4 = (SpecsIndexFile) file2; assertThat(file4.specsType(), equalTo(SpecsIndexType.LATEST)); assertThat(file4.storagePath(), equalTo(SpecsIndexType.LATEST.filepath())); } @Test public void testPrereleasedSpecsIndexFile() throws Exception { RubygemsFile file = fileSystem.get("/prerelease_specs.4.8.gz"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.SPECS_INDEX_ZIPPED)); RubygemsFile file2 = fileSystem.get("/prerelease_specs.4.8"); assertThat(file2.type(), equalTo(FileType.SPECS_INDEX)); assertThat((SpecsIndexZippedFile) file, equalTo(((SpecsIndexFile) file2).zippedSpecsIndexFile())); assertThat((SpecsIndexFile) file2, equalTo(((SpecsIndexZippedFile) file).unzippedSpecsIndexFile())); assertThat(file.storagePath(), equalTo("/prerelease_specs.4.8.gz")); assertThat(file.remotePath(), equalTo("/prerelease_specs.4.8.gz")); assertThat(file2.storagePath(), equalTo("/prerelease_specs.4.8")); assertThat(file2.remotePath(), equalTo("/prerelease_specs.4.8")); assertThat(file.name(), equalTo("prerelease_specs")); SpecsIndexZippedFile file3 = (SpecsIndexZippedFile) file; assertThat(file3.specsType(), equalTo(SpecsIndexType.PRERELEASE)); assertThat(file3.storagePath(), equalTo(SpecsIndexType.PRERELEASE.filepathGzipped())); SpecsIndexFile file4 = (SpecsIndexFile) file2; assertThat(file4.specsType(), equalTo(SpecsIndexType.PRERELEASE)); assertThat(file4.storagePath(), equalTo(SpecsIndexType.PRERELEASE.filepath())); } @Test public void testNotFile() throws Exception { RubygemsFile file = fileSystem.get("/prereleased_specs.4.8.gz"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.NOT_FOUND)); file = fileSystem.get("/pre_specs.4.8"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.NOT_FOUND)); file = fileSystem.get("/gems/something.json"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.NOT_FOUND)); file = fileSystem.get("/something/index.html"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.NOT_FOUND)); } @Test public void testDirectory() throws Exception { RubygemsFile file = fileSystem.get("/api"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); RubygemsFile file2 = fileSystem.get("/api/"); assertThat(file, equalTo(file2)); file = fileSystem.get("/api/v1"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get("/api/v1/"); assertThat(file, equalTo(file2)); file = fileSystem.get("/api/v1/dependencies/"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file = fileSystem.get("/api/v1/dependencies/a/"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get("/api/v1/dependencies/a"); assertThat(file, equalTo(file2)); file = fileSystem.get("/"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get(""); assertThat(file, equalTo(file2)); file = fileSystem.get("/gems"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get("/gems/"); assertThat(file, equalTo(file2)); file = fileSystem.get("/gems/v"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get("/gems/v/"); assertThat(file, equalTo(file2)); file = fileSystem.get("/quick"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get("/quick/"); assertThat(file, equalTo(file2)); file = fileSystem.get("/quick/Marshal.4.8"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get("/quick/Marshal.4.8/"); assertThat(file, equalTo(file2)); file = fileSystem.get("/quick/Marshal.4.8/-"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.DIRECTORY)); file2 = fileSystem.get("/quick/Marshal.4.8/-/"); assertThat(file, equalTo(file2)); } @Test public void testNoContent() throws Exception { RubygemsFile file = fileSystem.get("/api/v1/dependencies"); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.NO_CONTENT)); assertThat(file.get(), nullValue()); file = fileSystem.get("/api/v1/dependencies?gems="); assertThat(file, notNullValue()); assertThat(file.type(), equalTo(FileType.NO_CONTENT)); assertThat(file.get(), nullValue()); } static class DependencyDataMock implements DependencyData { private final String platform; DependencyDataMock() { this("ruby"); } DependencyDataMock(String platform) { this.platform = platform; } @Override public String[] versions(boolean prereleased) { return null; } @Override public String platform(String version) { return platform; } @Override public String name() { return null; } @Override public long modified() { return 0; } } static class RubygemsV2GemInfoMock implements RubygemsV2GemInfo { private final String platform; RubygemsV2GemInfoMock() { this("ruby"); } RubygemsV2GemInfoMock(String platform) { this.platform = platform; } @Override public String version() { return null; } @Override public String platform() { return platform; } @Override public String name() { return null; } @Override public long modified() { return 0; } } } HostedDELETELayoutTest.java000066400000000000000000000407411446701454400364770ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.GemArtifactFile; import org.torquebox.mojo.rubygems.RubyScriptingTestSupport; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; import org.torquebox.mojo.rubygems.layout.SimpleStorage.BytesStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLGzipStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLStreamLocation; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Collection; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; @RunWith(Parameterized.class) public class HostedDELETELayoutTest extends RubyScriptingTestSupport { private final DefaultRubygemsFileSystem fileSystem; public HostedDELETELayoutTest(Storage store) throws IOException { fileSystem = new DefaultRubygemsFileSystem( new HostedGETLayout(rubygemsGateway(), store), null, new HostedDELETELayout(rubygemsGateway(), new SimpleStorage(hostedBase()))); // delete proxy files proxyBase(); } private static File proxyBase() throws IOException { File base = new File("target/hosted-delete-proxy"); FileUtils.deleteDirectory(base); return base; } private static File hostedBase() throws IOException { File source = new File("src/test/hostedrepo"); File base = new File("target/hosted-delete-repo"); FileUtils.deleteDirectory(base); FileUtils.copyDirectory(source, base, true); return base; } @Parameters public static Collection stores() throws IOException { return Arrays.asList(new Object[][]{ {new SimpleStorage(hostedBase())}, { new CachingProxyStorage(proxyBase(), hostedBase().toURI().toURL()) { protected URLStreamLocation toUrl(RubygemsFile file) throws MalformedURLException { return new URLStreamLocation(new URL(baseurl + file.storagePath())); } } } }); } @Before public void deleteGems() { fileSystem.delete("/gems/zip-2.0.2.gem"); } @Test public void testSpecsZippedIndex() throws Exception { String[] pathes = { "/specs.4.8.gz", "/prerelease_specs.4.8.gz", "/latest_specs.4.8.gz" }; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX_ZIPPED, URLStreamLocation.class); } @Test public void testSpecsUnzippedIndex() throws Exception { String[] pathes = { "/specs.4.8", "/prerelease_specs.4.8", "/latest_specs.4.8" }; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX, URLGzipStreamLocation.class); } @Test public void testSha1() throws Exception { String[] pathes = { "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.gem.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.pom.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.pom.sha1" }; String[] shas = { "edfb9b1923514277b7256b0670a388da43706d39", "2a5b7fa349c165f5d32872e47934ba21f73afa4e", "edfb9b1923514277b7256b0670a388da43706d39", "b8eea5229c506c18d764debce625b70f0a9d474a" }; assertFiletypeWithPayload(pathes, FileType.SHA1, shas); pathes = new String[]{ "/maven/releases/rubygems/zip/9.9.9.9/zip-9.9.9.9.gem.sha1", "/maven/releases/rubygems/zip/9.9.9.9/zip-9.9.9.9.pom.sha1" }; assertNotFound(pathes, FileType.SHA1); // these files carry a timestamp of creation of the .ruby file pathes = new String[]{ "/maven/prereleases/rubygems/psych/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT/maven-metadata.xml.sha1", "/maven/releases/rubygems/psych/maven-metadata.xml.sha1" }; assertFiletypeWithPayload(pathes, FileType.SHA1, BytesStreamLocation.class); } @Test public void testGemArtifact() throws Exception { String[] pathes = { "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT/psych-5.1.0.pre1-123213123.gem" }; assertFiletypeWithPayload(pathes, FileType.GEM_ARTIFACT, URLStreamLocation.class); pathes = new String[]{"/maven/releases/rubygems/zip/9.9.9.9/zip-9.9.9.9.gem"}; assertNotFound(pathes, FileType.GEM_ARTIFACT); pathes = new String[]{ "/maven/releases/rubygems/hufflepuf/0.1.0/hufflepuf-0.1.0.gem", "/maven/releases/rubygems/hufflepuf/0.2.0/hufflepuf-0.2.0.gem" }; RubygemsFile[] result = assertFiletypeWithPayload(pathes, FileType.GEM_ARTIFACT, URLStreamLocation.class); for (RubygemsFile file : result) { GemArtifactFile a = (GemArtifactFile) file; assertThat(a.gem(null).filename(), is("hufflepuf-" + a.version() + "-universal-java-1.5")); } } @Test public void testPom() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/0.8.0.pre/jbundler-0.8.0.pre.pom", "/maven/prereleases/rubygems/jbundler/0.8.0.pre-SNAPSHOT/jbundler-0.8.0.pre-123213123.pom" }; String[] xmls = { loadPomResource("jbundler-release.pom"), loadPomResource("jbundler-prerelease.pom") }; assertFiletypeWithPayload(pathes, FileType.POM, xmls); pathes = new String[]{"/maven/releases/rubygems/zip/9.9.9.9/zip-9.9.9.9.pom"}; assertNotFound(pathes, FileType.POM); } @Test public void testMavenMetadata() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/maven-metadata.xml", "/maven/releases/rubygems/psych/maven-metadata.xml", "/maven/prereleases/rubygems/psych/maven-metadata.xml" }; String[] xmls = { loadPomResource("zip-release-metadata.xml"), loadPomResource("psych-release-metadata.xml"), loadPomResource("psych-prerelease-metadata.xml") }; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA, xmls); } @Test public void testMavenMetadataSnapshot() throws Exception { String[] pathes = {"/maven/prereleases/rubygems/pre/0.1.0-SNAPSHOT/maven-metadata.xml"}; String[] xmls = { "\n" + " rubygems\n" + " pre\n" + " \n" + " \n" + " \n" + " 2014\n" + " 1\n" + " \n" + " 2014\n" + " \n" + " \n" + " gem\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " pom\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " \n" + " \n" + "\n" }; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA_SNAPSHOT, xmls); } @Test public void testBundlerApi() throws Exception { String[] pathes = {"/api/v1/dependencies?gems=zip,psych"}; assertFiletypeWithPayload(pathes, FileType.BUNDLER_API, BytesStreamLocation.class); } @Test public void testApiV1Gems() throws Exception { String[] pathes = {"/api/v1/gems"}; assertForbidden(pathes); } @Test public void testApiV1ApiKey() throws Exception { String[] pathes = {"/api/v1/api_key"}; assertFiletypeWithNullPayload(pathes, FileType.API_V1); } @Test public void testDependency() throws Exception { String[] pathes = { "/info/zip", "/info/psych.compact", "/info/psych.compact" }; assertFiletypeWithPayload(pathes, FileType.COMPACT, URLStreamLocation.class); } @Test public void testGemspec() throws Exception { String[] pathes = { "/api/v2/rubygems/psych/versions/5.1.0.pre1.json", "/api/v2/rubygems/psych/versions/5.1.0.pre1.json" }; assertFiletypeWithPayload(pathes, FileType.JSON_API, URLStreamLocation.class); pathes = new String[]{"/quick/Marshal.4.8/zip-2.0.2.gemspec.rz", "/quick/Marshal.4.8/z/zip-2.0.2.gemspec.rz"}; assertNotFound(pathes, FileType.GEMSPEC); } @Test public void testGem() throws Exception { String[] pathes = {"/gems/psych-5.1.0.pre1-java.gem", "/gems/psych-5.1.0.pre1-java.gem"}; assertFiletypeWithPayload(pathes, FileType.GEM, URLStreamLocation.class); pathes = new String[]{"/gems/zip-2.0.2.gem", "/gems/z/zip-2.0.2.gem"}; assertNotFound(pathes, FileType.GEM); } @Test public void testDirectory() throws Exception { String[] pathes = { "/", "/api", "/api/", "/api/v1", "/api/v1/", "/api/v1/dependencies/", "/gems/", "/gems", "/maven/releases/rubygems/jbundler", "/maven/releases/rubygems/jbundler/1.2.3", "/maven/prereleases/rubygems/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT", }; assertFiletypeWithNullPayload(pathes, FileType.DIRECTORY); } @Test public void testNoContent() throws Exception { String[] pathes = { "/api/v1/dependencies", "/api/v1/dependencies?gems=", }; assertFiletypeWithNullPayload(pathes, FileType.NO_CONTENT); } @Test public void testNotFound() throws Exception { String[] pathes = { "/asa", "/asa/", "/api/a", "/api/v1ds", "/api/v1/ds", "/api/v1/dependencies/jbundler.jruby", "/api/v1/dependencies/b/bundler.rubyd", "/api/v1/dependencies/basd/bundler.ruby", "/quick/Marshal.4.8/jbundler.jruby.rz", "/quick/Marshal.4.8/b/bundler.gemspec.rzd", "/quick/Marshal.4.8/basd/bundler.gemspec.rz", "/gems/jbundler.jssaonrz", "/gems/b/bundler.gemsa", "/gems/basd/bundler.gem", "/maven/releasesss/rubygemsss/a", "/maven/releases/rubygemsss/jbundler", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gema", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom2", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.msa", "/maven/prereleases/rubygemsss/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1a", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sh1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gema", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom2", }; assertFiletypeWithNullPayload(pathes, FileType.NOT_FOUND, false); } protected void assertFiletype(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), notNullValue()); assertThat(path, file.hasException(), is(false)); } } protected void assertFiletypeWithPayload(String[] pathes, FileType type, String[] payloads) { int index = 0; for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(BytesStreamLocation.class))); assertThat(path, file.hasException(), is(false)); assertThat(path, readPayload(file).replaceAll("[0-9]{8}\\.?[0-9]{6}", "2014"), equalTo(payloads[index++])); } } protected String readPayload(RubygemsFile file) { try { ByteArrayInputStream b = (ByteArrayInputStream) ((BytesStreamLocation) file.get()).openStream(); byte[] bb = new byte[b.available()]; b.read(bb); return new String(bb); } catch (IOException e) { throw new RuntimeException(e); } } protected RubygemsFile[] assertFiletypeWithPayload(String[] pathes, FileType type, Class payload) { RubygemsFile[] result = new RubygemsFile[pathes.length]; int index = 0; for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(payload))); assertThat(path, file.hasException(), is(false)); result[index++] = file; } return result; } protected void assertFiletypeWithNullPayload(String[] pathes, FileType type) { assertFiletypeWithNullPayload(pathes, type, true); } protected void assertFiletypeWithNullPayload(String[] pathes, FileType type, boolean found) { for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), nullValue()); assertThat(path, file.hasNoPayload(), is(found)); assertThat(path, file.hasException(), is(false)); assertThat(path, file.exists(), is(found)); } } protected void assertNotFound(String[] pathes, FileType type) { assertFiletypeWithNullPayload(pathes, type, false); } protected void assertForbidden(String[] pathes) { for (String path : pathes) { assertThat(path, fileSystem.get(path).forbidden(), is(true)); } } } HostedGETLayoutTest.java000066400000000000000000000460351446701454400361560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.apache.commons.io.FileUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.torquebox.mojo.rubygems.Directory; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.GemArtifactFile; import org.torquebox.mojo.rubygems.RubyScriptingTestSupport; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; import org.torquebox.mojo.rubygems.layout.SimpleStorage.BytesStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLGzipStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLStreamLocation; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; @RunWith(Parameterized.class) public class HostedGETLayoutTest extends RubyScriptingTestSupport { private final DefaultRubygemsFileSystem bootstrap; public HostedGETLayoutTest(Storage store) { bootstrap = new DefaultRubygemsFileSystem( new HostedGETLayout(rubygemsGateway(), store), null, null); } private static File proxyBase() throws IOException { File base = new File("target/hosted-get-proxy"); FileUtils.deleteDirectory(base); return base; } private static File hostedBase() throws IOException { File source = new File("src/test/hostedrepo"); File base = new File("target/hosted-get-repo"); FileUtils.deleteDirectory(base); FileUtils.copyDirectory(source, base, true); return base; } @Parameters public static Collection stores() throws IOException { return Arrays.asList(new Object[][]{ {new SimpleStorage(hostedBase())}, { new CachingProxyStorage(proxyBase(), hostedBase().toURI().toURL()) { protected URLStreamLocation toUrl(RubygemsFile file) throws MalformedURLException { return new URLStreamLocation(new URL(baseurl + file.storagePath())); } } } }); } @Test public void testSpecsZippedIndex() throws Exception { String[] pathes = { "/specs.4.8.gz", "/prerelease_specs.4.8.gz", "/latest_specs.4.8.gz" }; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX_ZIPPED, URLStreamLocation.class); } @Test public void testSpecsUnzippedIndex() throws Exception { String[] pathes = { "/specs.4.8", "/prerelease_specs.4.8", "/latest_specs.4.8" }; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX, URLGzipStreamLocation.class); } @Test public void testSha1() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.gem.sha1", "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.pom.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.gem.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.pom.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.pom.sha1" }; String[] shas = { "6fabc32da123f7013b2db804273df428a50bc6a4", "0e4ca1234356120dc03a58d922d75c3694e51486", "edfb9b1923514277b7256b0670a388da43706d39", "2a5b7fa349c165f5d32872e47934ba21f73afa4e", "edfb9b1923514277b7256b0670a388da43706d39", "b8eea5229c506c18d764debce625b70f0a9d474a" }; assertFiletypeWithPayload(pathes, FileType.SHA1, shas); // these files carry a timestamp of creation of the .ruby file pathes = new String[]{ "/maven/releases/rubygems/zip/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/psych/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT/maven-metadata.xml.sha1", "/maven/releases/rubygems/psych/maven-metadata.xml.sha1" }; assertFiletypeWithPayload(pathes, FileType.SHA1, BytesStreamLocation.class); } @Test public void testGemArtifact() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.gem", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.gem" }; assertFiletypeWithPayload(pathes, FileType.GEM_ARTIFACT, URLStreamLocation.class); pathes = new String[]{ "/maven/releases/rubygems/hufflepuf/0.1.0/hufflepuf-0.1.0.gem", "/maven/releases/rubygems/hufflepuf/0.1.0/hufflepuf-0.2.0.gem" }; RubygemsFile[] result = assertFiletypeWithPayload(pathes, FileType.GEM_ARTIFACT, URLStreamLocation.class); for (RubygemsFile file : result) { GemArtifactFile a = (GemArtifactFile) file; assertThat(a.gem(null).filename(), is("hufflepuf-" + a.version() + "-universal-java-1.5")); } } @Test public void testPom() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.pom", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.pom", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.pom" }; String[] xmls = { loadPomResource("zip.pom"), loadPomResource("psych-release.pom"), loadPomResource("psych-prerelease.pom") }; assertFiletypeWithPayload(pathes, FileType.POM, xmls); } @Test public void testMavenMetadata() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/maven-metadata.xml", "/maven/releases/rubygems/psych/maven-metadata.xml", "/maven/prereleases/rubygems/psych/maven-metadata.xml" }; String[] xmls = { loadPomResource("zip-release-metadata.xml"), loadPomResource("psych-release-metadata.xml"), loadPomResource("psych-prerelease-metadata.xml") }; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA, xmls); } @Test public void testMavenMetadataSnapshot() throws Exception { String[] pathes = {"/maven/prereleases/rubygems/pre/0.1.0-SNAPSHOT/maven-metadata.xml"}; String[] xmls = { "\n" + " rubygems\n" + " pre\n" + " \n" + " \n" + " \n" + " 2014\n" + " 1\n" + " \n" + " 2014\n" + " \n" + " \n" + " gem\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " pom\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " \n" + " \n" + "\n" }; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA_SNAPSHOT, xmls); } @Test public void testBundlerApi() throws Exception { String[] pathes = {"/api/v1/dependencies?gems=zip,psych"}; assertFiletypeWithPayload(pathes, FileType.BUNDLER_API, BytesStreamLocation.class); } @Test public void testApiV1Gems() throws Exception { String[] pathes = {"/api/v1/gems"}; assertForbidden(pathes); } @Test public void testApiV1ApiKey() throws Exception { String[] pathes = {"/api/v1/api_key"}; assertFiletypeWithNullPayload(pathes, FileType.API_V1); } @Test public void testApiV2() throws Exception { String[] paths = { "/api/v2/rubygems/rails/versions/7.0.1.json" }; assertFiletypeWithPayload(paths, FileType.JSON_API, URLStreamLocation.class); } @Test public void testGemInfo() throws Exception { String[] paths = { "/info/hashdb.compact" }; assertFiletypeWithPayload(paths, FileType.COMPACT, URLStreamLocation.class); } @Test public void testGemspec() throws Exception { String[] pathes = {"/quick/Marshal.4.8/zip-2.0.2.gemspec.rz", "/quick/Marshal.4.8/z/zip-2.0.2.gemspec.rz"}; assertFiletypeWithPayload(pathes, FileType.GEMSPEC, URLStreamLocation.class); } @Test public void testGem() throws Exception { String[] pathes = {"/gems/psych-5.1.0.pre1-java.gem", "/gems/p/psych-5.1.0.pre1-java.gem"}; assertFiletypeWithPayload(pathes, FileType.GEM, URLStreamLocation.class); } @Test public void testDirectory() throws Exception { String[] pathes = { "/", "/api", "/api/", "/api/v1", "/api/v1/", "/gems/", "/gems", "/maven/releases/rubygems/zip", "/maven/releases/rubygems/zip/2.0.2", "/maven/prereleases/rubygems/psych", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT", }; assertFiletypeWithNullPayload(pathes, FileType.DIRECTORY); assertDirectory("/", "api/", "quick/", "gems/", "maven/", "specs.4.8", "latest_specs.4.8", "prerelease_specs.4.8", "specs.4.8.gz", "latest_specs.4.8.gz", "prerelease_specs.4.8.gz"); assertDirectory("/api", "v1", "quick", "gems"); assertDirectory("/api/v1", "api_key", "dependencies"); assertDirectory("/api/quick", "Marshal.4.8"); assertDirectory("/api/quick/Marshal.4.8"); assertDirectory("/api/gems"); assertDirectory("/quick", "Marshal.4.8"); assertDirectory("/quick/Marshal.4.8"); // old format, perhaps can be removed // assertDirectory("/gems", "hufflepuf.ruby", "pre.ruby", "zip.ruby" ); assertDirectory("/maven", "prereleases", "releases"); assertDirectory("/maven/prereleases", "rubygems"); // the lookup will create a hufflepuf.ruby ! assertDirectory("/maven/prereleases/rubygems/hufflepuf", "maven-metadata.xml", "maven-metadata.xml.sha1"); // FIXME: @headius not sure what this is supposed to do // assertDirectory("/maven/prereleases/rubygems", "psych"); assertDirectory("/maven/releases", "rubygems"); // FIXME: @headius not sure what this is supposed to do // assertDirectory("/maven/releases/rubygems", "psych"); assertDirectory("/maven/releases/rubygems/hufflepuf", "0.1.0", "0.2.0", "maven-metadata.xml", "maven-metadata.xml.sha1"); assertDirectory("/maven/releases/rubygems/zip", "2.0.2", "maven-metadata.xml", "maven-metadata.xml.sha1"); assertDirectory("/maven/releases/rubygems/hufflepuf/0.1.0", "hufflepuf-0.1.0.pom", "hufflepuf-0.1.0.pom.sha1", "hufflepuf-0.1.0.gem", "hufflepuf-0.1.0.gem.sha1"); assertDirectory("/maven/releases/rubygems/hufflepuf/0.2.0", "hufflepuf-0.2.0.pom", "hufflepuf-0.2.0.pom.sha1", "hufflepuf-0.2.0.gem", "hufflepuf-0.2.0.gem.sha1"); assertDirectory("/maven/releases/rubygems/pre/0.1.0.beta", "pre-0.1.0.beta.pom", "pre-0.1.0.beta.pom.sha1", "pre-0.1.0.beta.gem", "pre-0.1.0.beta.gem.sha1"); assertDirectory("/maven/releases/rubygems/zip/2.0.2", "zip-2.0.2.pom", "zip-2.0.2.pom.sha1", "zip-2.0.2.gem", "zip-2.0.2.gem.sha1"); } private void assertDirectory(String path, String... items) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(FileType.DIRECTORY)); assertThat(path, file.get(), nullValue()); assertThat(path, file.hasException(), is(false)); assertThat(path, cleanupList(((Directory) file).getItems()), equalTo(cleanupList(items))); } protected List cleanupList(String... items) { List list = new LinkedList<>(); for (String item : items) { if (!item.startsWith("gems=")) { list.add(item); } } // normalize to cope with file-system listing order issues. Collections.sort(list); return list; } @Test public void testNoContent() throws Exception { String[] pathes = { "/api/v1/dependencies", "/api/v1/dependencies?gems=", }; assertFiletypeWithNullPayload(pathes, FileType.NO_CONTENT); } @Test public void testNotFound() throws Exception { String[] pathes = { "/asa", "/asa/", "/api/a", "/api/v1ds", "/api/v1/ds", "/api/v1/dependencies/jbundler.jruby", "/api/v1/dependencies/b/bundler.jrubyd", "/api/v1/dependencies/basd/bundler.ruby", "/quick/Marshal.4.8/jbundler.jssaon.rz", "/quick/Marshal.4.8/b/bundler.gemspec.rzd", "/quick/Marshal.4.8/basd/bundler.gemspec.rz", "/gems/jbundler.jssaonrz", "/gems/b/bundler.gemsa", "/gems/basd/bundler.gem", "/maven/releasesss/rubygemsss/a", "/maven/releases/rubygemsss/jbundler", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gema", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom2", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.msa", "/maven/prereleases/rubygemsss/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1a", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sh1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gema", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom2", }; assertFiletypeWithNullPayload(pathes, FileType.NOT_FOUND); } protected void assertFiletype(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), notNullValue()); assertThat(path, file.hasException(), is(false)); } } protected void assertFiletypeWithPayload(String[] pathes, FileType type, String[] payloads) { int index = 0; for (String path : pathes) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(BytesStreamLocation.class))); assertThat(path, file.hasException(), is(false)); assertThat(path, readPayload(file).replaceAll("[0-9]{8}\\.?[0-9]{6}", "2014"), equalTo(payloads[index++])); } } protected String readPayload(RubygemsFile file) { try { ByteArrayInputStream b = (ByteArrayInputStream) ((BytesStreamLocation) file.get()).openStream(); byte[] bb = new byte[b.available()]; b.read(bb); return new String(bb); } catch (IOException e) { throw new RuntimeException(e); } } protected RubygemsFile[] assertFiletypeWithPayload(String[] pathes, FileType type, Class payload) { RubygemsFile[] result = new RubygemsFile[pathes.length]; int index = 0; for (String path : pathes) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(payload))); assertThat(path, file.hasException(), is(false)); result[index++] = file; } return result; } protected void assertFiletypeWithNullPayload(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), nullValue()); assertThat(path, file.hasException(), is(false)); } } protected void assertIOException(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = bootstrap.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.getException(), is(instanceOf(IOException.class))); } } protected void assertForbidden(String[] pathes) { for (String path : pathes) { assertThat(path, bootstrap.get(path).forbidden(), is(true)); } } } HostedPOSTLayoutTest.java000066400000000000000000000422311446701454400363160ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.RubyScriptingTestSupport; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; import org.torquebox.mojo.rubygems.layout.SimpleStorage.BytesStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLGzipStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLStreamLocation; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Collection; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; @RunWith(Parameterized.class) public class HostedPOSTLayoutTest extends RubyScriptingTestSupport { private final DefaultRubygemsFileSystem fileSystem; private final boolean isHosted; public HostedPOSTLayoutTest(Storage store) throws IOException { if (store instanceof CachingProxyStorage) { isHosted = false; fileSystem = new DefaultRubygemsFileSystem(new HostedGETLayout(rubygemsGateway(), new SimpleStorage(hostedBase())), null, null); } else { isHosted = true; fileSystem = new DefaultRubygemsFileSystem(new HostedGETLayout(rubygemsGateway(), new SimpleStorage(hostedBase())), new HostedPOSTLayout(rubygemsGateway(), store), null); } } private static File proxyBase() throws IOException { File base = new File("target/hosted-post-proxy"); FileUtils.deleteDirectory(base); return base; } private static File hostedBase() throws IOException { File base = new File("target/hosted-post-repo"); return base; } @Parameters public static Collection stores() throws IOException { return Arrays.asList(new Object[][]{ {new SimpleStorage(hostedBase())}, { new CachingProxyStorage(proxyBase(), hostedBase().toURI().toURL()) { protected URLStreamLocation toUrl(RubygemsFile file) throws MalformedURLException { return new URLStreamLocation(new URL(baseurl + file.storagePath())); } } } }); } @Before public void pushGem() throws IOException { if (isHosted) { // only the hosted one gets a new repo and a new gem File base = hostedBase(); File source = new File("src/test/hostedrepo"); FileUtils.deleteDirectory(base); FileUtils.copyDirectory(source, base, true); fileSystem.post(new FileInputStream("src/test/second-2.gem"), "/gems/second-2.gem"); } else { // get those files in place for the proxy to find fileSystem.get("/quick/Marshal.4.8/pre-0.1.0.beta.gemspec.rz"); fileSystem.get("/api/v1/dependencies/pre.ruby"); fileSystem.get("/quick/Marshal.4.8/zip-2.0.2.gemspec.rz"); fileSystem.get("/api/v1/dependencies/zip.ruby"); fileSystem.get("/quick/Marshal.4.8/second-2.gemspec.rz"); fileSystem.get("/api/v1/dependencies/second.ruby"); } } @Test public void testSpecsZippedIndex() throws Exception { String[] pathes = { "/specs.4.8.gz", "/prerelease_specs.4.8.gz", "/latest_specs.4.8.gz" }; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX_ZIPPED, URLStreamLocation.class); } @Test public void testSpecsUnzippedIndex() throws Exception { String[] pathes = { "/specs.4.8", "/prerelease_specs.4.8", "/latest_specs.4.8" }; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX, URLGzipStreamLocation.class); } @Test public void testSha1() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.gem.sha1", "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.pom.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.gem.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.pom.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.pom.sha1" }; String[] shas = { "6fabc32da123f7013b2db804273df428a50bc6a4", "0e4ca1234356120dc03a58d922d75c3694e51486", "edfb9b1923514277b7256b0670a388da43706d39", "2a5b7fa349c165f5d32872e47934ba21f73afa4e", "edfb9b1923514277b7256b0670a388da43706d39", "b8eea5229c506c18d764debce625b70f0a9d474a" }; assertFiletypeWithPayload(pathes, FileType.SHA1, shas); // these files carry a timestamp of creation of the .ruby file pathes = new String[]{ "/maven/releases/rubygems/zip/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/psych/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT/maven-metadata.xml.sha1", "/maven/releases/rubygems/psych/maven-metadata.xml.sha1" }; assertFiletypeWithPayload(pathes, FileType.SHA1, BytesStreamLocation.class); } @Test public void testGemArtifact() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.gem", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.gem" }; assertFiletypeWithPayload(pathes, FileType.GEM_ARTIFACT, URLStreamLocation.class); } @Test public void testPom() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.pom", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.pom", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.pom" }; String[] xmls = { loadPomResource("zip.pom"), loadPomResource("psych-release.pom"), loadPomResource("psych-prerelease.pom") }; assertFiletypeWithPayload(pathes, FileType.POM, xmls); } @Test public void testMavenMetadata() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/maven-metadata.xml", "/maven/releases/rubygems/psych/maven-metadata.xml", "/maven/prereleases/rubygems/psych/maven-metadata.xml" }; String[] xmls = { loadPomResource("zip-release-metadata.xml"), loadPomResource("psych-release-metadata.xml"), loadPomResource("psych-prerelease-metadata.xml") }; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA, xmls); } @Test public void testMavenMetadataSnapshot() throws Exception { String[] pathes = {"/maven/prereleases/rubygems/pre/0.1.0-SNAPSHOT/maven-metadata.xml"}; String[] xmls = { "\n" + " rubygems\n" + " pre\n" + " \n" + " \n" + " \n" + " 2014\n" + " 1\n" + " \n" + " 2014\n" + " \n" + " \n" + " gem\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " pom\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " \n" + " \n" + "\n" }; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA_SNAPSHOT, xmls); } @Test public void testBundlerApi() throws Exception { String[] pathes = {"/api/v1/dependencies?gems=zip,psych", "/api/v1/dependencies?gems=zip,psych,rake"}; if (isHosted) { assertNotExists(pathes); } else { assertFiletypeWithPayload(pathes, FileType.BUNDLER_API, BytesStreamLocation.class); } } @Test public void testApiV1Gems() throws Exception { String[] pathes = {"/api/v1/gems"}; assertForbiddenGet(pathes); } @Test public void testApiV1ApiKey() throws Exception { String[] pathes = {"/api/v1/api_key"}; assertFiletypeWithNullPayload(pathes, FileType.API_V1); } @Test public void testGemspec() throws Exception { String[] pathes = { "/quick/Marshal.4.8/zip-2.0.2.gemspec.rz", "/quick/Marshal.4.8/z/zip-2.0.2.gemspec.rz", "/quick/Marshal.4.8/psych-5.1.0.pre1-java.gemspec.rz", "/quick/Marshal.4.8/p/psych-5.1.0.pre1-java.gemspec.rz" }; assertFiletypeWithPayload(pathes, FileType.GEMSPEC, URLStreamLocation.class); } @Test public void testGem() throws Exception { String[] pathes = { "/gems/zip-2.0.2.gem", "/gems/z/zip-2.0.2.gem", "/gems/second-2.gem", "/gems/s/second-2.gem", }; assertFiletypeWithPayload(pathes, FileType.GEM, URLStreamLocation.class); } @Test public void testDirectory() throws Exception { String[] pathes = { "/", "/api", "/api/", "/api/v1", "/api/v1/", "/api/v1/dependencies/", "/gems/", "/gems", "/maven/releases/rubygems/jbundler", "/maven/releases/rubygems/jbundler/1.2.3", "/maven/prereleases/rubygems/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT", }; assertFiletypeWithNullPayload(pathes, FileType.DIRECTORY); } @Test public void testNoContent() throws Exception { String[] pathes = { "/api/v1/dependencies", "/api/v1/dependencies?gems=", }; assertFiletypeWithNullPayload(pathes, FileType.NO_CONTENT); } @Test public void testNotFound() throws Exception { String[] pathes = { "/asa", "/asa/", "/api/a", "/api/v1ds", "/api/v1/ds", "/api/v1/dependencies/jbundler.jruby", "/api/v1/dependencies/b/bundler.rubyd", "/api/v1/dependencies/basd/bundler.ruby", "/quick/Marshal.4.8/jbundler.jruby.rz", "/quick/Marshal.4.8/b/bundler.gemspec.rzd", "/quick/Marshal.4.8/basd/bundler.gemspec.rz", "/gems/jbundler.jssaonrz", "/gems/b/bundler.gemsa", "/gems/basd/bundler.gem", "/maven/releasesss/rubygemsss/a", "/maven/releases/rubygemsss/jbundler", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gema", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom2", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.msa", "/maven/prereleases/rubygemsss/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1a", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sh1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gema", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom2", }; assertFiletypeWithNullPayload(pathes, FileType.NOT_FOUND); } protected void assertFiletype(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), notNullValue()); assertThat(path, file.hasException(), is(false)); } } protected void assertFiletypeWithPayload(String[] pathes, FileType type, String[] payloads) { int index = 0; for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(BytesStreamLocation.class))); assertThat(path, file.hasException(), is(false)); assertThat(path, readPayload(file).replaceAll("[0-9]{8}\\.?[0-9]{6}", "2014"), equalTo(payloads[index++])); } if (isHosted) { assertForbiddenPost(pathes); } } protected String readPayload(RubygemsFile file) { try { ByteArrayInputStream b = (ByteArrayInputStream) ((BytesStreamLocation) file.get()).openStream(); byte[] bb = new byte[b.available()]; b.read(bb); return new String(bb); } catch (IOException e) { throw new RuntimeException(e); } } protected RubygemsFile[] assertFiletypeWithPayload(String[] pathes, FileType type, Class payload) { RubygemsFile[] result = new RubygemsFile[pathes.length]; int index = 0; for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(payload))); assertThat(path, file.hasException(), is(false)); result[index++] = file; } if (type != FileType.GEM || !isHosted) { assertForbiddenPost(pathes); } return result; } protected void assertFiletypeWithNullPayload(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), nullValue()); assertThat(path, file.hasException(), is(false)); } if (!isHosted && type != FileType.NOT_FOUND) { assertForbiddenPost(pathes); } } protected void assertNotFound(String[] pathes) { assertFiletypeWithNullPayload(pathes, FileType.NOT_FOUND); } protected void assertForbiddenPost(String[] pathes) { for (String path : pathes) { assertThat(path, fileSystem.post(null, path).forbidden(), is(true)); } } protected void assertForbiddenGet(String[] pathes) { for (String path : pathes) { assertThat(path, fileSystem.get(path).forbidden(), is(true)); } } protected void assertNotExists(String[] pathes) { for (String path : pathes) { assertThat(path, fileSystem.post(null, path).notExists(), is(true)); } } } NoopDefaultLayoutTest.java000066400000000000000000000170561446701454400366110ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.junit.Test; import org.sonatype.sisu.litmus.testsupport.TestSupport; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; public class NoopDefaultLayoutTest extends TestSupport { private final DefaultRubygemsFileSystem bootstrap = new DefaultRubygemsFileSystem( new NoopDefaultLayout(null, null), null, null); @Test public void testSpecsZippedIndex() throws Exception { String[] pathes = { "/specs.4.8.gz", "/prerelease_specs.4.8.gz", "/latest_specs.4.8.gz" }; assertFiletype(pathes, FileType.SPECS_INDEX_ZIPPED); } @Test public void testSpecsIndex() throws Exception { String[] pathes = { "/specs.4.8", "/prerelease_specs.4.8", "/latest_specs.4.8" }; assertFiletype(pathes, FileType.SPECS_INDEX); } @Test public void testSha1() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/maven-metadata.xml.sha1", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha1", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.sha1", "/maven/prereleases/rubygems/jbundler/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sha1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha1" }; assertForbidden(pathes); } @Test public void testGemArtifact() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem" }; assertForbidden(pathes); } @Test public void testPom() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom" }; assertForbidden(pathes); } @Test public void testMavenMetadata() throws Exception { String[] pathes = { "/maven/releases/rubygems/jbundler/maven-metadata.xml", "/maven/prereleases/rubygems/jbundler/maven-metadata.xml" }; assertForbidden(pathes); } @Test public void testMavenMetadataSnapshot() throws Exception { String[] pathes = {"/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml"}; assertForbidden(pathes); } @Test public void testBundlerApi() throws Exception { String[] pathes = {"/api/v1/dependencies?gems=nexus,bundler"}; assertForbidden(pathes); } @Test public void testApiV1() throws Exception { String[] pathes = {"/api/v1/gems", "/api/v1/api_key"}; assertFiletype(pathes, FileType.API_V1); } @Test public void testDependency() throws Exception { String[] pathes = { "/api/v1/dependencies?gems=nexus", "/api/v1/dependencies/jbundler.ruby", "/api/v1/dependencies/b/bundler.ruby" }; assertFiletype(pathes, FileType.COMPACT); } @Test public void testGemspec() throws Exception { String[] pathes = {"/quick/Marshal.4.8/jbundler.gemspec.rz", "/quick/Marshal.4.8/b/bundler.gemspec.rz"}; assertFiletype(pathes, FileType.GEMSPEC); } @Test public void testGem() throws Exception { String[] pathes = {"/gems/jbundler.gem", "/gems/b/bundler.gem"}; assertFiletype(pathes, FileType.GEM); } @Test public void testDirectory() throws Exception { String[] pathes = { "/", "/api", "/api/", "/api/v1", "/api/v1/", "/api/v1/dependencies/", "/gems/", "/gems" }; assertForbidden(pathes); String[] mpathes = { "/maven/releases/rubygems/jbundler", "/maven/releases/rubygems/jbundler/1.2.3", "/maven/prereleases/rubygems/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT", }; assertFiletype(mpathes, FileType.DIRECTORY); } @Test public void testNoContent() throws Exception { String[] pathes = { "/api/v1/dependencies", "/api/v1/dependencies?gems=", }; assertFiletype(pathes, FileType.NO_CONTENT); } @Test public void testNotFound() throws Exception { String[] pathes = { "/asa", "/asa/", "/api/a", "/api/v1ds", "/api/v1/ds", "/api/v1/dependencies/jbundler.rubyz", "/api/v1/dependencies/b/bundler.rubyd", "/api/v1/dependencies/basd/bundler.ruby", "/quick/Marshal.4.8/jbundler.jrubyz", "/quick/Marshal.4.8/b/bundler.gemspec.rzd", "/quick/Marshal.4.8/basd/bundler.gemspec.rz", "/gems/jbundler.jrubyz", "/gems/b/bundler.gemsa", "/gems/basd/bundler.gem", "/maven/releasesss/rubygemsss/a", "/maven/releases/rubygemsss/jbundler", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gema", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom2", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.msa", "/maven/prereleases/rubygemsss/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1a", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sh1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gema", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom2", }; assertFiletype(pathes, FileType.NOT_FOUND); } protected void assertFiletype(String[] pathes, FileType type) { for (String path : pathes) { assertThat(path, bootstrap.get(path).type(), equalTo(type)); } } protected void assertForbidden(String[] pathes) { for (String path : pathes) { assertThat(path, bootstrap.get(path).forbidden(), is(true)); } } } ProxiesGETLayoutTest.java000066400000000000000000000443001446701454400363520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/java/org/torquebox/mojo/rubygems/layout/* * Sonatype Nexus (TM) Open Source Version * Copyright (c) 2008-present Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. * * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the * Eclipse Foundation. All other trademarks are the property of their respective owners. */ package org.torquebox.mojo.rubygems.layout; import org.apache.commons.io.FileUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.torquebox.mojo.rubygems.ApiV2File; import org.torquebox.mojo.rubygems.DependencyFile; import org.torquebox.mojo.rubygems.Directory; import org.torquebox.mojo.rubygems.FileType; import org.torquebox.mojo.rubygems.GemArtifactFile; import org.torquebox.mojo.rubygems.CompactInfoFile; import org.torquebox.mojo.rubygems.RubyScriptingTestSupport; import org.torquebox.mojo.rubygems.RubygemsFile; import org.torquebox.mojo.rubygems.cuba.DefaultRubygemsFileSystem; import org.torquebox.mojo.rubygems.layout.SimpleStorage.BytesStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLGzipStreamLocation; import org.torquebox.mojo.rubygems.layout.SimpleStorage.URLStreamLocation; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; @RunWith(Parameterized.class) public class ProxiesGETLayoutTest extends RubyScriptingTestSupport { private final DefaultRubygemsFileSystem fileSystem; private final boolean isProxy; public ProxiesGETLayoutTest(Storage store) { if (store instanceof CachingProxyStorage) { fileSystem = new DefaultRubygemsFileSystem(new ProxiedGETLayout(rubygemsGateway(), (CachingProxyStorage) store), null, null); isProxy = true; } else { fileSystem = new DefaultRubygemsFileSystem(new GETLayout(rubygemsGateway(), store) { @Override @Deprecated public DependencyFile dependencyFile(String name) { DependencyFile file = super.dependencyFile(name); store.retrieve(file); return file; } @Override public ApiV2File rubygemsInfoV2(String name, String version) { ApiV2File file = super.rubygemsInfoV2(name, version); store.retrieve(file); return file; } @Override public CompactInfoFile compactInfo(String name) { CompactInfoFile file = super.compactInfo(name); store.retrieve(file); return file; } }, null, null); isProxy = false; } } private static File proxyBase() throws IOException { File base = new File("target/proxies-get-proxy"); FileUtils.deleteDirectory(base); return base; } @Parameters public static Collection stores() throws IOException { return Arrays.asList(new Object[][]{{new SimpleStorage(new File("src/test/repo"))}, {new CachingProxyStorage(proxyBase(), new File("src/test/repo").toURI().toURL()) { protected URLStreamLocation toUrl(RubygemsFile file) throws MalformedURLException { return new URLStreamLocation(new URL(baseurl + file.storagePath().replace("?", "/"))); } }}}); } @Test public void testSpecsZippedIndex() throws Exception { String[] pathes = {"/specs.4.8.gz", "/prerelease_specs.4.8.gz", "/latest_specs.4.8.gz"}; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX_ZIPPED, URLStreamLocation.class); } @Test public void testSpecsUnzippedIndex() throws Exception { String[] pathes = {"/specs.4.8", "/prerelease_specs.4.8", "/latest_specs.4.8"}; assertFiletypeWithPayload(pathes, FileType.SPECS_INDEX, URLGzipStreamLocation.class); } @Test public void testSha1() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.gem.sha1", "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.pom.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.gem.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.pom.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem.sha1", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.pom.sha1" }; String[] shas = { "6fabc32da123f7013b2db804273df428a50bc6a4", "0e4ca1234356120dc03a58d922d75c3694e51486", "edfb9b1923514277b7256b0670a388da43706d39", "2a5b7fa349c165f5d32872e47934ba21f73afa4e", "edfb9b1923514277b7256b0670a388da43706d39", "b8eea5229c506c18d764debce625b70f0a9d474a" }; assertFiletypeWithPayload(pathes, FileType.SHA1, shas); // these files carry a timestamp of creation of the .ruby file pathes = new String[]{ "/maven/releases/rubygems/zip/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/psych/maven-metadata.xml.sha1", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT/maven-metadata.xml.sha1", "/maven/releases/rubygems/psych/maven-metadata.xml.sha1" }; assertFiletypeWithPayload(pathes, FileType.SHA1, BytesStreamLocation.class); } @Test public void testGemArtifact() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.gem", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.gem", "/maven/prereleases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1-123213123.gem" }; assertFiletypeWithPayload(pathes, FileType.GEM_ARTIFACT, URLStreamLocation.class); pathes = new String[]{ "/maven/releases/rubygems/hufflepuf/0.1.0/hufflepuf-0.1.0.gem", "/maven/releases/rubygems/hufflepuf/0.1.0/hufflepuf-0.2.0.gem" }; RubygemsFile[] result = assertFiletypeWithPayload(pathes, FileType.GEM_ARTIFACT, URLStreamLocation.class); for (RubygemsFile file : result) { GemArtifactFile a = (GemArtifactFile) file; assertThat(a.gem(null).filename(), is("hufflepuf-" + a.version() + "-universal-java-1.5")); } } @Test public void testPom() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/2.0.2/zip-2.0.2.pom", "/maven/releases/rubygems/psych/5.1.0.pre1/psych-5.1.0.pre1.pom", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT/psych-5.1.0.pre1-123213123.pom" }; String[] xmls = { loadPomResource("zip.pom"), loadPomResource("psych-release.pom"), loadPomResource("psych-prerelease.pom") }; assertFiletypeWithPayload(pathes, FileType.POM, xmls); } @Test public void testMavenMetadata() throws Exception { String[] pathes = { "/maven/releases/rubygems/zip/maven-metadata.xml", "/maven/releases/rubygems/psych/maven-metadata.xml", "/maven/prereleases/rubygems/psych/maven-metadata.xml" }; String[] xmls = { loadPomResource("zip-release-metadata.xml"), loadPomResource("psych-release-metadata.xml"), loadPomResource("psych-prerelease-metadata.xml") }; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA, xmls); } @Test public void testMavenMetadataSnapshot() throws Exception { String[] pathes = {"/maven/prereleases/rubygems/pre/0.1.0-SNAPSHOT/maven-metadata.xml"}; String[] xmls = {"\n" + " rubygems\n" + " pre\n" + " \n" + " \n" + " \n" + " 2014\n" + " 1\n" + " \n" + " 2014\n" + " \n" + " \n" + " gem\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " pom\n" + " 0.1.0-2014-1\n" + " 2014\n" + " \n" + " \n" + " \n" + " \n" + "\n"}; assertFiletypeWithPayload(pathes, FileType.MAVEN_METADATA_SNAPSHOT, xmls); } @Test public void testBundlerApi() throws Exception { String[] pathes = {"/api/v1/dependencies?gems=zip,psych"}; assertFiletypeWithPayload(pathes, FileType.BUNDLER_API, BytesStreamLocation.class); } @Test public void testApiV1Gems() throws Exception { String[] pathes = {"/api/v1/gems"}; assertForbidden(pathes); } @Test public void testApiV1ApiKey() throws Exception { String[] pathes = {"/api/v1/api_key"}; assertFiletypeWithNullPayload(pathes, FileType.API_V1); } @Test public void testGemspec() throws Exception { String[] pathes = {"/quick/Marshal.4.8/zip-2.0.2.gemspec.rz", "/quick/Marshal.4.8/z/zip-2.0.2.gemspec.rz"}; assertFiletypeWithPayload(pathes, FileType.GEMSPEC, URLStreamLocation.class); } @Test public void testGemspecCreated() throws Exception { util.resolveFile("target/proxy/quick/Marshal.4.8/m/my-0.1.0-java.gemspec.rz").delete(); String[] pathes = {"/quick/Marshal.4.8/my-0.1.0-java.gemspec.rz", "/quick/Marshal.4.8/m/my-0.1.0-java.gemspec.rz"}; if (isProxy) { assertFiletypeWithPayload(pathes, FileType.GEMSPEC, URLStreamLocation.class); } } @Test public void testGem() throws Exception { String[] pathes = {"/gems/psych-5.1.0.pre1-java.gem", "/gems/p/psych-5.1.0.pre1-java.gem"}; assertFiletypeWithPayload(pathes, FileType.GEM, URLStreamLocation.class); } @Test public void testDirectory() throws Exception { String[] pathes = { "/", "/api", "/api/", "/api/v1", "/api/v1/", "/gems/", "/gems", "/maven/releases/rubygems/zip", "/maven/releases/rubygems/zip/2.0.2", "/maven/prereleases/rubygems/psych", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT", "/maven/prereleases/rubygems/psych/5.1.0.pre1-SNAPSHOT", }; assertFiletypeWithNullPayload(pathes, FileType.DIRECTORY); assertDirectory("/", "api/", "quick/", "gems/", "maven/", "specs.4.8", "latest_specs.4.8", "prerelease_specs.4.8", "specs.4.8.gz", "latest_specs.4.8.gz", "prerelease_specs.4.8.gz"); assertDirectory("/api", "v1", "quick", "gems"); assertDirectory("/api/v1", "api_key", "dependencies"); assertDirectory("/api/quick", "Marshal.4.8"); assertDirectory("/api/quick/Marshal.4.8"); assertDirectory("/api/gems"); assertDirectory("/quick", "Marshal.4.8"); assertDirectory("/quick/Marshal.4.8"); assertDirectory("/maven", "prereleases", "releases"); assertDirectory("/maven/prereleases", "rubygems"); assertDirectory("/maven/prereleases/rubygems"); assertDirectory("/maven/releases", "rubygems"); assertDirectory("/maven/releases/rubygems"); assertDirectory("/maven/releases/rubygems/zip", "2.0.2", "maven-metadata.xml", "maven-metadata.xml.sha1"); assertDirectory("/maven/releases/rubygems/hufflepuf/0.1.0", "hufflepuf-0.1.0.pom", "hufflepuf-0.1.0.pom.sha1", "hufflepuf-0.1.0.gem", "hufflepuf-0.1.0.gem.sha1"); assertDirectory("/maven/releases/rubygems/hufflepuf/0.2.0", "hufflepuf-0.2.0.pom", "hufflepuf-0.2.0.pom.sha1", "hufflepuf-0.2.0.gem", "hufflepuf-0.2.0.gem.sha1"); assertDirectory("/maven/releases/rubygems/pre/0.1.0.beta", "pre-0.1.0.beta.pom", "pre-0.1.0.beta.pom.sha1", "pre-0.1.0.beta.gem", "pre-0.1.0.beta.gem.sha1"); assertDirectory("/maven/releases/rubygems/zip/2.0.2", "zip-2.0.2.pom", "zip-2.0.2.pom.sha1", "zip-2.0.2.gem", "zip-2.0.2.gem.sha1"); } private void assertDirectory(String path, String... items) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(FileType.DIRECTORY)); assertThat(path, file.get(), nullValue()); assertThat(path, file.hasException(), is(false)); assertThat(path, cleanupList(((Directory) file).getItems()), equalTo(cleanupList(items))); } protected List cleanupList(String... items) { List list = new LinkedList<>(); for (String item : items) { if (!item.startsWith("gems=")) { list.add(item); } } // normalize to cope with file-system listing order issues. Collections.sort(list); return list; } @Test public void testNoContent() throws Exception { String[] pathes = {"/api/v1/dependencies", "/api/v1/dependencies?gems=",}; assertFiletypeWithNullPayload(pathes, FileType.NO_CONTENT); } @Test public void testNotFound() throws Exception { String[] pathes = {"/asa", "/asa/", "/api/a", "/api/v1ds", "/api/v1/ds", "/api/v1/dependencies/jbundler.rubay", "/api/v1/dependencies/b/bundler.rubyd", "/api/v1/dependencies/basd/bundler.ruby", "/quick/Marshal.4.8/jbundler.rruubbyy", "/quick/Marshal.4.8/b/bundler.gemspec.rzd", "/quick/Marshal.4.8/basd/bundler.gemspec.rz", "/gems/jbundler.jssaonrz", "/gems/b/bundler.gemsa", "/gems/basd/bundler.gem", "/maven/releasesss/rubygemsss/a", "/maven/releases/rubygemsss/jbundler", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gema", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom2", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.gem.sha", "/maven/releases/rubygems/jbundler/1.2.3/jbundler-1.2.3.pom.msa", "/maven/prereleases/rubygemsss/jbundler", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/maven-metadata.xml.sha1a", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gem.sh1", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom.sha", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.gema", "/maven/prereleases/rubygems/jbundler/1.2.3-SNAPSHOT/jbundler-1.2.3-123213123.pom2",}; assertFiletypeWithNullPayload(pathes, FileType.NOT_FOUND); } protected void assertFiletype(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), notNullValue()); assertThat(path, file.hasException(), is(false)); } } protected void assertFiletypeWithPayload(String[] pathes, FileType type, String[] payloads) { int index = 0; for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(BytesStreamLocation.class))); assertThat(path, file.hasException(), is(false)); assertThat(path, readPayload(file).replaceAll("[0-9]{8}\\.?[0-9]{6}", "2014"), equalTo(payloads[index++])); } } protected String readPayload(RubygemsFile file) { try { ByteArrayInputStream b = (ByteArrayInputStream) ((BytesStreamLocation) file.get()).openStream(); byte[] bb = new byte[b.available()]; b.read(bb); return new String(bb); } catch (IOException e) { throw new RuntimeException(e); } } protected RubygemsFile[] assertFiletypeWithPayload(String[] pathes, FileType type, Class payload) { RubygemsFile[] result = new RubygemsFile[pathes.length]; int index = 0; for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), is(instanceOf(payload))); assertThat(path, file.hasException(), is(false)); result[index++] = file; } return result; } protected void assertFiletypeWithNullPayload(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.get(), nullValue()); assertThat(path, file.hasException(), is(false)); } } protected void assertIOException(String[] pathes, FileType type) { for (String path : pathes) { RubygemsFile file = fileSystem.get(path); assertThat(path, file.type(), equalTo(type)); assertThat(path, file.getException(), is(instanceOf(IOException.class))); } } protected void assertForbidden(String[] pathes) { for (String path : pathes) { assertThat(path, fileSystem.get(path).forbidden(), is(true)); } } } mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/000077500000000000000000000000001446701454400236525ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/dependency_data_spec.rb000066400000000000000000000302751446701454400303270ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'minitest/autorun' require 'nexus/dependency_data_impl' describe Nexus::DependencyDataImpl do Nexus::VERSIONS = [{:number=>"1.0.0", :platform=>"x86-mswin32-60"}, {:number=>"1.0.0", :platform=>"ruby"}, {:number=>"1.0.1", :platform=>"ruby"}, {:number=>"1.0.2", :platform=>"ruby"}, {:number=>"1.0.3", :platform=>"ruby"}, {:number=>"1.0.3", :platform=>"x86-mswin32-60"}, {:number=>"1.0.4", :platform=>"x86-mswin32-60"}, {:number=>"1.0.4", :platform=>"ruby"}, {:number=>"1.0.5", :platform=>"x86-mswin32-60"}, {:number=>"1.0.5", :platform=>"ruby"}, {:number=>"1.0.6", :platform=>"x86-mswin32-60"}, {:number=>"1.0.6", :platform=>"ruby"}, {:number=>"1.0.7", :platform=>"ruby"}, {:number=>"1.0.7", :platform=>"x86-mswin32-60"}, {:number=>"1.1.0", :platform=>"ruby"}, {:number=>"1.1.0", :platform=>"x86-mswin32-60"}, {:number=>"1.1.1", :platform=>"x86-mswin32-60"}, {:number=>"1.1.1", :platform=>"java"}, {:number=>"1.1.1", :platform=>"ruby"}, {:number=>"1.2.0", :platform=>"x86-mswin32-60"}, {:number=>"1.2.0", :platform=>"java"}, {:number=>"1.2.0", :platform=>"ruby"}, {:number=>"1.2.1", :platform=>"java"}, {:number=>"1.2.1", :platform=>"ruby"}, {:number=>"1.2.1", :platform=>"x86-mswin32-60"}, {:number=>"1.2.2", :platform=>"java"}, {:number=>"1.2.2", :platform=>"x86-mswin32-60"}, {:number=>"1.2.2", :platform=>"ruby"}, {:number=>"1.2.3", :platform=>"ruby"}, {:number=>"1.2.3", :platform=>"java"}, {:number=>"1.2.3", :platform=>"x86-mswin32-60"}, {:number=>"1.3.0", :platform=>"java"}, {:number=>"1.3.0", :platform=>"x86-mswin32"}, {:number=>"1.3.0", :platform=>"ruby"}, {:number=>"1.3.0", :platform=>"x86-mingw32"}, {:number=>"1.3.1", :platform=>"ruby"}, {:number=>"1.3.1", :platform=>"x86-mingw32"}, {:number=>"1.3.1", :platform=>"java"}, {:number=>"1.3.1", :platform=>"x86-mswin32"}, {:number=>"1.3.2", :platform=>"x86-mingw32"}, {:number=>"1.3.2", :platform=>"java"}, {:number=>"1.3.2", :platform=>"x86-mswin32"}, {:number=>"1.3.2", :platform=>"ruby"}, {:number=>"1.3.3", :platform=>"x86-mingw32"}, {:number=>"1.3.3", :platform=>"java"}, {:number=>"1.3.3", :platform=>"ruby"}, {:number=>"1.3.3", :platform=>"x86-mswin32"}, {:number=>"1.4.0", :platform=>"ruby"}, {:number=>"1.4.0", :platform=>"java"}, {:number=>"1.4.0", :platform=>"x86-mswin32"}, {:number=>"1.4.0", :platform=>"x86-mingw32"}, {:number=>"1.4.1", :platform=>"x86-mingw32"}, {:number=>"1.4.1", :platform=>"ruby"}, {:number=>"1.4.1", :platform=>"java"}, {:number=>"1.4.1", :platform=>"x86-mswin32"}, {:number=>"1.4.2", :platform=>"ruby"}, {:number=>"1.4.2", :platform=>"java"}, {:number=>"1.4.2.1", :platform=>"x86-mswin32"}, {:number=>"1.4.2.1", :platform=>"x86-mingw32"}, {:number=>"1.4.3", :platform=>"x86-mingw32"}, {:number=>"1.4.3", :platform=>"ruby"}, {:number=>"1.4.3", :platform=>"x86-mswin32"}, {:number=>"1.4.3", :platform=>"java"}, {:number=>"1.4.3.1", :platform=>"java"}, {:number=>"1.4.3.1", :platform=>"x86-mswin32"}, {:number=>"1.4.3.1", :platform=>"ruby"}, {:number=>"1.4.3.1", :platform=>"x86-mingw32"}, {:number=>"1.4.4", :platform=>"x86-mswin32"}, {:number=>"1.4.4", :platform=>"ruby"}, {:number=>"1.4.4", :platform=>"x86-mingw32"}, {:number=>"1.4.4", :platform=>"java"}, {:number=>"1.4.4.1", :platform=>"x86-mswin32"}, {:number=>"1.4.4.1", :platform=>"x86-mingw32"}, {:number=>"1.4.4.2", :platform=>"java"}, {:number=>"1.4.5", :platform=>"x86-mingw32"}, {:number=>"1.4.5", :platform=>"ruby"}, {:number=>"1.4.5", :platform=>"x86-mswin32-60"}, {:number=>"1.4.5", :platform=>"java"}, {:number=>"1.4.6", :platform=>"ruby"}, {:number=>"1.4.6", :platform=>"x86-mswin32-60"}, {:number=>"1.4.6", :platform=>"x86-mingw32"}, {:number=>"1.4.6", :platform=>"java"}, {:number=>"1.4.7", :platform=>"ruby"}, {:number=>"1.4.7", :platform=>"x86-mingw32"}, {:number=>"1.4.7", :platform=>"x86-mswin32-60"}, {:number=>"1.4.7", :platform=>"java"}, {:number=>"1.5.0", :platform=>"x86-mswin32-60"}, {:number=>"1.5.0", :platform=>"ruby"}, {:number=>"1.5.0", :platform=>"x86-mingw32"}, {:number=>"1.5.0", :platform=>"java"}, {:number=>"1.5.0.beta.1", :platform=>"java"}, {:number=>"1.5.0.beta.1", :platform=>"ruby"}, {:number=>"1.5.0.beta.2", :platform=>"java"}, {:number=>"1.5.0.beta.2", :platform=>"ruby"}, {:number=>"1.5.0.beta.3", :platform=>"java"}, {:number=>"1.5.0.beta.3", :platform=>"ruby"}, {:number=>"1.5.0.beta.4", :platform=>"java"}, {:number=>"1.5.0.beta.4", :platform=>"ruby"}, {:number=>"1.5.1", :platform=>"x86-mswin32-60"}, {:number=>"1.5.1", :platform=>"java"}, {:number=>"1.5.1", :platform=>"ruby"}, {:number=>"1.5.1", :platform=>"x86-mingw32"}, {:number=>"1.5.1.rc1", :platform=>"x86-mingw32"}, {:number=>"1.5.1.rc1", :platform=>"x86-mswin32-60"}, {:number=>"1.5.1.rc1", :platform=>"java"}, {:number=>"1.5.1.rc1", :platform=>"ruby"}, {:number=>"1.5.10", :platform=>"x86-mingw32"}, {:number=>"1.5.10", :platform=>"x86-mswin32-60"}, {:number=>"1.5.10", :platform=>"java"}, {:number=>"1.5.10", :platform=>"ruby"}, {:number=>"1.5.11", :platform=>"x86-mswin32-60"}, {:number=>"1.5.11", :platform=>"java"}, {:number=>"1.5.11", :platform=>"x86-mingw32"}, {:number=>"1.5.11", :platform=>"ruby"}, {:number=>"1.5.2", :platform=>"ruby"}, {:number=>"1.5.2", :platform=>"java"}, {:number=>"1.5.2", :platform=>"x86-mswin32-60"}, {:number=>"1.5.2", :platform=>"x86-mingw32"}, {:number=>"1.5.3", :platform=>"ruby"}, {:number=>"1.5.3", :platform=>"java"}, {:number=>"1.5.3", :platform=>"x86-mingw32"}, {:number=>"1.5.3", :platform=>"x86-mswin32-60"}, {:number=>"1.5.3.rc2", :platform=>"java"}, {:number=>"1.5.3.rc2", :platform=>"ruby"}, {:number=>"1.5.3.rc2", :platform=>"x86-mswin32-60"}, {:number=>"1.5.3.rc2", :platform=>"x86-mingw32"}, {:number=>"1.5.3.rc3", :platform=>"x86-mingw32"}, {:number=>"1.5.3.rc3", :platform=>"java"}, {:number=>"1.5.3.rc3", :platform=>"ruby"}, {:number=>"1.5.3.rc3", :platform=>"x86-mswin32-60"}, {:number=>"1.5.3.rc4", :platform=>"x86-mingw32"}, {:number=>"1.5.3.rc4", :platform=>"java"}, {:number=>"1.5.3.rc4", :platform=>"ruby"}, {:number=>"1.5.3.rc4", :platform=>"x86-mswin32-60"}, {:number=>"1.5.3.rc5", :platform=>"java"}, {:number=>"1.5.3.rc5", :platform=>"x86-mingw32"}, {:number=>"1.5.3.rc5", :platform=>"ruby"}, {:number=>"1.5.3.rc5", :platform=>"x86-mswin32-60"}, {:number=>"1.5.3.rc6", :platform=>"x86-mswin32-60"}, {:number=>"1.5.3.rc6", :platform=>"x86-mingw32"}, {:number=>"1.5.3.rc6", :platform=>"ruby"}, {:number=>"1.5.3.rc6", :platform=>"java"}, {:number=>"1.5.4", :platform=>"x86-mingw32"}, {:number=>"1.5.4", :platform=>"x86-mswin32-60"}, {:number=>"1.5.4", :platform=>"java"}, {:number=>"1.5.4", :platform=>"ruby"}, {:number=>"1.5.4.rc1", :platform=>"x86-mingw32"}, {:number=>"1.5.4.rc1", :platform=>"java"}, {:number=>"1.5.4.rc1", :platform=>"x86-mswin32-60"}, {:number=>"1.5.4.rc1", :platform=>"ruby"}, {:number=>"1.5.4.rc2", :platform=>"ruby"}, {:number=>"1.5.4.rc2", :platform=>"x86-mswin32-60"}, {:number=>"1.5.4.rc2", :platform=>"java"}, {:number=>"1.5.4.rc2", :platform=>"x86-mingw32"}, {:number=>"1.5.4.rc3", :platform=>"x86-mswin32-60"}, {:number=>"1.5.4.rc3", :platform=>"ruby"}, {:number=>"1.5.4.rc3", :platform=>"x86-mingw32"}, {:number=>"1.5.4.rc3", :platform=>"java"}, {:number=>"1.5.5", :platform=>"ruby"}, {:number=>"1.5.5", :platform=>"x86-mingw32"}, {:number=>"1.5.5", :platform=>"x86-mswin32-60"}, {:number=>"1.5.5", :platform=>"java"}, {:number=>"1.5.5.rc1", :platform=>"x86-mswin32-60"}, {:number=>"1.5.5.rc1", :platform=>"java"}, {:number=>"1.5.5.rc1", :platform=>"ruby"}, {:number=>"1.5.5.rc1", :platform=>"x86-mingw32"}, {:number=>"1.5.5.rc2", :platform=>"x86-mswin32-60"}, {:number=>"1.5.5.rc2", :platform=>"ruby"}, {:number=>"1.5.5.rc2", :platform=>"java"}, {:number=>"1.5.5.rc2", :platform=>"x86-mingw32"}, {:number=>"1.5.5.rc3", :platform=>"x86-mswin32-60"}, {:number=>"1.5.5.rc3", :platform=>"ruby"}, {:number=>"1.5.5.rc3", :platform=>"x86-mingw32"}, {:number=>"1.5.5.rc3", :platform=>"java"}, {:number=>"1.5.6", :platform=>"x86-mingw32"}, {:number=>"1.5.6", :platform=>"java"}, {:number=>"1.5.6", :platform=>"ruby"}, {:number=>"1.5.6", :platform=>"x86-mswin32-60"}, {:number=>"1.5.6.rc1", :platform=>"java"}, {:number=>"1.5.6.rc1", :platform=>"ruby"}, {:number=>"1.5.6.rc2", :platform=>"java"}, {:number=>"1.5.6.rc2", :platform=>"x86-mswin32-60"}, {:number=>"1.5.6.rc2", :platform=>"x86-mingw32"}, {:number=>"1.5.6.rc2", :platform=>"ruby"}, {:number=>"1.5.6.rc3", :platform=>"ruby"}, {:number=>"1.5.6.rc3", :platform=>"x86-mswin32-60"}, {:number=>"1.5.6.rc3", :platform=>"java"}, {:number=>"1.5.6.rc3", :platform=>"x86-mingw32"}, {:number=>"1.5.7", :platform=>"java"}, {:number=>"1.5.7", :platform=>"ruby"}, {:number=>"1.5.7", :platform=>"x86-mingw32"}, {:number=>"1.5.7", :platform=>"x86-mswin32-60"}, {:number=>"1.5.7.rc1", :platform=>"ruby"}, {:number=>"1.5.7.rc1", :platform=>"x86-mswin32-60"}, {:number=>"1.5.7.rc1", :platform=>"x86-mingw32"}, {:number=>"1.5.7.rc1", :platform=>"java"}, {:number=>"1.5.7.rc2", :platform=>"x86-mswin32-60"}, {:number=>"1.5.7.rc2", :platform=>"x86-mingw32"}, {:number=>"1.5.7.rc2", :platform=>"ruby"}, {:number=>"1.5.7.rc2", :platform=>"java"}, {:number=>"1.5.7.rc3", :platform=>"java"}, {:number=>"1.5.7.rc3", :platform=>"x86-mswin32-60"}, {:number=>"1.5.7.rc3", :platform=>"x86-mingw32"}, {:number=>"1.5.7.rc3", :platform=>"ruby"}, {:number=>"1.5.8", :platform=>"x86-mswin32-60"}, {:number=>"1.5.8", :platform=>"java"}, {:number=>"1.5.8", :platform=>"x86-mingw32"}, {:number=>"1.5.8", :platform=>"ruby"}, {:number=>"1.5.9", :platform=>"java"}, {:number=>"1.5.9", :platform=>"x86-mingw32"}, {:number=>"1.5.9", :platform=>"x86-mswin32-60"}, {:number=>"1.5.9", :platform=>"ruby"}, {:number=>"1.6.0", :platform=>"ruby"}, {:number=>"1.6.0", :platform=>"java"}, {:number=>"1.6.0", :platform=>"x86-mingw32"}, {:number=>"1.6.0", :platform=>"x86-mswin32-60"}, {:number=>"1.6.0.rc1", :platform=>"ruby"}, {:number=>"1.6.1", :platform=>"x86-mswin32-60"}, {:number=>"1.6.1", :platform=>"x86-mingw32"}, {:number=>"1.6.1", :platform=>"ruby"}, {:number=>"1.6.1", :platform=>"java"}, {:number=>"1.6.2.rc1", :platform=>"x86-mingw32"}, {:number=>"1.6.2.rc1", :platform=>"ruby"}, {:number=>"1.6.2.rc1", :platform=>"x64-mingw32"}, {:number=>"1.6.2.rc1", :platform=>"java"}, {:number=>"1.6.2.rc2", :platform=>"ruby"}, {:number=>"1.6.2.rc2", :platform=>"java"}, {:number=>"1.6.2.rc2", :platform=>"x64-mingw32"}, {:number=>"1.6.2.rc2", :platform=>"x86-mingw32"}, {:number=>"9.9.7", :platform=>"universal-java"}, {:number=>"9.9.7", :platform=>"univeral-ruby"}, {:number=>"9.9.8", :platform=>"universal-jruby"}, {:number=>"9.9.9", :platform=>"jruby"}] subject do Nexus::DependencyDataImpl.new( Nexus::VERSIONS, 'nokogiri', 123 ) end it 'has a name and modified' do subject.name.must_equal 'nokogiri' subject.modified.must_equal 123 end it 'retrieves the java platform' do subject.platform( '1.5.11' ).must_equal 'java' subject.platform( '9.9.9' ).must_equal 'jruby' subject.platform( '9.9.8' ).must_equal 'universal-jruby' subject.platform( '9.9.7' ).must_equal 'universal-java' subject.platform( '1.0.0' ).must_equal 'ruby' end it 'separates preleases and releases versions' do pre = subject.versions( true ) re = subject.versions( false ) ( pre - re ).must_equal pre ( re - pre ).must_equal re pre.empty?.wont_be_nil re.empty?.wont_be_nil pre.each { |d| d.must_match /[a-zA-Z]/ } re.each { |d| d.must_match /^[0-9.]+$/ } end it 'has no releases' do deps = Nexus::DependencyDataImpl.new( [{:name=>"pre", :number=>"0.1.0.beta", :platform=>"ruby", :dependencies=>[]}], 'pre', 321 ) deps.modified.must_equal 321 deps.name.must_equal 'pre' deps.versions( false ).must_equal [] deps.versions( true ).must_equal ["0.1.0.beta"] end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/dependency_helper_spec.rb000066400000000000000000000102111446701454400306610ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/dependency_helper_impl' require 'minitest/spec' require 'minitest/autorun' require 'stringio' describe Nexus::DependencyHelperImpl do let( :a ) { [ {:name=>"jbundler", :number=>"0.5.5", :platform=>"ruby", :dependencies=>[["bundler", "~> 1.5"], ["ruby-maven", "< 3.1.2, >= 3.1.1.0.1"]]}, {:name=>"jbundler", :number=>"0.5.4", :platform=>"ruby", :dependencies=>[["bundler", "~> 1.2"], ["ruby-maven", "< 3.1.2, >= 3.1.1.0.1"]]}, {:name=>"jbundler", :number=>"0.5.3", :platform=>"ruby", :dependencies=>[["bundler", "~> 1.2"], ["ruby-maven", "< 3.1.1, >= 3.1.0.0.1"]]} ] } let( :aa ) { [ {:name=>"jbundler", :number=>"0.5.5", :platform=>"ruby", :dependencies=>[["bundler", "~> 1.5"]] }] } let( :b ) { [ {:name=>"bundler", :number=>"1.6.0.rc2", :platform=>"ruby", :dependencies=>[]}, {:name=>"bundler", :number=>"1.6.0.rc", :platform=>"ruby", :dependencies=>[]} ] } subject { Nexus::DependencyHelperImpl.new } it 'should merge dependencies' do subject.add( subject.marshal_dump( b ) ) subject.add( subject.marshal_dump( a ) ) begin is = subject.input_stream( false ) subject.marshal_load( is ).must_equal b + a ensure is.close if is end subject.gemnames.must_equal ["bundler", "jbundler"] subject.marshal_load( subject.input_stream_of( "bundler" ) ).must_equal b subject.marshal_load( subject.input_stream_of( "jbundler" ) ).must_equal a end it 'should merge dependencies with duplicates' do subject.add( subject.marshal_dump( b ) ) subject.add( subject.marshal_dump( aa ) ) subject.add( subject.marshal_dump( a ) ) begin is = subject.input_stream( false ) subject.marshal_load( is ).must_equal b + aa + a ensure is.close if is end subject.gemnames.must_equal ["bundler", "jbundler"] subject.marshal_load( subject.input_stream_of( "bundler" ) ).must_equal b subject.marshal_load( subject.input_stream_of( "jbundler" ) ).must_equal aa + a end it 'should merge dependencies without duplicates' do subject.add( subject.marshal_dump( b ) ) subject.add( subject.marshal_dump( a ) ) subject.add( subject.marshal_dump( aa ) ) begin is = subject.input_stream( true ) subject.marshal_load( is ).must_equal b + a ensure is.close if is end subject.gemnames.must_equal ["bundler", "jbundler"] subject.marshal_load( subject.input_stream_of( "bundler" ) ).must_equal b # duplicates are not eliminated here subject.marshal_load( subject.input_stream_of( "jbundler" ) ).must_equal a + aa end it 'should merge dependencies from gemspec.rz files' do dir = File.join( File.dirname( __FILE__ ), '../repo/quick/Marshal.4.8/h' ) Dir[ File.join( dir, '*rz' ) ].each do |f| subject.add_gemspec( f ) end begin is = subject.input_stream( false ) subject.marshal_load( is ).sort{ |n,m| "#{n[:name]}-#{n[:number]}-#{n[:platform]}" <=> "#{m[:name]}-#{m[:number]}-#{m[:platform]}" }.must_equal [{:name=>"hufflepuf", :number=>"0.1.0", :platform=>"ruby", :dependencies=>[]}, {:name=>"hufflepuf", :number=>"0.1.0", :platform=>"universal-java-1.5", :dependencies=>[]}, {:name=>"hufflepuf", :number=>"0.2.0", :platform=>"universal-java-1.5", :dependencies=>[]}, {:name=>"hufflepuf", :number=>"0.2.0", :platform=>"x86-mswin32-60", :dependencies=>[]}, ] ensure is.close if is end subject.gemnames.must_equal ["hufflepuf"] end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/gemspec_helper_spec.rb000066400000000000000000000046451446701454400302040ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/gemspec_helper_impl' require 'minitest/spec' require 'minitest/autorun' describe Nexus::GemspecHelperImpl do let( :dir ) { File.dirname( __FILE__ ) } describe :gem do subject do file = File.join( dir, '../repo/gems/h/hufflepuf-0.1.0-universal-java-1.5.gem' ) Nexus::GemspecHelperImpl.from_gem( file ) end it 'has the correct metadata' do subject.name.must_equal 'hufflepuf' subject.filename.must_equal 'hufflepuf-0.1.0-universal-java-1.5.gem' subject.pom( false ).must_equal File.read( File.join( dir, 'hufflepuf.pom' ) ).gsub( /^.*/m, '' ) subject.pom( true ).must_equal File.read( File.join( dir, 'hufflepuf.pom' ) ).gsub( /^.*/m, '' ) subject.gemspec.class.must_equal Gem::Specification subject.gemspec.must_equal subject.runzip( subject.rz_input_stream ) end end describe :gemspec do subject do file = File.join( dir, '../repo/quick/Marshal.4.8/p/psych-5.1.0.pre1-java.gemspec.rz' ) Nexus::GemspecHelperImpl.from_gemspec_rz( file ) end it 'has the correct metadata' do subject.name.must_equal 'psych' subject.filename.must_equal 'psych-5.1.0.pre1-java.gem' subject.gemspec.class.must_equal Gem::Specification subject.gemspec.must_equal subject.runzip( subject.rz_input_stream ) end it 'creates snapshot poms and non-snaphost poms' do subject.pom( false ).must_equal File.read( File.join( dir, 'psych-release.pom' ) ).gsub( /^.*/m, '' ) subject.pom( true ).must_equal File.read( File.join( dir, 'psych-prerelease.pom' ) ).gsub( /^.*/m, '' ) end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/hufflepuf.pom000066400000000000000000000043441446701454400263600ustar00rootroot00000000000000 4.0.0 rubygems hufflepuf 0.1.0 gem Commands to interact with nexus server Adds a command to RubyGems for uploading gems to a nexus server. Christian Meier m.kristian@web.de utf-8 3.0.0 2.0.0 org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} hufflepuf-0.1.0-universal-java-1.5.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/merge_specs_helper_spec.rb000066400000000000000000000040471446701454400310510ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/merge_specs_helper_impl' require 'minitest/spec' require 'minitest/autorun' require 'stringio' describe Nexus::MergeSpecsHelperImpl do # just create it the same as the java app would do it subject { Nexus::MergeSpecsHelperImpl.new } let( :a1java ) { [ 'a', '1', 'java' ] } let( :a2java ) { [ 'a', '2', 'java' ] } let( :a1 ) { ['a', '1', 'ruby' ] } let( :a2 ) { ['a', '2', 'ruby' ] } let( :b4 ) { ['b', '4', 'ruby' ] } let( :nothing ) do tmp = File.join( 'target', 'merge_nothing' ) File.open( tmp, 'w' ){ |f| f.print Marshal.dump( [ a1java, a2, b4 ] ) } tmp end let( :something ) do tmp = File.join( 'target', 'merge_something' ) File.open( tmp, 'w' ){ |f| f.print Marshal.dump( [ a2java, a2, a1 ] ) } tmp end it 'should merge nothing' do subject.add( nothing ) subject.marshal_load( subject.input_stream( false ) ).must_equal [ a1java, a2, b4 ] end it 'should merge something' do subject.add( nothing ) subject.add( something ) subject.marshal_load( subject.input_stream( false ) ).must_equal [ a1java, a1, a2java, a2, b4 ] end it 'should merge something latest' do subject.add( nothing ) subject.add( something ) subject.marshal_load( subject.input_stream( true ) ).must_equal [ a2java, a2, b4 ] end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/psych-prerelease.pom000066400000000000000000000043471446701454400276520ustar00rootroot00000000000000 4.0.0 rubygems psych 5.1.0.pre1-SNAPSHOT gem Psych is a YAML parser and emitter https://github.com/ruby/psych Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. Aaron Patterson aaron@tenderlovemaking.com SHIBATA Hiroshi hsbt@ruby-lang.org Charles Oliver Nutter headius@headius.com https://github.com/ruby/psych.git https://github.com/ruby/psych utf-8 3.0.0 2.0.0 rubygems jar-dependencies [0.1.7,) gem org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} psych-5.1.0.pre1-java.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/psych-release.pom000066400000000000000000000043361446701454400271410ustar00rootroot00000000000000 4.0.0 rubygems psych 5.1.0.pre1 gem Psych is a YAML parser and emitter https://github.com/ruby/psych Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. Aaron Patterson aaron@tenderlovemaking.com SHIBATA Hiroshi hsbt@ruby-lang.org Charles Oliver Nutter headius@headius.com https://github.com/ruby/psych.git https://github.com/ruby/psych utf-8 3.0.0 2.0.0 rubygems jar-dependencies [0.1.7,) gem org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} psych-5.1.0.pre1-java.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/minispecs/rubygems_helper_spec.rb000066400000000000000000000031651446701454400304120ustar00rootroot00000000000000# # Sonatype Nexus (TM) Open Source Version # Copyright (c) 2008-present Sonatype, Inc. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. # # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. # # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the # Eclipse Foundation. All other trademarks are the property of their respective owners. # require 'nexus/rubygems_helper' require 'minitest/spec' require 'minitest/autorun' require 'stringio' class RGH include Nexus::RubygemsHelper end describe Nexus::RubygemsHelper do subject { RGH.new } let( :a1java ) { [ 'a', '1', 'java' ] } let( :a2java ) { [ 'a', '2', 'java' ] } let( :a1 ) { ['a', '1', 'ruby' ] } let( :a2 ) { ['a', '2', 'ruby' ] } let( :b4 ) { ['b', '4', 'ruby' ] } it 'should take the latest version' do specs = [ a2, b4, a1 ] subject.regenerate_latest( specs ).must_equal [ a2, b4 ] end it 'should take the latest version per platform' do specs = [ a1java, a2java, a2, b4 ] subject.regenerate_latest( specs ).sort.must_equal [ a2java, a2, b4 ] end it 'should take the latest version one per platform' do specs = [ a1java, a1, a2, b4 ] subject.regenerate_latest( specs ).must_equal [ a1java, a2, b4 ] end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/000077500000000000000000000000001446701454400226255ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/000077500000000000000000000000001446701454400233765ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v1/000077500000000000000000000000001446701454400237245ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v1/dependencies/000077500000000000000000000000001446701454400263525ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v1/dependencies/psych+zip.gems000066400000000000000000000050361446701454400311570ustar00rootroot00000000000000[>{ : nameI" psych:ET: number" 1.1.0: platformI" ruby;T:dependencies[{ ;@;" 1.1.1;I" ruby;T; [{ ;@;" 1.2.0;I" ruby;T; [{ ;@;" 1.2.1;I" ruby;T; [{ ;@;" 1.2.2;I" ruby;T; [{ ;@;" 1.3.0;I" ruby;T; [{ ;@;" 1.3.1;I" ruby;T; [{ ;@;" 1.3.2;I" ruby;T; [{ ;@;" 1.3.3;I" ruby;T; [{ ;@;" 1.3.4;I" ruby;T; [{ ;@;" 2.0.0;I" ruby;T; [{ ;@;" 2.0.1;I" ruby;T; [{ ;@;" 2.0.2;I" ruby;T; [{ ;@;" 2.0.3;I" ruby;T; [{ ;@;" 2.0.4;I" ruby;T; [{ ;@;" 2.0.5;I" ruby;T; [{ ;@;" 2.0.6;I" ruby;T; [{ ;@;" 2.0.7;I" ruby;T; [{ ;@;" 2.0.8;I" ruby;T; [{ ;@;" 2.0.9;I" ruby;T; [{ ;@;" 2.0.10;I" ruby;T; [{ ;@;" 2.0.11;I" ruby;T; [{ ;@;" 2.0.12;I" ruby;T; [{ ;@;" 2.0.13;I" ruby;T; [{ ;@;" 2.0.14;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.0.15;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.0.16;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.0.17;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.1.0;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.1.1;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.2.0;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.2.1;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.2.2;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.2.3;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 2.2.4;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 3.0.2;" java; [{ ;@;" 3.0.3;" java; [{ ;@;" 3.1.0;" java; [{ ;@;" 3.2.0;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 3.2.1;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 3.3.0;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 3.3.1;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 3.3.2;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 3.3.3;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 3.3.4;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 4.0.0;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 4.0.1;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 4.0.2;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 4.0.3;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 4.0.4;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 4.0.5;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 4.0.6;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 5.0.0;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 5.0.1;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 5.0.2;" java; [["jar-dependencies" >= 0.1.7{ ;@;" 5.1.0;" java; [["jar-dependencies" >= 0.1.7{ ;I"zip;T;@8;I" ruby;T; [mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/000077500000000000000000000000001446701454400237255ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/rubygems/000077500000000000000000000000001446701454400255625ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/rubygems/psych/000077500000000000000000000000001446701454400267105ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/rubygems/psych/versions/000077500000000000000000000000001446701454400305605ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/rubygems/psych/versions/5.1.0.pre1.json000066400000000000000000000031751446701454400327700ustar00rootroot00000000000000{"name":"psych","downloads":38331095,"version":"5.1.0.pre1","version_created_at":"2023-01-26T16:14:29.241Z","version_downloads":184,"platform":"ruby","authors":"Aaron Patterson, SHIBATA Hiroshi, Charles Oliver Nutter","info":"Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]\nfor its YAML parsing and emitting capabilities. In addition to wrapping libyaml,\nPsych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format.\n","licenses":["MIT"],"metadata":{"msys2_mingw_dependencies":"libyaml"},"yanked":false,"sha":"b7b470045ad149ea48272b532d414b8ca01fcf60407e500bae7f7dd0b293180c","project_uri":"https://rubygems.org/gems/psych","gem_uri":"https://rubygems.org/gems/psych-5.1.0.pre1.gem","homepage_uri":"https://github.com/ruby/psych","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/psych/5.1.0.pre1","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[],"runtime":[{"name":"stringio","requirements":"\u003e= 0"}]},"built_at":"2023-01-26T00:00:00.000Z","created_at":"2023-01-26T16:14:29.241Z","description":"Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]\nfor its YAML parsing and emitting capabilities. In addition to wrapping libyaml,\nPsych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format.\n","downloads_count":184,"number":"5.1.0.pre1","summary":"Psych is a YAML parser and emitter","rubygems_version":"\u003e= 0","ruby_version":"\u003e= 2.4.0","prerelease":true,"requirements":[]}mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/rubygems/zip/000077500000000000000000000000001446701454400263645ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/rubygems/zip/versions/000077500000000000000000000000001446701454400302345ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/api/v2/rubygems/zip/versions/2.0.2.json000066400000000000000000000023431446701454400315700ustar00rootroot00000000000000{"name":"zip","downloads":3206554,"version":"2.0.2","version_created_at":"2010-05-26T12:27:58.237Z","version_downloads":3206553,"platform":"ruby","authors":"Postmodern, Thomas Sondergaard, Sam Lown","info":"zip is a Ruby library for reading and writing Zip files. Unlike the official rubyzip, zip is compatible with Ruby 1.9.1.","licenses":null,"metadata":{},"yanked":false,"sha":"a129a9c8977c9a1f3600593ead89d085ad171e8d3fa91e647d80b04b294ec0a5","project_uri":"https://rubygems.org/gems/zip","gem_uri":"https://rubygems.org/gems/zip-2.0.2.gem","homepage_uri":"http://github.com/postmodern/rubyzip2","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/zip/2.0.2","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[],"runtime":[]},"built_at":"2010-05-25T22:00:00.000Z","created_at":"2010-05-26T12:27:58.237Z","description":"zip is a Ruby library for reading and writing Zip files. Unlike the official rubyzip, zip is compatible with Ruby 1.9.1.","downloads_count":3206553,"number":"2.0.2","summary":"zip is a Ruby library for reading and writing Zip files","rubygems_version":"\u003e= 0","ruby_version":null,"prerelease":false,"requirements":null}mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/000077500000000000000000000000001446701454400235605ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/h/000077500000000000000000000000001446701454400240075ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/h/hufflepuf-0.1.0-universal-java-1.5.gem000066400000000000000000000100001446701454400323340ustar00rootroot00000000000000metadata.gz0000444000000000000000000000071700000000000013404 0ustar00wheelwheel00000000000000 0YSSM0 W쩥3.@=pH@rw&)I;+ihώZUs:twdHN`GGG^=PLbԛQӈi=>`(bҪ!rʌ>S,QJP{Q|[3 ߾+Yf]A孛ӂDޒ7Li d"Oy) LpVH0Oc@~b7Ü QjEy,mGjKdx|a|FL s фFvGsB-q[G)KҰl'Bh2߮@G>˘$*y޽m9\7K(2\ _, c1,)@]T$t lEܬb[>SDLZ*Qdata.tar.gz0000444000000000000000000000004300000000000013312 0ustar00wheelwheel00000000000000 0YSb``T.checksums.yaml.gz0000444000000000000000000000041600000000000014546 0ustar00wheelwheel00000000000000 0YSe;R0 D"cY>9~aRqzDJ(vr~}aSFʡbkZpJIE{2zr|RQیKd3wn|Z2z&r.9)g&5qF y2,4hUI;hjSxV<'M%Vcpk"+3-gs<;*bGul\‡ĥ_^قf !}!i) jqF͸]mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/h/hufflepuf-0.1.0.gem000066400000000000000000000100001446701454400271060ustar00rootroot00000000000000metadata.gz0000444000000000000000000000070400000000000013400 0ustar00wheelwheel00000000000000/YSSo0 0=S$hN\*7q[&)IބqchWJMώkUU*.}'rZp3<:0.}?Ѽ'$vϛKAM}S7j0!: %FV܎SfbqH?r[ ܚY~,fA욛}Foݜ|QfaJ[%ykqM`s-wR@eZ $nO%A(֊TpwՖ,x126FvGs뷚C-qZG)mkҰlgJh2m@G>`$*y޾m9\7K(2\+_,.qW*E"== ,=u.X-(Mlgh2wvۯ"3=U=>J6gIWsۛuՑמ/ev>Ew $Yp;W}&cMh+ HkZր&^[n+&'cCmavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/h/hufflepuf-0.2.0-universal-java-1.5.gem000066400000000000000000000330001446701454400323420ustar00rootroot00000000000000metadata.gz0000444000000000000000000000072700000000000013405 0ustar00wheelwheel00000000000000$5YSSMo0W 4Z.@8q)&$mliBw&~)כ(Md_F2ܲ+4S4Nz^jRgPUnJ6Da>&y\W/K9eY c1,!@]ȾT΋f{zXzg]DtQ }dxܿК$H2mdata.tar.gz0000444000000000000000000002364200000000000013324 0ustar00wheelwheel00000000000000$5YSC.mܱmwwlݱmmwl{ޱmF.h7Mo$9ccidjnncjhe3 33'';.+B naffy#J01a\;pjt^Rۮ;Qx4~E&t*\Zo@&ft]jPi5I;^Ƕjzo/J?c (l:gqm W|;zAQmUor㘢dth )Cjrx|5ke:p]V zcvT-"ZĮ۵͹3dk~|S^بEe>`eKizڔ'u ~3[0^X-Xz500v|UzУSlP~xZXq}<`Q]wk kGTAL8|εg)ߎGYT̽3^xriW93+GZٻnb0iH RH\*-'H? /c.R{S&ޞIOi7Å9 MZrf1ȀҢ=J(E 3zm(+9uTiFz5;QeZ4`U+zT(gE/IOOVm5,P^Ӡg-ޭ9mvchXd&밴ŗ–\͸ηEM(Ik0̋MGuEb9t8 KhTsWҕ [8*UkehLDYV>385sm0x}K`% S!Sy8f7vREP Q"D^{7}u W"0\^BI?$.`IUJ)H҇A*ƖMYmC@?jzZ 3ۄ@:w摧3iOAJ*0*BHsR6Ć o_Be;IoփeAfx\gBcLV$nR] giyP2ޥx,PhG_o]LIX|adOQNi2?tSM wMkSFXdD$:(U5׎mNc䯬;$R-Y[ q:fE>'mK9g99C*CJۙ8=5T]ݰG̉w<"SNmJ?7R;'w˩>\̫WF3 [wjGKf8\jSTdhˮGPU3{=ȁHm#$"+.zlxпjeϫKlLhxx¶Kx{>1r_H=VyO7 fɦ )#Al[ZA7S+9w]O e E-7!Xo6qIaeJpf(]3o66[#0ǝP; Vk(Hֺ3,$ʖUx|A!Z۶b+oN9-H* qT۸,xjn|:+W>G!4Ӡ_ kǚ=H~)z b^xV}vmGe.Ϳ~ǥ`V3%:1ϖrmѝĊIǂDm܋!?;Y<ة3VLX /r3IU镇-, FfJ-2{LclyCkwA~׮}iS޽cPN%ŴDA#Nh|sEō%(VkNzQ S2݄&7Z/"mUEy[ϦKqոMi&t+ȲRA_c6Tz|)~Вo%۴|.$S%q%Q s@B~,Ya"ħ(d1r]MV2ʐd-n;PTΛ}_0 _obLR dnژX2i gS≣g2%YxEX>n$~#S/p5O}_x[bm%q`;AI]ӺH%LȄp#Qh`N:')#C]&Wg&f]i>i]dj.[urO$68׽hϭG߷~LsוL_ ]Ȏ'B9 h@iߗ9)Fnܠw<7 P8>l=M3F9 F"tCE1uaIMĺJ,9~Dj^8eyauP\|U:d NxMٌTΫZw{֭ 麠FC 䦂NMp73иp{5vQg-vk^?&|.@@)Mb\ }"Ƶ/FJ!~=sꕪ4G!HֈNB/#+,gRN/׺L?A6?jkr4Žz@^J0(^F7l=Gf"e?G4 KMpg &+ulQ"Ͻ d;d){8/دAtu̳L\o\k(PNu˱+|ۣ5%ZM1۸ѡskδ{?pʝk&܉B0.zwmܺE3d6ӲDvPS5A|-S]k_^IHbA\`NND߈W}y}2Wsn!X[ LF9vw*J#%= ǻaq7Faq! fJ2(2aہbI}`v3a_.F,=KkzJm`A|;>N&6"x!!q}rSwl[ r1}Tb@Ã.yxZn1˛qڙoOP^%헿M捃y%{@He{iWGQ9 DÝHrbH. #b,-940.c] N܉~{uHᵣ7ͤs=WC~Q!R>5 Zg-`#蛸[aB))b)A0 "kcY Ub-h]dw1nBބW: L|ƨ9/C<{`d;6Cbh^`δD bYHOpTs4/XO2&I--ycHN[r<8ޏ_u"bp۝Eyjy stx@ X/<$ab 1RȔ|~U0SHEżß%>5p5GJJ=Zya/|3φ"?mǙO91Sq= ¿V6K@5}RqA w9tKqKrb ][Z :,VbN" &4 ͚j꾣 =X3Ց4 r75onH`|hj\&‰#qk^ ?yndBvk3jZjs[Bwq}r]Dp9W·;|}Y8 pffU7 1F 1j!+>yda Z?"[t\->.}TJ=v4SiЬ$Ύ_ %pih=cF=mYiuR y|1!h:?0 LPfL*Pl'ߪmy: e)kYfgOiE.XPT.i|ƙAA'$b|(7Vu\d . Uf|7B02T$W9u}3 2gw4%z1~4-s,n3-N&١Խ,Ol'Hso ,C,W< 4n_a2{31V,Rˆ(WR%^[D%4%i)~rQѷ6#mk^=杗;PZ Ipe7+ky~u* AO%=U [ZNlwNg\.:GPjl& x#CM~[tgאE\^x/K <&O,ĊNi oXͽ5>6|})lU@a,9ݗ=@gшc_swISRvɳ BgL$Pƫa9n'PK~qM(5o|]O1^ rZc ^zh:3lXcd@$<-ei7oWp /܍yrUWLӁ>VgPd8[RT!R?_MSh Vf Jj V>=\^x0sQ"(C8cz}J{rEܫͲc={)}^pd(v֖=*hf@n+ (-h!|63VV:xpy (Y]b$Ýq@ c#':+K O zyj튆>+ Q8nVFtOC)xˋݹ~gwzh֧LyqVlʡH{ӱ⬈Mf&tW?vJ;7qG,DWLdSCʀw[h iBFکd/BFVN}~PFGv+<`Ʈ^ʥeJ}Zl)՟gUa<=+?fh];.rXs%f'ϳF'; ()lt}_A_}VnȭD*poIŌQ;`\m@}sզ"f|?/0, &"i0@>EywgCkm@vJs;IoU]'kl0$=-);w7(pMUSJr&Q)9}l;qF]ePtR@0 A#^;fьܣ;eF"A3-&XI<=XhL%'˦6C=^8삃X ,cv޼rX 2Ճd6)2I9KͳjHN /T=/(qE*,.S?}J/`)Iᨔ c0m 2z512tk0w'1oeƤ%WmIM(;~0t96fōRTtI9ՙTgЬVUB^}`o Wh,+l籝ZNˋ c"_+iroA>i+R,=sCԖSئ{}iyێǍp[JN w8D7R}2bUX*3 gLAjq` c[d 0ʄ^]k‡Z lj·QB'"'q:K7QV5„.v$ N mv^ݑFߊ܅ύh? QF.5,− 5 '+.Jn50y'wÏ4GЅTk\Cϭ s>dss˯YP}ڼB7B#s|FƬ\.%f= ~^FϿPz -z|Y_WDMVuk^w_y YNr;vϓNfStw|t@U l֜l"l-G )};k93SY(dNiJTZwik?,pwX re6;dQSNr{),H;|U]c]l oI}ЪCO ]H)Qw^fWF@LǢ>;ﭾui?WE>6nF\ @-${j)>0K_?\-;#3 Clf jͤi'\/.|mo'95z0ĸ k"A}?$'+o6cx_:Tѩk[fiҲ6oB Oٌfw0h^hP1ҿ׳Ki\lLzN6@2O XTGV(Uka+!u8v Tl&lsV}R#woNqL£/Pnpmdz8_ʆS@dt|{KqL7d Fᛃh-+3%!ڮ_)gue-d.p c-[aMuF Ǻ~-t wg~mWLa@deQjC_JU)&Ǘi`";jR<wiM6 -#d\-p=J%M` U%zXfT*vpߥ3:zݥs>KPxkmV/HՒ0V cԪ[ S{+w2@%9:ܝ1$Rɠlܳ18:1~t"\]^ F KrC fV2P%TvݐM^퉡eMS?ѯ-x}7>a!%6*1HGY׃O,754̰;*fKSF 䎥 )c\78%ʠO/& Lh2? Ib꼪wDU*A3YB ,()5=( ,i%QK, Fdc1OOjy}&FIOPtq6_5X`hp,ŀ_Omavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/h/hufflepuf-0.2.0-x86-mswin32-60.gem000066400000000000000000000100001446701454400312550ustar00rootroot00000000000000metadata.gz0000444000000000000000000000072000000000000013376 0ustar00wheelwheel0000000000000010YSSo0 0=& 4'.CB&)I{mߏM]I+5?;EQ85CsO&< f^ytvqjOI_V8rSVj0!: ׅK;o6up}In)3zDLqvH?&rj[ \Y,fAlmQmJ/oY|UFaJk%yKM`s-wҜ4@iZtISDQz-9anÕ>nvԔLp131bm0uGyG#v3 <eQïj )Sa,It1 7Gy/n:YF'IPs݅lKy 35—;a,%KW["Dg&X*EN3E4vgRdg=;data.tar.gz0000444000000000000000000000004300000000000013312 0ustar00wheelwheel0000000000000010YSb``T.checksums.yaml.gz0000444000000000000000000000041400000000000014544 0ustar00wheelwheel0000000000000010YSeucA }Fkyo8kѣW.qnyF3~,vp܌,򎖬A<.NuB#\x=i_e˯`I4Ö岂PZtD)\м[i.]}ӡ!pO!.c 8^[zyҹO b5Nت)ڊyplor.i,V2C83a~-Vۢmavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/m/000077500000000000000000000000001446701454400240145ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/m/my-0.1.0-java.gem000066400000000000000000000100001446701454400264730ustar00rootroot00000000000000metadata.gz0000444000000000000000000000065012423435261013441 0ustar00wheelwheel00000000000000:NTSˎ0߯0n':d; ƹM\3jNvh8Q:goԞ|{$GJ}h;phI {'?_+ VFG|B)>&0L`&H?'u&*3h:̌};Qj~e}+tu䴡(hB}hE?H-ЉW2u\0˪eO6q`%hX2rį|ʍq)86RZ}]Hkby vMFJq>-@K.smRBTloxY6նMӅucժբiuS3#.fCVއ'IuP{$*/2~tPŵDv?*lJ6+{yt*tZ}dU u3:҂[2øp?"ePoAQӍ<_#`bbbD echecksums.yaml.gz0000444000000000000000000000041412423435261014605 0ustar00wheelwheel00000000000000:NTe+V@ E}W 3|g éb Mvr~}BD MGJgThg/l<ɉK `(*p5O߫ ]2u(Z@rjpmY-ȌDIJ2i`SG-MJygDšDCׇs,c9;mԱ] nk0ڛ&}fd#/˔餱V:޼摕) I67Lbw:ɟmavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/p/000077500000000000000000000000001446701454400240175ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/p/psych-5.1.0.pre1-java.gem000066400000000000000000002110001446701454400300550ustar00rootroot00000000000000metadata.gz0000444000000000000000000000216614364522741013453 0ustar00wheelwheel00000000000000cWo6_/8mؐ I$(tPFRN<ߑȖ⷟/~9;㟅Ѷ|Hi=W )˅*I9}ˊ ;+I4;lxT%B`6kdpʍyfG&;iHDG?t6~Kcg Bs&zn=%%Eܺ]jZD8eh #ڿ7.,%oX =c-|G"%=)5[\c$i~kLŃH.Eu}'pv[N@.pј_(e)}ihiq kҿM9s|č+Ș5+SHt{"w`',Z9eV|">(ۭ̔BvIqs~Q2gG%wT/Kyߗ`&k3RဦGAS*JHymB ZYI>tAﴌ Q@>V)yhLBisqjݕq$ umSd>?=;9/Fxp;tvRy&IܗWQ6Mlݿ.86>E]q̨JkK#*t uo:>}w 3) jl]c5:R۵g>l`ܴvP΄j֟B_ԡ`tm0;A'%* \s{ pڟ3׿O\sx647 (˩VhཟnWP.Z}$BH&e1;w̶uM@)9wӎ$62 data.tar.gz0000444000000000000000000017737314364522741013406 0ustar00wheelwheel00000000000000c}m{6hVQ|+*($%NWD[rI--kԒwfdq=9 `03V`;g~>ϟ>n7ןtg?=g߱3R&i-zl_Df'&|]7ÃG%}z߮ oJ̲MvGƐ?{iz9sןg\/g03vw7Nu,[?%ͧߝ{#U&A0󛍆7?>7zR ¸/;ؼ4mw65c*qaGtUjjOL?+eԀ 4ggۯX7|Ya51|O>%UdlvrؕLy<>ht[ߴ]:Hw^7^NͫFv[k^TKƩci#:ClnpЇ5hesܮVs j%d'(wX,#O!Bnu1&J`}0|P;j|c?qIW5PfT?@쯍 Mr#daf5nfʦ7Ta̓}6+h &P1M_:i[ڟ~w֧o7>H7WA?;GR cLA#갣'{@cF *(N[xpX0a $0=y B6;1]f)&P\g$f܎)N45Y&ʺ]UAreH42fƩeZlPW1WI ˈ*k]vWqdkεYL]?`8Nsư-=#ЉIOtۚR7?c̴c^" 5gJ^n4qrm׋Tdaϧ3 UBP?8pHW1[H6J80lP}b0h/{/v0'llo2jls;Pw뜱kwή`-r+%4/ym>mA 7sL`S'qQnhp;ӹe 6f3b} [@މy9u}S.Lڄ9T1zKeI^G}ly \EۈaQ7CL` ٌ3}c@%[V+THqLppBVggnU>+`dB:vȟ[O0I;o$ĚpEf|e9 @WVB2p}m"gI _U^$f7 .Ԑa`e@(Po1o8>rSKV7_e@lU&DPC:n34$taYzOƓ'DV>8..,&=e}%J';G&X7(%ESSkjuxQiW!ʤ9 nDP׻akKiL 9V% ]B=Y脊PTtd45$2d @ uD\U(J +,gkNspIi-hUN ]shc Cn`O::m4A aIzv=TmWPJ;!'UkNa6n:oau5@0ThI?u9*c<,\cmJH&`([** u'>t]d8Uah+ąȴ}35`rK@CYӿvFumkbF)#B$+:MX~zar Y\bmw)zf9! <0N)Js^6"h SiD~E=˵olO?_b{Ԙ^Ĝ,#/oY9zǪh`:vQюM n{d[3؄1 kA~MS㚼ܝ!@ 槑9 ~ڳmS1XCqp+0BdF@fqu;N0m̮ܰ_nsO'gAhȎc$_@ 5 C2mEbxO3NbcfJtZq;7Mv&ecym}.ME] XgC Mq`/'_t,[6@8P˥i_?KNMsPxꋮvׇ'阞a K &mIr\`"隸y\KHbF@ʮ&hFp0a 3@XSSLМ3ڧM z*B\d{(7izfY zy@ ٸbp!Gꗛ1tvlR 4AP^9=#0~Ekr#?KE-g4qއ8NH_Aak"2Jh/q[Hml=vw*wF[pu %- 6I},ܮ,g&Q4n]Mmד^n[>Mû> 饑;^bxo.9O3d?QM"ҋ[P/(RZ?w޶m(4'fAgj,ZBED=!.V(JT\cCϪ~zc8mYZg{9AG+ r-97NV|[^FzxGA\^1t̫:Z@[\ 𵘵G{SRay.u>"F],SUP ЮJ8x0P: Mh@*=3{ F.?.lAlXMC/+""{14MfQ7vUNʪԪ 12YNP%A!tvso]9 1+j=_1(m }Z)SΪnX^># BRq̧ė#NRXT@T"Ónwx<[ )ܯf2ּS*O%>}(mE9~bZer;dGVo(g8ʔ"baྚVSok  _gN*M-gbY,ЩRٰ"cd{ iz ʶ٦Z.$fuD)gN+TWs!71o,9:jhm$1Ͻ ԒwwU:ݗ!D_f?*&ZuD>4PiPS:JEo%S91P(%7F<HP_aZ6L ZJ?ْ~O拽$LgvyN3}\We_,^cVѶX4-)VuAc&dُ2pW!Dt6ElCMSu=h.6>sXX"/s1l`恖ycx) >DND 7_PLcmᅀ_klXZ_ qu*,YKzҶ2G?@Я͞n|20-aN<IG$N%FH@[9@@hg@>fV>[ehr)3ı;cqCZʟ+E^*xoYTCPw*<ީ^ڲ.ɦ&@׹RqY/39/b3Dq0ćksԦ~CQǕ:>UUMS[#AUjx5h(VJx׳Mҭ20b#l7!(#豖4f :#wv9wa5Di4ؠk3MPqvFI|8'tMI[d*zh_ަSjLL[Z]_e;_ӅMi)r!) @&z ^繟Xˁ_ɍKm4+DqV;N%Ci n-]Sڙg]b47ErGRxIg0ܔa>\i Aq܉ADsGG)]H3{Ox~ ^ rc.(%C٘i6Ͱv3 <+AG:٢^V0~0~kzw34U Z=D/3aZD1ɪM҂-rU ^hQ͊udҽ)j{*fLWB5;\3#ѹPusBD"W#VH̘jji 繬y j5J,ˎ1t2/o7RNF(=R`nsXCRP1)]=Io, V7$|P#)ŏNo zwt,%ݬw:4yU?;@w4@a S S~O`+nuU_s!@tHh %_N#d= fJ5FI}&Q]awrp.̼zE%ٱ ^2~R<>X`k(x6R0CJ$'oaw(˲G |n;zZc Q[GhFAҞ7y"ؖ/U FB̝QsU4:$N!6Ю#p|A$q^;S0Z+(<D)_rut7(Ll$ѽdv_ ZՙRQreUL̟GV!Gi8 vF+>P# 舔⌀2ხa(ǞI%]lt) Tjޯ*'˗-qRP*yٚt$=[[j1ʵeI;NGKnԌ';5)e۾iCn+AXyu(܍Tl |2m@~* Bqz(g7AR8B 6un/вkt"JYqdvZʏvtZ88e\H 쀕~blkf+tX o,T|y '^cz0JhܜV`hI~/SdxK[ͲG&U*Z`LMWJmѻ% 9oo1JMgToNEsDzwi0*[4v(t K=]+CS%g@3]3kڇ34-3+Qr^3(,M'=0l9>9ZJ} C=?ɋj6S,ҽ03\"Sf䶍9Az0޵3(60DuOx3s SF y r*&5mL\~t ')`}j4 UeWyULG?`@a)RMIϔ0;ҁ:kxNvl5E+E|&&r B/Y]9I7Fb"Ը 9n wbgQ;yUԑmY,H;~okyXciٮa14PIIJ xɆ4[8w8q Ee, ]A;4mV(oxAzT@5i jyE p&ĻfcP,AdY"A* b=/k7DFggpc )CEg3qmn8+~%yBOhGs͙8%@D"<'~,|F-lLͩk䷣ j*/K).~/:;zeHUt=~飤zsQayn6 Wgzqfm톘³(4+mdBӍL8i"!W;j&@(wӓBl`K+;degP]'-?7m*rjR85Fa 9@HȂIP/wjȣ %&[Q& 'P\ˬQ&Pfh fqa!+^VL$}@IxvX` a{d  F=:v F6tj˥ *P54aZ͒p.cs-lPM(6ʢaOKg-To]1oa;H~Nt-)ŀ`:Z{-l=PO*q$?ɝNT4-"Ll0Fډb)/J/,)רl.,tvtg3/b^"x6 i^Qs:U7itbd`6⇿2ppA"'+Cls<(4'{5gk61ФOrB% Tk3RIGe0(K Rfi|9kȋv 6c>K5so+Tlg*<Ԑ:0xCU*$1{\)60c)2Vƻ&> NЮ!oaWkfINnK'Dm'𮳚Ța&9f]w@ż^7c2( IKPdڳ؝)BY(\yDR6R2kCU0X=GX$ܹ[2zpJ(I"W$'6r9@&T3b ;.7 qjbQ$Džtvy *< Cr}oj!  絇_xR,!\Jzqd"x49lI0/kd䎊"op/ I ̤UgY3?N⑹;s6qNn˸+G`O%S&(qt%"kA[ ¦d5jicf;8sjsYTRe8zܚuv5F641 y:Ӛ Ȑr>3sd딋'u$%}M-{9ކ"y!t~GN 0N3q0o5Ӄ \GQmQJSaG1RC1Yd:XߦidSO~>pئ)Ql ڽAc܄E6OYL|_.&,EE ',0%W_B?#3'pfyɀf4OoG2_F!'BZJ Ft{6 |咸(/VriSRbFXo0t(?"@H9V}3Ӽa%mYlAt0wJt&_tK'x bj6eT.jl)̪trea7r{byN-oU$ \=Xb\tWlOe/xZY'.\xY!=Dph-bYKxj=VZŠVEJ⎉ TSu\$uiϿZ67Rϫϫϫϫϫϫ_1lɅ3R~i%RY9\WDȽ$#^P{y33ruJށVuP\/sn¬by#轝wVĬ53*\ϹaMPV@wD "5#!Ebش`ZHq& 3 *uƓ ;'x#sAԟy%./H'mLbSǧ/C&T!m߇"QX4,$:d:d7g xj@bdf%Q ~pj5IRGş0ƓQ%aJ\EHnQoA&r7I>O?Iy>^˖w&<[2Hy'Wݛ!a #S*_F1Ɣ! I\$G+ηpcĘQ[qӧOViVu{01?3.M6?,|XzW\n:C>MJZV^L*=>ckSrL6Wmt}~E$kGG4;/Aќ5KJt-B Q46:[VbJ+@Sa탦}4@_j}ǛBL;iF<ԻʏطlS7? gdWR[<9 j???il`@#paբD}O0Mꩦٮs^ݪQ*F2DS? xl ޴޶!L~kw[g0Yg׆>!7 # {pͶG-\Y$˵dغ5X SD+/̩ow7T]d}AὴMi&JW8Oo|5?6~vtnM1R@ևJk:b?YOM0&f֒W}``kkV pi}=|7G~5"o4Ԝ*@K9зf|5fUuGQ(R#m./cxhW{W8$KXěḎ5U0G܄'F0E!zzN)D{=$\aQ[-} ?_LyXEfP3W:kLd|[}:{r:?;搧VTrkc"WPX.W. P׸;琰VdM*3V_oC3V"s=;jrka6j<ܨ ʼFb"M b3!XBMI*`y e R?=u])hjN)#'V?NzkVp4 T* ב"9eU #0 3HC?k$vEtQ{oo^5hwp&\ ,Hߠan36e@4śpW=`A˰PܲM#y|7{Zh _Jl#IhԹD\؀Ul 3aAG-ϖ_F{@-,TȄR!0|L#K9]G4BBy2!1Q9"6XU"y֥Ahԕż +/˰ٻJ"'q5 QSAi 5)"TL)*JT(`R*m@Bg}@0HV*}v$ ڧL7 ?4zƒ4UNGcA%*^Me#a'!X,* ' MWqmF 3H;hNz yzSA@U6= y?8k,`A9']7+* 8 `16JX=m x;I9m0cSD!bMME> }V5r`" CB7Hd9$D6JK#dV@;AXౠ/4'x/dOp_1`Hhη1aE)ljgokfeO?e$nefjCI 9pA9 !-&q &xTpnx˸S5B ʠyAI'pA@D`Ӟ`ZTW#|)$B$2#5F^b?AQLIN8A@tBsCnBb'=HLd~s͠beT?J*0T:)d}- []/De'&泟-&gėަ6؆$6 :H0M^n.ON:^e|WCBK2/C"r>.L"q9(V(w\E8 xtjjFjPAQF3^@.\Fy_yh Mdx ^γra!cf24˸ *BM6Ԥ8#C}0wEf빞n` s=cb:| r)S C)Lee=e%pG[ y+!9)FA",A&d!<[.v$O2%܅;- g20|т6TQ`{]qC(ve0q,A o!W0W5<}OH @,$ rrAnf` jh<J '"~fN ڱxYP{.@޽,->%H!@bNmDR#J%ˣ{I1 ÛJ ўrnO5@CL=] #ÿ)XXPUpo J1}6R \i|i^$~:NpHܘ  םaP\2ѓyО(cCP)RtT(jAX7&Fm78olbu ?X?o#K3{{#[8pw>v}YD_?C,*chj 5bs+Mf8dD g?=1W=Ŧ zBaӊCfUw 98"9M3%7@HеVvֆFT+M ܠp%t*V8q=nc*Fx{RnV/0 c7~42EInM8'ab Y115GA`Lؽ3S$8 3ovtCac 2|CoQqhCR_EqZ4p LpQC _v'GU0Uc OG t!8ݱ>`+2CQl=,,<(>qdyf$Vb ' L@{ (P/)}W^FPIK#Kk[gW#[[k[HV hVtK?H aS uE_ =E$j}%X^yPz.*T)X X(| wp'R>נH˟ i|#tO`Z PD ]}C٦*d?xtޡ`hPdBK}q`!xsrk|xE-p-e ?# &`o,aa$ ĺDW+Rvŧ `i Y0kY;`X [ ٯ@Y9@1\~%KC[Gk6رpӷrgf(fh+ p B䓽!t&y^ tfzܯB uyЈD5!Dԃ4ORK)w/ R *T^(ǘHDT w! Z=61?nL ${ްr9p4O:)c G1u@::7H* 6G Ϣ'` vmt  ~aЙ |:q.}!Gl;: "4\3Senȗ!JVfC1]̳ |`%W%vvGlOH Zp `:) oc+T31`D@U\ 08#!wĘ ,41217:T9~D"K$P*pI`فd[}6#Lְ!6X^Yw/6@;h@X%bw (A̦>3桯lcʡ;5M(^` X(̼bUH -F/ eQ1)sh@+C<jc+7@!%N Jr 2<* ~FFg&0j6DP/$XJ<!#e# } }f1#čO t"V=qX^`Iv $Fl+. 4: cзmpOdɚXs-̈́HaU5' NަC);CIɜH+9#2SrJg v`ЁZ oHI#$ocmw, (m@2t{AL~Nld@l/dFR<T]u{Ar\Mw. gJT8P+YtBv ]=Z2xDXx.YOf qjH=NaCW"O=ideؗDV~nfo]#>@ #*T Euچ3s3#>>@8m43зз틨DEQb'7(+##ɕ)Er(Ay BQ-c h52X+i+J@G2uiX|ZAĈʂQ9u020mJ6`bB7W,`K(""0IfTe"P D{-wJ^懁CcoccGS֏](UX4i#>a#}d 6QCekI @Ь ߇ *b^G 2({e&C51ciyHODG((dVq\0'y+W4YW,dvcBf̰v#_r]3=P0N]DAN v& %6y1+3ap2&^W >8L u%d4-dHGeU.NNS:00+>fB Xm. g,n_F}I(lX(gmG~d}@9,Y? [f-&poKXUd")}+g r+試I6|m e% o>V=6Hg'f'^p ̻`z#A`+B  kdxA f%y&9 q#Ǻ`!.q */~X*`;)XvX\&D<6li9 ˁVHjR)ْ McD, ;b!O ф "6M7MI{o%%e?߿E}[;6}$zkP{Mя(PUV#CG`zP=` mD˽Cڐ0bZpR88h+rP+98>Tό%hLp>Q*^^ZKQa c0 % 4 B?a/TnY:Bg1X~o #ᣵtZ?|\N0D9)@y(Q ZpM"#L_ $8".<֮PR;W̟c~A4<'4ow` mViXGl* :|n `]&w_q_&GݍكȘwLZ.|@ ~}˿NWgc>d ^^Apė did/ofe{cР!@e^hpXcK}+3c#;{Kv eoɱUzZ2Ha%̲"P>&"^yS_-HL{!kFAmAA]xǿ[@0.P>QDsOVVxqi%'qphg#I%1n\!k{zt/$Mge;ux󪧳߯ۈGFX88KIBQkuFN3k\Hv[].|-3j1/6 *~EMExW߭0} ZNbݴ^F8!(y-IiS+R0Eh ,ylԗzg޻,,)qp۹]iUָCO]*w=+w$Z7W=wV~pHʪcoFTPlI1\ e-^GѶݷD/>uyqCDC}7Cc^J_Wbrynr#ĘbrY(ҦcS%ԯ^:U^t4RKx Wǜ^lP(MB8`0 u ﱪvX1O]^6IqCqOwK=Y[6+feiES;Փ5UGb3VcL;a4R޸oW=z+ꞤᯚYbdSO'߀1>;|H'mqBi-S}+)o#H ӻ ֽ]t`ͳyWܮ]\qa\^c56ܩ ztë 5U["ͱxNܢH>(baIeUvGij9iRNŜ26Ǖi~Ik%β J&MTl3CnzkWNMZ2OgC1~Վ­rbRfs}gdc懪zM~+5L˗SyWvRhA9' WpWMY&$u:vl+h!S'f/gr Jde$}ط=!|+ؑu"[$?K߇qtbC?E:XrܣᾓMtSf[nK,~-Q'3lA.BҦuh=,;a͇gR&}na~jf}VN>qv?$YfYgIQ_4{/YY-\]WA97zޚgKlcLaק1"a>-U*SiyaCYm- p叚pI .HsfdKSBDl2|}C "ٹBW m=cզZ3=>zy1[[/,I2Yv 9y鍫/)jP!{ny{a~[xFӖ}1-twY-C)׿\2^q>6C:swgw}⒯\k#F[#r5:~+(/ۣΩBށij6iYX7; 9Uwmoڵ1oV/=#cb~z!iƢJM>{rZo^m負b1qJm;/o%OT[[{]O+z|Ph8qmfVtVxS-=O 4In|}d bgmR#?6j|gs;S ,+p`9@W!E:)[»:$Cfޝ"pIx>H wXy|{5BCttqol|TpaI>1'}Ip~b=Y]p ~{HnZsQEo)nym9`\(msc9|?{#r/Ҽk?GѾ4TWx+Si G?9^!L 7_l9$=NѲsJN\JFcSٍMϝS}jBcWᦨvO{ ytmRĽn^:gtT g;Ȼ9Qv螤%5 0 NYg&KjEޮ;&Vw+4]DK{'+hΘlVmBz!)k.]O8Eʓ$Wm2"mε+i׼ޜzaϖ.׸4v55nZmeM_[$WwW۩Zy%y:Lq^煂 Zu5e$W *zWerj}cDI^?zS$5AvЅ5y3\K W+[eW6r@oǎ%<;,z>oT~Gc)רǝc n{v W>2}:OV6[.WZ\YvgrTNQa.BeB+L_tnm ƌޖtt<+kOuW-tz!3jebjٖ E}z=Mr%ysCH/ /P6šRR$ɽjoz[_a('=,SYz蔤qn] nHHzsVsuzG ɼ)mTږ[շڸhssMjgr^4MRXҰN{M7G>(oyD;֋ݍN>~p˖{/6XoZȣX^vҶ)=[u>(N=6ňDؐ1yYI m-+=i i*/֝,4K.ɬvCg]Pm:3<<]$wyQR>yM5ga2'V[?]Q^^\mG 78cQbݼչ{OXS3˱ ^8]~gVĺ%zϊ}}Y1R2dQwΖP5c}J(}uuZ_>]pImE=J=*2oQs~Z͐޵En~Iy^aZ{ eK?+޾#o/C['WU8G3JpHþ^]}ef%9ZB?N0KReyM;ۼ58{ו\Ӱ=\F6DswʼnfVe|4o}i4gE3g3^sag-_?߮>b'=1Yz窬z8-%!;diR[zvlT/m19*V܊uu⤻iް`Wge}e$c֠;8Nн*d4Zuw;On9ʐ럥zr.bT93ZT7Z~?ة2B6&ly&~a4áMOkwQzz׌ Ԋkv^6j<]V3{˰8fmܝ݃3 w -8An5E $]Y\OwUR;12zx_[vnʱS*I6g\=U ݦ?x;] T݇.4gz3i3L ֦.@?>RWEо Q`3k-SUQ rWKԫ)D[je >:-bb B̫=Zs'ށ#߮Y5C,μbB4śkcɪ,>'A Q8V!!;mdU`vUuS@րji?6tӮ3lЕ AÁ=jHڷy{Ձ^69lJ!x7Q$v>yf '=)n 2b8ѷ9/ã!,Yh@9F7 DU*ACo ~X4LָlJLۄBT; F2SMR vn}-J1x &AojVrwM-8`e!\2`׆q9J^g$+:i 2?6׫oh ,bx*zW$y~;[S. ؏Rqj Zeq <UuGF' P9 s__yhܫcb ) 8!q((`N1=xU-J9$/ɖJK!طU5xqC@L(p:V{[Qo."Kwp's%%8t3X랷](Ё" = (r%PO>Z.dEC3v׿Ȇh٭GrYl 0%oŵ}pk2 KߺPY|`ڨ,e? /dYp)$kgq=)V"+bRgF PUmR>\G/V0C?٣̝Tm[@_5|`}K M?ȡ&Iea0QIw6ʙpaH#EKl>с`jHL=Y;z/PwzKqu˳ JR10}xmxoxpT^щU"Etr?3F&lb@5POy[{  ĎnwN56~M+Pj/4$ό_OGBYsGFso$YǍii82IJhZ>Us#ثG-U}Od:N4gXI q.݃4 ѾXl+ƽ~XX~R%y䚾2|0&ea_Z{SG{Ð|3$@<WVmx}i>]yz;Emq }t^ƈnr9?h iکCc8<tKVޑ ptSk=Q(_P.I|Wd$9%"Z6\ J'% +k}M[xh~ XP=+4K-[LB4vTE@bJwVMS`G ̣O\$B6uFk$ ƪ Fޓj־˟%C 62*Y;I>4F|k^2ZnMG RZ꽻 =9#_~C,M̯DQF'9U oҶB'F``C#+u o_q78TGLU6>F^aR!ežhlay?Un(!Z> {0aϼ%SƑ ȭSt J:CE7څtLfZ~HQEPXnQ:HqOTf&^γf>GkS0%tƓuPubMLX#):RcPV*[a6;GQF-҉4@F.ң(mH#Vmϑ{N]tK]A?kL~pƣ:GQ&DA ⺰eq>&{f*Iߝ3N&1vρx [F%^nи+XGs"_RDg+OK<@wƆDl@ ,!jW]>6wzdr3*Is8s/NhK gD‚a6%3}RO dȔdiok&~ wV }A\s=m "HgPd Fhy ɼªd4`9}ՁR(W3/Qmp3C3W3/]}];>] L} x|q~"^&DV'Jv }GBI JV{1c!EEzk y=@hW0!OeΆ0΂%^bi  "}-:tD=uwc1߇-O_u -mǙ}KA gFg#][zå1/&~tj݊%{e>j $-f751;4PE:TJFNOsC+Q3y|ւiq`!w]Z`-= Q^۾uQkVJ%g>pNⱯ DϴaL+4qJ1ZA9-|'~?n)t v1 f/dV+|R^}L6a$(.{epA=&ՃhGqѢ`{B`%j*bkHQY OktN@&$IVSɎ1e78uʨu{\jүw",G&<{Ϣbё%q9gFWǽ9cnV/ҩBJ$]%Y3F{:7? I:啸"qxj$RELIpE')xW x >]>㫌pZpa6ZL7GV>Vd!rkD'GWm~ mUx4_fA|!~8Z  F% C>a.Կv1]>8gJQ7T*2Nav3kb,{Aԃ>R@GM{Vg%\|ǭqy2>ιq[p.aBJǾ;҈@'ooe`cʌP,qby)ќxG,D$s-x:h."tn_JRSSB"WwyzC z&XҺ6/ %L#ΐOt EeaV6)lXSTh V4Jӳ)ʽ46MZ$Q&VGe7n 4}64hn4Z\QtV6ȕg\qP+8jhe6ڀ4Ql0MʠhloU^Ks~j65 "D9r}3,S~AF5kNC.pB)9$Tr8nUxw[Sܳ/= l>WoLf>A& HwxQ˒*PY b"ot;۷^-h36x+a[WSɝAK(5bXk$J jۃ CWEyPetj'͛.yzMtw >V6U$5@1aeEhΩB`PBHe@phJ:;6Nfz•i Kէm#I<|IuPn҆[0=wقA kӁ][N.ɘN6-B[DRCo/!IUm$I}J߇hE0ј=*RPBJBAז" 'JO NC@Xn_ Q xРe[!_7g_Oi:MzhЭЧqP]PA~hJ2(hWPspzsu8,R%Ǟfe<*'Fcã4Vy!˲NcF*#!OOFדU3_r= [>\X1jt4U]?`huN y"4 l Fw"≮Ҙ pdY+{'q@O0BW7AϪ׃'O,kE[ˉLaĈ )I'a4i)̆3꠱#*xbΆ~mҋ+?R /"eSd֥&җi,/*D>BsثS.F1hlSu&"5KgHcbXҘc%Mp)+QN"*J4ܣ4tx_ac&}N=1ƿv!z#nh\#v潇Lrn:I"/kELx+ :"P&hG CȀвHlS{T$ϓ:shDAn^3tr0!9l#ǎ#1`i}:%xmJoIEF+b܆ml8 SCg87;jQ+ ah!`ۻl|@tGGCvA\R|I@rMdF4Žd_ /+7s䦩C< QbҝjRגH]sb,r8*cN̖ܨl+AEQwA_cZsgHYm4DB8o5U} zǩ xw't^\QO/PmX_Q]Ѡcf"8ݸώ5% uS=r ظ<3%!9Ř!cooq}"TLjU0 ն!wB (pkb?WTLnĺ= 6z}Fsű3 C,4^̳8W~G3Ev'ק3e?rMpv1K9uߗu[I_lK!=-WUѕNȆ1[FVms6 Cv_s9 ԐvBB_aڪ<\g* hM$v_;Q`ty_llʝ{T_v Z\ +BJ}#PYw%x=EHơBc%ZL Q6,_xF>J7'4JQkgsr{*ek-YPaD5O\bb8%4YaC+~0Ƕ\U0MV|Ǧ,`v"] s[,&6v":[;%IJ!8EfЖэ*4iJu`U?o.uRΰfSy U$EqMx  ﳣ@;7} 5jgI*'d JJ慁ͳ 7m Iڂ0 ĞK V1JO|$iL*l [6.[J?|,ӯ͕_Bn&j.LkJưboUNg)4z.*tPZuS;U$%X{RSBnt1l=9*c3Jf0Tt\!źcz*kI^O Q+Ʌ:;b?3>5S>-?Č\m'6_`%sfPvN :]?LhadLifPya;1oagG][E+I(ey=]lrͫ n%*~tZCD&T!VIXx'3>ijdD%꘭k %oZ^ZK9ij] c·E]ebz~+QIZNN[deI[&AwO{ĝ랔UZT3I*<_eˡ"!?g淕.o)7C?c^weʞ KgzQT:.p?}p #2)j#Y{!+6݆b)U{)F9> ϫ 5c_1`wÝ$^}^d#91V&M{{QW_5w@9Jnu Mew_ͭ񏶰 !enpN.s*OHr?}Sw}7oFb>N2pniBWvϩAZݹW)2ަcS髛v&EaYG*2Ŗn '70?췢/w;&Ω"Xׄ|,K:jVFf>3fX%)}caM|0; PS9f-&էfoH}gznJ͹7ۭTcUm K=0>~!8Ad3;M+~Z&,!J8+׺)WF;{GBRoQn}8V!S 1J>c9gq|Tl O Ã)S1=GJu@' -(sCɂk2\ -pFp.M ilu%LY(u d^P<Oe/Y /~ޣOO@ ئ{RY0rG޻~ HDZ@zcE(9SkÛ`4 ƣ?'m48SX0"<G鐂̆31.ִ0}<-y\QQt|QM<"F :qm'Nfq*žik,|*8kۘ@sSV^Ү)W>\ط`s, "Ջq.ON)*We>Yݲ0ԓ ԢCۿmCj!-rza  UT#=ZDjmѮJp];\D\MM#gJDjKxj[BcLjK_7/oORY75X&IU^ @w9FfR迍{G>㿣%BfKvN5i^&)|.HA; BL ¦&n{]whC3W -R,^Ciu-/T 2êLp] y8jҘ6!> VT3`dfGy~a+VqM5@~ЮMv:f\xHC|Յ[a;Wᢂ gj,;ޠ\^U2W&m>OˉsT, =Fj^n;v5ږVJۯƩJ6'X I=ũ֋HIs}Ne#Od9 y-d'bե0}+ju>þ:B9 $nCMPXSΛDFwS,~/ȜpvZ2a Q:U9L$sj=sQmdiuW[!'XiB xwqi?#i>k4g lnaEE2_pIܴljDS~ߦwXð-? ōy2r1Jc gjmT"kLׯR>RQk WH,r~:iwZQ ^'RLۗ%.r-e塆 Q+' '"rKoߵmȞi"(x,&4U[Nտ0!ؑbVY}尺[>O^GNK雛NkA+y/F㹅rhٶ#+\sPtU2e3f,3mޅXTMy _FÛw/1 "3dԲ ]e46C!} #|Zci`l.G&NvÇ*TJ ۜd1_riL8݄j*ř8;/?L"p жС-RVfRݻlw%h0Fee[̚L]chCl~Ծ,rXF`@%;#U`)ePˈz-sBG+½^ʍXCSCV~(S(%VhK_EC0+x0$>kwH{Eі`YWmt8saB%oH: ϫ [tR82~K3 lybqGa4^c;Vfⴗ;'}谲Fe^embs/Us:1l >q*֕M08;9ø3p/mi^*dj['}eHHi#k8ylpQ*&mbvU+\+5 6R]DzqkY8o֫sVG"E[xomֹ@S:B N)C~23ԅv7x]bqJ5SPz(9y}{PIue|7n"n}"+ Jms%xxЙaO(.{x_uT=icͧ 2zߓ$WS͉p5yzv{[z9ݻ.#j7!LΊCdʅ%: \uBr*_#St$sÊy/g.k*onqT_bGВvڱm_bGO;KNJӎoڧ~/KD*zUy^b*1PمZt{ScL% vg MVLMn?wRE7ji[r:xvcm%`T3@y ̙3*zTL`\02[/o8oa+%rG a yh2Vzk) )Kռ~FXKf<{Y+44Cm),"e>.OԽy2O2d cm}%̻n!CeLEn;UB40Ld&N׊l(2e'C&"rnEgm(gT]@<ٱk/x;i2&x.>QgCB|ia 8Wava3mPacoFh;z`h~w]#(W499 PZ|B%﹨#)[Y{ MSqԧnc bJ"5OɑZ >,VHը՜04C vrMUy,lMq]^na]EgQc/+_ыD3B5E"h$-d ^D  |Yd;}#xBӀaT瀼=:{az^B dEEy%s+` ke҆]&!Z& 34 |aS(/5VF4;'^'Rƨt2K86R!o0I8@nMTߪ֎j t)*yNqYa˽Fqvd嘞RVKsU`0N`c5ÝBlf7͂6ls]{ԩlj(-}(NHP[ Nm)K`'-bO~aPpyY83d?yJ#s@+Cr )A(? H8G~B\,d*Rt`up >y_x/#!6txhR7ȷۆ(^My D0#C8/b_b~7ecDTه ݆ۗ'O7@:]л1^h8%N[w/lyv`m2:&+ cI(CsnA*}ұfݢKM|TMY"OcTwnme H(,~YrHtCLœfz K*5$5p .mܖN1t;GW䜩(əIM;JK:2k2ddԳt 1 m ->Uj_0 #CL#hL*)::؅DlJqD_[!^!l ?8'~uM~I~.F~NqO)/:0xַ1/-s[pSx\n -`P%aJ_##E 0~LVs=]銽0A\5yqy 3޴FȜ +NU;ȏ|yhv?lgV_M6|~k$e(@Zь6 )$qbQvi{wJ ҋCN)ksSy9eUU%`\"+$\u>s9hG{8W "ʤNKDfXPipsa&R^R^ DjUpSEBorz* u7d ؚ/ B5| | &P"5 &Ou$.5X.d4! °'y\LyY o-'d>档S εX:s!RtIJ$  j~/biꔙ}!K >(t6|ͳM5թOHEkg4dMXL%ՓϦMGjK0*k&+㌑"|4pxjlN>E|ey4S*FLs)꣚=~;zGH! rUl'SvL{41EzMvs5LDS=l0k]8^I 5^Gm>9׹BW qyubw3(8瞕ږT>vtuKB0ڲ([%^]Vtar"\zmA{9tv;}#L}$#6Yl<E7hLN&37#$) $qmal^= siCR;D,8Dݠ*ϡX}5pz>@q c1rpb2&R{4e3iOu+B[|DyuE ͭX89U AX32oBLD%)xHD)Ng2dEx^2=r o\ =ow1gSS'Lb隉,5}+>I"*_#yC%w].nȽPnׯ֚s q "? CpPa ?gP{S_U C U~qAVwzpfDL\v@[GYYy fLa7q޳uۜS8..T2mІF R[=YMNTx.'9{[t޴Gz-r=d{}#avCmt?$eŭ<7?`vŏ(+F]5b[sm9;޺c=~:F̀^'~8?[~yLZ` ,{7,}*i?+CkxE5l_Z-==SE-!"of8vn+?މ-\%/hkl3RE6鶭)YF)%wOn/<y' y@7lozCYkBβgD - x`v[a":Upǵ!_؋^dP3*h.>[/66J;5jsJBZ&yST]csIk1}eO\o Y6 O ~ 0H8]Tr-hAv=.40z]ohk'h:MsRL8vi'.5s䭎fu0xQ G!\IJKf @хpǎBw-!nEwC!+^k{gtB;ƨ {1@rjAh\8^&+EU>Ç,^9m2hY(_0oӽHu3_.#CW 蚷0|(tCk46.=t)Їy,t7߬牄--lEmyt%1#  cpIW,zX2~Lғ&}`f(4|WnBv_rU?/jBp~?/]DAO;R!$_PKW)?}Nji~/._9H?%︿oҩww'l_2xFنȿbS?\Ta`047Br77q7=.A?Y? 5g0z\\\ì cm I%iY%ID4KPD0gtcv:9:9?T.3gǂq*;cɿ4 ;WЯzyրzi~{hE.n Fcw房W?q\i_A`埵"!g +6?VwR?+uG{ӿ /wO|?˥,74~/GHAAH(#֮ awvcLЯῤ@`M%N72 %`payf3 зvOp)=˃&/pCXO˶ f@'58X\cO7G˯r  C` [GOW,x@;G|sӟ nڌ{\jYfi#`{3O?$%%ʀe5OQ5Yi 6٣4v}yl}g" gbbHN?f5ww%x}el@(>\1cvs|,򛼁?`( vt;uooGwI]EyLЇA S/f98zX.@K0̻ @_OG_sa=̑OւgP, :@`Dgru{bSBd+F:{2HOCE5=v?-s//ףWfbq@.Wk{k;=@We>sȞ`om/=_c_g=ܟq`ab19W,sQ_BaƯn{5\s۟vxv_ h?a9 `vC.t`jO o~F*+wZL9_㏟DŽ@G X_GG } Cn1~#x_f=Ƿil6p0`5p3? |ӯ㶰ף6~DK0velA.Kbl W~ dH7ka4E_ũ?8Wz +Ldpp̬ 6,t t{_?zO'GB` O;a3_+y3&{z n4nD\ISx)Wܧ}&}h>wJ!rtn$˕" jz8Kڸ0j]# _ÈptHw`@|4';j nNfBUf!.^V =J]y7buRkx U1o~@j%?Iwj'ͤ6VWc^RU(T6c>P( 2(k3'bђfP9v5u͵A7 e2J8;nФ5V_8L^MdzSwRcw谠5v9!^] M/V?_z#Yc>;IVN`Qٴ"*Qo,0@'L һ@ϹG!YpL'bJ.CytO*ݲ<"r\Ⱥ%qY2?E3ܑӕPSZQ/X.)qlJp_{Xð~Y,$N#3m0_j ~3Z.\zX4e9r@n?|gw%{=7Z VCj@Cpt9+_h$q'=Sv|B<w/,EH7@(*HOp~Ds R aCVA! gI"&Xd5{\7Xns~'eȰxL]WK9? ; \ʿ2Q9Li 'J=烁(7[!X'D>xtZ=Q'iL5pEaoc/CWlq+KWkCo֚;&L຺kqF%>VGq2F)9D.jbF!_R]lfr!fcjD%>6isS"Ւ%KbL#+jQդuXM$3&R_g1%alԏOynOk5=}$ajr KE9opfc 4udO׌hp c!.XGC~:D=Ǔ55.w[5JlO‘| ~Nu gGmZg1?Yy]>]TŴ_j>P1 +_ϪfriBc3Υ"v^4:䏈,N ]GNwO>o8)h)OI9$yn/ϓ-z w.X >|x!t'| +_8׼3@Cr9LC7|M'R Yᯕ_ _onk&g iv;I󊑻H?"Iq>>wK2n.oH jJӣNmYd.qW?-IqII7fƯ7p8樂i iBXmVXY ʣqڿOV-%ߔ.yX+{~(qI/w@,̶K/xw0*SbEWa^ 20>M.AMp6mr%4\&qX7DU cc6Z?ۯM{ϑdLTiN)/BӋ[ʳLxM״|m:[&=)i&؂&`!jۄdQ]6 ] ԕV1==mjB˪7iX}A$za6 7\RJb0@*@ɠ KGiE 6/FL}My"epT[}Ϧ#|Xcxt >`'c42D-u3tBEvH3o ,F`peaa7Mk3NYr:5/]oR1=nLMEn[x5h|>y~ p˗, tӘZTQI ;NQڽ3b v ^C!.07g1Z X!vV- K@ЁnVEq92\a79')o&WܯYsfTOcAs1/pz%R!]ؒ5& &u- @W)*NlqǠvfKڔY͞> RC^\!=WԼ/ns ov[ o|;op% 3|7=?~d>FNFf ww`!#2>d.Xk XCMf>2. XhSr<ɁpSocӺ)e.it*NRFRX (`|2,|[bmk#/q7+-HިqF#ipLJܜ׆'+܁`B`_2i7>ڂGWk\|p{b8G9Z߿'`+ MGݪa#_v!?ҋ3򷺪M~5#v38Lc &7uH%B77jFKձWMiӑ/4hvi>( q\@:CHPH^)zpbߠԇ,"^H z^ws`ApC]:u탫%O.t0\aJ%#4Kd")ֱd^O=F>%V.!90Co1~8xÂ^Ĝ @V%Eg2=| lCgH#3j|`Ek =>|3/1Z,w$/ UxiWxδOsadzQ"Era.i20>I687ꛜ69a Cݷ_`ݮ-x_ DVOA3qź~_y9 r;3G >On.h XFo tAm‹p< (Cky'k?\ <^eNU}KɜqbI31yQhМ}@[&<@cn̏L˲N bw)7c`#4J9P(0+|j2C,l`&c%@j467v -#Kp 0Oښٚ1|s$˸ zxm@)tpO|6xGp|tU oL$2@@kA"w$Prx^Jg(5j2;|&8\\H7~ "y4Y{5#6ݓ1HX-}^iáv'Ɂ+&a1d@ÚA#`m_⵱]6Q5 !"e|fJ(knK̬܈yέ0Y[0i!auaCEfMWu2ޒA&#cKʨ!ȗ$BacD W4SJiDT$ ,$MhH,Z&ϩ zl?1O  DH=c؞5-n٨jPR5|g:O4<uޤ?0M 4nv{[qa/Z-Bj| "18\imHkSgkd7>^aaQ)\md+[)1R9!rCF6:mf%6O t\7? fÞp?Z^x۲I >GNht&%D> xxo=LlY͢y}S/6|_}G&Guh8yR|ݧ('oHaW%_쿀1ɢ8r[ҰĕОy* SW, BaKƯ8?r2x؋. K;*xBlQV_#VDɤ ʵG$ԙ]L38fY2\moXK^Q}0M1x_bzvOMg ?_mwf<._fqO̤@YLwJ lAkMnۊjn!e~TA&z>gv ?ͨqF& qPv+Ğd3,zEL3/q]7:O6sQ%83._Hr ųs: ExY7h֡0niNKǂGyTQkz%?~<7:ZRfqAyK,h|(SR "ycGʗ[>f#nri'R9Xo<ȝE?wΝc7ջQsfg5lY$W1^:n7_i7[;k+ 3ƴeSPbtJ?ۯIu.N-C>Y_|%GJ)kq$S 4rA+%JFpEB:~O4șPYQ'#&t5ׯA֋DNa+8#J~3n6J2LFt ϴ#:7)^܁4c8DJ4'NE'd2Gq05A- 'tBfYh0Ȱ$` ڈ)R (O!6 *YhID!Ř $'d>RÜsOY%eiyip7x&l mT0b~.r OFwUEs~L7¿=%Iimetx z'4~@Йɀ[Zٔz;;%I[LzQ e555 mE ԊIO,Xzw[MuZx(Z(}ihY`J~#?NѷdĔ1\rz/|ƾEpf>zNG{{8gÊT1w x=4 v!\Vſ";fO}WեE$ŔX;-z G_XOjFlbmގc~NBS9QbE##1 l-e-]ciED`-?nnfTO< ؞ 9ʡ΀6:sWmb%L(ۨ:ꙎI6%Yb6)A̅!"3bEmHf~ZV){ EshSMVq6Z5ӼafDoY{~cӼl?y:y~} 20!t5$t+S݁su(N;H[#Fm=R^=y' %x4hx+ה zzIۿ}pØmlVr\w;!_I4b㵦PJlBBG ?32^d>;YڔDn*3ĊasUgXVd}PqCW|1zhWP$gQOg\aBł\|`Acy'Y͸VL:wXǶ:DZm"z5q&,ҟK2ù/ϛQN̙͌]ȭ.wm6{?Y+(si.rPڣxTP)0+*󖱙Tox|]Ūh$O- 1 vf@L)kt@{$-w]996.lN+Cyt[˅YV4Tsna_3G9ؗ  (}YkȰMU9x2zMЛm We,xsZhý@Mp@Rm%3QΌR iNaZV0LA#Dhc'Έ)Ф> JA×9 %4] q.c{8}ϕ\ag\6Kpb c†g+f?3n P|zCw>ٿUdK.M'3Ü{^uUx'K6fI*\KMQMuv(;`SrHJJy2>Y\.y&*QToݥb'ګZXaBGo:[c9kԁ\HEp.ù[pml.B?\MS%o톣ӏƔgr5g*1E,~ z!aU~h1Tf?R}al d1gЯo6:^ŃUi/ɱD=ԍ^*[_y{d^ j?vTaXs58AT9|:P7@ԕ_($oIUmyQ r4 Nb?z$MS̟De4*$R}**٪Csܗ^Ӆң:='T74zD <{/ghXc/4 ԺDG(R4] 6][TBIv3=Z[K@Zv9Gs Q)a{̊ziz͌40TgQ\_)r)8e,|a.}w_PL.f9d}X1V^3^cn- 8n< 6%*Uf0%RsKe0+aJ%7 *$$(T,F-ղQXuß^~6zbvɫ]Osk.g~ϊ <۵&٘X%Ӊ(<:Af,A9l`1`Tt&>.N<-.ſڏ$}ݿ4~ mrEZO@f-g"QJ^{:)GPb ,㈁*-2NG;D<-yp##淡?gPSGoIJ\`Bޘºtr,}97xC ЊDž/47]c+AȆ".'I `Y5M%ȱfFk&VU&GnЋ1Ϩi! &7'G^Va<{0\-JUP/ե|® EHsS9'qdvh6trpў]<>w#l6`Jw߼7| GwX v4Y<ߏ)S.\C  Wvhh8hUi׮!}xPiƻ-A?Wp4^~~^X~}xf﹍1nRPo@4ogB_574D=VOvV_:8i0O)d:$=LEaua [*˭ V44~CsRY 2-ي̪HPwɤǖCipzfrz6Ƈֳ(;wՂ3@U5[‰gA%OZͮ==Ih9۪|5Kݰj6Qox[_~T~wZ e`= e/# \[kyuH-3[ ]2l(Q2ήSJU u(wnf'g:#d4po#'vՙ蔤0ͺ!k0rٺZ۽47z>a@ʅ#1 NUёv#'zY^ovj+%z}oS曯ޤp |OmX7NrWrZ Tn ὔӾBe^r3&KZpX`X35 |'^ŷ*qLz a6R!#h:MʸWZ|e/ VAeKp@U`j8!>zYC٧݌ꔫ M ̍EAn܋q\k(Oi +ݸuewۍ FLjFB.1LV܌BKܢl̂dlUZ=7;(O9!beVVv<@ko*ֆ\kͦZe-ׂn %Vpkv! 'B|\ n $gWPl)dTtl*gg' ehhǬ NZo|qJi=\@_KU`,׫p6X#H3N=W**tjЅBS0M^w9(aˮ@4 G^[`+joU ;c9;4_ML?k(m 5԰jP0+)1*O '>DWA~f3+Lmmxƻ+lц5PQRo<4_sm_.?!_ϏƓ_k%ޭU:(Pԅi)PYw<99G%j56ۚ`40="~HWJ̟5}՜ߛFǏ=⬮{-AM;u3Je Q|i.Vm'H Q }h墍>TY:Ϟҥwa-?/~Z|t6T,}Y{BhydJrI*td5a7By#R##t }+T%VW9y4WVm@>2+e}ҭK`ŊzCz9ocRȤ +u%pLZKNK9Q;`Ə Zє<,l&YKG#X`.d?;|>F.=H{ޛ|w6C[F'I/vMVQz܋T6;f( `Ha-PekA`G&hU4堬h]/3 eei++,N).^UV_2_ueX󯺥ૠ)A#cJYM=J+N( 7t-Ű14%iXb| e_c܅1f|Vd}3G77 ρri.g 4m2企~T.1 w%9=Ҏv8k:3Ip9*Rib YILM(2Mҳ.ؕG$R>5]<~u6GR,lRb4 ٫tuY*L :fތm.#m\MOFC$pjGGD\N%gIE#P .k2xW[TPQ1Xc=gf!&b!XXb/^Zn{n_`%P9(TN˕SeoTqM"́i80i*ӧe81v`ٷXcivG>L:t^d^# "vSzɴ5 g6p6%^p`\sc ms.^ecLߌNo F l- YRsH970 `;cr',CC3n ݟiXzdCy{x?'S S0PAtr(7{@hʏÍp=}Lqۻ߃AHa<֞}ӫwQo6's-hէ88<ɝ]"KyZrj>\BEZe`v-ʰ&czxο9CwC f>qfHK=>O'qllذ>8)>2І>fYnDAļvz J2(L+K46mawuwVmޚJ2WmǕeGJ8>)BSiwg|X_?gIvr_Q P4HM %Y mmm@-s_aأ Ziٗھ݉X@`b_qS1W<$zinT5}6x/D>t[ixoU w̫XBgb.BJ4t_0Gvy^_f϶( ŋE7  G[|H) ŋj{OvL%?T|_V79PgɃ83ZauU_w̔6O^u<+`MQrSX^f\; ;leGÆ7 ~nzy~  {F cҍS8{m,p(ZyedCC! h0P-_OZ%=\ޕ67;Pt_ɤULW'( FcߪQz}`w~Itg;ț];ό % f)E4o%WVEjkG&~T?1Hoȫ4ߥT^jrͅ`gu)Vo3őOlS,61BEW}[3?ꪳCǪ8jTEW偢Ӑ|0c `x]QkTB_P_LS` VJ],DXoZ86!054W/Ws@Jм~\$2T_WWAum w lm%|Z4r˪Ь \d6m|-bw'("Ua@[8r<!qڻ۴*z+7In3Ȱic*Ş1@Үɛ?OͪPRѐ[uǭ_2WbY JGR [C(.WD}Ƥٸ&?c1_`e?ndYeҐ 'a9pp2_!GvMlou_B=7rjfi`w {)etW8CbpPk,9}w~+[K-"']Q8FӅmj(oHn36z "&r$Uܭi\&p ;B&1SF+B+9+ 6+ZCa?Hr8ы=y]q섲Ѿۗ r&z6@:]W=(Q좬#Ы A=S4*JT>쌳A%p̼)]3sH?K Y,b35Lՙ\.F('V:Oy5k& l*[k(ɜl<`2NauiIn/*meC; ńt?Gf&w'' ],DwFj+;ݮ76 ׂ!+a l'FJ)0im8c$/a+&r,’W{|upYĚRR_fY)J2lܟxttJ#|t9º!͸^MX3kh|Kb<,d8'y7/ڳsi##Op*ncn_Fǭ38^ʡGbk}w\k6i_9UUo5jȨD2S6Mيi 2+˘+0c:2L㈒̰@fdK86'DB\Zv)C *i(/z}: lb".%iD]cK޷!hX_8%B{[zƟ>spn]āktf_KίjBs,?XyFBZ5|JZszeN.Orl#Mb5΀;)f")C\axŢr +Mc-PJ- (^-l984b=/zU&rM_v)񥗫LQgCR TKڃ hv&#3:SU?ɩκ_sdZl8nq!=OΦh{|GLT3ћo71V8e ĺ PLG2Id݊b(gUGfOR רReTBa([שLRQχ[3r`do`)JdeL3?|5Lii@ZR2$A5e '`Ø1 *a=O9M5n2!t=c"B-J#بCއ_7/AtNBu'0H͈bK[9aq B g_i^4a"ٶdʌYj.-_i=bEi6vDu7]4þٶͺ6.O-"nn8j#B$@ R#p|RR`]a#lUmnDI⾓ .`_huT  >0X3gDhZR\pĬZNFtۖUEKWHYUʵY`K!υY<,PSQJw~,)T̪)y\y:C7b(XxZtZMm> 3YٌOCӉ"2Th1ъq(~|='V@w>b|ܨm>(bsFVqQq6KAk@Ou1%l*OX%16qk9ved_KE1 }ȇte |'U.\1xucZ,Kv2\r8 a`qgR1b|xuz5sɷF3Ny2C9|޽$V\G_3Cx.Eoe-j2\?{u%Yrگ'ބ9Jxf4HRŇ922(gY2=n]< a#`u8a`L-JB;%f P:];S70œm#btVreCL4-dhZ;0.QECf|\"RnlRfͮoҼw4]rSdݽl8~ ݎ&sg.d\qtI9526i>wxy;3_!YY195DgӔ/H28`q (3bXIQO`p17J `㐣Gsހ.&Ry -o)9(ԗ?Ro-~EеwQg579sw 0|hdiP2Gc?s#ǽ+{8<ⷓo eIMX -de#B\RFqk 9$gL|d9|P_QIv:]nM[B`1K9+S)QT"YB*b&uNdrʏwMIGI c:ّGՅc>yIQObXp[Ƈ1؈f+/[>8WD"f'3X:Na*OV'IANs|kioʘ3ChNw6IEx"CnITi 皱JP m 8&> Q)f~1PvݦCE,3)TM2[o a;O(eM髟W~ WW]*|蛫W89#jeΪ|m{LsFOEl*"U'W;+NsI|yԌv~P.k=0*)$e$ʹgՎMVk*z6qrL'!WH6D}蓎`^a Qh2>KuYډFGteSqlh'!YE#s^ V/Z܏託^@9bT0β6cW13WdmReMhK4t(CϮTQ,t3J-<}bp䳁LŃTNcy6RIKΓW1j-!3 5 4D8K&)FGtX؂p]ﰦN5лO,.HP A ;~̹;KF.{ e4ƎM4KĪɋsϸ T#d#µ;)E 1;O ~ރ^z[ϯ"LHRzUpJч_*8_5puG(Ϊk9 ZCZB$9>a9j.:ݝw~~ Z~?8~dj/h|ZLvvRgB>qƵ7^ubշb4󧹅+W4W^ly VN|d(y($fn7U)P. sYrA>_u29^x(@QcE QT(t\0c( s=0A8zߎ?Knx@DwS6%6v*W=x H 1#ѽ׮r)Xr^et7$fmX*06 xMJMإa5F.ÁJw`3|4FdtwQ7NY8Ecd"i,pTc5dz~,@+Vkji ލȧ8,5_6ZbFzqKϘ$Z3/T+,׻ݶRO\znpe_B[4F0 8ir?6H޵-lI,"ߧ옪checksums.yaml.gz0000444000000000000000000000045414364522741014617 0ustar00wheelwheel00000000000000ce+v\A Dbؠ_ffYZAY} m^uK;?W.K 2DRǷ+q*w]d'x$ڝ,Ѹ0xƤ: '9dOm7)j2,g`#|h)o@m=[Pڤ3( [pTTeQ+uc8^Bw=xf_>>x,u(2xS6\1K,rP#Z/۶G&aqRLmavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/z/000077500000000000000000000000001446701454400240315ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/gems/z/zip-2.0.2.gem000066400000000000000000001750001446701454400257650ustar00rootroot00000000000000data.tar.gz0000644000000000000000000016635500000000000013337 0ustar00wheelwheel00000000000000K{_G0|Oсlb!$.(&68l ~$O `֒F;#gי-ݥ >hy{3˧Q\pNE/lllڪv^(_]]ZEA2;Y:ޘh6M߳$ջdW$WxŽh NKuV5N0R8ϣ7z}ryC -i]vw$7q'Xg8SѸxfh -S"uL~l?R۝GЏw=NhQc~3 Q7i4Ŷ~?/K+8}vv)46#{7dfQoZcXXezSZUGzdZ {1Ǫ9zGwIJQ@r ̙Ʋs{ȼ0ӌKESg/YY:ރ~0s%@15 ׸nTU P# >Yb 5"cbuzi BzۻJUs[Ntk4@!uGt u%@Va'gxCgo4UPWVN\%1r8ycX/lX<Οm<ź]Ξ?y4%j i;S=DPt4gJ-׭lBb֚K+ Vl 2K ̡,1fá%Ƣ\Ê/RCQ|ЖrFJ.8B1,zPpljSRROH[ >~7x낼0/#nomݦf<޾m-DV@**yF2{L#8@t:?2Tz=OfSf錁GyÒWssrj I{om2&u5k]TC sjh(UF[S6nJ܍ ^ c7uWse"P͔,Emq}rȑ@@X-s ,n>ln7Ջ*C ~?l83;b2Von,Fm*l bG8Ei RW^³yMl7iCKN@d€gJwkByUL8:IRv7ʑ~4+"&7|7b2 g}M-mAۈPpx| +XIS1Z8\j6gU]c @mB$et.cҨyʜ9~V8Ǧ/?6AETzsv#c]Lw8:硑#5&"lZȧhO+4!7S l^؉8(Un N.Y 9EԜX`"DfN}ʓ̻ cbCmkΖ87p8h(8fh:UZn9-An x|}p_v䲳Te,L<VL+`G!e \8  > ^:͒)bR IFjtw@`n1[XaފSQGYMzeʔпpXXtF3ԌN* 4@ȧnNjن){/w*>bLҝc1 Ρt0IIXDPVٹ٦wF6SXdLVGFan3=7|u~ o&ռ_^ld UXP#f9M/5tƹ vI9ha[LȘ!QB f߁{;%w\ɞ%hddH$qK֙3 x"8,殪DPdQ)J5R* 4jfi.Ef +C,Bc֝!jhw;.O܍eN7Վm\5i]T<tj9g@(" CDì~%808x' h 8 6p Ps6B H7Hy$h.5jI}>2velAviH~'1ʌS{SdM2'+#\.PbZm6cb~ +ӺӞZh2U6„͒*P"̂0;e(+s"LߏVg]drѮLTn-j ϐLPܵ/%&oBAMOjǧ?$iyRE_Qo2` .-EʤRNk^k\RGk)*Hz0ޔ\3^@{ŻrVOIy a9 &$&~p*wq>zҗOOOŮ` x+M>և4@u9!7iy.~j[O)A- ݞT4~_Ӟ>͖\H#kLou U݁mdJ"nȏd# xmUjx>qֵ1Ta9Mπ*e DobEhva,@x3FwZgF.[]lE*xp1^ iIڏ#aa0.e *Nux{PslċTMmd$MLoLa^n$wԈ7: 2t{%:*~2: h zF<,i@d j:8U咰4U~K{j nSAETt{iij3iMNٴ9רM[ {/@ջ$'DQ~=&Zs3fhǗkf\fF__^Q񔢗5Cեq&5`0xs㉍5Woo5 ՛d [{S2^k-hS2.3B|C'$q\;VΛQO4A6-=<,Vn-O G5 tW;MV/@4ɤa\<ƤMo!z}6ҽKcLp|,~ "|zmVE` kkθylUJ)R+ӨpY5|o!#rqa 26|bB2z; ujLEe;{6f2C5q5FxyMQgxH#Y«.K8fGX;`&@ w@m 6X()6 L nycKSse";V[7%pһE3'sK`6di:؄(N q!'rģsh$&3<\V|?KkicbԇEj|\}喋 ٘ R pXeAᑣ;vԱCqmB2n=K{dY0Ltvw8Gv.u+&vЖ%' ҅H|s kSi*)XІk,n@iWhrTE+h<#nD;/uDQhr_ɔ q"쨾H4p7Ų9/@v)>y0rDZa>32_GCffN윇dUm*]D%m"[( =cl̕ b/}6d ^*e;0k/.FРSnMx?~g&0'Y?{y^$ !qgg˸Dӌ6{āCUl,މE6PF}8Ƀ%4t846ʉ>jifBl(.OB8,a4׾䙣@/ `sj@Y'c/ h,˭=7=hnȗ\\ ہMY6P|bsa!Gh/j9St|]_ ;M8[p^ǃ(~$ i o`n""-D٘w2MOWm>l{| }> ,fcdUާ9GCxfa]#k6Z0h '.BOI]ud"64(JGf$.-=YsWe]wУ3EUi:|iwtû/ 'pMrZ_,ڀ6"y.Un!,XnvHB'k%M6Yv rL9<2h5tuE=F6r,|FFznro6@iz@G~40|I2 >3oDG[K7qHnfv:GG8>8n#ggᎯ* \$ڎ:Y跸:)9ג+/g?>Urfb,jQؽu-s,#KZIEyķf!YՏ}wZ 6QcTs-Z 'r}7e- ΎmWv8^!25Ho ju_Ġ[brDtC8F^CnRؔj& aɋ veGpնV[~}*sL1AvHw !(zXڂgv&?x9)9T\ټAdLUBFѦVQ]y.e)|&^[1&T=/)1j iHӢ8F\!;3dl"EmQQX*JW>$er ky/=fq~&I̎lRqV7[ͽ%` qyYB:fF[S_{`9/ w З!e`Rw3\cFٓ#鐞X,.@1OKiv\Oq!ǁl=MSE:&|_ʒh7M9;l$Ge; l2& oIrс~b zzCDDk UXj&@ϴ! 'B-6aeQ],v.K]H1=&ᠿJOܾ`Wnwv{vg|}BoFH1n$a x07W@sk}|Tq?OfWXv\{uܩ|ȏ톚/w3N] 9`"-_-IXxDdUga}$9--~U`SC"!7[ɦkՒEo\t"#19ZvO1Z۪Q|#E;y:ICKv!I{Q9X|QF,Ȼp-,%F>E"ć#XUψ6§07VOx،7H%^ Йٔ T#hpBՀ(0W$H^P\_Qȭy!xdSc&N~*YA<$PJFtl*^;)k \V :Y٠#C9s9WBNY/&sC5,VRC1jͯƮD]am\NwNl]68o5 f`O24ȀYoxy5]_0]opf Aأ(#&hDQk(mP,XR )ΦZ=ỾPQ욮X0aoRsCi{l>Fq0un=ԡ8hG惱a[HWqK+m8@6ɔpDMbwɄXи/do@M<ف:n򥑕Εng[+HX(6N Ʒ.(:"dutK 5Mi7GWCZ,4tsҟIlcuҨGQ>_|Y]n p4tWpv 8#e<78ۀg_;(15XTޯbgK4 joy B$g-ƚl%dn6?ƒclL<4t#)5(Pf:vi;nCʫQTeFCmXj<²7S ?a4餳u.ܖ%۶MG38Xi btߢS(s8)93HZA*#ކThg>A# Kv?Wc'e͆\|Ŏ/.K\,U Ri [|6 Z[Ѻ5 {Z*7[,΄ S}]Wܮ՗q=߮*Pc.+Ώ%Ex;bb=;=lrMijDu4v˘ыmUOdJ} yo^ī@)`r&\Hͦnd|b=jP{ 4y#*634WS8#<} _WJ_p3iN8R0H %iŲiSc%b s25jȑL<|۞[?ZF8nphEX]2}|1R섪UZ>_[Ja`zOhku3xC`?ykRGQ(OhQ o;q=~ts8=qͭGNl.{Mv}6!谙 |'È(R&jxIcSKoRR'Q5>GRRȿfn^W>ԀhD-3,$xY_s/1^*i'Z5a؞8y|J=l&\.p`{3z>]"<3=uֻF D%nP& \Qy5PñdY6SLP$s{,3ez$IQ]'ljm}AiLumCq |_bM͓UyR|+52>LӐ_*&Zძz0 ~bjʸh~ :~abYPb^(ql .ȲզTҮ(4M&_R܍紧Gh0{W_nm/HW*uz 0?Y}Aܷ[M5pѰtqb߿@նhp"`E*I@90~/Qڇ>jc44 K"M @wyBPk r)M %L5 2%\\1bY&c^&j%IڹpEO ?9mūv}x!}pW nGmu]ú"w=gWF3 7Qc2 Ϻ4IMz] [c6؞\oV*m,ZB?#[܊yM>@?u&rF9yxؚq^KH#6npLֺaǁ,MشM"xb9)Q*\:GLX(w%awMj_EL 0dn܄6͈d8*:kIAs8?.Zu_*6TB+5َQ#u4awֲpY8SRpv9-%10Z i A^Ua8 Na= ~kЍN$M ՚ kZ +.^N{rLMa\伋whb:eaZ$6qnPuS59`t:;z A n(Y@`Npۼ8ċ: vn \GͶKbt GgKep̳[\m̗ڭv ݿg|ց赇ċGBxG¢_; Wo+FZjKPۉXk^#&$0w+t(?t@ 4T6!K6 t-t~&oHpz.g=r!?ggӧVr~1C'ptnj݇sUl@n֘\^О/پo1$k7`fFu4$q?$77I9 c<6PhUgIhP_P#| 2$Fƣ^$&[j'ףpR sjxU]sڐl6;cZ*Wد _sؕ@F@ FD]f6{:#-]s[.MC֤o-[~orýj(;/lq}uESȪX]{ZiÎ&7"IM PI aS>ԥ \t:Y)' ~ XT\cN)i(|cMM\r)UM fE 4lwwb<yv.biKuؚMݙM0+0E+p#rW;CpˍD\h6Pa|4S T<}JOia )}_L,%n4<XmIëq+qzOPB5(Y%Xwt8hHpVB:<)l@O'$.}_)vhUIJ ~&@ +% akЂͧ0HBxx H)O" T@q" w7Tv"4{TEHwͯ=$,mUBgW< : 힇QOoبd-LL8- gmr|z$U@)6l9(`TAT<Z;H;-/oaW4éӬa_6@ ɞC]iv6v+6bGUV44Kb~:B T6A_a4Gw9{ġVlzG ֐zkfL|vOS!' _.Vm=X2NX+z3;cr#}rovcMhG BQq9.# d\8Cҋ)Fգ4E_e49ܫ(M`FO1Z|U7wp^7 ѻ?Za+%ZKb]&\usetë‚12-,鲑'&Hx޷@:ײ.[[zd%|jUzASx |P+em/{ ?S X`jK_?cgFЌɾڠh7>~D?0΃9=Z슑|2Li_#K wrr|}ɳ_Q~wsWeǀ_xp셈swAmGxMx`%n:9sr^jn@ɚDfy-D.f9sыd⧳.?:89x~|v~͟/g1#69aR9#1uI[PxnC =I ^M1 $eibu!bmKȰItLhKWߟ BlGH<3 [KkCOkAa9XHlL2_ETr2Ov[4 ҺheLFI5(Nm&3b@˓P){ubobyGl =C!kj␸9*˥ܑ9%h,b \nƮ̑ng5&粢}M)\>+t"(aPf@%:OY,N-Z: vDG1; <"i(k?!ŞX[&i<`3%н \<)>^NyH>tƚ?a8ldrbfUIEVbxJͥZytj.}0do [2~[Y%hތ 9 xɝ}cJ$iݢxjvj qlh|e_奎 d#Уnu+*Zv`ԡ}nt:GG]n?}29n3\!YGZ UW)^YsIn jM xccE,%Rhs~Bӛ^͵I~}}<?T!<2;ε8O,]p< HNgGϊmyqͼB!'hR;|l=iS&2/ C jdqVN4[}Q?h[{ fcHZ,#+(+^qfCs!%t`q“ -TZ$6Q ;XOOtDŽHb9H9t7E-yIP+-GP87è9+P(H]!G!v)w-5$#"` W o!/G&I;~`W -U )t^0͚ (9-Wlp#s i 99!09%,Pu,'$3{Qe}já)̼>Q:1E.SMM\XT";;PrN"y}N/vA;̝k۰K-;7n6 SlJZnK\rl۠.g\%v5&w˜-UG #d1Cao+Sg16wGQ$wHasP6Xi#f^Ƙ= KzzbSFHBAr"B…0ΉV8˘O8hV陸6Bl[ ϣ>nzY$Q |X + ֢S192s1_[k8q_oZ0N8qo `xnW3KÙF՜v?`'sJEb#7Gʱlj+ O!}a\ĸZw:BSZ&,EmxG/.L!yt\y v%;Ʀux w88Tx)<{s8|.N_o{y|rA-?8zC:8<=;?(7?SuoH1LoL'Ϩmo\?HtOqZۏ;-w~6F= /9%WQE)Zp(k?GoM`8?^+*1J@J"{ Vu90 #;=n\(|VQp Jt4(g e ˭E4n~^on* 2B1RQʜ8UssK?;>?Tָ کQ*Xwqe{zgW߫^\i^}x}a[PgQvp>3e?@ꈜڠoD~u$aK${]4H}GA> dLR xq5;~<GȾ4 ӛn~;""q*CpmOMN2P;K`~EhŌz Q&|QhK G>%zoS4%2Ye=l7jTn0ҖynOюLB[đB5 j{5Sn.Mac.]uLAojkQfF&w@LG=&\TsȼمU>+; 4$1n lΞc!іǘrGNF(> dN'KSJ@3l,_oyvx{H j~/?S67&3 )XdOIM57AN2?=:8CagGgN@#"` QS8LN>;>קZ])t{'sihryK?8cMS\/ϫI̡_1v٭EJ:N6R333[>8C|V=`ZhmgpfQYMyݯ~OiK4nS&gÊB"xiȡW|y c< ՒB~mכdf[9A\ȻEȓ0FE!~vg=}\ZOWlco?٥VF*JJWo(Jz hJw`c:˄dך3 {=:\;a[Qܙ^7Z?Gax[*'"١%/S*+dW124hV, zE/+W۷ȬEI> H9wЖnuUQhTSTD"qꖐ!-f1P^$Xk5sk;YHʺm @ܗ-3<ĮCZ倅7-[Sy+hyÌ0`Vc"t?˙V0D0 ,ep ^ a!OP*: Gh&Thtp:S/I䦭8Tr;M]`o½Xl=Xy7EC4|oIJzA7Ez̷CrYbB7K1V i&&'Z2& êp]W9$68imA0Ġ<(]%Oh%$8_+BU]auj=ϪNMͫвԉ֮jV^ViqŔ.-iTt-Ӟln-퇅}6͟U/;K 1OfM) YX \e\laܢbٲ6tv%ҍ 2tӶU+ko^hc+[YJ9gI?xye_^^}O)rsƛV\G,S"iN0e69fI:{&m7uI/0?8S{ʆob.1'-^u`v.(@񭶝8QTww Ss`(>L[nگ=F>OOp{o@#&WְN|1Z[ug-Wm6c!} JuL=S٩+} +5Y#wn"Eאs1`o/$Tأe|aXz1! j VUٴ1.M,r=F7 ? %EpWqUȄnAU+XsD6Wg];rC*V%y)[rKUB,טYmBU-TzA(l(cK9=X)~NT(xd7/8}۾ZZ`HU_ĢO}=rFGsl\.o*X#-8>y i`с ,R2g]` ~W.ir[5C]}Pŵ-ʢ06nws7ۄмΎ]H52B3gUEE)RN Ľ6J)40#mNĘ ԭ?}|&vQ{tEZ70EyIhj(R$Y|ԆSgO"u_h25Wm3x|@@0ܠyR SIUwvn.ꪟiza)}:58Ɔz 1['YnpCY|Ti.v( gQv\'̖FNVk1!;kT3ò&^> }cB#*75%LC)A3s/ْZܧU{cBr?N;ӣ g64,nAy1]tyAgG N}n[bKP#nF見.q%"'tI{ġͬxB:aa^hxԡ HU& r!BT^#sQ^"('WMG otd>{.l:_/2Bw>Dg0F=1&=ҍ]%oD/;s[HPDۨ:W![)(}d|t)DW2}gM*C8كRN~_bOʬJ~RD2d ЇA1>?Ǻ<+;h%ޗ3{.UdAdwiFBZOs'$ZP;ɺs$#vۖr2)iNBݕtlu\Q /PYr`Ь1OtVji.=mZLC ob iE˳sL@e0&E˃]+NִiD~7<^׵AuUH@ ;ݎ ^u@ebh &8%zouzU Z[ "z mئ@ݱ7;ɾݽf 3%:nuw 3{0"e燏:55wa|㼲|v~@9JmI.6Ue9[,u..%1+O"s>a ^K4 K픏֨`ub-a(i%D鸥T @Dv֫5VSPzy_-& _U-Vx9gXV!"4w~DOޛ!,weSZcYwӇ\♉gñd6Wݩ4w@/C icfyah%9v?6PjʶWOaѶ4pw7xLG*[@ 4)VH:Su,V9 6'M7"Ez rPн} u #*WIH:kK뵦w850L.vCU '7f8`:Wà~1KUK4tIZRG(΢aAhl ܾyrާP׵.GUqzAwD=qEWo0NaU EӛB(,mPܷ<.G-F -8ʕ7 e|cJXQ/5 c+X)6q \еQ4A|߫e}guܚ>I~(MoE0Wt@=?y}ypѳӋƯ_ !*oHenjt0E޵m}llmԥy:0tjZUwq8SAE=UsSP.$MG'ϺϻE' \֞ ׀GPuC{{;=I^b#>%Kqhw,z)wG>hR͎B*W4aN7.w-=MĊ IBһ•B4}B۸K.F%f+)Z(Z6wO I,_/Z$kp:8~2OaL9Z]IKOReq/`?Ŕ|&Nu F#躵*N{B&cԳZ=zB5rBSWgt-Vþ=YqB!6}=X@ï;Úhx"uIX /u<:wE]PWwUFUaA916JuEOqY8GbrIlC-0fYl^:q* `u *=MIl֣<{`-u|q^xeIh%ĕ6NMh${sIhoΌD(o3 RlPcjwߣ|ߝ?SG^|BfK7,p4Φ:p6`Khw7iZESI %_k`2y+ɀ׏%ggՊ3dR]ZRGNg^,bK&WbN ޗ QK$RZqۀR&wWv r6ښ~}oi5u4*Wt*[fVEoK$dmH1ȓYxOBI2"|W0[:5r+N` 3(3$ YXc]x,E„`'ubC&)e%HKVPk09=1OʚqwoS8cu. ,7f\f5r> oSڜvnƅQ'M CͯAȻ*X'R12GŭZ?;3bj$3/6ь<7$l9*FkTT?H*Е=g6LgSn(:GشS||?"uzQb[#ReӰUbA9Jg ay`ca]B(}/6DahPֳxt0x2z 7"@FY ١J'b$ZAICiqtv(nb(;=1U/l1:ZъOcx_h$yY*Pb,Dd3>-Iy:Z+G3SmVsTXWO isvRr^0Ԯ'Ϡڀ~n7eٜsǴu:gGGuJwI)ދ{@jYm kjdbl^dik $vmLjhc,yʖ56i&K$1T?r-JfWOu"&KY;˾mDBhHE9xyfh6$yLɽ!%!K3:pQ!D䖹G 2KR ~{Jx #,S:LEF?p:܊A쏾qGd)B`($ 踇N(Nke [kVB9\SEwr}A4y\]1 KiX=52JU" !O1:*apAGƹ֝M}uV ˜ ۅ;\ n7@)`Ƭ,\ \ `FL&`f\Β!LC\w^dwe=?iD<h]"Ahw*$XfSHČ{|1n )gݐ%!KkkMkI? B{LnT!4}  j8UhXn(-1Txsfer#ElcWU)b62SxNFMrQӍ6萴+)\l_(O̜tq]caNG,uTK] Ρ1mP%q.;'U^*G06^nZҊiq;g)u-;QdmBMZkgM| /CV`[ ,1v,8ͰĄL͠A1 q*Ib< k^sόKF-em뿶js / P`]˶kEɛ$:1a{t:6j*[\^gW沵^f2EyU_T][](,m4Zo6qW|BmeiCnMN^B%G8>Ъ=X|Lrʲǣ!(FdV"A0-ҢnR'NAp:^ݕV8` G]6:*vuYMb0ق]{F$Bv"E\"Ԗl[C:D-JF&/${M٨ VA'frBLHWZynl!m'º['ke*zE mOdɭm:MG.KĊhi6M)Pn*GTǘ`SyC42YJ# CTzy$xv')Zzhw:/@(YM ұ̉}l"=T({badiQ + XQCyx@yRPvCƈ-Of[񼸆^ZJ+SEu$#񳺳|ܣWN,U۲צGށljWH. imYlVn,[i^+h~fC ybIBCgxDG epbr*M6v2Wo(LA2,*=N`PYSALBٵ=tѾnCGu70z&,EZ吝ݔIx?V#Bn7nx7«׿UW`9*nRxU<#d5ӌ_|==F7xWvd*:X=T~Ц- ‹Bq@\LW v)nCH|~ Ml$aTUPZbcRoBwl#lߑ6A5%vi]4s)g6L:P`}?Y<3_=) B4[6eB/۳e{=B*^Sisu$B_~7_E0 ͳ`$2}HZ4jJY\RoP/Zn^on zTEv3Lk{1/ChLǔ L]@~:6ӫ1dʣ<ήg.`**oj_0%z^\'*=oެTˌ}%mFa89qde%Ԋm)g\z`cXnUF\_rjZX]碢'|,K=$eq_L4/̦U].XHd\.O"bze_֤jfD8{ '~zK\8I` :|;Kr~`k a $<KD+kr aʻc1S`{dEdCRDө5FJe <~ _́TJrW")cu\"Z|B ww=1!vrٚy(s3 ^fWJ,hjM2V"yH^.Y¿iT#QDwj{ Ż;u$\E'rدոa53j2n~ wZ᧲%,Nwd ' &l-z&Yru=UúnNGy:**-1 dqln~˽ѹfP4іq_t [K8?rK\Y3msw'sy~A?Tsv3Cnrއ_)cGzuFQrcu0٢%;`fiZfoWM|dO396Q@ :ϟq _;2pb2>, [)L@qx)vC9(C]@To]0ka hfM t]R%A2I_ǖʟb*:y[b TOĠlUU8+R&#ݣ"HmI M돨A`tQ\8"fެ]e ɍ N 7h"{HO=s9籙CUfD2GZe*a+S)9wS `U:y[8ܑTZ:օj FScQ6ʯʛmh2 NSux_M]xd΄z =0NĨ]q1@fW}IñdB{P6~t\^SF66wd, cx o~g ۸73`;ʧI5M0ڷU6w5*Swqީ-NRM_${;p#}Q].n17n [~YÆH*f+vWktu++y[/{U3C:]M7U@_dstGѿ0^\{h=Dt\ 5 +LK'bR٥zZ^;I7Mu9|j9<l^vxDpb}|lBM4_F6o΄&`}+; cڥ Bfk')ۣN3G )U#Mu(l֨zDHМMp3ȹb=(%xYGUu0?U%*/^6*ƛtFލWc v߱uu6`fQиJ֨`eߥa{=:*].d3_O+*jؑP>mm0vwiu{{U9T6nݮj7&&|cb4ǭVmևvuGh4= &3wFQu] >͒wj6!7exZ@x$iF#LY@W]t3] |xQѝ$W.dRQ(o)DVZ5 ߡR1#>jbEYIu; Mq%͒MW9] GivY^}XЫ7Fl*Kg@`SE~1"L5|&]HYJF5B־C{𸒫@ԓLBaB&@ϻn9q+=-9<툫ҍ[}Žݖ.v!,ِ=~.a ,{X@B~Ωudϐg,=uԩSN:' r=K j%S)|a5<t:hu9Za+8Yl*cZCq,c>C1Z!Ukloݰ. D5 3*ؒB+cyނc1xMw BwtH∽HAThWőya쾂ZElcMh, [ן5m#ʌfBKB-$]M_Ok+kB? \8x>P)n7ޫ.5T p nAB1EBY+ $4KSXPs\ rG8%eN pc;j3m=^o Tk>Ua7hm`DU5R>VA84R ,!] Mk%B6]0}+ <>V\Т89'y{9@ӐmQ4B%PVebwdJlf{xLSV,i{pՠZPm+\VW qP9y4j{ B rF O4X"LRyԁX}^SjD`;tiLO4]g 6xLѯFl=4dh׹FiM/46H&;-jL J矸$oz!:yASqvKy ^m *f>y ( Ĺm`JH:'^ҫG/ۗ6Y7[nk-+F'.TRLfp*#c%t1qamaEtoتQX0PIӶAW?B'c9"yCz,s7 ݥ֙細`gV+ѩ/)NTXGCS\XheS f͊UH̷XejVw. u"AacXvr^}u'+6SAjrGg]z'3ڸ$PsfV 6QUKK&1h>Pm +~b *2ƅUcKqÑv}wTMrZTbO:5$Ve#RM4<1a4,#;\`CNU{-ԏ]AURfⶈ@d 2TN7S\NTd؟d'.$ޚ+LfFE)I"!2il$Vx^՚>MUc"`܍`kU|ɏab0<)cԖh ,XspQL 8}CX Q~\6 6⑦uGh?\.g !tzX۾7"g6ImúGc7mK0VMYA߳d0ˬL  Ij툞-x%̟"ZkF 9 Åί#fKs T;vˬӧ~-P,rwGZ_B(tuBq5%J4fG`I&<镠bx*Td1~_'+xp7/hgP<[77I{BܾR E G}nUelKlH hi^&&+?>Uߎ^Qs H.Gu|&[ f CNn˧/̩FP &Qgϝ?[_$3& T _r9=4CgUP1%$=d.ԗ6iO *ůbr?FND:d. )H8?$J`Pʥ0<なdKQ'y]rtSX.'W%5<ȜvTګňC#BN@ߦE ,[8DuWkwn˧/CK+`Dd،$W#6^~; 4&ĺ԰\/ˏW*%61)w}S(\c5"8;dcVP*^Yxxq|}euyqhuK%|:d\i@&P4[/dZwy3C`@e[+р si jym+r"s.*wu/yBn>J# mIMp,)CoDRb/_tnvuaXmtE;D$G<CTs)-X Wxs/.->tqmeuvyA~/Qe|F%iF[:P8)"*(Ɲ.e{=ᴝ|e|GHʖ ttUmca8}.tBVz} :ʊWh P:gm M(jZӑNpɑԒ@Ғ.ʛBR)W7- Fe";iaҍ9VR58egQ>\i#ao2X<"w1v$CZ#Fؠ2DO"<݉8#T uwGЄ-#\N&&;|seDLOӑR0,{ϓR|BqY:*Z%,2uǮxT4 PC6|"jX//j0U yR{C9u uxckָbDNJ8|nq9(ٯ薬m<NYoǧ_Q DS,~xN'88M_<"[(m=/yE}m:qTm|ް[ܻ'^C{[~=w[_b}~w?s'_W3?+Μzowҋ}䱟z'~く?/zsӣ??|}ɗ3?GOP̿?|{^{Vk_|5/gPiOyn ޲m_|n7o_w)=?hY՗+=Gw7z|?x?_w:o|Ow?O}ۿ?p7NjE?/yg?}'#wgwFO,~ӣ_=x,z ~_U׷~]}nwts~뫏}/'57?7ʻ}]/yeo~{' ߟ=}O|/ijЧ;G?zS{Sc=q?4m+ΜY~Z?>Uݙ3:iɩ'<2v0pv=B*y<,_X\Xos.ACW U071N^vrh["E'Yt1a v%=^2o"Y+z w(h=9NSY,O%lp ᷚflrѹyJ#Hn cn{F*9J+(#§ㄐl\ Uy"? !,6ek;WԨq*B u݄N.JGso7h4&QCj&l"sQAK+%/qA2@Iusvן#ݶB4y zk(/kVg^jaEe"V, LwL wJDF_ؗ/Tm_HH7DHBaZv3"̡&5{c " >&bl;bJ#asra"]m:W ݀?Wh Ek"gqrEBTivpjy]}Eq쪡ܓ ԶIX+"cgpEKN`8npa(0t\4a17`0HzwS(7A3 I~ wFx_R,:y#f&lm y(9{F`DslР*F`BPLam.IVk/C!P{b]7Hl:'QJ_3᪲.Pqʼnr;2#])iZΣ@ wj`^zC *KY'afޡ1k!-NL]i'%K@+p5H"^6)%"&,2 '"f Kw1q;% /o{Q$cI "pCis8B:x= iVNx)rmOG۰r=d/]4Zwni0J CdCp5qeQiڬƠוdZyfIt=D L(: +S<$GI!(mM7埕歠sۅiW o=tSy2f: VI TIiyierOYz RZ^a<.g|MuDvδ%YuIKOթ%7`OmB>| p9K70!^3+0zEq?Y> x@>h6 ]4`i4M: U|^bъ=f^6xmDZ^7C= Z̶ =4ƀЩ2_JU =\%]-UnfDbYkL_A529~߱VY:yaSb4:aepv(UycN >\iarY6ͲX>5&O>-9܆Y 8Uy`|j0VV+Mw9R*3%,f6Y0sw y@5/9[.(Scd,E:פ,}r Ap^ W{C^)`mi7bdiwEVN,~|EzB"M?t0ְaF a!,ö a@"Blk<~B "jĎ57Ab~:-"V ;.q+pb$_j%_((hb%7%spY0KE}쪤DSgltZL!- _P-.>l 2 ,b u ܞ]'xL 9Z—c:ܶߴY}ȇ5JRNi>_eN', aQ-ͨCCm_Xv$[#j v's="mNjAn1H[Xb&, M?E@1#L:i]`m-YY'GX=Rl# ^fnbGWMyݤcaOmS-90.:^| !,:И飔>la8vT[Ǿ@ZzJi3U:Fo:ΰ/j|7&ލ+/ӈ zBgx*3}p'0iM[`E2vzzP^ʾToJR<-28RVS1n4bPr'oz7=Ǻ# ^)9iĥu,ƛDRǒ ^U],o.LA7Ѽ0=ϔ`aҮ“s?yE: qj8鐵QT학*s(5mVE9@6ݼ~ӹDdчQ},-:j&l5N l H!=TD; -SUʅ$RWNngRk`1dE1;ʔ/'n? ee?jۀ@[o`nʁZBX/*#2uCR*_W44efCS26m5/woIGyg׵ = SƤѮB?m}̎ՋAG7^ߨ!"E!њ`X] VzM: _gMI%\fb[d$֩;",1_g,GF=`'re3uu/7EH,6ew͆32l :5%[UV٨OO;uK^_$ą=eWgFB'jr!;y^ꐖ~wS|(+_$hb́ s7=X2U&.GYKwiB8 MK*w-֗ b(+x !U/A Fs:иny\ZlOnH=Op$ ŠT!Nx V[JyUa4vpgX,Vags&.ؖxnGմ,`;uLe!!ۖ%zΪvOlذ#4js+:hM6ٝ0ZFLF,\rJ%S*,4ĒΖ+1-FgCIڪ2AY-B;$%YlhQJKLCܞn93X \x+.fwDYQ1Z KHnUփ^{C%Xf=lfq7r7nm,F*EkQ}ʚG[d҅5u(bRp{> O4c>-m+uEbTF'ȃ(ɘiGj{c3TO8nA$ ኁ̺W. bfy^qPTcꦵFei 里3~یitА]>khZ\ݾ<sn&yqnCos*y]F#?2B2Ă?SG[TbD\xo :][io5C$@A&h.7r8#awG=‘00wa^MXeܗYrd ͮS+:Jn[npu&cI B+ {DAPBG, v; $EڅG='G]/¤p;piyܑ/(]m (WؙcTo|^Lq*GBWH;Nzo6gh/ GΨ׹S+x2 !WXeKƧ1w>oMvud2LܙsϾ^yG~\'^%ȷW_vEGP%+…ա#O^~WYץ??ģ](^*'ʽo.}M%߾.{Q 1{uj7F?kyū|tW76Ow=뫞{s">:Ўp(5wkj/Z+u_G~m=K~uk>q_; KT)7z71%sx0U~?W_7+f7}cv;ѧ^?j)Ng2Ve]]O˟Q9c?1e&cw3yeG|GřEƉN*!y QSql}2Op0=?{w 4I{ h{daw^LJ# 6:d cMV'O3o:zYCxQ\ճ3Hٻ>{Wrr#4Puם+ȷ WZ $ yq赕/}o>c77~Z7߼w~?~-?/} >S{>xዾN/|>GȷE5+!lr\sc_#Y:_=}_ڏ}OO|ҹ{~g7ڷ]խ3Wg֩x{.ةCg?k^_^ϛҧb=ms _[_9"jY#"g5+O_뿷% +fa׽>t?Wmꗾu0GGOoY?~{?K7?O?KwF(9} y|;_{0;Wٹƿj|{u.>7K_t/?e._{ǾηOzOLJWّOo&zCi1ՃQ?sÒ$|]ӱQL*uD#)XbN Kog8|||~YT|_XļNa>U3d=S]~&|@vK'\r. +\n5zmEާP@z\I%a<zA䣃Q҄lr%HgGo:&iy":\n5WX5U 5Sl4EJC8yhoyQmGxaEzy@!EāCyidu H#eN:p#"-.d(9;~cRF g'ni R.w<2r3|ԫ>`dile7@fi-)3hCd @e -2rq G{~'D;`3krJ4uQഈy hEԥ߹:<Vòbu(~PlB(~Gdi4o-ʎmȰ_` ~S [`浼0ڋϫL[+]Ai5gݞ傐Jw2!6Y귥-_|a27/ޱegr2<<&Lj:g+u04AUh0<l҉I4*VXKv:if0rVbh3ء " X2u߶۸nx`lblj 4#Ffw%)"A66;Ann(:đ)I =A?Em3#zUJo.Ym|GCWOpS?19Uߎc凖V3;wlSW˰剬n8|@1jyrdbaJVQ@"+Zuf #q'-Xh☓΀SOќṣ Nk+EfgMMъx!&$Q%,QaQj|A#h7ۥfH݈(*RAm5/cBSD3[wD--ir(x,Hj)n]? 0ťl@,WF=+69>Xd;Z '#Ī2Gn%1"k3-Q hh3赛2 V^:w^F[`t6+Z`F dCA }d$oC"QnE ˘%\afED{f7DTϨ K"OQbxWTNW̚[ΰSc*ˠu?7TVԺd B߰p 8ٖ2&IԠ\Ob_"Lli=n`P6Fy%N+TdRiX'[L"8`TRmqb0H?C$Ttİ}hhXņ2,d+R4\FPM~4*y@T`e'{^-[PHW?= FHi-`iӰұ#@vUn{ݍPi/1tAHPZj|q.i֙Ƃa$ʠb]Ț̻l~youMHVUw-j`TM)! fV66A!l!rOZTi.搸`G^3spW+eZg-]uhJ{)(GbܾUl*4N[UNS ,}Q;A0t\@,2VPF˴",*⯟*2[= hV*cŒ8UyK\Dnrq,m7P-2f_Yj(MK.+_J&zil & nxa:ĠN$.?y6FLOOD |w$g5kv\le᳔GJ $ uVe_bQ}HZmUwd(T+ɓcb ֭`ˊX&6;*c?ɰز U)" ҰuiHͮnRp R-Tw^wd_+ C(\g /O2I29-2G?Jl(rE!Z$^dr`?j`&^*x^QRxZ*EIt1$&{R)^lLK o̽Rq~ Fx q܁'ݙ$W4'3K Q|'z,~'KpH;i@aG?-M95#M:d%PιϩLMMY:pnYwm>'e ~p)ֶPҢɈd/b(jC17+';\5ݟLfųAR>E5mz̀BoGv@. ɢ} 갊f_\XApVoMXm%c:uwkɨ^#V?0w5u~{ak,NFT}S"]myPFe5./. _&5VJ9 ®`:8 '#}c_ljDuiy4º:KJߢ&9Do>pI*=̦r ):FgP4 C#VN ˢ22 46lA,&8t*oc3 A#Yezo r:lKMήe!<h1ȄDW֠.rȑYiB?ǞO|ޒ:69>iMs[>.d Ji<7`[.xrՙQ#ҹsDWi[//WVk+ Ojml\]#Ojc5~quy;7'qai\}yNagή94F8X?#bî)\Ah^C KJPS9ӆ$MW? @PY (-&FmFu֝Yj;ts-! Y 9 0Emu~YoP`R0`Զ5XT܏d t-Q$I2rMu2W-lJl>Z=*Y <@RTM1bvHGWr-92ꉪפ3*y}2 VLm s4ŀ2JYl>ȸx-d,ܦJ|OZ&n -OeV2)S-+D%^ZE [UM"3ljc/qr"rB//,[VkV8*ꑿ΃3/wR'DID?'sN>^R|Rdp+ZC|4PQ\\)w5'_U`5 6%+`` ؄l"ӝ4DQ.fB^]_W㋰/&tǗ82Ѧ2@M%YX"91n7D:˨EFti:f M~Suڐ[:^K^vXQh[K%'h"@ lzp#X/3H8GmHqzRbjHl6*E<+W13X^ih{Tjp[NUS!U6UyT 3R̤͡K ݇M;YkC):5:^+W+x@L58{]KAiP̞eQhÏGy9 V Y^\8́r;^t斝gD1 TS@zͭMb'EڡRȩU]} `]obUDhl=(AFEɦ)_s:Iȫf-MQ4C&/۝ULb6Fv;n[q\qX,Yʪ'kɱKdL4!d1Yʥ Y$r7&s}HfY.]DU @Rh'碚 IZWO$< !M1R()LLyP!LYTႂV#IGk0eO^$+Fos=>$l͊ӡZ%)n*Šp#3F! o?>kfF:F׼pW*R6F::s]Ҁ?W@8l >k"UJ =&i78&ΰ̈ϗ<@VeT M< o-m^~3noM-yYChF2uW_e{d(3d 6>uWx 8Gl(xz)MC7UAJ 33T"qʜN@fҟp <.9/Jѓ_AHƫ߁²JWUع1^2yû6f?g("ʲ_q&wHK`8{QTs$g+uLDhISТybmٶX԰<I1Ɛڍf``E0bXȧa ̨ "[D*x&z딑o`eLȃګj,Hj\VoXV[p# Z;3LEљDu ? GYY^N"HES-խD '́H"ImpV)xoeX447^Wu}§g8쉇E= w]N~^_ 񤦳15|Aw-Q1fcLNU %}">fVS-He4xM=cma-ߠ˜0 ]gy'l|?=W;l#[0dKJȀEM?ȼgd(q5Ey 3aAd [`{.U+ j)鳿QH\fmiFi)8gvgH~I+u@%yB>نQ` )!s+J]8tZያXO\Wt&j݅oK7f܅%t|g#GC6wȅW0_6O8)\hMGE8UDɾ .U+FdݝYҼ+i3J?e}j T=tLrm1'/k2a]thX{dEŊQ ψZ?w~5dCm }bɮ!կ7m$ZQlHBvYӻ0=c UbhcwS WW/ 1h'_s9NHϠwGiG']g(R8{"(SծB),*hJ/X;Y4qv" v2IO\`>qҢ |;vo2mN3Q$$%Fauۀ/$@M 9CiW g9|ebGQ~[; U*XaU1 8Qge0aD\VŜfFWanc@H_v$cGs29~2glƎhVNlX.L(//nH ,b`6<=occS-o8tLYgrq`VTsᤌP ;4ru5:24MN?׼xldCO]rxq4E\f1o;۽p(Cl)=Yd!QvN/|EzB"M?bl1̐QBO63a ciE,7x"jĎ57A)bqntZD0&\  q$Fh%HQ͆@pѕMUK4I%D+%t3@h %\W+2) ZMs.A2KUjl_Ujb_&R9{ƖKAA!^nh *2{JSnAX'-\#E(nVn)#GE! A2Jq>k.3 d3W8ǝjb]f&dx ϐ)El4S(ꄬ_X](}z"Kլ}dI_/s٨f CC;>bF K C.P;4U{׹滦YayJljcV ݦÈƅ*}|Cx^%.GFCdd њHÁɻFv<^xN:o[jmy;tdh_F""ip%G)8=SJX&x{p?VH>Ca!|m6z_@m 6*" imG(t PNdMZȷ%k.9Zr,KN\,%nI #0/N_GzQx0'wZ dz~s=XsuK)Yv~Ľ$+Ͳ?퐈odܣuCC:o;ܠ› 636f7ۙ+3FŤl;Pj@obg7Ex.z;GsD@oFdp{Vc; B&Sf|$}й|ERӛhq9_e־[mr aBVplܥ(FCSAԃ̫cîvOTe9 P]ޫ&VߊX9T@AߤCEa21)kG\Xu>[ vc+0@$|/87 NH۸)9B(.);K:bṯd5}@!-fƱfG)} 2c\bkhYKO)MF4ucsJ-GE1ٔ.j|7&ލ+/O& ;8~lx1:x •o+[hT!5er;u5?i'4| em-APޏrR%W=D-VdkwXY=(e;UJv=TG+&;|AWshVYiKG6茏D `9␫!^_bUih5lUD3.ZPo+2W7E^{݇6vR_ˌVA'Qh]nt|o hlg[)E_ml7.xd[Fv;:zҀ>29Bhk#9\]eܸJJ`,1 / 72k 6kUȭ䡼׀\ξ,6h$5çp)|+1'i]]&'g H"|ۥaR{-=yNvZٝ+ מN.!]FОE]ɺ1*GB[Ƒ $dqj~raH\y"0DGJH>p;-S?, g.у]ø-W0nW amdxG~WBzc=4IQ |5Eۆ%-(Cެ<#ۗeopEaFסx"NWIF42eO!Cɯ8JоmmF@vwyFːBP`2)`ZKIdCൗOMh9& \"}SrHLa/AM?KBճ},iALQb 3MbRޮO^~b>g'b K](غuLnUuP&M<7ts4Lhreޤ3꨹&5q\|JFcX q&ȡCgayb46w{l1E1Cʔ7/n͉Wq6XUs!"iuuz"WgV)f>񖲛[Y^b6hM9V p^&Sl0BzEr%φ)ug",ML,eAAK?-]B~#I<@Jd ֝wgk)ұt9m*A1ԽcX1Š#} bF/ot躡{XI\۴G `FS},.Wb`%bU7fRMn!$%NøEt">$ AkF=\'r)T|РK+\7AVR;.gcNKV() LPӦR';MJaQ\C3cdTjyJF ("c`,-GM&IĖ*(rFJ!Q4x@ diԚd5ːv =- @(xKGBﰳF]ahKnCІq`v?y"'m6]>z- MǻBnmask+s W!L>#Q0ӆHp#% ȗDm]KxqXc aΣamبHb!̆*wXbm~nGUkV!qr7rZ> jmE:Qc(1q΢6f2 fNբ18g*^OC3 ÍqZBU0Shti|Wԓ443 [l 7mˏxC [};އi,e2lWZ7jҦv+2bВi(3iJ ;e{j2P!NґtD9oA:֊B&IYR[`f4ynA&*noT[9bhoutM^= ,3'*$(ۢW T~Ryy`|Mw _R܃w\5F=D&Q"~>rI]h 3)\vMb?@]ad [Zc%مŅŇXYV6 ppnQo ]8qc?]_QO:2BR,r[9iZezXksF__fXjZO&WO&N3mi^,)DHrd-.,be[ tβ*$O"ĴGD4=;#ĘWm9F3v(v^89#|"TY;޺PM9 dqV.]~kYݗiy*N)Ӧf *NxheB.[cZȠ$TPrh޸SHS(ZP?,3 q>.̳ ZFGA©v ~3?>{ꇾ,C?69̛fSF^ FI9cŭ lP*>5R+GaE?:]/:\yy 4FxKYNĔ;?F}"^,j3LJUzu c͔kDr:9|fE aHnJˈۙ7Faä́f/ל4 ^Byiɛpik3:\.ҥR(Ytme8/|vÜg>r6MdlaOerl—(Uu\$Y! AN/ā;Lbf! _@8 ̋fiۺ Ӥ Ha ]e*f0N{%^W$[~ s7>0`="z,kP\#OPZq7ᩴصVE/Fh2P5. 4\v)PWNqPC_h+0xH7 IxHU zSgLK/qӖħr0%$HϳK/ $`g>wX 4ENPUkHZE1ɂd;x\Ei඾=*qL2< hcߎEKH=kB\Ycj8LBn渝Cxܯn&[ f UsP9ܦ[MfuP:`-9Elٖ>wPڬxuiIX :Uf2M -CwɔoBPD)8H3ڑ6SPzeI'Qh.9Џ,?P?(~|-c2D#DG\MbL(,x(v(cLwu8'WT:lc rGGѿhzM葉rˡ !W6[j]<^ޠ}:bce'm@R7@կ]FM&K=h{׸ Z?PNf¤s^W68Z^KKڿv 3kfnag0)b:4`^%fGPuݝe8uZ-m>(̶UVdn!l4wVS* dG99|N9;iaLB2~IA]>7$+@yBU^UAYKͫLyׇ6٧" =y׵C_Ą\ ,\NbTA^bl2r t <ێCʮƊ(AmLsu:`us &JsvML{ RrATħ=t>:3Bm-RVrlzui * xMsBVXQ*ˇL"D nݢȠQoӞUx nC0M7 jhNR7gnгq1UtȒ8/cv׽% OաvYlf˚&J~Y9,tvV2Ut[gáLQv|k'M",ޤXD t|3Q25`'rlSHV,4s]2uɸ%k^w zhܓݦ3yTख़% Ϣޮ7~3U;П0d՞S_fntOWEqf9tɨKAtԅ=4q|*TeRCEgdM".B%3UF|GicniSToj>_fȼɷEJ@Eٵag/3.&0]AgmD79 "Gsa cN\RKȲ _5,K2;+u L!~Mt +!<刅zqxٲkfXX|d` @ %M DlJmetadata.gz0000644000000000000000000000146300000000000013405 0ustar00wheelwheel00000000000000KUo0_a h&&44D/ucENrML;k9;I6g:|1xdE#7ec>K ͮz>.gUu1>QƳbe{J& o6ϷWo>]=,]hfqӣXsU:.]t}j۲7P7qŊo ?\;'!jt7p,qlI09v6 NvВͧܵDmVUv{ҙ6/.|D% i0vDZ,!|;$D-ַM/E5*޲gVɴ`Lj`C Ҙ&2:gHV#BaRq;{ \߽^@j hhɉQy)yhx prll~,^ZǗu+Y85 ?% N4/Nd [cm]0M,SƠ#8qEFTv9o6⑃:$mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/info/000077500000000000000000000000001446701454400235605ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/info/hufflepuf.compact000066400000000000000000000005751446701454400271230ustar00rootroot00000000000000--- 0.1.0 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd 0.1.0-universal-java-1.5 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd 0.2.0-universal-java-1.5 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd 0.2.0-x86-mswin32-60 |checksum:d795f48c5a3d879f11aff4557c10956b87d58917b59928170e137381cf447dfd mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/info/psych.compact000066400000000000000000000316041446701454400262620ustar00rootroot00000000000000--- 1.1.0 |checksum:d324d5d1fcf293f45cc8c3d23edb2aac2651bf6de5adc665ffe47e6aed064f34,ruby:>= 1.9.2 1.1.1 |checksum:97d159dc4735ed28a73c26d9aa2fe488addd1c075081d2ae43b260ce6ad0e761,ruby:>= 1.9.2 1.2.0 |checksum:dea2772eba66af409ed35f176a731d13260f71737c889322aabeb44aea0be047,ruby:>= 1.9.2 1.2.1 |checksum:c0318a5f932cf740c86ab8559533419ff749f242526d6131327332f6f613501a,ruby:>= 1.9.2 1.2.2.rc1 |checksum:5d90fb89fb5e10ae49a64dec5ecdad869d0f696de76c925deb5068a21a5830c5,ruby:>= 1.9.2,rubygems:> 1.3.1 1.2.2 |checksum:c028176ef403fa1eae6311d8d721b01cf59860b48a43fd2bed54e3ba7dfbc0d3,ruby:>= 1.9.2 1.3.0 |checksum:5a03572c69a92bcd01dfd3c196fda7ad823a5473c79c1f24db159608962414d0,ruby:>= 1.9.2 1.3.1 |checksum:c5b544915d804943ad666ed509fe48b06b33f00dcf2608a83b211491991a10a3,ruby:>= 1.9.2 1.3.2 |checksum:4cf1159b78f0142fa3f240919b60bd0d2a7d7cebe6afd84ed22b95e7683d42f4,ruby:>= 1.9.2 1.3.3 |checksum:8ee83fb9a40a83b2eb3aecdd3d455c2e856f8a492ef9983a67c2b62ba7e5d754,ruby:>= 1.9.2 1.3.4 |checksum:a4e4525592059522cc5bba44bd8223dabc29a47a7f48b9e51ce0203617f853b2,ruby:>= 1.9.2 2.0.0 |checksum:d394b18c83790e0a5ed95f5ed847bca178f0ba12a550da495cdcd8720592e708,ruby:>= 1.9.2 2.0.1 |checksum:2d85b6e9d167c668ff955ec9edd767e6f0075bf55847ec968ea49f4ef4114d7a,ruby:>= 1.9.2 2.0.2 |checksum:4bcb66a0159aff5d8c4c91cfac789dde532f952611c41ef11b44d9679498f88c,ruby:>= 1.9.2 2.0.3 |checksum:b4039e3e0aa465aafb83163b300f1564309a4d6b5806568edadf6177837a163e,ruby:>= 1.9.2 2.0.4 |checksum:39ce00d0649cd3fbb3f87d3dc4b7ecd01dc8ffd84173a33963d0f55f7942eb2f,ruby:>= 1.9.2 2.0.5 |checksum:4f8458fbf1628df11e973d62a1ca7d3817a3bb11214aadc984d8caf9c05ec55e,ruby:>= 1.9.2 2.0.6 |checksum:dd3d8662d682e771bc2205b44de7e241c30869eca8395a02776aca878d678d00,ruby:>= 1.9.2 2.0.7 |checksum:093ffdd8ec8deda3006c4b255005ac85be19b8ed120836040bf58d8656da326f,ruby:>= 1.9.2 2.0.8 |checksum:0dcaf5c3c5c34ad7389079240723f9e2fa28924b358a2fdb862b7ed3c11d8116,ruby:>= 1.9.2 2.0.9 |checksum:3e32440c4262e421a7b0c23cf1739530ed152f8da191ecf0c8245be3923f3ce6,ruby:>= 1.9.2 2.0.10 |checksum:69c10325171ffba7d5b2669bc84519804c0a4498dad8bf08f149a1bd2642f21e,ruby:>= 1.9.2 2.0.11 |checksum:9a0f04a59098c7a16495f03d88421bf2edf9067f2a37c4026bb82eb069ef465e,ruby:>= 1.9.2 2.0.12 |checksum:879990cb62844898fec506f1aa7012ddb87c55ce8f7bbc89fc607e2ff638aa87,ruby:>= 1.9.2 2.0.13 |checksum:731e44df80f1fbe28b7d753830b138f2100c7cb9ff52137a061c151af474fdb5,ruby:>= 1.9.2 2.0.14.pre1-java jar-dependencies:>= 0.1.7|checksum:f33e7cff27d4bc21bb5e181c255159f9a3cb05f1b7e0cebc967637c3766bd796,ruby:>= 1.9.2,rubygems:> 1.3.1 2.0.14 |checksum:5a10f4110ab3fed7f78911fdbb9986fc023e8c1a3d025cac1467b1da758d3086,ruby:>= 1.9.2 2.0.14-java jar-dependencies:>= 0.1.7|checksum:7b2848f2259873c1347d3f5c8071bfd335287472313b6e365af1873327468ab6,ruby:>= 1.9.2 2.0.15 |checksum:ac7afd35a2e6ec6eef08a3c7b5e1127be20e6521b4c8346988acd3d46548982f,ruby:>= 1.9.2 2.0.15-java jar-dependencies:>= 0.1.7|checksum:60a72ea1bc1ebfc4886eb8caca5ea09fe21441fd087b7e2af7aa9f0564fc9db8,ruby:>= 1.9.2 2.0.16 |checksum:17e2e26295571de42a494e3cd74f7d0d8990e87defe5b1c4a1a3f958c26a1d5d,ruby:>= 1.9.2 2.0.16-java jar-dependencies:>= 0.1.7|checksum:188f700136ea3854a627d4151654601daf641c4db103b6dfcd901846ebc7fc0d,ruby:>= 1.9.2 2.0.17 |checksum:e85529ced4f91728a63c945f8bdf5206e71fc3192b9ac0e7ba251dbf0d398513,ruby:>= 1.9.2 2.0.17-java jar-dependencies:>= 0.1.7|checksum:ca0587385301145f528baa8311a956c9db575237bf4d743557b678e3f2e3bf58,ruby:>= 1.9.2 2.1.0 |checksum:92bf0d9bd47e4fafc74f6fad89e207f21348878c201ac36967ec587526d3dde9,ruby:>= 1.9.2 2.1.0-java jar-dependencies:>= 0.1.7|checksum:18acf02957c7d0dead47954c2524fda308d9ebf6dfc02c2f47c32c0220be8b34,ruby:>= 1.9.2 2.1.1 |checksum:5e448c008cc3da4fdc32bc2163a2cba851d1510469a59ef8c7735787bdef0d03,ruby:>= 1.9.2 2.1.1-java jar-dependencies:>= 0.1.7|checksum:443591275ae686e4bb656074c733bbced42ee104529e194567f243fa40da00b1,ruby:>= 1.9.2 2.2.0 |checksum:291fedab5e36e072322b8d57c98a6c3a9f1a35b5576a7d51eb55ccd41482a723,ruby:>= 1.9.2 2.2.0-java jar-dependencies:>= 0.1.7|checksum:78df0b96c61ccf5559be69c0f1a4876191595b8c3f63659f5f42049f78de52fb,ruby:>= 1.9.2 2.2.1 |checksum:a3694d16c426b7d49670dc18c05f3697b1a365db3953297aba8dec335c77a823,ruby:>= 1.9.2 2.2.1-java jar-dependencies:>= 0.1.7|checksum:6f9337f75a33b091a014d62dfbcbd00e257d01aeff92cea4c22ab3338c178e93,ruby:>= 1.9.2 2.2.2 |checksum:fe2b5ad9e8e58f28921a76de5808a8bb828a13a3daa0942f2e8c073f46d54175,ruby:>= 1.9.2 2.2.2-java jar-dependencies:>= 0.1.7|checksum:82a4f81b863b035d28cdfaa803fca4c5018022f7458dedc91cd2ddc0785100da,ruby:>= 1.9.2 2.2.3 |checksum:93214f74a5f4ac40c3c74a953111453777986e3ed3151f552c6010ebffb724b2,ruby:>= 1.9.2 2.2.3-java jar-dependencies:>= 0.1.7|checksum:b500bcf23703d4dc12787093553b79978349f90f4b382dc2733c608f1899eec2,ruby:>= 1.9.2 2.2.4 |checksum:ead57d2c55c6a691efa52f068f16be04a2a56b8fd0b5fb1a80b1e3699401ced7,ruby:>= 1.9.2 2.2.4-java jar-dependencies:>= 0.1.7|checksum:37ee70e7573d871fbccbe448457202b56c69ac331f3017d4d3f50d87500199fd,ruby:>= 1.9.2 3.0.0.beta2 |checksum:78a19ffb6c42039c53e06f7188bbd54108e4a44a35db42d16bbeef80049a6df6,ruby:>= 1.9.2 3.0.0.beta2-java jar-dependencies:>= 0.1.7|checksum:1c47b1b872e659453048533d2f5e8c395ea76f25888f616c5237305faeed7e86,ruby:>= 1.9.2 3.0.0.beta2-x86-mingw32 |checksum:d4723578b502bbd7c355503beb24800a8240cf5d271b6e69365ce9eb6dbd6e60,ruby:< 2.5&>= 2.2 3.0.0.beta2-x64-mingw32 |checksum:c09a8f18b0fab95097a19079acc12d7f8264c36b074a3fb94b70f580ea283aea,ruby:< 2.5&>= 2.2 3.0.0.beta3 |checksum:64fa0e8b707fe875a9ec4f5a480e3b45828a9f75cab50ad67fd063b09eb95d45,ruby:>= 1.9.2 3.0.0.beta3-java jar-dependencies:>= 0.1.7|checksum:bede239c1f77a60a5190bf3a3654dc455359b77441d5bce6a8768084d55e70b5,ruby:>= 1.9.2 3.0.0.beta3-x64-mingw32 |checksum:10edd472c1aefcb739fd6e89163a744651cd22703409149882acc4b7ffeea7a2,ruby:< 2.5&>= 2.2 3.0.0.beta3-x86-mingw32 |checksum:ac667fc18f10c605eda2da4154f105ee4bf6bafbe1bfa370ee1dcc0ea53db624,ruby:< 2.5&>= 2.2 3.0.0.beta4 |checksum:d20492d3fa880efddb52fea74ead9e52a596de5f0c211e21e3b362a8985959af,ruby:>= 1.9.2 3.0.0.beta4-java jar-dependencies:>= 0.1.7|checksum:17ee095aadb3a92cb42dab47bbc242289215f505fd3e6ab7c8adeecf0ceb1a50,ruby:>= 1.9.2 3.0.2 |checksum:afa73d8022238ed8d1f67ed7b8a1f2ea42174e9e7e5e62ad93bea8effecf3e3d,ruby:>= 2.2.2 3.0.2-java jar-dependencies:>= 0.1.7|checksum:3a5531f63d72df41762dccac3bc6723cceea123accdbca33b6f32b5287c34705,ruby:>= 2.2.2 3.0.2-x64-mingw32 |checksum:7202ae636e49c3ed407a1b312c0f2c073e79701fc550b9b3a447fced98ff62a3,ruby:< 2.5&>= 2.2 3.0.2-x86-mingw32 |checksum:bade629592fc3198bd974f6f08b67ac0bde9c6693631b4f881861dbaebb35540,ruby:< 2.5&>= 2.2 3.0.3.pre1-java jar-dependencies:>= 0.1.7|checksum:47938ebbbf331cc9d0b927a28d7411f2756a510303a687eede652605d99ec4d7,ruby:>= 2.2.2 3.0.3.pre1 |checksum:e438011cfb0668e5282308a57d620d90f3bac9aaa74cb9c2ef2775db7c41d4a4,ruby:>= 2.2.2 3.0.3.pre2 |checksum:1597fd576102289bab2a8c09127fb4c597c482c9173ada054438fbc67f1e2552,ruby:>= 2.2.2 3.0.3.pre2-java jar-dependencies:>= 0.1.7|checksum:43a8f9d5cfc3c13c4de18b5a358672e3473606f51ac07dcf9860c6ce8fb98fcf,ruby:>= 2.2.2 3.0.3.pre2-x64-mingw32 |checksum:c6dbfe119804ddb45746a695b86c974ee2833a2aa5e9d28668af9cec1dc07e99,ruby:< 2.5&>= 2.2 3.0.3.pre2-x86-mingw32 |checksum:55fa54e4055373d296fed4c6d32ee3771269bf04e3947bb440ed3b86968bc3f4,ruby:< 2.5&>= 2.2 3.0.3.pre3 |checksum:935e0cd4bdb2d1cac31dda1ebed0f1c6449fbf40294601a7829744f75cc96e84,ruby:>= 2.2.2 3.0.3.pre3-java jar-dependencies:>= 0.1.7|checksum:a59605b3f86edffa30e6f208521589505a18ef0829561d88511ef8bde53442cb,ruby:>= 2.2.2 3.0.3.pre3-x64-mingw32 |checksum:371b1fcf37c56856dbf124b8497fdbc55a7b619c7545abf56b26dd3fe326fe6d,ruby:< 2.5&>= 2.2 3.0.3.pre4-java jar-dependencies:>= 0.1.7|checksum:24e655b9cc196649d76ff41e696460eb2d1222348e2f24d973bb892c86af63de,ruby:>= 2.2.2 3.0.3.pre5-java jar-dependencies:>= 0.1.7|checksum:5b115280af0d2176c186517ba3ae1518814f056841b4117ff4a613b73214de09,ruby:>= 2.2.2 3.0.3-java jar-dependencies:>= 0.1.7|checksum:b27ced88e52c1a50b0ecb831ce6a05129b1ddd46a8722517ef6a1af32ae235d8,ruby:>= 2.2.2 3.0.3 |checksum:ea006cf47bf92229d5972b7225c253c751b8fed17538d099b0e1a32be6d066c8,ruby:>= 2.2.2 3.0.3-x64-mingw32 |checksum:1457595ee9709644f1af12a7125b1ca1f3ee53190fa5d66aac759090e903663b,ruby:< 2.5&>= 2.2 3.0.3-x86-mingw32 |checksum:658a41d92547f3ff0161f4b8cf436b95c72da47ef7429ec42af3386b6b69020e,ruby:< 2.5&>= 2.2 3.1.0 |checksum:a858cf8d4bc636fd6dc635131c4df24d25da910278a873a0fbe4927d17155b26,ruby:>= 2.2.2 3.1.0-java jar-dependencies:>= 0.1.7|checksum:911e98a580860dca16fb73ec59114a684ce89a34815a01de455077313c68f205,ruby:>= 2.2.2 3.1.0-x64-mingw32 |checksum:460ad06ecea53316c4ed27c54720e51bc1d973eefe09de3faf4e10d4311ebdd5,ruby:< 2.6&>= 2.3 3.1.0-x86-mingw32 |checksum:2453109c60cd74c097d4570043c6c1c8ebf3161fc437672e585d88b690cd91c7,ruby:< 2.6&>= 2.3 3.2.0 |checksum:b896027249300cbc15e03c64a28fef6983458c572306bb86326d27394faf8e39,ruby:>= 2.4.0 3.2.0-java jar-dependencies:>= 0.1.7|checksum:79ab89dddecaf03828922068035d2dac61a648f79b182648523dd027151c292e,ruby:>= 2.4.0 3.2.1 |checksum:0236a5b255e0a26ca9c640e3422c13d17dca72afd4aa68109be09c410a67805f,ruby:>= 2.4.0 3.2.1-java jar-dependencies:>= 0.1.7|checksum:7f3427f44d7361c309bfa140446f2d52658bb5334d5e5471727c34831efb48e0,ruby:>= 2.4.0 3.3.0 |checksum:14c0a2e194ae1b1c1ca96b10b4e8c36af1642dbf4fef25a6518d9b47706a1965,ruby:>= 2.4.0 3.3.0-java jar-dependencies:>= 0.1.7|checksum:8308aa5998667aba6fd4636ded57c5d0dc47bdcb9c4d9be4ef134d3e75428612,ruby:>= 2.4.0 3.3.1 |checksum:2a01e5eb59b1a80d287f0b5e3c980eca5e5609c811eb7f7ee0f7564254dac48a,ruby:>= 2.4.0 3.3.1-java jar-dependencies:>= 0.1.7|checksum:de1c962898f84b925e207a163b8b6e9fe7c00d59ff39dbb5d545d4b1d5fb49e8,ruby:>= 2.4.0 3.3.2 |checksum:c56a258f2382ec8809119c26e0c10b8f5859bfe1fef8abb263901075a7e52a82,ruby:>= 2.4.0 3.3.2-java jar-dependencies:>= 0.1.7|checksum:92efa6eaaf14d4d5a1ad3f57f803b7d23305755cd8cd9e272fa3fba16daa6a4b,ruby:>= 2.4.0 4.0.0 |checksum:08603aba1fb1974de3e8353016d5a12e0300a6a801bd63fd786369d43a78dcd0,ruby:>= 2.4.0 4.0.0-java jar-dependencies:>= 0.1.7|checksum:23438e71005f076573f9b9cd99543eb3bcba4c52ac560c49fade26823cec92c3,ruby:>= 2.4.0 4.0.1 |checksum:eda0eeb95da45986e9086b07c8ea269104035be956dc3bf6e8ab5a9905dee5c5,ruby:>= 2.4.0 4.0.1-java jar-dependencies:>= 0.1.7|checksum:c0b636ae2ee8cface0a5718f93f3b220d03e9c45d235ae0316b90dcc8ff30ce1,ruby:>= 2.4.0 4.0.2 |checksum:99e5a57d01eefbb7f9e9266ed9a9960cb9c2cfed77028fec0a3cfc08f11d64af,ruby:>= 2.4.0 4.0.2-java jar-dependencies:>= 0.1.7|checksum:7e8ee809bcfaf896ffcf945fda931b6be8d7783439e70e87c67000be119e3947,ruby:>= 2.4.0 4.0.3 stringio:>= 0|checksum:c75238c1a201c37249a5403c23442ce0647d5a5632306856c5d85a5db227fa99,ruby:>= 2.4.0 4.0.3-java jar-dependencies:>= 0.1.7|checksum:4a6bf752fa70bf481419387c1bc2e6f9a735f878b1fe666df6c6b58f24fea969,ruby:>= 2.4.0 4.0.4 stringio:>= 0|checksum:82fbfc7c10caf87aeae9d7010574db2de4f8f0463e76a184cb83d85907f85430,ruby:>= 2.4.0 4.0.4-java jar-dependencies:>= 0.1.7|checksum:1ceb672d703af0742367e98291dc118cbd1aec82bc3231d94ac850f19271898e,ruby:>= 2.4.0 4.0.5 stringio:>= 0|checksum:1ca8744356fcf6e2caa40c84c0160867c6537b6423b6b8e85fef2ea102a2cdab,ruby:>= 2.4.0 4.0.5-java jar-dependencies:>= 0.1.7|checksum:081c716e8a07661896392d053e2b9067b14f0bfbd823e70814d2fc0b884c31ff,ruby:>= 2.4.0 3.3.3 |checksum:20aba2cbb1c08b168ed7ba6dfb98ce3921605c18e46dfbb28d3cee4277673fa6,ruby:>= 2.4.0 3.3.3-java jar-dependencies:>= 0.1.7|checksum:df479b898141024723f9437a2cf558b9ff52f1c62fb445da8b8d91c0448c6207,ruby:>= 2.4.0 3.3.4 |checksum:f0aae8574d0c86b711472e6a57cc036655e2549f02390ca7266f3b6d1814d1a0,ruby:>= 2.4.0 3.3.4-java jar-dependencies:>= 0.1.7|checksum:9bb77527613d89575871b7a4e535dd2fce9674ffda46033f42c7ee85ad84358d,ruby:>= 2.4.0 4.0.6 stringio:>= 0|checksum:f70425c3dca8d8fbe4c1de7270d921e35eb6eb44cf2b2e4f961dc8031330b876,ruby:>= 2.4.0 4.0.6-java jar-dependencies:>= 0.1.7|checksum:78f8708f8b139ee9b258c2f51b4d55dcccc8e7f567f728ba2f9868685bec8623,ruby:>= 2.4.0 5.0.0 stringio:>= 0|checksum:fe1b31d87cb899443cda72e2ed8fc372578dc0cd4442c9ec270ae3d8d1fab747,ruby:>= 2.4.0 5.0.0-java jar-dependencies:>= 0.1.7|checksum:842f121c03f7a4f72b4f328106a54e7a449652d3877a9837e5c743cd26dc62c5,ruby:>= 2.4.0 5.0.1 stringio:>= 0|checksum:43264252cc33b8e626fb940cddc7379d00f7583500680da32c74a54bd9b000d0,ruby:>= 2.4.0 5.0.1-java jar-dependencies:>= 0.1.7|checksum:c4a94895e325d326063f9d53f5e4f231a5df3a6e593ce9563d19b35fe11f800d,ruby:>= 2.4.0 5.0.2.pre1 stringio:>= 0|checksum:42c463a379cccbd94a881da63e87bac710d85d804db2b04951a09735f5bd7d91,ruby:>= 2.4.0 5.0.2 stringio:>= 0|checksum:f7a9ab55191c6c04eaef84c804f2e6c6d9eeafc5f37a35d388d15c4c76165432,ruby:>= 2.4.0 5.0.2-java jar-dependencies:>= 0.1.7|checksum:ff0e49f36964b33d965e2d3fd7af9b940bcdee5dd659b4206baad218c8d80c5b,ruby:>= 2.4.0 5.1.0.pre1-java jar-dependencies:>= 0.1.7|checksum:515acf3a71f6eb8ab041c0508c4e510e95cdc9c12fc7c585422c16c0baa28d76,ruby:>= 2.4.0 5.1.0.pre1 stringio:>= 0|checksum:b7b470045ad149ea48272b532d414b8ca01fcf60407e500bae7f7dd0b293180c,ruby:>= 2.4.0 5.1.0 stringio:>= 0|checksum:7f17a4c4d89eed786eac4a122cd1a7092679c524d2576d9e0e6d6452d6aa4ad7,ruby:>= 2.4.0 5.1.0-java jar-dependencies:>= 0.1.7|checksum:c1e1d90017d0bd8735ac55dcd9ef0007c414eabc2633972d05de66698bd471da,ruby:>= 2.4.0 mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/info/zip.compact000066400000000000000000000001251446701454400257300ustar00rootroot00000000000000--- 2.0.2 |checksum:a129a9c8977c9a1f3600593ead89d085ad171e8d3fa91e647d80b04b294ec0a5 mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/latest_specs.4.8.gz000066400000000000000000000002321446701454400261650ustar00rootroot00000000000000cT(MKI-(Mcbs tO͵ K-*ϋfT233`fT,*M2ݢ9C٠F0yҼ2ݬIJD]C=SHpnnqyfDS*Ć4N$ ҋ mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/prerelease_specs.4.8.gz000066400000000000000000000001201446701454400270140ustar00rootroot00000000000000cfT((Jebs tO͵ K-*ϋfT733KJ-IdfT,*M2=>mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/000077500000000000000000000000001446701454400237415ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/000077500000000000000000000000001446701454400256405ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/h/000077500000000000000000000000001446701454400260675ustar00rootroot00000000000000hufflepuf-0.1.0-universal-java-1.5.gemspec.rz000066400000000000000000000005161446701454400356550ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/hx}MK0U&(azE{RA}~0[?S4 ňqЕ%!R;0td-݂hxX0o`ZÍ^4@r^oq60-PG*}1:)h ȋx {N'7U-H&bhIWFTR<,dJ,Mzlhufflepuf-0.2.0-universal-java-1.5.gemspec.rz000066400000000000000000000005211446701454400356520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/hx}K0ǫU&(hufflepuf-0.2.0-x86-mswin32-60.gemspec.rz000066400000000000000000000005161446701454400345760ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/hx}N0( W(T!WBP ,i-j;-!x6 'aa=-{1~*i gIS{a^\ F ڝۢX`%xP+mET"8Hsr%:J31HȄ* \13%U͢zјY(¤6Aۛzb j?u^_7S/&y6,N)E|En27,N]Z -221]X=%׀8q'^68uR@|x?Fmavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/p/000077500000000000000000000000001446701454400260775ustar00rootroot00000000000000psych-5.1.0.pre1-java.gemspec.rz000066400000000000000000000011541446701454400333720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/pxSQO@F$W!@HM_|%( (bB.l-3Wnyh}773q+8'%$%T3QL?V`+ 6켋X^$svS}L!`# D|ɷ)8s# {Y>xJ*HDgZl-7ɎK$p(1,g_j;- ^3i\kjGॆ-PP$C9IW2g$F%阉j i=u xNV6ku;Id%T#%SJ(Bm\\W-r%Se95!c5Jqe][VtD((ڈ}>BefTǜ=C5{j19p:4L9kAup[jKr}.DL >4f9f$"i#-HҲۄϽ+ 1R(#4%3hSXP"_Bb1x#A[)Sxmc!Yw팺HGzT`w¤z x~F=%!9?VHğmo?;mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/z/000077500000000000000000000000001446701454400261115ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/repo/quick/Marshal.4.8/z/zip-2.0.2.gemspec.rz000066400000000000000000000005471446701454400313550ustar00rootroot00000000000000xQMK@ l[Tʐ S^TM=&ٶl$* ?IS{,ΝT3Ke E:uj{>a76])[9=Jg>[8-lɧE9FrKR@6c`B0RD,A$ D22m3OKF*>pՖ1fe=_9`n*[ꗬC%'P^'<Ԫ"uSJG$d߸OaT!o`\ a hτ{΂= 3.1.0.0.1;F[I" bundler;TI" ~> 1.2;F{ ;I" jbundler;T;I" 0.5.4;T;I" ruby;F; [[I"ruby-maven;TI"< 3.1.2, >= 3.1.0.0.1;F[I" bundler;TI" ~> 1.2;F{ ;I" jbundler;T;I" 0.6.0;T;I" ruby;F; [[I"ruby-maven;TI"< 3.1.2, >= 3.1.1.0.6;F[I" bundler;TI" ~> 1.5;F[I"jar-dependencies;TI" ~> 0.0.4;Fmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/api/v1/dependencies/jbundler.ruby000066400000000000000000000007051446701454400334110ustar00rootroot00000000000000[{ : nameI" jbundler:ET: numberI" 0.5.0;T: platformI" ruby;F:dependencies[[I"ruby-maven;TI"< 3.1.1, >= 3.1.0.0.1;F[I" bundler;TI" ~> 1.2;F{ ;I" jbundler;T;I" 0.5.4;T;I" ruby;F; [[I"ruby-maven;TI"< 3.1.2, >= 3.1.0.0.1;F[I" bundler;TI" ~> 1.2;F{ ;I" jbundler;T;I" 0.6.0;T;I" ruby;F; [[I"ruby-maven;TI"< 3.1.2, >= 3.1.1.0.6;F[I" bundler;TI" ~> 1.5;F[I"jar-dependencies;TI" ~> 0.0.4;Fmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/gems/000077500000000000000000000000001446701454400261055ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/gems/n/000077500000000000000000000000001446701454400263425ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/gems/n/nexus-0.2.0.gem000066400000000000000000000070001446701454400306260ustar00rootroot00000000000000data.tar.gz0000644000000000000000000000004300000000000013314 0ustar00wheelwheel00000000000000Qb``T.metadata.gz0000644000000000000000000000167600000000000013413 0ustar00wheelwheel00000000000000QWK6WL| EIQ h cTȮ/J-e݅!%k7ߐ3tD36{m};^2˕@3xLF!i`ݢ&!$i~2D( :N6'`6J{r:(_+(΀>ˆq2ϿAP1K"$]6L_@dm}~"lAsjFԼ߫R-X 3@ \'K͆VN(5yl}OYwֈZEakJ&ӆ~;jc5EXۙ,knWD>6J2OEܣ =ˡq]F[f,q / W͹4 hLhI~":_]i5 W~y~KGd-=ddvԧ1 ѹBpA9=Jf46=>J&@(Ú`pKB˵&d#̠Ogg,"+?Jx=JD>@&6RqMґmm:$,&m:<6HfLjgѹvf gYj7׿vWAUs6ȼc*!A t̪ςsά o }&2rUo}^K$e?p΢8Di_09\J;ܪi o;`jP mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/latest_specs.4.8.gz000066400000000000000000000000401446701454400305070ustar00rootroot00000000000000]RKILITHLOhQ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/quick/000077500000000000000000000000001446701454400262665ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/quick/Marshal.4.8/000077500000000000000000000000001446701454400301655ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/quick/Marshal.4.8/h/000077500000000000000000000000001446701454400304145ustar00rootroot00000000000000httparty-2.gemspec000066400000000000000000000000251446701454400337150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/quick/Marshal.4.8/hbla bla not a gemspecmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/somefile000066400000000000000000000000061446701454400266740ustar00rootroot00000000000000blablamavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/broken/spec.4.8000066400000000000000000000000241446701454400263330ustar00rootroot00000000000000blabla no specs filemavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/000077500000000000000000000000001446701454400253255ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/do_mysql-0.10.12.gemspec.rz000066400000000000000000000006611446701454400317530ustar00rootroot00000000000000x}AK@NjHviEQĕ0AVv]Puwl2gB<,{+5d'$ ?jhR&DtN0<qC=5qS8OR>&Р!L`;twTI|BjOK=m'΀8įzPrFϣ0 ʥb]j-<T@ , Ӿ8;<` Q8k8L6j2`1Y*Xyrm<⿅TiXyꊂ*Ǚ h/uWb{VS^V/z{R|Bx7P"\Aӌ&:ՏCL#u9U\t۱;+l!M\ŭ*ƈC+ݡ'H%zv /{΅^{>^ -57mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/do_mysql.dump000066400000000000000000000221131446701454400300420ustar00rootroot00000000000000[U{ : nameI" do_mysql:ET: numberI" 0.10.12;T: platformI" ruby;T:dependencies[[I"data_objects;TI"= 0.10.12;T{ ;I" do_mysql;T;I" 0.10.12;T;I"x86-mswin32-60;T; [[I"data_objects;TI"= 0.10.12;T{ ;I" do_mysql;T;I" 0.10.12;T;I"x86-mingw32;T; [[I"data_objects;TI"= 0.10.12;T{ ;I" do_mysql;T;I" 0.10.12;T;I" java;T; [[I" do_jdbc;TI"= 0.10.12;T[I"jdbc-mysql;TI" >= 5.0.4;T[I"data_objects;TI"= 0.10.12;T{ ;I" do_mysql;T;I" 0.10.11;T;I" java;T; [[I" do_jdbc;TI"= 0.10.11;T[I"jdbc-mysql;TI" >= 5.0.4;T[I"data_objects;TI"= 0.10.11;T{ ;I" do_mysql;T;I" 0.10.11;T;I"x86-mingw32;T; [[I"data_objects;TI"= 0.10.11;T{ ;I" do_mysql;T;I" 0.10.11;T;I"x86-mswin32-60;T; [[I"data_objects;TI"= 0.10.11;T{ ;I" do_mysql;T;I" 0.10.11;T;I" ruby;T; [[I"data_objects;TI"= 0.10.11;T{ ;I" do_mysql;T;I" 0.10.2;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.2;T{ ;I" do_mysql;T;I" 0.10.4;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.4;T{ ;I" do_mysql;T;I" 0.9.12;T;I" java;T; [ [I"addressable;TI" ~> 2.0.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.9.12;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.9.12;T[I" rspec;TI" ~> 1.2.0;T{ ;I" do_mysql;T;I" 0.10.3;T;I" java;T; [[I"data_objects;TI" = 0.10.3;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.3;T{ ;I" do_mysql;T;I" 0.9.5;T;I" ruby;T; [[I"data_objects;TI" = 0.9.5;T[I"hoe;TI" >= 1.7.0;T{ ;I" do_mysql;T;I" 0.10.8;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.8;T{ ;I" do_mysql;T;I" 0.10.0;T;I" ruby;T; [[I"addressable;TI" ~> 2.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.10.0;T{ ;I" do_mysql;T;I" 0.10.3;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.3;T{ ;I" do_mysql;T;I" 0.2.2;T;I" ruby;T; [[I"data_objects;TI" > 0.0.0;T{ ;I" do_mysql;T;I"0.10.4.rc1;T;I" ruby;T; [[I"data_objects;TI"= 0.10.4.rc1;T{ ;I" do_mysql;T;I"0.10.4.rc1;T;I"x86-mswin32-60;T; [[I"data_objects;TI"= 0.10.4.rc1;T{ ;I" do_mysql;T;I" 0.10.0;T;I"x86-mswin32-60;T; [[I"addressable;TI" ~> 2.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.10.0;T{ ;I" do_mysql;T;I"0.10.4.rc2;T;I"x86-mswin32-60;T; [[I"data_objects;TI"= 0.10.4.rc2;T{ ;I" do_mysql;T;I"0.10.4.rc1;T;I" java;T; [[I"data_objects;TI"= 0.10.4.rc1;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI"= 0.10.4.rc1;T{ ;I" do_mysql;T;I" 0.10.1;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.1;T{ ;I" do_mysql;T;I" 0.10.8;T;I" java;T; [[I"data_objects;TI" = 0.10.8;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.8;T{ ;I" do_mysql;T;I" 0.10.6;T;I" ruby;T; [[I"data_objects;TI" = 0.10.6;T{ ;I" do_mysql;T;I" 0.2.4;T;I" ruby;T; [[I"data_objects;TI" <= 0.2.0;T{ ;I" do_mysql;T;I" 0.10.2;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.2;T{ ;I" do_mysql;T;I" 0.10.2;T;I" ruby;T; [[I"data_objects;TI" = 0.10.2;T{ ;I" do_mysql;T;I" 0.9.12;T;I" ruby;T; [ [I"addressable;TI" ~> 2.0.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.9.12;T[I" rspec;TI" ~> 1.2.0;T{ ;I" do_mysql;T;I" 0.9.11;T;I" ruby;T; [[I"data_objects;TI" = 0.9.11;T[I"hoe;TI" >= 1.8.2;T{ ;I" do_mysql;T;I" 0.10.1;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.1;T{ ;I" do_mysql;T;I" 0.10.5;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.5;T{ ;I" do_mysql;T;I" 0.10.3;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.3;T{ ;I" do_mysql;T;I" 0.10.2;T;I" java;T; [[I"data_objects;TI" = 0.10.2;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.2;T{ ;I" do_mysql;T;I" 0.9.3;T;I" ruby;T; [[I"data_objects;TI" = 0.9.3;T[I"hoe;TI" >= 1.7.0;T{ ;I" do_mysql;T;I"0.10.4.rc2;T;I"x86-mingw32;T; [[I"data_objects;TI"= 0.10.4.rc2;T{ ;I" do_mysql;T;I" 0.10.8;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.8;T{ ;I" do_mysql;T;I" 0.9.9;T;I" ruby;T; [[I"data_objects;TI" = 0.9.9;T[I"hoe;TI" >= 1.8.2;T{ ;I" do_mysql;T;I" 0.10.1;T;I" java;T; [[I"data_objects;TI" = 0.10.1;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.1;T{ ;I" do_mysql;T;I" 0.9.10.1;T;I" ruby;T; [[I"data_objects;TI"= 0.9.10.1;T[I"hoe;TI" >= 1.8.2;T{ ;I" do_mysql;T;I" 0.10.0;T;I" java;T; [ [I"addressable;TI" ~> 2.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.10.0;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.0;T{ ;I" do_mysql;T;I" 0.9.7;T;I" ruby;T; [[I"data_objects;TI" = 0.9.7;T[I"hoe;TI" >= 1.8.2;T{ ;I" do_mysql;T;I" 0.10.3;T;I" ruby;T; [[I"data_objects;TI" = 0.10.3;T{ ;I" do_mysql;T;I" 0.9.8;T;I" ruby;T; [[I"data_objects;TI" = 0.9.8;T[I"hoe;TI" >= 1.8.2;T{ ;I" do_mysql;T;I"0.10.4.rc2;T;I" ruby;T; [[I"data_objects;TI"= 0.10.4.rc2;T{ ;I" do_mysql;T;I" 0.2.1;T;I" ruby;T; [[I"data_objects;TI" > 0.0.0;T{ ;I" do_mysql;T;I" 0.10.5;T;I" ruby;T; [[I"data_objects;TI" = 0.10.5;T{ ;I" do_mysql;T;I"0.10.4.rc1;T;I"x86-mingw32;T; [[I"data_objects;TI"= 0.10.4.rc1;T{ ;I" do_mysql;T;I" 0.10.5;T;I" java;T; [[I"data_objects;TI" = 0.10.5;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.5;T{ ;I" do_mysql;T;I" 0.10.9;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.9;T{ ;I" do_mysql;T;I" 0.10.9;T;I" java;T; [[I"data_objects;TI" = 0.10.9;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.9;T{ ;I" do_mysql;T;I" 0.10.8;T;I" ruby;T; [[I"data_objects;TI" = 0.10.8;T{ ;I" do_mysql;T;I" 0.10.9;T;I" ruby;T; [[I"data_objects;TI" = 0.10.9;T{ ;I" do_mysql;T;I" 0.9.12;T;I"x86-mswin32-60;T; [ [I"addressable;TI" ~> 2.0.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.9.12;T[I" rspec;TI" ~> 1.2.0;T{ ;I" do_mysql;T;I" 0.9.12;T;I"x86-mingw32;T; [ [I"addressable;TI" ~> 2.0.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.9.12;T[I" rspec;TI" ~> 1.2.0;T{ ;I" do_mysql;T;I" 0.10.9;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.9;T{ ;I" do_mysql;T;I" 0.10.7;T;I" java;T; [[I"data_objects;TI" = 0.10.7;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.7;T{ ;I" do_mysql;T;I" 0.10.1;T;I" ruby;T; [[I"data_objects;TI" = 0.10.1;T{ ;I" do_mysql;T;I" 0.10.6;T;I" java;T; [[I"data_objects;TI" = 0.10.6;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.6;T{ ;I" do_mysql;T;I" 0.2.0;T;I" ruby;T; [[I"data_objects;TI" > 0.0.0;T{ ;I" do_mysql;T;I" 0.9.6;T;I" ruby;T; [[I"data_objects;TI" = 0.9.6;T[I"hoe;TI" >= 1.7.0;T{ ;I" do_mysql;T;I" 0.9.4;T;I" ruby;T; [[I"data_objects;TI" = 0.9.4;T[I"hoe;TI" >= 1.7.0;T{ ;I" do_mysql;T;I"0.10.4.rc2;T;I" java;T; [[I"data_objects;TI"= 0.10.4.rc2;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI"= 0.10.4.rc2;T{ ;I" do_mysql;T;I" 0.10.4;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.4;T{ ;I" do_mysql;T;I" 0.10.10;T;I"x86-mingw32;T; [[I"data_objects;TI"= 0.10.10;T{ ;I" do_mysql;T;I" 0.10.10;T;I" ruby;T; [[I"data_objects;TI"= 0.10.10;T{ ;I" do_mysql;T;I" 0.10.10;T;I" java;T; [[I"data_objects;TI"= 0.10.10;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI"= 0.10.10;T{ ;I" do_mysql;T;I" 0.10.10;T;I"x86-mswin32-60;T; [[I"data_objects;TI"= 0.10.10;T{ ;I" do_mysql;T;I" 0.10.4;T;I" java;T; [[I"data_objects;TI" = 0.10.4;T[I"jdbc-mysql;TI" >= 5.0.4;T[I" do_jdbc;TI" = 0.10.4;T{ ;I" do_mysql;T;I" 0.9.2;T;I" ruby;T; [[I"data_objects;TI" = 0.9.2;T{ ;I" do_mysql;T;I" 0.10.4;T;I" ruby;T; [[I"data_objects;TI" = 0.10.4;T{ ;I" do_mysql;T;I" 0.2.3;T;I" ruby;T; [[I"data_objects;TI" > 0.0.0;T{ ;I" do_mysql;T;I" 0.10.0;T;I"x86-mingw32;T; [[I"addressable;TI" ~> 2.0;T[I" extlib;TI"~> 0.9.12;T[I"data_objects;TI" = 0.10.0;T{ ;I" do_mysql;T;I" 0.9.10;T;I" ruby;T; [[I"data_objects;TI" = 0.9.10;T[I"hoe;TI" >= 1.8.2;T{ ;I" do_mysql;T;I" 0.10.5;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.5;T{ ;I" do_mysql;T;I" 0.10.6;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.6;T{ ;I" do_mysql;T;I" 0.10.7;T;I" ruby;T; [[I"data_objects;TI" = 0.10.7;T{ ;I" do_mysql;T;I" 0.10.6;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.6;T{ ;I" do_mysql;T;I" 0.10.7;T;I"x86-mingw32;T; [[I"data_objects;TI" = 0.10.7;T{ ;I" do_mysql;T;I" 0.10.7;T;I"x86-mswin32-60;T; [[I"data_objects;TI" = 0.10.7;Tmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/maven-tools1000066400000000000000000000001111446701454400275660ustar00rootroot00000000000000{"0.33.0-ruby":[["virtus","~> 0.5"]],"0.33.1-ruby":[["virtus","~> 0.5"]]}mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/maven-tools2000066400000000000000000000005351446701454400276010ustar00rootroot00000000000000{"0.29.0-ruby":[],"0.29.1-ruby":[],"0.29.2-ruby":[],"0.29.3-ruby":[],"0.30.0-ruby":[],"0.31.0-ruby":[],"0.32.0-ruby":[],"0.32.1-ruby":[],"0.32.3-ruby":[],"0.32.4-ruby":[],"0.32.5-ruby":[],"0.33.0-ruby":[],"0.33.2-ruby":[["virtus","~> 0.5"]],"0.33.3-ruby":[["virtus","~> 0.5"]],"0.33.4-ruby":[["virtus","~> 0.5"]],"0.33.5-ruby":[["virtus","~> 0.5"]]}mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/memcache-client-1.6.3.gemspec000066400000000000000000000026351446701454400323610ustar00rootroot00000000000000--- !ruby/object:Gem::Specification name: memcache-client version: !ruby/object:Gem::Version version: 1.6.3 platform: ruby authors: - Eric Hodel - Robert Cottrell - Mike Perham autorequire: bindir: bin cert_chain: [] date: 2009-02-14 06:00:00 +00:00 default_executable: dependencies: - !ruby/object:Gem::Dependency name: - RubyInline type: :runtime version_requirement: version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: "0" version: description: A Ruby library for accessing memcached. email: mperham@gmail.com executables: [] extensions: [] extra_rdoc_files: [] files: - README.rdoc - LICENSE.txt - History.txt - Rakefile - lib/continuum.rb - lib/memcache.rb - lib/memcache_util.rb has_rdoc: false homepage: http://github.com/mperham/memcache-client licenses: post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: "0" version: required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: "0" version: requirements: [] rubyforge_project: seattlerb rubygems_version: 1.3.7 signing_key: specification_version: 2 summary: A Ruby library for accessing memcached. test_files: - test/test_mem_cache.rb mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties000066400000000000000000000317101446701454400270660ustar00rootroot00000000000000{"3.2.9.rc3-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.9.rc3"],["actionpack","= 3.2.9.rc3"]],"3.1.7-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.7"],["actionpack","= 3.1.7"]],"3.0.9-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.9"],["actionpack","= 3.0.9"]],"3.0.18-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.18"],["actionpack","= 3.0.18"]],"3.0.9.rc3-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.9.rc3"],["actionpack","= 3.0.9.rc3"]],"3.2.0-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.0"],["actionpack","= 3.2.0"]],"3.0.7-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.7"],["actionpack","= 3.0.7"]],"3.1.0.beta1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["activesupport","= 3.1.0.beta1"],["actionpack","= 3.1.0.beta1"]],"3.1.4-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.4"],["actionpack","= 3.1.4"]],"3.0.20-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.20"],["actionpack","= 3.0.20"]],"3.1.1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.1"],["actionpack","= 3.1.1"]],"3.0.7.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.7.rc1"],["actionpack","= 3.0.7.rc1"]],"3.0.0.beta3-ruby":[["rake",">= 0.8.3"],["thor","~> 0.13.4"],["activesupport","= 3.0.0.beta3"],["actionpack","= 3.0.0.beta3"]],"3.1.4.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.4.rc1"],["actionpack","= 3.1.4.rc1"]],"3.0.9.rc4-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.9.rc4"],["actionpack","= 3.0.9.rc4"]],"3.2.3.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.3.rc1"],["actionpack","= 3.2.3.rc1"]],"3.0.0.rc-ruby":[["rake",">= 0.8.3"],["thor","~> 0.14.0"],["activesupport","= 3.0.0.rc"],["actionpack","= 3.0.0.rc"]],"3.0.12.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.12.rc1"],["actionpack","= 3.0.12.rc1"]],"3.0.3-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.3"],["actionpack","= 3.0.3"]],"3.0.15-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.15"],["actionpack","= 3.0.15"]],"3.1.0.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["activesupport","= 3.1.0.rc2"],["actionpack","= 3.1.0.rc2"]],"3.0.1-ruby":[["rake",">= 0.8.4"],["thor","~> 0.14.0"],["activesupport","= 3.0.1"],["actionpack","= 3.0.1"]],"3.2.9.rc1-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.9.rc1"],["actionpack","= 3.2.9.rc1"]],"3.2.9.rc2-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.9.rc2"],["actionpack","= 3.2.9.rc2"]],"3.1.0.rc3-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["activesupport","= 3.1.0.rc3"],["actionpack","= 3.1.0.rc3"]],"3.2.0.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.0.rc1"],["actionpack","= 3.2.0.rc1"]],"3.0.0.beta2-ruby":[["rake",">= 0.8.3"],["thor","~> 0.13.4"],["activesupport","= 3.0.0.beta2"],["actionpack","= 3.0.0.beta2"]],"3.2.5-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.5"],["actionpack","= 3.2.5"]],"3.0.11-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.11"],["actionpack","= 3.0.11"]],"3.2.3-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.3"],["actionpack","= 3.2.3"]],"3.0.5-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.5"],["actionpack","= 3.0.5"]],"3.2.8.rc1-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.8.rc1"],["actionpack","= 3.2.8.rc1"]],"3.0.10.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.10.rc1"],["actionpack","= 3.0.10.rc1"]],"3.0.4-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.4"],["actionpack","= 3.0.4"]],"3.0.10-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.10"],["actionpack","= 3.0.10"]],"3.0.6.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.6.rc2"],["actionpack","= 3.0.6.rc2"]],"3.1.1.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.1.rc1"],["actionpack","= 3.1.1.rc1"]],"3.0.9.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.9.rc1"],["actionpack","= 3.0.9.rc1"]],"3.2.8.rc2-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.8.rc2"],["actionpack","= 3.2.8.rc2"]],"3.0.16-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.16"],["actionpack","= 3.0.16"]],"3.0.6.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.6.rc1"],["actionpack","= 3.0.6.rc1"]],"3.0.7.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.7.rc2"],["actionpack","= 3.0.7.rc2"]],"3.1.0.rc5-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.0.rc5"],["actionpack","= 3.1.0.rc5"]],"3.2.4-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.4"],["actionpack","= 3.2.4"]],"3.0.9.rc5-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.9.rc5"],["actionpack","= 3.0.9.rc5"]],"3.2.4.rc1-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.4.rc1"],["actionpack","= 3.2.4.rc1"]],"3.0.8.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.8.rc1"],["actionpack","= 3.0.8.rc1"]],"3.1.0.rc4-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.0.rc4"],["actionpack","= 3.1.0.rc4"]],"3.0.0.beta-ruby":[["rake",">= 0.8.3"],["thor","~> 0.13"],["activesupport","= 3.0.0.beta"],["actionpack","= 3.0.0.beta"]],"3.0.14-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.14"],["actionpack","= 3.0.14"]],"3.1.2.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.2.rc1"],["actionpack","= 3.1.2.rc1"]],"3.0.13.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.13.rc1"],["actionpack","= 3.0.13.rc1"]],"3.1.2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.2"],["actionpack","= 3.1.2"]],"3.2.11-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.11"],["actionpack","= 3.2.11"]],"3.2.1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.1"],["actionpack","= 3.2.1"]],"3.0.12-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.12"],["actionpack","= 3.0.12"]],"3.2.9-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.9"],["actionpack","= 3.2.9"]],"3.2.7.rc1-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.7.rc1"],["actionpack","= 3.2.7.rc1"]],"3.2.0.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.0.rc2"],["actionpack","= 3.2.0.rc2"]],"3.2.6-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.6"],["actionpack","= 3.2.6"]],"3.0.19-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.19"],["actionpack","= 3.0.19"]],"3.0.6-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.6"],["actionpack","= 3.0.6"]],"3.0.0.rc2-ruby":[["rake",">= 0.8.3"],["thor","~> 0.14.0"],["activesupport","= 3.0.0.rc2"],["actionpack","= 3.0.0.rc2"]],"3.1.3-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.3"],["actionpack","= 3.1.3"]],"3.2.2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.2"],["actionpack","= 3.2.2"]],"3.1.0.rc8-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.0.rc8"],["actionpack","= 3.1.0.rc8"]],"3.1.1.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.1.rc2"],["actionpack","= 3.1.1.rc2"]],"3.1.0-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.0"],["actionpack","= 3.1.0"]],"3.1.0.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["activesupport","= 3.1.0.rc1"],["actionpack","= 3.1.0.rc1"]],"3.0.17-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.17"],["actionpack","= 3.0.17"]],"3.0.4.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.4.rc1"],["actionpack","= 3.0.4.rc1"]],"3.0.5.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.5.rc1"],["actionpack","= 3.0.5.rc1"]],"3.2.10-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.10"],["actionpack","= 3.2.10"]],"3.1.5.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.5.rc1"],["actionpack","= 3.1.5.rc1"]],"3.0.8-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.8"],["actionpack","= 3.0.8"]],"3.0.13-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["rdoc","~> 3.4"],["activesupport","= 3.0.13"],["actionpack","= 3.0.13"]],"3.1.1.rc3-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.1.rc3"],["actionpack","= 3.1.1.rc3"]],"3.2.2.rc1-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.2.rc1"],["actionpack","= 3.2.2.rc1"]],"3.1.2.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.2.rc2"],["actionpack","= 3.1.2.rc2"]],"3.0.8.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.8.rc2"],["actionpack","= 3.0.8.rc2"]],"3.1.8-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.8"],["actionpack","= 3.1.8"]],"3.2.8-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.8"],["actionpack","= 3.2.8"]],"3.1.10-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.10"],["actionpack","= 3.1.10"]],"3.1.0.rc6-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.0.rc6"],["actionpack","= 3.1.0.rc6"]],"3.1.6-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.6"],["actionpack","= 3.1.6"]],"3.0.8.rc4-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.8.rc4"],["actionpack","= 3.0.8.rc4"]],"3.0.0.beta4-ruby":[["rake",">= 0.8.3"],["thor","~> 0.13.6"],["activesupport","= 3.0.0.beta4"],["actionpack","= 3.0.0.beta4"]],"3.1.5-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.5"],["actionpack","= 3.1.5"]],"3.2.7-ruby":[["rake",">= 0.8.7"],["rack-ssl","~> 1.3.2"],["thor","< 2.0, >= 0.14.6"],["rdoc","~> 3.4"],["activesupport","= 3.2.7"],["actionpack","= 3.2.7"]],"3.0.2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.4"],["activesupport","= 3.0.2"],["actionpack","= 3.0.2"]],"3.1.9-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.1.9"],["actionpack","= 3.1.9"]],"3.0.0-ruby":[["rake",">= 0.8.4"],["thor","~> 0.14.0"],["activesupport","= 3.0.0"],["actionpack","= 3.0.0"]],"3.2.3.rc2-ruby":[["rake",">= 0.8.7"],["thor","~> 0.14.6"],["rack-ssl","~> 1.3.2"],["rdoc","~> 3.4"],["activesupport","= 3.2.3.rc2"],["actionpack","= 3.2.3.rc2"]]}mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.0.beta.gemspec.rz000066400000000000000000000006501446701454400325070ustar00rootroot00000000000000xk0C)n5+e+BMu!bXkCPX$\;?ٿ9 k6L:}~#?B%r}sEښ;GC1g4|?:/~0S uVW0kϟ@BWŤTN'̽~o ]866j;Lf`Yt"؍'/Tb,_vD78y 'M1xuц ,{{g^%&gŬ6U6tc}F'-On[F!b_WuKjC D"]Mڮ9;zcڍ! bV@O^^{ѳXiP30v݂%`G+x@!^S\!^eߏvd+0RR/b͇02c+Ņ2sFRY: >0F ek#`R}jJm YfZEon&Rld*ڹmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.0.beta3.gemspec.rz000066400000000000000000000007371446701454400326000ustar00rootroot00000000000000xRMk15!l%"t,F-5{nz!{ك[xWR%_J@GIWR*]fޛ7[ˏPREO3'<}p.q4$1y+g(;`O|sp,Tp"JyO@oҒdŬn9q{'J=)_Z.Vf#&sd*)G/"udJ_m<·J(A,>LxOMnFc2ġ,T4$Du~nsfvvǴ+1%bzj `4JF=ꝟ =OXR㒕$h{+x@1KIK^oS2BV˾;؝]0l2#?mJjW8j⫝̸ER7Uiz!} z`Z%gt`$+,w͕r#]T !m-@aN.r̮,7K446*EYL)rzmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.0.beta4.gemspec.rz000066400000000000000000000007341446701454400325760ustar00rootroot00000000000000xRj158M$%"t,Fqh=7ڽډWxWR%_JYj.B3ӼKz JjIp愒Gc2!D `b_ IO \`. t]ӣ7qX˖Kp\ܢ'e7[UlCdL)eEXĴ,뽞G^ H|E'>$zӿ2Ɓ)W$P՞4$߅M}Ҵej[| bD4SX00Y TQxy2"coAtNAbe 5Zq'`Kqf|z!,JVqeB־ Os}_g!&UyQHFCGJ)W!y$攱2q!|9mUUQɽ,z_'?mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.0.gemspec.rz000066400000000000000000000007001446701454400315710ustar00rootroot00000000000000xk0C)I6Z6 +eBT:d|(YO;t.> ~MD'Mcr)sPvtzy?}/2 3ƒ#vŮe`M ĴK+L0Δ*,yPd<CR+RK91bs] |Х]{78;MqyT4PuK fMlLy >ƃsIO/ힽTdNVZ+rʗR&; s-=ZI-%6FLpqD-HSK0V o{\DB ᔱ;Bve}tN˺Yc¶-b\߿2mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.0.rc.gemspec.rz000066400000000000000000000007031446701454400321770ustar00rootroot00000000000000xRk0$lk( GPRizKvak"bK$R{NMvt~i[Pp@*d*j~79ᐍإҞ2܌muXiomZ`* }>}jᢓֹ#ڒyT.@*}"TFlT}scƅc3ivJi6팯fQ 7v9:C{z?bC~]J!^mn˴Ĉ X?w@1bcBK?1y9Xu7/1eUU:@6i|%]^mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.0.rc2.gemspec.rz000066400000000000000000000007061446701454400322640ustar00rootroot00000000000000xROk0$th) GP"CzڡKvak"bK$2IF\ǞS&]~i[/Pp@*e*jyopFZvi { nƏ7:,LhmT{}NZT8pqop.G٥=#d$?jҿ>1i ذT{~:NJ<(CR>Y[|KfmS~@蒶_ϢV]{>Yyhh`u(~Pn@f:զ/<E(QLX00n߇a7D! B N^ꥤf^p,R'W`Kq^9_ZPte㭌eb%8WekX 8#$%r+Z7 ] ɽR}r.pح~ _8EUUNaSf>ϓo(KLmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.10.gemspec.rz000066400000000000000000000007121446701454400316550ustar00rootroot00000000000000xROk0$lk( GP]XYd950T54Iɥ}}N`E~{??%_4dAfIT?]ˀ`c=0eT,ayN KА̀UѬ-GDJϭ7Dh]jlߴ^JP.G{?݈MuIC[РrP&lj ;Y*  ,Ldm&%x?p <0¸g8Z lxh-?)o]`g5Jk43O}PQi `Y.2O reXz@*?' ̄MZ*F=ZHeGd ph!'2nu]&lTmY "J/_$mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.10.rc1.gemspec.rz000066400000000000000000000007251446701454400323450ustar00rootroot00000000000000xRo0? 4iU^VQ08KKV|v2ȕ? 8\{>n#6':qt܎/i0`CVi̜;[@q Y A;3Cϫ_t2:A#IZHq7n#B ;_aLVl_nB"\_a&߳wU_4·l@;Xo@[[0RP&e{~̟G!aa_E]_6"<+?nc֜A9(X<QL“MxJ;n1IiGS ߬8g{օH\->ɪҠz^b-(ERU)D^!SKPjE?B*Y~?GLV,=(F[??l]YF_/3,KVӸEq֟mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.11.gemspec.rz000066400000000000000000000007131446701454400316570ustar00rootroot00000000000000xROk0$lk( GP!Crڡkvak"bKړ>4d~: J~ οHLZ98 S'ABNz`ҦK6dQɻ7~|h[r^V-ҸRI2Rko`0&`ٜig) P.iC;͛?Σv$+02P&1|kY*69 S6^oG1aDO?}9?aݳ5ZlӨh-5Fų/~\1S]0[3NDliFԙZj `Y&2s]fn)U-Kuί2$ eV6i[]iB*; PiL+軥s_\TU갵jb<=[Ќhٽ`&v%ԍ$oJ?T(uLq0&G6W% {|DW_9wg&ǟ& p2 9Pea~PMbˑ7BDV g:Ï%t꘳gocyvWE)θU֗SG X1F x?wNEHHPQ0OU׫VE>=/z;f:1N&k>w^4I9Ap-?ݔ?$+P\8Nw/HцkI `jmw{ͣW^Pfd|i܆Pf6JA ”>ulFHpls]e5LHT>5f@e\h-a]ׁ5gԀ˹UD/amavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.12.rc1.gemspec.rz000066400000000000000000000010101446701454400323330ustar00rootroot00000000000000xO0ǫ 6+Lʹ2" E;tI6ӪNȺäŗ~V _`Nw )a)5L'wO8h?9a8(r@{a#2(m^tJ.".H+as{oH;9J>10"F(*BZ23!3 ͥ2P Gen `܌={`c7FtZ]!ٟ\5Tqr/ȋ9Ht?t.eH=*Uqaf%ٍ9P C*ZT㽪auö-lB9NS/OQYQ7Ae"9L?Y?a ЅB8^ {<Ң5hK׹TW{ˢ\2[/RvRjno'q#އ㠧( 텭Uԯ%M8!Jz?=ٲ#FpED\kPZ 5df6@gHskA#*e~V͓9|+xvoɻ zΣzzS_tO U^q<y\U8 <|G`tA"uQaڄ0+ dgn$(ȁjѢeCVG}?f& wž7?9>p7VPHm_ijt)P/F<ԢZߩ .i:OOv.g],E.S8{t2/N3:d(tFւu785i] aJ9@2/EP66P=#fHrp\. U, mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.14.gemspec.rz000066400000000000000000000007731446701454400316700ustar00rootroot00000000000000xMo0WPlVΫt"@"Qrɡr鮕6r@4~vҥB"XgnAGє; 7ݏa*8:r6n%p\ݶHeR5&s(ľ{isYy5(`5\DXd͘97"B7JU)kJ1fon3BO-mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.16.gemspec.rz000066400000000000000000000007771446701454400316760ustar00rootroot00000000000000xSo0PJ7a\e:rQ qajbiTmi D/${n>A))єGnם~8xL|LIh)('$Wx~ i$ol6.q/ ?;sp?ľ{|14BKs@Ջ",CdF.BDΩ 'j' `z'w׈б<&лg=Yެq:8~Z?,=E`ad #Gxkx4EHHQ0ϣUs׭jȊfQL/(I{yn(3NA ”an2 \Bu)FH25Bs` RXZ6Z |tTUU`jլ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.17.gemspec.rz000066400000000000000000000007761446701454400316760ustar00rootroot00000000000000xSAo0PJ7 * 9b(˅ȸ0y[k54*~? ;Y!b}^-'(0" w4%rd uc 5儝ԯ !? %%:|c>AɇOsD##Tq4TQ!2$Kl+DqvrJ*gwb}ϳ5g8vmә`ta/b #K ?^ 9m. EB)~{iU[}L/pqbkMIO4[Cf<{@Bpq&!ǰLt_tQUFV4r^fzA MZMK̼:. S4HFr n9ץ!ś$KuKf`&jN]h-QUUzjs H7// mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.18.gemspec.rz000066400000000000000000000010011446701454400316550ustar00rootroot00000000000000xSMo@P:NCZMHTkQY¡\r4Y]vױO᧰k7`V}Yͼ7L-G(0, 4%rh·?暂rNrkʐffZgG|G8w5Ɵ& rR FGriz1BeHȥW9UAYTBLٻ:֟gyzCq'˛9NgO eҵ,,2~$?Xoz-洹( r yjUVmQ36Y75 &5j>poo ɶjU KiߚnV3A1dWG5Y,yev؃6iym]e)HtAR5OPA2+^tù.SFh $\]24QfwbBk sV[ [@u~K mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.19.gemspec.rz000066400000000000000000000010031446701454400316600ustar00rootroot00000000000000xSMo0P6>TO+*$S,#%ZmlQ9i D/~loW'(0" 4%rvoQ=|OV1GPk :>%T87[{~vp D^"PcYy5(`BU\.UT/ƈ ɒ1sn"B7$y\'9o%PӉcN휼cGuѿLd}Y^r?OAˀk!#XYePSޝl wy(Q0OU-Y.\7dzv۬'-ֱ\`oo!3ã7`ܨ? +P\l[w]؍՞Lt_|QiFV4 s^fzA-v?=e)HtFR5MPA2+ntŹ.Sh $\^24Q˦w"BkmsVG[@H:e mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.2.gemspec.rz000066400000000000000000000007001446701454400315730ustar00rootroot00000000000000xj1MwMi 4 QĐfɩeEٝ»#Uz}>Gt43[k(8!2N*{&4 v)g̝;GMw0'&m^;/y0>yhE'SrK!OyT,T-D`FLXz%Bf}S~@蒶E}f<w$P]C W-۾ 5;y1obm@„[k+ΏQ%FxC>ል0Lè[(\K3g/moE l2VV*"]Ұ6ғLdBbmKUWu܀D? V!M"|Br+u輜K}2#2}?"]ZF?.쬪*V[i)3ƧI/Xvmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.20.gemspec.rz000066400000000000000000000010051446701454400316520ustar00rootroot00000000000000xSMO0*)0 }[9WHC":rف]z@&yi&g;aOO-@eŲ/[M9{L"o)$,)c`cLחfrV|* O hhOwcC-3 8\gƛĜg r & P,PI|K,;^!"DvYu*%|+:fnE 86;OFaSYdr?,\소`adBQywN`$J6nh^\BD ^7d3 ÷/mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.3.gemspec.rz000066400000000000000000000006751446701454400316070ustar00rootroot00000000000000xAk0C)N6Z6 +eBԄ:d|(YO;t.> ~MD'Mcr 2tWOPrEC&e&Tx踗^hFhY8 v`OLِ+e ώ_t6WQT\HH-j@T˽[".Zlߴ{% . "4GY`HCS=lP-4`m#6flL4l,9Kh f ~MD'Mcr) P^d~/r sƒvɮd`}./٘Mk _g?:~R%ʐ܀W4ʬ4ҭFD`ALz}KS -Iku kitY=ڛ}\$=a"=idm)U Xۘ?xdT0P0oͮo{M Sx?p[ S"'^uذloG) .i١ɗYgv=:E{|Ć40: ! 됟fG#1jf6 ,Lx-Ƅ1X߸~Ks%*Q'1y4`1G4:?E4p e^tnLڽ=LNZ+^xPtYCiXgmE&V2sUfn!Ό$7 z V!F(сA[&yRʕOt^%>N|:]ZF?.ꪪ*VGpc)3ƗIv̫mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.5.gemspec.rz000066400000000000000000000007001446701454400315760ustar00rootroot00000000000000xAk0C)I6:: +eBԤKiid9%0T5TIe+SkMv:/wK~ οjHL ~w%]3BN70?L4LЛ>lE'3rK!>Y [s-Z%X6;x,%muhg|3Z]yyy$PQ ?pP76` aamw`( ~b6yFŏ`#6ItiDKf[`䁷"ur ZؓkRhXki&2sUfn)g DߵCUHls-ߍ+J':/m,}Nߏ8aWK4??)lb,fY Omavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.5.rc1.gemspec.rz000066400000000000000000000007071446701454400322710ustar00rootroot00000000000000xROk0$t( GP5eCfCPDĖ'9&ҏO3&'f ͺXynϾ@7|pR䌆Cv>.`gtS¤MOWa:,y0~:nNZ4.[PRkX"<咶_E-=~bgQh_! _'7D7`@euOcṽ B„WmLx+QK6}kΏDG0 $G6QN}tL!n[ȃ^c~Q2"]PY[z\[HUgR]x܂T{ HnV+uTP4ɽ֮4}br.9(@4!'2nᗗUU:B64HZs̹mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.6.gemspec.rz000066400000000000000000000007011446701454400316000ustar00rootroot00000000000000xAo0ǫijl@&,QZ5#ry[k5y6ӨWSePba\\8a?;]Ӂt삟?a֥%GsY篳lTiɽ2$7Uq9$2k!t!XS#?^uPe 4PM/Nw"=hdm)U Xۘ?xdT0P0ͮ/{M Sx?p[ 7> _ hō罟% dIfI~KF-dPIs~-h}aڥgl0*d _~tG3 K4 3ŐW-D`Ts5, VUҮ_=ڛ|=gqN߲X=n@[;0rP& i{Q̟'aa_%]_6![jٿnkj?hA"sr 2Fģ5hV M֖^b-UR5L! ^{Պ~E(T0M򨵫̐ZHed P8}~t ^:gM]׬P-q1K4̠mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.6.rc2.gemspec.rz000066400000000000000000000007071446701454400322730ustar00rootroot00000000000000xROo0mu04a*e@rNF%%oFL(||)67Klߟ~> 3 ':ypMh8dl(BNMw@ 6=b_釒SY@dunɃF"xf5JJE,O%˜aٌc) P.iաY'quuhzCtT*]4`< ,LxmƄx=qkطHt `O1y4`E$:G4p Q/:nLƽNmq.-~yYU#jciO㋤mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.7.gemspec.rz000066400000000000000000000007011446701454400316010ustar00rootroot00000000000000xAk0C)I6:V -eBTg d,Pv]|O$oOTX(;LH~{߯W(9!w2N*{'4 (t`,;G`viElRF0H~=v K!!Y [ s-Z%X6ǭ5Х]hoew&T4P]r 06!?J_a76`aaO;M%x?p GF+s_\u͚e1eQrvYmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.7.rc1.gemspec.rz000066400000000000000000000007071446701454400322730ustar00rootroot00000000000000xRMo0mu04iU^UlrDTv0Z.9 /yZMli _8pڈVܰ/z>aT>T8σnrN!{ϮePI3~yIܰeKLe_/~ֹ%IռO*K t>*#X*UNm>oq.-o~uUU#jciOˤ_mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.7.rc2.gemspec.rz000066400000000000000000000007101446701454400322660ustar00rootroot00000000000000xRMo0mu04a**Q08KK޵Vۼv)!~h싿}|-g(8j 2Njuఛp>+٥=2w쌟naҦ'lnW%?Z~TܒG$Ej'ƥ_JE,O%˜aٌÏR"\C;OǏfu5ˇuhzCt T*]4`< ,Lx-Ƅx=qkؗ|Kt `Ogch#6Iti^tnLڽʾþd,aYKz?t/g(8!2N*m@ h 0݄46;떿9 3.^o[1a'V7n֜aI&Fl#֐g '<8'4Z; vO/`/L䆍|IK<~_-yV<3.RfH%rHfĔɃװDh6,׍|/%]z70:^x;zEwi`ʧM(! fG#1}6` aam_6&#6g ':qpOi8f ; vO/&]zrF IɃGY٣ֹ%IbH*+C*C"TFT>ycֆes~=R"\G{7^tϯ٘X>m@ Ptw;s ۘ0V'V7nc֜aI|oMx&Q8w1 Rc4Nt[SqoAz%R'`Kc4AO=EʈtUCiXgmE&2s]fn)UKuI.rR% ZmR9@%r$OZ ˅TvHhۇGG+ۥs_]UUjl1Q|tmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.9.gemspec.rz000066400000000000000000000007111446701454400316040ustar00rootroot00000000000000xROo0MMb|DmGT9L'cjbgQ/|6|tŎ{?G5? NI~G1;v!#:@!K'Q h=0odίFҒ;$Gj1$ƕߐFU %˜eku jPrY=ڛ|'{;Oz_tG&5Ѫ\U71?J#xd ,Lt٦ǩx?p LWF,=)Zi- \W^*ܐH$L(k9K(-ߍjj3$R!YN-~ ^:gY4,DU[ӸY7Zsmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.9.rc1.gemspec.rz000066400000000000000000000007051446701454400322730ustar00rootroot00000000000000xRMo0mu04a**9a*;q+k&y4OOp҈Vܰ/z>agT>T8σ~rF1aWO(d$9?maҥ'lnAtunɳF"xfJ/H%rHJ'^aLڰl4r(tykY$^Y-ԸRJRRɝD5eX/j;ZH"ly7\lD{X4T-D`T}r=,2,g-|)%B%muhgnSy]'GlHXoP Pt{Vc0dJ ৾5G _wE pQ8N)ƨ~53 5gKx:[{ُjVFJmXz\[JUgR]x@*?- HfBY\*Dna^kW>1ypQ'2bUU:r JZ9mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.0.9.rc5.gemspec.rz000066400000000000000000000007231446701454400322770ustar00rootroot00000000000000xROo0Mu04a*]6Q08KKZmF >  8\aPT>T8 9aݰ+ ; vO7O&={0}S\B ^ܒG$Ej%ƅߐRy,N%˜.ò)/DXrI-F ←ziuj|#t T*]4ƝN`ܫ ,xmƄK~bǭ cߚ#QF=uG=autLn1D'aL7&vlI#Oz&R'W` c4aOyKL^̤]2(F[??j]XF_͝3,KVEզ,q֋//<mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.0.beta1.gemspec.rz000066400000000000000000000007331446701454400325730ustar00rootroot00000000000000xMo0ǫiK61Mb|Dk4>9L'rg6Өą$hp8s~2?HLZ:8l4;v#۴kL7`>->w&2huȓ$j#+ܐBe5'6WKnDg(sPސ1Hu`X(索͗ʃU"u|Lk1iXuaщn}(X|*[L$>mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.0.gemspec.rz000066400000000000000000000007351446701454400316020ustar00rootroot00000000000000xAo0ǫijt@&,QRZm#ry[k5477n@8;~T~P;1˥8qp'8+r׌Y]GmȐD߿~m7RI2 .XP-mPjȑ.ALCNj+aӶ:3y[^w;^#6IlD q|#>I 0S"4=ڃMhVckpU@\_ֽ0I|4 "q/y]IGE\#!Ǝp3֯)I#2nWѹoj}79),߀/9wcOJ\i6ݰ+٦]+d%)?^ I޳3 ޙlCG3G%TV)])P)R=z8"2k{^H 9(7m4l?}z9ю-Vq-P)dne[~_FƂ ?ֿ."<ǯ ClHtΎŏȃ>\0v\۰=H`4sٿf6 8DD$^.h#2h^}zLLKUe#~q[1HӒ`X(索7K*9>yGLV̤r=2Vxm]}qp p{oeY\:l]č'7mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.0.rc2.gemspec.rz000066400000000000000000000007261446701454400322670ustar00rootroot00000000000000xOo0ƫil &1MX>eڐ#ryjbi GM@rIl}LJ݂}OR(SV? .[!3/i}3X6=yˆ,d6w/syk9-I-Z H ?H)r@[(Uܡ#˜)ñQBZAovgQ ofQhcegMhj*4;ٝN9Xp0//{ b%r@?[8ug)(d+v(~Ӟ_j"u_-qF8j7Bڂc5mSTV+4s8/2fviId*sZяȥ`OUSX䀼]k54GM@rIl}LJ}R(SV? =}:B^&]zr,d6.^0:NyԖPY-Fv~9"BeĖJ+w0&opl_4vw P>ۣɇyAwnt'ֱ2:& 4݂J7?Nv'Ske46, LxmbƒXO?kŽJ>h<))[ 1=,Zu.ٳ@EM|[~ka4k|O-Vќ^vQW{[ c9ʃR=)p S 03:6=Mh cp?v֬A;܄,GocܳkAxW!&pI6Id0E2N~ 4w XS(%zg-rVl(Ej\T ~qW9pnFs&j"…-XfaZЃPCbŅJmڠ fmeY*"RT7D(_V mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.0.rc8.gemspec.rz000066400000000000000000000007431446701454400322740ustar00rootroot00000000000000x͎0+' h%*VUҲy;6ӨĻ` 7MD$Mb;^s!"N(]ސh=E%; 韍osY z?~^~oOJ<(Cb,W}R(R.br)˕9zXµN2,]{9|ͅ 2h?xKoAhN~ce~h xdA̞ڀ){nֿ6$ %4Slᕨ#ouupwZ"HhkRW̤t1tY~jzc'`sqCϑ~RJj,De·" S'n-d  r@H]̸VIc!SˎBr+!m@N[ GCKWk4.QʬUdޔmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.1.gemspec.rz000066400000000000000000000007341446701454400316020ustar00rootroot00000000000000xOo0ƫit@&,QZ1*ġ\r@^򮵚v/7N@$8~s-;(( KV"zߚGҠ!f`FŻO b p~l na ˺Q7z_ED yNpnу"0^5n&1?Lf]t&ۿZs4O+k # FY^x/}䮵v~? ;YY%6//}9W*MBʮXJ j6[8x|vI #焵㠫( 텍UAi[<3<۸ ͡w~D?8h'*L0J5 >RݠiQ!UpNάFTڱƵ3Q0sfٵ[*D9vUqѸ#ȓ$ xq:3pd/R7wKaȶ}"y-^ xEa:3SA^xǃ#BuÇ(Ұhߣc>ć`De"G5G+G45lR(󏌷M.JjI .mN?gt(EfTݭk5>9L'ejbi Ío Qp.v~0{() K 0S24=ރMhVckpU@\_ֽ0I|4 *q/y]I'E\#rcGd77ī\fŷfeoTJIm;'PHE,g'rdtA3½*fL# Z};)mHՒ 3@K<ˍYfֆW+kxkH=m(9O[?#mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.2.rc1.gemspec.rz000066400000000000000000000007411446701454400322650ustar00rootroot00000000000000xOo0+ڴ]CILVxV *ġ\r@^򮵚Ө>۾hDrIl}>G^>A x1B'G^t?@.R+,iu+qrMbH!zHLR+ a:m0t^Uv erUAhO.J4d{TfC70cm؄B3p~|4cךuWt,~4EGt<7Ao÷ߵk 8+RuUGěwƤk:i邉tݴj VlZ+C/Ԯ ߊ$LUصe&h2_ܖ;dBdΥ1Ji%O ;L WzHt4C ȭB͍Xn6ojvyY-#dqCFEumavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.2.rc2.gemspec.rz000066400000000000000000000007411446701454400322660ustar00rootroot00000000000000xOo0+4]CILxmW *ġ\r@^򮵚v϶oG@"$~#/g_ Y.ų#/:|"}xj9%=mOȈ9 O-٭ARXS*޸Tp &s!ʕ0)6eo*̹ 2h9Əˠl]e]ԓu%t D"4{ٽ^yX*ӗҠ!f`F߆ۺ C2p~lcךuW"M!Muς^>8]:'E51qM`LOʻ".:ηC^-\) G(i)+D⥴ڐ#ry[k54<b 2~3f?C\5`xqi#2$vox Ͼ) FU,z6v5@LHWB?s Tq_! zk(AشL.]-ΟwuuM{>e"mCz9ȧOAC>O6Mϟ` &n#חu! {_&D/"1iK^GkWR_숼n#L+cRfUt.ۿZMfx27`*KؓR(W"| ϓBV]q@2Y:ߠp^F3&o|-XaEЭRjɅ%JmF,3kC^\uM56De4%Qmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.4.gemspec.rz000066400000000000000000000010211446701454400315730ustar00rootroot00000000000000xn0+4]ن@kx- rQ.)7䬵vZ 'Ѱuh"s~/[~I>œ/2v2j~I᷸7!e~ea~Mc/ >#9W>i$G&B] 2VO:h)~%3cwE#@ATÀ<^U: Dlml&B9NSm:V &ONh?@)vcCe"}P?h]AR exmFy s0HI'gtβ(Ef&,T̜ЕcDݏP#'HoMxmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.5.rc1.gemspec.rz000066400000000000000000000010251446701454400322640ustar00rootroot00000000000000xSn1EQ%֬GT#QB2eE&V&=K= ,*Xs=x0%䳄ݰ&o{{zea_Jz)cH;Xa7kVmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.6.gemspec.rz000066400000000000000000000010201446701454400315740ustar00rootroot00000000000000x]o0+6]ه&ixrQ.7䬵vZ oӰukh"s7|)!%욥0|QA^#㠥( 텵얩_@i4.>vqA B_5y]~~+cA"DѵP(U`kQͅ 33n#3 ɹ2q%dr_ ` =6`mz<S)kjaaS%$ xq:F'2nw ,,$-ۜ";T a@Dj+X"i Pn~Rݣ9V(;Q{IoN^iCC:VDzG2}@R exk@KSNΈOcF. ^ kmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.7.gemspec.rz000066400000000000000000000010221446701454400315770ustar00rootroot00000000000000xTO0*)0 !rLK@"u LZMmvZumf': D//?}/FAoRvRjϠ^o 'sqV冁ZrIv-zqq˸ ̈́M]GZO!ɧ !rnBG4jb7h̸(ϐ*8w'V]#*e~kTni~Lzvmz=0VΚ^`eIx<]ď8 {Gҁ0 d>FH*P0 Y֫Z}?lYgf,;7W~Tw?v<뀗v{'tlp={KT&'}|dASf )2xunyrBK۲ҍX̘q!u7gv(tNւW &9CBBv̋㺃FAQ#2TOH1s$wh,j3mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.1.8.gemspec.rz000066400000000000000000000010211446701454400315770ustar00rootroot00000000000000xTo0P~i0r.^V9b(˅ȸ0yɷjjiUmiɺi_,}=^ꍂ)!$솥0AA}xֈ,7 ֒KS~mЋm L<Ҋ~ qиL>`kt#JXm>꠹PAsfDyT;Q)[WFJ#` гk#6N?+缯Cn嬩-A^g gӅO)8 ;.X @6mَ9P 2UmZkÖufBpsJUD ^԰Ni?cc^2>zK}@R ex?t)eA2:cY"3c]p*a5:01Prk. (NsMVs0 #uF(}QdTcc$9F6\ATÀf\8(j9@i8x51Fâ(˒ߡPcHÍ?4!mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.0.gemspec.rz000066400000000000000000000010221446701454400315710ustar00rootroot00000000000000xn0ƫ1em &uZ6 ),\p1Rnz1yYk5*gIx4tZHn"9_6%J?+ϘRlY'%oH} ni Q-ӽ* hACteRF'W=mߤ*R) FW[ h&}6b"GŸ1k8NOUBk5L@AޭoFA%Ϸzq{HP{)  D"4cct/ַ;Ka kκAXiP3Уb+XcatHjωW}?Y)9Zh%24涺9sxeOJImk-AR(SNlenG\xLN|O{vp6A3&[$‚0tդRJ[6RE9´hf6v&B ~1VуlF?!R4~>Gmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.0.rc1.gemspec.rz000066400000000000000000000010311446701454400322550ustar00rootroot00000000000000xn@#4AJT0M,QB͂EqdQMd{f' #<P7{}U/{ $!a, í0=.fo+2@{A-3(mkF^ b *H#f9:YGZW!mFBDm4jjМIQ"UpNʫƖ3'+R09p3oJ,&*kw~C7 y\v <,r) r;MXYH ;v>cwEC@ATÀ< g^W:El-Lr`[uVNYj ;k=r+'?6T*{>>,hb t!PW]f`ְ=\ڱw#(3(R3ae'"wBW½F" \k]T"2PfTn0 cuF( 2TOюc$9>Rpj,9o}7mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.0.rc2.gemspec.rz000066400000000000000000000010471446701454400322650ustar00rootroot00000000000000xo0+]uMʹxrĔVKmVW$6,$K}7O699xSB.%$lj~>ܨ"=#Y̪PeJ|EEGP .nct]AMk^^"zvRá~}XLP(Q`Q ͅ4gfBH圻 F#*ev[c_Dž 3Sf{37OɵXwAmU❬Wp0of EBN kP)(MKD{%"Bٶ P }$-7}]Alf,/e?6j' A3l&WZgPt!dT$=|ib t.PW^z`W]\Z[Gۑ43S3fe'b ]S0PrwQː2n@qiR+䲅d-4mmzv#|>.RcFNQT~ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.1.gemspec.rz000066400000000000000000000010361446701454400315770ustar00rootroot00000000000000xo0'6]&ʹx6)48l&/ymV!tZH.}{lU &\HHـ0|ܪo>wjeap#$2(ms ?‡.l'loZtEpEbHM  gt!rBTM4jl?ЌQQ!UpNέf-{IsLgJTNޕCoŁUvlz K)Ht?t.0s d6g^$(ȁj蒧t1p6#'zRc)^7lD%5:bf7PHTzzLDSæ )2pa u m)I+etʲ(EfF;TL\K{qQ`Prw g2n@qkjRt-)dɼ2h5B[!Cx8x52Flw?B $z C mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.10.gemspec.rz000066400000000000000000000010521446701454400316550ustar00rootroot00000000000000xTn0P~4_+k S$FYn7[k54*<(:>7s| fW, GI1(p!·B#)K5l$_@*}^xϮ9iEl _Ϛ. <ޗo *t%$%|E3A.b\u8HT6AI{1:#EQ`@/Ga!Gχђ*ymavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.11.gemspec.rz000066400000000000000000000010501446701454400316540ustar00rootroot00000000000000xTn0Д~Muu( #|kF傧Ax4de։ ||gl4r KM9sc1܋~ !aF;f%ᝒ+He6k׳Q1B鯚 Ͽs8?os)t%J$lA3A",E2gVNBDʱ+'J'-1yw%"p?_Wjӭ5e~17ÒX2w22 #;N(w BMs8mCo 8U}=_UkuVyWR-;쉹[`{ B\.+o{kuޡVvia^ dJ<˹}pS/ ]h: %p}UBwaR[V3at#IJf4 3zLMig~vl Pf NS*&HRA2)NtE,Q:h $\` MԤ rk-~QM g|.Gχ߉.)Omavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.2.gemspec.rz000066400000000000000000000010221446701454400315730ustar00rootroot00000000000000xMo@#\i@\ܤZ%8K֞&ػ:Q8c%4vI¾X3ϼ3z-G(0" 4%r-w|^6 |HmIh)('l$#_~L؉}2.q3W<nE9wG*& ]sR 6tЂ˙@ DXdɘ=0"B7BU`8~R o%PcǼ۱}:<Λ[+kjiǏ+`ta/bFf`3~$+iNAHHQ0Oy= |z^2K w68(`PEG0܋:+e:{T~ _t ʐOnzJ? sP\?8Νzk Zg´22Y2Sʬ6Ц8(3 9aJqf-kgRA2+iRtŹ.EP:h $\!MԬs쿚j-b9? XEIr mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.2.rc1.gemspec.rz000066400000000000000000000010271446701454400322640ustar00rootroot00000000000000xOo0+6]OIr.^N9b( #%ZmlU9hR8L"D絟l r f|RV}t.~}xV,7 ֒!9(KҶhnإҮi$l[m>iFW?8&$BR?B}A f&mDyT۹4Rwf5<-\)7#Ϯ8>{_ =gw#]m4lSë*?j px<]ď8) r{MXYJ ;v>cϊGRyW{U(MLrpgufwOqTpoG5^i:}u^,Rpj,9JWo\mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.3.gemspec.rz000066400000000000000000000010371446701454400316020ustar00rootroot00000000000000xOo0'.]:&ʹx: ),8KmVB|$|+[+@%>dZ0!䃄 XJ ޷~m<&uEYnh/H.HJۚg|;n3.V&PQ{u>R.? qP=&NCjb0`د?㠗k4 >lPcf̌ srnhD̯=kl 4u `=Vrz6~m'+KV9Ik<,]3'~0s dg졑H*P#/W: DXm،rJZ qz5{2*jG=6]H)MnA\ڑIF,rQdfĸ N ]ٳFg  Q."q~L (NsMVC0l"Cu F(}o"d//FHrp0Ͱ 'XsDmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.3.rc1.gemspec.rz000066400000000000000000000010441446701454400322640ustar00rootroot00000000000000xo0+ҮYuM⧕suS]Y8p&/ym&V8pBR8L"D{|(;1( cM9{Vcty͞_;9i#ZLSPNPpRy}4Ȥg o4V>V3W ` 4g c3\D&rfЂi"Y0fO.٭n ?.]Jȁczޖ5wAs]mVo[7K?*' @K%&n` JkP)LKDw- R1 C$6}] v`=rVuתNӲj7 A; &WJePʭoBNȐ)O4f{n? sP\8Nuuq_,3al)FӔifH2E?-5 aJqfyV!Ld$SWtù.DP:h $\ۨ0!Ml{9Zࣣb@rfIs9Ũumavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.3.rc2.gemspec.rz000066400000000000000000000010471446701454400322700ustar00rootroot00000000000000xn@#4n*;: ʋ4,XMԾIFqfqtQ. vbiJk|wϹ>ު=0$ #M9{Vmxy89i-LSPNP/p Ry=kdҵQc:7׊ /9ȫc[]>)׏79q F Ђ˩y@ '-DXdΘ=97j"Bdo v_r*aLsW#z8Vqָ+dw 3޶̯?t9~\LKu\-#S(5Cy4/Kxfox?$d@ pe Bn=1K a7e?nEnfZM[nBȐ)Ozf{nDMr!p6vYg?R܎g)4x e6~gж (3_Dg)řJ}\2 Lr^:-$|Lj10Dsnn„4QU#Dkoə'*×omavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.4.gemspec.rz000066400000000000000000000010361446701454400316020ustar00rootroot00000000000000x]o0+4]Ƈ&id]7mS$܀42$ԋKZmlUqO`'j D|coo1ƟDScݮӄߒ暂rZr );`7:֯Gft3}"yW\k.Q*f6r924zFeHٓs]!"D~#T'sZP c`U2#tJy:A)NR֐l{&ǏK `ta/bd 6VH.u Bus9m7#!ABDA?&X/*yya|tZܲߏWlޤLj^理r U=ARU-Zf<6wʢt^N@Bppޚn8mXgL)_:,#E9/2=:3H){qb (3ODA3”⬲чʲi /]q F"/6I4]H5Z 3NP.6!^kmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.4.rc1.gemspec.rz000066400000000000000000000010411446701454400322620ustar00rootroot00000000000000xS]o0`JvI|Zy.^4S$4:$ԇKZlUy@4URDb{񖛑0#S aL{oktk:927D3P_^2z;=}, ?BȩYӓRvRj~_k v⠵^#IqV冁ZrN/-xq~qA @m?UGZw!2''B] R7vLݠ3e[S;fƽC󈹡גr ! >2Z@zĦudž ^E 7HL}>j@smDydιݹ4YޙU40s _s&a \Bv@ذ-%9]EqـW,æ gONjiN,A_&:KFB/2 [?mfEvL9ft+*hB+RoU ~_WZ3wRBVj뎛=v؛ʙÝU?2?}|J?_X<˄k:Nj>.v)}ӄX"OqRi1C}~f0nD+%xez 9M󬍲41h$B7`R4U2ruF9I>PY@n~tmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.8.gemspec.rz000066400000000000000000000010421446701454400316030ustar00rootroot00000000000000xTMo@P8NC?V>7M#PY¡\r4Y]v׉᧱k7%US!a_V3o罙s-'`E@JiJ4Z~08=;~Kk 7 S^ RK'd\FB'B/~m;gE\k.Q*pa͸Q=j#2$ lܰ+Dor *aLc~DN)϶ 4VCN!9MOAˀs{#02{DB)iNAHHQϢi5˥j? gE>WvLd$Wxٙs]6y1LHT76Aqe5ZlXqf6*rhIrl%8mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.8.rc1.gemspec.rz000066400000000000000000000010471446701454400322740ustar00rootroot00000000000000xT]o0P<_QFK&/kvV偟oa' dt ź>s}R3|L!4"rv[nOw_w!#Miy䩟@H4gwtdt^n_8/·9']s"Mh\oЊY#1f"ZD$M-<Ŝ XSKie$LK/@X'ChijI9)b`Ѻ[># 002|KA7R.)ݟҳ~*@@D?t/+eujyƢs)v_7䠎퍽-%KS͸246{n0|+gU~1ҷ=tGu]"Id\ /$3B#[/pdIc?Yf#_3'e9R0)9+,p(e #U+UvQdSdM ys$g3R||Z\FOH\L Nj?W+mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.8.rc2.gemspec.rz000066400000000000000000000010471446701454400322750ustar00rootroot00000000000000xTMo@P8I/*A͗D CqP4Y5DO7صkpIe5fޛ? 9R5ViܗnhamHi BEAZVxԏ N[3p:CD}2ڟo- g8E&8Dk.P$@I-ZR5 b$2L\+ir#VsQs`jl89³ĦiEh6b q ]q4nq|?g8X ,Z5qgdFf`2/~)0&[%*SzVxOHHeܠ.Mo,=21Aou|k^vGؒ\TZ]7tH>W;v*?UGͺ.e))jƪ틻/ w !g^dΣ,h'<Ք2cD7|\3L:#LJ ˼/JH"qլs&ل2A` B\; )"gT/K׸3.'87,2mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.9.gemspec.rz000066400000000000000000000010441446701454400316060ustar00rootroot00000000000000xTMo@P8NC[7i*KP_8K֞&8:Q8 ƮݔTME}Yͼfnw?RzAS)gw~nlon·ߒ暂rZrwʫ_@*siľwt76 ~<f7oA컧s.D͆m4rlhFː,î"JȃR |- 0=p[:<Ϋ*X q:,49_?,=EL ?:  9m#!ABDA?Xϖʪ5ftB,»V?^`i ښ`t.nYUTɌ=zu@.#SP\4ε\b-і%LEN?ȔfQ΋L( R>)glOle 1aJqVYSeG4HFr9ׅh#CT $KuijW&g#ۛfugo.DOE%mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.9.rc1.gemspec.rz000066400000000000000000000010531446701454400322720ustar00rootroot00000000000000xTˎ0(M<h$V6l/p`L6, .FNk5* /4d : gc]{Ϲ>r3rf|H!f, ~֖;<FݾCsC))K4A*4tBo%qŒ"6'WrH#8,8{1 "QRHK0|B !fLOZ6rj(D4p!n.>eL :櫆^u+n[z^j+stE^MfK !>/p: Sd?~^0%2mfVd/H%HH*{yڠuX<}Tbv9Zw݁vR! um63GtvqS/}=߬rU65THFU_M\w-੹#:g HOFı3792r/,p($"e !tPdcU ZHus$SrxX,u'c G,}mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.9.rc2.gemspec.rz000066400000000000000000000010511446701454400322710ustar00rootroot00000000000000xTn@P8Iӗ@xby*KPoXMԹMFqf8QXI|ƌ]K*7;s>rSr|L bW, ~֖;: FݾCwC^SRk+s~L WXF] SR94Ӈ+qH#"8{>|aPX+!Q$I -Z2=m!HșQMZ¹{32 sz䘷z7wĺmE&;L/W851@| GRe>e\4VlVt)NJt¸j pT }n4UסduB%nrb] ,mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties-3.2.9.rc3.gemspec.rz000066400000000000000000000010501446701454400322710ustar00rootroot00000000000000xT[o0ДRzH0:^0yYk5*$~? ;Y TH8/wc٪= @ȮXH5η0p]qލX-p[X3PW,HeNq2[@͡>^1!M GB ] B Oh)lВiQ!rn#gFB4Ik bebs$́cjVdϱy^@㛈>2\pnp xj,f}_RPbMDaJUdͬȞHU0$E>݋RYA]5^3pLr׵{xCoolRS! umsFtV-X*/}xY~@C$R8e7}q%<1: H#=ebct @Sʕ<̇ܡkƊ͊.iFINWm4j!յύj:pLNr֍۟BN,`?W~i, mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/bundler/railties.dump000066400000000000000000000477211446701454400300430ustar00rootroot00000000000000[b{ : nameI" railties:ET: numberI" 3.0.20;T: platformI" ruby;T:dependencies[ [I"actionpack;TI" = 3.0.20;T[I"activesupport;TI" = 3.0.20;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"~> 0.14.4;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.2.11;T;I" ruby;T; [ [I"actionpack;TI" = 3.2.11;T[I"activesupport;TI" = 3.2.11;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.1.10;T;I" ruby;T; [ [I"actionpack;TI" = 3.1.10;T[I"activesupport;TI" = 3.1.10;T[I" rdoc;TI" ~> 3.4;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"~> 0.14.6;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.0.19;T;I" ruby;T; [ [I"actionpack;TI" = 3.0.19;T[I"activesupport;TI" = 3.0.19;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"~> 0.14.4;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.0.18;T;I" ruby;T; [ [I"actionpack;TI" = 3.0.18;T[I"activesupport;TI" = 3.0.18;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"~> 0.14.4;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.1.9;T;I" ruby;T; [ [I"actionpack;TI" = 3.1.9;T[I"activesupport;TI" = 3.1.9;T[I" rdoc;TI" ~> 3.4;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"~> 0.14.6;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.2.10;T;I" ruby;T; [ [I"actionpack;TI" = 3.2.10;T[I"activesupport;TI" = 3.2.10;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.2.9;T;I" ruby;T; [ [I"actionpack;TI" = 3.2.9;T[I"activesupport;TI" = 3.2.9;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I"3.2.9.rc3;T;I" ruby;T; [ [I"actionpack;TI"= 3.2.9.rc3;T[I"activesupport;TI"= 3.2.9.rc3;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I"3.2.9.rc2;T;I" ruby;T; [ [I"actionpack;TI"= 3.2.9.rc2;T[I"activesupport;TI"= 3.2.9.rc2;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I"3.2.9.rc1;T;I" ruby;T; [ [I"actionpack;TI"= 3.2.9.rc1;T[I"activesupport;TI"= 3.2.9.rc1;T[I" rdoc;TI" ~> 3.4;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rake;TI" >= 0.8.7;T{ ;I" railties;T;I" 3.0.6;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI" = 3.0.6;T[I"actionpack;TI" = 3.0.6;T{ ;I" railties;T;I"3.2.8.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.8.rc1;T[I"actionpack;TI"= 3.2.8.rc1;T{ ;I" railties;T;I" 3.0.11;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.11;T[I"actionpack;TI" = 3.0.11;T{ ;I" railties;T;I" 3.0.0.rc;T;I" ruby;T; [ [I" rake;TI" >= 0.8.3;T[I" thor;TI"~> 0.14.0;T[I"activesupport;TI"= 3.0.0.rc;T[I"actionpack;TI"= 3.0.0.rc;T{ ;I" railties;T;I" 3.2.3;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.3;T[I"actionpack;TI" = 3.2.3;T{ ;I" railties;T;I" 3.2.6;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.6;T[I"actionpack;TI" = 3.2.6;T{ ;I" railties;T;I" 3.2.2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.2;T[I"actionpack;TI" = 3.2.2;T{ ;I" railties;T;I" 3.0.1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.4;T[I" thor;TI"~> 0.14.0;T[I"activesupport;TI" = 3.0.1;T[I"actionpack;TI" = 3.0.1;T{ ;I" railties;T;I" 3.1.7;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.7;T[I"actionpack;TI" = 3.1.7;T{ ;I" railties;T;I"3.1.4.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.4.rc1;T[I"actionpack;TI"= 3.1.4.rc1;T{ ;I" railties;T;I"3.2.4.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.4.rc1;T[I"actionpack;TI"= 3.2.4.rc1;T{ ;I" railties;T;I"3.1.1.rc3;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.1.rc3;T[I"actionpack;TI"= 3.1.1.rc3;T{ ;I" railties;T;I"3.0.8.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.8.rc1;T[I"actionpack;TI"= 3.0.8.rc1;T{ ;I" railties;T;I" 3.0.2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI" = 3.0.2;T[I"actionpack;TI" = 3.0.2;T{ ;I" railties;T;I" 3.0.9;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.9;T[I"actionpack;TI" = 3.0.9;T{ ;I" railties;T;I"3.0.0.beta4;T;I" ruby;T; [ [I" rake;TI" >= 0.8.3;T[I" thor;TI"~> 0.13.6;T[I"activesupport;TI"= 3.0.0.beta4;T[I"actionpack;TI"= 3.0.0.beta4;T{ ;I" railties;T;I"3.1.0.rc4;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.0.rc4;T[I"actionpack;TI"= 3.1.0.rc4;T{ ;I" railties;T;I" 3.1.3;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.3;T[I"actionpack;TI" = 3.1.3;T{ ;I" railties;T;I"3.2.0.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.0.rc2;T[I"actionpack;TI"= 3.2.0.rc2;T{ ;I" railties;T;I"3.0.4.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.4.rc1;T[I"actionpack;TI"= 3.0.4.rc1;T{ ;I" railties;T;I"3.0.7.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.7.rc1;T[I"actionpack;TI"= 3.0.7.rc1;T{ ;I" railties;T;I"3.0.9.rc5;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.0.9.rc5;T[I"actionpack;TI"= 3.0.9.rc5;T{ ;I" railties;T;I"3.1.1.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.1.rc1;T[I"actionpack;TI"= 3.1.1.rc1;T{ ;I" railties;T;I"3.1.5.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.5.rc1;T[I"actionpack;TI"= 3.1.5.rc1;T{ ;I" railties;T;I"3.0.0.beta2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.3;T[I" thor;TI"~> 0.13.4;T[I"activesupport;TI"= 3.0.0.beta2;T[I"actionpack;TI"= 3.0.0.beta2;T{ ;I" railties;T;I" 3.0.5;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI" = 3.0.5;T[I"actionpack;TI" = 3.0.5;T{ ;I" railties;T;I" 3.0.4;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI" = 3.0.4;T[I"actionpack;TI" = 3.0.4;T{ ;I" railties;T;I"3.0.13.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.0.13.rc1;T[I"actionpack;TI"= 3.0.13.rc1;T{ ;I" railties;T;I"3.2.0.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.0.rc1;T[I"actionpack;TI"= 3.2.0.rc1;T{ ;I" railties;T;I"3.2.3.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.3.rc1;T[I"actionpack;TI"= 3.2.3.rc1;T{ ;I" railties;T;I"3.1.0.beta1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I"activesupport;TI"= 3.1.0.beta1;T[I"actionpack;TI"= 3.1.0.beta1;T{ ;I" railties;T;I" 3.0.3;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI" = 3.0.3;T[I"actionpack;TI" = 3.0.3;T{ ;I" railties;T;I"3.0.7.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.7.rc2;T[I"actionpack;TI"= 3.0.7.rc2;T{ ;I" railties;T;I"3.0.5.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.5.rc1;T[I"actionpack;TI"= 3.0.5.rc1;T{ ;I" railties;T;I" 3.0.0;T;I" ruby;T; [ [I" rake;TI" >= 0.8.4;T[I" thor;TI"~> 0.14.0;T[I"activesupport;TI" = 3.0.0;T[I"actionpack;TI" = 3.0.0;T{ ;I" railties;T;I"3.0.9.rc4;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.0.9.rc4;T[I"actionpack;TI"= 3.0.9.rc4;T{ ;I" railties;T;I"3.0.6.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.6.rc1;T[I"actionpack;TI"= 3.0.6.rc1;T{ ;I" railties;T;I"3.0.0.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.3;T[I" thor;TI"~> 0.14.0;T[I"activesupport;TI"= 3.0.0.rc2;T[I"actionpack;TI"= 3.0.0.rc2;T{ ;I" railties;T;I"3.0.8.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.8.rc2;T[I"actionpack;TI"= 3.0.8.rc2;T{ ;I" railties;T;I"3.0.6.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.6.rc2;T[I"actionpack;TI"= 3.0.6.rc2;T{ ;I" railties;T;I"3.0.0.beta3;T;I" ruby;T; [ [I" rake;TI" >= 0.8.3;T[I" thor;TI"~> 0.13.4;T[I"activesupport;TI"= 3.0.0.beta3;T[I"actionpack;TI"= 3.0.0.beta3;T{ ;I" railties;T;I" 3.0.16;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.16;T[I"actionpack;TI" = 3.0.16;T{ ;I" railties;T;I"3.0.0.beta;T;I" ruby;T; [ [I" rake;TI" >= 0.8.3;T[I" thor;TI" ~> 0.13;T[I"activesupport;TI"= 3.0.0.beta;T[I"actionpack;TI"= 3.0.0.beta;T{ ;I" railties;T;I" 3.0.7;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI" = 3.0.7;T[I"actionpack;TI" = 3.0.7;T{ ;I" railties;T;I"3.1.0.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I"activesupport;TI"= 3.1.0.rc1;T[I"actionpack;TI"= 3.1.0.rc1;T{ ;I" railties;T;I"3.0.12.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.0.12.rc1;T[I"actionpack;TI"= 3.0.12.rc1;T{ ;I" railties;T;I" 3.0.14;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.14;T[I"actionpack;TI" = 3.0.14;T{ ;I" railties;T;I" 3.0.15;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.15;T[I"actionpack;TI" = 3.0.15;T{ ;I" railties;T;I"3.1.2.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.2.rc2;T[I"actionpack;TI"= 3.1.2.rc2;T{ ;I" railties;T;I"3.1.0.rc6;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.0.rc6;T[I"actionpack;TI"= 3.1.0.rc6;T{ ;I" railties;T;I"3.2.3.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.3.rc2;T[I"actionpack;TI"= 3.2.3.rc2;T{ ;I" railties;T;I"3.1.0.rc5;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.0.rc5;T[I"actionpack;TI"= 3.1.0.rc5;T{ ;I" railties;T;I" 3.0.17;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.17;T[I"actionpack;TI" = 3.0.17;T{ ;I" railties;T;I"3.1.0.rc8;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.0.rc8;T[I"actionpack;TI"= 3.1.0.rc8;T{ ;I" railties;T;I"3.2.2.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.2.rc1;T[I"actionpack;TI"= 3.2.2.rc1;T{ ;I" railties;T;I" 3.1.6;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.6;T[I"actionpack;TI" = 3.1.6;T{ ;I" railties;T;I" 3.2.4;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.4;T[I"actionpack;TI" = 3.2.4;T{ ;I" railties;T;I" 3.1.5;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.5;T[I"actionpack;TI" = 3.1.5;T{ ;I" railties;T;I"3.1.0.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I"activesupport;TI"= 3.1.0.rc2;T[I"actionpack;TI"= 3.1.0.rc2;T{ ;I" railties;T;I" 3.1.8;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.8;T[I"actionpack;TI" = 3.1.8;T{ ;I" railties;T;I"3.2.7.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.7.rc1;T[I"actionpack;TI"= 3.2.7.rc1;T{ ;I" railties;T;I" 3.2.7;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.7;T[I"actionpack;TI" = 3.2.7;T{ ;I" railties;T;I"3.2.8.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.2.8.rc2;T[I"actionpack;TI"= 3.2.8.rc2;T{ ;I" railties;T;I" 3.2.8;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.8;T[I"actionpack;TI" = 3.2.8;T{ ;I" railties;T;I"3.0.9.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.9.rc1;T[I"actionpack;TI"= 3.0.9.rc1;T{ ;I" railties;T;I" 3.0.12;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.12;T[I"actionpack;TI" = 3.0.12;T{ ;I" railties;T;I"3.1.2.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.2.rc1;T[I"actionpack;TI"= 3.1.2.rc1;T{ ;I" railties;T;I" 3.2.1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.1;T[I"actionpack;TI" = 3.2.1;T{ ;I" railties;T;I"3.0.10.rc1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.0.10.rc1;T[I"actionpack;TI"= 3.0.10.rc1;T{ ;I" railties;T;I" 3.1.0;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.0;T[I"actionpack;TI" = 3.1.0;T{ ;I" railties;T;I" 3.1.2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.2;T[I"actionpack;TI" = 3.1.2;T{ ;I" railties;T;I" 3.0.8;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI" = 3.0.8;T[I"actionpack;TI" = 3.0.8;T{ ;I" railties;T;I"3.0.9.rc3;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.0.9.rc3;T[I"actionpack;TI"= 3.0.9.rc3;T{ ;I" railties;T;I" 3.0.13;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.13;T[I"actionpack;TI" = 3.0.13;T{ ;I" railties;T;I" 3.2.5;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" rack-ssl;TI" ~> 1.3.2;T[I" thor;TI"< 2.0, >= 0.14.6;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.5;T[I"actionpack;TI" = 3.2.5;T{ ;I" railties;T;I" 3.2.0;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.2.0;T[I"actionpack;TI" = 3.2.0;T{ ;I" railties;T;I"3.1.0.rc3;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I"activesupport;TI"= 3.1.0.rc3;T[I"actionpack;TI"= 3.1.0.rc3;T{ ;I" railties;T;I"3.1.1.rc2;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI"= 3.1.1.rc2;T[I"actionpack;TI"= 3.1.1.rc2;T{ ;I" railties;T;I"3.0.8.rc4;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I"activesupport;TI"= 3.0.8.rc4;T[I"actionpack;TI"= 3.0.8.rc4;T{ ;I" railties;T;I" 3.1.4;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.4;T[I"actionpack;TI" = 3.1.4;T{ ;I" railties;T;I" 3.1.1;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.6;T[I" rack-ssl;TI" ~> 1.3.2;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.1.1;T[I"actionpack;TI" = 3.1.1;T{ ;I" railties;T;I" 3.0.10;T;I" ruby;T; [ [I" rake;TI" >= 0.8.7;T[I" thor;TI"~> 0.14.4;T[I" rdoc;TI" ~> 3.4;T[I"activesupport;TI" = 3.0.10;T[I"actionpack;TI" = 3.0.10;Tmavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/empty_specs000066400000000000000000000000041446701454400261420ustar00rootroot00000000000000[mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/gems/000077500000000000000000000000001446701454400246255ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/gems/n/000077500000000000000000000000001446701454400250625ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/gems/n/nexus-0.1.0-java.gem000066400000000000000000000070001446701454400302640ustar00rootroot00000000000000data.tar.gz0000644000000000000000000000004300000000000013314 0ustar00wheelwheel00000000000000~Qb``T.metadata.gz0000644000000000000000000000167700000000000013414 0ustar00wheelwheel00000000000000~QWK6WL| E iQ h 𱻾w(ɶu‡Xir|Ca C[,mYG%Y$g;Ԇ Z [t5 dvL5uҚ d8( :N6[vl /cIqMˊ 3(Qۼl'$Nul $I$s>J u(+%=|iLܳ)8;ƈܣELx2WI^p,G%'Fff=!|}O's8Y֎zd>&L;iy|s?.W=.&q}EWVWed806ZG3ޡPw4żF9Qn9= U\nsyEb._}_\N^Lm}w׼zO3zMȔw7sU`Pe#$`b5~ &/Q-i:O_Qk=A3tP|(=wr]2d0og`àQ-vhk;qm㊈FI橈{tg94딶ՈqˌE=nS0%9ꔱ92!>D+ &X`UEVF;z+z|)>Mlt P% #&tHXLtxlF7΂s M6 n5Tplyl3</UCʟx%SQUQ9םYՙ@eLe:5B>I&0t7=HLE7qTE52Ӿ`r:vU#Nk߿fP mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/gems/n/nexus-0.1.0.gem000066400000000000000000000200001446701454400273400ustar00rootroot00000000000000data.tar.gz0000644000000000000000000001130000000000000013312 0ustar00wheelwheel000000000000000"m,G`긁 }0|dVVN'ON4Y[~L9|kEؾZϤ}Bjcg9iwH٨IuԼ8n>jwIqn`V~rGo4Er趐 PZ8h:s>[Vhti5]hrlj @sx>i|}l7P71Ykq@[O Zv snu;YI;S^$Nʝt*Pڜ *@_Acz [nwۭq9hadwreS<>gh}z.Y & 䲊Wj ]1\:&GH`8v_~!hz¹mOԱMzi}\S1 uφ~~ ppvW3ny?ɳ2À ׈NbPKSϝEof̃N |#$e3募),zhqaq<ƍW\I}M%:35d 3wL]eR"DMÅj bG;|/XAs _Wx,q.\d86X/Q[bHY^+ N3;:T <A<\H%ѫ:5ZVSJ WiyxgyPo Ht$NE/")F Q7 +-ge;ij.Usj'LHM'Q(66 R? ?<rlty RF(ǣ_`ƕDތ*=\q0ܷqx9u2.[0E0F%xbĊ43Qgh@-DH8}"gyo+35C˖# |OeRʞJ<2Yc*SxV?ՐgI Aiuh@WuJ6R˝R((XOÄ[WpZ DzC.8j ~}w:%}88wvEjc{ZŊ|*UKF;f5ennmw%L"qm犻a{EZ"/%̟ۼw&WVۥI!2;_ɮB 7-bI>9˲8:B4`"V 8 Jhnwt3 xW]~^=ų7To-6鹩7Jދzw$\#&B5*zsGg3jaaF4r"*1 ՟X )teImwƏCxH6:a^ʉE[,d$7IO[]RVXL3Em~fGR~TP4 aR~/TN}9n! "{hFyGh._>˞>}},̌ܝk3" H1VXd '7& [6u$ZG]=<`.Š[/%\Y.'W 0R7.i #<,3S A(L}I&O[Te p\~.N=<+JAegy?œ=Sg_n9wl &ϋcwvgWnFc\aOW % Li`'>xSH~A-Hx}  CZu&{h0S 1;L(8ѝpTNL%AP/ȤA1.94aܗ᱙4,}\-D~13ʛ} {9[MɯڷM @}[צo}Աj|kR֤:;ϨlTJ\}S~DKAjVD6li kP5XJ+R|"vؙ}~] .ߞ|:ӆ&Oՠ-@}[\LZEk:HH@7&2i1c/ޮ2È4z~WֻT;!~tzwo7em5oR4]XށFC*0e+Zbw3m~Rl{$g: ؽXi6C$*Q?n"mevVXcZ4IlSd1 )k2Q*0Pqwabzlkѻh=BТwo ~\WT˳MP1SX^4`|Mo\hDnc+:9 hhbE4Mَ\\: `JL|3ٍ,䙊-ǚ.'YJ+t)9V:;\ϧ|z7 $+#e2h=A ,ݼ_9ֽ*I1mlgs11{OXw?Tben}Ӊy;0$=K~Weo>tדе~.̀VV=<ԥik9N0V+&c`3F\lU"[]6AtoÝSMDNz'f+3 PPeKjQ1pqυ E;j60g`ҘeG%jBHJ`g(=P nn*"hBMɢJrۄ)$Չ\Cx-@|aKjZcfɱ~ E`ft sz2䥝*9T@ִƖ"*ĖG)%HR|G>mt}y>T]?U;)3q'jw,'Ly;HBHɋ-U)Ux3Ϻ,8Vl' KU*Jj4mrGz9e}qs.MG KWzޫC_o'a*Y:a)m*1&nZЊLxG Qc%~Jٛp^$>hsW.*yJU'6@^+nhưaRD7yOqfdގxz3䝙 kaSY2I1S )ZYڲ|01 bf`;:NAt`ҺwQJU臿K*ȷ罹z\ʜ7G=OOjcpKf;RYaX Gjj{8Ttg15L]'a,®al-Iy)Hȧ_=zA7 +m5}OEK$7hm؁K2&k44CA,2{߿2l`khGVpǀpuh`8WRln5'_xWNsVP]3z/s;ֈ.VB{)6jAϔj'Db`z>:ptkf:[g(k)p6uRmA*TuY.ڹbTLhC9z'_imb"1wxA>"IK*0nA%ʃ܎9JB/}E KnW0vmT˃NVNU_yR'|?@tQg`c%Cw]y~hy;D[,I E:Àt.˸y$t g&{ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/gems/n/nexus-0.1.0.pre.gem000066400000000000000000000240001446701454400301310ustar00rootroot00000000000000data.tar.gz0000644000175000017500000001130000000000000013304 0ustar kristiankristian0"m,G`긁 }0|dVVN'ON4Y[~L9|kEؾZϤ}Bjcg9iwH٨IuԼ8n>jwIqn`V~rGo4Er趐 PZ8h:s>[Vhti5]hrlj @sx>i|}l7P71Ykq@[O Zv snu;YI;S^$Nʝt*Pڜ *@_Acz [nwۭq9hadwreS<>gh}z.Y & 䲊Wj ]1\:&GH`8v_~!hz¹mOԱMzi}\S1 uφ~~ ppvW3ny?ɳ2À ׈NbPKSϝEof̃N |#$e3募),zhqaq<ƍW\I}M%:35d 3wL]eR"DMÅj bG;|/XAs _Wx,q.\d86X/Q[bHY^+ N3;:T <A<\H%ѫ:5ZVSJ WiyxgyPo Ht$NE/")F Q7 +-ge;ij.Usj'LHM'Q(66 R? ?<rlty RF(ǣ_`ƕDތ*=\q0ܷqx9u2.[0E0F%xbĊ43Qgh@-DH8}"gyo+35C˖# |OeRʞJ<2Yc*SxV?ՐgI Aiuh@WuJ6R˝R((XOÄ[WpZ DzC.8j ~}w:%}88wvEjc{ZŊ|*UKF;f5ennmw%L"qm犻a{EZ"/%̟ۼw&WVۥI!2;_ɮB 7-bI>9˲8:B4`"V 8 Jhnwt3 xW]~^=ų7To-6鹩7Jދzw$\#&B5*zsGg3jaaF4r"*1 ՟X )teImwƏCxH6:a^ʉE[,d$7IO[]RVXL3Em~fGR~TP4 aR~/TN}9n! "{hFyGh._>˞>}},̌ܝk3" H1VXd '7& [6u$ZG]=<`.Š[/%\Y.'W 0R7.i #<,3S A(L}I&O[Te p\~.N=<+JAegy?œ=Sg_n9wl &ϋcwvgWnFc\aOW % Li`'>xSH~A-Hx}  CZu&{h0S 1;L(8ѝpTNL%AP/ȤA1.94aܗ᱙4,}\-D~13ʛ} {9[MɯڷM @}[צo}Աj|kR֤:;ϨlTJ\}S~DKAjVD6li kP5XJ+R|"vؙ}~] .ߞ|:ӆ&Oՠ-@}[\LZEk:HH@7&2i1c/ޮ2È4z~WֻT;!~tzwo7em5oR4]XށFC*0e+Zbw3m~Rl{$g: ؽXi6C$*Q?n"mevVXcZ4IlSd1 )k2Q*0Pqwabzlkѻh=BТwo ~\WT˳MP1SX^4`|Mo\hDnc+:9 hhbE4Mَ\\: `JL|3ٍ,䙊-ǚ.'YJ+t)9V:;\ϧ|z7 $+#e2h=A ,ݼ_9ֽ*I1mlgs11{OXw?Tben}Ӊy;0$=K~Weo>tדе~.̀VV=<ԥik9N0V+&c`3F\lU"[]6AtoÝSMDNz'f+3 PPeKjQ1pqυ E;j60g`ҘeG%jBHJ`g(=P nn*"hBMɢJrۄ)$Չ\Cx-@|aKjZcfɱ~ E`ft sz2䥝*9T@ִƖ"*ĖG)%HR|G>mt}y>T]?U;)3q'jw,'Ly;HBHɋ-U)Ux3Ϻ,8Vl' KU*Jj4mrGz9e}qs.MG KWzޫC_o'a*Y:a)m*1&nZЊLxG Qc%~Jٛp^$>hsW.*yJU'6@^+nhưaRD7yOqfdގxz3䝙 kaSY2I1S )ZYڲ|01 bf`;:NAt`ҺwQJU臿K*ȷ罹z\ʜ7GxXg AT=,bͲ"CdԬKd%ԚN*]:)f͆aHG [PbR32U4Lt'IK ̋<-GR7I D`؍_wL[AH[zVJk^9$Оqr 4Z݃0%E1;^)&&at=(85"+Bc ~ڊR g VMbݝƟ_<{~`_utD=guu6Wk&2UIY{ONRhѢl83E*iS=SJ Ns$r>7f'{ӡ3fel!c.Wԙj; R(ڠ́V'5](Mń6~@+ m^wTlB&F.}_Ғ [|P 1Sk5g#[iUg(.~̧5:6%!$bݱYmm[/9#F[GC˥L5g\6wrY,g!t6K 0d >x!\F/=@["W2}—#|WkX[r.U0ӡDgӕWGteuQG`c%*l-*wȦ*xؒ<} Z]H\7ϲߪ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/gems/n/nexus-0.2.0.gem000066400000000000000000000070001446701454400273460ustar00rootroot00000000000000data.tar.gz0000644000000000000000000000004300000000000013314 0ustar00wheelwheel00000000000000Qb``T.metadata.gz0000644000000000000000000000167600000000000013413 0ustar00wheelwheel00000000000000QWK6WL| EIQ h cTȮ/J-e݅!%k7ߐ3tD36{m};^2˕@3xLF!i`ݢ&!$i~2D( :N6'`6J{r:(_+(΀>ˆq2ϿAP1K"$]6L_@dm}~"lAsjFԼ߫R-X 3@ \'K͆VN(5yl}OYwֈZEakJ&ӆ~;jc5EXۙ,knWD>6J2OEܣ =ˡq]F[f,q / W͹4 hLhI~":_]i5 W~y~KGd-=ddvԧ1 ѹBpA9=Jf46=>J&@(Ú`pKB˵&d#̠Ogg,"+?Jx=JD>@&6RqMґmm:$,&m:<6HfLjgѹvf gYj7׿vWAUs6ȼc*!A t̪ςsά o }&2rUo}^K$e?p΢8Di_09\J;ܪi o;`jP mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/it/000077500000000000000000000000001446701454400243065ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/it/.bundle/000077500000000000000000000000001446701454400256355ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/it/.bundle/config000066400000000000000000000001371446701454400270260ustar00rootroot00000000000000--- BUNDLE_MIRROR__HTTP://RUBYGEMS.ORG: http://localhost:8888/nexus/content/repositories/gems/ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/it/Gemfile000066400000000000000000000001141446701454400255750ustar00rootroot00000000000000source 'http://rubygems.org' gem 'nexus', '< 0.2.0' gem 'zip' gem 'minitest'mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/it/Gemfile.lock000066400000000000000000000004561446701454400265350ustar00rootroot00000000000000GEM remote: http://rubygems.org/ specs: always_verify_ssl_certificates (0.3.0) minitest (5.18.1) nexus (0.1.0) always_verify_ssl_certificates (~> 0.3.0) zip (2.0.2) PLATFORMS ruby universal-java-20 DEPENDENCIES minitest nexus (< 0.2.0) zip BUNDLED WITH 2.3.26 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/jbundler-prerelease.pom000066400000000000000000000050171446701454400303440ustar00rootroot00000000000000 4.0.0 rubygems jbundler 0.8.0.pre-SNAPSHOT gem managing jar dependencies https://github.com/mkristian/jbundler managing jar dependencies with or without bundler. adding bundler like handling of version ranges for jar dependencies. MIT http://opensource.org/licenses/MIT MIT license Christian Meier https://github.com/mkristian/jbundler.git https://github.com/mkristian/jbundler utf-8 3.0.0 2.0.0 rubygems bundler [1.7,1.99999] gem rubygems jar-dependencies [0.1.11,0.1.99999] gem rubygems maven-tools [1.0.8,1.0.99999] gem rubygems ruby-maven [3.1.1.0.6,3.1.2) gem org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} jbundler-0.8.0.pre.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/jbundler-release.pom000066400000000000000000000050061446701454400276330ustar00rootroot00000000000000 4.0.0 rubygems jbundler 0.8.0.pre gem managing jar dependencies https://github.com/mkristian/jbundler managing jar dependencies with or without bundler. adding bundler like handling of version ranges for jar dependencies. MIT http://opensource.org/licenses/MIT MIT license Christian Meier https://github.com/mkristian/jbundler.git https://github.com/mkristian/jbundler utf-8 3.0.0 2.0.0 rubygems bundler [1.7,1.99999] gem rubygems jar-dependencies [0.1.11,0.1.99999] gem rubygems maven-tools [1.0.8,1.0.99999] gem rubygems ruby-maven [3.1.1.0.6,3.1.2) gem org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} jbundler-0.8.0.pre.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/latest_specs000066400000000000000000000001011446701454400262760ustar00rootroot00000000000000[[" nexusU:Gem::Version[" 0.1.0" ruby[@U;["0.1.0.pre@ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/metadata-prereleases.xml000066400000000000000000000040741446701454400305110ustar00rootroot00000000000000 rubygems nokogiri 1.5.0.beta.1-SNAPSHOT 1.5.0.beta.2-SNAPSHOT 1.5.0.beta.3-SNAPSHOT 1.5.0.beta.4-SNAPSHOT 1.5.1.rc1-SNAPSHOT 1.5.3.rc2-SNAPSHOT 1.5.3.rc3-SNAPSHOT 1.5.3.rc4-SNAPSHOT 1.5.3.rc5-SNAPSHOT 1.5.3.rc6-SNAPSHOT 1.5.4.rc1-SNAPSHOT 1.5.4.rc2-SNAPSHOT 1.5.4.rc3-SNAPSHOT 1.5.5.rc1-SNAPSHOT 1.5.5.rc2-SNAPSHOT 1.5.5.rc3-SNAPSHOT 1.5.6.rc1-SNAPSHOT 1.5.6.rc2-SNAPSHOT 1.5.6.rc3-SNAPSHOT 1.5.7.rc1-SNAPSHOT 1.5.7.rc2-SNAPSHOT 1.5.7.rc3-SNAPSHOT 1.6.0.rc1-SNAPSHOT 1.6.2.rc1-SNAPSHOT 1.6.2.rc2-SNAPSHOT 1.6.2.rc3-SNAPSHOT 1.6.3.rc1-SNAPSHOT 1.6.3.rc2-SNAPSHOT 1.6.3.rc3-SNAPSHOT 1.6.7.rc2-SNAPSHOT 1.6.7.rc3-SNAPSHOT 1.6.7.rc4-SNAPSHOT 1.6.8.rc1-SNAPSHOT 1.6.8.rc2-SNAPSHOT 1.6.8.rc3-SNAPSHOT 1.9.0.rc1-SNAPSHOT 1.10.0.rc1-SNAPSHOT 1.11.0.rc1-SNAPSHOT 1.11.0.rc2-SNAPSHOT 1.11.0.rc3-SNAPSHOT 1.11.0.rc4-SNAPSHOT 1.12.0.rc1-SNAPSHOT 1.14.0.rc1-SNAPSHOT 20140416150033 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/metadata-releases.xml000066400000000000000000000074351446701454400300060ustar00rootroot00000000000000 rubygems nokogiri 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.1.0 1.1.1 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.4.3 1.4.3.1 1.4.4 1.4.4.2 1.4.5 1.4.6 1.4.7 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.5.10 1.5.11 1.6.0 1.6.1 1.6.2 1.6.2.1 1.6.3 1.6.3.1 1.6.4 1.6.4.1 1.6.5 1.6.6.1 1.6.6.2 1.6.6.3 1.6.6.4 1.6.7 1.6.7.1 1.6.7.2 1.6.8 1.6.8.1 1.7.0 1.7.0.1 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.10.6 1.10.7 1.10.8 1.10.9 1.10.10 1.11.0 1.11.1 1.11.2 1.11.3 1.11.4 1.11.5 1.11.6 1.11.7 1.12.0 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.13.0 1.13.1 1.13.2 1.13.3 1.13.4 1.13.5 1.13.6 1.13.7 1.13.8 1.13.9 1.13.10 1.14.0 1.14.1 1.14.2 1.14.3 1.14.4 1.14.5 1.15.0 1.15.1 1.15.2 1.15.3 20140416150033 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/metadata-snapshot.xml000066400000000000000000000030061446701454400300300ustar00rootroot00000000000000 rubygems jbundler 20140416.150033 1 20140416150033 gem 9.2.1-20140416.150033-1 20140416150033 pom 9.2.1-20140416.150033-1 20140416150033 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/nokogiri.compact000066400000000000000000002774401446701454400271010ustar00rootroot00000000000000--- 1.3.1 |checksum:72355dfd8169956870b2c581111e638059e2c62251c6ffb8d40f7e3f36a246b9 1.3.1-x86-mswin32 |checksum:37a0547a3d4510baeaff07f9a8e7da4b0005061445fd846b6b34af822c7c5368 1.3.0 |checksum:888b03ccfdc035cc5ded6f9df08d2d69d0350eb7ccf7c2da78f24ba3e8b8765b 1.3.0-x86-mswin32 |checksum:283b301275f174743ad1d6d4625063285b7d3b8b284985595ce37622f450e41d 1.3.1-java |checksum:37c28a91db6935196f8c0d4faf5a058c5f44e785d6c775b2bf3327dde275c1f3 1.3.1-x86-mingw32 |checksum:51f2867408fe9788ad437f3e4e8755ac0b0c90eb9a2221f8ba45bc46a7bfac61 1.2.3-java |checksum:27d69a2a66253a67118c1598d2e5836fb1136cc83c7ba83d224629b3c24483d8 1.2.3 |checksum:f8b4c06e0abe0b8d18585604354c919554ab909bf19c0913e44e2e6d744cabe7 1.2.3-x86-mswin32-60 |checksum:73810a40cc8827a658af668cc2468bf6be17a8703ea9fe9fe499c6975c0703f1 1.3.0-java |checksum:c9b872a1baa69489e9c2b08685c70dc682a31c72db2019aac759374bf63ad4f5 1.2.1 |checksum:57cc9bc7fc2d1f2dd058bf20d3da694d86e6656b75a7bd70a72dc24329b1cf93 1.2.1-x86-mswin32-60 |checksum:d56491656b2cf205087923e65a210404de7cd9268f5674a2ce07fa368f5b72eb 1.2.2-java |checksum:b69db5a8fcdedb489f543c57f92cc36b168f60ae40655dd2f45d156f283e4507 1.2.2 |checksum:9459db2173dc09b4a2b943efc167d7a85bdc30c26a8a3d68d57ff4bbc5d9873a 1.2.2-x86-mswin32-60 |checksum:346a3106dca72fa61d26dd44a5535424ffa4722837a325b86312bc83fed7da4e 1.2.0 |checksum:68e8aaa7751fd5e81041d85417a8e262900ff502d81dd77e47d52d83fc0b84bf 1.2.1-java |checksum:9b53e59964ff09648254a04afdadea22255301993bbf0073ae07a4dc2cd477ac 1.1.1 |checksum:84183e0154bbee75c0cf4bc86bc90d2a750a86170f617923ab66e92b25dc466e 1.2.0-java |checksum:4cb0b12871cdaaed8d218784e9b2531816e66d77e70d257ceb4b66c13a728672 1.2.0-x86-mswin32-60 |checksum:04a36f891ed2b7ab9001a3db8fda971e087f662628318463e5926a2507980254 1.0.7 |checksum:2c4af8d4a65ac5290445bfe7582be4490162d6934f49d76858b55647b4c4428d 1.0.7-x86-mswin32-60 |checksum:d1b9c19f4e7675a77b2338ea64681400b093bfa2955844f79d4cd2274fe9ee41 1.1.0 |checksum:c564fd011bad84e67ce92839532afbde0685cd99212c376e35ee71cb5cadb750 1.1.0-x86-mswin32-60 |checksum:2cc6b8f5514a1c6f613aeb7989cb23705e3b10b0fdcfc2b12a40ca501533edd9 1.1.1-java |checksum:24b7ea6291daf242f429acea60afc2b1f3434b1c0bf2d75f4997180d14f7b7bf 1.1.1-x86-mswin32-60 |checksum:2e15f77b65bb74c54101866e0fe6b2d3fff11daf237838f20d3e372683d909d6 1.0.5 |checksum:5a1a292c89fd68fe5b58b47cce1555743a31f6e381f4a02ef9d5a9c21bcf77c0 1.0.6 |checksum:f8980ca0c83a0e10915ba878bbec1e2695b4258ed74fd67be1f2427f2b81f27c 1.0.6-x86-mswin32-60 |checksum:46782ac3fd94f49b04c2eba395620b2f0e4aa390d746fddc621a9b83869d5f16 1.0.2 |checksum:0743ec7ab20eb187093bb3cbe0243514c2327fa63e78d118a90a551b8fa78633 1.0.3 |checksum:709a944dd983f0218e6ca984f1446d2571105abe042fdae0145b73d444aa14d5 1.0.3-x86-mswin32-60 hoe:>= 1.7.0|checksum:20dfeef2d983290995d0e6afd582410bbb031d06189d917ccbf5484c61c844c4 1.0.4 |checksum:94f3c6dcbec9df53d9697ef9e3fe8499fa50b5774359cf743a55cbf08234e08b 1.0.4-x86-mswin32-60 |checksum:73cd0f290784c56410c1b6a783549e83756cd183ebeffd6859aaf8a822b738fd 1.0.5-x86-mswin32-60 |checksum:6031963b3ee53700d3d7fae429ee340112481acae1b7b89aacbc5dfdd6a8fbb9 1.0.1 |checksum:1304f9062f14d95254b19c431fae0471bf38eccab5d063f27424835ad35c734c 1.0.0 |checksum:d064e177131d8f9520acdb5a1d16d95623b807e0a94c9975c15fd91b7ab8d956 1.0.0-x86-mswin32-60 hoe:>= 1.7.0|checksum:e7741c12a6da6629fc4459eeeee2df5c3cc25d377557e02ecf109ceaa9dc2eb8 1.3.3 |checksum:9fa019e7372f93302e34cc9989c832ea600593884b69d48b01bdc6696ef57fe9 1.3.2 |checksum:25c078e8d1bac65efe1829642229e325a7c60d8fefd87f83a788fb986d1abcc8 1.3.0-x86-mingw32 |checksum:7ad6f3fec1e5cd34d6a0eff279e10d596098549d3178793250dde73237dee416 1.3.2-java |checksum:053382ada8eef3e386ba168c42783cf4ac0f63d54d08353399f7ce61ce3d5025 1.3.2-x86-mingw32 |checksum:d975fb50545fc12f0dec6707136085de7d32950ea097cd2761bc729b5e985b62 1.3.2-x86-mswin32 |checksum:9dfbdc07f185c5d1c0e97bdcaf8cc584246327bbc5941cb0d2af42b4c5264ea8 1.3.3-java |checksum:71e4d0f524968d58784136767f317fc73f0d936bad3411b6a7ff6498e6485383 1.3.3-x86-mingw32 |checksum:bbd854ee618c82a218fb7cf44f3756f94570e1f4418e9723d5927d56b83c1058 1.3.3-x86-mswin32 |checksum:888129313fbca295521e3c6efd8c5301cf605e0c84ee3c42a49b3b151bea2ffa 1.4.0 |checksum:89ed690aa46e80b0a3d39f66ec4359f5acefc97a11a867539c2f4147d743b7f3 1.4.0-x86-mingw32 |checksum:88598d53531435619d19e97bf246b4bfc21784aaf87dfa89a1f41a82853478ad 1.4.0-x86-mswin32 |checksum:55f8344496d7695247a7818faf1e3ad11f05ac06352ef31ffee4999239f17d1b 1.4.0-java |checksum:6a9efc960ba11d815a36de5194b811b18e40d48e50a63672193d8cfeffd953d5 1.4.1 |checksum:3a539fdb66df12c2ae76ea52d3d7789835dac1d10fb1517d8d2545f2567cee34 1.4.1-java |checksum:9866a5a3401d5f8b8e55f80af4c95f7904162e56e7df8e68da87e3e1e0a9486b 1.4.1-x86-mingw32 |checksum:b5046bfdd8c0ba62e3df758adaae53f01b28b04d5cd916ad8b977c8410d10e35 1.4.1-x86-mswin32 |checksum:a4f6459fc2ec78470777f9ef7daa0643c652bad0646806cfd1cd4a8c094f0691 1.4.2 |checksum:a56c2cfe2aa4ab38fd1ff4c4fe3d4f029529f8da900e94b50861062ac70770d8 1.4.2-java weakling:>= 0.0.3|checksum:c9f8e60b9c3e7ce89af49b3bb6258fd6f2d9102a9253ba9fa0ffdea7ea89799d 1.5.0.beta.1-java |checksum:700780d13a9b56be0af5d79cd47ee569df015ca28ecc1b02c5362ec38c712fe4,rubygems:> 1.3.1 1.4.2.1-x86-mingw32 |checksum:8def1c65c661341af1babd0f8cb35f66e7927d340c79ec9a6b6e25eb49ba1525 1.4.2.1-x86-mswin32 |checksum:6c71f0f8c0492b1b597643cfd890b1158f50a07360ca41c92a6989a78a072bfa 1.5.0.beta.1 |checksum:3a329010f905819436687e883021670f75385e122dba963062db4011972cba12,rubygems:> 1.3.1 1.4.3 |checksum:e84343f383b570b370c92b90ccd74791f31e43a08497cc637b78de9fb640ed0e 1.4.3-x86-mingw32 |checksum:5813614abf9d8e5e0d0dfafec892d1bd30d0091170fb154d183ed0251862b2a4 1.4.3-x86-mswin32 |checksum:e7a00e66bb58e1d88261c3aa132bbfd7a31993e5c3c6fdbf6b554885ba2fb829 1.4.3-java weakling:>= 0.0.3|checksum:218c2b1b89ecd06388b1594694f27653a2a1f2d954ee966e5f5cc9c4ba9d3cef 1.4.3.1 |checksum:354c38ca7d802bf1b2c072ec1bf3214e2358323b30f28a05d24e46f5831862e9 1.4.3.1-x86-mingw32 |checksum:bd50d35fbc83f91b0dcb2dcc59b0faf05ce1ab0f1a3dfe41f1e53f2f25f50150 1.4.3.1-x86-mswin32 |checksum:85701d5ae763544dc4de2b163ce297a2db085957563913430709d7c6cabf9b67 1.4.3.1-java weakling:>= 0.0.3|checksum:e104cbabdb62860aa97eccd61b9c2af9e9b86ec67517b950e7a3c3643c27ebe7 1.5.0.beta.2-java |checksum:434060ca167c46b6570de5054f886ea645a2e5986fe59a392eac0f80d5801a78,rubygems:> 1.3.1 1.5.0.beta.2 |checksum:143c9848acdd44129564974d61383d8c846272c2a554197d5dfb3c9349c84b4f,rubygems:> 1.3.1 1.4.4 |checksum:3d1ed8cc4b6caf1f1cdb7b53be26e72ab70b7111d463d76f898f1f32d998a7b2 1.4.4-java weakling:>= 0.0.3|checksum:0996d6dde96c942f467881259843d61bf082d6736612b583716351d8d5fd409e 1.4.4-x86-mingw32 |checksum:1a77024fa413efc6b123f69842deaa4226f134fc1163d49575dea43c66fdb808 1.4.4-x86-mswin32 |checksum:6e7e7f4b8a261b5e778ae8b939b3c870efb6bf0d5518e387b9dafa079a8a24f3 1.4.4.1-x86-mingw32 |checksum:63df6d8c09cfef9c7ec15cf3130b08de9e9d0b77829e4c1dc32e89c0b13c345f 1.4.4.1-x86-mswin32 |checksum:388a21b2558d450e1fdbff374554025c0276a0b1cec985dda8a78ee58833a7f3 1.4.4.2-java weakling:>= 0.0.3|checksum:6129dd63858e409a0ef88b15480c183bb2932bb01ef59e31d665bb78586cc3ff 1.5.0.beta.3 |checksum:39e3bf715f48a88c961fa8c05eb1e3ac552c3700ab401f6e8272ba91f8d71e63,rubygems:> 1.3.1 1.5.0.beta.3-java |checksum:d12180695ac58dc2f6016ca393983467e4efc57c77ac7e23c63cb535d06be6f9,rubygems:> 1.3.1 1.5.0.beta.4-java |checksum:04c7e7f9d29ca9e26c4e6b79da549c3001fa7e5d140c4af91a3dbf9370f324b3,rubygems:> 1.3.1 1.5.0.beta.4 |checksum:640a8253fb51ca30e255f03baf5c9d056f2b00e6f1dfac5b1bbbddf479446023,rubygems:> 1.3.1 1.4.5-x86-mingw32 |checksum:7a9c3249428dc5f1ba66d79789c62afd89eb047a71b8c7230f3dfcd063c3dc17 1.4.5-x86-mswin32-60 |checksum:2c9e9176c8708132f476513d7cf513339c1f8168c1a9227bb146793b7a309781 1.4.5 |checksum:33ff8cc21450e6471c3fc408038af38fdacd9fbbeff7f33864ca9ec8866bab5d 1.4.5-java weakling:>= 0.0.3|checksum:f6171a01eb1ff12d9c13589cb471492cc373758d102b2a3f8224f993f0c3e09f 1.4.6-x86-mswin32-60 |checksum:7f305afef18a7545fc6509ed443add35d14e2839c400ff743d50920e9b654c7b 1.4.6-x86-mingw32 |checksum:6b90976fcf7d1fa205c4d9298453bd9e9735fff9e646a7cf5f89b4e7c6dc1086 1.4.6-java weakling:>= 0.0.3|checksum:a380eb6c7a7ed914d24b084a782e7d7ba044fc52914476cb99306a77e364965d 1.4.6 |checksum:07d4dc0ae9507b331aad3e43a9e007422e73e336d996c0e40dfabf6b8d2faecc 1.4.7 |checksum:6e5f5995fd977c0847957712a5f1ab6b804a59445aa9dc9c5873152ea210e7c9 1.4.7-x86-mswin32-60 |checksum:9154c957483781f6017b3b29b6adf2ea7ee9640b416dcbd559ad377446b92f85 1.4.7-x86-mingw32 |checksum:4134a9835e324110ac885417a24f105bd5be50b3e661c239f61898b4b1fe3bcd 1.4.7-java weakling:>= 0.0.3|checksum:0745853306c60bae6fb617f434aac63bffd8df2d21228465380f1df703fe4664 1.5.0 |checksum:47adaf8891dc9ea6f3b58435cf5cfabacb04390064eea1739c8a26678039ebc5,ruby:>= 1.8.7 1.5.0-x86-mswin32-60 |checksum:b2a822bd10985273edfe159c7e1bf211c4b8e44a2e6d2241cd76f20a1bbbabfd,ruby:>= 1.8.7 1.5.0-x86-mingw32 |checksum:e5513cdd5c4c517707b568a054f1531ee99f283307c291563ec52b6ca5660173,ruby:>= 1.8.7 1.5.0-java |checksum:9fcb9e6cda7107584b11bda38f20bffea0e67a62c430218f53278fe81e635303 1.5.1.rc1 |checksum:08778b7b5739fd87b13193a0934ae6e31c138f43053a3672ebc82ce4a6e4ae77,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.1.rc1-java |checksum:f0b306fdc4926363ee915c78d13d895697410473f241b4cef93592ee62b717bb,rubygems:> 1.3.1 1.5.1.rc1-x86-mingw32 |checksum:31bb98bd8d33f5c7ad9d52fd5a730c10d36490577a75068f9cb0e22def508ef6,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.1.rc1-x86-mswin32-60 |checksum:afc80bd91ba2984d4baf9ba579c8ca7ae5de58102380c67ad8d49342b9c2164f,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.1-java |checksum:91140c48602a848ad6e3df9d191ba631ec19b84ea2b4a9b6015a2298eea624fa 1.5.1 |checksum:1d730ab2e0b1f21ae80dc630995a45fd7542c9ac27a6f4a57b04fb2aecb0c5fe,ruby:>= 1.8.7 1.5.1-x86-mingw32 |checksum:b8592e9b8cb09968a552586cacda553fb55d2ee23d3749af56332640efee75df,ruby:>= 1.8.7 1.5.1-x86-mswin32-60 |checksum:3667e1fa58a63a67fb6d5913fcf56ca916f1deea059f07a62c3bba9db746062e,ruby:>= 1.8.7 1.5.2-java |checksum:1cf024cbc92e8d91e4b3c3486ab4926445fb2ab6ff07c6958d2df83932ac1524 1.5.2-x86-mingw32 |checksum:ff336b5bff4be8e583eee7f0042d936b9e066fb139e3d6b20b9f656b2fd877aa,ruby:>= 1.8.7 1.5.2-x86-mswin32-60 |checksum:5448c2b77df6144a07232de7d9df32b074070816d4e20228a7a982f0b101b749,ruby:>= 1.8.7 1.5.2 |checksum:b1b62744a1fba3e79d303ea66106a691efa2c0a8071c913e31dbd0df7f8e18f8,ruby:>= 1.8.7 1.5.3.rc2 |checksum:ac1f5ad8a26e4ac5e431cd1f0c26ae584cbbb7f8ec1e7194b657cdde3bd64533,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc2-x86-mswin32-60 |checksum:d2c191224246b0a448ec7bad236de493f4458154649032d38f1f864adce85ef5,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc2-x86-mingw32 |checksum:10853dc4e25d1da71f8cece692b3c3773ea33585ac27c568cc0dd738fab1e045,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc2-java |checksum:5ae2fe3a70847852efa414f1b85963deb5dfc3a49626629d693f4fefcecab019,rubygems:> 1.3.1 1.5.3.rc3 |checksum:bb7c4ad9629f4984dbc611e04e9aec12e492c03f6a39d5f386287e3b26178767,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc3-java |checksum:f4930f6c41920109f8896419aa2b93e9e8342a50063789f32f46930f30fdbaeb,rubygems:> 1.3.1 1.5.3.rc3-x86-mingw32 |checksum:441c8880200203d7aa15a91bad4203ebb7a3559dca0e490d95fd5b9745787b10,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc3-x86-mswin32-60 |checksum:6b60dae1dcb1909d3742c61b84d619af7a841c893ee45a82b45686b66ab38e4e,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc4-java |checksum:b392f7ac1da05390404465e52500721d5d0bab8adea69543008be3219835eb40,rubygems:> 1.3.1 1.5.3.rc4-x86-mingw32 |checksum:d4699e73deb77d0d1874bddefd37aaa97103cfb38d7042f7e0c023d141ee04aa,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc4-x86-mswin32-60 |checksum:1d58783a24cde3e5cef6c2e2319e2ce06fbd8e95c4ab6565a3a0cb18cb676477,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc4 |checksum:2405dac7e353f17f688b80c007d31e4d1072c986409e4d9ed32f9197d4f5102b,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc5-java |checksum:c1ef8e41e4044667430232fa37129ed784c65666e8fdde57048c95280e78018f,rubygems:> 1.3.1 1.5.3.rc5-x86-mingw32 |checksum:a040eae28bf771cb3ad1d44ed42280ef8c36b0c679191f85e6c870316af57a96,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc5-x86-mswin32-60 |checksum:db2a26a5ada0bed75952fdb75eeb17ac654dcf3f6c2cea3af6bdb63e0ea24765,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc5 |checksum:848d6cc65627395a275f7c15e9bd5fcef99f4fac97ef56ea7cd92e3756639c60,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc6 |checksum:87be3a69081524c6bb45c63353ffbbe0a733e23fac5c56a2c914ff5e5ae6bac3,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc6-x86-mswin32-60 |checksum:7f5a54174c0608a7fd760caad3a5b0d94295dacd3f1224830ca4a41e4a2f1f4b,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc6-x86-mingw32 |checksum:260351c3b109ea7cf2ba402f377bab7738990b17e5271aa73996d45edc409dd5,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.3.rc6-java |checksum:93839c52f121086eb76cae4ef70c5f7a62b6cb6b39c446eb082c8a62a0a9c9dd,rubygems:> 1.3.1 1.5.3 |checksum:6df2078765a1014b10be2cf0252648aa4b462739a118dc7864a83c2b4e2b8e7f,ruby:>= 1.8.7 1.5.3-x86-mswin32-60 |checksum:f8b5b071b34cf71774d46b66f86308f2ac4932c8cbf4fd90ffe0e7b6b416836c,ruby:>= 1.8.7 1.5.3-x86-mingw32 |checksum:7898f5f199e52c28a623bef942615eb8d8430df4340efeec43c00aabf039ce5a,ruby:>= 1.8.7 1.5.3-java |checksum:61a0e09eaa684ebf711a8abf3f565e4593f3baabd6337b740be559e2751404cd 1.5.4.rc1-x86-mswin32-60 |checksum:0b76c784ff6a3e249e4cba668f7ad6ca6324ae89d1589d8069dd9827a39ec38d,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc1-java |checksum:3fc09f44534f757eb537fc1d7c550bb07d28ccdd290ed34f217b1bfba60c5354,rubygems:> 1.3.1 1.5.4.rc1-x86-mingw32 |checksum:f7450563112a8bd6c9eff8e92cd06e22c6fec65b093f1619f307eea1b27e7f0d,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc1 |checksum:c43167d6f54e20b02f573ac54a48e384acbadc84330381bd89250c1038757381,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc2 |checksum:be459af0bd50f205518ed548161f6ca08bccb1dbe2cbc0bb26518c68591a8570,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc2-x86-mswin32-60 |checksum:797b5cb95a922f1a11135e1ea67b157295d2608bd5a781b3efb1d98e520787f3,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc2-java |checksum:71f38c4f5ac3b55799b86ef94427733823e7e5af5b724d8e5cd33022149dccdf,rubygems:> 1.3.1 1.5.4.rc2-x86-mingw32 |checksum:5ccd71e20217d9fd58e1f07727ebae5e1f59139f6c44852a7bfddf1f35d67491,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc3-x86-mingw32 |checksum:2b05574401cee91a84b842dfa37ecbd6f99ff2a4bdeb415daa1c64b71195d412,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc3-x86-mswin32-60 |checksum:6a4f182d3f2151a1b9303ac838c03d7ce3a1b8562f1d0af5d63b98b37841194b,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4.rc3-java |checksum:2dbe550181019eac57adf054ff0ef8c4c21b5e145ce54d2f7f025e4c7f418cb8,rubygems:> 1.3.1 1.5.4.rc3 |checksum:1535dc4bf8dd4530df83b1d7cafba471cc9dc88ee6860e715a425203650207c2,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.4-x86-mswin32-60 |checksum:df666214b187f3124ac81e53a846ef66e7d97f30426bbb8dd1f6fbc48183ab4b,ruby:>= 1.8.7 1.5.4-java |checksum:8f6b6b678c4376823a2d305d4bb8d07da4afce733627a753f5e38fd3a3777ea8 1.5.4 |checksum:3a0f275513d997ff99b85c6f9811b92dc46022cfdda3b9dda4d3c40eb8aa07bb,ruby:>= 1.8.7 1.5.4-x86-mingw32 |checksum:f5ab072b3c191dfd9607dc7e133c6e63c9aee6e7c05d94997f251ecf4c16248a,ruby:>= 1.8.7 1.5.5.rc1-x86-mswin32-60 |checksum:26ca082e5922a922ef03857d35bf416a06dd57538621ee286dc3a2e0e6a7f948,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc1-java |checksum:fcfcb3628fbb5afbcd7166c48eb99d333b819210203c53633c3ae51bea9c5824,rubygems:> 1.3.1 1.5.5.rc1 |checksum:7bd90e77110800876712466d315627756bbfdeb0bef88174b648719a9ac19ac6,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc1-x86-mingw32 |checksum:d783fe844d9be6551b99110cf4a3bdfee056ba7e4432dd0c1d70fa2f1e8b80d1,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc2-x86-mswin32-60 |checksum:04fb5b12c7d954846e133092dda3cb97716d339cd0198f7320dc6f3741a2c4c5,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc2-x86-mingw32 |checksum:17ebcc94691061d5a8ca70be38f667c5dcb385a7606dbae439a41db10a032e94,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc2-java |checksum:fad0cd349ba4549986c1c321927cc7b69b3c749e67174d26efab593532a8bab5,rubygems:> 1.3.1 1.5.5.rc2 |checksum:2aa02658d1d56b01182a0660228482407df16bf6d37d27d1ad5908a3519da62c,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc3-java |checksum:68e785c80a4fc7ccc098a24fb36c8e324f50d739a5885a70e4cd8f8121ebc0d8,rubygems:> 1.3.1 1.5.5.rc3-x86-mingw32 |checksum:bf00d5d09681eca426f33fb218a4a3061f0091decf107d0ae17fc37757b1bec0,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc3-x86-mswin32-60 |checksum:669f71976bb5a9c628b44529f2459b801c7b2051fcc9c13feb3e63ec3217b564,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5.rc3 |checksum:b7507e6d45d604891bc0164c7ba93f317779dd7e366e4cf2fe90d1c0a12f42c7,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.5-java |checksum:f7adba77f7a9c8764537c9b9de6cc5e5ad046e938af2297f58c664648d5ba854 1.5.5-x86-mingw32 |checksum:acea00cc135744a44a503add035f8c6bc4b774e9667e1218b302ac8e3596a04b,ruby:>= 1.8.7 1.5.5-x86-mswin32-60 |checksum:81e1dd9814cfbe01511f45e412fe03e8561012fa593437de3727458b480eb5c8,ruby:>= 1.8.7 1.5.5 |checksum:76400218a9e7099d4d6d4ad2bb6f1218d80ae93a1eb67e34b41e686d3788d48f,ruby:>= 1.8.7 1.5.6.rc1-java |checksum:70fa58bfa7f2abf622c51a760b7205178b61baa06df0b2e017b6cf8ae7671dfb,rubygems:> 1.3.1 1.5.6.rc1 |checksum:0f5ca6da09274614521605bf0f59d46ed3cc2cd4b46c995274efb3722e3c9d33,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.6.rc2-java |checksum:890ee92c6c17a7da20226e4a86184c843c0b6e6d018ea3b65e2b4171245bf3a5,rubygems:> 1.3.1 1.5.6.rc2-x86-mingw32 |checksum:3b63eacdb9bcb6892d18b0ee735144ebccceba600535cbbd12f9d03c952eadd3,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.6.rc2-x86-mswin32-60 |checksum:bdf020cb19466a069f29af1822780df0856974e1911065f9d4ecd694306ae997,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.6.rc2 |checksum:f65bc43996c332e2bf580ce4df3fce7c25179aea09ab22cf3514cdf784bca9b1,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.6.rc3-java |checksum:652215f8f3c21449b2f8c739ed8cebd91f22fc70a9c4725c200a9da62ce717e2,rubygems:> 1.3.1 1.5.6.rc3-x86-mingw32 |checksum:0061189125dbb5aafff2f41fdb3e648fa49e0a74c91fa26259da52b9a1ca00b3,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.6.rc3-x86-mswin32-60 |checksum:f02ea62cfd3e56ecebd7cfe7762deaf544ee74c7c287e5a7d0b96c9339066fbc,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.6.rc3 |checksum:c01e490dfa34131d70c5245139dfa22e13dc13d5892e24481d6a403172634514,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.6-java |checksum:13350c9707079798575245167128277ae416094df3b06dbdda3e91fac6655dd4 1.5.6-x86-mingw32 |checksum:b36e76de946475ff7dff54c8b066819fea5fce1a33803a6a673381a789ce21e9,ruby:>= 1.8.7 1.5.6-x86-mswin32-60 |checksum:9a6f2d635573c6f993c73967955960b36b556b7a0b372f035c08a367545404a3,ruby:>= 1.8.7 1.5.6 |checksum:28ab99eeba2270b336f8f9612e5b4aefdc673a7319ad874bf4c6092226826588,ruby:>= 1.8.7 1.5.7.rc1-java |checksum:cb680cf24b33d4df85f0ee2e15c38133aaef1c29f96225d4533de2684c776e30,rubygems:> 1.3.1 1.5.7.rc1-x86-mingw32 |checksum:1beae5d2fc2d8e8891e2d62eac6800c91334a1b5b976ebe89e93a9c8d9e06c9e,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc1-x86-mswin32-60 |checksum:cc59a10498fc04a711f5289e235f7ef28470a50943e25d295a02c310fb90b482,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc1 |checksum:881818474d087cda788653ca62f2b2304e846c351d51b5fee594e4417fe1f2d9,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc2-java |checksum:b9e03407fc5f5a2490a178f6ada486483b5d1f9017e45397dc8213bba915bfb6,rubygems:> 1.3.1 1.5.7.rc2-x86-mingw32 |checksum:e20ca53fc3fcb8167eb5f82ac9b28452f6cfc8e80a770665444999c8f50e6850,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc2-x86-mswin32-60 |checksum:01f14d9896354089877372a41a642f837a310a9f0aaa58b2e094926f645dcb35,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc2 |checksum:46a0028803c7063707d5faecbbe8be99fa392fa10734420d4893648ed31f7948,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc3-java |checksum:042e76289fbfed31053f57f7c1edd9478bd619bb86a8ecc6cdf5001208abbe8c,rubygems:> 1.3.1 1.5.7.rc3-x86-mingw32 |checksum:5114158c2b1b7c848a5e7af78bc6ec6f5ff1b300c1b61dd3e89d99841a2d37f9,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc3-x86-mswin32-60 |checksum:dd707473a31ff6df608b1e710d197df981ccfdd88580d6fb9bbe40f04209ff72,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7.rc3 |checksum:43c26521d044a1addf340396ec2b88516f0c79d3736f978d5cc1bd9184b69ab7,ruby:>= 1.8.7,rubygems:> 1.3.1 1.5.7 |checksum:2172e5df6814be14d4b668981a778fcb7e13316ec3d15eade28f1dba9af24023,ruby:>= 1.8.7 1.5.7-java |checksum:28852b54e2a901b4c33c82383281bf53e9e808313b661c9404a20689605e21e6 1.5.7-x86-mingw32 |checksum:aba8342f2d6e3a8672d91d0314683d1cae3fce5282b715e68b160ee1a2de2b48,ruby:>= 1.8.7 1.5.7-x86-mswin32-60 |checksum:d0e549e6690b1c82b1cd08fc8be1e62aa0a1e21d42f042689151cb8fd5b0f90c,ruby:>= 1.8.7 1.5.8 |checksum:2dca1d94cbe9ce50a46a1708d87405d7ae4e5721b6c172db4172cada4b8b0cfa,ruby:>= 1.8.7 1.5.8-java |checksum:6f4715d4bda9aa07726019b2ef9d73372918eccfca015485bc9d2494b2cd8bd9 1.5.8-x86-mswin32-60 |checksum:113d2634bf21f1fc67113bdcf77dc9b5be250360dbc49d254a387816a4b69457,ruby:>= 1.8.7 1.5.8-x86-mingw32 |checksum:65e180412f56f9089fc74fbc1a241325e7e54b3c4dd0f70cfbe680b38f149d5a,ruby:>= 1.8.7 1.5.9 |checksum:29aecf5a386fbe06aca120bb12c61efbcf2a73f98a13860af4a13573c7251d23,ruby:>= 1.8.7 1.5.9-java |checksum:33533c99073e5c293d6cc9810aae3b678834db40f25608790848b2f77d9ef210 1.5.9-x86-mingw32 |checksum:7466527d651868093fac23e45cc8acd2cebb85e8bc213a71b476652debcaf8bc,ruby:>= 1.8.7 1.5.9-x86-mswin32-60 |checksum:731549b1e66fcc3581f5b826875c6b297b695825dbcc775508a78c4ae35d03ad,ruby:>= 1.8.7 1.6.0.rc1 mini_portile:~> 0.5.0|checksum:c9afdd1ba17e91df52d45019781ae1a0d981fda91f229d4547e0d76e72993e1f,ruby:>= 1.9.2,rubygems:> 1.3.1 1.5.10 |checksum:2b1c3b97d66c124a503afde34ee263eb776034fad4314c6b2fe0d0cf3fbc7435,ruby:>= 1.8.7 1.5.10-java |checksum:7fea23e4348917e631b08da89b1aab113c7f74ae07218b0ed8c9f377cd679a19 1.5.10-x86-mswin32-60 |checksum:a6088dec482b9d5aa74ba225c9c65201b6cc5bf740609774ae9411cb4a62a404,ruby:>= 1.8.7 1.5.10-x86-mingw32 |checksum:4561b392f605f4b0c3815cbc1fc501c6f193cbf5b0e86ff496888944b37f45ca,ruby:>= 1.8.7 1.6.0 mini_portile:~> 0.5.0|checksum:abc5f9acb29a92d041ce7ed1a0ea6ca7e4bf66c3bc60cf4ebda041c193b799c5,ruby:>= 1.9.2 1.6.0-java mini_portile:~> 0.5.0|checksum:32d1c547291eea84ca7c13d67244abe5d743b9b64b2ff5b96f7755e86a68a952 1.6.0-x86-mswin32-60 mini_portile:~> 0.5.0|checksum:987e5aedb21543d28ddfea64258a16b760cd08ab0c988c87d0c7769487b32143,ruby:>= 1.9.2 1.6.0-x86-mingw32 mini_portile:~> 0.5.0|checksum:3e3e6d48ed61f1927ed426edad2bc97664bfe48f6217cf66c04fbdb4d4510dad,ruby:>= 1.9.2 1.5.11-java |checksum:bd961b1c7b1bc4d4b87e9bfa6ee54c9a8b4dfb82e5c693d1d815fe6ffaac3a78 1.5.11-x86-mingw32 |checksum:35a8886d070d5498ccb82f356750ed4f381c05479e53fdd6d42a0cd2dfc479e7,ruby:>= 1.8.7 1.5.11-x86-mswin32-60 |checksum:643b49e22d8a95f51717fb47cd8b3fece1732288f332fe436c43d4fd6c118356,ruby:>= 1.8.7 1.5.11 |checksum:578a5bcd184851893fc9818f79a9ff9b19568481b136d5e70178fd0f3b2f6ac8,ruby:>= 1.8.7 1.6.1-java mini_portile:~> 0.5.0|checksum:f31dcbba52a6378fdfadae567abbbdda6484bc61f8b7953893a034a5c9e024ce 1.6.1-x86-mingw32 mini_portile:~> 0.5.0|checksum:d71fd44b26705468802475c708f71f0404db937168f9af811e8ac3c13be9f3f0,ruby:>= 1.9.2 1.6.1-x86-mswin32-60 mini_portile:~> 0.5.0|checksum:e44fbabb27c553fc0c784caa6ee73f29b82ba0b22afb3648aad0a9d02850f202,ruby:>= 1.9.2 1.6.1 mini_portile:~> 0.5.0|checksum:95d0a5fbe96c55ba6486da6a0d439da9a4bb31b209d95686f7f0f0850817f014,ruby:>= 1.9.2 1.6.2.rc1-java |checksum:61f0a66934ce9e84ed30da6cea0613b8269ad93ee2d98c29394b0c7dec1b1d5b,rubygems:> 1.3.1 1.6.2.rc1-x64-mingw32 mini_portile:~> 0.5.2|checksum:1f9cb8185c181674bbdf4db0ecbaf6c95f88d10c65e8bc8ec8afc3dd94e5b607,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc1-x86-mingw32 mini_portile:~> 0.5.2|checksum:7a1b2d99a56749c9a95ef91ad8f3d129bfe4a76cf33072d5dd72bc0509e7a085,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc1 mini_portile:~> 0.5.2|checksum:645eaa36da9a267f97a1093515153298314709d292b6ae04940541b52782ef32,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc2-java |checksum:7cdd29b3cf1e7488f6519c5f6bab65ddeb2096db32e95da6b050440f99f496d3,rubygems:> 1.3.1 1.6.2.rc2-x64-mingw32 mini_portile:~> 0.5.2|checksum:c11169a4fbe71ed63f0640afd742c1a515cd977a136632ff84c3c28dda67b45d,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc2-x86-mingw32 mini_portile:~> 0.5.2|checksum:9d2ff6ba064d9e208b8b0fad8e620f3447c73233f13bab3dc8d3556e95ea8425,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc2 mini_portile:~> 0.5.2|checksum:05adfe243559ed30523c1f2376af45b25fdc9cd9c98c0cf5891b9d6dbfa108e8,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc3-java |checksum:ba67741c9690b1597c871c75ee527fa9ca1e648dd7677695f5b66c5b4414959a,rubygems:> 1.3.1 1.6.2.rc3-x64-mingw32 mini_portile:~> 0.5.2|checksum:7397fbd138f014f85d01318eb857de8c779d4de5d6456ae0da6c9c1367fff1ef,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc3-x86-mingw32 mini_portile:~> 0.5.2|checksum:4d689308d24fc7fd063da539123f10ef6f902e83b2c3f467e8e315718bdd6fb1,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2.rc3 mini_portile:~> 0.5.2|checksum:a8b5ab4eb15e6b76daad25548325f71e76c080a1431a0baa8c61e53ae03322f7,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.2-java |checksum:2ecd2c059ddd4c979089dd59f2f2c294779bf14f51e977b6eec015b31515107e 1.6.2-x64-mingw32 mini_portile:~> 0.5.2|checksum:80bf3efb6f8cd36ede166823b09878006af8b84cf16782a072450e47c67d03ff,ruby:>= 1.9.2 1.6.2-x86-mingw32 mini_portile:~> 0.5.2|checksum:d22092ea8cd6af33e0947845da40f203e2e717ec292abb0e961c09ee0aeadd3b,ruby:>= 1.9.2 1.6.2 mini_portile:~> 0.5.2|checksum:d7e366ba831188b6fd1f4efd2a73d242b5323f9d027064603c362e5e06fc7f98,ruby:>= 1.9.2 1.6.2.1-java |checksum:7227e62ad937df2bce249485bc61de9ea3cf78c96a81a87a3f9e3a10ec4cba5a 1.6.2.1-x64-mingw32 mini_portile:= 0.6.0|checksum:5820ed19bcc2fc66f9251533f36d5a97c1182e1488d0ae44e6167d15d24ac30a,ruby:>= 1.9.2 1.6.2.1-x86-mingw32 mini_portile:= 0.6.0|checksum:ff296d6fa4d41adab80b3b6810ed22fc47ecb6bd224264c7835ddbb509ccc726,ruby:>= 1.9.2 1.6.2.1 mini_portile:= 0.6.0|checksum:dfb23254b87672a93582981c4ac5880d178ff32db6878fc351d75198aa544836,ruby:>= 1.9.2 1.6.3.rc1-java |checksum:2ddd0ce101a0768159e10f5747d07a8b1012dc138631dd3fbe372512f46fe3aa,rubygems:> 1.3.1 1.6.3.rc1-x64-mingw32 mini_portile:= 0.6.0|checksum:5daa5dc3dc84160600801acff255939078036d8747dbd38c943f4a354413fa35,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc1-x86-mingw32 mini_portile:= 0.6.0|checksum:8ce16547655c847ec82ab0f3c03b8b519a82682591cde050c8e24096fc07ba7a,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc1 mini_portile:= 0.6.0|checksum:cb44c1c71d5bee09a130ef5b59444e3e49c42ca595ce9d7268f7a42237d8acb5,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc2-java |checksum:2a7eb642010b11a4bad885090ac48709d42ecd8f979cdd1bf57c2175a6ac361c,rubygems:> 1.3.1 1.6.3.rc2-x64-mingw32 mini_portile:= 0.6.0|checksum:874cf783406e758a34eb173d28cf6b638a3ff23b78702d54a5d8a594197169ff,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc2-x86-mingw32 mini_portile:= 0.6.0|checksum:828a923db3a1d53aef8d53efb3437eeb7793ad8d658d4557f50dfdf90c544763,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc2 mini_portile:= 0.6.0|checksum:5487a73cd8d5a6a5f12a5bba579deb35fb88d863c154ea72c0206e5fe60e2c44,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc3-java |checksum:d668d52d0a2f5daecdbf69d8cc7e888f1415d597ccaf008cdc05fb4ad29155fa,rubygems:> 1.3.1 1.6.3.rc3-x64-mingw32 mini_portile:= 0.6.0|checksum:b7f42bf55fb61084981240cb583d65ec3a90ded00ef3597b0eafaa12163d0d1d,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc3-x86-mingw32 mini_portile:= 0.6.0|checksum:5d358ec2127a678a767c5d73c2d13784b2011cc4d7a287ffee6ece8e18814a02,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3.rc3 mini_portile:= 0.6.0|checksum:d76c8c131c50ab1500b05742dac995e216151274c80d88bdefd775edd519a417,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.3-java |checksum:7d36f9b595d57df47e97fe17636b1404134b699ddde99683f79033da3300f3c6 1.6.3-x64-mingw32 mini_portile:= 0.6.0|checksum:ae0450e585a4ef469f61dae177f8b3314bfff9cc33dbb6956d913ec76f48786b,ruby:>= 1.9.2 1.6.3-x86-mingw32 mini_portile:= 0.6.0|checksum:001fc4c32760bf877f2ccc5ab285cb888b34672e4d7cba7eb69ef261064a2855,ruby:>= 1.9.2 1.6.3 mini_portile:= 0.6.0|checksum:3733498c5e9484e37438eb7928e807abbf1ab50c2b91e93fa0a12b4253fbbf9b,ruby:>= 1.9.2 1.6.3.1-java |checksum:d730df56b224d63e2469a9d654e07103879295173a97411bf2fd8dbb51bfb3cb 1.6.3.1-x64-mingw32 mini_portile:= 0.6.0|checksum:6fbff584ad3e413e4cc0263a106ec9eff0aeeab6e7a9e8251c9d45573dd3191f,ruby:>= 1.9.2 1.6.3.1-x86-mingw32 mini_portile:= 0.6.0|checksum:39898ffa99ab6b1e62841c07c2286b96cb7eaaaa0450d1eeafc54bf1159caff6,ruby:>= 1.9.2 1.6.3.1 mini_portile:= 0.6.0|checksum:91761a654439406b5bed71adf6092d49829e26332b4c0e7c8a23a2e628442585,ruby:>= 1.9.2 1.6.4-java |checksum:1c15349c533458f4d7ae58feba4c780fef57b5fb918c6af37141ddb245ad5d0a 1.6.4-x64-mingw32 mini_portile:~> 0.6.0|checksum:c39551846fa5c7fa6c57825374cf29ff4e2a7a0ed554a275383b9d010c271992,ruby:>= 1.9.2 1.6.4-x86-mingw32 mini_portile:~> 0.6.0|checksum:ce9b6d7b67876409304d86287db89bbdcbec77452946fdff69e25b5db571b58d,ruby:>= 1.9.2 1.6.4 mini_portile:~> 0.6.0|checksum:6b195107e6a3a44a7b35c25e3680299c382c2b50324635c09f934406bedd2cd3,ruby:>= 1.9.2 1.6.4.1-java |checksum:6e9173ab1f644496ee2edfca6fcc93bcb9845aba98956a9f2ab5dc1587bdc5a3 1.6.4.1-x64-mingw32 mini_portile:~> 0.6.0|checksum:10ff46e228202b7ae225478625d0f6f5fe8e341143ce3aff937c089607358d16,ruby:>= 1.9.2 1.6.4.1-x86-mingw32 mini_portile:~> 0.6.0|checksum:b7022f16763886dab2119ee591b91917700cc0417c4f87e4675deb79a88ac508,ruby:>= 1.9.2 1.6.4.1 mini_portile:~> 0.6.0|checksum:5317c5ad81b21424af4e2a732e67edfd4613f6aca39f5e1d689200e993e2041e,ruby:>= 1.9.2 1.6.5-java |checksum:6ce4a15a13a7f59746f8874c35ebdff0398558558d886b32cf317f9df530180b 1.6.5-x64-mingw32 mini_portile:~> 0.6.0|checksum:763e5440f9d90104af86bf8cafda1951baa87e012dfb78278745be256f538658,ruby:>= 1.9.2 1.6.5-x86-mingw32 mini_portile:~> 0.6.0|checksum:2ac214876b620b47f4afe4bfe2758ad4535fa2b7522dcf802be0e899b938c55a,ruby:>= 1.9.2 1.6.5 mini_portile:~> 0.6.0|checksum:f448c4e37442bf03b759c0e936ccffb498fde433ffdd670f3b9754a09cf9bdf6,ruby:>= 1.9.2 1.6.6.1 mini_portile:~> 0.6.0|checksum:5cab0f08d326257790360eec86699420acdf8c3461c9bf0e5c87ae2ae11cbd75,ruby:>= 1.9.2 1.6.6.1-java |checksum:fdf309da5e20a5c27299d7ec27e7421d6b6b4b772f060bce6e11b4d100275123 1.6.6.1-x64-mingw32 mini_portile:~> 0.6.0|checksum:bbfb671a993d9f6e4e23184f23399a0d6e02fb4cd7dc3d010deaefca21e3ffbd,ruby:>= 1.9.2 1.6.6.1-x86-mingw32 mini_portile:~> 0.6.0|checksum:08c8e3ab6dfb63c03350253f780128c9d737be3d4d316452fb0106d70b6acf0e,ruby:>= 1.9.2 1.6.6.2 mini_portile:~> 0.6.0|checksum:60c060c694a62145b9224413efa346de5a893582c1fbc0326bc74089c5d898c8,ruby:>= 1.9.2 1.6.6.2-java |checksum:b359cedceb0b321bc81f9a8f871cbaf5c8cabf0e5b78df92d921911e7a95fe81 1.6.6.2-x64-mingw32 mini_portile:~> 0.6.0|checksum:7e564aea77db0f4e8e36655a43a978484f532ea736578999f2fa6afa37753198,ruby:>= 1.9.2 1.6.6.2-x86-mingw32 mini_portile:~> 0.6.0|checksum:cb207a8b3f03a6eee89805ce439f2336b8a832253d9bb5ed926cc4a3a996c852,ruby:>= 1.9.2 1.6.7.rc2-java |checksum:2733fe6c0300c37ddcc28aa6df4942ddfe9267dc3f27035691f1bdb883fb50ce,rubygems:> 1.3.1 1.6.7.rc2-x64-mingw32 mini_portile:~> 0.7.0.rc2|checksum:3b03a61d7c22883673d5bf3794019f41184c1b0b4686d99ee2e122661e99f88f,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.7.rc2-x86-mingw32 mini_portile:~> 0.7.0.rc2|checksum:f320940416c2fbe4a010165ee085860c6eb91a22626042d4e6c3f64791d6a7fd,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.7.rc2 mini_portile:~> 0.7.0.rc2|checksum:183a0868e0d56f7fbfc488f091e76d0c082cdfea4b35d17e460d50b3f9eaa60e,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.7.rc3-java |checksum:910cffcc8fa9897dbbe7b2b1416acb7768ed13623c214587f79589bc17610c93,rubygems:> 1.3.1 1.6.7.rc3-x64-mingw32 mini_portile:~> 0.7.0.rc4|checksum:4e530a526def2b3afa726490e63213879c6bce5b7ed5c90acd070d805b11ae94,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.7.rc3-x86-mingw32 mini_portile:~> 0.7.0.rc4|checksum:06a5d22f077a1478a9182f0e7a023037abf77d67697a8a00f83236f043083d57,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.7.rc3 mini_portile:~> 0.7.0.rc4|checksum:ae9cd10e714fd1dc38db16dbc7aba483e56c9ef5114d0533bbd909a5d4cd768c,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.6.3-java |checksum:62aa03504560b09ce9227cc84e9370e5bbc76d4aee2ef7773b43bf454dfe90cb 1.6.6.3-x64-mingw32 mini_portile:~> 0.6.0|checksum:39d118854c260a1d5358798b461dd33cf50dbea126268f2cc100cad0ebd2b54e,ruby:>= 1.9.2 1.6.6.3-x86-mingw32 mini_portile:~> 0.6.0|checksum:47d5a3ce97fdc298ec877fbff0d09f17349efde6268ebf94dbc59bac3ca72cf5,ruby:>= 1.9.2 1.6.6.3 mini_portile:~> 0.6.0|checksum:1121db28f632a174b5467f3e122cdf07a12286b5a88ee7b16618630466a3fdde,ruby:>= 1.9.2 1.6.6.4-java |checksum:17220441e92dd731c474c611d2071874fcc896211fc06903e4ee163dd86fc76b 1.6.6.4-x64-mingw32 mini_portile:~> 0.6.0|checksum:4480986d815c136e1d7238778a7b12052de273bd959c594be5acf63157883c2d,ruby:>= 1.9.2 1.6.6.4-x86-mingw32 mini_portile:~> 0.6.0|checksum:4f33eb723a8729a33e8540a9c77ae7844139be3d271eb1ea1722f667076f611e,ruby:>= 1.9.2 1.6.6.4 mini_portile:~> 0.6.0|checksum:13be9edc5365481769514219c5e3ae5619d7336ddaabc096ea9d0e5fcd4b2eaf,ruby:>= 1.9.2 1.6.7.rc4-java |checksum:c4e0346b682248d056888ad5e37495861b79850edde5965f0d62fd13119b87d1,rubygems:> 1.3.1 1.6.7.rc4-x64-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:e15a83c0825218ed7065cc950aca4a98edd922cb4b512026b283efe7dea2991f,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.7.rc4-x86-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:85464e018bfe5f998acb52ac41baa53a5be0d801e81b176cea994aa11ca7df90,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.7.rc4 mini_portile2:~> 2.0.0.rc2|checksum:6f330bd622929c5c48027581c5e6dc71f998a2cceedbdd60d43828e0a0bb79c7,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.7-java |checksum:da9f4f6a3783723819ef1c6dc596741b3e301f39e78e02879492af27c9106209 1.6.7-x64-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:51179bf811ea8eb8c75502b1dfb1f53e3775b0e3d706dd749469bae9a2396f9e,ruby:< 2.3&>= 1.9.2 1.6.7-x86-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:a84fcb74edd9603a1f947b2b19fc6efdad9ccbeeec99d651628d81076f2249e7,ruby:< 2.3&>= 1.9.2 1.6.7 mini_portile2:~> 2.0.0.rc2|checksum:ab621e66bf6f8503df86e4582450fceaa81afd799a682358bfc81b8a38669c3d,ruby:>= 1.9.2 1.6.7.1-java |checksum:7c802e085d5844ff65a7f2a07189be519ef940db0728f6f27f859f8f4564ea10 1.6.7.1-x64-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:df3f19980ce656a78b63cd1afc217268b88be34721671359f33f8c94cda0bdb8,ruby:< 2.3&>= 1.9.2 1.6.7.1-x86-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:d4f937e23c37260cc4053c8d535743c4cabfacdf7e3ab7f622d9dbf4d32e785e,ruby:< 2.3&>= 1.9.2 1.6.7.1 mini_portile2:~> 2.0.0.rc2|checksum:62d2b76cd4e85c0f8ece46cf1e0709ec9cd289efa105a5c6996296a6e8d8dc8a,ruby:>= 1.9.2 1.6.8.rc1-java |checksum:4928e97cdfa1a69ecb2d990aac9d9d9588505afc00193c7c947ddda95f519b00,rubygems:> 1.3.1 1.6.8.rc1-x64-mingw32 mini_portile2:~> 2.0.0|checksum:403fa0cce6f68a7196db744df5179f672d6bdd5a72799683c5effb7a4e12a518,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.8.rc1-x86-mingw32 mini_portile2:~> 2.0.0|checksum:415a56e7bd7790fb0433c7a42ec2bd383f6df66c29e8b11c7fd6a08bc1c0b1f9,ruby:< 2.3&>= 1.9.2,rubygems:> 1.3.1 1.6.8.rc1 mini_portile2:~> 2.0.0|checksum:e4b8029a194b83a3e47c6cfe37322fe8fadc5953f94523d886b7cb870417619e,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.8.rc2-java |checksum:cbd04fde3289fad161df27d15059531277fe3b6b4455dc9416774cc1228185b5,rubygems:> 1.3.1 1.6.8.rc2-x64-mingw32 mini_portile2:~> 2.1.0|checksum:1585c537c9e9dd7482e1692b4d4655d63b66238c29932d9a7e3d33608fb1eba3,ruby:< 2.4&>= 1.9.2,rubygems:> 1.3.1 1.6.8.rc2-x86-mingw32 mini_portile2:~> 2.1.0|checksum:20a582b4d26ba929b320fd78bf8eecf10a605636754ce4206a81be6b597410b7,ruby:< 2.4&>= 1.9.2,rubygems:> 1.3.1 1.6.8.rc2 mini_portile2:~> 2.1.0|checksum:e6c4ff8d072ef64c468248b922f38d9e54efb11b6c44cc5f7bbbf0fd9f431967,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.7.2-java |checksum:628f7ca619320f91115d8e7716d088d35fe6cc1daa751895eeee0ae368a07203 1.6.7.2-x64-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:f928e00ca9faadaf9de3211cafbc6e0d0bb677f48cf8e76a041930e0d15f34fb,ruby:< 2.3&>= 1.9.2 1.6.7.2-x86-mingw32 mini_portile2:~> 2.0.0.rc2|checksum:0dc58ade97d0cbd2c8e2c317ea4db2bfd81f9b2e3244916ed3398772b94a5cff,ruby:< 2.3&>= 1.9.2 1.6.7.2 mini_portile2:~> 2.0.0.rc2|checksum:fb6afc0faec72b82eeccc84b5d11211aa6c4a81898a433b499ca7a60fcad4b87,ruby:>= 1.9.2 1.6.8.rc3-java |checksum:fc13af98eb27bd535558a6607dfbc938969f13618fcb3056292d423fe9972ca7,rubygems:> 1.3.1 1.6.8.rc3-x64-mingw32 mini_portile2:~> 2.1.0,pkg-config:~> 1.1.7|checksum:cbad8514fde93e38f5dd1f3bfec181fcaf8ce531a46d885332963a9dfeb93f82,ruby:< 2.4&>= 1.9.2,rubygems:> 1.3.1 1.6.8.rc3-x86-mingw32 mini_portile2:~> 2.1.0,pkg-config:~> 1.1.7|checksum:9ee6b9beab1728af6044ecf8ec411424383156881fb268baf157ab3dea613f3e,ruby:< 2.4&>= 1.9.2,rubygems:> 1.3.1 1.6.8.rc3 mini_portile2:~> 2.1.0,pkg-config:~> 1.1.7|checksum:67acb51640c63b328a4d067b662ab5290a361c5697b658acf8d7f01290dba023,ruby:>= 1.9.2,rubygems:> 1.3.1 1.6.8-java |checksum:8f7fa3321c0ebdc3170ab1f1da69c61a4af7ebadb7a18d6d9a55441dc1177b7d 1.6.8-x64-mingw32 mini_portile2:~> 2.1.0,pkg-config:~> 1.1.7|checksum:26a5c1c02ed90c36549cd03b459e4ba6b9e2cf1f6a69b3619215bf51daec15dc,ruby:< 2.4&>= 1.9.2 1.6.8-x86-mingw32 mini_portile2:~> 2.1.0,pkg-config:~> 1.1.7|checksum:116017fe7864727b20187468814a25cead0ce6f30243ad6f00cabccd2341897c,ruby:< 2.4&>= 1.9.2 1.6.8 mini_portile2:~> 2.1.0,pkg-config:~> 1.1.7|checksum:37a4af5a4a8fb5a43991a38e51db64d6406b8d11fdaed57f8cf9454fea86f29e,ruby:>= 1.9.2 1.6.8.1-java |checksum:f15b63dd830e8599c783924cffbedb2c90d674962794f3f4017dbcf1889717bd 1.6.8.1-x64-mingw32 mini_portile2:~> 2.1.0|checksum:2f6d67596aed55aff6521adbbe03277a228303d5c98b8db56cfbbf2bed36584d,ruby:< 2.4&>= 1.9.2 1.6.8.1-x86-mingw32 mini_portile2:~> 2.1.0|checksum:c918a99d2e24a3cbd9f4faad87b8ad46084da184a0f65e1d0e9cd7d7dc4fd7a7,ruby:< 2.4&>= 1.9.2 1.6.8.1 mini_portile2:~> 2.1.0|checksum:92814a7ff672e42b60fd5c02d75b62ab8fd2df3afbac279cc8dadac3c16bbd10,ruby:>= 1.9.2 1.7.0-java |checksum:59b99ba4e7c78764974deae700ce09141a020fafde992b79386f0a50b8eb3e4c 1.7.0-x64-mingw32 mini_portile2:~> 2.1.0|checksum:a8924a2ba349aff7b487d6bf3dfcf70db476a7a1346f163d016dd3eb8cefc498,ruby:< 2.4&>= 2.1.0 1.7.0-x86-mingw32 mini_portile2:~> 2.1.0|checksum:2424fe240a7d85c0991eea216f304174da609e52876a169484d158e0cca3f1cc,ruby:< 2.4&>= 2.1.0 1.7.0 mini_portile2:~> 2.1.0|checksum:63aeda164f598f539d9473178918212adb07058e505bb0f78dcab6676e53a2e3,ruby:>= 2.1.0 1.7.0.1-java |checksum:083a65b0b3e1127c2d2e2e23bd20e9b49e41a1cee87247e5362de7cf051b9b7e 1.7.0.1-x64-mingw32 mini_portile2:~> 2.1.0|checksum:0b9129fb05be58c61dea20159eb96809b9f737f14d6971cda4bb07feda1a382b,ruby:< 2.4&>= 2.1.0 1.7.0.1-x86-mingw32 mini_portile2:~> 2.1.0|checksum:4c92226ec7b7e8cc6dfc58cb053055b8621f27331d63e4a51c692bb23ce4ebb5,ruby:< 2.4&>= 2.1.0 1.7.0.1 mini_portile2:~> 2.1.0|checksum:63d702f4e6684523f08f7d0fd48d9e42c95693207ba1aaef11b079eec083aa83,ruby:>= 2.1.0 1.7.1-java |checksum:b6f2e6d20d9f71874fa5d0d086e1c2e4b5cd67287f1a9ea2209e4df7bc1b4db8 1.7.1-x64-mingw32 mini_portile2:~> 2.1.0|checksum:e7336c89e70f6139db713c0c8500cd89b6be49485bb18c648f992875d99377b6,ruby:< 2.4&>= 2.1.0 1.7.1-x86-mingw32 mini_portile2:~> 2.1.0|checksum:e8e50cebe04f1dca75b15e447da6533d253a947757612fa213f2bf9bb067d71a,ruby:< 2.4&>= 2.1.0 1.7.1 mini_portile2:~> 2.1.0|checksum:1ed8277b920c77d2130b65b81e20ef53d9bd2e9e092bc01e9ecc5dc3237b15ba,ruby:>= 2.1.0 1.7.2-java |checksum:4747fd37b3c1f95a9a233f5044cc3e356003970bd2c91dc3778ef3a3751d7da6 1.7.2-x64-mingw32 mini_portile2:~> 2.1.0|checksum:090cc9bf002d58eb424d567ec651d14195d92e861398f0f8ecb1e9cd9204ad0c,ruby:< 2.4&>= 2.1.0 1.7.2-x86-mingw32 mini_portile2:~> 2.1.0|checksum:7b373ab2f06fbd7cde94013429b8f1c10472602fb9de99f11acfc3aeb764090c,ruby:< 2.4&>= 2.1.0 1.7.2 mini_portile2:~> 2.1.0|checksum:0c9cca0ccfb1963fa235c35bc4ca767522fa186670d3b943ef79e692efc0a849,ruby:>= 2.1.0 1.8.0-java |checksum:a108c266b203ec72c0bff950790019839058dd09a29e9a9f4adcc9a439c78b6b,ruby:>= 1.9.3 1.8.0-x64-mingw32 mini_portile2:~> 2.2.0|checksum:3db5720fe3df97cbb3f6d18d63c1bd0379baa717946625bc279568b0bf227ae8,ruby:< 2.5&>= 2.2 1.8.0-x86-mingw32 mini_portile2:~> 2.2.0|checksum:e981b47e10fdc96ab9e8231fb84863fdc4bccb5f8c47526f5e3b873e4f095bd2,ruby:< 2.5&>= 2.2 1.8.0 mini_portile2:~> 2.2.0|checksum:d6e693278e3c26f828339705e14a149de5ac824771e59c6cd9e6c91ebad7ced9,ruby:>= 2.1.0 1.8.1-java |checksum:70299151b8ed31d6e0edf51ac96f506d9a9b1e4d38ab7843328532dfcc16b8c8,ruby:>= 1.9.3 1.8.1-x64-mingw32 mini_portile2:~> 2.3.0|checksum:ac8dc83473a87ef526315e9d7a1d8d0b9e218079b19279e5fc5ffb7ace2c0729,ruby:< 2.5&>= 2.2 1.8.1-x86-mingw32 mini_portile2:~> 2.3.0|checksum:0253e69067f0e115f5584432db405d28c29d75ff24b62e4790f48dc81771a28c,ruby:< 2.5&>= 2.2 1.8.1 mini_portile2:~> 2.3.0|checksum:4180dd5dfe8ba5479db7c3030012cd79da9b958eea472195f3daa23cbf80bd80,ruby:>= 2.1.0 1.8.2-java |checksum:fc94d0c13357cedf94a0b518036eb9881ae04be96972ec434ae2d34ac95d2063,ruby:>= 1.9.3 1.8.2-x64-mingw32 mini_portile2:~> 2.3.0|checksum:11ce39c03953737081da17d78689352f71adc9811dadc3f6915a0ae4aaac9367,ruby:< 2.6&>= 2.2 1.8.2-x86-mingw32 mini_portile2:~> 2.3.0|checksum:e036aede0c72dcd2b58a9a66b4412bccc8b33237b90f6413c28e3f7c1e5e1251,ruby:< 2.6&>= 2.2 1.8.2 mini_portile2:~> 2.3.0|checksum:382af505a11b735e97f52ec6279ea484be7a7560d5599e81def40943601fd515,ruby:>= 2.1.0 1.8.3-java |checksum:68f15b43d397d15b32d24a20daed5ee66485420a8a14f4d5c8b527a86484e446,ruby:>= 1.9.3 1.8.3-x64-mingw32 mini_portile2:~> 2.3.0|checksum:1ad3904c95314e3b9b5b68d5ddf36df192dd99899b28a9c81562067d82c8a2f3,ruby:< 2.6&>= 2.2 1.8.3-x86-mingw32 mini_portile2:~> 2.3.0|checksum:4810edb36c76c9b820ccac72820d9488ebdbfaa2d315e21a9a4afdafe6aeeb1f,ruby:< 2.6&>= 2.2 1.8.3 mini_portile2:~> 2.3.0|checksum:ca07d3584c7a934750cec6b076d05403420c7c06569ec0bf6a4e0369074efa50,ruby:>= 2.1.0 1.8.4-java |checksum:405e57420b024f5ff0cbc36a896b8bd9849755c038506123745bfedfbeaf5d29,ruby:>= 1.9.3 1.8.4-x64-mingw32 mini_portile2:~> 2.3.0|checksum:0796f434bdf33953dbe5c27313bdb7395654f686039d821536eb9fc787d850d3,ruby:< 2.6&>= 2.2 1.8.4-x86-mingw32 mini_portile2:~> 2.3.0|checksum:358adba567cca914617d7a0a88fd2be44ad31b14c9663a28080eb6418d96d0bb,ruby:< 2.6&>= 2.2 1.8.4 mini_portile2:~> 2.3.0|checksum:ecad8473fbaebaadd060eec15a872fb67c4bd7c6d64904ebbe15d40113ad36c1,ruby:>= 2.1.0 1.8.5-java |checksum:827440513cfc264267f97a17363772be1d5c682fbf9edc24e3c392a76af229cf,ruby:>= 1.9.3 1.8.5-x64-mingw32 mini_portile2:~> 2.3.0|checksum:71e9bf65a958806b3e6a4d2f3e21273df08ff298fd82108f017f9fafde476ba8,ruby:< 2.6&>= 2.2 1.8.5-x86-mingw32 mini_portile2:~> 2.3.0|checksum:72772c36dc794080c08555f2395d314431ca28e3fa57c1cb2778e0034083036f,ruby:< 2.6&>= 2.2 1.8.5 mini_portile2:~> 2.3.0|checksum:1f93a829257b621d40c4cbfce3acdcd688b0b3d70497ceae4fa2baf955eede2f,ruby:>= 2.1.0 1.9.0.rc1-java |checksum:bfd0e5db695fa66e3f14e901a623180da37e8baf3652fd75d3316a4b2b7bd4c3,ruby:>= 1.9.3,rubygems:> 1.3.1 1.9.0.rc1-x64-mingw32 mini_portile2:~> 2.4.0|checksum:e5e34c3195cb172f2d1d787899fc18e5e4df022645be54c34f8da706303b62dc,ruby:< 2.6&>= 2.2,rubygems:> 1.3.1 1.9.0.rc1-x86-mingw32 mini_portile2:~> 2.4.0|checksum:6a2382fe8e9bf7094ef6893a6a0b127da34dc0f84edf5041a38cdc564e53bd28,ruby:< 2.6&>= 2.2,rubygems:> 1.3.1 1.9.0.rc1 mini_portile2:~> 2.4.0|checksum:138f8570c9999c09c3c166fc1847cb90897235ba5f4d6422a62d5a271c8bb09a,ruby:>= 2.1.0,rubygems:> 1.3.1 1.9.0-java |checksum:15fd2bbbc66ab9241d0d0e93cf154e83a17d2c28004e8ff5395455148afbf6e4,ruby:>= 1.9.3 1.9.0-x64-mingw32 mini_portile2:~> 2.4.0|checksum:4a6cba66a51ded6e3e0454d20c91c310300c856011a1bf7123e38834ff03f7ce,ruby:< 2.6&>= 2.2 1.9.0-x86-mingw32 mini_portile2:~> 2.4.0|checksum:b5904d12ac9bd20bd6d2d9a84937f998ad9720b45e58f758130e7df5698c121e,ruby:< 2.6&>= 2.2 1.9.0 mini_portile2:~> 2.4.0|checksum:e0dc98da58f955789c6fe6273c9eebf93568b38e93feafa7356cb79a71b4b62d,ruby:>= 2.1.0 1.9.1-java |checksum:c8f6f452b7e065d67f6084190cb738a55c953bcd82d52ee2dfa0caed76ad461f,ruby:>= 1.9.3 1.9.1-x64-mingw32 mini_portile2:~> 2.4.0|checksum:ceaa64d7b5ebb996a42052a153aec8465d668e6ba020146fc1fb9f962e9c29b2,ruby:< 2.6&>= 2.2 1.9.1-x86-mingw32 mini_portile2:~> 2.4.0|checksum:b9246945730282cb45e14ac061d84720e00cf875d910a6aa7cb0d042ca4398fb,ruby:< 2.6&>= 2.2 1.9.1 mini_portile2:~> 2.4.0|checksum:a611bafac0baca62e0b2b69c5b50c73c6e519bbba26e9b6525795fb54ba4eeda,ruby:>= 2.1.0 1.10.0.rc1-java |checksum:0444b4dd9f867742bc6df3cd705fdde0a955f5cdb793f6d1c04d70249fce71b7,ruby:>= 2.3.0,rubygems:> 1.3.1 1.10.0.rc1-x64-mingw32 mini_portile2:~> 2.4.0|checksum:5302c2f75f59b06ab2a7b69949ce4d20781239198341a20d69f0fd827e0d56fc,ruby:< 2.7&>= 2.3,rubygems:> 1.3.1 1.10.0.rc1-x86-mingw32 mini_portile2:~> 2.4.0|checksum:cf31a16911360562db39182c7499767c1506a58758d45df119f7da28991896dd,ruby:< 2.7&>= 2.3,rubygems:> 1.3.1 1.10.0.rc1 mini_portile2:~> 2.4.0|checksum:343ec1ae8ba80b8e25f2534810d460e7cd4b5bfb14beed9df97356c2c9c12083,ruby:>= 2.3.0,rubygems:> 1.3.1 1.10.0-java |checksum:badccfb744db5aaa18e5809f9939679da5a58a3ae58ae4ad27a9feed3c44ba15,ruby:>= 2.3.0 1.10.0-x64-mingw32 mini_portile2:~> 2.4.0|checksum:39aa5ca8c7a46b4c0e9d1844205d61014b562c47c4d36d1fc4e89067601692f2,ruby:< 2.7.dev&>= 2.3 1.10.0-x86-mingw32 mini_portile2:~> 2.4.0|checksum:7a7b3b0e02b334a6194e13abea8b9b00135912ddafe795cd73b27054e0624169,ruby:< 2.7.dev&>= 2.3 1.10.0 mini_portile2:~> 2.4.0|checksum:3ce77e0df5daa0be5c93edd0487f9cd761206d7f85e5916bf778c8187d3214c7,ruby:>= 2.3.0 1.10.1 mini_portile2:~> 2.4.0|checksum:0405d84a87d7dbc057eb9a2d0fcef5795e23992db516b83d37b91f69d8a1f427,ruby:>= 2.3.0 1.10.1-java |checksum:e95e8c55c09a4ce85d397916f57387b7974ea7913654e50dd624896ff8192de8,ruby:>= 2.3.0 1.10.1-x64-mingw32 mini_portile2:~> 2.4.0|checksum:d8fe8834dbbac9bd1f1055f00e209aa4e24cbfebdd20ed2332760ab02059f74b,ruby:< 2.7.dev&>= 2.3 1.10.1-x86-mingw32 mini_portile2:~> 2.4.0|checksum:6154afaa9182453282e18ece2a3b035162ae792826dd3e2e091b1730b04f1e19,ruby:< 2.7.dev&>= 2.3 1.10.2-java |checksum:102c482b6face02f07b1c2b28e88c8611a70743927f9251242bf5e9225266e43,ruby:>= 2.3.0 1.10.2-x64-mingw32 mini_portile2:~> 2.4.0|checksum:3fcf579da3a3b47a50f73115273ad768a3a5f5c0eafff383d93bf4c24070202b,ruby:< 2.7.dev&>= 2.3 1.10.2-x86-mingw32 mini_portile2:~> 2.4.0|checksum:971867499c5bee2bfd704a515e503ce9f7641013bf274f5488ae7164ed2d85da,ruby:< 2.7.dev&>= 2.3 1.10.2 mini_portile2:~> 2.4.0|checksum:a273814a5017d052f8dffe07a176ced5a3a70d4b8d38e88eb9c497881833c96b,ruby:>= 2.3.0 1.10.3-java |checksum:bfd7c5a7247d6212400f5d2126a14054647a3147b0a393e3c0e15cd26addfc8f,ruby:>= 2.3.0 1.10.3-x64-mingw32 mini_portile2:~> 2.4.0|checksum:ed9f7acc4867708da322674598c635b9c223c767e5e05b8185fe641009afe009,ruby:< 2.7.dev&>= 2.3 1.10.3-x86-mingw32 mini_portile2:~> 2.4.0|checksum:24c8c7748b04da98bd9324d6541ff9fec6a31a51076a35d986c86ee1e424c0cc,ruby:< 2.7.dev&>= 2.3 1.10.3 mini_portile2:~> 2.4.0|checksum:4497d9bb5a5ae841176fa7f668608bfe6e5652d0b4a6edbe2ea1480063f37209,ruby:>= 2.3.0 1.10.4-java |checksum:af0519a19b3345ec1a98246141af0fa65a73c18735fba39727108948d9137f70,ruby:>= 2.3.0 1.10.4-x64-mingw32 mini_portile2:~> 2.4.0|checksum:3aa6078f1eaf9fac37a02784fd17d880796c0e76aa43a18a2493d42767933363,ruby:< 2.7.dev&>= 2.3 1.10.4-x86-mingw32 mini_portile2:~> 2.4.0|checksum:dc664a5ebb9eaf6f554a5ce3e4bf8d63feee5cf181cfdc038696e8e2960d4b43,ruby:< 2.7.dev&>= 2.3 1.10.4 mini_portile2:~> 2.4.0|checksum:fbf91c487d7ceb2b0593384f175843f99152322754f6ff267740bff031cead5a,ruby:>= 2.3.0 1.10.5-java |checksum:54e7967d47a2d9b3f47b880530a032c1406374632f6c429c7ec816451fd130a5,ruby:>= 2.3.0 1.10.5-x64-mingw32 mini_portile2:~> 2.4.0|checksum:dc492503f0437d5b24d566f5de7a3597ad42dba24db3a7c8a5ad0ad252b1f432,ruby:< 2.7.dev&>= 2.3 1.10.5-x86-mingw32 mini_portile2:~> 2.4.0|checksum:0032580d02013798c63c01c885bc50232e8cdfea0f08c041a2dc08db55fbbcc0,ruby:< 2.7.dev&>= 2.3 1.10.5 mini_portile2:~> 2.4.0|checksum:279b24ea3e84873be0f7ce3a5661b2864667e6176d919465c7721cb5781bafa0,ruby:>= 2.3.0 1.10.6-java |checksum:834efd3e390df25b92695e0b41968af5be77c33deb29697917910e484eb8600c,ruby:>= 2.3.0 1.10.6-x64-mingw32 mini_portile2:~> 2.4.0|checksum:928e579fb501569c68ccae5b0f1c8d7f596e747257128ff0ffa5493a6c17fe15,ruby:< 2.7.dev&>= 2.3 1.10.6-x86-mingw32 mini_portile2:~> 2.4.0|checksum:cc297734f6918bbd387849c727f5210c3205f06d8a0da3dc41829f4049408d12,ruby:< 2.7.dev&>= 2.3 1.10.6 mini_portile2:~> 2.4.0|checksum:e31b26cc19d9a15c1871ea77151088292a71a4878f305427cc7ccffc4d61ee34,ruby:>= 2.3.0 1.10.7-java |checksum:f8e4fe8284cc349bf740094897d70b80d02f3154e90dd0f497686602b76cee6f,ruby:>= 2.3.0 1.10.7-x64-mingw32 mini_portile2:~> 2.4.0|checksum:11574ec70ae00492d949f3f833711e9c13c6d6b26accccf50d119f93908f939a,ruby:< 2.7.dev&>= 2.3 1.10.7-x86-mingw32 mini_portile2:~> 2.4.0|checksum:cba0b35d8894bfc6a1e171ee8a3d1bb32e16678033492341b7f62ac2d5198f85,ruby:< 2.7.dev&>= 2.3 1.10.7 mini_portile2:~> 2.4.0|checksum:96ce81f44eb9b47494d09b6e74f5eae00bbdf01b267b73c224e64080dcbb1864,ruby:>= 2.3.0 1.11.0.rc1-java |checksum:a27811d82394ec06d69d41ab5d5825cfdc62e115255007df4cc34b8de7d5d332,ruby:>= 2.4.0,rubygems:> 1.3.1 1.11.0.rc1-x64-mingw32 mini_portile2:~> 2.4.0|checksum:1b9988a64ed09ec4bbab5ac7dce7a654afa8d43149e0e9a9d8e9c641a2c1755c,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc1-x86-mingw32 mini_portile2:~> 2.4.0|checksum:2a1f4c201eb3f88fecbdd0276d2dce8517aaea231d889b3711cdd40f8dc3893c,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc1 mini_portile2:~> 2.4.0|checksum:078d7f2810e73d57bfd45a6de2bf54fcf47069eb190e5d96fe7cf5cfed99e788,ruby:>= 2.4.0,rubygems:> 1.3.1 1.11.0.rc1-x86-linux mini_portile2:~> 2.4.0|checksum:3c30e22ff5fdb11f79072862add1ba5420b5a1b4aa209722f561212ecb7dbf9f,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc1-x86_64-linux mini_portile2:~> 2.4.0|checksum:fb848ba024a5d3c6f5a17a1b19cadc0d60a901c126bd817a7aa14b0d05256ab5,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.10.8-java |checksum:8222b9dc4131a66d355d98e892002da7765abc30be5e544b6a8f21a46887c2dd,ruby:>= 2.3.0 1.10.8-x64-mingw32 mini_portile2:~> 2.4.0|checksum:646785d6f43ff611ba8350f2a58f330579b73c6ea054baeb487c2c6f2fb32346,ruby:< 2.7.dev&>= 2.3 1.10.8-x86-mingw32 mini_portile2:~> 2.4.0|checksum:eee6a13686507cccd7172845ed4edbd9a9585025c9ebe713de78df8ca658de7c,ruby:< 2.7.dev&>= 2.3 1.10.8 mini_portile2:~> 2.4.0|checksum:0806b8b0541850b59c4f588c53cff42ef2da6c7fa2f0b1cbcb83d1cc219228fa,ruby:>= 2.3.0 1.10.9-java |checksum:9a94d762941ba1f2dac56b5e36bcb70daacd8d87e0a614f3f1a1b3b15332b157,ruby:>= 2.3.0 1.10.9-x64-mingw32 mini_portile2:~> 2.4.0|checksum:dc7f0be077a93c62bb97af65b685606b928c3850f9140c6004caf50437e253b3,ruby:< 2.7.dev&>= 2.3 1.10.9-x86-mingw32 mini_portile2:~> 2.4.0|checksum:5ebcddf047bcd595d6104953e0fde41113d48b4647cdccd53659223b1285b8b1,ruby:< 2.7.dev&>= 2.3 1.10.9 mini_portile2:~> 2.4.0|checksum:d562108c5cdf7e9208c267107a0a54581d868689aefed9c5480898bb4033478a,ruby:>= 2.3.0 1.11.0.rc2-java |checksum:845c3afe5ce33fade2bfeef48882f3772e12c47fbf60a4cc63723a0ee7a843ce,ruby:>= 2.4.0,rubygems:> 1.3.1 1.11.0.rc2-x64-mingw32 |checksum:8bd7faef6858152a01da31a3602ed3864ea10aebac8c8581f3f94e1e171f3c95,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc2-x86-linux |checksum:57a9b5a2e21ff753a63ccc521654ad57b44d65197350dfc30761c4dbed9daf06,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc2-x86-mingw32 |checksum:c0e37f4de1b9cc3fc949adf6dc23db28f1e541380fec79c9132aae57892048fb,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc2-x86_64-linux |checksum:102089c21304452966f6f60ddf61a2cb82207e22b8a3a39cb5c691fb51950314,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc2 mini_portile2:~> 2.5.0|checksum:73a4824f45ea2f4a29950321fc60730fa2ddaf5a10679f54ee640f83985d982c,ruby:>= 2.4.0,rubygems:> 1.3.1 1.10.10-java |checksum:15f0307aafe2b3a2d4f5c1da550f8e6aee42fbfbfaa21779b89ede6a48a359ba,ruby:>= 2.3.0 1.10.10-x64-mingw32 mini_portile2:~> 2.4.0|checksum:b799e9652e7f881b90779576afcf33c6f9619bcd93044f31947607af7a250621,ruby:< 2.8.dev&>= 2.3 1.10.10-x86-mingw32 mini_portile2:~> 2.4.0|checksum:9becad8cbec39ecebf4a08f538897d582dd8e6478c94f3cc1260a17f67505a33,ruby:< 2.8.dev&>= 2.3 1.10.10 mini_portile2:~> 2.4.0|checksum:22ea03a328972467d7da06f4a7d5ac4f1f6410185efb55a4dae9cd222d30ae76,ruby:>= 2.3.0 1.11.0.rc3-java |checksum:b52a815e855e513c6e1549acbc4839854edebe054d7a08362c224ce75dae3328,ruby:>= 2.4.0,rubygems:> 1.3.1 1.11.0.rc3-x64-mingw32 |checksum:00ff8a4133b8e70ebd06ef39544b064853a41ce95243894704a039b14511dd1f,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc3-x86-linux |checksum:1b2cfca01865ad8565df200e917ddba59c2c3be83b28cdbe47a8643a59a6ad01,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc3-x86-mingw32 |checksum:ae8c2633c00e7c96b736f84937726084e63ad17cb1f54c0f4f7d40250c0d37a1,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc3-x86_64-linux |checksum:772f06a0559e29e10b0b385f8d7308535fabfd736b539638214ad8993225607b,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc3 mini_portile2:~> 2.5.0|checksum:aef748502d4d19a3acd49983eb0c7061d6dd19f08f1a50f19ea7656e875cb55b,ruby:>= 2.4.0,rubygems:> 1.3.1 1.11.0.rc3-x86_64-darwin-19 mini_portile2:~> 2.5.0|checksum:85f9add6b70906b728ff2f0f7312722afb182bdbf7b9f8720b1a10c74bdf0c05,ruby:< 2.8.dev&>= 2.4,rubygems:> 1.3.1 1.11.0.rc4-arm64-darwin racc:~> 1.4|checksum:96cc309ac9d035ea32994855be7b93b917088a75dbd7dd92cfdd470d72bdfbc3,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.11.0.rc4-java racc:~> 1.4|checksum:91a0ce4ab4f552716364c4dc2b43f4501d6226080eec304c6513cd1c72c1b045,ruby:>= 2.5.0,rubygems:> 1.3.1 1.11.0.rc4-x64-mingw32 racc:~> 1.4|checksum:d1a185173991fe0cf45deb06cf209f0183573799e883e6071db673b4a7dabfd5,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.11.0.rc4-x86-linux racc:~> 1.4|checksum:fe743bd57ffd80f0e0807ae1b53359e1213916fc6b801090cfb4c6cb8b973a2d,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.11.0.rc4-x86-mingw32 racc:~> 1.4|checksum:fa3b3cba0f7be2337b3b553cee2605c838785d32840325f26bdb3f7898c07437,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.11.0.rc4-x86_64-darwin racc:~> 1.4|checksum:2b352411aac96264c4831d88dce32d195437b3bb5998650b51dbaa49d9b88eae,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.11.0.rc4-x86_64-linux racc:~> 1.4|checksum:3a4a73a4ac968ab6850de493f0c8d5934abb7d35afd91f6ed04d39e27499296c,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.11.0.rc4 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:0e604741c975dcf9c89e0720297b4918f90dc9170d607f53faa1f7b63e5f968f,ruby:>= 2.5.0,rubygems:> 1.3.1 1.11.0-arm64-darwin racc:~> 1.4|checksum:3a613188e3b76d593b04e0ddcc46f44c288b13f80b32ce83957356f50e22f9ee,ruby:< 3.1.dev&>= 2.5 1.11.0-java racc:~> 1.4|checksum:2f0149c735b0672c49171b18467ce25fd323a8e608c9e6b76e2b2fa28e7f66ee,ruby:>= 2.5.0 1.11.0-x64-mingw32 racc:~> 1.4|checksum:2f249be8cc705f9e899c07225fcbe18f4f7dea220a59eb5fa82461979991082e,ruby:< 3.1.dev&>= 2.5 1.11.0-x86-linux racc:~> 1.4|checksum:bda2a9c9debf51da7011830c7f2dc5771c122ebcf0fc2dd2c4ba4fc95b5c38f2,ruby:< 3.1.dev&>= 2.5 1.11.0-x86-mingw32 racc:~> 1.4|checksum:9e219401dc3f93abf09166d12ed99c8310fcaf8c56a99d64ff93d8b5f0604e91,ruby:< 3.1.dev&>= 2.5 1.11.0-x86_64-darwin racc:~> 1.4|checksum:b8f9b826d09494b20b30ecd048f5eb2827dccd85b77abeb8baf1f610e5ed28ed,ruby:< 3.1.dev&>= 2.5 1.11.0-x86_64-linux racc:~> 1.4|checksum:d500c3202e2514b32f4b02049d9193aa825ae3e9442c9cad2d235446c3e17d8d,ruby:< 3.1.dev&>= 2.5 1.11.0 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:17ed2567bf76319075b4a6a7258d1a4c9e2661fca933b03e037d79ae2b9910d0,ruby:>= 2.5.0 1.11.1-arm64-darwin racc:~> 1.4|checksum:a41091292992cb99be1b53927e1de4abe5912742ded956b0ba3383ce4f29711c,ruby:< 3.1.dev&>= 2.5 1.11.1-java racc:~> 1.4|checksum:d44fccb8475394eb71f29dfa7bb3ac32ee50795972c4557ffe54122ce486479d,ruby:>= 2.5.0 1.11.1-x64-mingw32 racc:~> 1.4|checksum:f760285e3db732ee0d6e06370f89407f656d5181a55329271760e82658b4c3fc,ruby:< 3.1.dev&>= 2.5 1.11.1-x86-linux racc:~> 1.4|checksum:dd48343bc4628936d371ba7256c4f74513b6fa642e553ad7401ce0d9b8d26e1f,ruby:< 3.1.dev&>= 2.5 1.11.1-x86-mingw32 racc:~> 1.4|checksum:7f49138821d714fe2c5d040dda4af24199ae207960bf6aad4a61483f896bb046,ruby:< 3.1.dev&>= 2.5 1.11.1-x86_64-darwin racc:~> 1.4|checksum:5c26111f7f26831508cc5234e273afd93f43fbbfd0dcae5394490038b88d28e7,ruby:< 3.1.dev&>= 2.5 1.11.1-x86_64-linux racc:~> 1.4|checksum:c3617c0680af1dd9fda5c0fd7d72a0da68b422c0c0b4cebcd7c45ff5082ea6d2,ruby:< 3.1.dev&>= 2.5 1.11.1 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:42c2a54dd3ef03ef2543177bee3b5308313214e99f0d1aa85f984324329e5caa,ruby:>= 2.5.0 1.11.2-arm64-darwin racc:~> 1.4|checksum:a3e651109daa876bf2f0505d26c2742e122ef750c6153e9e197cee735b7dbe3a,ruby:< 3.1.dev&>= 2.5 1.11.2-java racc:~> 1.4|checksum:0de29a5cf73963f2c852a0dc4bdb9e7b60e3573ab3962433cac8ef452cf00101,ruby:>= 2.5.0 1.11.2-x86-mingw32 racc:~> 1.4|checksum:0d74476b89711b2f2ea70de820c934544b5421a41f2a67bf462a3199aa9f6394,ruby:< 3.1.dev&>= 2.5 1.11.2-x86_64-darwin racc:~> 1.4|checksum:bda1d123cfac33a551b3d2060e6a91ebad3c6988082999498d704803b8afa59b,ruby:< 3.1.dev&>= 2.5 1.11.2-x86_64-linux racc:~> 1.4|checksum:3e8a82fd0a2f0def7092bc18df3a6c41133f026878e16611729530b57941ff42,ruby:< 3.1.dev&>= 2.5 1.11.2-x64-mingw32 racc:~> 1.4|checksum:37a63af0bffb0a1a08960f344409dc6db86b5f7973b4cbf286ab99156e5629d9,ruby:< 3.1.dev&>= 2.5 1.11.2-x86-linux racc:~> 1.4|checksum:9452c0bf4db47e555dbf276c457ca16385e4147648b0bb15534e0e286373b4e0,ruby:< 3.1.dev&>= 2.5 1.11.2 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:175c9ce431d2719cc4c5c4146372f8d84066013f216e560e98aa29ee906ba12c,ruby:>= 2.5.0 1.11.3-arm64-darwin racc:~> 1.4|checksum:64c4827b530e87aa7255cd77d1b88dfe20b522fd496c2347f7c659487acae0ea,ruby:< 3.1.dev&>= 2.5 1.11.3-java racc:~> 1.4|checksum:a70c37cc09bea96913b2c5e2e40b324c2001009853d52d81f005fe817238c538,ruby:>= 2.5.0 1.11.3-x64-mingw32 racc:~> 1.4|checksum:f1bc5b77d3aa303ea28d3c878a06d9cecc077ee1665c8b500df89703f110e61c,ruby:< 3.1.dev&>= 2.5 1.11.3-x86-linux racc:~> 1.4|checksum:9a05a9174ee7dea9496c76bf2687b204e82c85f6acbc824d606f391094fbf6f9,ruby:< 3.1.dev&>= 2.5 1.11.3-x86-mingw32 racc:~> 1.4|checksum:a2aa32942e2ec082f233278b1495bd49f743e2dfe6a2d464cacd700a017518ec,ruby:< 3.1.dev&>= 2.5 1.11.3-x86_64-darwin racc:~> 1.4|checksum:8a33c6e7596aa8b88b40c93b9ec31dad0500531453fdc7f56df1544c947d980a,ruby:< 3.1.dev&>= 2.5 1.11.3-x86_64-linux racc:~> 1.4|checksum:58bc279da6e226e92713d3598635b66c5a979e109018edbe743bdad4b91ec787,ruby:< 3.1.dev&>= 2.5 1.11.3 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:a09beb5c1fa55da31ee494da8c6ad34b2636d099d6c04b964c7f51f15a45a7a5,ruby:>= 2.5.0 1.11.4-arm64-darwin racc:~> 1.4|checksum:7ebb76a274fe824cae26435c272cb7ac2f5054d0dd180f54978f762b9c681af1,ruby:< 3.1.dev&>= 2.5 1.11.4-java racc:~> 1.4|checksum:4cbf108c61185efd3e7146945a313f74f1a886585efcd717f991270886cb69a7,ruby:>= 2.5.0 1.11.4-x64-mingw32 racc:~> 1.4|checksum:22d224f29ec1e4b5922e4f9e16b126b0f1853677ae36d8a06f7512ba806dc3d1,ruby:< 3.1.dev&>= 2.5 1.11.4-x86-linux racc:~> 1.4|checksum:8cfa2ef4dd39e2bb987bfcd904316b5ec859c52cb5c596ec8e78534ddf11c7cb,ruby:< 3.1.dev&>= 2.5 1.11.4-x86-mingw32 racc:~> 1.4|checksum:9af8d648f427bdff25561eacd166a75885f9d1553500fa2ac5db33257de5d1cd,ruby:< 3.1.dev&>= 2.5 1.11.4-x86_64-darwin racc:~> 1.4|checksum:2155e12c1e2f6a2a8b134ffce61b67284165208f64058e40b8ec72b41a4ad733,ruby:< 3.1.dev&>= 2.5 1.11.4-x86_64-linux racc:~> 1.4|checksum:859b33abc6a291d808da75623c4dd41e6e09666d486b02ca0f39eec3d7969f00,ruby:< 3.1.dev&>= 2.5 1.11.4 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:2bdd84d3bb168ab21a0e8d65f43194593f3b77b0016fa5de2dfaeac951fc2e17,ruby:>= 2.5.0 1.11.5-arm64-darwin racc:~> 1.4|checksum:dc67c527590b4334e1f99b4207fa23b5bf1ca4435c8e2aa17a7b0651e8be2d67,ruby:< 3.1.dev&>= 2.5 1.11.5-java racc:~> 1.4|checksum:3cf6207adecaa5450bc21521db53b8df72aceb40e3bd28c0c25895359a03c43f,ruby:>= 2.5.0 1.11.5-x64-mingw32 racc:~> 1.4|checksum:e182ea230abeb4590a31c829a38b0b2f88342e00ea71710323f92b31ccb8b6e8,ruby:< 3.1.dev&>= 2.5 1.11.5-x86-linux racc:~> 1.4|checksum:318053bbcdd86d063a9fd0a6be0a0cf39ad3537f961c94e72c3d9a26ef0c304e,ruby:< 3.1.dev&>= 2.5 1.11.5-x86-mingw32 racc:~> 1.4|checksum:bb1b94809f7ff392a91cbe736be4ebdb04bc69552b4c8b8f5b14b8c27b01097c,ruby:< 3.1.dev&>= 2.5 1.11.5-x86_64-darwin racc:~> 1.4|checksum:212bf1ef5e6bcaa558dbcde5e2d8bfd3f6456c67c6036f2b2d1c142e51ceffb8,ruby:< 3.1.dev&>= 2.5 1.11.5-x86_64-linux racc:~> 1.4|checksum:5da7fe453e35b0731c8e21eb7da18105736fb2f17e58e786d8f8bc766dbe93ba,ruby:< 3.1.dev&>= 2.5 1.11.5 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:15f0f270afbf9e3d4db0b0661d9742b2c02ae3bc8f17ec42c61fab1a8cb700c5,ruby:>= 2.5.0 1.11.6-arm64-darwin racc:~> 1.4|checksum:389b48f53898970753b47ce43dd20e8e992c4cd10e8a7b326476d5760a141142,ruby:< 3.1.dev&>= 2.5 1.11.6-java racc:~> 1.4|checksum:6a2d090946a26d58b4f482e7c2bb7388634bc5ccc7d246212db87893894af211,ruby:>= 2.5.0 1.11.6-x64-mingw32 racc:~> 1.4|checksum:53bcd47cbff47e8a4897dcd9d1bd5ce09c9eed5d5551f104932b3b2fc166ac26,ruby:< 3.1.dev&>= 2.5 1.11.6-x86-linux racc:~> 1.4|checksum:5ccdfc8d0b455e9aac5b0a81e685ec91da7fe247c5a5185f7acf0e2cf44efc9d,ruby:< 3.1.dev&>= 2.5 1.11.6-x86-mingw32 racc:~> 1.4|checksum:d02bede44e5e5382f6952676ebd174df3728ddd6513f2f577e5f4f1bf76cbd93,ruby:< 3.1.dev&>= 2.5 1.11.6-x86_64-darwin racc:~> 1.4|checksum:d8cfee784747077aaca6d0240506b3925dfd850da720b22ad1587af11eebb106,ruby:< 3.1.dev&>= 2.5 1.11.6-x86_64-linux racc:~> 1.4|checksum:989f51ea10b303fca5f407faba76d05233da047550b2d541c6f04183c3e432d1,ruby:< 3.1.dev&>= 2.5 1.11.6 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:9f182a07755dde5e1cda3777dce1d693723f4bef1b947947e0892e168d199dfc,ruby:>= 2.5.0 1.11.7-arm64-darwin racc:~> 1.4|checksum:c93d66d9413ea7c37d30f95e2c54606fec638e556d454e08124d9a33b7fa82c8,ruby:< 3.1.dev&>= 2.5 1.11.7-java racc:~> 1.4|checksum:9d69f57f6c024d86e358a8aef7a273f574721e48a6b2e1426cca007827325413,ruby:>= 2.5.0 1.11.7-x64-mingw32 racc:~> 1.4|checksum:6017dee25feb80292b04554cc1bf8a0a2ede3b6c3daeac811902157bbc6a3bdc,ruby:< 3.1.dev&>= 2.5 1.11.7-x86-linux racc:~> 1.4|checksum:1d15603cd878fa2b710a3ba3028a99d9dd0c14b75711faebf9fb6ff40bac3880,ruby:< 3.1.dev&>= 2.5 1.11.7-x86-mingw32 racc:~> 1.4|checksum:38892350c1e695eab9bd77483300d681c32a22714d0e2d04d10a4c343b424bdd,ruby:< 3.1.dev&>= 2.5 1.11.7-x86_64-darwin racc:~> 1.4|checksum:8761d9c7baacb26546869ed56dbc78d3eb3cabf49b85d91b1cd827cd6e94fb25,ruby:< 3.1.dev&>= 2.5 1.11.7-x86_64-linux racc:~> 1.4|checksum:7ad9741e7a2fee1ffb4a4b2e20b00e87992c9efd969f557ca3b83fb2653b9bfc,ruby:< 3.1.dev&>= 2.5 1.11.7 mini_portile2:~> 2.5.0,racc:~> 1.4|checksum:4976a9c9e796527d51dc6c311b9bd93a0233f6a7962a0f569aa5c782461836ef,ruby:>= 2.5.0 1.12.0.rc1-arm64-darwin racc:~> 1.4|checksum:8e0ecef0dd76a640f4e1ba4dd9b5df8c5ee352ec944ad7f6beedb89c0b49bfcb,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.12.0.rc1-x86-linux racc:~> 1.4|checksum:41ace0fcff1901a8d6661cac815fa573d934d9e8280e21e2ec16dd1bd3a6ff7a,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.12.0.rc1-x86-mingw32 racc:~> 1.4|checksum:7a11a5d911d98a8ddc6a88e712aae82a953fe291f9bb150d4cfe34539489792a,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.12.0.rc1-x86_64-darwin racc:~> 1.4|checksum:ae56204ca3d8154c46c9fc55f526ff8a71b9a3f4bc879dca26674f4714d7dff6,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.12.0.rc1-x86_64-linux racc:~> 1.4|checksum:5843752b3d989954ace6fee40ba0634c615b8c579f885c70ff067a8fcc62fa69,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.12.0.rc1 mini_portile2:~> 2.6.1,racc:~> 1.4|checksum:cb38e1023d5e1b6a33a1b5c7659b68ce7c88449eb69430db128d4d53731b1638,ruby:>= 2.5.0,rubygems:> 1.3.1 1.12.0.rc1-java racc:~> 1.4|checksum:b5e8e912013cc73e78a1817c5b131cdbc3e224dd4c3158063b562f0a89cb9adb,ruby:>= 2.5.0,rubygems:> 1.3.1 1.12.0.rc1-x64-mingw32 racc:~> 1.4|checksum:598b9ed6b98fea43dfc74dbd0cbe24994a26fb1e3dff1a727ba79392495d40d5,ruby:< 3.1.dev&>= 2.5,rubygems:> 1.3.1 1.12.0-arm64-darwin racc:~> 1.4|checksum:f6b01a013829a499a0bf72a7d5109d117b9d4333823295dcd34eb002be0f0054,ruby:< 3.1.dev&>= 2.5 1.12.0-java racc:~> 1.4|checksum:60360d9994bb2e8852deb39f8833ba81a819df921c4192d857323c181645d95e,ruby:>= 2.5.0 1.12.0-x64-mingw32 racc:~> 1.4|checksum:c439f29de83294e61eca919edfea9d6176f23fa51b23d8a3d7261de6268e5847,ruby:< 3.1.dev&>= 2.5 1.12.0-x86-linux racc:~> 1.4|checksum:20fc8eba21f6e6b82720c05d694d2879ebdf6756351d5d2fb236e93febd346d0,ruby:< 3.1.dev&>= 2.5 1.12.0-x86-mingw32 racc:~> 1.4|checksum:89d43ad2ea4f492ebc4c380288077186f0242ccfd65afe14fa0b45529d1f4b5e,ruby:< 3.1.dev&>= 2.5 1.12.0-x86_64-darwin racc:~> 1.4|checksum:97b4260b3912dcfad8427b5ea15ba094790dec1f4725ee074cfc5e9b45906352,ruby:< 3.1.dev&>= 2.5 1.12.0-x86_64-linux racc:~> 1.4|checksum:a21c803d17f89cceda599af1adc139ae17454539276e3f9dbdafea34081b1983,ruby:< 3.1.dev&>= 2.5 1.12.0 mini_portile2:~> 2.6.1,racc:~> 1.4|checksum:b0b5650ba7903c317e0ebd4ca67ed10617735719cf3595ad98dd21974404e5d2,ruby:>= 2.5.0 1.12.1-arm64-darwin racc:~> 1.4|checksum:194092568135d7897d8df0472c27c82b395a6c09054b8f4e8929805faf9eb877,ruby:< 3.1.dev&>= 2.5 1.12.1-java racc:~> 1.4|checksum:e9e16b36f6528af16c62bcfaeae517badb1ec07f5e856b5c151a913d3b0e6368,ruby:>= 2.5.0 1.12.1-x64-mingw32 racc:~> 1.4|checksum:ee1c497c759fdbbe482ab8a0c497b75d44efce5d2ae20fdb93b8c225508dc75a,ruby:< 3.1.dev&>= 2.5 1.12.1-x86-linux racc:~> 1.4|checksum:30c7dff0c9a56a2f03e4e4aa029e14f15282af37d469a0b159446de4c500b28b,ruby:< 3.1.dev&>= 2.5 1.12.1-x86-mingw32 racc:~> 1.4|checksum:fcbdfc03405624ec0a186fa1bb41111a27264f4e7a7398c64c0d4e1e83769739,ruby:< 3.1.dev&>= 2.5 1.12.1-x86_64-darwin racc:~> 1.4|checksum:ee4c88c46b8797bc6dbeee233ef0862a34d8a1a799e9fdcdfb0dfd8a42bb629b,ruby:< 3.1.dev&>= 2.5 1.12.1-x86_64-linux racc:~> 1.4|checksum:f861b04e3268bda45036907f56ceede16b9fe1969099cb8888d378f71706fc63,ruby:< 3.1.dev&>= 2.5 1.12.1 mini_portile2:~> 2.6.1,racc:~> 1.4|checksum:66dc1f0aa02fc62efb166465dfcc520785068cce4a9a3d2822cdea1f1ce66775,ruby:>= 2.5.0 1.12.2-arm64-darwin racc:~> 1.4|checksum:2ef276b482b56cfa488dd24c261c0bf42a47770bd0c15993f5c0d8b61879c114,ruby:< 3.1.dev&>= 2.5 1.12.2-java racc:~> 1.4|checksum:b483fb44ca38ba5890d53a16ab06e56cb23e6facc861ad1260c7bdf45d8227a2,ruby:>= 2.5.0 1.12.2-x64-mingw32 racc:~> 1.4|checksum:254e63ce59f95a4c30721d9ec85f8eb5e5e4f61e8da35015e41b85a262c014ea,ruby:< 3.1.dev&>= 2.5 1.12.2-x86-linux racc:~> 1.4|checksum:f66fbeca97668d3b6563d9311fe59b3dda5f7177405ec7a4d9dceca9d8d23b23,ruby:< 3.1.dev&>= 2.5 1.12.2-x86-mingw32 racc:~> 1.4|checksum:0ece40121d72ab9704e429e06aa2011c7c59112886e000e3dac4ded3f3aeb3d6,ruby:< 3.1.dev&>= 2.5 1.12.2-x86_64-darwin racc:~> 1.4|checksum:b9e33ebbb6c5b7575cfcb69bb52f776541642bbed08c88a36c1a33718458a8b9,ruby:< 3.1.dev&>= 2.5 1.12.2-x86_64-linux racc:~> 1.4|checksum:bd8e7eb8345ef0679f2db3afa2bc13d7338b786c51aaa05ac6e22c1c8da3f3b3,ruby:< 3.1.dev&>= 2.5 1.12.2 mini_portile2:~> 2.6.1,racc:~> 1.4|checksum:94a219a8078bf55f10834445be61b3ad9aa1e1047ec1bed048a86e3ab3245bc5,ruby:>= 2.5.0 1.12.3-arm64-darwin racc:~> 1.4|checksum:454eb62fc97285c485279509b04a3dcdcd329d2d0d8040dd6361c331550f3f59,ruby:< 3.1.dev&>= 2.5 1.12.3-java racc:~> 1.4|checksum:f9c83416f486ab3ea1a1cf58a3337dd3b95c4059350773a95ed2219415aaba8e,ruby:>= 2.5.0 1.12.3-x64-mingw32 racc:~> 1.4|checksum:a4a21f5e58f1485d3807802aac316c14b017d596f48fe088fd963863b078d34a,ruby:< 3.1.dev&>= 2.5 1.12.3-x86-linux racc:~> 1.4|checksum:9da1fb5436217d94d789ba8936bbb4fa36c8367d0eff43f1c4bbd150a1fe8170,ruby:< 3.1.dev&>= 2.5 1.12.3-x86-mingw32 racc:~> 1.4|checksum:102e169468cf70b7d7f8719648f9f69f2ef4dfb9e7a59a1392b3c1fcb74e2e88,ruby:< 3.1.dev&>= 2.5 1.12.3-x86_64-darwin racc:~> 1.4|checksum:4ae5202f5b184e5264d282502998846844352c135633c8fd1165ebd4ca2bdef9,ruby:< 3.1.dev&>= 2.5 1.12.3-x86_64-linux racc:~> 1.4|checksum:eac6482a21c3cf63fea82a7d48131d701bd305dec01f38374a9c976f772f3b60,ruby:< 3.1.dev&>= 2.5 1.12.3 mini_portile2:~> 2.6.1,racc:~> 1.4|checksum:d1975e30090ae723e05a6c9bd95fb795527e1a14d53a614735e2c3d8eef1e1e0,ruby:>= 2.5.0 1.12.4-arm64-darwin racc:~> 1.4|checksum:892808245fad3dea1bd4405461ba45d8f2261a6e23af91b8fc4b136e37cd3475,ruby:< 3.1.dev&>= 2.5 1.12.4-java racc:~> 1.4|checksum:1179f2c8fc13f4cb349b4e9219fbe7c1e7b885e24aceb2c8a0e06d1c3fe3ec2a,ruby:>= 2.5.0 1.12.4-x64-mingw32 racc:~> 1.4|checksum:44e728900a919ca9d8c6a3f545c2ff4903f4f45c47255904548386ad9f9869d6,ruby:< 3.1.dev&>= 2.5 1.12.4-x86-linux racc:~> 1.4|checksum:1116dac823e27f5255024c3154f0db3d2c9008cfdcaf11bbd66bde7770dca12d,ruby:< 3.1.dev&>= 2.5 1.12.4-x86-mingw32 racc:~> 1.4|checksum:129b372c37dc817b588c623e6899ad32fe166498320789611ae3de0c361166ed,ruby:< 3.1.dev&>= 2.5 1.12.4-x86_64-darwin racc:~> 1.4|checksum:f6f606dbdedd94e85e2fdc5e5829833441962115c3b62a2eab0a51f8ba938c3a,ruby:< 3.1.dev&>= 2.5 1.12.4-x86_64-linux racc:~> 1.4|checksum:d706df7ed9382c749382e5b3bd9bfa4986935c0c5e36856d75fd9008d80f4da0,ruby:< 3.1.dev&>= 2.5 1.12.4 mini_portile2:~> 2.6.1,racc:~> 1.4|checksum:7fec161ee1c7b2329e05fed019bfc7b1f910a39e6b30ae95825e75dda2094de9,ruby:>= 2.5.0 1.12.5-arm64-darwin racc:~> 1.4|checksum:36bfa3a07aced069b3f3c9b39d9fb62cb0728d284d02b079404cd55780beaeff,ruby:< 3.1.dev&>= 2.5 1.12.5-java racc:~> 1.4|checksum:16b1a9ddbb70a9c998462912a5972097cbc79c3e01eb373906886ef8a469f589,ruby:>= 2.5.0 1.12.5-x64-mingw32 racc:~> 1.4|checksum:218dcc6edd1b49cc6244b5f88afb978739bb2f3f166c271557fe5f51e4bc713c,ruby:< 3.1.dev&>= 2.5 1.12.5-x86-linux racc:~> 1.4|checksum:e33bb919d64c16d931a5f26dc880969e587d225cfa97e6b56e790fb52179f527,ruby:< 3.1.dev&>= 2.5 1.12.5-x86-mingw32 racc:~> 1.4|checksum:e13c2ed011b8346fbd589e96fe3542d763158bc2c7ad0f4f55f6d801afd1d9ff,ruby:< 3.1.dev&>= 2.5 1.12.5-x86_64-darwin racc:~> 1.4|checksum:1ed64f7db7c1414b87fce28029f2a10128611d2037e0871ba298d00f9a00edd6,ruby:< 3.1.dev&>= 2.5 1.12.5-x86_64-linux racc:~> 1.4|checksum:0868c8d0a147904d4dedaaa05af5f06656f2d3c67e4432601718559bf69d6cea,ruby:< 3.1.dev&>= 2.5 1.12.5 mini_portile2:~> 2.6.1,racc:~> 1.4|checksum:2b20905942acc580697c8c496d0d1672ab617facb9d30d156b3c7676e67902ec,ruby:>= 2.5.0 1.13.0-aarch64-linux racc:~> 1.4|checksum:d147a8feff7faa67de26b152a303a0bbad8ea77ab75e64f4ccf3614b12641dbc,ruby:< 3.2.dev&>= 2.6 1.13.0-arm64-darwin racc:~> 1.4|checksum:4455dcfedeee00e1b02ddc1df5cf1fc60b72b5bae9ca53d234c85d48b169894e,ruby:< 3.2.dev&>= 2.6 1.13.0-java racc:~> 1.4|checksum:1a0283e525c74b97cf84d60a842e978d98a00789115e4d528d7784551909ff70,ruby:>= 2.6.0 1.13.0-x64-mingw-ucrt racc:~> 1.4|checksum:c575d5b22132c78b95279cff259aa21fbb2f185fc7e6967c886138ba2d7286c4,ruby:< 3.2.dev&>= 3.1 1.13.0-x64-mingw32 racc:~> 1.4|checksum:0607ce088cac95e7bde9d05ad9c5e8b7c342628228bca8302b966c456e9f6160,ruby:< 3.1.dev&>= 2.6 1.13.0-x86-linux racc:~> 1.4|checksum:d313b61192a23793af5b5ca469ec80561933cf4fa958a0106df9dcf031e76077,ruby:< 3.2.dev&>= 2.6 1.13.0-x86-mingw32 racc:~> 1.4|checksum:dc5f9ee89b297d4f7c1e53de295243b9e6d175d5042960ea5d001eb1b1df1fd7,ruby:< 3.2.dev&>= 2.6 1.13.0-x86_64-darwin racc:~> 1.4|checksum:039372ceb6e5903f70cc5a960a7d141455b2480e0d268234f14bde69347c571c,ruby:< 3.2.dev&>= 2.6 1.13.0-x86_64-linux racc:~> 1.4|checksum:03b95ba61c3b7f85d79f99f30e1dd907548dd980e502cdc5eeccfa5db9aafb3b,ruby:< 3.2.dev&>= 2.6 1.13.0 mini_portile2:~> 2.7.0,racc:~> 1.4|checksum:8dbd691d438dc12dadc3d8b5b7ed0a6e64d84a2d65b392b52dce868fda107db3,ruby:>= 2.6.0 1.13.1-aarch64-linux racc:~> 1.4|checksum:9206569b36f0066f943f174a832b50e69551c2a81333b7a62d4073e97ea4c3c6,ruby:< 3.2.dev&>= 2.6 1.13.1-arm64-darwin racc:~> 1.4|checksum:39d73197506acd3748c84600e000bb44ccd930695a9fc8b489b1b4df37dd14f0,ruby:< 3.2.dev&>= 2.6 1.13.1-java racc:~> 1.4|checksum:1aaa315876e2049b4418c60794f1f55bdb04cc9583b9b664dbb3c52696695207,ruby:>= 2.6.0 1.13.1-x64-mingw-ucrt racc:~> 1.4|checksum:37d97e5fdaae4a14cc7122598616ac484d71c271004fb6cce6684c6734f41552,ruby:< 3.2.dev&>= 3.1 1.13.1-x64-mingw32 racc:~> 1.4|checksum:683b030957c747d35499f8d766cad51a31ae9456098225af62fab7b27fe20129,ruby:< 3.1.dev&>= 2.6 1.13.1-x86-linux racc:~> 1.4|checksum:690958426e3151ba0c22e8d88637dba5e0c636107f3def2ffc10e334d451e61f,ruby:< 3.2.dev&>= 2.6 1.13.1-x86-mingw32 racc:~> 1.4|checksum:30f94872729a1bbd41d6e2080bb0d48f4137a1323530263fd88299b41666ca06,ruby:< 3.2.dev&>= 2.6 1.13.1-x86_64-darwin racc:~> 1.4|checksum:1fa3a5c9a460292ff03c7347185d2c394978c94fc96fd414bbfa8cef3eac7d72,ruby:< 3.2.dev&>= 2.6 1.13.1-x86_64-linux racc:~> 1.4|checksum:843a379997c88a1b3d7524cd27b3ee652444f5371ff449af09929602fa26dfb5,ruby:< 3.2.dev&>= 2.6 1.13.1 mini_portile2:~> 2.7.0,racc:~> 1.4|checksum:2138bb8e1bd5f11c2dc57a6a7ed93ddce35825dae7d25262658d89a222571fff,ruby:>= 2.6.0 1.13.2-aarch64-linux racc:~> 1.4|checksum:63469a9bb56a21c62fbaea58d15f54f8f167ff6fde51c5c2262072f939926fdd,ruby:< 3.2.dev&>= 2.6 1.13.2-arm64-darwin racc:~> 1.4|checksum:2986617f982f645c06f22515b721e6d2613dd69493e5c41ddd03c4830c3b3065,ruby:< 3.2.dev&>= 2.6 1.13.2-java racc:~> 1.4|checksum:aca1d66206740b29d0d586b1d049116adcb31e6cdd7c4dd3a96eb77da215a0c4,ruby:>= 2.6.0 1.13.2-x64-mingw-ucrt racc:~> 1.4|checksum:b9e4eea1a200d9a927a5bc7d662c427e128779cba0098ea49ddbdb3ffc3ddaec,ruby:< 3.2.dev&>= 3.1 1.13.2-x64-mingw32 racc:~> 1.4|checksum:48d5493fec495867c5516a908a068c1387a1d17c5aeca6a1c98c089d9d9fdcf8,ruby:< 3.1.dev&>= 2.6 1.13.2-x86-linux racc:~> 1.4|checksum:62034d7aaaa83fbfcb8876273cc5551489396841a66230d3200b67919ef76cf9,ruby:< 3.2.dev&>= 2.6 1.13.2-x86-mingw32 racc:~> 1.4|checksum:e07237b82394017c2bfec73c637317ee7dbfb56e92546151666abec551e46d1d,ruby:< 3.2.dev&>= 2.6 1.13.2-x86_64-darwin racc:~> 1.4|checksum:01937a6551d997aca32468da08ced0878ba4e1dfd0b51d953617185eefc57ffa,ruby:< 3.2.dev&>= 2.6 1.13.2-x86_64-linux racc:~> 1.4|checksum:70112ae29939d4b5e1c8ba13e1f0d82ff43cd5564ce138f622fe6ebddc503654,ruby:< 3.2.dev&>= 2.6 1.13.2 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:def6b330c53dcabe8b7d545cf9db4dfb45e9d39040b531eb81aee0c840fd66c2,ruby:>= 2.6.0 1.13.3-aarch64-linux racc:~> 1.4|checksum:025a4e333f6f903072a919f5f75b03a8f70e4969dab4280375b73f9d8ff8d2c0,ruby:< 3.2.dev&>= 2.6 1.13.3-arm64-darwin racc:~> 1.4|checksum:b9cb59c6a6da8cf4dbee5dbb569c7cc95a6741392e69053544e0f40b15ab9ad5,ruby:< 3.2.dev&>= 2.6 1.13.3-java racc:~> 1.4|checksum:e55d18cee64c19d51d35ad80634e465dbcdd46ac4233cb42c1e410307244ebae,ruby:>= 2.6.0 1.13.3-x64-mingw-ucrt racc:~> 1.4|checksum:53e2d68116cd00a873406b8bdb90c78a6f10e00df7ddf917a639ac137719b67b,ruby:< 3.2.dev&>= 3.1 1.13.3-x64-mingw32 racc:~> 1.4|checksum:b5f39ebb662a1be7d1c61f8f0a2a683f1bb11690a6f00a99a1aa23a071f80145,ruby:< 3.1.dev&>= 2.6 1.13.3-x86-linux racc:~> 1.4|checksum:7c0de5863aace4bbbc73c4766cf084d1f0b7a495591e46d1666200cede404432,ruby:< 3.2.dev&>= 2.6 1.13.3-x86-mingw32 racc:~> 1.4|checksum:675cc3e7d7cca0d6790047a062cd3aa3eab59e3cb9b19374c34f98bade588c66,ruby:< 3.2.dev&>= 2.6 1.13.3-x86_64-darwin racc:~> 1.4|checksum:f445596a5a76941a9d1980747535ab50d3399d1b46c32989bc26b7dd988ee498,ruby:< 3.2.dev&>= 2.6 1.13.3-x86_64-linux racc:~> 1.4|checksum:3f6340661c2a283b337d227ea224f859623775b2f5c09a6bf197b786563958df,ruby:< 3.2.dev&>= 2.6 1.13.3 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:bf1b1bceff910abb0b7ad825535951101a0361b859c2ad1be155c010081ecbdc,ruby:>= 2.6.0 1.13.4-aarch64-linux racc:~> 1.4|checksum:095ff1995ed3dda3ea98a5f08bdc54bef02be1ce4e7c81034c4812e5e7c6e7e3,ruby:< 3.2.dev&>= 2.6 1.13.4-arm64-darwin racc:~> 1.4|checksum:7ebfc7415c819bcd4e849627e879cef2fb328bec90e802e50d74ccd13a60ec75,ruby:< 3.2.dev&>= 2.6 1.13.4-java racc:~> 1.4|checksum:41efd87c121991de26ef0393ac713d687e539813c3b79e454a2e3ffeecd107ea,ruby:>= 2.6.0 1.13.4-x64-mingw-ucrt racc:~> 1.4|checksum:ab547504692ada0cec9d2e4e15afab659677c3f4c1ac3ea639bf5212b65246a1,ruby:< 3.2.dev&>= 3.1 1.13.4-x64-mingw32 racc:~> 1.4|checksum:fa5c64cfdb71642ed647428e4d0d75ee0f4d189cfb63560c66fd8bdf99eb146b,ruby:< 3.1.dev&>= 2.6 1.13.4-x86-linux racc:~> 1.4|checksum:d6f07cbcbc28b75e8ac5d6e729ffba3602dffa0ad16ffac2322c9b4eb9b971fc,ruby:< 3.2.dev&>= 2.6 1.13.4-x86-mingw32 racc:~> 1.4|checksum:0f7a4fd13e25abe3f98663fef0d115d58fdeff62cf23fef12d368e42adad2ce6,ruby:< 3.2.dev&>= 2.6 1.13.4-x86_64-darwin racc:~> 1.4|checksum:3eef282f00ad360304fbcd5d72eb1710ff41138efda9513bb49eec832db5fa3e,ruby:< 3.2.dev&>= 2.6 1.13.4-x86_64-linux racc:~> 1.4|checksum:3978610354ec67b59c128d23259c87b18374ee1f61cb9ed99de7143a88e70204,ruby:< 3.2.dev&>= 2.6 1.13.4 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:0d46044eb39271e3360dae95ed6061ce17bc0028d475651dc48db393488c83bc,ruby:>= 2.6.0 1.13.5-aarch64-linux racc:~> 1.4|checksum:aa1bfd0fd0b33110729d4a063b7b02de9419c559eb48a1f8940b74fc638d60ea,ruby:< 3.2.dev&>= 2.6 1.13.5-arm64-darwin racc:~> 1.4|checksum:d0b872786d6c2b44c10a389e585a77c07274a2b5e7211a470f76909c0711f218,ruby:< 3.2.dev&>= 2.6 1.13.5-java racc:~> 1.4|checksum:3f1434c198f0daf46d24c4696a53504beb69b8c15efe0548a7aa17a8378be21d,ruby:>= 2.6.0 1.13.5-x64-mingw-ucrt racc:~> 1.4|checksum:0e60dc107c7e289dd3817acff14a12c9f4447a994a2411f772d6dd1220a35ae6,ruby:< 3.2.dev&>= 3.1 1.13.5-x64-mingw32 racc:~> 1.4|checksum:c9897dd7236738d260b66ac99ea93950fd3a6375f11a9927bf345eec4ec1fde6,ruby:< 3.1.dev&>= 2.6 1.13.5-x86-linux racc:~> 1.4|checksum:a81586845f99a16a85586717b0051ce1508a68722a56486582ab09b3255d3b17,ruby:< 3.2.dev&>= 2.6 1.13.5-x86-mingw32 racc:~> 1.4|checksum:e2abaef3af396adee3b0995693d5e690eb826782f7ecddf8b1b6a5a706075cff,ruby:< 3.2.dev&>= 2.6 1.13.5-x86_64-darwin racc:~> 1.4|checksum:19360ba28f31562691926d1c542c783fc0ed5f2a145f1329206f8c09e46a85ea,ruby:< 3.2.dev&>= 2.6 1.13.5-x86_64-linux racc:~> 1.4|checksum:a598598163233ee907472808c0bc7ae4354999e77409e1711b61406066a7afb4,ruby:< 3.2.dev&>= 2.6 1.13.5 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:e15570ec6d46921a3de5f5b057b027cc0c4f32775353c00e8c8dfbe443741e78,ruby:>= 2.6.0 1.13.6-aarch64-linux racc:~> 1.4|checksum:58417c7c10f78cd1c0e1984f81538300d4ea98962cfd3f46f725efee48f9757a,ruby:< 3.2.dev&>= 2.6 1.13.6-arm64-darwin racc:~> 1.4|checksum:a2b04ec3b1b73ecc6fac619b41e9fdc70808b7a653b96ec97d04b7a23f158dbc,ruby:< 3.2.dev&>= 2.6 1.13.6-java racc:~> 1.4|checksum:4437f2d03bc7da8854f4aaae89e24a98cf5c8b0212ae2bc003af7e65c7ee8e27,ruby:>= 2.6.0 1.13.6-x64-mingw-ucrt racc:~> 1.4|checksum:99d3e212bbd5e80aa602a1f52d583e4f6e917ec594e6aa580f6aacc253eff984,ruby:< 3.2.dev&>= 3.1 1.13.6-x64-mingw32 racc:~> 1.4|checksum:a04f6154a75b6ed4fe2d0d0ff3ac02f094b54e150b50330448f834fa5726fbba,ruby:< 3.1.dev&>= 2.6 1.13.6-x86-linux racc:~> 1.4|checksum:a13f30c2863ef9e5e11240dd6d69ef114229d471018b44f2ff60bab28327de4d,ruby:< 3.2.dev&>= 2.6 1.13.6-x86-mingw32 racc:~> 1.4|checksum:63a2ca2f7a4f6bd9126e1695037f66c8eb72ed1e1740ef162b4480c57cc17dc6,ruby:< 3.2.dev&>= 2.6 1.13.6-x86_64-darwin racc:~> 1.4|checksum:2b266e0eb18030763277b30dc3d64337f440191e2bd157027441ac56a59d9dfe,ruby:< 3.2.dev&>= 2.6 1.13.6-x86_64-linux racc:~> 1.4|checksum:3fa37b0c3b5744af45f9da3e4ae9cbd89480b35e12ae36b5e87a0452e0b38335,ruby:< 3.2.dev&>= 2.6 1.13.6 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:b1512fdc0aba446e1ee30de3e0671518eb363e75fab53486e99e8891d44b8587,ruby:>= 2.6.0 1.13.7-aarch64-linux racc:~> 1.4|checksum:16facd06367325b75bba1575ee87ee4c695e017ab7d447106ed2c00d6211db43,ruby:< 3.2.dev&>= 2.6 1.13.7-arm64-darwin racc:~> 1.4|checksum:69a1705a1f2be838bd0a778c1ff04ea58f847a41c3b5159de012617abba53f86,ruby:< 3.2.dev&>= 2.6 1.13.7-java racc:~> 1.4|checksum:6f26c7ed388406541ddc10cf7ea670cebe8f08a37e69be60503687374f835e1a,ruby:>= 2.6.0 1.13.7-x64-mingw-ucrt racc:~> 1.4|checksum:3952cb78db8d107942ec7f3096d417f4d5d77bf44ae812c488bc49269d1dde6a,ruby:< 3.2.dev&>= 3.1 1.13.7-x64-mingw32 racc:~> 1.4|checksum:e836c387eae9c6c93d4870db0d50e4d9505edd28100eef80c38a70d4481c09ed,ruby:< 3.1.dev&>= 2.6 1.13.7-x86-linux racc:~> 1.4|checksum:194484866cd0d100ee6e207a69611a63ece9e0cf305e42d449f244526e102f63,ruby:< 3.2.dev&>= 2.6 1.13.7-x86-mingw32 racc:~> 1.4|checksum:f75903e7a1fbb896b8bd6e4ed895a0fc1760e7334b9c7faf2593f491907a9e26,ruby:< 3.2.dev&>= 2.6 1.13.7-x86_64-darwin racc:~> 1.4|checksum:d41b8c9f609b3eecb129da52b9605bc833e464b9b9132c29a0c2115e5ea0ab57,ruby:< 3.2.dev&>= 2.6 1.13.7-x86_64-linux racc:~> 1.4|checksum:dcb36fd4e75782e7b1b3315f464a0942b230497cd21d296a24d90b0d3620a9d0,ruby:< 3.2.dev&>= 2.6 1.13.7 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:6ca1d753334418e749beb9bb69515a906451c9abfb9a5b060a36650419b61052,ruby:>= 2.6.0 1.13.8-aarch64-linux racc:~> 1.4|checksum:d6b2c45a57738f12fe27783939fe1394e7049246288c7770d3b1fee7f49432a6,ruby:< 3.2.dev&>= 2.6 1.13.8-arm64-darwin racc:~> 1.4|checksum:00217e48a6995e81dd83014325c0ea0b015023a8922c7bdb2ef1416aa87c1f43,ruby:< 3.2.dev&>= 2.6 1.13.8-java racc:~> 1.4|checksum:9d04c616900e2b5118e501436ebb9bc48520d08f3695d012a314006e28082f72,ruby:>= 2.6.0 1.13.8-x64-mingw-ucrt racc:~> 1.4|checksum:98f7dac7583f07a84ec3fcc01dc03a66fce10f412cd363fce7de749acdb2a42d,ruby:< 3.2.dev&>= 3.1 1.13.8-x64-mingw32 racc:~> 1.4|checksum:117a71b37f2e1d774a9f031d393e72d5d04b92af8036e0c1a8dd509c247b2013,ruby:< 3.1.dev&>= 2.6 1.13.8-x86-linux racc:~> 1.4|checksum:6d04342456edfb8fbc041d0c2cf5a59baaa7aacdda414b2333100b02f85d441d,ruby:< 3.2.dev&>= 2.6 1.13.8-x86-mingw32 racc:~> 1.4|checksum:0529d558b4280a55bc7af500d3d4d590b7c059c814a0cea52e4e18cb30c25d15,ruby:< 3.2.dev&>= 2.6 1.13.8-x86_64-darwin racc:~> 1.4|checksum:8966d79e687b271df87a4b240456597c43cd98584e3f783fc35de4f066486421,ruby:< 3.2.dev&>= 2.6 1.13.8-x86_64-linux racc:~> 1.4|checksum:344f1bc66feac787e5b2053c6e9095d1f33605083e58ddf2b8d4eef257bccc5f,ruby:< 3.2.dev&>= 2.6 1.13.8 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:79c279298b2f22fd4e760f49990c7930436bac1b1cfeff7bacff192f30edea3c,ruby:>= 2.6.0 1.13.9-aarch64-linux racc:~> 1.4|checksum:9b69829561d30c4461ea803baeaf3460e8b145cff7a26ce397119577a4083a02,ruby:< 3.2.dev&>= 2.6 1.13.9-arm64-darwin racc:~> 1.4|checksum:e76ebb4b7b2e02c72b2d1541289f8b0679fb5984867cf199d89b8ef485764956,ruby:< 3.2.dev&>= 2.6 1.13.9-java racc:~> 1.4|checksum:15bae7d08bddeaa898d8e3f558723300137c26a2dc2632a1f89c8574c4467165,ruby:>= 2.6.0 1.13.9-x64-mingw-ucrt racc:~> 1.4|checksum:f6a1dbc7229184357f3129503530af73cc59ceba4932c700a458a561edbe04b9,ruby:< 3.2.dev&>= 3.1 1.13.9-x64-mingw32 racc:~> 1.4|checksum:36d935d799baa4dc488024f71881ff0bc8b172cecdfc54781169c40ec02cbdb3,ruby:< 3.1.dev&>= 2.6 1.13.9-x86-linux racc:~> 1.4|checksum:ebaf82aa9a11b8fafb67873d19ee48efb565040f04c898cdce8ca0cd53ff1a12,ruby:< 3.2.dev&>= 2.6 1.13.9-x86-mingw32 racc:~> 1.4|checksum:11789a2a11b28bc028ee111f23311461104d8c4468d5b901ab7536b282504154,ruby:< 3.2.dev&>= 2.6 1.13.9-x86_64-darwin racc:~> 1.4|checksum:01830e1646803ff91c0fe94bc768ff40082c6de8cfa563dafd01b3f7d5f9d795,ruby:< 3.2.dev&>= 2.6 1.13.9-x86_64-linux racc:~> 1.4|checksum:8e93b8adec22958013799c8690d81c2cdf8a90b6f6e8150ab22e11895844d781,ruby:< 3.2.dev&>= 2.6 1.13.9 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:96f37c1baf0234d3ae54c2c89aef7220d4a8a1b03d2675ff7723565b0a095531,ruby:>= 2.6.0 1.13.10-x64-mingw-ucrt racc:~> 1.4|checksum:916aa17e624611dddbf2976ecce1b4a80633c6378f8465cff0efab022ebc2900,ruby:< 3.2.dev&>= 3.1 1.13.10-x86-linux racc:~> 1.4|checksum:91fa3a8724a1ce20fccbd718dafd9acbde099258183ac486992a61b00bb17020,ruby:< 3.2.dev&>= 2.6 1.13.10-aarch64-linux racc:~> 1.4|checksum:777ce2e80f64772e91459b943e531dfef387e768f2255f9bc7a1655f254bbaa1,ruby:< 3.2.dev&>= 2.6 1.13.10-x64-mingw32 racc:~> 1.4|checksum:0f85a1ad8c2b02c166a6637237133505b71a05f1bb41b91447005449769bced0,ruby:< 3.1.dev&>= 2.6 1.13.10-java racc:~> 1.4|checksum:73ac581ddcb680a912e92da928ffdbac7b36afd3368418f2cee861b96e8c830b,ruby:>= 2.6.0 1.13.10-arm64-darwin racc:~> 1.4|checksum:b432ff47c51386e07f7e275374fe031c1349e37eaef2216759063bc5fa5624aa,ruby:< 3.2.dev&>= 2.6 1.13.10-x86_64-linux racc:~> 1.4|checksum:51d5246705dedad0a09b374d09cc193e7383a5dd32136a690a3cd56e95adf0a3,ruby:< 3.2.dev&>= 2.6 1.13.10 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:d3ee00f26c151763da1691c7fc6871ddd03e532f74f85101f5acedc2d099e958,ruby:>= 2.6.0 1.13.10-x86-mingw32 racc:~> 1.4|checksum:d6663f5900ccd8f72d43660d7f082565b7ffcaade0b9a59a74b3ef8791034168,ruby:< 3.2.dev&>= 2.6 1.13.10-x86_64-darwin racc:~> 1.4|checksum:81755fc4b8130ef9678c76a2e5af3db7a0a6664b3cba7d9fe8ef75e7d979e91b,ruby:< 3.2.dev&>= 2.6 1.14.0.rc1-aarch64-linux racc:~> 1.4|checksum:9cb5140f400c3599ba9da92a338d2384976179a05e15267d5bda27ce5ab5294a,ruby:< 3.3.dev&>= 2.7,rubygems:> 1.3.1 1.14.0.rc1-arm-linux racc:~> 1.4|checksum:70946d652626925f0e7d8cb0f03e45b81423496e8f0db30dce7aecccc33336c6,ruby:< 3.3.dev&>= 2.7,rubygems:> 1.3.1 1.14.0.rc1-arm64-darwin racc:~> 1.4|checksum:8562ed2a3765f2020e340d4cbde72c582843191b20114eb24bcc313307483873,ruby:< 3.3.dev&>= 2.7,rubygems:> 1.3.1 1.14.0.rc1-x64-mingw-ucrt racc:~> 1.4|checksum:c83050f34b78690bd13398ad91cace3c32957614fd7b6e5ce7098386340cd23d,ruby:< 3.3.dev&>= 3.1,rubygems:> 1.3.1 1.14.0.rc1-x86-linux racc:~> 1.4|checksum:55d334f128d86a20497a3fa4e24c67098199dc9428a44b77284cff6c95104c35,ruby:< 3.3.dev&>= 2.7,rubygems:> 1.3.1 1.14.0.rc1-x64-mingw32 racc:~> 1.4|checksum:4d2edec4b79735b648eca12c5d52b52d03f4ffd300ccacf8fda9169227eb6a4d,ruby:< 3.1.dev&>= 2.7,rubygems:> 1.3.1 1.14.0.rc1-x86-mingw32 racc:~> 1.4|checksum:79e1b2f25a26a9a4a87d3af64a47be27ee3cc4ec0d02eef681b64cd8b610e2a6,ruby:< 3.3.dev&>= 2.7,rubygems:> 1.3.1 1.14.0.rc1-x86_64-darwin racc:~> 1.4|checksum:c359c27e275da0f82d09c25f6efafd116546d2c7c43c91e9393567f00aa3064a,ruby:< 3.3.dev&>= 2.7,rubygems:> 1.3.1 1.14.0.rc1-java racc:~> 1.4|checksum:6359f13cccc526936913bac3515a3d3d7d1ffde5dffff4eadaaf3cad126fc753,ruby:>= 2.7.0,rubygems:> 1.3.1 1.14.0.rc1 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:9d527b0b6eeb88f48bc90648df11824f247019e08b95f5a75b6ea02cefcf499a,ruby:>= 2.7.0,rubygems:> 1.3.1 1.14.0.rc1-x86_64-linux racc:~> 1.4|checksum:e15e2c0f844bd113e1b409dfb534b7e2c727b10812734064c05a732b6342f28c,ruby:< 3.3.dev&>= 2.7,rubygems:> 1.3.1 1.14.0-x64-mingw-ucrt racc:~> 1.4|checksum:ee11c092b2cf2b137e71f623746162c578b53483dccf4c6209c80f5ba47927fe,ruby:< 3.3.dev&>= 3.1 1.14.0-x64-mingw32 racc:~> 1.4|checksum:9b91eede6155eb8891d7d95d8087d514f3007dd19813982104ed77452a2a7ace,ruby:< 3.1.dev&>= 2.7 1.14.0-arm-linux racc:~> 1.4|checksum:33617e8a94993b8130a50bd59d6141a8d4d2aa4d4053f5c7874c71608e6e6dcc,ruby:< 3.3.dev&>= 2.7 1.14.0-x86_64-linux racc:~> 1.4|checksum:faa88b2bca46adaa3420c6e27eb8eb71f5b8d9f454ed7488a194a00c5ef52fbe,ruby:< 3.3.dev&>= 2.7 1.14.0-x86-linux racc:~> 1.4|checksum:649019d961b0ea8aee1bc8aa2573ab8ffb77d3f5e9c333aa2462a79fc56745fc,ruby:< 3.3.dev&>= 2.7 1.14.0-aarch64-linux racc:~> 1.4|checksum:c87564f5f8fbfb72fbcb7ed9781f6472ceabe2f288ede6b9c37071dc32320ba6,ruby:< 3.3.dev&>= 2.7 1.14.0 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:55ca6e87ae85e944a5901dd5a6cacbb961eaaf8b8dd3901b57475665396914bb,ruby:>= 2.7.0 1.14.0-x86-mingw32 racc:~> 1.4|checksum:40985fc46315ea3d33ed900a649c0bb77484035ea882b7c9e55aef436b1958a8,ruby:< 3.3.dev&>= 2.7 1.14.0-x86_64-darwin racc:~> 1.4|checksum:5d328c0d0c5f6f37a26c75b0282f9014c9686d4c10578ec8dfbbfcbea7da8b95,ruby:< 3.3.dev&>= 2.7 1.14.0-arm64-darwin racc:~> 1.4|checksum:5c0cd4eeb8501526e7e2aaba93b60ebf3dda37bfda665691196d4e9bb87adb1a,ruby:< 3.3.dev&>= 2.7 1.14.0-java racc:~> 1.4|checksum:772936bf635b33b99bc89828de8e7077de47009638fe5ff11795f8b1d578465c,ruby:>= 2.7.0 1.14.1-aarch64-linux racc:~> 1.4|checksum:99594e8b94f576644ac640a223d74c79e840218948e963aa635f0254927bff10,ruby:< 3.3.dev&>= 2.7 1.14.1-arm-linux racc:~> 1.4|checksum:1dc9b7821e1fa1f3fda40659662e51a4b3692acc4ee6342ee34a6a537fc1d5d8,ruby:< 3.3.dev&>= 2.7 1.14.1-x64-mingw-ucrt racc:~> 1.4|checksum:2463a1ae0be5f06a10f3f3b374c2b743bff6280db993d488511a19bb7bc7cb7c,ruby:< 3.3.dev&>= 3.1 1.14.1-arm64-darwin racc:~> 1.4|checksum:1a693df86da8c4c97b01d614470f9c3e10b9c755de8803fbfcfffe0f9dff522a,ruby:< 3.3.dev&>= 2.7 1.14.1-x64-mingw32 racc:~> 1.4|checksum:f3a2b0ceedf51d776b39dc759ce191a4df842d7d4f5900c64f33d4753db39877,ruby:< 3.1.dev&>= 2.7 1.14.1-x86_64-linux racc:~> 1.4|checksum:21d234c51582b292e2e1e02e6c30eea9188894348985d6910aa8e993749c0aff,ruby:< 3.3.dev&>= 2.7 1.14.1-x86-linux racc:~> 1.4|checksum:f395d6c28c822b0877cfb0c71781f05243c034b4823359ab25b3288a73b9fc82,ruby:< 3.3.dev&>= 2.7 1.14.1 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:b2db3af7769c29cd77d5f39cd3d0b65ab10975bdecf04be71d683f9c9abe2663,ruby:>= 2.7.0 1.14.1-x86-mingw32 racc:~> 1.4|checksum:be34b32fe74e82bffca5b1f3df8727c8fdc828762b6dddab53a11cd8f8515785,ruby:< 3.3.dev&>= 2.7 1.14.1-x86_64-darwin racc:~> 1.4|checksum:9b14091f77086c4f0f09451ba3acd1b5f7e0076fb34fc536682170fa9f1a5074,ruby:< 3.3.dev&>= 2.7 1.14.1-java racc:~> 1.4|checksum:c1f87a8f7bc56028deb2aecbb29e9b318405f7c468b29047aede78b41bc735a2,ruby:>= 2.7.0 1.14.2-aarch64-linux racc:~> 1.4|checksum:966acf4f6c1fba10518f86498141cf44265564ac5a65dcc8496b65f8c354f776,ruby:< 3.3.dev&>= 2.7 1.14.2-arm-linux racc:~> 1.4|checksum:8a3a35cadae4a800ddc0b967394257343d62196d9d059b54e38cf067981db428,ruby:< 3.3.dev&>= 2.7 1.14.2-arm64-darwin racc:~> 1.4|checksum:81404cd014ecb597725c3847523c2ee365191a968d0b5f7d857e03f388c57631,ruby:< 3.3.dev&>= 2.7 1.14.2-java racc:~> 1.4|checksum:0a39222af14e75eb0243e8d969345e03b90c0e02b0f33c61f1ebb6ae53538bb5,ruby:>= 2.7.0 1.14.2-x64-mingw-ucrt racc:~> 1.4|checksum:62a18f9213a0ceeaf563d1bc7ccfd93273323c4356ded58a5617c59bc4635bc5,ruby:< 3.3.dev&>= 3.1 1.14.2-x64-mingw32 racc:~> 1.4|checksum:54f6ac2c15a7a88f431bb5e23f4616aa8fc97a92eb63336bcf65b7050f2d3be0,ruby:< 3.1.dev&>= 2.7 1.14.2-x86-linux racc:~> 1.4|checksum:c42fa0856f01f901954898e28c3c2b4dce0e843056b1b126f441d06e887e1b77,ruby:< 3.3.dev&>= 2.7 1.14.2-x86-mingw32 racc:~> 1.4|checksum:f940d9c8e47b0f19875465376f2d1c8911bc9489ac9a48c124579819dc4a7f19,ruby:< 3.3.dev&>= 2.7 1.14.2-x86_64-darwin racc:~> 1.4|checksum:2508978f5ca28944919973f6300f0a7355fbe72604ab6a6913f1630be1030265,ruby:< 3.3.dev&>= 2.7 1.14.2-x86_64-linux racc:~> 1.4|checksum:bc6405e1f3ddac6e401f82d775f1c0c24c6e58c371b3fadaca0596d5d511e476,ruby:< 3.3.dev&>= 2.7 1.14.2 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:c765a74aac6cf430a710bb0b6038b8ee11f177393cd6ae8dadc7a44a6e2658b6,ruby:>= 2.7.0 1.14.3-aarch64-linux racc:~> 1.4|checksum:9cc53dd8d92868a0f5bcee44396357a19f95e32d8b9754092622a25bc954c60c,ruby:< 3.3.dev&>= 2.7 1.14.3-arm-linux racc:~> 1.4|checksum:320fa1836b8e59e86a804baee534893bcf3b901cc255bbec6d87f3dd3e431610,ruby:< 3.3.dev&>= 2.7 1.14.3-arm64-darwin racc:~> 1.4|checksum:67dd4ac33a8cf0967c521fa57e5a5422db39da8a9d131aaa2cd53deaa12be4cd,ruby:< 3.3.dev&>= 2.7 1.14.3-java racc:~> 1.4|checksum:13969ec7f41d9cff46fc7707224c55490a519feef7cfea727c6945c5b444caa2,ruby:>= 2.7.0 1.14.3-x64-mingw-ucrt racc:~> 1.4|checksum:9885085249303461ee08f9a9b161d0a570391b8f5be0316b3ac5a6d9a947e1e2,ruby:< 3.3.dev&>= 3.1 1.14.3-x64-mingw32 racc:~> 1.4|checksum:997943d7582a23ad6e7a0abe081d0d40d2c1319a6b2749f9b30fd18037f0c38a,ruby:< 3.1.dev&>= 2.7 1.14.3-x86-linux racc:~> 1.4|checksum:58c30b763aebd62dc4222385509d7f83ac398ee520490fadc4b6d7877e29895a,ruby:< 3.3.dev&>= 2.7 1.14.3-x86-mingw32 racc:~> 1.4|checksum:e1d58a5c56c34aab71b00901a969e19bf9f7322ee459b4e9380f433213887c04,ruby:< 3.3.dev&>= 2.7 1.14.3-x86_64-darwin racc:~> 1.4|checksum:f0a1ed1460a91fd2daf558357f4c0ceac6d994899da1bf98431aeda301e4dc74,ruby:< 3.3.dev&>= 2.7 1.14.3-x86_64-linux racc:~> 1.4|checksum:e323a7c654ef846e64582fb6e26f6fed869a96753f8e048ff723e74d8005cb11,ruby:< 3.3.dev&>= 2.7 1.14.3 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:3b1cee0eb8879e9e25b6dd431be597ca68f20283b0d4f4ca986521fad107dc3a,ruby:>= 2.7.0 1.14.4-aarch64-linux racc:~> 1.4|checksum:0fbca96bd832e0b12a2c4419b9a102329630d4e40a125cb85a0cae1585bc295d,ruby:< 3.3.dev&>= 2.7 1.14.4-arm-linux racc:~> 1.4|checksum:fe5b2c44c07b8042421634676c692d2780359c0df5d94daecb11493c028bcdf0,ruby:< 3.3.dev&>= 2.7 1.14.4-arm64-darwin racc:~> 1.4|checksum:44ded02aae759bada0161b7872116305f5e8b5dae924427290efd63e9adc2f3f,ruby:< 3.3.dev&>= 2.7 1.14.4-java racc:~> 1.4|checksum:d915a9b96d333c57d3a1bb72f05435ef311ecb19ae3b1c8c3f2263b67b519dde,ruby:>= 2.7.0 1.14.4-x64-mingw-ucrt racc:~> 1.4|checksum:3ba597a50b6217e19a1bf1e5467022669ebad598951fa53314ed6e0ecbf41438,ruby:< 3.3.dev&>= 3.1 1.14.4-x64-mingw32 racc:~> 1.4|checksum:2270ef8fc1f57fc0fa2391f82d460c0bf34b4d9e4a19a0ac81a2cb9bcffbaf2b,ruby:< 3.1.dev&>= 2.7 1.14.4-x86-linux racc:~> 1.4|checksum:bcccf4720d459be74f08e5b4c9704e67fbab8498cc36c686dcba69111996fb6b,ruby:< 3.3.dev&>= 2.7 1.14.4-x86-mingw32 racc:~> 1.4|checksum:1a574a0a375dff5449af4168e432185ee77d0ad8368b60f6c4a2a699aff5c955,ruby:< 3.3.dev&>= 2.7 1.14.4-x86_64-darwin racc:~> 1.4|checksum:c6400189fec268546d981a072828a44b8d4a1b2a32bee5026243c99af231b602,ruby:< 3.3.dev&>= 2.7 1.14.4-x86_64-linux racc:~> 1.4|checksum:6d0e4e4f079fc03aa8b01cd8493acc1c34f7ae51fc0d58a04b6a0de73f8a53d8,ruby:< 3.3.dev&>= 2.7 1.14.4 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:2bd1af41a980c51b8f073a3414213c8cf1c756a6e42984ad20a4a23f2e87e00d,ruby:>= 2.7.0 1.15.0-aarch64-linux racc:~> 1.4|checksum:7dbb717c6abc6b99baa4a4e1586a6de5332513f72a8b3568a69836268c2e1f86,ruby:< 3.3.dev&>= 2.7 1.15.0-arm-linux racc:~> 1.4|checksum:a60c373d86a9a181f9ace78793c4a91ab8fa971af3cce93e9fdf022cd808fe41,ruby:< 3.3.dev&>= 2.7 1.15.0-arm64-darwin racc:~> 1.4|checksum:41d312b2d4aa6b6750c2431a25c1bf25fb567bc1e0a750cf55dd02354967724b,ruby:< 3.3.dev&>= 2.7 1.15.0-java racc:~> 1.4|checksum:51cc8d4d98473d00c0ee18266d146677161b6dd16f8c89cc637db91d47b87c63,ruby:>= 2.7.0 1.15.0-x64-mingw-ucrt racc:~> 1.4|checksum:1b2d92e240d12ac0a27cb0618f52af6c405831fd339a45aaab265cecda1dc6ab,ruby:< 3.3.dev&>= 3.1 1.15.0-x64-mingw32 racc:~> 1.4|checksum:497840b3ed9037095fbdd1bf6f7c63d23efab5bcbb03b89d94a6ac8bcab3eda5,ruby:< 3.1.dev&>= 2.7 1.15.0-x86-linux racc:~> 1.4|checksum:5c26427f3cf28d8c1e43f7a7bc58e50298461c7bed5179456b122eefc2b2c5cb,ruby:< 3.3.dev&>= 2.7 1.15.0-x86-mingw32 racc:~> 1.4|checksum:cbf93df1c257693dfe804c01252415ca7cb9d2452d6cebddf7a35a5dbeb3ea12,ruby:< 3.3.dev&>= 2.7 1.15.0-x86_64-darwin racc:~> 1.4|checksum:ca6cd6ed08e736063539c4aa7454391dfa4153908342e3d873f5bd9218d6f644,ruby:< 3.3.dev&>= 2.7 1.15.0-x86_64-linux racc:~> 1.4|checksum:4b28e9151e884c10794e0acf4a6f49db933eee3cd90b20aab952ee0102a03b0c,ruby:< 3.3.dev&>= 2.7 1.15.0 mini_portile2:~> 2.8.2,racc:~> 1.4|checksum:0ca8ea2149bdaaae8db39f11971af86c83923ec58b72c519d498ec44e1dfe97f,ruby:>= 2.7.0 1.15.1-aarch64-linux racc:~> 1.4|checksum:a5d622a36d67c5296cf892871501abf0ca168056276d6c52519254cc05e2ed8e,ruby:< 3.3.dev&>= 2.7 1.15.1-arm-linux racc:~> 1.4|checksum:ccc3b40e1f75e683107c78d0c77503df6520c614a0ea145743e929e492459662,ruby:< 3.3.dev&>= 2.7 1.15.1-arm64-darwin racc:~> 1.4|checksum:6d2ea3421f05dbd761017de1a16eae0fd83fbacf344310050796e674598ad711,ruby:< 3.3.dev&>= 2.7 1.15.1-java racc:~> 1.4|checksum:123c0c2f8e4bdb5b4bb42a2048ac3683b11b37d1778b804e4cb71c8fc7422d00,ruby:>= 2.7.0 1.15.1-x64-mingw-ucrt racc:~> 1.4|checksum:bf7e93658c7ec590ccbcbf67793a12fd229c806568fdbbe4c67f03c057f0ffbe,ruby:< 3.3.dev&>= 3.1 1.15.1-x64-mingw32 racc:~> 1.4|checksum:accc1d3815c92fab56b54bc0ec2512b0cd8c7c0c2aeb57f2aafcdd012565600b,ruby:< 3.1.dev&>= 2.7 1.15.1-x86-linux racc:~> 1.4|checksum:6f43de41616d627a2b1262f09c062f475aff0b9ed67df68f4b06eb8209fdb797,ruby:< 3.3.dev&>= 2.7 1.15.1-x86-mingw32 racc:~> 1.4|checksum:b3b3b5c4e9315463496b4af94446a0b5b26c7cf8fbe26fd3ddd35cdcbdd60710,ruby:< 3.3.dev&>= 2.7 1.15.1-x86_64-darwin racc:~> 1.4|checksum:3a2fbb7a1d641f30d06293683d6baf80183de6e0250a807061ed97a4ba4a8e52,ruby:< 3.3.dev&>= 2.7 1.15.1-x86_64-linux racc:~> 1.4|checksum:f7992293b0a85932fed1932cf6074107e81c4e84344efbdbaf8eccc9b891dbaa,ruby:< 3.3.dev&>= 2.7 1.15.1 mini_portile2:~> 2.8.2,racc:~> 1.4|checksum:68d511e3cffde00225fbbf0e7845a906581b598bf6656f9346649b05e6b7f583,ruby:>= 2.7.0 1.14.5-aarch64-linux racc:~> 1.4|checksum:60e521687e7fb81dbaa2c942d48efc22083780bc76d45586dc0a324bf0fb0e97,ruby:< 3.3.dev&>= 2.7 1.14.5-arm-linux racc:~> 1.4|checksum:80ea31d2534b14409e37437934c1c614de9844c806f72fc64134f50e0f3c1131,ruby:< 3.3.dev&>= 2.7 1.14.5-arm64-darwin racc:~> 1.4|checksum:3ab8ff3b62f4ff5826406007befea2d7ac33de2ee0c66209dd72ec16d0e8f5bf,ruby:< 3.3.dev&>= 2.7 1.14.5-java racc:~> 1.4|checksum:edc932157786888c8f83b49c811ac0ec26a5b23f8e3c69590c311cc14b7e6bf0,ruby:>= 2.7.0 1.14.5-x64-mingw-ucrt racc:~> 1.4|checksum:75e476c4e0c91f0f8f00f7c8e697bb3f5c9932f948658cf90babdbebbd6f6c27,ruby:< 3.3.dev&>= 3.1 1.14.5-x64-mingw32 racc:~> 1.4|checksum:73bd6ee2dbabd1a337c6878a8d349a872f04a3448505fbe7c773a1dfbb69e310,ruby:< 3.1.dev&>= 2.7 1.14.5-x86-linux racc:~> 1.4|checksum:a9e4dc50c1cc327bfca3516281eba3fe972fd80bac64c7cdee4bcf07fbfd817d,ruby:< 3.3.dev&>= 2.7 1.14.5-x86-mingw32 racc:~> 1.4|checksum:aea78a61c684f36213d38777a7cd09aa272c5193f11cbaf2b455bcaeebd4196b,ruby:< 3.3.dev&>= 2.7 1.14.5-x86_64-darwin racc:~> 1.4|checksum:7375a81e5fba6a5ada3e47cd02a53ca54d0d25ae73b8ebc6e3a962e46947a7b9,ruby:< 3.3.dev&>= 2.7 1.14.5-x86_64-linux racc:~> 1.4|checksum:0b2150ae90a676a504cbab018d24188eb526bc886ab18b4303102df6b3077160,ruby:< 3.3.dev&>= 2.7 1.14.5 mini_portile2:~> 2.8.0,racc:~> 1.4|checksum:23f69ddeb1e8ead5341bbbbca18d37de29c0265bc90e94bc5d9663b254dfdcbc,ruby:>= 2.7.0 1.15.2-aarch64-linux racc:~> 1.4|checksum:497c698f0cc0f283934c9c93064249d113408e97e5f3677b0b5111af24a67c29,ruby:< 3.3.dev&>= 2.7 1.15.2-arm-linux racc:~> 1.4|checksum:505ad4b80cedd12bc3c53065079cc825e7f3d4094ca7b54176ae6f3734dbe2cc,ruby:< 3.3.dev&>= 2.7 1.15.2-arm64-darwin racc:~> 1.4|checksum:bbedeaf45ce1494f51806e5fab0d31816fc4584f8e2ec757dd516b9b30847ee4,ruby:< 3.3.dev&>= 2.7 1.15.2-java racc:~> 1.4|checksum:b15ba3c1aa5b3726d7aceb44f635250653467c5b0d04248fa0f6a6afc6515fb0,ruby:>= 2.7.0 1.15.2-x64-mingw-ucrt racc:~> 1.4|checksum:bc3cc9631c9dd7a74a59554215474da657f956ccb126391d082a2a8c45d3ee14,ruby:< 3.3.dev&>= 3.1 1.15.2-x64-mingw32 racc:~> 1.4|checksum:1fd27732b161a497275798e502b31e97dfe1ab58aac02c0d6ace9cbe1fd6a38c,ruby:< 3.1.dev&>= 2.7 1.15.2-x86-linux racc:~> 1.4|checksum:931383c6351d79903149b5c6a988e88daada59d7069f3a01b4dcf6730d411cc6,ruby:< 3.3.dev&>= 2.7 1.15.2-x86-mingw32 racc:~> 1.4|checksum:3f4a6350ca1d87d185f4bf509d953820c7191d1cf4213cc3bac9c492b9b4a720,ruby:< 3.3.dev&>= 2.7 1.15.2-x86_64-darwin racc:~> 1.4|checksum:b57eeec09ee1c4010e317f50d2897fb9c1133d02598260db229e81127b337930,ruby:< 3.3.dev&>= 2.7 1.15.2-x86_64-linux racc:~> 1.4|checksum:5bca696b9283ad7ce97b9c0dfdf029a62c26e92f39f440a65795e377d44f119a,ruby:< 3.3.dev&>= 2.7 1.15.2 mini_portile2:~> 2.8.2,racc:~> 1.4|checksum:20dc800b8fbe4c4f4b5b164e6aa3ab82a371bcb27eb685c166961c34dd8a22d7,ruby:>= 2.7.0 1.15.3-aarch64-linux racc:~> 1.4|checksum:70dadf636ae026f475f07c16b12c685544d4f8a764777df629abf1f7af0f2fb5,ruby:< 3.3.dev&>= 2.7 1.15.3-arm-linux racc:~> 1.4|checksum:83871fa3f544dc601e27abbdef87315a77fe1270fe4904986bd3a7df9ca3d56f,ruby:< 3.3.dev&>= 2.7 1.15.3-arm64-darwin racc:~> 1.4|checksum:fa4a027478df9004a2ce91389af7b7b5a4fc790c23492dca43b210a0f8770596,ruby:< 3.3.dev&>= 2.7 1.15.3-java racc:~> 1.4|checksum:95d410f995364d9780c4147d8fca6974447a1ccd3a1e1b092f0408836a36cc9c,ruby:>= 2.7.0 1.15.3-x64-mingw-ucrt racc:~> 1.4|checksum:599a46b6e4f5a34dd21da06bdbd69611728304af5ef42bb183e4b4ca073fd7a3,ruby:< 3.3.dev&>= 3.1 1.15.3-x64-mingw32 racc:~> 1.4|checksum:92ebfb637c9b7ba92a221b49ea3328c7e5ee79a28307d75ef55bfe4b5807face,ruby:< 3.1.dev&>= 2.7 1.15.3-x86-linux racc:~> 1.4|checksum:ee314666eca832fa71b5bb4c090be46a80aded857aa26121b3b51f3ed658a646,ruby:< 3.3.dev&>= 2.7 1.15.3-x86-mingw32 racc:~> 1.4|checksum:44b7f18817894a5b697bab3d757b12bb7857a0218c1b2e0000929456a2178b34,ruby:< 3.3.dev&>= 2.7 1.15.3-x86_64-darwin racc:~> 1.4|checksum:1f0bc0343f9dd1db8dd42e4c9110dd24fc11a7f923b9fa0f866e7f90739e4e7a,ruby:< 3.3.dev&>= 2.7 1.15.3-x86_64-linux racc:~> 1.4|checksum:ca244ed58568d7265088f83c568d2947102fb00bac14b5bc0e63f678dcd6323d,ruby:< 3.3.dev&>= 2.7 1.15.3 mini_portile2:~> 2.8.2,racc:~> 1.4|checksum:876631295a85315dac37e7a71386d62d9eb452a891083cfe7505cca4805088cb,ruby:>= 2.7.0 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/prerelease_specs000066400000000000000000000000571446701454400271430ustar00rootroot00000000000000[[" nexusU:Gem::Version["0.1.0.pre" rubymavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/psych-prerelease-metadata.xml000066400000000000000000000013271446701454400314500ustar00rootroot00000000000000 rubygems psych 1.2.2.rc1-SNAPSHOT 2.0.14.pre1-SNAPSHOT 3.0.0.beta2-SNAPSHOT 3.0.0.beta3-SNAPSHOT 3.0.0.beta4-SNAPSHOT 3.0.3.pre1-SNAPSHOT 3.0.3.pre2-SNAPSHOT 3.0.3.pre3-SNAPSHOT 3.0.3.pre4-SNAPSHOT 3.0.3.pre5-SNAPSHOT 5.0.2.pre1-SNAPSHOT 5.1.0.pre1-SNAPSHOT 2014 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/psych-prerelease.pom000066400000000000000000000050501446701454400276620ustar00rootroot00000000000000 4.0.0 rubygems psych 5.1.0.pre1-SNAPSHOT gem Psych is a YAML parser and emitter https://github.com/ruby/psych Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. MIT http://opensource.org/licenses/MIT MIT license Aaron Patterson aaron@tenderlovemaking.com SHIBATA Hiroshi hsbt@ruby-lang.org Charles Oliver Nutter headius@headius.com https://github.com/ruby/psych.git https://github.com/ruby/psych utf-8 3.0.0 2.0.0 rubygems jar-dependencies [0.1.7,) gem org.snakeyaml snakeyaml-engine 2.6 org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} psych-5.1.0.pre1-java.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/psych-release-metadata.xml000066400000000000000000000036101446701454400307360ustar00rootroot00000000000000 rubygems psych 1.1.0 1.1.1 1.2.0 1.2.1 1.2.2 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.17 2.1.0 2.1.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 3.0.2 3.0.3 3.1.0 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 5.0.0 5.0.1 5.0.2 5.1.0 2014 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/psych-release.pom000066400000000000000000000050371446701454400271600ustar00rootroot00000000000000 4.0.0 rubygems psych 5.1.0.pre1 gem Psych is a YAML parser and emitter https://github.com/ruby/psych Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. MIT http://opensource.org/licenses/MIT MIT license Aaron Patterson aaron@tenderlovemaking.com SHIBATA Hiroshi hsbt@ruby-lang.org Charles Oliver Nutter headius@headius.com https://github.com/ruby/psych.git https://github.com/ruby/psych utf-8 3.0.0 2.0.0 rubygems jar-dependencies [0.1.7,) gem org.snakeyaml snakeyaml-engine 2.6 org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} psych-5.1.0.pre1-java.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rb-fsevent-0.9.4.gemspec.rz000066400000000000000000000007361446701454400304200ustar00rootroot00000000000000xMo@+\mi e^XP$Ը\r6Yr4vm*Zݙw=ogP2!e,ѧO!y¼885T Krز@HC-{|b&^Jؿ/oWerjwmde]zC:DZҥLG_ykv5P1N~hctxB/.\N?C UUď*Z-u ,D#}醃;ƭH/3+xm!ҋj EzwQX[n i>{ [~$M]3b4LМ-$2XcZ 3g :check_dependencies task :default => :test require 'rake/rdoctask' Rake::RDocTask.new do |rdoc| version = File.exist?('VERSION') ? File.read('VERSION') : "" rdoc.rdoc_dir = 'rdoc' rdoc.title = "always_verify_ssl_certificates #{version}" rdoc.rdoc_files.include('README*') rdoc.rdoc_files.include('lib/**/*.rb') end VERSION000066400000000000000000000000061446701454400363750ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/always_verify_ssl_certificates-0.3.00.3.0 always_verify_ssl_certificates.gemspec000066400000000000000000000032701446701454400451720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/always_verify_ssl_certificates-0.3.0# Generated by jeweler # DO NOT EDIT THIS FILE DIRECTLY # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command # -*- encoding: utf-8 -*- Gem::Specification.new do |s| s.name = %q{always_verify_ssl_certificates} s.version = "0.3.0" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["James Golick"] s.date = %q{2011-03-17} s.description = %q{Ruby’s net/http is setup to never verify SSL certificates by default. Most ruby libraries do the same. That means that you’re not verifying the identity of the server you’re communicating with and are therefore exposed to man in the middle attacks. This gem monkey-patches net/http to force certificate verification and make turning it off impossible.} s.email = %q{jamesgolick@gmail.com} s.extra_rdoc_files = [ "LICENSE", "README.rdoc" ] s.files = [ ".document", ".gitignore", "LICENSE", "README.rdoc", "Rakefile", "VERSION", "always_verify_ssl_certificates.gemspec", "lib/always_verify_ssl_certificates.rb", "test/helper.rb", "test/test_always_verify_ssl_certificates.rb" ] s.homepage = %q{http://github.com/jamesgolick/always_verify_ssl_certificates} s.rdoc_options = ["--charset=UTF-8"] s.require_paths = ["lib"] s.rubygems_version = %q{1.5.2} s.summary = %q{Force net/http to always verify SSL certificates.} s.test_files = [ "test/helper.rb", "test/test_always_verify_ssl_certificates.rb" ] if s.respond_to? :specification_version then s.specification_version = 3 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then else end else end end lib/000077500000000000000000000000001446701454400360775ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/always_verify_ssl_certificates-0.3.0always_verify_ssl_certificates.rb000066400000000000000000000026251446701454400447230ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/always_verify_ssl_certificates-0.3.0/librequire 'resolv' require 'resolv-replace' require "net/http" require "net/https" module Net class HTTP private def connect D "opening connection to #{conn_address()}..." s = Timeout.timeout(@open_timeout) { TCPSocket.open(conn_address(), conn_port()) } D "opened" if use_ssl? if self.verify_mode != OpenSSL::SSL::VERIFY_PEER self.verify_mode = OpenSSL::SSL::VERIFY_PEER end s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context) s.sync_close = true end @socket = BufferedIO.new(s) @socket.read_timeout = @read_timeout @socket.debug_output = @debug_output if use_ssl? if proxy? @socket.writeline sprintf('CONNECT %s:%s HTTP/%s', @address, @port, HTTPVersion) @socket.writeline "Host: #{@address}:#{@port}" if proxy_user credential = ["#{proxy_user}:#{proxy_pass}"].pack('m') credential.delete!("\r\n") @socket.writeline "Proxy-Authorization: Basic #{credential}" end @socket.writeline '' HTTPResponse.read_new(@socket).value end s.connect if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE s.post_connection_check(@address) end end on_connect end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/000077500000000000000000000000001446701454400305565ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/.rspec000066400000000000000000000000371446701454400316730ustar00rootroot00000000000000--format documentation --color mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/.travis.yml000066400000000000000000000051121446701454400326660ustar00rootroot00000000000000language: ruby script: rake spec:travis before_script: travis_retry rake spec:travis:deps branches: only: - master - 1-5-stable - 1-3-stable - 1-2-stable - 1-1-stable - 1-0-stable notifications: email: # andre - secure: "bCcvqJT7YrBawtkXXwHhT+jOFth7r2Qv/30PkkbhQxk6Jb3xambjCOJ3U6vJ\ngYmiL50exi5lUp3oc3SEbHN5t2CrZqOZDQ6o7P8EAmB5c0oH2RrYaFOkI5Gt\nul/jGH/96A9sj0aMwG7JfdMSfhqj1DUKAm2PnnbXPL853VfmT24=" # terence - secure: "MQ8eA5Jb8YzEpAo58DRGfVJklAPcEbAulpBZnTxp0am6ldneDtJHbQk21w6R\nj5GsDHlzr/lMp/GHIimtUZ7rLohfND8fj/W7fs1Dkd4eN02/ERt98x3pHlqv\nvZgSnZ39uVYv+OcphraE24QaRaGWLhWZAMYQTVe/Yz50NyG8g1U=" campfire: on_success: change on_failure: always rooms: secure: MNTSGIySYwHia5gIgRiZxXtPMPDIP9KmzQk7Kq2ZoVvP3mIk8W1TMkvcyFkEf6uCasyVZZixzUBfY+E0BlHAz1ycQpTh1jvSpuIpEVYW48ShJldJ+8W8xfzafyOHii3z7VrDaomEffmMDdmHRsbQAfekMjdR4bTpXtT9V+wOXlg= rvm: - 2.0.0 - 1.9.3 # Rubygems versions MUST be available as rake tasks # see Rakefile:66 for the list of possible RGV values env: # We need to know if changes to rubygems will break bundler on release - RGV=master # Test the latest rubygems release with all of our supported rubies - RGV=v2.1.9 # Test the latest stable branch so we know the next minor will work - RGV=2.1 matrix: allow_failures: # We want to know how we're doing with head, but not fail the build - rvm: ruby-head - env: RGV=master # 1.9.2 is simply too slow. it sometimes exceeds the Travis hard limit. - rvm: 1.9.2 # Alternate implementations are good data points but not maintained - rvm: jruby - rvm: rbx include: # Riding the edge - rvm: ruby-head env: RGV=master # Alternate implementations - rvm: jruby env: RGV=v2.1.9 - rvm: rbx env: RGV=v2.1.9 # Rubygems goes down to 2.0 on Ruby 2.0.0 - rvm: 2.0.0 env: RGV=v2.1.9 - rvm: 2.0.0 env: RGV=v2.0.12 # Rubygems goes down to 1.5.3 on Ruby 1.9.3 - rvm: 1.9.3 env: RGV=v2.1.9 - rvm: 1.9.3 env: RGV=v2.0.12 - rvm: 1.9.3 env: RGV=v1.8.28 - rvm: 1.9.3 env: RGV=v1.7.2 - rvm: 1.9.3 env: RGV=v1.6.2 - rvm: 1.9.3 env: RGV=v1.5.3 # We only want an overview of how 1.9.2 is doing - rvm: 1.9.2 env: RGV=v2.1.9 # Rubygems goes down to 1.3.6 on Ruby 1.8.7 - rvm: 1.8.7 env: RGV=v1.8.28 - rvm: 1.8.7 env: RGV=v1.7.2 - rvm: 1.8.7 env: RGV=v1.6.2 - rvm: 1.8.7 env: RGV=v1.5.3 - rvm: 1.8.7 env: RGV=v1.4.2 - rvm: 1.8.7 env: RGV=v1.3.7 - rvm: 1.8.7 env: RGV=v1.3.6 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/CHANGELOG.md000066400000000000000000001461121446701454400323740ustar00rootroot00000000000000## 1.5.2 (2014-01-10) Bugfixes: - fix integration with Rubygems 1.8.0-1.8.19 - handle ENETDOWN exception during network requests - gracefully shut down after interrupt during parallel install (@Who828) - allow Rails to run Thor without debug mode (@rafaelfranca) - set git binstub permissions by umask (@v-yarotsky) - remove parallel install debug log ## 1.5.1 (2013-12-28) Bugfixes: - correctly find gems installed with Ruby by default ## 1.5.0 (2013-12-26) Features: - install missing gems if their specs are present (@hone) Bugfixes: - use print for "Installing…" so messages are thread-safe (@TimMoore) ## 1.5.0.rc.2 (2013-12-18) "Features": - Support threaded installation on Rubygems 2.0.7+ - Debug installation logs in .bundle/install.log "Bugfixes": - Try to catch gem installation race conditions ## 1.5.0.rc.1 (2013-11-09) Features: - bundle update also accepts --jobs (#2692, @mrkn) - add fork URL to README for new `bundle gem` (#2665, @zzak) - add `bundle outdated --strict` (#2685, @rhysd) - warn if same gem/version is added twice (#2679, @jendiamond) - don't redownload installed specs for `bundle install` (#2680, @cainlevy) - override gem sources with mirrors (#2650, @danielsdeleo, @mkristian) Bugfixes: - fix sharing same SSL socket when forking workers for parallel install (#2632) - fix msg typo in GitNotAllowedError (#2654, @joyicecloud) - fix Bundler.which for directories (#2697, @rhysd) - properly require `Capistrano::Version` (#2690, @steveklabnik) - search for git.exe and git - fix the bug that downloads every spec when API fetcher encouters an error - only retry network requests ## 1.4.0.rc.1 (2013-09-29) Features: - add support for the x64-mingw32 platform (#2356, #2590, @larskanis) - add :patchlevel option to ruby DSL - add `bundler` bin (#2598, @kirs) - friendly ambiguous error messages (#2581, #2550, @jlsuttles, @jendiamond, @joyicecloud) - add `:jruby_18` and `:jruby_19` platform options (@mcfiredrill) - add X.509 client certificates for auth without passwords (@snackbandit) - add `exec --keep-file-descriptors` for Ruby 1.9-like behavior on 2.0 (@steved555) - print a better error when git is not installed (@joyicecloud) - exit non-zero when `outdated` is run with an unknown gem (@joyicecloud) - add `:ruby_21` platform option (@brandonblack) - add `--retry` to retry failed network and git commands (@schneems) - include command and versions in User-Agent (@indirect, @joyicecloud) Bugfixes: - allow passwordless Basic Auth (#2606, @rykov) - don't suggest `gem install foo` when `foo` is a git gem that fails (@kirs) - revert #2569, staying compatible with git: instead of https: for :github gems - handle exceptions while installing gems in parallel (@gnufied) ## 1.4.0.pre.1 (2013-08-04) Features: - retry network requests while installing gems (#2561, @ascherger) - faster installs using gemspecs from the local system cache (#2497, @mipearson) - add `bundle install -jN` for N parallel gem installations (#2481, @eagletmt) - add `ENV['DEBUG_RESOLVER_TREE']` outputs resolver tree (@dblock) - set $MANPATH so `bundle exec man name` works (#1624, @sunaku) - use `man` instead of `groff` (#2579, @ixti, @simi) - add Gemfile dependency info to bundle outdated output (#2487, @rahearn) - allow `require: true` as an alias for `require: ` (#2538, @ndbroadbent) - rescue and report Thor errors (#2478, @pjvds) - detect cyclic dependencies (#2564, @gnufied) - support multiple gems in `binstubs` (#2576, @lucasmazza) - use https instead of git for :github gems (#2569, @fuadsaud) - add quiet option to `bundle package` (#2573, @shtirlic) - use RUBYLIB instead of RUBYOPT for better Windows support (#2536, @equinux) Bugfixes: - reduce stack size while resolving to fix JRuby overflow (#2510, @headius) - display GitErrors while loading specs in --verbose mode (#2461) - allow the same options hash to be passed to multiple gems (#2447) - handle missing binaries without an exception (#2019, @luismreis) ## 1.3.6 (8 January 2014) Bugfixes: - make gemspec path option preserve relative paths in lock file (@bwillis) - use umask when creating binstubs (#1618, @v-yarotsky) - warn if graphviz is not installed (#2435, @Agis-) - show git errors while loading gemspecs - don't mutate gem method options hash (#2447) - print Thor errors (#2478, @pjvds) - print Rubygems system exit errors (James Cook) - more Pathnames into Strings for MacRuby (@kml) - preserve original gemspec path (@bwillis) - remove warning about deps with :git (#1651, @ixti) - split git files on null (#2634, @jasonmp85) - handle cross-host redirects without SSL (#2686, @grddev) - handle Rubygems 2 security exception (@zzak) - reinstall gems if they are missing with spec present - set binstub permissions using umask (#1618, @v-yarotsky) ## 1.3.5 (3 April 2013) Features: - progress indicator while resolver is running (@chief) Bugfixes: - update local overrides with orphaned revisions (@jamesferguson) - revert to working quoting of RUBYOPT on Windows (@ogra) - use basic auth even when SSL is not available (@jayniz) - installing git gems without dependencies in deployment now works ## 1.3.4 (15 March 2013) Bugfixes: - load YAML on Rubygems versions that define module YAML - fix regression that broke --without on ruby 1.8.7 ## 1.3.3 (13 March 2013) Features: - compatible with Rubygems 2.0.2 (higher and lower already work) - mention skipped groups in bundle install and bundle update output (@simi) - `gem` creates rake tasks for minitest (@coop) and rspec Bugfixes: - require rbconfig for standalone mode ## 1.3.2 (7 March 2013) Features: - include rubygems.org CA chain Bugfixes: - don't store --dry-run as a Bundler setting ## 1.3.1 (3 March 2013) Bugfixes: - include manpages in gem, restoring many help pages - handle more SSL certificate verification failures - check for the full version of SSL, which we need (@alup) - gem rake task 'install' now depends on task 'build' (@sunaku) ## 1.3.0 (24 February 2013) Features: - raise a useful error when the lockfile contains a merge conflict (@zofrex) - ensure `rake release` checks for uncommitted as well as unstaged (@benmoss) - allow environment variables to be negated with 'false' and '0' (@brettporter) - set $MANPATH inside `exec` for gems with man pages (@sunaku) - partial gem names for `open` and `update` now return a list (@takkanm) Bugfixes: - `update` now (again) finds gems that aren't listed in the Gemfile - `install` now (again) updates cached gems that aren't in the Gemfile - install Gemfiles with HTTP sources even without OpenSSL present - display CerficateFailureError message in full ## 1.3.0.pre.8 (12 February 2013) Security: - validate SSL certificate chain during HTTPS network requests - don't send HTTP Basic Auth creds when redirected to other hosts (@perplexes) - add `--trust-policy` to `install`, like `gem install -P` (@CosmicCat, #2293) Features: - optimize resolver when too new of a gem is already activated (@rykov, #2248) - update Net::HTTP::Persistent for SSL cert validation and no_proxy ENV - explain SSL cert validation failures - generate gemspecs when installing git repos, removing shellouts - add pager selection (@csgui) - add `licenses` command (@bryanwoods, #1898) - sort output from `outdated` (@richardkmichael, #1896) - add a .travis.yml to `gem -t` (@ndbroadbent, #2143) - inform users when the resolver starts - disable reverse DNS to speed up API requests (@raggi) Bugfixes: - raise errors while requiring dashed gems (#1807) - quote the Bundler path on Windows (@jgeiger, #1862, #1856) - load gemspecs containing unicode (@gaffneyc, #2301) - support any ruby version in --standalone - resolve some ruby -w warnings (@chastell, #2193) - don't scare users with an error message during API fallback - `install --binstubs` is back to overwriting. thanks, SemVer. ## 1.3.0.pre.7 (22 January 2013) Bugfixes: - stubs for gems with dev deps no longer cause exceptions (#2272) - don't suggest binstubs to --binstubs users ## 1.3.0.pre.6 (22 January 2013) Features: - `binstubs` lists child gem bins if a gem has no binstubs - `bundle gem --edit` will open the new gemspec (@ndbroadbent) - `bundle gem --test rspec` now makes working tests (@tricknotes) - `bundle env` prints info about bundler's environment (@peeja) - add `BUNDLE_IGNORE_CONFIG` environment variable support (@richo) Bugfixes: - don't overwrite custom binstubs during `install --binstubs` - don't throw an exception if `binstubs` gem doesn't exist - `bundle config` now works in directories without a Gemfile ## 1.3.0.pre.5 (Jan 9, 2013) Features: - make `--standalone` require lines ruby engine/version agnostic - add `--dry-run` to `bundle clean` (@wfarr, #2237) Bugfixes: - don't skip writing binstubs when doing `bundle install` - distinguish between ruby 1.9/2.0 when using :platforms (@spastorino) ## 1.3.0.pre.4 (Jan 3, 2013) Features: - `bundle binstubs ` to setup individual binstubs - `bundle install --binstubs ""` will remove binstubs option - `bundle clean --dry-run` will print out gems instead of removing them Bugfixes: - Avoid stack traces when Ctrl+C during bundle command (@mitchellh) - fix YAML parsing in in ruby-preview2 ## 1.3.0.pre.3 (Dec 21, 2012) Features: - pushing gems during `rake release` can be disabled (@trans) - installing gems with `rake install` is much faster (@utkarshkukreti) - added platforms :ruby_20 and :mri_20, since the ABI has changed - added '--edit' option to open generated gemspec in editor Bugfixes: - :git gems with extensions now work with Rubygems >= 2.0 (@jeremy) - revert SemVer breaking change to :github - `outdated` exits non-zero if outdated gems found (@rohit, #2021) - https Gist URLs for compatibility with Gist 2.0 (@NARKOZ) - namespaced gems no longer generate a superfluous directory (@banyan) ## 1.3.0.pre.2 (Dec 9, 2012) Features: - `config` expands local overrides like `local.rack .` (@gkop, #2205) - `gem` generates files correctly for names like `jquery-rails` (@banyan, #2201) - use gems from gists with the :gist option in the Gemfile (@jgaskins) Bugfixes: - Gemfile sources other than rubygems.org work even when .gemrc contains sources - caching git gems now caches specs, fixing e.g. git ls-files (@bison, #2039) - `show GEM` now warns if the directory has been deleted (@rohit, #2070) - git output hidden when running in --quiet mode (@rohit) ## 1.3.0.pre (Nov 29, 2012) Features: - compatibile with Ruby 2.0.0-preview2 - compatibile with Rubygems 2.0.0.preview2 (@drbrain, @evanphx) - ruby 2.0 added to the `:ruby19` ABI-compatible platform - lazy load YAML, allowing Psych to be specified in the Gemfile - significant performance improvements (@cheald, #2181) - `inject` command for scripted Gemfile additions (Engine Yard) - :github option uses slashless arguements as repo owner (@rking) - `open` suggests gem names for typos (@jdelStrother) - `update` reports non-existent gems (@jdelStrother) - `gem` option --test can generate rspec stubs (@MafcoCinco) - `gem` option --test can generate minitest stubs (@kcurtin) - `gem` command generates MIT license (@BrentWheeldon) - gem rake task 'release' resuses existing tags (@shtirlic) Bugfixes: - JRuby new works with HTTPS gem sources (@davidcelis) - `install` installs both rake rake-built gems at once (@crowbot, #2107) - handle Errno::ETIMEDOUT errors (@jmoses) - handle Errno::EAGAIN errors on JRuby - disable ANSI coloring when output is redirected (@tomykaira) - raise LoadErrors correctly during Bundler.require (@Empact) - do not swallow --verbose on `bundle exec` (@sol, #2102) - `gem` generates gemspecs that block double-requires - `gem` generates gemspecs that admit they depend on rake ## 1.2.5 (Feb 24, 2013) Bugfixes: - install Gemfiles with HTTP sources even without OpenSSL present - display CerficateFailureError message in full ## 1.2.4 (Feb 12, 2013) Features: - warn about Ruby 2.0 and Rubygems 2.0 - inform users when the resolver starts - disable reverse DNS to speed up API requests (@raggi) Bugfixes: - don't send user/pass when redirected to another host (@perplexes) - load gemspecs containing unicode (@gaffneyc, #2301) - support any ruby version in --standalone - resolve some ruby -w warnings (@chastell, #2193) - don't scare users with an error message during API fallback ## 1.2.3 (Nov 29, 2012) Bugfixes: - fix exceptions while loading some gemspecs ## 1.2.2 (Nov 14, 2012) Bugfixes: - support new Psych::SyntaxError for Ruby 2.0.0 (@tenderlove, @sol) - `bundle viz` works with git gems again (@hirochachacha) - recognize more cases when OpenSSL is not present ## 1.2.1 (Sep 19, 2012) Bugfixes: - `bundle clean` now works with BUNDLE_WITHOUT groups again - have a net/http read timeout around the Gemcutter API Endpoint ## 1.2.0 (Aug 30, 2012) Bugfixes: - raise original error message from LoadError's Documentation: - `platform` man pages ## 1.2.0.rc.2 (Aug 8, 2012) Bugfixes: - `clean` doesn't remove gems that are included in the lockfile ## 1.2.0.rc (Jul 17, 2012) Features: - `check` now has a `--dry-run` option (@svenfuchs, #1811) - loosen ruby directive for engines - prune git/path directories inside vendor/cache (@josevalim, #1988) - update vendored thor to 0.15.2 (@sferik) - add .txt to LICENSE (@postmodern, #2001) - add `config disable_local_branch_check` (@josevalim, #1985) - fall back on the full index when experiencing syck errors (#1419) - handle syntax errors in Ruby gemspecs (#1974) Bugfixes: - fix `pack`/`cache` with `--all` (@josevalim, #1989) - don't display warning message when `cache_all` is set - check for `nil` PATH (#2006) - Always try to keep original GEM_PATH (@drogus, #1920) ## 1.2.0.pre.1 (May 27, 2012) Features: - Git gems import submodules of submodules recursively (@nwwatson, #1935) Bugfixes: - Exit from `check` with a non-zero status when frozen with no lock - Use `latest_release` in Capistrano and Vlad integration (#1264) - Work around a Ruby 1.9.3p194 bug in Psych when config files are empty Documentation: - Add instructions for local git repos to the `config` manpage - Update the `Gemfile` manpage to include ruby versions (@stevenh512) - When OpenSSL is missing, provide instructions for fixing (#1776 etc.) - Unknown exceptions now link to ISSUES for help instead of a new ticket - Correct inline help for `clean --force` (@dougbarth, #1911) ## 1.2.0.pre (May 4, 2012) Features: - bundle package now accepts --all to package git and path dependencies - bundle config now accepts --local, --global and --delete options - It is possible to override a git repository via configuration. For instance, if you have a git dependency on rack, you can force it to use a local repo with `bundle config local.rack ~/path/to/rack` - Cache gemspec loads for performance (@dekellum, #1635) - add --full-index flag to `bundle update` (@fluxx, #1829) - add --quiet flag to `bundle update` (@nashby, #1654) - Add Bundler::GemHelper.gemspec (@knu, #1637) - Graceful handling of Gemfile syntax errors (@koraktor, #1661) - `bundle platform` command - add ruby to DSL, to specify version of ruby - error out if the ruby version doesn't match Performance: - bundle exec shouldn't run Bundler.setup just setting the right rubyopts options is enough (@spastorino, #1598) Bugfixes: - Avoid passing RUBYOPT changes in with_clean_env block (@eric1234, #1604) - Use the same ruby to run subprocesses as is running rake (@brixen) Documentation: - Add :github documentation in DSL (@zofrex, #1848, #1851, #1852) - Add docs for the --no-cache option (@fluxx, #1796) - Add basic documentation for bin_path and bundle_path (@radar) - Add documentation for the run method in Bundler::Installer ## 1.1.5 (Jul 17, 2012) Features: - Special case `ruby` directive from 1.2.0, so you can install Gemfiles that use it ## 1.1.4 (May 27, 2012) Bugfixes: - Use `latest_release` in Capistrano and Vlad integration (#1264) - Unknown exceptions now link to ISSUES for help instead of a new ticket - When OpenSSL is missing, provide instructions for fixing (#1776 etc.) - Correct inline help for `clean --force` (@dougbarth, #1911) - Work around a Ruby 1.9.3p194 bug in Psych when config files are empty ## 1.1.3 (March 23, 2012) Bugfixes: - escape the bundler root path (@tenderlove, #1789) ## 1.1.2 (March 20, 2012) Bugfixes: - Fix --deployment for multiple PATH sections of the same source (#1782) ## 1.1.1 (March 14, 2012) Bugfixes: - Rescue EAGAIN so the fetcher works on JRuby on Windows - Stop asking users to report gem installation errors - Clarify "no sources" message - Use $\ so `bundle gem` gemspecs work on Windows (@postmodern) - URI-encode gem names for dependency API (@rohit, #1672) - Fix `cache` edge case in rubygems 1.3.7 (#1202) Performance: - Reduce invocation of git ls-files in `bundle gem` gemspecs (@knu) ## 1.1.0 (Mar 7, 2012) Bugfixes: - Clean up corrupted lockfiles on bundle installs - Prevent duplicate GIT sources - Fix post_install_message when uing the endpoint API ## 1.1.rc.8 (Mar 3, 2012) Performance: - don't resolve if the Gemfile.lock and Gemfile haven't changed Bugfixes: - Load gemspecs from git even when a released gem has the same version (#1609) - Declare an accurate Ruby version requirement of 1.8.7 or newer (#1619) - handle gemspec development dependencies correctly (@raggi, #1639) - Avoid passing RUBYOPT changes in with_clean_env block. (eric1234, #1604) ## 1.1.rc.7 (Dec 29, 2011) Bugfixes: - Fix bug where `clean` would break when using :path with no gemspec ## 1.1.rc.6 (Dec 22, 2011) Bugfixes: - Fix performance regression from 1.0 (@spastorino, #1511, #1591, #1592) - Load gems correctly when GEM_HOME is blank - Refresh gems so Bundler works from inside a bundle - Handle empty .bundle/config files without an error ## 1.1.rc.5 (Dec 14, 2011) Bugfixes: - Fix ASCII encoding errors with gem (rerelease with ruby 1.8) ## 1.1.rc.4 (Dec 14, 2011) Features: - `bundle viz` has the option to output a DOT file instead of a PNG (@hirochachacha, #683) Bugfixes: - Ensure binstubs generated when using --standalone point to the standalonde bundle (@cowboyd, #1588) - fix `bundle viz` (@hirochachacha, #1586) ## 1.1.rc.3 (Dec 8, 2011) Bugfixes: - fix relative_path so it checks Bundler.root is actually in the beginning of the path (#1582) - fix bundle outdated doesn't list all gems (@joelmoss, #1521) ## 1.1.rc.2 (Dec 6, 2011) Features: - Added README.md to `newgem` (@ognevsky, #1574) - Added LICENSE (MIT) to newgem (@ognevsky, #1571) Bugfixes: - only auto-namespace requires for implied requires (#1531) - fix bundle clean output for git repos (#1473) - use Gem.bindir for bundle clean (#1544, #1532) - use `Gem.load_env_plugins` instead of `Gem.load_env_plugins` (#1500, #1543) - differentiate Ruby 2.0 (trunk) from Ruby 1.9 (@tenderlove, #1539) - `bundle clean` handles 7 length git hash for bundle clean (#1490, #1491) - fix Psych loading issues - Search $PATH for a binary rather than shelling out to `which` (@tenderlove, #1573) - do not clear RG cache unless we actually modify GEM_PATH and GEM_HOME- use `Gem.load_env_plugins` instead of `Gem.load_env_plugins` (#1500, #1543) - `newgem` now uses https://rubygems.org (#1562) - `bundle init` now uses https://rubygems.org (@jjb, #1522) - `bundle install/update` does not autoclean when using --path for semver Documentation: - added documentation for --shebang option for `bundle install` (@lunks, #1475, #1558) ## 1.1.rc (Oct 3, 2011) Features: - add `--shebang` option to bundle install (@bensie, #1467) - build passes on ruby 1.9.3rc1 (#1458, #1469) - hide basic auth credentials for custom sources (#1440, #1463) Bugfixes: - fix index search result caching (#1446, #1466) - fix fetcher prints multiple times during install (#1445, #1462) - don't mention API errors from non-rubygems.org sources - fix autoclean so it doesn't remove bins that are used (#1459, #1460) Documentation: - add :require => [...] to the gemfile(5) manpage (@nono, #1468) ## 1.1.pre.10 (Sep 27, 2011) Features: - `config system_bindir foo` added, works like "-n foo" in your .gemrc file ## 1.1.pre.9 (Sep 18, 2011) Features: - `clean` will now clean up all old .gem and .gemspec files, cleaning up older pres - `clean` will be automatically run after bundle install and update when using `--path` (#1420, #1425) - `clean` now takes a `--force` option (#1247, #1426) - `clean` will clean up cached git dirs in bundle clean (#1390) - remove deprecations from DSL (#1119) - autorequire tries directories for gems with dashed names (#1205) - adds a `--paths` flag to `bundle show` to list all the paths of bundled gems (@tiegz, #1360) - load rubygems plugins in the bundle binary (@tpope, #1364) - make `--standalone` respect `--path` (@cowboyd, #1361) Bugfixes: - Fix `clean` to handle nested gems in a git repo (#1329) - Fix conflict from revert of benchmark tool (@boffbowsh, #1355) - Fix fatal error when unable to connect to gem source (#1269) - Fix `outdated` to find pre-release gems that are installed. (#1359) - Fix color for ui. (#1374) - Fix installing to user-owned system gems on OS X - Fix caching issue in the resolver (#1353, #1421) - Fix :github DSL option ## 1.1.pre.8 (Aug 13, 2011) Bugfixes: - Fix `bundle check` to not print fatal error message (@cldwalker, #1347) - Fix require_sudo when Gem.bindir isn't writeable (#1352) - Fix not asking Gemcutter API for dependency chain of git gems in --deployment (#1254) - Fix `install --binstubs` when using --path (#1332) ## 1.1.pre.7 (Aug 8, 2011) Bugfixes: - Fixed invalid byte sequence error while installing gem on Ruby 1.9 (#1341) - Fixed exception when sudo was needed to install gems (@spastorino) ## 1.1.pre.6 (Aug 8, 2011) Bugfixes: - Fix cross repository dependencies (#1138) - Fix git dependency fetching from API endpoint (#1254) - Fixes for bundle outdated (@joelmoss, #1238) - Fix bundle standalone when using the endpoint (#1240) Features: - Implement `to_ary` to avoid calls to method_missing (@tenderlove, #1274) - bundle clean removes old .gem files (@cldwalker, #1293) - Correcly identify missing child dependency in error message - Run pre-install, post-build, and post-install gem hooks for git gems (@warhammerkid, #1120) - create Gemfile.lock for empty Gemfile (#1218) ## 1.1.pre.5 (June 11, 2011) Bugfixes: - Fix LazySpecification on Ruby 1.9 (@dpiddy, #1232) - Fix HTTP proxy support (@leobessa, #878) Features: - Speed up `install --deployment` by using the API endpoint - Support Basic HTTP Auth for the API endpoint (@dpiddy, #1229) - Add `install --full-index` to disable the API endpoint, just in case - Significantly speed up install by removing unneeded gemspec fetches - `outdated` command shows outdated gems (@joelmoss, #1130) - Print gem post install messages (@csquared, #1155) - Reduce memory use by removing Specification.new inside method_missing (@tenderlove, #1222) - Allow `check --path` ## 1.1.pre.4 (May 5, 2011) Bugfixes: - Fix bug that could prevent installing new gems ## 1.1.pre.3 (May 4, 2011) Features: - Add `bundle outdated` to show outdated gems (@joelmoss) - Remove BUNDLE_* from `Bundler.with_clean_env` (@wuputah) - Add Bundler.clean_system, and clean_exec (@wuputah) - Use git config for gem author name and email (@krekoten) Bugfixes: - Fix error calling Bundler.rubygems.gem_path - Fix error when Gem.path returns Gem::FS instead of String ## 1.1.pre.2 (April 28, 2011) Features: - Add :github option to Gemfile DSL for easy git repos - Merge all fixes from 1.0.12 and 1.0.13 ## 1.1.pre.1 (February 2, 2011) Bugfixes: - Compatibility with changes made by Rubygems 1.5 ## 1.1.pre (January 21, 2011) Features: - Add bundle clean. Removes unused gems from --path directory - Initial Gemcutter Endpoint API work, BAI Fetching source index - Added bundle install --standalone - Ignore Gemfile.lock when buliding new gems - Make it possible to override a .gemspec dependency's source in the Gemfile Removed: - Removed bundle lock - Removed bundle install - Removed bundle install --production - Removed bundle install --disable-shared-gems ## 1.0.21 (September 30, 2011) - No changes from RC ## 1.0.21.rc (September 29, 2011) Bugfixes: - Load Psych unless Syck is defined, because 1.9.2 defines YAML ## 1.0.20 (September 27, 2011) Features: - Add platform :maglev (@timfel, #1444) Bugfixes: - Ensure YAML is required even if Psych is found - Handle directory names that contain invalid regex characters ## 1.0.20.rc (September 18, 2011) Features: - Rescue interrupts to `bundle` while loading bundler.rb (#1395) - Allow clearing without groups by passing `--without ''` (#1259) Bugfixes: - Manually sort requirements in the lockfile (#1375) - Remove several warnings generated by ruby -w (@stephencelis) - Handle trailing slashes on names passed to `gem` (#1372) - Name modules for gems like 'test-foo_bar' correctly (#1303) - Don't require Psych if Syck is already loaded (#1239) ## 1.0.19.rc (September 13, 2011) Features: - Compatability with Rubygems 1.8.10 installer changes - Report gem installation failures clearly (@rwilcox, #1380) - Useful error for cap and vlad on first deploy (@nexmat, @kirs) Bugfixes: - `exec` now works when the command contains 'exec' - Only touch lock after changes on Windows (@robertwahler, #1358) - Keep load paths when #setup is called multiple times (@radsaq, #1379) ## 1.0.18 (August 16, 2011) Bugfixes: - Fix typo in DEBUG_RESOLVER (@geemus) - Fixes rake 0.9.x warning (@mtylty, #1333) - Fix `bundle cache` again for rubygems 1.3.x Features: - Run the bundle install earlier in a Capistrano deployment (@cgriego, #1300) - Support hidden gemspec (@trans, @cldwalker, #827) - Make fetch_specs faster (@zeha, #1294) - Allow overriding development deps loaded by #gemspec (@lgierth, #1245) ## 1.0.17 (August 8, 2011) Bugfixes: - Fix rake issues with rubygems 1.3.x (#1342) - Fixed invalid byte sequence error while installing gem on Ruby 1.9 (#1341) ## 1.0.16 (August 8, 2011) Features: - Performance fix for MRI 1.9 (@efficientcloud, #1288) - Shortcuts (like `bundle i`) for all commands (@amatsuda) - Correcly identify missing child dependency in error message Bugfixes: - Allow Windows network share paths with forward slashes (@mtscout6, #1253) - Check for rubygems.org credentials so `rake release` doesn't hang (#980) - Find cached prerelease gems on rubygems 1.3.x (@dburt, #1202) - Fix `bundle install --without` on kiji (@tmm1, #1287) - Get rid of warning in ruby 1.9.3 (@smartinez87, #1231) Documentation: - Documentation for `gem ..., :require => false` (@kmayer, #1292) - Gems provide "executables", they are rarely also binaries (@fxn, #1242) ## 1.0.15 (June 9, 2011) Features: - Improved Rubygems integration, removed many deprecation notices Bugfixes: - Escape URL arguments to git correctly on Windows (1.0.14 regression) ## 1.0.14 (May 27, 2011) Features: - Rubinius platform :rbx (@rkbodenner) - Include gem rake tasks with "require 'bundler/gem_tasks" (@indirect) - Include user name and email from git config in new gemspec (@ognevsky) Bugfixes: - Set file permissions after checking out git repos (@tissak) - Remove deprecated call to Gem::SourceIndex#all_gems (@mpj) - Require the version file in new gemspecs (@rubiii) - Allow relative paths from the Gemfile in gems with no gemspec (@mbirk) - Install gems that contain 'bundler', e.g. guard-bundler (@hone) - Display installed path correctly on Windows (@tadman) - Escape quotes in git URIs (@mheffner) - Improve Rake 0.9 support (@quix) - Handle certain directories already existing (@raggi) - Escape filenames containing regex characters (@indirect) ## 1.0.13 (May 4, 2011) Features: - Compatibility with Rubygems master (soon to be v1.8) (@evanphx) - Informative error when --path points to a broken symlink - Support Rake 0.9 and greater (@e2) - Output full errors for non-TTYs e.g. pow (@josh) Bugfixes: - Allow spaces in gem path names for gem tasks (@rslifka) - Have cap run bundle install from release_path (@martinjagusch) - Quote git refspec so zsh doesn't expand it (@goneflyin) ## 1.0.12 (April 8, 2011) Features: - Add --no-deployment option to `install` for disabling it on dev machines - Better error message when git fails and cache is present (@parndt) - Honor :bundle_cmd in cap `rake` command (@voidlock, @cgriego) Bugfixes: - Compatibility with Rubygems 1.7 and Rails 2.3 and vendored gems (@evanphx) - Fix changing gem order in lock (@gucki) - Remove color escape sequences when displaying man pages (@bgreenlee) - Fix creating GEM_HOME on both JRuby 1.5 and 1.6 (@nickseiger) - Fix gems without a gemspec and directories in bin/ (@epall) - Fix --no-prune option for `bundle install` (@cmeiklejohn) ## 1.0.11 (April 1, 2011) Features: - Compatibility with Rubygems 1.6 and 1.7 - Better error messages when a git command fails Bugfixes: - Don't always update gemspec gems (@carllerche) - Remove ivar warnings (@jackdempsey) - Fix occasional git failures in zsh (@jonah-carbonfive) - Consistent lock for gems with double deps like Cap (@akahn) ## 1.0.10 (February 1, 2011) Bugfixes: - Fix a regression loading YAML gemspecs from :git and :path gems - Requires, namespaces, etc. to work with changes in Rubygems 1.5 ## 1.0.9 (January 19, 2011) Bugfixes: - Fix a bug where Bundler.require could remove gems from the load path. In Rails apps with a default application.rb, this removed all gems in groups other than :default and Rails.env ## 1.0.8 (January 18, 2011) Features: - Allow overriding gemspec() deps with :git deps - Add --local option to `bundle update` - Ignore Gemfile.lock in newly generated gems - Use `less` as help pager instead of `more` - Run `bundle exec rake` instead of `rake` in Capistrano tasks Bugfixes: - Fix --no-cache option for `bundle install` - Allow Vlad deploys to work without Capistrano gem installed - Fix group arguments to `bundle console` - Allow groups to be loaded even if other groups were loaded - Evaluate gemspec() gemspecs in their directory not the cwd - Count on Rake to chdir to the right place in GemHelper - Change Pathnames to Strings for MacRuby - Check git process exit status correctly - Fix some warnings in 1.9.3-trunk (thanks tenderlove) ## 1.0.7 (November 17, 2010) Bugfixes: - Remove Bundler version from the lockfile because it broke backwards compatibility with 1.0.0-1.0.5. Sorry. :( ## 1.0.6 (November 16, 2010) Bugfixes: - Fix regression in `update` that caused long/wrong results - Allow git gems on other platforms while installing (#579) Features: - Speed up `install` command using various optimizations - Significantly increase performance of resolver - Use upcoming Rubygems performance improvements (@tmm1) - Warn if the lockfile was generated by a newer version - Set generated gems' homepage to "", so Rubygems will warn ## 1.0.5 (November 13, 2010) Bugfixes: - Fix regression disabling all operations that employ sudo ## 1.0.4 (November 12, 2010) Bugfixes: - Expand relative :paths from Bundler.root (eg ./foogem) - Allow git gems in --without groups while --frozen - Allow gem :ref to be a symbol as well as a string - Fix exception when Gemfile needs a newer Bundler version - Explanation when the current Bundler version conflicts - Explicit error message if Gemfile needs newer Bundler - Ignore an empty string BUNDLE_GEMFILE - Skeleton gemspec now works with older versions of git - Fix shell quoting and ref fetching in GemHelper - Disable colored output in --deployment - Preserve line endings in lock file Features: - Add support for 'mingw32' platform (aka RubyInstaller) - Large speed increase when Gemfile.lock is already present - Huge speed increase when many (100+) system gems are present - Significant expansion of ISSUES, man pages, and docs site - Remove Open3 from GemHelper (now it works on Windows™®©) - Allow setting roles in built-in cap and vlad tasks ## 1.0.3 (October 15, 2010) Bugfixes: - Use bitwise or in #hash to reduce the chance of overflow - `bundle update` now works with :git + :tag updates - Record relative :path options in the Gemfile.lock - :groups option on gem method in Gemfile now works - Add #platform method and :platform option to Gemfile DSL - --without now accepts a quoted, space-separated list - Installing after --deployment with no lock is now possible - Binstubs can now be symlinked - Print warning if cache for --local install is missing gems - Improve output when installing to a path - The tests all pass! Yay! ## 1.0.2 (October 2, 2010) Bugfix: - Actually include the man pages in the gem, so help works ## 1.0.1 (October 1, 2010) Features: - Vlad deployment recipe, `require 'bundler/vlad'` - Prettier bundle graphs - Improved gem skeleton for `bundle gem` - Prompt on file clashes when generating a gem - Option to generate binary with gem skeleton - Allow subclassing of GemHelper for custom tasks - Chdir to gem directory during `bundle open` Bugfixes: - Allow gemspec requirements with a list of versions - Accept lockfiles with windows line endings - Respect BUNDLE_WITHOUT env var - Allow `gem "foo", :platform => :jruby` - Specify loaded_from path in fake gemspec - Flesh out gem_helper tasks, raise errors correctly - Respect RBConfig::CONFIG['ruby_install_name'] in binstubs ## 1.0.0 (August 29, 2010) Features: - You can now define `:bundle_cmd` in the capistrano task Bugfixes: - Various bugfixes to the built-in rake helpers - Fix a bug where shortrefs weren't unique enough and were therfore colliding - Fix a small bug involving checking whether a local git clone is up to date - Correctly handle explicit '=' dependencies with gems pinned to a git source - Fix an issue with Windows-generated lockfiles by reading and writing the lockfile in binary mode - Fix an issue with shelling out to git in Windows by using double quotes around paths - Detect new Rubygems sources in the Gemfile and update the lockfile ## 1.0.0.rc.6 (August 23, 2010) Features: - Much better documentation for most of the commands and Gemfile format Bugfixes: - Don't attempt to create directories if they already exist - Fix the capistrano task so that it actually runs - Update the Gemfile template to reference rubygems.org instead of :gemcutter - bundle exec should exit with a non zero exit code when the gem binary does not exist or the file is not executable. - Expand paths in Gemfile relative to the Gemfile and not the current working directory. ## 1.0.0.rc.5 (August 10, 2010) Features: - Make the Capistrano task more concise. Bugfixes: - Fix a regression with determining whether or not to use sudo - Allow using the --gemfile flag with the --deployment flag ## 1.0.0.rc.4 (August 9, 2010) Features: - `bundle gem NAME` command to generate a new gem with Gemfile - Bundle config file location can be specified by BUNDLE_APP_CONFIG - Add --frozen to disable updating the Gemfile.lock at runtime (default with --deployment) - Basic Capistrano task now added as 'bundler/capistrano' Bugfixes: - Multiple bundler process no longer share a tmp directory - `bundle update GEM` always updates dependencies of GEM as well - Deleting the cache directory no longer causes errors - Moving the bundle after installation no longer causes git errors - Bundle path is now correctly remembered on a read-only filesystem - Gem binaries are installed to Gem.bindir, not #{Gem.dir}/bin - Fetch gems from vendor/cache, even without --local - Sort lockfile by platform as well as spec ## 1.0.0.rc.3 (August 3, 2010) Features: - Deprecate --production flag for --deployment, since the former was causing confusion with the :production group - Add --gemfile option to `bundle check` - Reduce memory usage of `bundle install` by 2-4x - Improve message from `bundle check` under various conditions - Better error when a changed Gemfile conflicts with Gemfile.lock Bugfixes: - Create bin/ directory if it is missing, then install binstubs - Error nicely on the edge case of a pinned gem with no spec - Do not require gems for other platforms - Update git sources along with the gems they contain ## 1.0.0.rc.2 (July 29, 2010) - `bundle install path` was causing confusion, so we now print a clarifying warning. The preferred way to install to a path (which will not print the warning) is `bundle install --path path/to/install`. - `bundle install --system` installs to the default system location ($BUNDLE_PATH or $GEM_HOME) even if you previously used `bundle install --path` - completely remove `--disable-shared-gems`. If you install to system, you will not be isolated, while if you install to another path, you will be isolated from gems installed to the system. This was mostly an internal option whose naming and semantics were extremely confusing. - Add a `--production` option to `bundle install`: - by default, installs to `vendor/bundle`. This can be overridden with the `--path` option - uses `--local` if `vendor/cache` is found. This will guarantee that Bundler does not attempt to connect to Rubygems and will use the gems cached in `vendor/cache` instead - Raises an exception if a Gemfile.lock is not found - Raises an exception if you modify your Gemfile in development but do not check in an updated Gemfile.lock - Fixes a bug where switching a source from Rubygems to git would always say "the git source is not checked out" when running `bundle install` NOTE: We received several reports of "the git source has not been checked out. Please run bundle install". As far as we can tell, these problems have two possible causes: 1. `bundle install ~/.bundle` in one user, but actually running the application as another user. Never install gems to a directory scoped to a user (`~` or `$HOME`) in deployment. 2. A bug that happened when changing a gem to a git source. To mitigate several common causes of `(1)`, please use the new `--production` flag. This flag is simply a roll-up of the best practices we have been encouraging people to use for deployment. If you want to share gems across deployments, and you use Capistrano, symlink release_path/current/vendor/bundle to release_path/shared/bundle. This will keep deployments snappy while maintaining the benefits of clean, deploy-time isolation. ## 1.0.0.rc.1 (July 26, 2010) - Fixed a bug with `bundle install` on multiple machines and git ## 1.0.0.beta.10 (July 25, 2010) - Last release before 1.0.0.rc.1 - Added :mri as a valid platform (platforms :mri { gem "ruby-debug" }) - Fix `bundle install` immediately after modifying the :submodule option - Don't write to Gemfile.lock if nothing has changed, fixing situations where bundle install was run with a different user than the app itself - Fix a bug where other platforms were being wiped on `bundle update` - Don't ask for root password on `bundle install` if not needed - Avoid setting `$GEM_HOME` where not needed - First solid pass of `bundle config` - Add build options - `bundle config build.mysql --with-mysql-config=/path/to/config` ## 1.0.0.beta.9 (July 21, 2010) - Fix install failure when switching from a path to git source - Fix `bundle exec bundle *` in a bundle with --disable-shared-gems - Fix `bundle *` from inside a bundle with --disable-shared-gem - Shim Gem.refresh. This is used by Unicorn - Fix install failure when a path's dependencies changed ## 1.0.0.beta.8 (July 20, 2010) - Fix a Beta 7 bug involving Ruby 1.9 ## 1.0.0.beta.7 (July 20, 2010, yanked) - Running `bundle install` twice in a row with a git source always crashed ## 1.0.0.beta.6 (July 20, 2010, yanked) - Create executables with bundle install --binstubs - You can customize the location (default is app/bin) with --binstubs other/location - Fix a bug where the Gemfile.lock would be deleted even if the update was exited - Fix a bug where cached gems for other platforms were sometimes deleted - Clean up output when nothing was deleted from cache (it previously said "Removing outdated gems ...") - Improve performance of bundle install if the git gem was already checked out, and the revision being used already exists locally - Fix bundle show bundler in some cases - Fix bugs with bundle update - Don't ever run git commands at runtime (fixes a number of common passenger issues) - Fixes an obscure bug where switching the source of a gem could fail to correctly change the source of its dependencies - Support multiple version dependencies in the Gemfile (gem "rails", ">= 3.0.0.beta1", "<= 3.0.0") - Raise an exception for ambiguous uses of multiple declarations of the same gem (for instance, with different versions or sources). - Fix cases where the same dependency appeared several times in the Gemfile.lock - Fix a bug where require errors were being swallowed during Bundler.require ## 1.0.0.beta.1 - No `bundle lock` command. Locking happens automatically on install or update - No .bundle/environment.rb. Require 'bundler/setup' instead. - $BUNDLE_HOME defaults to $GEM_HOME instead of ~/.bundle - Remove lockfiles generated by 0.9 ## 0.9.26 Features: - error nicely on incompatible 0.10 lockfiles ## 0.9.25 (May 3, 2010) Bugfixes: - explicitly coerce Pathname objects to Strings for Ruby 1.9 - fix some newline weirdness in output from install command ## 0.9.24 (April 22, 2010) Features: - fetch submodules for git sources - limit the bundled version of bundler to the same as the one installing - force relative paths in git gemspecs to avoid raising Gem::NameTooLong - serialize GemCache sources correctly, so locking works - raise Bundler::GemNotFound instead of calling exit! inside library code - Rubygems 1.3.5 compatibility for the adventurous, not supported by me :) Bugfixes: - don't try to regenerate environment.rb if it is read-only - prune outdated gems with the platform "ruby" - prune cache without errors when there are directories or non-gem files - don't re-write environment.rb if running after it has been loaded - do not monkeypatch Specification#load_paths twice when inside a bundle ## 0.9.23 (April 20, 2010) Bugfixes: - cache command no longer prunes gems created by an older rubygems version - cache command no longer prunes gems that are for other platforms ## 0.9.22 (April 20, 2010) Features: - cache command now prunes stale .gem files from vendor/cache - init --gemspec command now generates development dependencies - handle Polyglot's changes to Kernel#require with Bundler::ENV_LOADED (#287) - remove .gem files generated after installing a gem from a :path (#286) - improve install/lock messaging (#284) Bugfixes: - ignore cached gems that are for another platform (#288) - install Windows gems that have no architecture set, like rcov (#277) - exec command while locked now includes the bundler lib in $LOAD_PATH (#293) - fix the `rake install` task - add GemspecError so it can be raised without (further) error (#292) - create a parent directory before cloning for git 1.5 compatibility (#285) ## 0.9.21 (April 16, 2010) Bugfixes: - don't raise 'omg wtf' when lockfile is outdated ## 0.9.20 (April 15, 2010) Features: - load YAML format gemspecs - no backtraces when calling Bundler.setup if gems are missing - no backtraces when trying to exec a file without the executable bit Bugfixes: - fix infinite recursion in Bundler.setup after loading a bundled Bundler gem - request install instead of lock when env.rb is out of sync with Gemfile.lock ## 0.9.19 (April 12, 2010) Features: - suggest `bundle install --relock` when the Gemfile has changed (#272) - source support for Rubygems servers without prerelease gem indexes (#262) Bugfixes: - don't set up all groups every time Bundler.setup is called while locked (#263) - fix #full_gem_path for git gems while locked (#268) - eval gemspecs at the top level, not inside the Bundler class (#269) ## 0.9.18 (April 8, 2010) Features: - console command that runs irb with bundle (and optional group) already loaded Bugfixes: - Bundler.setup now fully disables system gems, even when unlocked (#266, #246) - fixes Yard, which found plugins in Gem.source_index that it could not load - makes behaviour of `Bundler.require` consistent between locked and unlocked loads ## 0.9.17 (April 7, 2010) Features: - Bundler.require now calls Bundler.setup automatically - Gem::Specification#add_bundler_dependencies added for gemspecs Bugfixes: - Gem paths are not longer duplicated while loading bundler - exec no longer duplicates RUBYOPT if it is already set correctly ## 0.9.16 (April 3, 2010) Features: - exit gracefully on INT signal - resolver output now indicates whether remote sources were checked - print error instead of backtrace when exec cannot find a binary (#241) Bugfixes: - show, check, and open commands work again while locked (oops) - show command for git gems - outputs branch names other than master - gets the correct sha from the checkout - doesn't print sha twice if :ref is set - report errors from bundler/setup.rb without backtraces (#243) - fix Gem::Spec#git_version to not error on unloaded specs - improve deprecation, Gemfile, and command error messages (#242) ## 0.9.15 (April 1, 2010) Features: - use the env_file if possible instead of doing a runtime resolve - huge speedup when calling Bundler.setup while locked - ensures bundle exec is fast while locked - regenerates env_file if it was generated by an older version - update cached/packed gems when you update gems via bundle install Bugfixes: - prep for Rubygems 1.3.7 changes - install command now pulls git branches correctly (#211) - raise errors on invalid options in the Gemfile ## 0.9.14 (March 30, 2010) Features: - install command output vastly improved - installation message now accurate, with 'using' and 'installing' - bundler gems no longer listed as 'system gems' - show command output now includes sha and branch name for git gems - init command now takes --gemspec option for bootstrapping gem Gemfiles - Bundler.with_clean_env for shelling out to ruby scripts - show command now aliased as 'list' - VISUAL env var respected for GUI editors Bugfixes: - exec command now finds binaries from gems with no gemspec - note source of Gemfile resolver errors - don't blow up if git urls are changed ## 0.9.13 (March 23, 2010) Bugfixes: - exec command now finds binaries from gems installed via :path - gem dependencies are pulled in even if their type is nil - paths with spaces have double-quotes to work on Windows - set GEM_PATH in environment.rb so generators work with Rails 2 ## 0.9.12 (March 17, 2010) - refactoring, internal cleanup, more solid specs Features: - check command takes a --without option - check command exits 1 if the check fails Bugfixes: - perform a topological sort on resolved gems (#191) - gems from git work even when paths or repos have spaces (#196) - Specification#loaded_from returns a String, like Gem::Specification (#197) - specs eval from inside the gem directory, even when locked - virtual gemspecs are now saved in environment.rb for use when loading - unify the Installer's local index and the runtime index (#204) ## 0.9.11 (March 9, 2010) - added roadmap with future development plans Features: - install command can take the path to the gemfile with --gemfile (#125) - unknown command line options are now rejected (#163) - exec command hugely sped up while locked (#177) - show command prints the install path if you pass it a gem name (#148) - open command edits an installed gem with $EDITOR (#148) - Gemfile allows assigning an array of groups to a gem (#114) - Gemfile allows :tag option on :git sources - improve backtraces when a gemspec is invalid - improve performance by installing gems from the cache if present Bugfixes: - normalize parameters to Bundler.require (#153) - check now checks installed gems rather than cached gems (#162) - don't update the gem index when installing after locking (#169) - bundle parenthesises arguments for 1.8.6 (#179) - gems can now be assigned to multiple groups without problems (#135) - fix the warning when building extensions for a gem from git with Rubygems 1.3.6 - fix a Dependency.to_yaml error due to accidentally including sources and groups - don't reinstall packed gems - fix gems with git sources that are private repositories ## 0.9.10 (March 1, 2010) - depends on Rubygems 1.3.6 Bugfixes: - support locking after install --without - don't reinstall gems from the cache if they're already in the bundle - fixes for Ruby 1.8.7 and 1.9 ## 0.9.9 (February 25, 2010) Bugfixes: - don't die if GEM_HOME is an empty string - fixes for Ruby 1.8.6 and 1.9 ## 0.9.8 (February 23, 2010) Features: - pack command which both caches and locks - descriptive error if a cached gem is missing - remember the --without option after installing - expand paths given in the Gemfile via the :path option - add block syntax to the git and group options in the Gemfile - support gems with extensions that don't admit they depend on rake - generate gems using gem build gemspec so git gems can have native extensions - print a useful warning if building a gem fails - allow manual configuration via BUNDLE_PATH Bugfixes: - eval gemspecs in the gem directory so relative paths work - make default spec for git sources valid - don't reinstall gems that are already packed ## 0.9.7 (February 17, 2010) Bugfixes: - don't say that a gem from an excluded group is "installing" - improve crippling rubygems in locked scenarios ## 0.9.6 (February 16, 2010) Features: - allow String group names - a number of improvements in the documentation and error messages Bugfixes: - set SourceIndex#spec_dirs to solve a problem involving Rails 2.3 in unlocked mode - ensure Rubygems is fully loaded in Ruby 1.9 before patching it - fix `bundle install` for a locked app without a .bundle directory - require gems in the order that the resolver determines - make the tests platform agnostic so we can confirm that they're green on JRuby - fixes for Ruby 1.9 ## 0.9.5 (Feburary 12, 2010) Features: - added support for :path => "relative/path" - added support for older versions of git - added `bundle install --disable-shared-gems` - Bundler.require fails silently if a library does not have a file on the load path with its name - Basic support for multiple rubies by namespacing the default bundle path using the version and engine Bugfixes: - if the bundle is locked and .bundle/environment.rb is not present when Bundler.setup is called, generate it - same if it's not present with `bundle check` - same if it's not present with `bundle install` CONTRIBUTING.md000066400000000000000000000023041446701454400327270ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2# Creating Issues If you're having a problem, please see [ISSUES](https://github.com/bundler/bundler/blob/master/ISSUES.md) for troubleshooting steps and a guide for how to submit a ticket that will help us solve the problem you are having as quickly as possible. # Requesting Features Head on over to the [Bundler features](https://github.com/bundler/bundler-features) project, or any of the lists or channels listed below. Feature-wise we consider Bundler stable, so the core team does not tend to work on feature suggestions. Pull requests welcome though! # Discussing Bundler If you'd like to discuss features, ask questions, or just engage in general Bundler-focused discussion, please see the [#bundler](irc://irc.freenode.net/#bundler) IRC channel on Freenode, and the [Bundler mailing list](http://groups.google.com/group/ruby-bundler) on Google Groups. # Helping Out If you'd like to help make Bundler better, you totally rock! Please check out the [DEVELOPMENT](https://github.com/bundler/bundler/blob/master/DEVELOPMENT.md) file for an introduction to the project, guidelines for contributing, and suggestions for things anyone can do that would be helpful. Thanks for helping us make Bundler better. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/DEVELOPMENT.md000066400000000000000000000206431446701454400326670ustar00rootroot00000000000000Great to have you here! Here are a few ways you can help out with [Bundler](http://github.com/bundler/bundler). # Where should I start? You can start learning about Bundler by reading [the documentation](http://bundler.io). If you want, you can also read a (lengthy) explanation of [why Bundler exists and what it does](http://bundler.io/v1.2/rationale.html). You can also check out discussions about Bundler on the [Bundler mailing list](https://groups.google.com/group/ruby-bundler) and in the [Bundler IRC channel](irc://irc.freenode.net/#bundler), which is #bundler on Freenode. ## Your first commits If you’re interested in contributing to Bundler, that’s awesome! We’d love your help. If you have any questions after reading this page, please feel free to contact either [@indirect](http://github.com/indirect) or [@hone](http://github.com/hone). They are both happy to provide help working through your first bugfix or thinking through the problem you’re trying to resolve. ## Tackle some small problems We track [small bugs](https://github.com/bundler/bundler/issues?labels=small&state=open) and [small features](https://github.com/bundler/bundler-features/issues?labels=small&state=open) so that anyone who wants to help can start with something that's not too overwhelming. If nothing on those lists looks good, though, just talk to us. # Development setup Bundler doesn't use a Gemfile to list development dependencies, because when we tried it we couldn't tell if we were awake or it was just another level of dreams. To work on Bundler, you'll probably want to do a couple of things. 1. Install Bundler's development dependencies $ rake spec:deps 2. Run the test suite, to make sure things are working $ rake spec 3. Set up a shell alias to run Bundler from your clone, e.g. a Bash alias: $ alias dbundle='ruby -I /path/to/bundler/lib /path/to/bundler/bin/bundle' With that set up, you can test changes you've made to Bundler by running `dbundle`, without interfering with the regular `bundle` command. # Bug triage Triage is the work of processing tickets that have been opened into actionable issues, feature requests, or bug reports. That includes verifying bugs, categorizing the ticket, and ensuring there's enough information to reproduce the bug for anyone who wants to try to fix it. We've created an [issues guide](https://github.com/bundler/bundler/blob/master/ISSUES.md) to walk Bundler users through the process of troubleshooting issues and reporting bugs. If you'd like to help, awesome! You can [report a new bug](https://github.com/bundler/bundler/issues/new) or browse our [existing open tickets](https://github.com/bundler/bundler/issues). Not every ticket will point to a bug in Bundler's code, but open tickets usually mean that there is something we could improve to help that user. Sometimes that means writing additional documentation, sometimes that means making error messages clearer, and sometimes that means explaining to a user that they need to install git to use git gems. When you're looking at a ticket, here are the main questions to ask: * Can I reproduce this bug myself? * Are the steps to reproduce clearly stated in the ticket? * Which versions of Bundler (1.1.x, 1.2.x, git, etc.) manifest this bug? * Which operating systems (OS X, Windows, Ubuntu, CentOS, etc.) manifest this bug? * Which rubies (MRI, JRuby, Rubinius, etc.) and which versions (1.8.7, 1.9.3, etc.) have this bug? If you can't reproduce an issue, chances are good that the bug has been fixed (hurrah!). That's a good time to post to the ticket explaining what you did and how it worked. If you can reproduce an issue, you're well on your way to fixing it. :) Fixing issues is similar to adding new features: 1. Discuss the fix on the existing issue. Coordinating with everyone else saves duplicate work and serves as a great way to get suggestions and ideas if you need any. 2. Base your commits on the correct branch. Bugfixes for 1.x versions of Bundler should be based on the matching 1-x-stable branch. 3. Commit the code and at least one test covering your changes to a named branch in your fork. 4. Put a line in the [CHANGELOG](https://github.com/bundler/bundler/blob/master/CHANGELOG.md) summarizing your changes under the next release under the “Bugfixes” heading. 5. Send us a [pull request](https://help.github.com/articles/using-pull-requests) from your bugfix branch. Finally, the ticket may be a duplicate of another older ticket. If you notice a ticket is a duplicate, simply comment on the ticket noting the original ticket’s number. For example, you could say “This is a duplicate of issue #42, and can be closed”. # Adding new features If you would like to add a new feature to Bundler, please follow these steps: 1. [Create an issue](https://github.com/bundler/bundler-features/issues/new) to discuss your feature. 2. Base your commits on the master branch, since we follow [SemVer](http://semver.org) and don't add new features to old releases. 3. Commit the code and at least one test covering your changes to a feature branch in your fork. 4. Put a line in the [CHANGELOG](https://github.com/bundler/bundler/blob/master/CHANGELOG.md) summarizing your changes under the next release under the "Features" heading. 5. Send us a [pull request](https://help.github.com/articles/using-pull-requests) from your feature branch. If you don't hear back immediately, don’t get discouraged! We all have day jobs, but we respond to most tickets within a day or two. # Beta testing Early releases require heavy testing, especially across various system setups. We :heart: testers, and are big fans of anyone who can run `gem install bundler --pre` and try out upcoming releases in their development and staging environments. As of September 3 2012, there is no current prerelease or beta version of Bundler. That said, you are always welcome to try checking out master and building a gem yourself if you want to try out the latest changes. # Translations We don't currently have any translations, but please reach out to us if you would like to help get this going. # Documentation Code needs explanation, and sometimes those who know the code well have trouble explaining it to someone just getting into it. Because of that, we welcome documentation suggestions and patches from everyone, especially if they are brand new to using Bundler. Bundler has two main sources of documentation: the built-in help (including usage information and man pages) and the [Bundler documentation site](http://bundler.io). If you’d like to submit a patch to the man pages, follow the steps for adding a feature above. All of the man pages are located in the `man` directory. Just use the “Documentation” heading when you describe what you did in the changelog. If you have a suggestion or proposed change for [bundler.io](http://bundler.io), please open an issue or send a pull request to the [bundler-site](https://github.com/bundler/bundler-site) repository. # Community Community is an important part of all we do. If you’d like to be part of the Bundler community, you can jump right in and start helping make Bundler better for everyone who uses it. It would be tremendously helpful to have more people answering questions about Bundler (and often simply about Rubygems or Ruby itself) in our [issue tracker](https://github.com/bundler/bundler/issues) or on [Stack Overflow](http://stackoverflow.com/questions/tagged/bundler). Additional documentation and explanation is always helpful, too. If you have any suggestions for the Bundler website [bundler.io](http://bundler.io), we would absolutely love it if you opened an issue or pull request on the [bundler-site](https://github.com/bundler/bundler-site) repository. Finally, sharing your experiences and discoveries by writing them up is a valuable way to help others who have similar problems or experiences in the future. You can write a blog post, create an example and commit it to Github, take screenshots, or make videos. Examples of how Bundler is used help everyone, and we’ve discovered that people already use it in ways that we never imagined when we were writing it. If you’re still not sure what to write about, there are also several projects doing interesting things based on Bundler. They could probably use publicity too. If you let someone on the core team know you wrote about Bundler, we will add your post to the list of Bundler resources on the Github project wiki. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/ISSUES.md000066400000000000000000000105401446701454400321130ustar00rootroot00000000000000# Bundler Issues So! You're having problems with Bundler. This file is here to help. If you're running into an error, try reading the rest of this file for help. If you can't figure out how to solve your problem, there are also instructions on how to report a bug. **Please use the [Bundler Features](https://github.com/bundler/bundler-features) repo to suggest and discuss features. The bundler issue tracker is only for bugs.** ## Documentation Instructions for common Bundler uses can be found on the [Bundler documentation site](http://bundler.io/). Detailed information about each Bundler command, including help with common problems, can be found in the [Bundler man pages](http://bundler.io/v1.3/man/bundle.1.html). ## Troubleshooting ### Heroku errors Please open a ticket with Heroku if you're having trouble deploying. They have a professional support team who can help you resolve Heroku issues far better than the Bundler team can. If the problem that you are having turns out to be a bug in Bundler itself, Heroku support can get the exact details to us. ### Other problems First, figure out exactly what it is that you're trying to do. Then, go to the [Bundler documentation website](http://bundler.io) and see if we have instructions on how to do that. Second, check [the compatibility list](http://bundler.io/compatibility.html), and make sure that the version of Bundler that you are using works with the versions of Ruby and Rubygems that you are using. If the instructions don't work, or you can't find any instructions, you can try these troubleshooting steps: # remove user-specific gems and git repos rm -rf ~/.bundle/ ~/.gem/bundler/ ~/.gems/cache/bundler/ # remove system-wide git repos and git checkouts rm -rf $GEM_HOME/bundler/ $GEM_HOME/cache/bundler/ # remove project-specific settings rm -rf .bundle/ # remove project-specific cached gems and repos rm -rf vendor/cache/ # remove the saved resolve of the Gemfile rm -rf Gemfile.lock # uninstall the rubygems-bundler and open_gem gems rvm gemset use global # if using rvm gem uninstall rubygems-bundler open_gem # try to install one more time bundle install ## Reporting unresolved problems Hopefully the troubleshooting steps above resolved your problem. If things still aren't working the way you expect them to, please let us know so that we can diagnose and hopefully fix the problem you're having. **The best way to report a bug is by providing a reproduction script.** See these examples: * [Git environment variables causing install to fail.](https://gist.github.com/xaviershay/6207550) * [Multiple gems in a repository cannot be updated independently.](https://gist.github.com/xaviershay/6295889) A half working script with comments for the parts you were unable to automate is still appreciated. If you are unable to do that, please include the following information in your report: - What you're trying to accomplish - The command you ran - What you expected to happen - What actually happened - The exception backtrace(s), if any - Everything output by running `bundle env` If your version of Bundler does not have the `bundle env` command, then please include: - Your Gemfile - Your Gemfile.lock - Your Bundler configuration settings (run `bundle config`) - What version of bundler you are using (run `bundle -v`) - What version of Ruby you are using (run `ruby -v`) - What version of Rubygems you are using (run `gem -v`) - Whether you are using RVM, and if so what version (run `rvm -v`) - Whether you have the `rubygems-bundler` gem, which can break gem executables (run `gem list rubygems-bundler`) - Whether you have the `open_gem` gem, which can cause rake activation conflicts (run `gem list open_gem`) If you are using Rails 2.3, please also include: - Your boot.rb file - Your preinitializer.rb file - Your environment.rb file If you have either `rubygems-bundler` or `open_gem` installed, please try removing them and then following the troubleshooting steps above before opening a new ticket. [Create a gist](https://gist.github.com) containing all of that information, then visit the [Bundler issue tracker](https://github.com/bundler/bundler/issues) and [create a ticket](https://github.com/bundler/bundler/issues/new) describing your problem and linking to your gist. Thanks for reporting issues and helping make Bundler better! mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/LICENSE.md000066400000000000000000000021361446701454400321640ustar00rootroot00000000000000Portions copyright (c) 2010 Andre Arko Portions copyright (c) 2009 Engine Yard MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/README.md000066400000000000000000000046241446701454400320430ustar00rootroot00000000000000[![Code Climate](https://codeclimate.com/github/bundler/bundler.png)](https://codeclimate.com/github/bundler/bundler) [![Build Status](https://secure.travis-ci.org/bundler/bundler.png?branch=1-3-stable)](http://travis-ci.org/bundler/bundler) # Bundler: a gem to bundle gems Bundler keeps ruby applications running the same code on every machine. It does this by managing the gems that the application depends on. Given a list of gems, it can automatically download and install those gems, as well as any other gems needed by the gems that are listed. Before installing gems, it checks the versions of every gem to make sure that they are compatible, and can all be loaded at the same time. After the gems have been installed, Bundler can help you update some or all of them when new versions become available. Finally, it records the exact versions that have been installed, so that others can install the exact same gems. ### Installation and usage ``` gem install bundler bundle init echo "gem 'rails'" >> Gemfile bundle install bundle exec rails new myapp ``` See [bundler.io](http://bundler.io) for the full documentation. ### Troubleshooting For help with common problems, see [ISSUES](https://github.com/bundler/bundler/blob/master/ISSUES.md). ### Contributing If you'd like to contribute to Bundler, that's awesome, and we <3 you. There's a guide to contributing to Bundler (both code and general help) over in [DEVELOPMENT](https://github.com/bundler/bundler/blob/master/DEVELOPMENT.md) The `master` branch contains our current progress towards version 1.4. Versions 1.0-1.3 each have their own stable branches. Please submit bugfixes as pull requests to the stable branch for the version you would like to fix. ### Core Team The Bundler core team consists of André Arko ([@indirect](http://github.com/indirect)), Terence Lee ([@hone](http://github.com/hone)), and Jessica Lynn Suttles ([@jlsuttles](http://github.com/jlsuttles)), with support and advice from original Bundler author Yehuda Katz ([@wycats](http://github.com/wycats)). ### Other questions To see what has changed in recent versions of Bundler, see the [CHANGELOG](https://github.com/bundler/bundler/blob/master/CHANGELOG.md). Feel free to chat with the Bundler core team (and many other users) on IRC in the [#bundler](irc://irc.freenode.net/bundler) channel on Freenode, or via email on the [Bundler mailing list](http://groups.google.com/group/ruby-bundler). mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/Rakefile000066400000000000000000000147041446701454400322310ustar00rootroot00000000000000# -*- encoding: utf-8 -*- $:.unshift File.expand_path("../lib", __FILE__) require 'rubygems' require 'shellwords' require 'benchmark' def safe_task(&block) yield true rescue false end # Benchmark task execution module Rake class Task alias_method :real_invoke, :invoke def invoke(*args) time = Benchmark.measure(@name) do real_invoke(*args) end puts "#{@name} ran for #{time}" end end end namespace :spec do desc "Ensure spec dependencies are installed" task :deps do {"rdiscount" => "~> 1.6", "ronn" => "~> 0.7.3", "rspec" => "~> 2.13"}.each do |name, version| sh "#{Gem.ruby} -S gem list -i #{name} -v '#{version}' || " \ "#{Gem.ruby} -S gem install #{name} -v '#{version}' --no-ri --no-rdoc" end end namespace :travis do task :deps do # Give the travis user a name so that git won't fatally error system("sudo sed -i 's/1000::/1000:Travis:/g' /etc/passwd") # Strip secure_path so that RVM paths transmit through sudo -E system("sudo sed -i '/secure_path/d' /etc/sudoers") # Install groff for the ronn gem system("sudo apt-get install groff -y") # Switch to the Bluebox DNS servers in the Travis data center system("printf 'nameserver 199.91.168.70\nnameserver 199.91.168.71\n' | sudo tee /etc/resolv.conf") # Install the other gem deps, etc. Rake::Task["spec:deps"].invoke end end end begin # running the specs needs both rspec and ronn require 'rspec/core/rake_task' require 'ronn' desc "Run specs" RSpec::Core::RakeTask.new do |t| t.rspec_opts = %w(-fs --color) t.ruby_opts = %w(-w) end task :spec => "man:build" namespace :spec do task :clean do rm_rf 'tmp' end desc "Run the real-world spec suite (requires internet)" task :realworld => ["set_realworld", "spec"] task :set_realworld do ENV['BUNDLER_REALWORLD_TESTS'] = '1' end desc "Run the spec suite with the sudo tests" task :sudo => ["set_sudo", "spec", "clean_sudo"] task :set_sudo do ENV['BUNDLER_SUDO_TESTS'] = '1' end task :clean_sudo do puts "Cleaning up sudo test files..." system "sudo rm -rf #{File.expand_path('../tmp/sudo_gem_home', __FILE__)}" end # Rubygems specs by version namespace :rubygems do rubyopt = ENV["RUBYOPT"] # When editing this list, also edit .travis.yml! branches = %w(master 2.1) releases = %w(v1.3.6 v1.3.7 v1.4.2 v1.5.3 v1.6.2 v1.7.2 v1.8.28 v2.0.12 v2.1.9) (branches + releases).each do |rg| desc "Run specs with Rubygems #{rg}" RSpec::Core::RakeTask.new(rg) do |t| t.rspec_opts = %w(-fs --color) t.ruby_opts = %w(-w) end # Create tasks like spec:rubygems:v1.8.3:sudo to run the sudo specs namespace rg do task :sudo => ["set_sudo", rg, "clean_sudo"] task :realworld => ["set_realworld", rg] end task "clone_rubygems_#{rg}" do unless File.directory?("tmp/rubygems") system("git clone git://github.com/rubygems/rubygems.git tmp/rubygems") end hash = nil Dir.chdir("tmp/rubygems") do system("git remote update") if rg == "master" system("git checkout origin/master") else system("git checkout #{rg}") end hash = `git rev-parse HEAD`.chomp end puts "Checked out rubygems '#{rg}' at #{hash}" ENV["RUBYOPT"] = "-I#{File.expand_path("tmp/rubygems/lib")} #{rubyopt}" puts "RUBYOPT=#{ENV['RUBYOPT']}" end task rg => ["clone_rubygems_#{rg}", "man:build"] task "rubygems:all" => rg end desc "Run specs under a Rubygems checkout (set RG=path)" RSpec::Core::RakeTask.new("co") do |t| t.rspec_opts = %w(-fs --color) t.ruby_opts = %w(-w) end task "setup_co" do ENV["RUBYOPT"] = "-I#{File.expand_path ENV['RG']} #{rubyopt}" end task "co" => "setup_co" task "rubygems:all" => "co" end desc "Run the tests on Travis CI against a rubygem version (using ENV['RGV'])" task :travis do rg = ENV['RGV'] || 'v1.8.24' puts "\n\e[1;33m[Travis CI] Running bundler specs against rubygems #{rg}\e[m\n\n" specs = safe_task { Rake::Task["spec:rubygems:#{rg}"].invoke } Rake::Task["spec:rubygems:#{rg}"].reenable puts "\n\e[1;33m[Travis CI] Running bundler sudo specs against rubygems #{rg}\e[m\n\n" sudos = system("sudo -E rake spec:rubygems:#{rg}:sudo") # clean up by chowning the newly root-owned tmp directory back to the travis user system("sudo chown -R #{ENV['USER']} #{File.join(File.dirname(__FILE__), 'tmp')}") Rake::Task["spec:rubygems:#{rg}"].reenable puts "\n\e[1;33m[Travis CI] Running bundler real world specs against rubygems #{rg}\e[m\n\n" realworld = safe_task { Rake::Task["spec:rubygems:#{rg}:realworld"].invoke } {"specs" => specs, "sudo" => sudos, "realworld" => realworld}.each do |name, passed| if passed puts "\e[0;32m[Travis CI] #{name} passed\e[m" else puts "\e[0;31m[Travis CI] #{name} failed\e[m" end end unless specs && sudos && realworld fail "Spec run failed, please review the log for more information" end end end rescue LoadError task :spec do abort "Run `rake spec:deps` to be able to run the specs" end end begin require 'ronn' namespace :man do directory "lib/bundler/man" Dir["man/*.ronn"].each do |ronn| basename = File.basename(ronn, ".ronn") roff = "lib/bundler/man/#{basename}" file roff => ["lib/bundler/man", ronn] do sh "#{Gem.ruby} -S ronn --roff --pipe #{ronn} > #{roff}" end file "#{roff}.txt" => roff do sh "groff -Wall -mtty-char -mandoc -Tascii #{roff} | col -b > #{roff}.txt" end task :build_all_pages => "#{roff}.txt" end desc "Build the man pages" task :build => "man:build_all_pages" desc "Clean up from the built man pages" task :clean do rm_rf "lib/bundler/man" end end rescue LoadError namespace :man do task(:build) { abort "Install the ronn gem to be able to release!" } task(:clean) { abort "Install the ronn gem to be able to release!" } end end require 'bundler/gem_tasks' task :build => ["man:clean", "man:build"] task :release => ["man:clean", "man:build"] task :default => :spec mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/UPGRADING.md000066400000000000000000000101621446701454400324200ustar00rootroot00000000000000## Bundler 0.9 to 1.0 and above Upgrading from Bundler 0.9 to 1.0 is relatively painless. The Gemfile API is the same, so your old Gemfiles should continue to work. The "env" file that 0.9 created at `.bundle/environment.rb` has been removed. As a side effect of this, Passenger will only find your bundled gems if you install with `bundle install --deployment`. Alternatively, you can tell Passenger where you gems are installed, [something like this](http://andre.arko.net/2010/08/16/using-passengerpane-with-gem_home-set/). The `bundle lock` command is no longer needed, as the Gemfile.lock file is now automatically generated by `bundle install`. If you have not yet done so, add your Gemfile.lock to source control and check it in. Running `bundle install` no longer updates the versions of your gems. If you need to update just one gem, run `bundle update GEMNAME`. To update all gems to the newest versions possible, run `bundle update`. Bundler now supports multiple platforms, using a block syntax to declare platform-specific gems: platform :jruby do gem "jruby-maven-plugins" end Deploying using Bundler is even easier than it was before, as Bundler now includes a Capistrano recipe. Simply add this line to the top of your deploy.rb file to run Bundler automatically as part of deploying: require 'bundler/capistrano' For more details on deploying using bundler, see the documentation for the bundler cap task, and the [documentation on deploying](http://bundler.io/deploying.html). ## Bundler 0.8 to 0.9 and above Upgrading to Bundler 0.9 from Bundler 0.8 requires upgrading several API calls in your Gemfile, and some workarounds if you are using Rails 2.3. ### Gemfile Removals Bundler 0.9 removes the following Bundler 0.8 Gemfile APIs: 1. `disable_system_gems`: This is now the default (and only) option for bundler. Bundler uses the system gems you have specified in the Gemfile, and only the system gems you have specified (and their dependencies) 2. `disable_rubygems`: This is no longer supported. We are looking into ways to get the fastest performance out of each supported scenario, and we will make speed the default where possible. 3. `clear_sources`: Bundler now defaults to an empty source list. If you want to include Rubygems, you can add the source via source "http://gemcutter.org". If you use bundle init, this source will be automatically added for you in the generated Gemfile 4. `bundle_path`: You can specify this setting when installing via `bundle install /path/to/bundle`. Bundler will remember where you installed the dependencies to on a particular machine for future installs, loads, setups, etc. 5. `bin_path`: Bundler no longer generates executables in the root of your app. You should use `bundle exec` to execute executables in the current context. ### Gemfile Changes Bundler 0.9 changes the following Bundler 0.8 Gemfile APIs: 1. Bundler 0.8 supported :only and :except as APIs for describing groups of gems. Bundler 0.9 supports a single `group` method, which you can use to group gems together. See the above "Group" section for more information. This means that `gem "foo", :only => :production` becomes `gem "foo", :group => :production`, and `only :production { gem "foo" }` becomes `group :production { gem "foo" }` The short version is: group your gems together logically, and use the available commands to make use of the groups you've created. 2. `:require_as` becomes `:require` 3. `:vendored_at` is fully removed; you should use `:path` ### API Changes 1. `Bundler.require_env(:environment)` becomes `Bundler.require(:multiple, :groups)`. You must now specify the default group (the default group is the group made up of the gems not assigned to any group) explicitly. So `Bundler.require_env(:test)` becomes `Bundler.require(:default, :test)` 2. `require 'vendor/gems/environment'`: In unlocked mode, where using system gems, this becomes `Bundler.setup(:multiple, :groups)`. If you don't specify any groups, this puts all groups on the load path. In locked mode, it becomes `require '.bundle/environment'` mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/bin/000077500000000000000000000000001446701454400313265ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/bin/bundle000066400000000000000000000011201446701454400325140ustar00rootroot00000000000000#!/usr/bin/env ruby # Exit cleanly from an early interrupt Signal.trap("INT") { exit 1 } require 'bundler' # Check if an older version of bundler is installed $LOAD_PATH.each do |path| if path =~ %r'/bundler-0.(\d+)' && $1.to_i < 9 err = "Looks like you have a version of bundler that's older than 0.9.\n" err << "Please remove your old versions.\n" err << "An easy way to do this is by running `gem cleanup bundler`." abort(err) end end require 'bundler/cli' require 'bundler/friendly_errors' Bundler.with_friendly_errors { Bundler::CLI.start(ARGV, :debug => true) } bundle_ruby000066400000000000000000000024401446701454400335040ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/bin#!/usr/bin/env ruby Signal.trap("INT") { exit 1 } require 'bundler/ruby_version' require 'bundler/ruby_dsl' require 'bundler/shared_helpers' module Bundler class GemfileError < RuntimeError; end class Dsl include RubyDsl attr_accessor :ruby_version def initialize @ruby_version = nil end def eval_gemfile(gemfile, contents = nil) contents ||= File.open(gemfile, "rb") { |f| f.read } instance_eval(contents, gemfile.to_s, 1) rescue SyntaxError => e bt = e.message.split("\n")[1..-1] raise GemfileError, ["Gemfile syntax error:", *bt].join("\n") rescue ScriptError, RegexpError, NameError, ArgumentError => e e.backtrace[0] = "#{e.backtrace[0]}: #{e.message} (#{e.class})" STDERR.puts e.backtrace.join("\n ") raise GemfileError, "There was an error in your Gemfile," \ " and Bundler cannot continue." end def source(source, options = {}) end def gem(name, *args) end def group(*args, &blk) end end end dsl = Bundler::Dsl.new begin dsl.eval_gemfile(Bundler::SharedHelpers.default_gemfile) ruby_version = dsl.ruby_version if ruby_version puts ruby_version else puts "No ruby version specified" end rescue Bundler::GemfileError => e puts e.message exit(-1) end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/bin/bundler000066400000000000000000000003671446701454400327120ustar00rootroot00000000000000#!/usr/bin/env ruby require 'bundler' require 'bundler/cli' ui = Bundler::UI::Shell.new ui.error "It's recommended to use Bundler through 'bundle' binary instead of 'bundler'" bin = "#{File.dirname(__FILE__)}/bundle #{ARGV.join(" ")}" exec bin bundler.gemspec000066400000000000000000000021231446701454400334750ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2# coding: utf-8 lib = File.expand_path('../lib/', __FILE__) $:.unshift lib unless $:.include?(lib) require 'bundler/version' Gem::Specification.new do |spec| spec.name = 'bundler' spec.version = Bundler::VERSION spec.licenses = ['MIT'] spec.authors = ["André Arko", "Terence Lee", "Carl Lerche", "Yehuda Katz"] spec.email = ["andre@arko.net"] spec.homepage = "http://bundler.io" spec.summary = %q{The best way to manage your application's dependencies} spec.description = %q{Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably} spec.required_ruby_version = '>= 1.8.7' spec.required_rubygems_version = '>= 1.3.6' spec.add_development_dependency 'ronn', '~> 0.7.3' spec.add_development_dependency 'rspec', '~> 2.11' spec.files = `git ls-files -z`.split("\x0") spec.files += Dir.glob('lib/bundler/man/**/*') # man/ is ignored by git spec.test_files = spec.files.grep(%r{^spec/}) spec.executables = %w(bundle bundler) spec.require_paths = ["lib"] end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/000077500000000000000000000000001446701454400313245ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler.rb000066400000000000000000000312351446701454400333100ustar00rootroot00000000000000require 'fileutils' require 'pathname' require 'rbconfig' require 'bundler/gem_path_manipulation' require 'bundler/rubygems_ext' require 'bundler/rubygems_integration' require 'bundler/version' require 'bundler/constants' require 'bundler/current_ruby' module Bundler preserve_gem_path ORIGINAL_ENV = ENV.to_hash autoload :Definition, 'bundler/definition' autoload :Dependency, 'bundler/dependency' autoload :DepProxy, 'bundler/dep_proxy' autoload :Deprecate, 'bundler/deprecate' autoload :Dsl, 'bundler/dsl' autoload :EndpointSpecification, 'bundler/endpoint_specification' autoload :Environment, 'bundler/environment' autoload :Env, 'bundler/env' autoload :Fetcher, 'bundler/fetcher' autoload :GemHelper, 'bundler/gem_helper' autoload :GemHelpers, 'bundler/gem_helpers' autoload :GemInstaller, 'bundler/gem_installer' autoload :Graph, 'bundler/graph' autoload :Index, 'bundler/index' autoload :Installer, 'bundler/installer' autoload :Injector, 'bundler/injector' autoload :LazySpecification, 'bundler/lazy_specification' autoload :LockfileParser, 'bundler/lockfile_parser' autoload :MatchPlatform, 'bundler/match_platform' autoload :RemoteSpecification, 'bundler/remote_specification' autoload :Resolver, 'bundler/resolver' autoload :Retry, 'bundler/retry' autoload :RubyVersion, 'bundler/ruby_version' autoload :RubyDsl, 'bundler/ruby_dsl' autoload :Runtime, 'bundler/runtime' autoload :Settings, 'bundler/settings' autoload :SharedHelpers, 'bundler/shared_helpers' autoload :SpecSet, 'bundler/spec_set' autoload :Source, 'bundler/source' autoload :Specification, 'bundler/shared_helpers' autoload :SystemRubyVersion, 'bundler/ruby_version' autoload :UI, 'bundler/ui' class BundlerError < StandardError def self.status_code(code) define_method(:status_code) { code } end end class GemfileNotFound < BundlerError; status_code(10) ; end class GemNotFound < BundlerError; status_code(7) ; end class GemfileError < BundlerError; status_code(4) ; end class InstallError < BundlerError; status_code(5) ; end class InstallHookError < BundlerError; status_code(6) ; end class PathError < BundlerError; status_code(13) ; end class GitError < BundlerError; status_code(11) ; end class DeprecatedError < BundlerError; status_code(12) ; end class GemspecError < BundlerError; status_code(14) ; end class InvalidOption < BundlerError; status_code(15) ; end class ProductionError < BundlerError; status_code(16) ; end class HTTPError < BundlerError; status_code(17) ; end class RubyVersionMismatch < BundlerError; status_code(18) ; end class SecurityError < BundlerError; status_code(19) ; end class LockfileError < BundlerError; status_code(20) ; end class CyclicDependencyError < BundlerError; status_code(21) ; end # Internal errors, should be rescued class VersionConflict < BundlerError attr_reader :conflicts def initialize(conflicts, msg = nil) super(msg) @conflicts = conflicts end status_code(6) end class MarshalError < StandardError; end class << self attr_writer :ui, :bundle_path def configure @configured ||= configure_gem_home_and_path end def ui @ui ||= UI.new end # Returns absolute path of where gems are installed on the filesystem. def bundle_path @bundle_path ||= Pathname.new(settings.path).expand_path(root) end # Returns absolute location of where binstubs are installed to. def bin_path @bin_path ||= begin path = settings[:bin] || "bin" path = Pathname.new(path).expand_path(root).expand_path FileUtils.mkdir_p(path) path end end def setup(*groups) # Just return if all groups are already loaded return @setup if defined?(@setup) definition.validate_ruby! if groups.empty? # Load all groups, but only once @setup = load.setup else @completed_groups ||= [] # Figure out which groups haven't been loaded yet unloaded = groups - @completed_groups # Record groups that are now loaded @completed_groups = groups unloaded.any? ? load.setup(*groups) : load end end def require(*groups) setup(*groups).require(*groups) end def load @load ||= Runtime.new(root, definition) end def environment Bundler::Environment.new(root, definition) end # Returns an instance of Bundler::Definition for given Gemfile and lockfile # # @param unlock [Hash, Boolean, nil] Gems that have been requested # to be updated or true if all gems should be updated # @return [Bundler::Definition] def definition(unlock = nil) @definition = nil if unlock @definition ||= begin configure upgrade_lockfile Definition.build(default_gemfile, default_lockfile, unlock) end end def locked_gems @locked_gems ||= begin lock = Bundler.read_file(Bundler.default_lockfile) LockfileParser.new(lock) end end def ruby_scope "#{Bundler.rubygems.ruby_engine}/#{Gem::ConfigMap[:ruby_version]}" end def user_bundle_path Pathname.new(Bundler.rubygems.user_home).join(".bundler") end def home bundle_path.join("bundler") end def install_path home.join("gems") end def specs_path bundle_path.join("specifications") end def cache bundle_path.join("cache/bundler") end def root default_gemfile.dirname.expand_path end def app_config_path ENV['BUNDLE_APP_CONFIG'] ? Pathname.new(ENV['BUNDLE_APP_CONFIG']).expand_path(root) : root.join('.bundle') end def app_cache root.join("vendor/cache") end def tmp user_bundle_path.join("tmp", Process.pid.to_s) end def settings @settings ||= begin Settings.new(app_config_path) rescue GemfileNotFound Settings.new end end def with_original_env bundled_env = ENV.to_hash ENV.replace(ORIGINAL_ENV) yield ensure ENV.replace(bundled_env.to_hash) end def with_clean_env with_original_env do ENV['MANPATH'] = ENV['BUNDLE_ORIG_MANPATH'] ENV.delete_if { |k,_| k[0,7] == 'BUNDLE_' } if ENV.has_key? 'RUBYOPT' ENV['RUBYOPT'] = ENV['RUBYOPT'].sub '-rbundler/setup', '' ENV['RUBYOPT'] = ENV['RUBYOPT'].sub "-I#{File.expand_path('..', __FILE__)}", '' end yield end end def clean_system(*args) with_clean_env { Kernel.system(*args) } end def clean_exec(*args) with_clean_env { Kernel.exec(*args) } end def default_gemfile SharedHelpers.default_gemfile end def default_lockfile SharedHelpers.default_lockfile end def system_bindir # Gem.bindir doesn't always return the location that Rubygems will install # system binaries. If you put '-n foo' in your .gemrc, Rubygems will # install binstubs there instead. Unfortunately, Rubygems doesn't expose # that directory at all, so rather than parse .gemrc ourselves, we allow # the directory to be set as well, via `bundle config bindir foo`. Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir end def requires_sudo? return @requires_sudo if defined?(@requires_sudo_ran) if settings.allow_sudo? sudo_present = which "sudo" end if sudo_present # the bundle path and subdirectories need to be writable for Rubygems # to be able to unpack and install gems without exploding path = bundle_path path = path.parent until path.exist? # bins are written to a different location on OS X bin_dir = Pathname.new(Bundler.system_bindir) bin_dir = bin_dir.parent until bin_dir.exist? # if any directory is not writable, we need sudo dirs = [path, bin_dir] | Dir[path.join('*').to_s] sudo_needed = dirs.find{|d| !File.writable?(d) } end @requires_sudo_ran = true @requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed end def mkdir_p(path) if requires_sudo? sudo "mkdir -p '#{path}'" unless File.exist?(path) else FileUtils.mkdir_p(path) end end def which(executable) if File.file?(executable) && File.executable?(executable) executable elsif ENV['PATH'] path = ENV['PATH'].split(File::PATH_SEPARATOR).find do |p| File.executable?(File.join(p, executable)) end path && File.expand_path(executable, path) end end def sudo(str) prompt = "\n\n" + <<-PROMPT.gsub(/^ {6}/, '').strip + " " Your user account isn't allowed to install to the system Rubygems. You can cancel this installation and run: bundle install --path vendor/bundle to install the gems into ./vendor/bundle/, or you can enter your password and install the bundled gems to Rubygems using sudo. Password: PROMPT `sudo -p "#{prompt}" #{str}` end def read_file(file) File.open(file, "rb") { |f| f.read } end def load_marshal(data) Marshal.load(data) rescue => e raise MarshalError, "#{e.class}: #{e.message}" end def load_gemspec(file) @gemspec_cache ||= {} key = File.expand_path(file) spec = ( @gemspec_cache[key] ||= load_gemspec_uncached(file) ) # Protect against caching side-effected gemspecs by returning a # new instance each time. spec.dup if spec end def load_gemspec_uncached(file) path = Pathname.new(file) # Eval the gemspec from its parent directory, because some gemspecs # depend on "./" relative paths. SharedHelpers.chdir(path.dirname.to_s) do contents = path.read if contents[0..2] == "---" # YAML header eval_yaml_gemspec(path, contents) else eval_gemspec(path, contents) end end end def clear_gemspec_cache @gemspec_cache = {} end def git_present? return @git_present if defined?(@git_present) @git_present = Bundler.which("git") || Bundler.which("git.exe") end def ruby_version @ruby_version ||= SystemRubyVersion.new end private def eval_yaml_gemspec(path, contents) # If the YAML is invalid, Syck raises an ArgumentError, and Psych # raises a Psych::SyntaxError. See psyched_yaml.rb for more info. Gem::Specification.from_yaml(contents) rescue YamlSyntaxError, ArgumentError, Gem::EndOfYAMLException, Gem::Exception eval_gemspec(path, contents) end def eval_gemspec(path, contents) eval(contents, TOPLEVEL_BINDING, path.expand_path.to_s) rescue ScriptError, StandardError => e original_line = e.backtrace.find { |line| line.include?(path.to_s) } msg = "There was a #{e.class} while loading #{path.basename}: \n#{e.message}" msg << " from\n #{original_line}" if original_line msg << "\n" if e.is_a?(LoadError) && RUBY_VERSION >= "1.9" msg << "\nDoes it try to require a relative path? That's been removed in Ruby 1.9." end raise GemspecError, msg end def configure_gem_home_and_path blank_home = ENV['GEM_HOME'].nil? || ENV['GEM_HOME'].empty? if settings[:disable_shared_gems] ENV['GEM_PATH'] = '' configure_gem_home elsif blank_home || Bundler.rubygems.gem_dir != bundle_path.to_s possibles = [Bundler.rubygems.gem_dir, Bundler.rubygems.gem_path] paths = possibles.flatten.compact.uniq.reject { |p| p.empty? } ENV["GEM_PATH"] = paths.join(File::PATH_SEPARATOR) configure_gem_home end bundle_path end def configure_gem_home # TODO: This mkdir_p is only needed for JRuby <= 1.5 and should go away (GH #602) FileUtils.mkdir_p bundle_path.to_s rescue nil ENV['GEM_HOME'] = File.expand_path(bundle_path, root) Bundler.rubygems.clear_paths end def upgrade_lockfile lockfile = default_lockfile if lockfile.exist? && lockfile.read(3) == "---" Bundler.ui.warn "Detected Gemfile.lock generated by 0.9, deleting..." lockfile.rmtree end end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/000077500000000000000000000000001446701454400327575ustar00rootroot00000000000000capistrano.rb000066400000000000000000000012621446701454400353710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler# Capistrano task for Bundler. # # Just add "require 'bundler/capistrano'" in your Capistrano deploy.rb, and # Bundler will be activated after each new deployment. require 'bundler/deployment' require 'capistrano/version' if defined?(Capistrano::Version) && Gem::Version.new(Capistrano::Version).release >= Gem::Version.new("3.0") raise "For Capistrano 3.x integration, please use http://github.com/capistrano/bundler" end Capistrano::Configuration.instance(:must_exist).load do before "deploy:finalize_update", "bundle:install" Bundler::Deployment.define_task(self, :task, :except => { :no_release => true }) set :rake, lambda { "#{fetch(:bundle_cmd, "bundle")} exec rake" } end cli.rb000066400000000000000000001141001446701454400337710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'bundler' require 'bundler/similarity_detector' require 'bundler/vendored_thor' module Bundler class CLI < Thor include Thor::Actions def self.start(*) super rescue Exception => e Bundler.ui = UI::Shell.new raise e end def initialize(*) super ENV['BUNDLE_GEMFILE'] = File.expand_path(options[:gemfile]) if options[:gemfile] Bundler::Retry.attempts = options[:retry] || Bundler.settings[:retry] || Bundler::Retry::DEFAULT_ATTEMPTS Bundler.rubygems.ui = UI::RGProxy.new(Bundler.ui) rescue UnknownArgumentError => e raise InvalidOption, e.message ensure self.options ||= {} Bundler.ui = UI::Shell.new(options) Bundler.ui.level = "debug" if options["verbose"] end check_unknown_options!(:except => [:config, :exec]) stop_on_unknown_option! :exec default_task :install class_option "no-color", :type => :boolean, :banner => "Disable colorization in output" class_option "verbose", :type => :boolean, :banner => "Enable verbose output mode", :aliases => "-V" class_option "retry", :type => :numeric, :aliases => "-r", :banner => "Specify the number of times you wish to attempt network commands" def help(cli = nil) case cli when "gemfile" then command = "gemfile.5" when nil then command = "bundle" else command = "bundle-#{cli}" end manpages = %w( bundle bundle-config bundle-exec bundle-install bundle-package bundle-update bundle-platform gemfile.5) if manpages.include?(command) root = File.expand_path("../man", __FILE__) if Bundler.which("man") && root !~ %r{^file:/.+!/META-INF/jruby.home/.+} Kernel.exec "man #{root}/#{command}" else puts File.read("#{root}/#{command}.txt") end else super end end desc "init", "Generates a Gemfile into the current working directory" long_desc <<-D Init generates a default Gemfile in the current working directory. When adding a Gemfile to a gem with a gemspec, the --gemspec option will automatically add each dependency listed in the gemspec file to the newly created Gemfile. D method_option "gemspec", :type => :string, :banner => "Use the specified .gemspec to create the Gemfile" def init opts = options.dup if File.exist?("Gemfile") Bundler.ui.error "Gemfile already exists at #{Dir.pwd}/Gemfile" exit 1 end if opts[:gemspec] gemspec = File.expand_path(opts[:gemspec]) unless File.exist?(gemspec) Bundler.ui.error "Gem specification #{gemspec} doesn't exist" exit 1 end spec = Gem::Specification.load(gemspec) puts "Writing new Gemfile to #{Dir.pwd}/Gemfile" File.open('Gemfile', 'wb') do |file| file << "# Generated from #{gemspec}\n" file << spec.to_gemfile end else puts "Writing new Gemfile to #{Dir.pwd}/Gemfile" FileUtils.cp(File.expand_path('../templates/Gemfile', __FILE__), 'Gemfile') end end desc "check", "Checks if the dependencies listed in Gemfile are satisfied by currently installed gems" long_desc <<-D Check searches the local machine for each of the gems requested in the Gemfile. If all gems are found, Bundler prints a success message and exits with a status of 0. If not, the first missing gem is listed and Bundler exits status 1. D method_option "gemfile", :type => :string, :banner => "Use the specified gemfile instead of Gemfile" method_option "path", :type => :string, :banner => "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME). Bundler will remember this value for future installs on this machine" method_option "dry-run", :type => :boolean, :default => false, :banner => "Lock the Gemfile" def check Bundler.settings[:path] = File.expand_path(options[:path]) if options[:path] begin definition = Bundler.definition definition.validate_ruby! not_installed = definition.missing_specs rescue GemNotFound, VersionConflict Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies." Bundler.ui.warn "Install missing gems with `bundle install`." exit 1 end if not_installed.any? Bundler.ui.error "The following gems are missing" not_installed.each { |s| Bundler.ui.error " * #{s.name} (#{s.version})" } Bundler.ui.warn "Install missing gems with `bundle install`" exit 1 elsif !Bundler.default_lockfile.exist? && Bundler.settings[:frozen] Bundler.ui.error "This bundle has been frozen, but there is no Gemfile.lock present" exit 1 else Bundler.load.lock unless options[:"dry-run"] Bundler.ui.info "The Gemfile's dependencies are satisfied" end end desc "install", "Install the current environment to the system" long_desc <<-D Install will install all of the gems in the current bundle, making them available for use. In a freshly checked out repository, this command will give you the same gem versions as the last person who updated the Gemfile and ran `bundle update`. Passing [DIR] to install (e.g. vendor) will cause the unpacked gems to be installed into the [DIR] directory rather than into system gems. If the bundle has already been installed, bundler will tell you so and then exit. D method_option "without", :type => :array, :banner => "Exclude gems that are part of the specified named group." method_option "gemfile", :type => :string, :banner => "Use the specified gemfile instead of Gemfile" method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache." method_option "no-cache", :type => :boolean, :banner => "Don't update the existing gem cache." method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors." method_option "local", :type => :boolean, :banner => "Do not attempt to fetch gems remotely and use the gem cache instead" method_option "binstubs", :type => :string, :lazy_default => "bin", :banner => "Generate bin stubs for bundled gems to ./bin" method_option "shebang", :type => :string, :banner => "Specify a different shebang executable name than the default (usually 'ruby')" method_option "path", :type => :string, :banner => "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME). Bundler will remember this value for future installs on this machine" method_option "system", :type => :boolean, :banner => "Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application" method_option "frozen", :type => :boolean, :banner => "Do not allow the Gemfile.lock to be updated after this install" method_option "deployment", :type => :boolean, :banner => "Install using defaults tuned for deployment environments" method_option "standalone", :type => :array, :lazy_default => [], :banner => "Make a bundle that can work without the Bundler runtime" method_option "full-index", :type => :boolean, :banner => "Use the rubygems modern index instead of the API endpoint" method_option "clean", :type => :boolean, :banner => "Run bundle clean automatically after install" method_option "trust-policy", :alias => "P", :type => :string, :banner => "Gem trust policy (like gem install -P). Must be one of " + Bundler.rubygems.security_policies.keys.join('|') unless Bundler.rubygems.security_policies.empty? method_option "jobs", :aliases => "-j", :type => :numeric, :banner => "Specify the number of jobs to run in parallel" def install opts = options.dup if opts[:without] opts[:without] = opts[:without].map{|g| g.tr(' ', ':') } end ENV['RB_USER_INSTALL'] = '1' if Bundler::FREEBSD # Just disable color in deployment mode Bundler.ui.shell = Thor::Shell::Basic.new if opts[:deployment] if (opts[:path] || opts[:deployment]) && opts[:system] Bundler.ui.error "You have specified both a path to install your gems to, \n" \ "as well as --system. Please choose." exit 1 end if (opts["trust-policy"]) unless (Bundler.rubygems.security_policies.keys.include?(opts["trust-policy"])) Bundler.ui.error "Rubygems doesn't know about trust policy '#{opts["trust-policy"]}'. " \ "The known policies are: #{Bundler.rubygems.security_policies.keys.join(', ')}." exit 1 end Bundler.settings["trust-policy"] = opts["trust-policy"] else Bundler.settings["trust-policy"] = nil if Bundler.settings["trust-policy"] end if opts[:deployment] || opts[:frozen] unless Bundler.default_lockfile.exist? flag = opts[:deployment] ? '--deployment' : '--frozen' raise ProductionError, "The #{flag} flag requires a Gemfile.lock. Please make " \ "sure you have checked your Gemfile.lock into version control " \ "before deploying." end if Bundler.root.join("vendor/cache").exist? opts[:local] = true end Bundler.settings[:frozen] = '1' end # When install is called with --no-deployment, disable deployment mode if opts[:deployment] == false Bundler.settings.delete(:frozen) opts[:system] = true end Bundler.settings[:path] = nil if opts[:system] Bundler.settings[:path] = "vendor/bundle" if opts[:deployment] Bundler.settings[:path] = opts["path"] if opts["path"] Bundler.settings[:path] ||= "bundle" if opts["standalone"] Bundler.settings[:bin] = opts["binstubs"] if opts["binstubs"] Bundler.settings[:bin] = nil if opts["binstubs"] && opts["binstubs"].empty? Bundler.settings[:shebang] = opts["shebang"] if opts["shebang"] Bundler.settings[:jobs] = opts["jobs"] if opts["jobs"] Bundler.settings[:no_prune] = true if opts["no-prune"] Bundler.settings[:clean] = opts["clean"] if opts["clean"] Bundler.settings.without = opts[:without] Bundler.ui.level = "warn" if opts[:quiet] Bundler::Fetcher.disable_endpoint = opts["full-index"] Bundler.settings[:disable_shared_gems] = Bundler.settings[:path] ? '1' : nil # rubygems plugins sometimes hook into the gem install process Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins) definition = Bundler.definition definition.validate_ruby! Installer.install(Bundler.root, definition, opts) Bundler.load.cache if Bundler.root.join("vendor/cache").exist? && !options["no-cache"] if Bundler.settings[:path] absolute_path = File.expand_path(Bundler.settings[:path]) relative_path = absolute_path.sub(File.expand_path('.'), '.') Bundler.ui.confirm "Your bundle is complete!" Bundler.ui.confirm without_groups_message if Bundler.settings.without.any? Bundler.ui.confirm "It was installed into #{relative_path}" else Bundler.ui.confirm "Your bundle is complete!" Bundler.ui.confirm without_groups_message if Bundler.settings.without.any? Bundler.ui.confirm "Use `bundle show [gemname]` to see where a bundled gem is installed." end Installer.post_install_messages.to_a.each do |name, msg| Bundler.ui.confirm "Post-install message from #{name}:" Bundler.ui.info msg end clean if Bundler.settings[:clean] && Bundler.settings[:path] rescue GemNotFound, VersionConflict => e if opts[:local] && Bundler.app_cache.exist? Bundler.ui.warn "Some gems seem to be missing from your vendor/cache directory." end if Bundler.definition.rubygems_remotes.empty? Bundler.ui.warn <<-WARN, :wrap => true Your Gemfile has no gem server sources. If you need gems that are \ not already on your machine, add a line like this to your Gemfile: source 'https://rubygems.org' WARN end raise e end desc "update", "update the current environment" long_desc <<-D Update will install the newest versions of the gems listed in the Gemfile. Use update when you have changed the Gemfile, or if you want to get the newest possible versions of the gems in the bundle. D method_option "source", :type => :array, :banner => "Update a specific source (and all gems associated with it)" method_option "local", :type => :boolean, :banner => "Do not attempt to fetch gems remotely and use the gem cache instead" method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors." method_option "full-index", :type => :boolean, :banner => "Use the rubygems modern index instead of the API endpoint" method_option "jobs", :aliases => "-j", :type => :numeric, :banner => "Specify the number of jobs to run in parallel" def update(*gems) sources = Array(options[:source]) Bundler.ui.level = "warn" if options[:quiet] if gems.empty? && sources.empty? # We're doing a full update Bundler.definition(true) else # cycle through the requested gems, just to make sure they exist names = Bundler.locked_gems.specs.map{ |s| s.name } gems.each do |g| next if names.include?(g) raise GemNotFound, not_found_message(g, names) end Bundler.definition(:gems => gems, :sources => sources) end Bundler::Fetcher.disable_endpoint = options["full-index"] opts = options.dup opts["update"] = true opts["local"] = options[:local] Bundler.settings[:jobs] = opts["jobs"] if opts["jobs"] # rubygems plugins sometimes hook into the gem install process Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins) Bundler.definition.validate_ruby! Installer.install Bundler.root, Bundler.definition, opts Bundler.load.cache if Bundler.root.join("vendor/cache").exist? clean if Bundler.settings[:clean] && Bundler.settings[:path] Bundler.ui.confirm "Your bundle is updated!" Bundler.ui.confirm without_groups_message if Bundler.settings.without.any? end desc "show [GEM]", "Shows all gems that are part of the bundle, or the path to a given gem" long_desc <<-D Show lists the names and versions of all gems that are required by your Gemfile. Calling show with [GEM] will list the exact location of that gem on your machine. D method_option "paths", :type => :boolean, :banner => "List the paths of all gems that are required by your Gemfile." def show(gem_name = nil) Bundler.ui.silence do Bundler.definition.validate_ruby! Bundler.load.lock end if gem_name if gem_name == "bundler" path = File.expand_path("../../..", __FILE__) else spec = select_spec(gem_name, :regex_match) return unless spec path = spec.full_gem_path if !File.directory?(path) Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at:" end end return Bundler.ui.info(path) end if options[:paths] Bundler.load.specs.sort_by { |s| s.name }.map do |s| Bundler.ui.info s.full_gem_path end else Bundler.ui.info "Gems included by the bundle:" Bundler.load.specs.sort_by { |s| s.name }.each do |s| Bundler.ui.info " * #{s.name} (#{s.version}#{s.git_version})" end end end map %w(list) => "show" desc "binstubs [GEM]", "install the binstubs of the listed gem" long_desc <<-D Generate binstubs for executables in [GEM]. Binstubs are put into bin, or the --binstubs directory if one has been set. D method_option "path", :type => :string, :lazy_default => "bin", :banner => "binstub destination directory (default bin)" method_option "force", :type => :boolean, :default => false, :banner => "overwrite existing binstubs if they exist" def binstubs(*gems) Bundler.definition.validate_ruby! Bundler.settings[:bin] = options["path"] if options["path"] Bundler.settings[:bin] = nil if options["path"] && options["path"].empty? installer = Installer.new(Bundler.root, Bundler.definition) if gems.empty? Bundler.ui.error "`bundle binstubs` needs at least one gem to run." exit 1 end gems.each do |gem_name| spec = installer.specs.find{|s| s.name == gem_name } raise GemNotFound, not_found_message(gem_name, Bundler.definition.specs) unless spec if spec.name == "bundler" Bundler.ui.warn "Sorry, Bundler can only be run via Rubygems." else installer.generate_bundler_executable_stubs(spec, :force => options[:force], :binstubs_cmd => true) end end end desc "outdated [GEM]", "list installed gems with newer versions available" long_desc <<-D Outdated lists the names and versions of gems that have a newer version available in the given source. Calling outdated with [GEM [GEM]] will only check for newer versions of the given gems. Prerelease gems are ignored by default. If your gems are up to date, Bundler will exit with a status of 0. Otherwise, it will exit 1. D method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems" method_option "source", :type => :array, :banner => "Check against a specific source" method_option "local", :type => :boolean, :banner => "Do not attempt to fetch gems remotely and use the gem cache instead" method_option "strict", :type => :boolean, :banner => "Only list newer versions allowed by your Gemfile requirements" def outdated(*gems) sources = Array(options[:source]) gems.each do |gem_name| select_spec(gem_name) end Bundler.definition.validate_ruby! current_specs = Bundler.ui.silence { Bundler.load.specs } current_dependencies = {} Bundler.ui.silence { Bundler.load.dependencies.each { |dep| current_dependencies[dep.name] = dep } } if gems.empty? && sources.empty? # We're doing a full update definition = Bundler.definition(true) else definition = Bundler.definition(:gems => gems, :sources => sources) end options["local"] ? definition.resolve_with_cache! : definition.resolve_remotely! Bundler.ui.info "" out_count = 0 # Loop through the current specs gemfile_specs, dependency_specs = current_specs.partition { |spec| current_dependencies.has_key? spec.name } [gemfile_specs.sort_by(&:name), dependency_specs.sort_by(&:name)].flatten.each do |current_spec| next if !gems.empty? && !gems.include?(current_spec.name) dependency = current_dependencies[current_spec.name] active_spec = definition.index[current_spec.name].sort_by { |b| b.version } if !current_spec.version.prerelease? && !options[:pre] && active_spec.size > 1 active_spec = active_spec.delete_if { |b| b.respond_to?(:version) && b.version.prerelease? } end if options["strict"] active_spec = active_spec.reverse.detect do |b| dependency && b.respond_to?(:version) && dependency.requirement.satisfied_by?(b.version) end || active_spec.last else active_spec = active_spec.last end next if active_spec.nil? gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version) git_outdated = current_spec.git_version != active_spec.git_version if gem_outdated || git_outdated if out_count == 0 if options["pre"] Bundler.ui.info "Outdated gems included in the bundle (including pre-releases):" else Bundler.ui.info "Outdated gems included in the bundle:" end end spec_version = "#{active_spec.version}#{active_spec.git_version}" current_version = "#{current_spec.version}#{current_spec.git_version}" dependency_version = %|Gemfile specifies "#{dependency.requirement}"| if dependency && dependency.specific? Bundler.ui.info " * #{active_spec.name} (#{spec_version} > #{current_version}) #{dependency_version}".rstrip out_count += 1 end Bundler.ui.debug "from #{active_spec.loaded_from}" end if out_count.zero? Bundler.ui.info "Your bundle is up to date!\n" else exit 1 end end desc "cache", "Cache all the gems to vendor/cache", :hide => true method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache." method_option "all", :type => :boolean, :banner => "Include all sources (including path and git)." def cache Bundler.definition.validate_ruby! Bundler.definition.resolve_with_cache! setup_cache_all Bundler.load.cache Bundler.settings[:no_prune] = true if options["no-prune"] Bundler.load.lock rescue GemNotFound => e Bundler.ui.error(e.message) Bundler.ui.warn "Run `bundle install` to install missing gems." exit 1 end desc "package", "Locks and then caches all of the gems into vendor/cache" method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache." method_option "all", :type => :boolean, :banner => "Include all sources (including path and git)." method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors." long_desc <<-D The package command will copy the .gem files for every gem in the bundle into the directory ./vendor/cache. If you then check that directory into your source control repository, others who check out your source will be able to install the bundle without having to download any additional gems. D def package Bundler.ui.level = "warn" if options[:quiet] setup_cache_all install # TODO: move cache contents here now that all bundles are locked Bundler.load.cache end map %w(pack) => :package desc "exec", "Run the command in context of the bundle" method_option :keep_file_descriptors, :type => :boolean, :default => false long_desc <<-D Exec runs a command, providing it access to the gems in the bundle. While using bundle exec you can require and call the bundled gems as if they were installed into the system wide Rubygems repository. D def exec(*args) Bundler.definition.validate_ruby! Bundler.load.setup_environment begin if RUBY_VERSION >= "2.0" args << { :close_others => !options.keep_file_descriptors? } elsif options.keep_file_descriptors? Bundler.ui.warn "Ruby version #{RUBY_VERSION} defaults to keeping non-standard file descriptors on Kernel#exec." end # Run Kernel.exec(*args) rescue Errno::EACCES Bundler.ui.error "bundler: not executable: #{args.first}" exit 126 rescue Errno::ENOENT Bundler.ui.error "bundler: command not found: #{args.first}" Bundler.ui.warn "Install missing gem executables with `bundle install`" exit 127 rescue ArgumentError Bundler.ui.error "bundler: exec needs a command to run" exit 128 end end desc "config NAME [VALUE]", "retrieve or set a configuration value" long_desc <<-D Retrieves or sets a configuration value. If only one parameter is provided, retrieve the value. If two parameters are provided, replace the existing value with the newly provided one. By default, setting a configuration value sets it for all projects on the machine. If a global setting is superceded by local configuration, this command will show the current value, as well as any superceded values and where they were specified. D def config(*args) peek = args.shift if peek && peek =~ /^\-\-/ name, scope = args.shift, $' else name, scope = peek, "global" end unless name Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n" Bundler.settings.all.each do |setting| Bundler.ui.confirm "#{setting}" with_padding do Bundler.settings.pretty_values_for(setting).each do |line| Bundler.ui.info line end end Bundler.ui.confirm "" end return end case scope when "delete" Bundler.settings.set_local(name, nil) Bundler.settings.set_global(name, nil) when "local", "global" if args.empty? Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used" with_padding do Bundler.settings.pretty_values_for(name).each { |line| Bundler.ui.info line } end return end locations = Bundler.settings.locations(name) if scope == "global" if local = locations[:local] Bundler.ui.info "Your application has set #{name} to #{local.inspect}. This will override the " \ "global value you are currently setting" end if env = locations[:env] Bundler.ui.info "You have a bundler environment variable for #{name} set to #{env.inspect}. " \ "This will take precedence over the global value you are setting" end if global = locations[:global] Bundler.ui.info "You are replacing the current global value of #{name}, which is currently #{global.inspect}" end end if scope == "local" && local = locations[:local] Bundler.ui.info "You are replacing the current local value of #{name}, which is currently #{local.inspect}" end if name.match(/\Alocal\./) pathname = Pathname.new(args.join(" ")) args = [pathname.expand_path.to_s] if pathname.directory? end Bundler.settings.send("set_#{scope}", name, args.join(" ")) else Bundler.ui.error "Invalid scope --#{scope} given. Please use --local or --global." exit 1 end end desc "open GEM", "Opens the source directory of the given bundled gem" def open(name) editor = [ENV['BUNDLER_EDITOR'], ENV['VISUAL'], ENV['EDITOR']].find{|e| !e.nil? && !e.empty? } return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor spec = select_spec(name, :regex_match) return unless spec Dir.chdir(spec.full_gem_path) do command = "#{editor} #{spec.full_gem_path}" success = system(command) Bundler.ui.info "Could not run '#{command}'" unless success end end desc "console [GROUP]", "Opens an IRB session with the bundle pre-loaded" def console(group = nil) group ? Bundler.require(:default, *(group.split.map! {|g| g.to_sym })) : Bundler.require ARGV.clear require 'irb' IRB.start end desc "version", "Prints the bundler's version information" def version Bundler.ui.info "Bundler version #{Bundler::VERSION}" end map %w(-v --version) => :version desc "licenses", "Prints the license of all gems in the bundle" def licenses Bundler.load.specs.sort_by { |s| s.license.to_s }.reverse.each do |s| gem_name = s.name license = s.license || s.licenses if license.empty? Bundler.ui.warn "#{gem_name}: Unknown" else Bundler.ui.info "#{gem_name}: #{license}" end end end desc 'viz', "Generates a visual dependency graph" long_desc <<-D Viz generates a PNG file of the current Gemfile as a dependency graph. Viz requires the ruby-graphviz gem (and its dependencies). The associated gems must also be installed via 'bundle install'. D method_option :file, :type => :string, :default => 'gem_graph', :aliases => '-f', :banner => "The name to use for the generated file. see format option" method_option :version, :type => :boolean, :default => false, :aliases => '-v', :banner => "Set to show each gem version." method_option :requirements, :type => :boolean, :default => false, :aliases => '-r', :banner => "Set to show the version of each required dependency." method_option :format, :type => :string, :default => "png", :aliases => '-F', :banner => "This is output format option. Supported format is png, jpg, svg, dot ..." def viz require 'graphviz' output_file = File.expand_path(options[:file]) graph = Graph.new(Bundler.load, output_file, options[:version], options[:requirements], options[:format]) graph.viz rescue LoadError => e Bundler.ui.error e.inspect Bundler.ui.warn "Make sure you have the graphviz ruby gem. You can install it with:" Bundler.ui.warn "`gem install ruby-graphviz`" rescue StandardError => e if e.message =~ /GraphViz not installed or dot not in PATH/ Bundler.ui.error e.message Bundler.ui.warn "Please install GraphViz. On a Mac with homebrew, you can run `brew install graphviz`." else raise end end desc "gem GEM", "Creates a skeleton for creating a rubygem" method_option :bin, :type => :boolean, :default => false, :aliases => '-b', :banner => "Generate a binary for your library." method_option :test, :type => :string, :lazy_default => 'rspec', :aliases => '-t', :banner => "Generate a test directory for your library: 'rspec' is the default, but 'minitest' is also supported." method_option :edit, :type => :string, :aliases => "-e", :lazy_default => [ENV['BUNDLER_EDITOR'], ENV['VISUAL'], ENV['EDITOR']].find{|e| !e.nil? && !e.empty? }, :required => false, :banner => "/path/to/your/editor", :desc => "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)" def gem(name) name = name.chomp("/") # remove trailing slash if present namespaced_path = name.tr('-', '/') target = File.join(Dir.pwd, name) constant_name = name.split('_').map{|p| p[0..0].upcase + p[1..-1] }.join constant_name = constant_name.split('-').map{|q| q[0..0].upcase + q[1..-1] }.join('::') if constant_name =~ /-/ constant_array = constant_name.split('::') git_user_name = `git config user.name`.chomp git_user_email = `git config user.email`.chomp opts = { :name => name, :namespaced_path => namespaced_path, :constant_name => constant_name, :constant_array => constant_array, :author => git_user_name.empty? ? "TODO: Write your name" : git_user_name, :email => git_user_email.empty? ? "TODO: Write your email address" : git_user_email, :test => options[:test] } gemspec_dest = File.join(target, "#{name}.gemspec") template(File.join("newgem/Gemfile.tt"), File.join(target, "Gemfile"), opts) template(File.join("newgem/Rakefile.tt"), File.join(target, "Rakefile"), opts) template(File.join("newgem/LICENSE.txt.tt"), File.join(target, "LICENSE.txt"), opts) template(File.join("newgem/README.md.tt"), File.join(target, "README.md"), opts) template(File.join("newgem/gitignore.tt"), File.join(target, ".gitignore"), opts) template(File.join("newgem/newgem.gemspec.tt"), gemspec_dest, opts) template(File.join("newgem/lib/newgem.rb.tt"), File.join(target, "lib/#{namespaced_path}.rb"), opts) template(File.join("newgem/lib/newgem/version.rb.tt"), File.join(target, "lib/#{namespaced_path}/version.rb"), opts) if options[:bin] template(File.join("newgem/bin/newgem.tt"), File.join(target, 'bin', name), opts) end case options[:test] when 'rspec' template(File.join("newgem/rspec.tt"), File.join(target, ".rspec"), opts) template(File.join("newgem/spec/spec_helper.rb.tt"), File.join(target, "spec/spec_helper.rb"), opts) template(File.join("newgem/spec/newgem_spec.rb.tt"), File.join(target, "spec/#{namespaced_path}_spec.rb"), opts) when 'minitest' template(File.join("newgem/test/minitest_helper.rb.tt"), File.join(target, "test/minitest_helper.rb"), opts) template(File.join("newgem/test/test_newgem.rb.tt"), File.join(target, "test/test_#{namespaced_path}.rb"), opts) end if options[:test] template(File.join("newgem/.travis.yml.tt"), File.join(target, ".travis.yml"), opts) end Bundler.ui.info "Initializing git repo in #{target}" Dir.chdir(target) { `git init`; `git add .` } if options[:edit] run("#{options["edit"]} \"#{gemspec_dest}\"") # Open gemspec in editor end end def self.source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates')) end desc "clean", "Cleans up unused gems in your bundler directory" method_option "dry-run", :type => :boolean, :default => false, :banner => "only print out changes, do not actually clean gems" method_option "force", :type => :boolean, :default => false, :banner => "forces clean even if --path is not set" def clean if Bundler.settings[:path] || options[:force] Bundler.load.clean(options[:"dry-run"]) else Bundler.ui.error "Can only use bundle clean when --path is set or --force is set" exit 1 end end desc "platform", "Displays platform compatibility information" method_option "ruby", :type => :boolean, :default => false, :banner => "only display ruby related platform information" def platform platforms, ruby_version = Bundler.ui.silence do [ Bundler.definition.platforms.map {|p| "* #{p}" }, Bundler.definition.ruby_version ] end output = [] if options[:ruby] if ruby_version output << ruby_version else output << "No ruby version specified" end else output << "Your platform is: #{RUBY_PLATFORM}" output << "Your app has gems that work on these platforms:\n#{platforms.join("\n")}" if ruby_version output << "Your Gemfile specifies a Ruby version requirement:\n* #{ruby_version}" begin Bundler.definition.validate_ruby! output << "Your current platform satisfies the Ruby version requirement." rescue RubyVersionMismatch => e output << e.message end else output << "Your Gemfile does not specify a Ruby version requirement." end end Bundler.ui.info output.join("\n\n") end desc "inject GEM VERSION ...", "Add the named gem(s), with version requirements, to the resolved Gemfile" def inject(name, version, *gems) # The required arguments allow Thor to give useful feedback when the arguments # are incorrect. This adds those first two arguments onto the list as a whole. gems.unshift(version).unshift(name) # Build an array of Dependency objects out of the arguments deps = [] gems.each_slice(2) do |gem_name, gem_version| deps << Bundler::Dependency.new(gem_name, gem_version) end added = Injector.inject(deps) if added.any? Bundler.ui.confirm "Added to Gemfile:" Bundler.ui.confirm added.map{ |g| " #{g}" }.join("\n") else Bundler.ui.confirm "All injected gems were already present in the Gemfile" end end desc "env", "Print information about the environment Bundler is running under" def env Env.new.write($stdout) end private def setup_cache_all Bundler.settings[:cache_all] = options[:all] if options.key?("all") if Bundler.definition.sources.any? { |s| !s.is_a?(Source::Rubygems) } && !Bundler.settings[:cache_all] Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \ "to package them as well, please pass the --all flag. This will be the default " \ "on Bundler 2.0." end end def select_spec(name, regex_match = nil) specs = [] regexp = Regexp.new(name) if regex_match Bundler.definition.specs.each do |spec| return spec if spec.name == name specs << spec if regexp && spec.name =~ regexp end case specs.count when 0 raise GemNotFound, not_found_message(name, Bundler.definition.dependencies) when 1 specs.first else specs.each_with_index do |spec, index| Bundler.ui.info "#{index.succ} : #{spec.name}", true end Bundler.ui.info '0 : - exit -', true input = Bundler.ui.ask('> ') (num = input.to_i) > 0 ? specs[num - 1] : nil end end def not_found_message(missing_gem_name, alternatives) message = "Could not find gem '#{missing_gem_name}'." # This is called as the result of a GemNotFound, let's see if # there's any similarly named ones we can propose instead alternate_names = alternatives.map { |a| a.respond_to?(:name) ? a.name : a } suggestions = SimilarityDetector.new(alternate_names).similar_word_list(missing_gem_name) message += "\nDid you mean #{suggestions}?" if suggestions message end def without_groups_message groups = Bundler.settings.without group_list = [groups[0...-1].join(", "), groups[-1..-1]]. reject{|s| s.to_s.empty? }.join(" and ") group_str = (groups.size == 1) ? "group" : "groups" "Gems in the #{group_str} #{group_list} were not installed." end end end constants.rb000066400000000000000000000002671446701454400352460ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler WINDOWS = RbConfig::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw)! FREEBSD = RbConfig::CONFIG["host_os"] =~ /bsd/ NULL = WINDOWS ? "NUL" : "/dev/null" end current_ruby.rb000066400000000000000000000036721446701454400357600ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler # Returns current version of Ruby # # @return [CurrentRuby] Current version of Ruby def self.current_ruby @current_ruby ||= CurrentRuby.new end class CurrentRuby def on_18? RUBY_VERSION =~ /^1\.8/ end def on_19? RUBY_VERSION =~ /^1\.9/ end def on_20? RUBY_VERSION =~ /^2\.0/ end def on_21? RUBY_VERSION =~ /^2\.1/ end def ruby? !mswin? && (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" || RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev") end def ruby_18? ruby? && on_18? end def ruby_19? ruby? && on_19? end def ruby_20? ruby? && on_20? end def ruby_21? ruby? && on_21? end def mri? !mswin? && (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby") end def mri_18? mri? && on_18? end def mri_19? mri? && on_19? end def mri_20? mri? && on_20? end def mri_21? mri? && on_21? end def rbx? ruby? && defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx" end def jruby? defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby" end def jruby_18? jruby? && on_18? end def jruby_19? jruby? && on_19? end def maglev? defined?(RUBY_ENGINE) && RUBY_ENGINE == "maglev" end def mswin? Bundler::WINDOWS end def mingw? Bundler::WINDOWS && Gem::Platform.local.os == "mingw32" && Gem::Platform.local.cpu != 'x64' end def mingw_18? mingw? && on_18? end def mingw_19? mingw? && on_19? end def mingw_20? mingw? && on_20? end def mingw_21? mingw? && on_21? end def x64_mingw? Bundler::WINDOWS && Gem::Platform.local.os == "mingw32" && Gem::Platform.local.cpu == 'x64' end def x64_mingw_20? x64_mingw? && on_20? end def x64_mingw_21? x64_mingw? && on_21? end end end definition.rb000066400000000000000000000463211446701454400353630ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire "digest/sha1" require "set" module Bundler class Definition include GemHelpers attr_reader :dependencies, :platforms, :sources, :ruby_version, :locked_deps # Given a gemfile and lockfile creates a Bundler definition # # @param gemfile [Pathname] Path to Gemfile # @param lockfile [Pathname,nil] Path to Gemfile.lock # @param unlock [Hash, Boolean, nil] Gems that have been requested # to be updated or true if all gems should be updated # @return [Bundler::Definition] def self.build(gemfile, lockfile, unlock) unlock ||= {} gemfile = Pathname.new(gemfile).expand_path unless gemfile.file? raise GemfileNotFound, "#{gemfile} not found" end Dsl.evaluate(gemfile, lockfile, unlock) end # # How does the new system work? # # * Load information from Gemfile and Lockfile # * Invalidate stale locked specs # * All specs from stale source are stale # * All specs that are reachable only through a stale # dependency are stale. # * If all fresh dependencies are satisfied by the locked # specs, then we can try to resolve locally. # # @param lockfile [Pathname] Path to Gemfile.lock # @param dependencies [Array(Bundler::Dependency)] array of dependencies from Gemfile # @param sources [Array(Bundler::Source::Rubygems)] # @param unlock [Hash, Boolean, nil] Gems that have been requested # to be updated or true if all gems should be updated # @param ruby_version [Bundler::RubyVersion, nil] Requested Ruby Version def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil) @unlocking = unlock == true || !unlock.empty? @dependencies, @sources, @unlock = dependencies, sources, unlock @remote = false @specs = nil @lockfile_contents = "" @ruby_version = ruby_version if lockfile && File.exist?(lockfile) @lockfile_contents = Bundler.read_file(lockfile) locked = LockfileParser.new(@lockfile_contents) @platforms = locked.platforms if unlock != true @locked_deps = locked.dependencies @locked_specs = SpecSet.new(locked.specs) @locked_sources = locked.sources else @unlock = {} @locked_deps = [] @locked_specs = SpecSet.new([]) @locked_sources = [] end else @unlock = {} @platforms = [] @locked_deps = [] @locked_specs = SpecSet.new([]) @locked_sources = [] end @unlock[:gems] ||= [] @unlock[:sources] ||= [] current_platform = Bundler.rubygems.platforms.map { |p| generic(p) }.compact.last @new_platform = !@platforms.include?(current_platform) @platforms |= [current_platform] @path_changes = converge_paths eager_unlock = expand_dependencies(@unlock[:gems]) @unlock[:gems] = @locked_specs.for(eager_unlock).map { |s| s.name } @source_changes = converge_sources @dependency_changes = converge_dependencies @local_changes = converge_locals fixup_dependency_types! end def fixup_dependency_types! # XXX This is a temporary workaround for a bug when using rubygems 1.8.15 # where Gem::Dependency#== matches Gem::Dependency#type. As the lockfile # doesn't carry a notion of the dependency type, if you use # add_development_dependency in a gemspec that's loaded with the gemspec # directive, the lockfile dependencies and resolved dependencies end up # with a mismatch on #type. # Test coverage to catch a regression on this is in gemspec_spec.rb @dependencies.each do |d| if ld = @locked_deps.find { |l| l.name == d.name } ld.instance_variable_set(:@type, d.type) end end end def resolve_with_cache! raise "Specs already loaded" if @specs @sources.each { |s| s.cached! } specs end def resolve_remotely! raise "Specs already loaded" if @specs @remote = true @sources.each { |s| s.remote! } specs end # For given dependency list returns a SpecSet with Gemspec of all the required # dependencies. # 1. The method first resolves the dependencies specified in Gemfile # 2. After that it tries and fetches gemspec of resolved dependencies # # @return [Bundler::SpecSet] def specs @specs ||= begin specs = resolve.materialize(requested_dependencies) unless specs["bundler"].any? local = Bundler.settings[:frozen] ? rubygems_index : index bundler = local.search(Gem::Dependency.new('bundler', VERSION)).last specs["bundler"] = bundler if bundler end specs end end def new_specs specs - @locked_specs end def removed_specs @locked_specs - specs end def new_platform? @new_platform end def missing_specs missing = [] resolve.materialize(requested_dependencies, missing) missing end def requested_specs @requested_specs ||= begin groups = self.groups - Bundler.settings.without groups.map! { |g| g.to_sym } specs_for(groups) end end def current_dependencies dependencies.reject { |d| !d.should_include? } end def specs_for(groups) deps = dependencies.select { |d| (d.groups & groups).any? } deps.delete_if { |d| !d.should_include? } specs.for(expand_dependencies(deps)) end # Resolve all the dependencies specified in Gemfile. It ensures that # dependencies that have been already resolved via locked file and are fresh # are reused when resolving dependencies # # @return [SpecSet] resolved dependencies def resolve @resolve ||= begin if Bundler.settings[:frozen] || (!@unlocking && nothing_changed?) @locked_specs else last_resolve = converge_locked_specs # Record the specs available in each gem's source, so that those # specs will be available later when the resolver knows where to # look for that gemspec (or its dependencies) source_requirements = {} dependencies.each do |dep| next unless dep.source source_requirements[dep.name] = dep.source.specs end # Run a resolve against the locally available gems last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve) end end end def index @index ||= Index.build do |idx| dependency_names = @dependencies.dup || [] dependency_names.map! {|d| d.name } @sources.each do |s| if s.is_a?(Bundler::Source::Rubygems) s.dependency_names = dependency_names.uniq idx.add_source s.specs else source_index = s.specs dependency_names += source_index.unmet_dependency_names idx.add_source source_index end end end end # used when frozen is enabled so we can find the bundler # spec, even if (say) a git gem is not checked out. def rubygems_index @rubygems_index ||= Index.build do |idx| rubygems = @sources.find{|s| s.is_a?(Source::Rubygems) } idx.add_source rubygems.specs end end def rubygems_remotes @sources.select{|s| s.is_a?(Source::Rubygems) }.map{|s| s.remotes }.flatten end def groups dependencies.map { |d| d.groups }.flatten.uniq end def lock(file) contents = to_lock # Convert to \r\n if the existing lock has them # i.e., Windows with `git config core.autocrlf=true` contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match("\r\n") return if @lockfile_contents == contents if Bundler.settings[:frozen] Bundler.ui.error "Cannot write a changed lockfile while frozen." return end File.open(file, 'wb'){|f| f.puts(contents) } rescue Errno::EACCES raise Bundler::InstallError, "There was an error while trying to write to Gemfile.lock. It is likely that \n" \ "you need to allow write permissions for the file at path: \n" \ "#{File.expand_path(file)}" end def to_lock out = "" sorted_sources.each do |source| # Add the source header out << source.to_lock # Find all specs for this source resolve. select { |s| s.source == source }. # This needs to be sorted by full name so that # gems with the same name, but different platform # are ordered consistently sort_by { |s| s.full_name }. each do |spec| next if spec.name == 'bundler' out << spec.to_lock end out << "\n" end out << "PLATFORMS\n" platforms.map { |p| p.to_s }.sort.each do |p| out << " #{p}\n" end out << "\n" out << "DEPENDENCIES\n" handled = [] dependencies. sort_by { |d| d.to_s }. each do |dep| next if handled.include?(dep.name) out << dep.to_lock handled << dep.name end out end def ensure_equivalent_gemfile_and_lockfile(explicit_flag = false) changes = false msg = "You are trying to install in deployment mode after changing\n" \ "your Gemfile. Run `bundle install` elsewhere and add the\n" \ "updated Gemfile.lock to version control." unless explicit_flag msg += "\n\nIf this is a development machine, remove the Gemfile " \ "freeze \nby running `bundle install --no-deployment`." end added = [] deleted = [] changed = [] if @locked_sources != @sources new_sources = @sources - @locked_sources deleted_sources = @locked_sources - @sources if new_sources.any? added.concat new_sources.map { |source| "* source: #{source}" } end if deleted_sources.any? deleted.concat deleted_sources.map { |source| "* source: #{source}" } end changes = true end both_sources = Hash.new { |h,k| h[k] = ["no specified source", "no specified source"] } @dependencies.each { |d| both_sources[d.name][0] = d.source if d.source } @locked_deps.each { |d| both_sources[d.name][1] = d.source if d.source } both_sources.delete_if { |k,v| v[0] == v[1] } if @dependencies != @locked_deps new_deps = @dependencies - @locked_deps deleted_deps = @locked_deps - @dependencies if new_deps.any? added.concat new_deps.map { |d| "* #{pretty_dep(d)}" } end if deleted_deps.any? deleted.concat deleted_deps.map { |d| "* #{pretty_dep(d)}" } end both_sources.each do |name, sources| changed << "* #{name} from `#{sources[0]}` to `#{sources[1]}`" end changes = true end msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any? msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any? msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any? msg << "\n" raise ProductionError, msg if added.any? || deleted.any? || changed.any? end def validate_ruby! return unless ruby_version if diff = ruby_version.diff(Bundler.ruby_version) problem, expected, actual = diff msg = case problem when :engine "Your Ruby engine is #{actual}, but your Gemfile specified #{expected}" when :version "Your Ruby version is #{actual}, but your Gemfile specified #{expected}" when :engine_version "Your #{Bundler.ruby_version.engine} version is #{actual}, but your Gemfile specified #{ruby_version.engine} #{expected}" when :patchlevel if !expected.is_a?(String) "The Ruby patchlevel in your Gemfile must be a string" else "Your Ruby patchlevel is #{actual}, but your Gemfile specified #{expected}" end end raise RubyVersionMismatch, msg end end private def nothing_changed? !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes end def pretty_dep(dep, source = false) msg = "#{dep.name}" msg << " (#{dep.requirement})" unless dep.requirement == Gem::Requirement.default msg << " from the `#{dep.source}` source" if source && dep.source msg end # Check if the specs of the given source changed # according to the locked source. A block should be # in order to specify how the locked version of # the source should be found. def specs_changed?(source, &block) locked = @locked_sources.find(&block) if locked unlocking = locked.specs.any? do |spec| @locked_specs.any? do |locked_spec| locked_spec.source != locked end end end !locked || unlocking || source.specs != locked.specs end # Get all locals and override their matching sources. # Return true if any of the locals changed (for example, # they point to a new revision) or depend on new specs. def converge_locals locals = [] Bundler.settings.local_overrides.map do |k,v| spec = @dependencies.find { |s| s.name == k } source = spec && spec.source if source && source.respond_to?(:local_override!) source.unlock! if @unlock[:gems].include?(spec.name) locals << [ source, source.local_override!(v) ] end end locals.any? do |source, changed| changed || specs_changed?(source) { |o| source.class === o.class && source.uri == o.uri } end end def converge_paths @sources.any? do |source| next unless source.instance_of?(Source::Path) specs_changed?(source) do |ls| ls.class == source.class && ls.path == source.path end end end def converge_sources changes = false # Get the Rubygems source from the Gemfile.lock locked_gem = @locked_sources.find { |s| Source::Rubygems === s } # Get the Rubygems source from the Gemfile actual_gem = @sources.find { |s| Source::Rubygems === s } # If there is a Rubygems source in both if locked_gem && actual_gem # Merge the remotes from the Gemfile into the Gemfile.lock changes = changes | locked_gem.replace_remotes(actual_gem) end # Replace the sources from the Gemfile with the sources from the Gemfile.lock, # if they exist in the Gemfile.lock and are `==`. If you can't find an equivalent # source in the Gemfile.lock, use the one from the Gemfile. @sources.map! do |source| @locked_sources.find { |s| s == source } || source end changes = changes | (Set.new(@sources) != Set.new(@locked_sources)) @sources.each do |source| # If the source is unlockable and the current command allows an unlock of # the source (for example, you are doing a `bundle update ` of a git-pinned # gem), unlock it. For git sources, this means to unlock the revision, which # will cause the `ref` used to be the most recent for the branch (or master) if # an explicit `ref` is not used. if source.respond_to?(:unlock!) && @unlock[:sources].include?(source.name) source.unlock! changes = true end end changes end def converge_dependencies (@dependencies + @locked_deps).each do |dep| if dep.source dep.source = @sources.find { |s| dep.source == s } end end Set.new(@dependencies) != Set.new(@locked_deps) end # Remove elements from the locked specs that are expired. This will most # commonly happen if the Gemfile has changed since the lockfile was last # generated def converge_locked_specs deps = [] # Build a list of dependencies that are the same in the Gemfile # and Gemfile.lock. If the Gemfile modified a dependency, but # the gem in the Gemfile.lock still satisfies it, this is fine # too. @dependencies.each do |dep| locked_dep = @locked_deps.find { |d| dep == d } if in_locked_deps?(dep, locked_dep) || satisfies_locked_spec?(dep) deps << dep elsif dep.source.is_a?(Source::Path) && dep.current_platform? && (!locked_dep || dep.source != locked_dep.source) @locked_specs.each do |s| @unlock[:gems] << s.name if s.source == dep.source end dep.source.unlock! if dep.source.respond_to?(:unlock!) dep.source.specs.each { |s| @unlock[:gems] << s.name } end end converged = [] @locked_specs.each do |s| s.source = @sources.find { |src| s.source == src } # Don't add a spec to the list if its source is expired. For example, # if you change a Git gem to Rubygems. next if s.source.nil? || @unlock[:sources].include?(s.name) # If the spec is from a path source and it doesn't exist anymore # then we just unlock it. # Path sources have special logic if s.source.instance_of?(Source::Path) other = s.source.specs[s].first # If the spec is no longer in the path source, unlock it. This # commonly happens if the version changed in the gemspec next unless other deps2 = other.dependencies.select { |d| d.type != :development } # If the dependencies of the path source have changed, unlock it next unless s.dependencies.sort == deps2.sort end converged << s end resolve = SpecSet.new(converged) resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems]) diff = @locked_specs.to_a - resolve.to_a # Now, we unlock any sources that do not have anymore gems pinned to it @sources.each do |source| next unless source.respond_to?(:unlock!) unless resolve.any? { |s| s.source == source } source.unlock! if !diff.empty? && diff.any? { |s| s.source == source } end end resolve end def in_locked_deps?(dep, d) d && dep.source == d.source end def satisfies_locked_spec?(dep) @locked_specs.any? { |s| s.satisfies?(dep) && (!dep.source || s.source == dep.source) } end def expanded_dependencies @expanded_dependencies ||= expand_dependencies(dependencies, @remote) end def expand_dependencies(dependencies, remote = false) deps = [] dependencies.each do |dep| dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name) dep.gem_platforms(@platforms).each do |p| deps << DepProxy.new(dep, p) if remote || p == generic(Gem::Platform.local) end end deps end def sorted_sources @sources.sort_by do |s| # Place GEM at the top [ s.is_a?(Source::Rubygems) ? 1 : 0, s.to_s ] end end def requested_dependencies groups = self.groups - Bundler.settings.without groups.map! { |g| g.to_sym } dependencies.reject { |d| !d.should_include? || (d.groups & groups).empty? } end end end dep_proxy.rb000066400000000000000000000011311446701454400352320ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class DepProxy attr_reader :required_by, :__platform, :dep def initialize(dep, platform) @dep, @__platform, @required_by = dep, platform, [] end def hash @hash ||= dep.hash end def ==(o) dep == o.dep && __platform == o.__platform end alias eql? == def type @dep.type end def name @dep.name end def requirement @dep.requirement end def to_s "#{name} (#{requirement}) #{__platform}" end private def method_missing(*args) @dep.send(*args) end end end dependency.rb000066400000000000000000000051351446701454400353470ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'rubygems/dependency' require 'bundler/shared_helpers' require 'bundler/rubygems_ext' module Bundler class Dependency < Gem::Dependency attr_reader :autorequire attr_reader :groups attr_reader :platforms PLATFORM_MAP = { :ruby => Gem::Platform::RUBY, :ruby_18 => Gem::Platform::RUBY, :ruby_19 => Gem::Platform::RUBY, :ruby_20 => Gem::Platform::RUBY, :ruby_21 => Gem::Platform::RUBY, :mri => Gem::Platform::RUBY, :mri_18 => Gem::Platform::RUBY, :mri_19 => Gem::Platform::RUBY, :mri_20 => Gem::Platform::RUBY, :mri_21 => Gem::Platform::RUBY, :rbx => Gem::Platform::RUBY, :jruby => Gem::Platform::JAVA, :jruby_18 => Gem::Platform::JAVA, :jruby_19 => Gem::Platform::JAVA, :mswin => Gem::Platform::MSWIN, :mingw => Gem::Platform::MINGW, :mingw_18 => Gem::Platform::MINGW, :mingw_19 => Gem::Platform::MINGW, :mingw_20 => Gem::Platform::MINGW, :mingw_21 => Gem::Platform::MINGW, :x64_mingw => Gem::Platform::X64_MINGW, :x64_mingw_20 => Gem::Platform::X64_MINGW, :x64_mingw_21 => Gem::Platform::X64_MINGW }.freeze def initialize(name, version, options = {}, &blk) type = options["type"] || :runtime super(name, version, type) @autorequire = nil @groups = Array(options["group"] || :default).map { |g| g.to_sym } @source = options["source"] @platforms = Array(options["platforms"]) @env = options["env"] if options.key?('require') @autorequire = Array(options['require'] || []) end end def gem_platforms(valid_platforms) return valid_platforms if @platforms.empty? platforms = [] @platforms.each do |p| platform = PLATFORM_MAP[p] next unless valid_platforms.include?(platform) platforms |= [platform] end platforms end def should_include? current_env? && current_platform? end def current_env? return true unless @env if Hash === @env @env.all? do |key, val| ENV[key.to_s] && (String === val ? ENV[key.to_s] == val : ENV[key.to_s] =~ val) end else ENV[@env.to_s] end end def current_platform? return true if @platforms.empty? @platforms.any? { |p| Bundler.current_ruby.send("#{p}?") } end def to_lock out = super out << '!' if source out << "\n" end def specific? super rescue NoMethodError requirement != ">= 0" end end end deployment.rb000066400000000000000000000053611446701454400354120ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class Deployment def self.define_task(context, task_method = :task, opts = {}) if defined?(Capistrano) && context.is_a?(Capistrano::Configuration) context_name = "capistrano" role_default = "{:except => {:no_release => true}}" error_type = ::Capistrano::CommandError else context_name = "vlad" role_default = "[:app]" error_type = ::Rake::CommandFailedError end roles = context.fetch(:bundle_roles, false) opts[:roles] = roles if roles context.send :namespace, :bundle do send :desc, <<-DESC Install the current Bundler environment. By default, gems will be \ installed to the shared/bundle path. Gems in the development and \ test group will not be installed. The install command is executed \ with the --deployment and --quiet flags. If the bundle cmd cannot \ be found then you can override the bundle_cmd variable to specify \ which one it should use. The base path to the app is fetched from \ the :latest_release variable. Set it for custom deploy layouts. You can override any of these defaults by setting the variables shown below. N.B. bundle_roles must be defined before you require 'bundler/#{context_name}' \ in your deploy.rb file. set :bundle_gemfile, "Gemfile" set :bundle_dir, File.join(fetch(:shared_path), 'bundle') set :bundle_flags, "--deployment --quiet" set :bundle_without, [:development, :test] set :bundle_cmd, "bundle" # e.g. "/opt/ruby/bin/bundle" set :bundle_roles, #{role_default} # e.g. [:app, :batch] DESC send task_method, :install, opts do bundle_cmd = context.fetch(:bundle_cmd, "bundle") bundle_flags = context.fetch(:bundle_flags, "--deployment --quiet") bundle_dir = context.fetch(:bundle_dir, File.join(context.fetch(:shared_path), 'bundle')) bundle_gemfile = context.fetch(:bundle_gemfile, "Gemfile") bundle_without = [*context.fetch(:bundle_without, [:development, :test])].compact app_path = context.fetch(:latest_release) if app_path.to_s.empty? raise error_type.new("Cannot detect current release path - make sure you have deployed at least once.") end args = ["--gemfile #{File.join(app_path, bundle_gemfile)}"] args << "--path #{bundle_dir}" unless bundle_dir.to_s.empty? args << bundle_flags.to_s args << "--without #{bundle_without.join(" ")}" unless bundle_without.empty? run "cd #{app_path} && #{bundle_cmd} install #{args.join(' ')}" end end end end end deprecate.rb000066400000000000000000000004161446701454400351620ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler if defined? ::Deprecate Deprecate = ::Deprecate elsif defined? Gem::Deprecate Deprecate = Gem::Deprecate else class Deprecate; end end unless Deprecate.respond_to?(:skip_during) def Deprecate.skip_during; yield; end end end dsl.rb000066400000000000000000000212221446701454400340060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'bundler/dependency' module Bundler class Dsl include RubyDsl def self.evaluate(gemfile, lockfile, unlock) builder = new builder.eval_gemfile(gemfile) builder.to_definition(lockfile, unlock) end VALID_PLATFORMS = Bundler::Dependency::PLATFORM_MAP.keys.freeze attr_accessor :dependencies def initialize @rubygems_source = Source::Rubygems.new @source = nil @sources = [] @dependencies = [] @groups = [] @platforms = [] @env = nil @ruby_version = nil end def eval_gemfile(gemfile, contents = nil) contents ||= Bundler.read_file(gemfile.to_s) instance_eval(contents, gemfile.to_s, 1) rescue SyntaxError => e bt = e.message.split("\n")[1..-1] raise GemfileError, ["Gemfile syntax error:", *bt].join("\n") rescue ScriptError, RegexpError, NameError, ArgumentError => e e.backtrace[0] = "#{e.backtrace[0]}: #{e.message} (#{e.class})" Bundler.ui.warn e.backtrace.join("\n ") raise GemfileError, "There was an error in your Gemfile," \ " and Bundler cannot continue." end def gemspec(opts = nil) path = opts && opts[:path] || '.' name = opts && opts[:name] || '{,*}' development_group = opts && opts[:development_group] || :development expanded_path = File.expand_path(path, Bundler.default_gemfile.dirname) gemspecs = Dir[File.join(expanded_path, "#{name}.gemspec")] case gemspecs.size when 1 spec = Bundler.load_gemspec(gemspecs.first) raise InvalidOption, "There was an error loading the gemspec at #{gemspecs.first}." unless spec gem spec.name, :path => path group(development_group) do spec.development_dependencies.each do |dep| gem dep.name, *(dep.requirement.as_list + [:type => :development]) end end when 0 raise InvalidOption, "There are no gemspecs at #{expanded_path}." else raise InvalidOption, "There are multiple gemspecs at #{expanded_path}. Please use the :name option to specify which one." end end def gem(name, *args) if name.is_a?(Symbol) raise GemfileError, %{You need to specify gem names as Strings. Use 'gem "#{name.to_s}"' instead.} end options = Hash === args.last ? args.pop.dup : {} version = args _normalize_options(name, version, options) dep = Dependency.new(name, version, options) # if there's already a dependency with this name we try to prefer one if current = @dependencies.find { |d| d.name == dep.name } if current.requirement != dep.requirement if current.type == :development @dependencies.delete current elsif dep.type == :development return else raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \ "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" end else Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \ "You should probably keep only one of them.\n" \ "While it's not a problem now, it could cause errors if you change the version of just one of them later." end if current.source != dep.source if current.type == :development @dependencies.delete current elsif dep.type == :development return else raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \ "You specified that #{dep.name} (#{dep.requirement}) should come from " \ "#{current.source || 'an unspecified source'} and #{dep.source}\n" end end end @dependencies << dep end def source(source, options = {}) case source when :gemcutter, :rubygems, :rubyforge then Bundler.ui.warn "The source :#{source} is deprecated because HTTP " \ "requests are insecure.\nPlease change your source to 'https://" \ "rubygems.org' if possible, or 'http://rubygems.org' if not." @rubygems_source.add_remote "http://rubygems.org" return when String @rubygems_source.add_remote source return else @source = source if options[:prepend] @sources = [@source] | @sources else @sources = @sources | [@source] end yield if block_given? return @source end ensure @source = nil end def path(path, options = {}, source_options = {}, &blk) source Source::Path.new(_normalize_hash(options).merge("path" => Pathname.new(path))), source_options, &blk end def git(uri, options = {}, source_options = {}, &blk) unless block_given? msg = "You can no longer specify a git source by itself. Instead, \n" \ "either use the :git option on a gem, or specify the gems that \n" \ "bundler should find in the git source by passing a block to \n" \ "the git method, like: \n\n" \ " git 'git://github.com/rails/rails.git' do\n" \ " gem 'rails'\n" \ " end" raise DeprecatedError, msg end source Source::Git.new(_normalize_hash(options).merge("uri" => uri)), source_options, &blk end def to_definition(lockfile, unlock) @sources << @rubygems_source unless @sources.include?(@rubygems_source) Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version) end def group(*args, &blk) @groups.concat args yield ensure args.each { @groups.pop } end def platforms(*platforms) @platforms.concat platforms yield ensure platforms.each { @platforms.pop } end alias_method :platform, :platforms def env(name) @env, old = name, @env yield ensure @env = old end def method_missing(name, *args) location = caller[0].split(':')[0..1].join(':') raise GemfileError, "Undefined local variable or method `#{name}' for Gemfile\n" \ " from #{location}" end private def _normalize_hash(opts) # Cannot modify a hash during an iteration in 1.9 opts.keys.each do |k| next if String === k v = opts[k] opts.delete(k) opts[k.to_s] = v end opts end def _normalize_options(name, version, opts) _normalize_hash(opts) valid_keys = %w(group groups git gist github path name branch ref tag require submodules platform platforms type) invalid_keys = opts.keys - valid_keys if invalid_keys.any? plural = invalid_keys.size > 1 message = "You passed #{invalid_keys.map{|k| ':'+k }.join(", ")} " if plural message << "as options for gem '#{name}', but they are invalid." else message << "as an option for gem '#{name}', but it is invalid." end message << " Valid options are: #{valid_keys.join(", ")}" raise InvalidOption, message end groups = @groups.dup opts["group"] = opts.delete("groups") || opts["group"] groups.concat Array(opts.delete("group")) groups = [:default] if groups.empty? platforms = @platforms.dup opts["platforms"] = opts["platform"] || opts["platforms"] platforms.concat Array(opts.delete("platforms")) platforms.map! { |p| p.to_sym } platforms.each do |p| next if VALID_PLATFORMS.include?(p) raise GemfileError, "`#{p}` is not a valid platform. The available options are: #{VALID_PLATFORMS.inspect}" end if github = opts.delete("github") github = "#{github}/#{github}" unless github.include?("/") opts["git"] = "git://github.com/#{github}.git" end if gist = opts.delete("gist") opts["git"] = "https://gist.github.com/#{gist}.git" end ["git", "path"].each do |type| if param = opts[type] if version.first && version.first =~ /^\s*=?\s*(\d[^\s]*)\s*$/ options = opts.merge("name" => name, "version" => $1) else options = opts.dup end source = send(type, param, options, :prepend => true) {} opts["source"] = source end end opts["source"] ||= @source opts["env"] ||= @env opts["platforms"] = platforms.dup opts["group"] = groups end end end endpoint_specification.rb000066400000000000000000000035201446701454400377450ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler # used for Creating Specifications from the Gemcutter Endpoint class EndpointSpecification < Gem::Specification include MatchPlatform attr_reader :name, :version, :platform, :dependencies attr_accessor :source, :source_uri def initialize(name, version, platform, dependencies) @name = name @version = version @platform = platform @dependencies = dependencies end def fetch_platform @platform end # needed for standalone, load required_paths from local gemspec # after the gem in installed def require_paths if @remote_specification @remote_specification.require_paths elsif _local_specification _local_specification.require_paths else super end end # needed for binstubs def executables if @remote_specification @remote_specification.executables elsif _local_specification _local_specification.executables else super end end # needed for bundle clean def bindir if @remote_specification @remote_specification.bindir elsif _local_specification _local_specification.bindir else super end end # needed for post_install_messages during install def post_install_message if @remote_specification @remote_specification.post_install_message elsif _local_specification _local_specification.post_install_message end end def _local_specification eval(File.read(local_specification_path)) if @loaded_from && File.exists?(local_specification_path) end def __swap__(spec) @remote_specification = spec end private def local_specification_path "#{base_dir}/specifications/#{full_name}.gemspec" end end end env.rb000066400000000000000000000026141446701454400340200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class Env def write(io) io.write(report) end def report out = "Bundler #{Bundler::VERSION}\n" out << "Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}" out << " patchlevel #{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL out << ") [#{RUBY_PLATFORM}]\n" out << "Rubygems #{Gem::VERSION}\n" out << "rvm #{ENV['rvm_version']}\n" if ENV['rvm_version'] out << "GEM_HOME #{ENV['GEM_HOME']}\n" out << "GEM_PATH #{ENV['GEM_PATH']}\n" unless ENV['GEM_PATH'] == ENV['GEM_HOME'] %w(rubygems-bundler open_gem).each do |name| specs = Gem::Specification.find_all{|s| s.name == name } out << "#{name} (#{specs.map(&:version).join(',')})\n" unless specs.empty? end out << "\nBundler settings\n" unless Bundler.settings.all.empty? Bundler.settings.all.each do |setting| out << " #{setting}\n" Bundler.settings.pretty_values_for(setting).each do |line| out << " " << line << "\n" end end out << "\n\n" << "Gemfile\n" out << read_file("Gemfile") << "\n" out << "\n\n" << "Gemfile.lock\n" out << read_file("Gemfile.lock") << "\n" out end private def read_file(filename) File.read(filename).strip rescue Errno::ENOENT "" rescue => e "#{e.class}: #{e.message}" end end end environment.rb000066400000000000000000000012731446701454400355740ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class Environment attr_reader :root def initialize(root, definition) @root = root @definition = definition env_file = Bundler.app_config_path.join('environment.rb') env_file.rmtree if env_file.exist? end def inspect @definition.to_lock.inspect end def requested_specs @definition.requested_specs end def specs @definition.specs end def dependencies @definition.dependencies end def current_dependencies @definition.current_dependencies end def lock @definition.lock(Bundler.default_lockfile) end def update(*gems) # Nothing end end end fetcher.rb000066400000000000000000000263401446701454400346520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'bundler/vendored_persistent' require 'securerandom' module Bundler # Handles all the fetching with the rubygems server class Fetcher # This error is raised if the API returns a 413 (only printed in verbose) class FallbackError < HTTPError; end # This is the error raised if OpenSSL fails the cert verification class CertificateFailureError < HTTPError def initialize(remote_uri) super "Could not verify the SSL certificate for #{remote_uri}.\nThere" \ " is a chance you are experiencing a man-in-the-middle attack, but" \ " most likely your system doesn't have the CA certificates needed" \ " for verification. For information about OpenSSL certificates, see" \ " bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile" \ " sources and change 'https' to 'http'." end end # This is the error raised when a source is HTTPS and OpenSSL didn't load class SSLError < HTTPError def initialize(msg = nil) super msg || "Could not load OpenSSL.\n" \ "You must recompile Ruby with OpenSSL support or change the sources in your " \ "Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL " \ "using RVM are available at rvm.io/packages/openssl." end end class << self attr_accessor :disable_endpoint, :api_timeout, :redirect_limit, :max_retries def download_gem_from_uri(spec, uri) spec.fetch_platform download_path = Bundler.requires_sudo? ? Bundler.tmp : Bundler.rubygems.gem_dir gem_path = "#{Bundler.rubygems.gem_dir}/cache/#{spec.full_name}.gem" FileUtils.mkdir_p("#{download_path}/cache") Bundler.rubygems.download_gem(spec, uri, download_path) if Bundler.requires_sudo? Bundler.mkdir_p "#{Bundler.rubygems.gem_dir}/cache" Bundler.sudo "mv #{Bundler.tmp}/cache/#{spec.full_name}.gem #{gem_path}" end gem_path end def user_agent @user_agent ||= begin ruby = Bundler.ruby_version agent = "bundler/#{Bundler::VERSION}" agent += " rubygems/#{Gem::VERSION}" agent += " ruby/#{ruby.version}" agent += " (#{ruby.host})" agent += " command/#{ARGV.first}" if ruby.engine != "ruby" # engine_version raises on unknown engines engine_version = ruby.engine_version rescue "???" agent += " #{ruby.engine}/#{engine_version}" end # add a random ID so we can consolidate runs server-side agent << " " << SecureRandom.hex(8) end end end def initialize(remote_uri) # How many redirects to allew in one request @redirect_limit = 5 # How long to wait for each gemcutter API call @api_timeout = 10 # How many retries for the gemcutter API call @max_retries = 3 @remote_uri = Bundler::Source.mirror_for(remote_uri) @public_uri = @remote_uri.dup @public_uri.user, @public_uri.password = nil, nil # don't print these Socket.do_not_reverse_lookup = true end def connection return @connection if @connection needs_ssl = @remote_uri.scheme == "https" || Bundler.settings[:ssl_verify_mode] || Bundler.settings[:ssl_client_cert] raise SSLError if needs_ssl && !defined?(OpenSSL) @connection = Net::HTTP::Persistent.new 'bundler', :ENV if @remote_uri.scheme == "https" @connection.verify_mode = (Bundler.settings[:ssl_verify_mode] || OpenSSL::SSL::VERIFY_PEER) @connection.cert_store = bundler_cert_store end if Bundler.settings[:ssl_client_cert] pem = File.read(Bundler.settings[:ssl_client_cert]) @connection.cert = OpenSSL::X509::Certificate.new(pem) @connection.key = OpenSSL::PKey::RSA.new(pem) end @connection.read_timeout = @api_timeout @connection.override_headers["User-Agent"] = self.class.user_agent @connection end def uri @public_uri end # fetch a gem specification def fetch_spec(spec) spec = spec - [nil, 'ruby', ''] spec_file_name = "#{spec.join '-'}.gemspec" uri = URI.parse("#{@remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz") if uri.scheme == 'file' Bundler.load_marshal Zlib::Inflate.inflate(Gem.read_binary(uri.path)) elsif cached_spec_path = gemspec_cached_path(spec_file_name) Bundler.load_gemspec(cached_spec_path) else Bundler.load_marshal Zlib::Inflate.inflate(fetch(uri)) end rescue MarshalError => e raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \ "Your network or your gem server is probably having issues right now." end # cached gem specification path, if one exists def gemspec_cached_path spec_file_name paths = Bundler.rubygems.spec_cache_dirs.map { |dir| File.join(dir, spec_file_name) } paths = paths.select {|path| File.file? path } paths.first end # return the specs in the bundler format as an index def specs(gem_names, source) index = Index.new use_full_source_index = !gem_names || @remote_uri.scheme == "file" || Bundler::Fetcher.disable_endpoint if gem_names && use_api specs = fetch_remote_specs(gem_names) end if specs.nil? # API errors mean we should treat this as a non-API source @use_api = false specs = Bundler::Retry.new("source fetch").attempts do fetch_all_remote_specs end end specs[@remote_uri].each do |name, version, platform, dependencies| next if name == 'bundler' spec = nil if dependencies spec = EndpointSpecification.new(name, version, platform, dependencies) else spec = RemoteSpecification.new(name, version, platform, self) end spec.source = source spec.source_uri = @remote_uri index << spec end index rescue CertificateFailureError => e Bundler.ui.info "" if gem_names && use_api # newline after dots raise e end # fetch index def fetch_remote_specs(gem_names, full_dependency_list = [], last_spec_list = []) query_list = gem_names - full_dependency_list # only display the message on the first run if Bundler.ui.debug? Bundler.ui.debug "Query List: #{query_list.inspect}" else Bundler.ui.info ".", false end return {@remote_uri => last_spec_list} if query_list.empty? remote_specs = Bundler::Retry.new("dependency api").attempts do fetch_dependency_remote_specs(query_list) end spec_list, deps_list = remote_specs returned_gems = spec_list.map {|spec| spec.first }.uniq fetch_remote_specs(deps_list, full_dependency_list + returned_gems, spec_list + last_spec_list) rescue HTTPError, MarshalError, GemspecError => e Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over Bundler.ui.debug "could not fetch from the dependency API, trying the full index" @use_api = false return nil end def use_api return @use_api if defined?(@use_api) if @remote_uri.scheme == "file" || Bundler::Fetcher.disable_endpoint @use_api = false elsif fetch(dependency_api_uri) @use_api = true end rescue HTTPError @use_api = false end def inspect "#<#{self.class}:0x#{object_id} uri=#{uri}>" end private HTTP_ERRORS = [ Timeout::Error, EOFError, SocketError, Errno::ENETDOWN, Errno::EINVAL, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::EAGAIN, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError, Net::HTTP::Persistent::Error ] def fetch(uri, counter = 0) raise HTTPError, "Too many redirects" if counter >= @redirect_limit response = request(uri) case response when Net::HTTPRedirection Bundler.ui.debug("HTTP Redirection") new_uri = URI.parse(response["location"]) if new_uri.host == uri.host new_uri.user = uri.user new_uri.password = uri.password end fetch(new_uri, counter + 1) when Net::HTTPSuccess Bundler.ui.debug("HTTP Success") response.body when Net::HTTPRequestEntityTooLarge raise FallbackError, response.body else raise HTTPError, "#{response.class}: #{response.body}" end end def request(uri) Bundler.ui.debug "Fetching from: #{uri}" req = Net::HTTP::Get.new uri.request_uri req.basic_auth(uri.user, uri.password) if uri.user response = connection.request(uri, req) rescue OpenSSL::SSL::SSLError raise CertificateFailureError.new(uri) rescue *HTTP_ERRORS raise HTTPError, "Network error while fetching #{uri}" end def dependency_api_uri(gem_names = []) url = "#{@remote_uri}api/v1/dependencies" url << "?gems=#{URI.encode(gem_names.join(","))}" if gem_names.any? URI.parse(url) end # fetch from Gemcutter Dependency Endpoint API def fetch_dependency_remote_specs(gem_names) Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(',')}" marshalled_deps = fetch dependency_api_uri(gem_names) gem_list = Bundler.load_marshal(marshalled_deps) deps_list = [] spec_list = gem_list.map do |s| dependencies = s[:dependencies].map do |name, requirement| dep = well_formed_dependency(name, requirement.split(", ")) deps_list << dep.name dep end [s[:name], Gem::Version.new(s[:number]), s[:platform], dependencies] end [spec_list, deps_list.uniq] end # fetch from modern index: specs.4.8.gz def fetch_all_remote_specs Bundler.rubygems.sources = ["#{@remote_uri}"] Bundler.rubygems.fetch_all_remote_specs rescue Gem::RemoteFetcher::FetchError, OpenSSL::SSL::SSLError => e if e.message.match("certificate verify failed") raise CertificateFailureError.new(uri) else Bundler.ui.trace e raise HTTPError, "Could not fetch specs from #{uri}" end end def well_formed_dependency(name, *requirements) Gem::Dependency.new(name, *requirements) rescue ArgumentError => e illformed = 'Ill-formed requirement ["# e Bundler.ui.error e.message, :wrap => true Bundler.ui.trace e exit e.status_code rescue Thor::AmbiguousTaskError => e Bundler.ui.error e.message exit 15 rescue Thor::UndefinedTaskError => e Bundler.ui.error e.message exit 15 rescue Thor::Error => e Bundler.ui.error e.message exit 1 rescue LoadError => e raise e unless e.message =~ /cannot load such file -- openssl|openssl.so|libcrypto.so/ Bundler.ui.error "\nCould not load OpenSSL." Bundler.ui.warn <<-WARN, :wrap => true You must recompile Ruby with OpenSSL support or change the sources in your \ Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL \ using RVM are available at rvm.io/packages/openssl. WARN Bundler.ui.trace e exit 1 rescue Interrupt => e Bundler.ui.error "\nQuitting..." Bundler.ui.trace e exit 1 rescue SystemExit => e exit e.status rescue Exception => e Bundler.ui.error <<-ERR, :wrap => true Unfortunately, a fatal error has occurred. Please see the Bundler \ troubleshooting documentation at http://bit.ly/bundler-issues. Thanks! ERR raise e end end gem_helper.rb000066400000000000000000000111561446701454400353400ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'bundler/vendored_thor' unless defined?(Thor) require 'bundler' module Bundler class GemHelper include Rake::DSL if defined? Rake::DSL class << self # set when install'd. attr_accessor :instance def install_tasks(opts = {}) new(opts[:dir], opts[:name]).install end def gemspec(&block) gemspec = instance.gemspec block.call(gemspec) if block gemspec end end attr_reader :spec_path, :base, :gemspec def initialize(base = nil, name = nil) Bundler.ui = UI::Shell.new @base = (base ||= SharedHelpers.pwd) gemspecs = name ? [File.join(base, "#{name}.gemspec")] : Dir[File.join(base, "{,*}.gemspec")] raise "Unable to determine name from existing gemspec. Use :name => 'gemname' in #install_tasks to manually set it." unless gemspecs.size == 1 @spec_path = gemspecs.first @gemspec = Bundler.load_gemspec(@spec_path) end def install built_gem_path = nil desc "Build #{name}-#{version}.gem into the pkg directory." task 'build' do built_gem_path = build_gem end desc "Build and install #{name}-#{version}.gem into system gems." task 'install' => 'build' do install_gem(built_gem_path) end desc "Create tag #{version_tag} and build and push #{name}-#{version}.gem to Rubygems" task 'release' => 'build' do release_gem(built_gem_path) end GemHelper.instance = self end def build_gem file_name = nil sh("gem build -V '#{spec_path}'") { |out, code| file_name = File.basename(built_gem_path) FileUtils.mkdir_p(File.join(base, 'pkg')) FileUtils.mv(built_gem_path, 'pkg') Bundler.ui.confirm "#{name} #{version} built to pkg/#{file_name}." } File.join(base, 'pkg', file_name) end def install_gem(built_gem_path=nil) built_gem_path ||= build_gem out, _ = sh_with_code("gem install '#{built_gem_path}' --local") raise "Couldn't install gem, run `gem install #{built_gem_path}' for more detailed output" unless out[/Successfully installed/] Bundler.ui.confirm "#{name} (#{version}) installed." end def release_gem(built_gem_path=nil) guard_clean built_gem_path ||= build_gem tag_version { git_push } unless already_tagged? rubygem_push(built_gem_path) if gem_push? end protected def rubygem_push(path) if Pathname.new("~/.gem/credentials").expand_path.exist? sh("gem push '#{path}'") Bundler.ui.confirm "Pushed #{name} #{version} to rubygems.org." else raise "Your rubygems.org credentials aren't set. Run `gem push` to set them." end end def built_gem_path Dir[File.join(base, "#{name}-*.gem")].sort_by{|f| File.mtime(f)}.last end def git_push perform_git_push perform_git_push ' --tags' Bundler.ui.confirm "Pushed git commits and tags." end def perform_git_push(options = '') cmd = "git push #{options}" out, code = sh_with_code(cmd) raise "Couldn't git push. `#{cmd}' failed with the following output:\n\n#{out}\n" unless code == 0 end def already_tagged? if sh('git tag').split(/\n/).include?(version_tag) Bundler.ui.confirm "Tag #{version_tag} has already been created." true end end def guard_clean clean? && committed? or raise("There are files that need to be committed first.") end def clean? sh_with_code("git diff --exit-code")[1] == 0 end def committed? sh_with_code("git diff-index --quiet --cached HEAD")[1] == 0 end def tag_version sh "git tag -a -m \"Version #{version}\" #{version_tag}" Bundler.ui.confirm "Tagged #{version_tag}." yield if block_given? rescue Bundler.ui.error "Untagging #{version_tag} due to error." sh_with_code "git tag -d #{version_tag}" raise end def version gemspec.version end def version_tag "v#{version}" end def name gemspec.name end def sh(cmd, &block) out, code = sh_with_code(cmd, &block) code == 0 ? out : raise(out.empty? ? "Running `#{cmd}' failed. Run this command directly for more detailed output." : out) end def sh_with_code(cmd, &block) cmd << " 2>&1" outbuf = '' Bundler.ui.debug(cmd) SharedHelpers.chdir(base) { outbuf = `#{cmd}` if $? == 0 block.call(outbuf) if block end } [outbuf, $?] end def gem_push? ! %w{n no nil false off 0}.include?(ENV['gem_push'].to_s.downcase) end end end gem_helpers.rb000066400000000000000000000013331446701454400355170ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler module GemHelpers GENERIC_CACHE = {} GENERICS = [ [Gem::Platform.new('java'), Gem::Platform.new('java')], [Gem::Platform.new('mswin32'), Gem::Platform.new('mswin32')], [Gem::Platform.new('x64-mingw32'), Gem::Platform.new('x64-mingw32')], [Gem::Platform.new('x86_64-mingw32'), Gem::Platform.new('x64-mingw32')], [Gem::Platform.new('mingw32'), Gem::Platform.new('x86-mingw32')] ] def generic(p) return p if p == Gem::Platform::RUBY GENERIC_CACHE[p] ||= begin _, found = GENERICS.find do |match, _generic| p.os == match.os && (!match.cpu || p.cpu == match.cpu) end found || Gem::Platform::RUBY end end end end gem_installer.rb000066400000000000000000000003321446701454400360500ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'rubygems/installer' module Bundler class GemInstaller < Gem::Installer def check_executable_overwrite(filename) # Bundler needs to install gems regardless of binstub overwriting end end end gem_path_manipulation.rb000066400000000000000000000005141446701454400375710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler def self.preserve_gem_path original_gem_path = ENV["_ORIGINAL_GEM_PATH"] gem_path = ENV["GEM_PATH"] ENV["_ORIGINAL_GEM_PATH"] = gem_path if original_gem_path.nil? || original_gem_path == "" ENV["GEM_PATH"] = original_gem_path if gem_path.nil? || gem_path == "" end end gem_tasks.rb000066400000000000000000000000761446701454400352050ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'bundler/gem_helper' Bundler::GemHelper.install_tasks graph.rb000066400000000000000000000127551446701454400343400ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'set' module Bundler class Graph GRAPH_NAME = :Gemfile def initialize(env, output_file, show_version = false, show_requirements = false, output_format = "png") @env = env @output_file = output_file @show_version = show_version @show_requirements = show_requirements @output_format = output_format @groups = [] @relations = Hash.new {|h, k| h[k] = Set.new} @node_options = {} @edge_options = {} _patching_gem_dependency_class _populate_relations end attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format def viz GraphVizClient.new(self).run end private def _populate_relations parent_dependencies = _groups.values.to_set.flatten while true if parent_dependencies.empty? break else tmp = Set.new parent_dependencies.each do |dependency| child_dependencies = dependency.to_spec.runtime_dependencies.to_set @relations[dependency.name] += child_dependencies.map(&:name).to_set tmp += child_dependencies @node_options[dependency.name] = _make_label(dependency, :node) child_dependencies.each do |c_dependency| @edge_options["#{dependency.name}_#{c_dependency.name}"] = _make_label(c_dependency, :edge) end end parent_dependencies = tmp end end end def _groups relations = Hash.new {|h, k| h[k] = Set.new} @env.current_dependencies.each do |dependency| dependency.groups.each do |group| relations[group.to_s].add(dependency) @relations[group.to_s].add(dependency.name) @node_options[group.to_s] ||= _make_label(group, :node) @edge_options["#{group}_#{dependency.name}"] = _make_label(dependency, :edge) end end @groups = relations.keys relations end def _make_label(symbol_or_string_or_dependency, element_type) case element_type.to_sym when :node if symbol_or_string_or_dependency.is_a?(Gem::Dependency) label = symbol_or_string_or_dependency.name.dup label << "\n#{symbol_or_string_or_dependency.to_spec.version.to_s}" if @show_version else label = symbol_or_string_or_dependency.to_s end when :edge label = nil if symbol_or_string_or_dependency.respond_to?(:requirements_list) && @show_requirements tmp = symbol_or_string_or_dependency.requirements_list.join(", ") label = tmp if tmp != ">= 0" end else raise ArgumentError, "2nd argument is invalid" end label.nil? ? {} : { :label => label } end def _patching_gem_dependency_class # method borrow from rubygems/dependency.rb # redefinition of matching_specs will also redefine to_spec and to_specs Gem::Dependency.class_eval do def matching_specs platform_only = false matches = Bundler.load.specs.select { |spec| self.name === spec.name and # TODO: == instead of === requirement.satisfied_by? spec.version } if platform_only matches.reject! { |spec| not Gem::Platform.match spec.platform } end matches = matches.sort_by { |s| s.sort_obj } # HACK: shouldn't be needed end end end class GraphVizClient def initialize(graph_instance) @graph_name = graph_instance.class::GRAPH_NAME @groups = graph_instance.groups @relations = graph_instance.relations @node_options = graph_instance.node_options @edge_options = graph_instance.edge_options @output_file = graph_instance.output_file @output_format = graph_instance.output_format end def g @g ||= ::GraphViz.digraph(@graph_name, {:concentrate => true, :normalize => true, :nodesep => 0.55}) do |g| g.edge[:weight] = 2 g.edge[:fontname] = g.node[:fontname] = 'Arial, Helvetica, SansSerif' g.edge[:fontsize] = 12 end end def run @groups.each do |group| g.add_nodes( group, {:style => 'filled', :fillcolor => '#B9B9D5', :shape => "box3d", :fontsize => 16}.merge(@node_options[group]) ) end @relations.each do |parent, children| children.each do |child| if @groups.include?(parent) g.add_nodes(child, {:style => 'filled', :fillcolor => '#B9B9D5'}.merge(@node_options[child])) g.add_edges(parent, child, {:constraint => false}.merge(@edge_options["#{parent}_#{child}"])) else g.add_nodes(child, @node_options[child]) g.add_edges(parent, child, @edge_options["#{parent}_#{child}"]) end end end if @output_format.to_s == "debug" $stdout.puts g.output :none => String Bundler.ui.info "debugging bundle viz..." else begin g.output @output_format.to_sym => "#{@output_file}.#{@output_format}" Bundler.ui.info "#{@output_file}.#{@output_format}" rescue ArgumentError => e $stderr.puts "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb" raise e end end end end end end index.rb000066400000000000000000000112361446701454400343370ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire "set" module Bundler class Index include Enumerable def self.build i = new yield i i end attr_reader :specs, :sources protected :specs def initialize @sources = [] @cache = {} @specs = Hash.new { |h,k| h[k] = [] } end def initialize_copy(o) super @sources = @sources.dup @cache = {} @specs = Hash.new { |h,k| h[k] = [] } o.specs.each do |name, array| @specs[name] = array.dup end end def inspect "#<#{self.class}:0x#{object_id} sources=#{sources.map{|s| s.inspect}} specs.size=#{specs.size}>" end def empty? each { return false } true end # Search this index's specs, and any source indexes that this index knows # about, returning all of the results. def search(query, base = nil) results = local_search(query, base) seen = Set.new(results.map { |spec| [spec.name, spec.version, spec.platform] }) @sources.each do |source| source.search(query, base).each do |spec| lookup = [spec.name, spec.version, spec.platform] unless seen.include?(lookup) results << spec seen << lookup end end end results end def local_search(query, base = nil) case query when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query) when String then specs_by_name(query) when Gem::Dependency then search_by_dependency(query, base) else raise "You can't search for a #{query.inspect}." end end def source_types sources.map{|s| s.class }.uniq end alias [] search def <<(spec) arr = specs_by_name(spec.name) arr.delete_if do |s| same_version?(s.version, spec.version) && s.platform == spec.platform end arr << spec spec end def each(&blk) specs.values.each do |specs| specs.each(&blk) end end # returns a list of the dependencies def unmet_dependency_names dependency_names = specs.values.map do |array_of_s| array_of_s.map do |s| s.dependencies.map{|d| d.name } end end.flatten.uniq dependency_names.select{|name| name != 'bundler' && specs_by_name(name).empty? } end def use(other, override_dupes = false) return unless other other.each do |s| if (dupes = search_by_spec(s)) && dupes.any? next unless override_dupes @specs[s.name] -= dupes end @specs[s.name] << s end self end def size @sources.inject(@specs.size) do |size, source| size += source.size end end def ==(o) all? do |spec| other_spec = o[spec].first (spec.dependencies & other_spec.dependencies).empty? && spec.source == other_spec.source end end def add_source(index) if index.is_a?(Index) @sources << index @sources.uniq! # need to use uniq! here instead of checking for the item before adding else raise ArgumentError, "Source must be an index, not #{index.class}" end end private def specs_by_name(name) @specs[name] end def search_by_dependency(dependency, base = nil) @cache[base || false] ||= {} @cache[base || false][dependency] ||= begin specs = specs_by_name(dependency.name) + (base || []) found = specs.select do |spec| if base # allow all platforms when searching from a lockfile dependency.matches_spec?(spec) else dependency.matches_spec?(spec) && Gem::Platform.match(spec.platform) end end wants_prerelease = dependency.requirement.prerelease? only_prerelease = specs.all? {|spec| spec.version.prerelease? } unless wants_prerelease || only_prerelease found.reject! { |spec| spec.version.prerelease? } end found.sort_by {|s| [s.version, s.platform.to_s == 'ruby' ? "\0" : s.platform.to_s] } end end def search_by_spec(spec) specs_by_name(spec.name).select do |s| same_version?(s.version, spec.version) && Gem::Platform.new(s.platform) == Gem::Platform.new(spec.platform) end end if RUBY_VERSION < '1.9' def same_version?(a, b) regex = /^(.*?)(?:\.0)*$/ a.to_s[regex, 1] == b.to_s[regex, 1] end else def same_version?(a, b) a == b end end def spec_satisfies_dependency?(spec, dep) return false unless dep.name === spec.name dep.requirement.satisfied_by?(spec.version) end end end injector.rb000066400000000000000000000033351446701454400350460ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class Injector def self.inject(new_deps) injector = new(new_deps) injector.inject(Bundler.default_gemfile, Bundler.default_lockfile) end def initialize(new_deps) @new_deps = new_deps end def inject(gemfile_path, lockfile_path) if Bundler.settings[:frozen] # ensure the lock and Gemfile are synced Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true) # temporarily remove frozen while we inject frozen = Bundler.settings.delete(:frozen) end # evaluate the Gemfile we have now builder = Dsl.new builder.eval_gemfile(gemfile_path) # don't inject any gems that are already in the Gemfile @new_deps -= builder.dependencies # add new deps to the end of the in-memory Gemfile builder.eval_gemfile("injected gems", new_gem_lines) if @new_deps.any? # resolve to see if the new deps broke anything definition = builder.to_definition(lockfile_path, {}) definition.resolve_remotely! # since nothing broke, we can add those gems to the gemfile append_to(gemfile_path) if @new_deps.any? # since we resolved successfully, write out the lockfile definition.lock(Bundler.default_lockfile) # return an array of the deps that we added return @new_deps ensure Bundler.settings[:frozen] = '1' if frozen end private def new_gem_lines @new_deps.map do |d| %|gem '#{d.name}', '#{d.requirement}'| end.join("\n") end def append_to(gemfile_path) gemfile_path.open("a") do |f| f.puts f.puts "# Added at #{Time.now} by #{`whoami`.chomp}:" f.puts new_gem_lines end end end end installer.rb000066400000000000000000000277751446701454400352440ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'erb' require 'rubygems/dependency_installer' require 'bundler/parallel_workers' module Bundler class Installer < Environment class << self attr_accessor :post_install_messages end # Begins the installation process for Bundler. # For more information see the #run method on this class. def self.install(root, definition, options = {}) installer = new(root, definition) installer.run(options) installer end # Runs the install procedures for a specific Gemfile. # # Firstly, this method will check to see if Bundler.bundle_path exists # and if not then will create it. This is usually the location of gems # on the system, be it RVM or at a system path. # # Secondly, it checks if Bundler has been configured to be "frozen" # Frozen ensures that the Gemfile and the Gemfile.lock file are matching. # This stops a situation where a developer may update the Gemfile but may not run # `bundle install`, which leads to the Gemfile.lock file not being correctly updated. # If this file is not correctly updated then any other developer running # `bundle install` will potentially not install the correct gems. # # Thirdly, Bundler checks if there are any dependencies specified in the Gemfile using # Bundler::Environment#dependencies. If there are no dependencies specified then # Bundler returns a warning message stating so and this method returns. # # Fourthly, Bundler checks if the default lockfile (Gemfile.lock) exists, and if so # then proceeds to set up a defintion based on the default gemfile (Gemfile) and the # default lock file (Gemfile.lock). However, this is not the case if the platform is different # to that which is specified in Gemfile.lock, or if there are any missing specs for the gems. # # Fifthly, Bundler resolves the dependencies either through a cache of gems or by remote. # This then leads into the gems being installed, along with stubs for their executables, # but only if the --binstubs option has been passed or Bundler.options[:bin] has been set # earlier. # # Sixthly, a new Gemfile.lock is created from the installed gems to ensure that the next time # that a user runs `bundle install` they will receive any updates from this process. # # Finally: TODO add documentation for how the standalone process works. def run(options) # Create the BUNDLE_PATH directory begin Bundler.bundle_path.mkpath unless Bundler.bundle_path.exist? rescue Errno::EEXIST raise PathError, "Could not install to path `#{Bundler.settings[:path]}` " + "because of an invalid symlink. Remove the symlink so the directory can be created." end if Bundler.settings[:frozen] @definition.ensure_equivalent_gemfile_and_lockfile(options[:deployment]) end if dependencies.empty? Bundler.ui.warn "The Gemfile specifies no dependencies" lock return end if Bundler.default_lockfile.exist? && !options["update"] local = Bundler.ui.silence do begin tmpdef = Definition.build(Bundler.default_gemfile, Bundler.default_lockfile, nil) true unless tmpdef.new_platform? || tmpdef.missing_specs.any? rescue BundlerError end end end # Since we are installing, we can resolve the definition # using remote specs unless local options["local"] ? @definition.resolve_with_cache! : @definition.resolve_remotely! end # Must install gems in the order that the resolver provides # as dependencies might actually affect the installation of # the gem. Installer.post_install_messages = {} # the order that the resolver provides is significant, since # dependencies might actually affect the installation of a gem. # that said, it's a rare situation (other than rake), and parallel # installation is just SO MUCH FASTER. so we let people opt in. jobs = [Bundler.settings[:jobs].to_i, 1].max if jobs > 1 && can_install_parallely? install_in_parallel jobs, options[:standalone] else install_sequentially options[:standalone] end lock generate_standalone(options[:standalone]) if options[:standalone] end def install_gem_from_spec(spec, standalone = false, worker = 0) # Fetch the build settings, if there are any settings = Bundler.settings["build.#{spec.name}"] install_message = nil post_install_message = nil debug_message = nil Bundler.rubygems.with_build_args [settings] do install_message, post_install_message, debug_message = spec.source.install(spec) Bundler.ui.info install_message Bundler.ui.debug debug_message if debug_message spec_info = "#{worker}: #{spec.name} (#{spec.version}) from #{spec.loaded_from}" Bundler.ui.debug spec_info end if Bundler.settings[:bin] && standalone generate_standalone_bundler_executable_stubs(spec) elsif Bundler.settings[:bin] generate_bundler_executable_stubs(spec, :force => true) end FileUtils.rm_rf(Bundler.tmp) post_install_message rescue Exception => e # if install hook failed or gem signature is bad, just die raise e if e.is_a?(Bundler::InstallHookError) || e.is_a?(Bundler::SecurityError) # other failure, likely a native extension build failure Bundler.ui.info "" Bundler.ui.warn "#{e.class}: #{e.message}" msg = "An error occurred while installing #{spec.name} (#{spec.version})," msg << " and Bundler cannot continue." unless spec.source.options["git"] msg << "\nMake sure that `gem install" msg << " #{spec.name} -v '#{spec.version}'` succeeds before bundling." end Bundler.ui.debug e.backtrace.join("\n") raise Bundler::InstallError, msg end def generate_bundler_executable_stubs(spec, options = {}) if options[:binstubs_cmd] && spec.executables.empty? options = {} spec.runtime_dependencies.each do |dep| bins = @definition.specs[dep].first.executables options[dep.name] = bins unless bins.empty? end if options.any? Bundler.ui.warn "#{spec.name} has no executables, but you may want " + "one from a gem it depends on." options.each{|name,bins| Bundler.ui.warn " #{name} has: #{bins.join(', ')}" } else Bundler.ui.warn "There are no executables for the gem #{spec.name}." end return end # double-assignment to avoid warnings about variables that will be used by ERB bin_path = bin_path = Bundler.bin_path template = template = File.read(File.expand_path('../templates/Executable', __FILE__)) relative_gemfile_path = relative_gemfile_path = Bundler.default_gemfile.relative_path_from(bin_path) ruby_command = ruby_command = Thor::Util.ruby_command exists = [] spec.executables.each do |executable| next if executable == "bundle" binstub_path = "#{bin_path}/#{executable}" if File.exists?(binstub_path) && !options[:force] exists << executable next end File.open(binstub_path, 'w', 0777 & ~File.umask) do |f| f.puts ERB.new(template, nil, '-').result(binding) end end if options[:binstubs_cmd] && exists.any? case exists.size when 1 Bundler.ui.warn "Skipped #{exists[0]} since it already exists." when 2 Bundler.ui.warn "Skipped #{exists.join(' and ')} since they already exist." else items = exists[0...-1].empty? ? nil : exists[0...-1].join(', ') skipped = [items, exists[-1]].compact.join(' and ') Bundler.ui.warn "Skipped #{skipped} since they already exist." end Bundler.ui.warn "If you want to overwrite skipped stubs, use --force." end end private def can_install_parallely? min_rubygems = "2.0.7" if Bundler.current_ruby.mri? || Bundler.rubygems.provides?(">= #{min_rubygems}") true else Bundler.ui.warn "Rubygems #{Gem::VERSION} is not threadsafe, so your "\ "gems must be installed one at a time. Upgrade to Rubygems " \ "#{min_rubygems} or higher to enable parallel gem installation." false end end def generate_standalone_bundler_executable_stubs(spec) # double-assignment to avoid warnings about variables that will be used by ERB bin_path = Bundler.bin_path template = File.read(File.expand_path('../templates/Executable.standalone', __FILE__)) ruby_command = ruby_command = Thor::Util.ruby_command spec.executables.each do |executable| next if executable == "bundle" standalone_path = standalone_path = Pathname(Bundler.settings[:path]).expand_path.relative_path_from(bin_path) executable_path = executable_path = Pathname(spec.full_gem_path).join(spec.bindir, executable).relative_path_from(bin_path) File.open "#{bin_path}/#{executable}", 'w', 0755 do |f| f.puts ERB.new(template, nil, '-').result(binding) end end end def generate_standalone(groups) standalone_path = Bundler.settings[:path] bundler_path = File.join(standalone_path, "bundler") FileUtils.mkdir_p(bundler_path) paths = [] if groups.empty? specs = @definition.requested_specs else specs = @definition.specs_for groups.map { |g| g.to_sym } end specs.each do |spec| next if spec.name == "bundler" spec.require_paths.each do |path| full_path = File.join(spec.full_gem_path, path) gem_path = Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)) paths << gem_path.to_s.sub("#{Bundler.ruby_version.engine}/#{RbConfig::CONFIG['ruby_version']}", '#{ruby_engine}/#{ruby_version}') end end File.open File.join(bundler_path, "setup.rb"), "w" do |file| file.puts "require 'rbconfig'" file.puts "# ruby 1.8.7 doesn't define RUBY_ENGINE" file.puts "ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'" file.puts "ruby_version = RbConfig::CONFIG[\"ruby_version\"]" file.puts "path = File.expand_path('..', __FILE__)" paths.each do |path| file.puts %{$:.unshift File.expand_path("\#{path}/#{path}")} end end end def install_sequentially(standalone) specs.each do |spec| message = install_gem_from_spec spec, standalone, 0 if message Installer.post_install_messages[spec.name] = message end end end def install_in_parallel(size, standalone) name2spec = {} remains = {} enqueued = {} specs.each do |spec| name2spec[spec.name] = spec remains[spec.name] = true end worker_pool = ParallelWorkers.worker_pool size, lambda { |name, worker| spec = name2spec[name] message = install_gem_from_spec spec, standalone, worker { :name => spec.name, :post_install => message } } specs.each do |spec| if ready_to_install?(spec, remains) worker_pool.enq spec.name enqueued[spec.name] = true end end until remains.empty? message = worker_pool.deq remains.delete message[:name] if message[:post_install] Installer.post_install_messages[message[:name]] = message[:post_install] end remains.keys.each do |name| next if enqueued[name] spec = name2spec[name] if ready_to_install?(spec, remains) worker_pool.enq name enqueued[name] = true end end end message ensure worker_pool && worker_pool.stop end def ready_to_install?(spec, remains) spec.dependencies.none? do |dep| remains[dep.name] && dep.type != :development && dep.name != spec.name end end end end lazy_specification.rb000066400000000000000000000036071446701454400371120ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire "uri" require "rubygems/spec_fetcher" require "bundler/match_platform" module Bundler class LazySpecification include MatchPlatform attr_reader :name, :version, :dependencies, :platform attr_accessor :source, :source_uri def initialize(name, version, platform, source = nil) @name = name @version = version @dependencies = [] @platform = platform @source = source @specification = nil end def full_name if platform == Gem::Platform::RUBY or platform.nil? then "#{@name}-#{@version}" else "#{@name}-#{@version}-#{platform}" end end def ==(other) identifier == other.identifier end def satisfies?(dependency) @name == dependency.name && dependency.requirement.satisfied_by?(Gem::Version.new(@version)) end def to_lock if platform == Gem::Platform::RUBY or platform.nil? out = " #{name} (#{version})\n" else out = " #{name} (#{version}-#{platform})\n" end dependencies.sort_by {|d| d.to_s }.each do |dep| next if dep.type == :development out << " #{dep.to_lock}\n" end out end def __materialize__ @specification = source.specs.search(Gem::Dependency.new(name, version)).last end def respond_to?(*args) super || @specification.respond_to?(*args) end def to_s @__to_s ||= "#{name} (#{version})" end def identifier @__identifier ||= [name, version, source, platform, dependencies].hash end private def to_ary nil end def method_missing(method, *args, &blk) raise "LazySpecification has not been materialized yet (calling :#{method} #{args.inspect})" unless @specification return super unless respond_to?(method) @specification.send(method, *args, &blk) end end end lockfile_parser.rb000066400000000000000000000103761446701454400364000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire "strscan" # Some versions of the Bundler 1.1 RC series introduced corrupted # lockfiles. There were two major problems: # # * multiple copies of the same GIT section appeared in the lockfile # * when this happened, those sections got multiple copies of gems # in those sections. # # As a result, Bundler 1.1 contains code that fixes the earlier # corruption. We will remove this fix-up code in Bundler 1.2. module Bundler class LockfileParser attr_reader :sources, :dependencies, :specs, :platforms DEPENDENCIES = "DEPENDENCIES" PLATFORMS = "PLATFORMS" GIT = "GIT" GEM = "GEM" PATH = "PATH" SPECS = " specs:" OPTIONS = /^ ([a-z]+): (.*)$/i def initialize(lockfile) @platforms = [] @sources = [] @dependencies = [] @state = :source @specs = {} if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/) raise LockfileError, "Your Gemfile.lock contains merge conflicts.\n" \ "Run `git checkout HEAD -- Gemfile.lock` first to get a clean lock." end lockfile.split(/(?:\r?\n)+/).each do |line| if line == DEPENDENCIES @state = :dependency elsif line == PLATFORMS @state = :platform else send("parse_#{@state}", line) end end @specs = @specs.values end private TYPES = { "GIT" => Bundler::Source::Git, "GEM" => Bundler::Source::Rubygems, "PATH" => Bundler::Source::Path } def parse_source(line) case line when GIT, GEM, PATH @current_source = nil @opts, @type = {}, line when SPECS @current_source = TYPES[@type].from_lock(@opts) # Strip out duplicate GIT sections if @sources.include?(@current_source) && @current_source.is_a?(Bundler::Source::Git) @current_source = @sources.find { |s| s == @current_source } end @sources << @current_source when OPTIONS value = $2 value = true if value == "true" value = false if value == "false" key = $1 if @opts[key] @opts[key] = Array(@opts[key]) @opts[key] << value else @opts[key] = value end else parse_spec(line) end end NAME_VERSION = '(?! )(.*?)(?: \(([^-]*)(?:-(.*))?\))?' NAME_VERSION_2 = %r{^ {2}#{NAME_VERSION}(!)?$} NAME_VERSION_4 = %r{^ {4}#{NAME_VERSION}$} NAME_VERSION_6 = %r{^ {6}#{NAME_VERSION}$} def parse_dependency(line) if line =~ NAME_VERSION_2 name, version, pinned = $1, $2, $4 version = version.split(",").map { |d| d.strip } if version dep = Bundler::Dependency.new(name, version) if pinned && dep.name != 'bundler' spec = @specs.find {|k, v| v.name == dep.name } dep.source = spec.last.source if spec # Path sources need to know what the default name / version # to use in the case that there are no gemspecs present. A fake # gemspec is created based on the version set on the dependency # TODO: Use the version from the spec instead of from the dependency if version && version.size == 1 && version.first =~ /^\s*= (.+)\s*$/ && dep.source.is_a?(Bundler::Source::Path) dep.source.name = name dep.source.version = $1 end end @dependencies << dep end end def parse_spec(line) if line =~ NAME_VERSION_4 name, version = $1, Gem::Version.new($2) platform = $3 ? Gem::Platform.new($3) : Gem::Platform::RUBY @current_spec = LazySpecification.new(name, version, platform) @current_spec.source = @current_source # Avoid introducing multiple copies of the same spec (caused by # duplicate GIT sections) @specs[@current_spec.identifier] ||= @current_spec elsif line =~ NAME_VERSION_6 name, version = $1, $2 version = version.split(',').map { |d| d.strip } if version dep = Gem::Dependency.new(name, version) @current_spec.dependencies << dep end end def parse_platform(line) if line =~ /^ (.*)$/ @platforms << Gem::Platform.new($1) end end end end match_platform.rb000066400000000000000000000004121446701454400362220ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'bundler/gem_helpers' module Bundler module MatchPlatform include GemHelpers def match_platform(p) Gem::Platform::RUBY == platform or platform.nil? or p == platform or generic(Gem::Platform.new(platform)) == p end end end parallel_workers.rb000066400000000000000000000007011446701454400365730ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'thread' require "bundler/parallel_workers/worker" module Bundler module ParallelWorkers autoload :UnixWorker, "bundler/parallel_workers/unix_worker" autoload :ThreadWorker, "bundler/parallel_workers/thread_worker" def self.worker_pool(size, job) if Bundler.current_ruby.mswin? || Bundler.current_ruby.jruby? ThreadWorker.new(size, job) else UnixWorker.new(size, job) end end end end parallel_workers/000077500000000000000000000000001446701454400362505ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerthread_worker.rb000066400000000000000000000014211446701454400414330ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/parallel_workersmodule Bundler module ParallelWorkers class ThreadWorker < Worker private # On platforms where fork is not available # use Threads for parallely downloading gems # # @param size [Integer] Size of thread worker pool # @param func [Proc] Job to be run inside thread worker pool def prepare_workers(size, func) @threads = size.times.map do |i| Thread.start do loop do obj = @request_queue.deq break if obj.equal? POISON begin @response_queue.enq func.call(obj, i) rescue Exception => e @response_queue.enq(WrappedException.new(e)) end end end end end end end end unix_worker.rb000066400000000000000000000060211446701454400411500ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/parallel_workersmodule Bundler module ParallelWorkers # UnixWorker is used only on platforms where fork is available. The way # this code works is, it forks a preconfigured number of workers and then # It starts preconfigured number of threads that write to the connected pipe. class UnixWorker < Worker class JobHandler < Struct.new(:pid, :io_r, :io_w) def work(obj) Marshal.dump obj, io_w Marshal.load io_r rescue IOError, Errno::EPIPE nil end end def initialize(size, job) # Close the persistent connections for the main thread before forking Net::HTTP::Persistent.new('bundler', :ENV).shutdown super end private # Start forked workers for downloading gems. This version of worker # is only used on platforms where fork is available. # # @param size [Integer] Size of worker pool # @param func [Proc] Job that should be executed in the worker def prepare_workers(size, func) @workers = size.times.map do |num| child_read, parent_write = IO.pipe parent_read, child_write = IO.pipe pid = Process.fork do begin parent_read.close parent_write.close while !child_read.eof? obj = Marshal.load child_read Marshal.dump func.call(obj, num), child_write end rescue Exception => e begin Marshal.dump WrappedException.new(e), child_write rescue Errno::EPIPE nil end ensure child_read.close child_write.close end end child_read.close child_write.close JobHandler.new pid, parent_read, parent_write end end # Start the threads whose job is basically to wait for incoming messages # on request queue and write that message to the connected pipe. Also retrieve # messages from child worker via connected pipe and write the message to response queue # # @param size [Integer] Number of threads to be started def prepare_threads(size) @threads = size.times.map do |i| Thread.start do worker = @workers[i] loop do obj = @request_queue.deq break if obj.equal? POISON @response_queue.enq worker.work(obj) end end end end # Kill the forked workers by sending SIGINT to them def stop_workers @workers.each do |worker| worker.io_r.close unless worker.io_r.closed? worker.io_w.close unless worker.io_w.closed? begin Process.kill :INT, worker.pid rescue Errno::ESRCH nil end end @workers.each do |worker| begin Process.waitpid worker.pid rescue Errno::ECHILD nil end end end end end end worker.rb000066400000000000000000000033101446701454400401030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/parallel_workersmodule Bundler module ParallelWorkers class Worker POISON = Object.new class WrappedException < StandardError attr_reader :exception def initialize(exn) @exception = exn end end # Creates a worker pool of specified size # # @param size [Integer] Size of pool # @param func [Proc] job to run in inside the worker pool def initialize(size, func) @request_queue = Queue.new @response_queue = Queue.new prepare_workers size, func prepare_threads size trap("INT") { @threads.each {|i| i.exit }; stop_workers; exit 1 } end # Enque a request to be executed in the worker pool # # @param obj [String] mostly it is name of spec that should be downloaded def enq(obj) @request_queue.enq obj end # Retrieves results of job function being executed in worker pool def deq result = @response_queue.deq if WrappedException === result raise result.exception end result end # Stop the forked workers and started threads def stop stop_threads stop_workers end private # Stop the worker threads by sending a poison object down the request queue # so as worker threads after retrieving it, shut themselves down def stop_threads @threads.each do @request_queue.enq POISON end @threads.each do |thread| thread.join end end # To be overridden by child classes def prepare_threads(size) end # To be overridden by child classes def stop_workers end end end end psyched_yaml.rb000066400000000000000000000012061446701454400357050ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler# Psych could be a gem, so try to ask for it begin gem 'psych' rescue LoadError end if defined?(gem) # Psych could just be in the stdlib # but it's too late if Syck is already loaded begin require 'psych' unless defined?(Syck) rescue LoadError # Apparently Psych wasn't available. Oh well. end # At least load the YAML stdlib, whatever that may be require 'yaml' unless defined?(YAML.dump) module Bundler # On encountering invalid YAML, # Psych raises Psych::SyntaxError if defined?(::Psych::SyntaxError) YamlSyntaxError = ::Psych::SyntaxError else # Syck raises ArgumentError YamlSyntaxError = ::ArgumentError end end remote_specification.rb000066400000000000000000000031621446701454400374220ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire "uri" require "rubygems/spec_fetcher" module Bundler # Represents a lazily loaded gem specification, where the full specification # is on the source server in rubygems' "quick" index. The proxy object is to # be seeded with what we're given from the source's abbreviated index - the # full specification will only be fetched when necesary. class RemoteSpecification include MatchPlatform attr_reader :name, :version, :platform attr_accessor :source, :source_uri def initialize(name, version, platform, spec_fetcher) @name = name @version = version @platform = platform @spec_fetcher = spec_fetcher end # Needed before installs, since the arch matters then and quick # specs don't bother to include the arch in the platform string def fetch_platform @platform = _remote_specification.platform end def full_name if platform == Gem::Platform::RUBY or platform.nil? then "#{@name}-#{@version}" else "#{@name}-#{@version}-#{platform}" end end # Because Rubyforge cannot be trusted to provide valid specifications # once the remote gem is downloaded, the backend specification will # be swapped out. def __swap__(spec) @specification = spec end private def _remote_specification @specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform]) end def method_missing(method, *args, &blk) if Gem::Specification.new.respond_to?(method) _remote_specification.send(method, *args, &blk) else super end end end end resolver.rb000066400000000000000000000463301446701454400350740ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'set' require 'bundler/safe_catch' # This is the latest iteration of the gem dependency resolving algorithm. As of now, # it can resolve (as a success or failure) any set of gem dependencies we throw at it # in a reasonable amount of time. The most iterations I've seen it take is about 150. # The actual implementation of the algorithm is not as good as it could be yet, but that # can come later. # Extending Gem classes to add necessary tracking information module Gem class Specification def required_by @required_by ||= [] end end class Dependency def required_by @required_by ||= [] end end end module Bundler class Resolver include SafeCatch extend SafeCatch ALL = Bundler::Dependency::PLATFORM_MAP.values.uniq.freeze class SpecGroup < Array include GemHelpers attr_reader :activated, :required_by def initialize(a) super @required_by = [] @activated = [] @dependencies = nil @specs = {} ALL.each do |p| @specs[p] = reverse.find { |s| s.match_platform(p) } end end def initialize_copy(o) super @required_by = o.required_by.dup @activated = o.activated.dup end def to_specs specs = {} @activated.each do |p| if s = @specs[p] platform = generic(Gem::Platform.new(s.platform)) next if specs[platform] lazy_spec = LazySpecification.new(name, version, platform, source) lazy_spec.dependencies.replace s.dependencies specs[platform] = lazy_spec end end specs.values end def activate_platform(platform) unless @activated.include?(platform) @activated << platform return __dependencies[platform] || [] end [] end def name @name ||= first.name end def version @version ||= first.version end def source @source ||= first.source end def for?(platform) @specs[platform] end def to_s "#{name} (#{version})" end private def __dependencies @dependencies ||= begin dependencies = {} ALL.each do |p| if spec = @specs[p] dependencies[p] = [] spec.dependencies.each do |dep| next if dep.type == :development dependencies[p] << DepProxy.new(dep, p) end end end dependencies end end end attr_reader :errors, :started_at, :iteration_rate, :iteration_counter # Figures out the best possible configuration of gems that satisfies # the list of passed dependencies and any child dependencies without # causing any gem activation errors. # # ==== Parameters # *dependencies:: The list of dependencies to resolve # # ==== Returns # ,nil:: If the list of dependencies can be resolved, a # collection of gemspecs is returned. Otherwise, nil is returned. def self.resolve(requirements, index, source_requirements = {}, base = []) Bundler.ui.info "Resolving dependencies...", false base = SpecSet.new(base) unless base.is_a?(SpecSet) resolver = new(index, source_requirements, base) result = safe_catch(:success) do resolver.start(requirements) raise resolver.version_conflict nil end Bundler.ui.info "" # new line now that dots are done SpecSet.new(result) rescue => e Bundler.ui.info "" # new line before the error raise e end def initialize(index, source_requirements, base) @errors = {} @stack = [] @base = base @index = index @deps_for = {} @missing_gems = Hash.new(0) @source_requirements = source_requirements @iteration_counter = 0 @started_at = Time.now end def debug if ENV['DEBUG_RESOLVER'] debug_info = yield debug_info = debug_info.inspect unless debug_info.is_a?(String) $stderr.puts debug_info end end def successify(activated) activated.values.map { |s| s.to_specs }.flatten.compact end def start(reqs) activated = {} @gems_size = Hash[reqs.map { |r| [r, gems_size(r)] }] resolve(reqs, activated) end def resolve(reqs, activated, depth = 0) # If the requirements are empty, then we are in a success state. Aka, all # gem dependencies have been resolved. safe_throw :success, successify(activated) if reqs.empty? indicate_progress debug { print "\e[2J\e[f" ; "==== Iterating ====\n\n" } # Sort dependencies so that the ones that are easiest to resolve are first. # Easiest to resolve is defined by: # 1) Is this gem already activated? # 2) Do the version requirements include prereleased gems? # 3) Sort by number of gems available in the source. reqs = reqs.sort_by do |a| [ activated[a.name] ? 0 : 1, a.requirement.prerelease? ? 0 : 1, @errors[a.name] ? 0 : 1, activated[a.name] ? 0 : @gems_size[a] ] end debug { "Activated:\n" + activated.values.map {|a| " #{a}" }.join("\n") } debug { "Requirements:\n" + reqs.map {|r| " #{r}"}.join("\n") } activated = activated.dup # Pull off the first requirement so that we can resolve it current = reqs.shift $stderr.puts "#{' ' * depth}#{current}" if ENV['DEBUG_RESOLVER_TREE'] debug { "Attempting:\n #{current}"} # Check if the gem has already been activated, if it has, we will make sure # that the currently activated gem satisfies the requirement. existing = activated[current.name] if existing || current.name == 'bundler' # Force the current if current.name == 'bundler' && !existing existing = search(DepProxy.new(Gem::Dependency.new('bundler', VERSION), Gem::Platform::RUBY)).first raise GemNotFound, %Q{Bundler could not find gem "bundler" (#{VERSION})} unless existing existing.required_by << existing activated['bundler'] = existing end if current.requirement.satisfied_by?(existing.version) debug { " * [SUCCESS] Already activated" } @errors.delete(existing.name) # Since the current requirement is satisfied, we can continue resolving # the remaining requirements. # I have no idea if this is the right way to do it, but let's see if it works # The current requirement might activate some other platforms, so let's try # adding those requirements here. dependencies = existing.activate_platform(current.__platform) reqs.concat dependencies dependencies.each do |dep| next if dep.type == :development @gems_size[dep] ||= gems_size(dep) end resolve(reqs, activated, depth + 1) else debug { " * [FAIL] Already activated" } @errors[existing.name] = [existing, current] debug { current.required_by.map {|d| " * #{d.name} (#{d.requirement})" }.join("\n") } # debug { " * All current conflicts:\n" + @errors.keys.map { |c| " - #{c}" }.join("\n") } # Since the current requirement conflicts with an activated gem, we need # to backtrack to the current requirement's parent and try another version # of it (maybe the current requirement won't be present anymore). If the # current requirement is a root level requirement, we need to jump back to # where the conflicting gem was activated. parent = current.required_by.last # `existing` could not respond to required_by if it is part of the base set # of specs that was passed to the resolver (aka, instance of LazySpecification) parent ||= existing.required_by.last if existing.respond_to?(:required_by) # We track the spot where the current gem was activated because we need # to keep a list of every spot a failure happened. if parent && parent.name != 'bundler' debug { " -> Jumping to: #{parent.name}" } required_by = existing.respond_to?(:required_by) && existing.required_by.last safe_throw parent.name, required_by && required_by.name else # The original set of dependencies conflict with the base set of specs # passed to the resolver. This is by definition an impossible resolve. raise version_conflict end end else # There are no activated gems for the current requirement, so we are going # to find all gems that match the current requirement and try them in decending # order. We also need to keep a set of all conflicts that happen while trying # this gem. This is so that if no versions work, we can figure out the best # place to backtrack to. conflicts = Set.new # Fetch all gem versions matching the requirement matching_versions = search(current) # If we found no versions that match the current requirement if matching_versions.empty? # If this is a top-level Gemfile requirement if current.required_by.empty? if base = @base[current.name] and !base.empty? version = base.first.version message = "You have requested:\n" \ " #{current.name} #{current.requirement}\n\n" \ "The bundle currently has #{current.name} locked at #{version}.\n" \ "Try running `bundle update #{current.name}`" elsif current.source name = current.name versions = @source_requirements[name][name].map { |s| s.version } message = "Could not find gem '#{current}' in #{current.source}.\n" if versions.any? message << "Source contains '#{name}' at: #{versions.join(', ')}" else message << "Source does not contain any versions of '#{current}'" end else message = "Could not find gem '#{current}' " if @index.source_types.include?(Bundler::Source::Rubygems) message << "in any of the gem sources listed in your Gemfile." else message << "in the gems available on this machine." end end raise GemNotFound, message # This is not a top-level Gemfile requirement else @errors[current.name] = [nil, current] end end matching_versions.reverse_each do |spec_group| conflict = resolve_requirement(spec_group, current, reqs.dup, activated.dup, depth) conflicts << conflict if conflict end # We throw the conflict up the dependency chain if it has not been # resolved (in @errors), thus avoiding branches of the tree that have no effect # on this conflict. Note that if the tree has multiple conflicts, we don't # care which one we throw, as long as we get out safe if !current.required_by.empty? && !conflicts.empty? @errors.reverse_each do |req_name, pair| if conflicts.include?(req_name) # Choose the closest pivot in the stack that will affect the conflict errorpivot = (@stack & [req_name, current.required_by.last.name]).last debug { " -> Jumping to: #{errorpivot}" } safe_throw errorpivot, req_name end end end # If the current requirement is a root level gem and we have conflicts, we # can figure out the best spot to backtrack to. if current.required_by.empty? && !conflicts.empty? # Check the current "catch" stack for the first one that is included in the # conflicts set. That is where the parent of the conflicting gem was required. # By jumping back to this spot, we can try other version of the parent of # the conflicting gem, hopefully finding a combination that activates correctly. @stack.reverse_each do |savepoint| if conflicts.include?(savepoint) debug { " -> Jumping to: #{savepoint}" } safe_throw savepoint end end end end end def resolve_requirement(spec_group, requirement, reqs, activated, depth) # We are going to try activating the spec. We need to keep track of stack of # requirements that got us to the point of activating this gem. spec_group.required_by.replace requirement.required_by spec_group.required_by << requirement activated[spec_group.name] = spec_group debug { " Activating: #{spec_group.name} (#{spec_group.version})" } debug { spec_group.required_by.map { |d| " * #{d.name} (#{d.requirement})" }.join("\n") } dependencies = spec_group.activate_platform(requirement.__platform) # Now, we have to loop through all child dependencies and add them to our # array of requirements. debug { " Dependencies"} dependencies.each do |dep| next if dep.type == :development debug { " * #{dep.name} (#{dep.requirement})" } dep.required_by.replace(requirement.required_by) dep.required_by << requirement @gems_size[dep] ||= gems_size(dep) reqs << dep end # We create a savepoint and mark it by the name of the requirement that caused # the gem to be activated. If the activated gem ever conflicts, we are able to # jump back to this point and try another version of the gem. length = @stack.length @stack << requirement.name retval = safe_catch(requirement.name) do # try to resolve the next option resolve(reqs, activated, depth) end # clear the search cache since the catch means we couldn't meet the # requirement we need with the current constraints on search clear_search_cache # Since we're doing a lot of throw / catches. A push does not necessarily match # up to a pop. So, we simply slice the stack back to what it was before the catch # block. @stack.slice!(length..-1) retval end def gems_size(dep) search(dep).size end def clear_search_cache @deps_for = {} end def search(dep) if base = @base[dep.name] and base.any? reqs = [dep.requirement.as_list, base.first.version.to_s].flatten.compact d = Gem::Dependency.new(base.first.name, *reqs) else d = dep.dep end @deps_for[d.hash] ||= begin index = @source_requirements[d.name] || @index results = index.search(d, @base[d.name]) if results.any? version = results.first.version nested = [[]] results.each do |spec| if spec.version != version nested << [] version = spec.version end nested.last << spec end deps = nested.map{|a| SpecGroup.new(a) }.select{|sg| sg.for?(dep.__platform) } else deps = [] end end end def clean_req(req) if req.to_s.include?(">= 0") req.to_s.gsub(/ \(.*?\)$/, '') else req.to_s.gsub(/\, (runtime|development)\)$/, ')') end end def version_conflict VersionConflict.new(errors.keys, error_message) end # For a given conflicted requirement, print out what exactly went wrong def gem_message(requirement) m = "" # A requirement that is required by itself is actually in the Gemfile, and does # not "depend on" itself if requirement.required_by.first && requirement.required_by.first.name != requirement.name m << " #{clean_req(requirement.required_by.first)} depends on\n" m << " #{clean_req(requirement)}\n" else m << " #{clean_req(requirement)}\n" end m << "\n" end def error_message errors.inject("") do |o, (conflict, (origin, requirement))| # origin is the SpecSet of specs from the Gemfile that is conflicted with if origin o << %{Bundler could not find compatible versions for gem "#{origin.name}":\n} o << " In Gemfile:\n" o << gem_message(requirement) # If the origin is "bundler", the conflict is us if origin.name == "bundler" o << " Current Bundler version:\n" other_bundler_required = !requirement.requirement.satisfied_by?(origin.version) # If the origin is a LockfileParser, it does not respond_to :required_by elsif !origin.respond_to?(:required_by) || !(origin.required_by.first) o << " In snapshot (Gemfile.lock):\n" end o << gem_message(origin) # If the bundle wants a newer bundler than the running bundler, explain if origin.name == "bundler" && other_bundler_required o << "This Gemfile requires a different version of Bundler.\n" o << "Perhaps you need to update Bundler by running `gem install bundler`?" end # origin is nil if the required gem and version cannot be found in any of # the specified sources else # if the gem cannot be found because of a version conflict between lockfile and gemfile, # print a useful error that suggests running `bundle update`, which may fix things # # @base is a SpecSet of the gems in the lockfile # conflict is the name of the gem that could not be found if locked = @base[conflict].first o << "Bundler could not find compatible versions for gem #{conflict.inspect}:\n" o << " In snapshot (Gemfile.lock):\n" o << " #{clean_req(locked)}\n\n" o << " In Gemfile:\n" o << gem_message(requirement) o << "Running `bundle update` will rebuild your snapshot from scratch, using only\n" o << "the gems in your Gemfile, which may resolve the conflict.\n" # the rest of the time, the gem cannot be found because it does not exist in the known sources else if requirement.required_by.first o << "Could not find gem '#{clean_req(requirement)}', which is required by " o << "gem '#{clean_req(requirement.required_by.first)}', in any of the sources." else o << "Could not find gem '#{clean_req(requirement)} in any of the sources\n" end end end o end end private # Indicates progress by writing a '.' every iteration_rate time which is # aproximately every second. iteration_rate is calculated in the first # second of resolve running. def indicate_progress @iteration_counter += 1 if iteration_rate.nil? if ((Time.now - started_at) % 3600).round >= 1 @iteration_rate = iteration_counter end else if ((iteration_counter % iteration_rate) == 0) Bundler.ui.info ".", false end end end end end retry.rb000066400000000000000000000026261446701454400344000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler # General purpose class for retrying code that may fail class Retry DEFAULT_ATTEMPTS = 2 attr_accessor :name, :total_runs, :current_run class << self attr_accessor :attempts end def initialize(name, exceptions = nil, attempts = nil) @name = name attempts ||= default_attempts @exceptions = Array(exceptions) || [] @total_runs = attempts.next # will run once, then upto attempts.times end def default_attempts return Integer(self.class.attempts) if self.class.attempts DEFAULT_ATTEMPTS end def attempt(&block) @current_run = 0 @failed = false @error = nil while keep_trying? do run(&block) end @result end alias :attempts :attempt private def run(&block) @failed = false @current_run += 1 @result = block.call rescue => e fail(e) end def fail(e) @failed = true raise e if last_attempt? || @exceptions.any?{|k| k === e } return true unless name Bundler.ui.warn "Retrying#{" #{name}" if name} due to error (#{current_run.next}/#{total_runs}): #{e.class} #{e.message}" end def keep_trying? return true if current_run.zero? return false if last_attempt? return true if @failed end def last_attempt? current_run >= total_runs end end end ruby_dsl.rb000066400000000000000000000011361446701454400350510ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler module RubyDsl def ruby(ruby_version, options = {}) raise GemfileError, "Please define :engine_version" if options[:engine] && options[:engine_version].nil? raise GemfileError, "Please define :engine" if options[:engine_version] && options[:engine].nil? raise GemfileError, "ruby_version must match the :engine_version for MRI" if options[:engine] == "ruby" && options[:engine_version] && ruby_version != options[:engine_version] @ruby_version = RubyVersion.new(ruby_version, options[:patchlevel], options[:engine], options[:engine_version]) end end end ruby_version.rb000066400000000000000000000062011446701454400357520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class RubyVersion attr_reader :version, :patchlevel, :engine, :engine_version def initialize(version, patchlevel, engine, engine_version) # The parameters to this method must satisfy the # following constraints, which are verified in # the DSL: # # * If an engine is specified, an engine version # must also be specified # * If an engine version is specified, an engine # must also be specified # * If the engine is "ruby", the engine version # must not be specified, or the engine version # specified must match the version. @version = version @engine = engine || "ruby" # keep track of the engine specified by the user @input_engine = engine @engine_version = engine_version || version @patchlevel = patchlevel end def to_s output = "ruby #{version}" output << "p#{patchlevel}" if patchlevel output << " (#{engine} #{engine_version})" unless engine == "ruby" output end def ==(other) version == other.version && engine == other.engine && engine_version == other.engine_version && patchlevel == other.patchlevel end # Returns a tuple of thsee things: # [diff, this, other] # The priority of attributes are # 1. engine # 2. ruby_version # 3. engine_version def diff(other) if engine != other.engine && @input_engine [ :engine, engine, other.engine ] elsif version != other.version [ :version, version, other.version ] elsif engine_version != other.engine_version && @input_engine [ :engine_version, engine_version, other.engine_version ] elsif patchlevel != other.patchlevel && @patchlevel [ :patchlevel, patchlevel, other.patchlevel ] else nil end end def host @host ||= [ RbConfig::CONFIG["host_cpu"], RbConfig::CONFIG["host_vendor"], RbConfig::CONFIG["host_os"] ].join("-") end end # A subclass of RubyVersion that implements version, # engine and engine_version based upon the current # information in the system. It can be used anywhere # a RubyVersion object is expected, and can be # compared with a RubyVersion object. class SystemRubyVersion < RubyVersion def initialize(*) # override the default initialize, because # we will implement version, engine and # engine_version dynamically end def version RUBY_VERSION.dup end def gem_version @gem_version ||= Gem::Version.new(version) end def engine if defined?(RUBY_ENGINE) RUBY_ENGINE.dup else # not defined in ruby 1.8.7 "ruby" end end def engine_version case engine when "ruby" RUBY_VERSION.dup when "rbx" Rubinius::VERSION.dup when "jruby" JRUBY_VERSION.dup else raise BundlerError, "RUBY_ENGINE value #{RUBY_ENGINE} is not recognized" nil end end def patchlevel RUBY_PATCHLEVEL.to_s end end end rubygems_ext.rb000066400000000000000000000100571446701454400357450ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'pathname' if defined?(Gem::QuickLoader) # Gem Prelude makes me a sad panda :'( Gem::QuickLoader.load_full_rubygems_library end require 'rubygems' require 'rubygems/specification' require 'bundler/match_platform' module Gem @loaded_stacks = Hash.new { |h,k| h[k] = [] } class Specification attr_accessor :source_uri, :location, :relative_loaded_from remove_method :source if instance_methods(false).include?(:source) attr_accessor :source alias_method :rg_full_gem_path, :full_gem_path alias_method :rg_loaded_from, :loaded_from def full_gem_path source.respond_to?(:path) ? Pathname.new(loaded_from).dirname.expand_path(Bundler.root).to_s : rg_full_gem_path end def loaded_from relative_loaded_from ? source.path.join(relative_loaded_from).to_s : rg_loaded_from end def load_paths return full_require_paths if respond_to?(:full_require_paths) require_paths.map do |require_path| if require_path.include?(full_gem_path) require_path else File.join(full_gem_path, require_path) end end end # RubyGems 1.8+ used only. remove_method :gem_dir if instance_methods(false).include?(:gem_dir) def gem_dir full_gem_path end def groups @groups ||= [] end def git_version if loaded_from && File.exist?(File.join(full_gem_path, ".git")) sha = Bundler::SharedHelpers.chdir(full_gem_path){ `git rev-parse HEAD`.strip } " #{sha[0..6]}" end end def to_gemfile(path = nil) gemfile = "source :gemcutter\n" gemfile << dependencies_to_gemfile(nondevelopment_dependencies) unless development_dependencies.empty? gemfile << "\n" gemfile << dependencies_to_gemfile(development_dependencies, :development) end gemfile end def nondevelopment_dependencies dependencies - development_dependencies end private def dependencies_to_gemfile(dependencies, group = nil) gemfile = '' if dependencies.any? gemfile << "group :#{group} do\n" if group dependencies.each do |dependency| gemfile << ' ' if group gemfile << %|gem "#{dependency.name}"| req = dependency.requirements_list.first gemfile << %|, "#{req}"| if req gemfile << "\n" end gemfile << "end\n" if group end gemfile end end class Dependency attr_accessor :source, :groups alias eql? == def encode_with(coder) to_yaml_properties.each do |ivar| coder[ivar.to_s.sub(/^@/, '')] = instance_variable_get(ivar) end end def to_yaml_properties instance_variables.reject { |p| ["@source", "@groups"].include?(p.to_s) } end def to_lock out = " #{name}" unless requirement == Gem::Requirement.default reqs = requirement.requirements.map{|o,v| "#{o} #{v}" }.sort.reverse out << " (#{reqs.join(', ')})" end out end # Backport of performance enhancement added to Rubygems 1.4 def matches_spec?(spec) # name can be a Regexp, so use === return false unless name === spec.name return true if requirement.none? requirement.satisfied_by?(spec.version) end unless allocate.respond_to?(:matches_spec?) end class Requirement # Backport of performance enhancement added to Rubygems 1.4 def none? @none ||= (to_s == ">= 0") end unless allocate.respond_to?(:none?) end class Platform JAVA = Gem::Platform.new('java') unless defined?(JAVA) MSWIN = Gem::Platform.new('mswin32') unless defined?(MSWIN) MINGW = Gem::Platform.new('x86-mingw32') unless defined?(MINGW) X64_MINGW = Gem::Platform.new('x64-mingw32') unless defined?(X64_MINGW) undef_method :hash if method_defined? :hash def hash @cpu.hash ^ @os.hash ^ @version.hash end undef_method :eql? if method_defined? :eql? alias eql? == end end module Gem class Specification include ::Bundler::MatchPlatform end end rubygems_integration.rb000066400000000000000000000351351446701454400374740ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'rubygems' require 'rubygems/config_file' module Bundler class RubygemsIntegration def self.version @version ||= Gem::Version.new(Gem::VERSION) end def self.provides?(req_str) Gem::Requirement.new(req_str).satisfied_by?(version) end def version self.class.version end def provides?(req_str) self.class.provides?(req_str) end def build_args Gem::Command.build_args end def build_args=(args) Gem::Command.build_args = args end def loaded_specs(name) Gem.loaded_specs[name] end def mark_loaded(spec) Gem.loaded_specs[spec.name] = spec end def path(obj) obj.to_s end def platforms Gem.platforms end def configuration Gem.configuration rescue Gem::SystemExitException => e Bundler.ui.error "#{e.class}: #{e.message}" Bundler.ui.trace e raise Gem::SystemExitException end def ruby_engine Gem.ruby_engine end def read_binary(path) Gem.read_binary(path) end def inflate(obj) Zlib::Inflate.inflate(obj) end def sources=(val) # Gem.configuration creates a new Gem::ConfigFile, which by default will read ~/.gemrc # If that file exists, its settings (including sources) will overwrite the values we # are about to set here. In order to avoid that, we force memoizing the config file now. configuration Gem.sources = val end def sources Gem.sources end def gem_dir Gem.dir end def gem_bindir Gem.bindir end def user_home Gem.user_home end def gem_path Gem.path end def spec_cache_dirs @spec_cache_dirs ||= begin dirs = gem_path.map {|dir| File.join(dir, 'specifications')} dirs << Gem.spec_cache_dir if Gem.respond_to?(:spec_cache_dir) # Not in Rubygems 2.0.3 or earlier dirs.uniq.select {|dir| File.directory? dir} end end def marshal_spec_dir Gem::MARSHAL_SPEC_DIR end def clear_paths Gem.clear_paths end def bin_path(gem, bin, ver) Gem.bin_path(gem, bin, ver) end def preserve_paths # this is a no-op outside of Rubygems 1.8 yield end def ui=(obj) Gem::DefaultUserInteraction.ui = obj end def fetch_specs(all, pre, &blk) specs = Gem::SpecFetcher.new.list(all, pre) specs.each { yield } if block_given? specs end def fetch_prerelease_specs fetch_specs(false, true) rescue Gem::RemoteFetcher::FetchError [] # if we can't download them, there aren't any end def fetch_all_remote_specs # Fetch all specs, minus prerelease specs spec_list = fetch_specs(true, false) # Then fetch the prerelease specs fetch_prerelease_specs.each {|k, v| spec_list[k] += v } return spec_list end def with_build_args(args) old_args = self.build_args begin self.build_args = args yield ensure self.build_args = old_args end end def gem_from_path(path, policy = nil) require 'rubygems/format' Gem::Format.from_file_by_path(path, policy) end def spec_from_gem(path, policy = nil) require 'rubygems/security' gem_from_path(path, Gem::Security::Policies[policy]).spec rescue Gem::Package::FormatError raise GemspecError, "Could not read gem at #{path}. It may be corrupted." rescue Exception, Gem::Exception, Gem::Security::Exception => e if e.is_a?(Gem::Security::Exception) || e.message =~ /unknown trust policy|unsigned gem/i || e.message =~ /couldn't verify (meta)?data signature/i raise SecurityError, "The gem #{File.basename(path, '.gem')} can't be installed because " \ "the security policy didn't allow it, with the message: #{e.message}" else raise e end end def build(spec, skip_validation = false) require 'rubygems/builder' Gem::Builder.new(spec).build end def build_gem(gem_dir, spec) SharedHelpers.chdir(gem_dir) { build(spec) } end def download_gem(spec, uri, path) uri = Bundler::Source.mirror_for(uri) fetcher = Gem::RemoteFetcher.new(configuration[:http_proxy]) fetcher.download(spec, uri, path) end def security_policies @security_policies ||= begin require 'rubygems/security' Gem::Security::Policies rescue LoadError, NameError {} end end def reverse_rubygems_kernel_mixin # Disable rubygems' gem activation system ::Kernel.class_eval do if private_method_defined?(:gem_original_require) alias rubygems_require require alias require gem_original_require end undef gem end end def replace_gem(specs) reverse_rubygems_kernel_mixin executables = specs.map { |s| s.executables }.flatten ::Kernel.send(:define_method, :gem) do |dep, *reqs| if executables.include? File.basename(caller.first.split(':').first) return end reqs.pop if reqs.last.is_a?(Hash) unless dep.respond_to?(:name) && dep.respond_to?(:requirement) dep = Gem::Dependency.new(dep, reqs) end spec = specs.find { |s| s.name == dep.name } if spec.nil? e = Gem::LoadError.new "#{dep.name} is not part of the bundle. Add it to Gemfile." e.name = dep.name if e.respond_to?(:requirement=) e.requirement = dep.requirement else e.version_requirement = dep.requirement end raise e elsif dep !~ spec e = Gem::LoadError.new "can't activate #{dep}, already activated #{spec.full_name}. " \ "Make sure all dependencies are added to Gemfile." e.name = dep.name if e.respond_to?(:requirement=) e.requirement = dep.requirement else e.version_requirement = dep.requirement end raise e end true end end def stub_source_index(specs) Gem::SourceIndex.send(:alias_method, :old_initialize, :initialize) redefine_method(Gem::SourceIndex, :initialize) do |*args| @gems = {} # You're looking at this thinking: Oh! This is how I make those # rubygems deprecations go away! # # You'd be correct BUT using of this method in production code # must be approved by the rubygems team itself! # # This is your warning. If you use this and don't have approval # we can't protect you. # Deprecate.skip_during do self.spec_dirs = *args add_specs(*specs) end end end # Used to make bin stubs that are not created by bundler work # under bundler. The new Gem.bin_path only considers gems in # +specs+ def replace_bin_path(specs) gem_class = (class << Gem ; self ; end) redefine_method(gem_class, :bin_path) do |name, *args| exec_name = args.first if exec_name == 'bundle' return ENV['BUNDLE_BIN_PATH'] end spec = nil if exec_name spec = specs.find { |s| s.executables.include?(exec_name) } spec or raise Gem::Exception, "can't find executable #{exec_name}" else spec = specs.find { |s| s.name == name } exec_name = spec.default_executable or raise Gem::Exception, "no default executable for #{spec.full_name}" end gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name) gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name) File.exist?(gem_bin) ? gem_bin : gem_from_path_bin end end # Because Bundler has a static view of what specs are available, # we don't #refresh, so stub it out. def replace_refresh gem_class = (class << Gem ; self ; end) redefine_method(gem_class, :refresh) { } end # Replace or hook into Rubygems to provide a bundlerized view # of the world. def replace_entrypoints(specs) replace_gem(specs) stub_rubygems(specs) replace_bin_path(specs) replace_refresh Gem.clear_paths end # This backports the correct segment generation code from Rubygems 1.4+ # by monkeypatching it into the method in Rubygems 1.3.6 and 1.3.7. def backport_segment_generation redefine_method(Gem::Version, :segments) do @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s| /^\d+$/ =~ s ? s.to_i : s end end end # This backport fixes the marshaling of @segments. def backport_yaml_initialize redefine_method(Gem::Version, :yaml_initialize) do |tag, map| @version = map['version'] @segments = nil @hash = nil end end # This backports base_dir which replaces installation path # Rubygems 1.8+ def backport_base_dir redefine_method(Gem::Specification, :base_dir) do return Gem.dir unless loaded_from File.dirname File.dirname loaded_from end end def backport_cache_file redefine_method(Gem::Specification, :cache_dir) do @cache_dir ||= File.join base_dir, "cache" end redefine_method(Gem::Specification, :cache_file) do @cache_file ||= File.join cache_dir, "#{full_name}.gem" end end def backport_spec_file redefine_method(Gem::Specification, :spec_dir) do @spec_dir ||= File.join base_dir, "specifications" end redefine_method(Gem::Specification, :spec_file) do @spec_file ||= File.join spec_dir, "#{full_name}.gemspec" end end def redefine_method(klass, method, &block) if klass.instance_methods(false).include?(method) klass.send(:remove_method, method) end klass.send(:define_method, method, &block) end # Rubygems 1.4 through 1.6 class Legacy < RubygemsIntegration def initialize super backport_base_dir backport_cache_file backport_spec_file backport_yaml_initialize end def stub_rubygems(specs) # Rubygems versions lower than 1.7 use SourceIndex#from_gems_in source_index_class = (class << Gem::SourceIndex ; self ; end) source_index_class.send(:define_method, :from_gems_in) do |*args| source_index = Gem::SourceIndex.new source_index.spec_dirs = *args source_index.add_specs(*specs) source_index end end def all_specs Gem.source_index.gems.values end def find_name(name) Gem.source_index.find_name(name) end end # Rubygems versions 1.3.6 and 1.3.7 class Ancient < Legacy def initialize super backport_segment_generation end end # Rubygems 1.7 class Transitional < Legacy def stub_rubygems(specs) stub_source_index(specs) end end # Rubygems 1.8.5-1.8.19 class Modern < RubygemsIntegration def stub_rubygems(specs) Gem::Specification.all = specs Gem.post_reset { Gem::Specification.all = specs } stub_source_index(specs) end def all_specs Gem::Specification.to_a end def find_name(name) Gem::Specification.find_all_by_name name end end # Rubygems 1.8.0 to 1.8.4 class AlmostModern < Modern # Rubygems [>= 1.8.0, < 1.8.5] has a bug that changes Gem.dir whenever # you call Gem::Installer#install with an :install_dir set. We have to # change it back for our sudo mode to work. def preserve_paths old_dir, old_path = gem_dir, gem_path yield Gem.use_paths(old_dir, old_path) end end # Rubygems 1.8.20+ class MoreModern < Modern # Rubygems 1.8.20 and adds the skip_validation parameter, so that's # when we start passing it through. def build(spec, skip_validation = false) require 'rubygems/builder' Gem::Builder.new(spec).build(skip_validation) end end # Rubygems 2.0 class Future < RubygemsIntegration def stub_rubygems(specs) Gem::Specification.all = specs Gem.post_reset do Gem::Specification.all = specs end end def all_specs Gem::Specification.to_a end def find_name(name) Gem::Specification.find_all_by_name name end def fetch_specs(source, name) path = source + "#{name}.#{Gem.marshal_version}.gz" string = Gem::RemoteFetcher.fetcher.fetch_path(path) Bundler.load_marshal(string) rescue Gem::RemoteFetcher::FetchError => e # it's okay for prerelease to fail raise e unless name == "prerelease_specs" end def fetch_all_remote_specs # Since SpecFetcher now returns NameTuples, we just fetch directly # and unmarshal the array ourselves. hash = {} Gem.sources.each do |source| source = URI.parse(source.to_s) unless source.is_a?(URI) hash[source] = fetch_specs(source, "specs") pres = fetch_specs(source, "prerelease_specs") hash[source].push(*pres) if pres && !pres.empty? end hash end def download_gem(spec, uri, path) require 'resolv' uri = Bundler::Source.mirror_for(uri) proxy, dns = configuration[:http_proxy], Resolv::DNS.new fetcher = Gem::RemoteFetcher.new(proxy, dns) fetcher.download(spec, uri, path) end def gem_from_path(path, policy = nil) require 'rubygems/package' p = Gem::Package.new(path) p.security_policy = policy if policy return p end def build(spec, skip_validation = false) require 'rubygems/package' Gem::Package.build(spec, skip_validation) end end end if RubygemsIntegration.provides?(">= 1.99.99") @rubygems = RubygemsIntegration::Future.new elsif RubygemsIntegration.provides?('>= 1.8.20') @rubygems = RubygemsIntegration::MoreModern.new elsif RubygemsIntegration.provides?('>= 1.8.5') @rubygems = RubygemsIntegration::Modern.new elsif RubygemsIntegration.provides?('>= 1.8.0') @rubygems = RubygemsIntegration::AlmostModern.new elsif RubygemsIntegration.provides?('>= 1.7.0') @rubygems = RubygemsIntegration::Transitional.new elsif RubygemsIntegration.provides?('>= 1.4.0') @rubygems = RubygemsIntegration::Legacy.new else # Rubygems 1.3.6 and 1.3.7 @rubygems = RubygemsIntegration::Ancient.new end class << self attr_reader :rubygems end end runtime.rb000066400000000000000000000233071446701454400347150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire "digest/sha1" module Bundler class Runtime < Environment include SharedHelpers def setup(*groups) groups.map! { |g| g.to_sym } # Has to happen first clean_load_path specs = groups.any? ? @definition.specs_for(groups) : requested_specs setup_environment Bundler.rubygems.replace_entrypoints(specs) # Activate the specs specs.each do |spec| unless spec.loaded_from raise GemNotFound, "#{spec.full_name} is missing. Run `bundle` to get it." end if activated_spec = Bundler.rubygems.loaded_specs(spec.name) and activated_spec.version != spec.version e = Gem::LoadError.new "You have already activated #{activated_spec.name} #{activated_spec.version}, " \ "but your Gemfile requires #{spec.name} #{spec.version}. Prepending " \ "`bundle exec` to your command may solve this." e.name = spec.name if e.respond_to?(:requirement=) e.requirement = Gem::Requirement.new(spec.version.to_s) else e.version_requirement = Gem::Requirement.new(spec.version.to_s) end raise e end Bundler.rubygems.mark_loaded(spec) load_paths = spec.load_paths.reject {|path| $LOAD_PATH.include?(path)} $LOAD_PATH.unshift(*load_paths) end setup_manpath lock self end REGEXPS = [ /^no such file to load -- (.+)$/i, /^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i, /^Missing API definition file in (.+)$/i, /^cannot load such file -- (.+)$/i, /^dlopen\([^)]*\): Library not loaded: (.+)$/i, ] def require(*groups) groups.map! { |g| g.to_sym } groups = [:default] if groups.empty? @definition.dependencies.each do |dep| # Skip the dependency if it is not in any of the requested # groups next unless ((dep.groups & groups).any? && dep.current_platform?) required_file = nil begin # Loop through all the specified autorequires for the # dependency. If there are none, use the dependency's name # as the autorequire. Array(dep.autorequire || dep.name).each do |file| # Allow `require: true` as an alias for `require: ` file = dep.name if file == true required_file = file Kernel.require file end rescue LoadError => e REGEXPS.find { |r| r =~ e.message } raise if dep.autorequire || $1 != required_file if dep.autorequire.nil? && dep.name.include?('-') begin namespaced_file = dep.name.gsub('-', '/') Kernel.require namespaced_file rescue LoadError REGEXPS.find { |r| r =~ e.message } regex_name = $1 raise e if dep.autorequire || (regex_name && regex_name.gsub('-', '/') != namespaced_file) raise e if regex_name.nil? end end end end end def dependencies_for(*groups) if groups.empty? dependencies else dependencies.select { |d| (groups & d.groups).any? } end end alias gems specs def cache FileUtils.mkdir_p(cache_path) unless File.exists?(cache_path) Bundler.ui.info "Updating files in vendor/cache" specs.each do |spec| next if spec.name == 'bundler' spec.source.cache(spec) if spec.source.respond_to?(:cache) end Dir[cache_path.join("*/.git")].each do |git_dir| FileUtils.rm_rf(git_dir) FileUtils.touch(File.expand_path("../.bundlecache", git_dir)) end prune_cache unless Bundler.settings[:no_prune] end def prune_cache FileUtils.mkdir_p(cache_path) unless File.exists?(cache_path) resolve = @definition.resolve prune_gem_cache(resolve) prune_git_and_path_cache(resolve) end def clean(dry_run = false) gem_bins = Dir["#{Gem.dir}/bin/*"] git_dirs = Dir["#{Gem.dir}/bundler/gems/*"] git_cache_dirs = Dir["#{Gem.dir}/cache/bundler/git/*"] gem_dirs = Dir["#{Gem.dir}/gems/*"] gem_files = Dir["#{Gem.dir}/cache/*.gem"] gemspec_files = Dir["#{Gem.dir}/specifications/*.gemspec"] spec_gem_paths = [] # need to keep git sources around spec_git_paths = @definition.sources.select {|s| s.is_a?(Bundler::Source::Git) }.map {|s| s.path.to_s } spec_git_cache_dirs = [] spec_gem_executables = [] spec_cache_paths = [] spec_gemspec_paths = [] specs.each do |spec| spec_gem_paths << spec.full_gem_path # need to check here in case gems are nested like for the rails git repo md = %r{(.+bundler/gems/.+-[a-f0-9]{7,12})}.match(spec.full_gem_path) spec_git_paths << md[1] if md spec_gem_executables << spec.executables.collect do |executable| e = "#{Bundler.rubygems.gem_bindir}/#{executable}" [e, "#{e}.bat"] end spec_cache_paths << spec.cache_file spec_gemspec_paths << spec.spec_file spec_git_cache_dirs << spec.source.cache_path.to_s if spec.source.is_a?(Bundler::Source::Git) end spec_gem_paths.uniq! spec_gem_executables.flatten! stale_gem_bins = gem_bins - spec_gem_executables stale_git_dirs = git_dirs - spec_git_paths stale_git_cache_dirs = git_cache_dirs - spec_git_cache_dirs stale_gem_dirs = gem_dirs - spec_gem_paths stale_gem_files = gem_files - spec_cache_paths stale_gemspec_files = gemspec_files - spec_gemspec_paths output = stale_gem_dirs.collect do |gem_dir| full_name = Pathname.new(gem_dir).basename.to_s parts = full_name.split('-') name = parts[0..-2].join('-') version = parts.last output = "#{name} (#{version})" if dry_run Bundler.ui.info "Would have removed #{output}" else Bundler.ui.info "Removing #{output}" FileUtils.rm_rf(gem_dir) end output end + stale_git_dirs.collect do |gem_dir| full_name = Pathname.new(gem_dir).basename.to_s parts = full_name.split('-') name = parts[0..-2].join('-') revision = parts[-1] output = "#{name} (#{revision})" if dry_run Bundler.ui.info "Would have removed #{output}" else Bundler.ui.info "Removing #{output}" FileUtils.rm_rf(gem_dir) end output end unless dry_run stale_gem_bins.each { |bin| FileUtils.rm(bin) if File.exists?(bin) } stale_gem_files.each { |file| FileUtils.rm(file) if File.exists?(file) } stale_gemspec_files.each { |file| FileUtils.rm(file) if File.exists?(file) } stale_git_cache_dirs.each { |dir| FileUtils.rm_rf(dir) if File.exists?(dir) } end output end def setup_environment begin ENV["BUNDLE_BIN_PATH"] = Bundler.rubygems.bin_path("bundler", "bundle", VERSION) rescue Gem::GemNotFoundException ENV["BUNDLE_BIN_PATH"] = File.expand_path("../../../bin/bundle", __FILE__) end # Set PATH paths = (ENV["PATH"] || "").split(File::PATH_SEPARATOR) paths.unshift "#{Bundler.bundle_path}/bin" ENV["PATH"] = paths.uniq.join(File::PATH_SEPARATOR) # Set BUNDLE_GEMFILE ENV["BUNDLE_GEMFILE"] = default_gemfile.to_s # Set RUBYOPT rubyopt = [ENV["RUBYOPT"]].compact if rubyopt.empty? || rubyopt.first !~ /-rbundler\/setup/ rubyopt.unshift %|-rbundler/setup| ENV["RUBYOPT"] = rubyopt.join(' ') end # Set RUBYLIB rubylib = (ENV["RUBYLIB"] || "").split(File::PATH_SEPARATOR) rubylib.unshift File.expand_path('../..', __FILE__) ENV["RUBYLIB"] = rubylib.uniq.join(File::PATH_SEPARATOR) end private def prune_gem_cache(resolve) cached = Dir["#{cache_path}/*.gem"] cached = cached.delete_if do |path| spec = Bundler.rubygems.spec_from_gem path resolve.any? do |s| s.name == spec.name && s.version == spec.version && !s.source.is_a?(Bundler::Source::Git) end end if cached.any? Bundler.ui.info "Removing outdated .gem files from vendor/cache" cached.each do |path| Bundler.ui.info " * #{File.basename(path)}" File.delete(path) end end end def prune_git_and_path_cache(resolve) cached = Dir["#{cache_path}/*/.bundlecache"] cached = cached.delete_if do |path| name = File.basename(File.dirname(path)) resolve.any? do |s| source = s.source source.respond_to?(:app_cache_dirname) && source.app_cache_dirname == name end end if cached.any? Bundler.ui.info "Removing outdated git and path gems from vendor/cache" cached.each do |path| path = File.dirname(path) Bundler.ui.info " * #{File.basename(path)}" FileUtils.rm_rf(path) end end end def setup_manpath # Store original MANPATH for restoration later in with_clean_env() ENV['BUNDLE_ORIG_MANPATH'] = ENV['MANPATH'] # Add man/ subdirectories from activated bundles to MANPATH for man(1) manuals = $LOAD_PATH.map do |path| man_subdir = path.sub(/lib$/, 'man') man_subdir unless Dir[man_subdir + '/man?/'].empty? end.compact unless manuals.empty? ENV['MANPATH'] = manuals.concat( ENV['MANPATH'].to_s.split(File::PATH_SEPARATOR) ).uniq.join(File::PATH_SEPARATOR) end end def cache_path root.join("vendor/cache") end end end safe_catch.rb000066400000000000000000000062761446701454400353200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler# SafeCatch provides a mechanism to safely deepen the stack, performing # stack-unrolling similar to catch/throw, but using Fiber or Thread to avoid # deepening the stack too quickly. # # The API is the same as that of catch/throw: SafeCatch#safe_catch takes a "tag" # to be rescued when some code deeper in the process raises it. If the catch # block completes successfully, that value is returned. If the tag is "thrown" # by safe_throw, the tag's value is returned. Other exceptions propagate out as # normal. # # The implementation, however, uses fibers or threads along with raise/rescue to # handle "deepening" the stack and unrolling it. On implementations where Fiber # is available, it will be used. If Fiber is not available, Thread will be used. # If neither of these classes are available, Proc will be used, effectively # deepening the stack for each recursion as in normal catch/throw. # # In order to avoid causing a new issue of creating too many fibers or threads, # especially on implementations where fibers are actually backed by native # threads, the "safe" recursion mechanism is only used every 20 recursions. # Based on experiments with JRuby (which seems to suffer the most from # excessively deep stacks), this appears to be a sufficient granularity to # prevent stack overflow without spinning up excessive numbers of fibers or # threads. This value can be adjusted with the BUNDLER_SAFE_RECURSE_EVERY env # var; setting it to zero effectively disables safe recursion. module Bundler module SafeCatch def safe_catch(tag, &block) if Bundler.current_ruby.jruby? Internal.catch(tag, &block) else catch(tag, &block) end end def safe_throw(tag, value = nil) if Bundler.current_ruby.jruby? Internal.throw(tag, value) else throw(tag, value) end end module Internal SAFE_RECURSE_EVERY = (ENV['BUNDLER_SAFE_RECURSE_EVERY'] || 20).to_i SAFE_RECURSE_CLASS, SAFE_RECURSE_START = case when defined?(Fiber) [Fiber, :resume] when defined?(Thread) [Thread, :join] else [Proc, :call] end @recurse_count = 0 def self.catch(tag, &block) @recurse_count += 1 if SAFE_RECURSE_EVERY >= 0 && @recurse_count % SAFE_RECURSE_EVERY == 0 SAFE_RECURSE_CLASS.new(&block).send(SAFE_RECURSE_START) else block.call end rescue Result.matcher(tag) $!.value end def self.throw(tag, value = nil) raise Result.new(tag, value) end class Result < StopIteration def initialize(tag, value) @tag = tag @value = value end attr_reader :tag, :value # The Matcher class is never instantiated; it is dup'ed and used as a # rescue-clause argument to match Result exceptions based on their tags. module Matcher class << self attr_accessor :tag def ===(other) other.respond_to? :tag and @tag.equal? other.tag end end end def self.matcher(tag) matcher = Matcher.dup matcher.tag = tag matcher end end end end end settings.rb000066400000000000000000000105171446701454400350710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class Settings def initialize(root = nil) @root = root @local_config = load_config(local_config_file) @global_config = load_config(global_config_file) end def [](key) the_key = key_for(key) value = (@local_config[the_key] || ENV[the_key] || @global_config[the_key]) is_bool(key) ? to_bool(value) : value end def []=(key, value) local_config_file || raise(GemfileNotFound) set_key(key, value, @local_config, local_config_file) end alias :set_local :[]= def delete(key) @local_config.delete(key_for(key)) end def set_global(key, value) set_key(key, value, @global_config, global_config_file) end def all env_keys = ENV.keys.select { |k| k =~ /BUNDLE_.*/ } keys = @global_config.keys | @local_config.keys | env_keys keys.map do |key| key.sub(/^BUNDLE_/, '').gsub(/__/, ".").downcase end end def local_overrides repos = {} all.each do |k| if k =~ /^local\./ repos[$'] = self[k] end end repos end def gem_mirrors all.inject({}) do |h, k| if k =~ /^mirror\./ uri = normalize_uri($') h[uri] = normalize_uri(self[k]) end h end end def locations(key) key = key_for(key) locations = {} locations[:local] = @local_config[key] if @local_config.key?(key) locations[:env] = ENV[key] if ENV[key] locations[:global] = @global_config[key] if @global_config.key?(key) locations end def pretty_values_for(exposed_key) key = key_for(exposed_key) locations = [] if @local_config.key?(key) locations << "Set for your local app (#{local_config_file}): #{@local_config[key].inspect}" end if value = ENV[key] locations << "Set via #{key}: #{value.inspect}" end if @global_config.key?(key) locations << "Set for the current user (#{global_config_file}): #{@global_config[key].inspect}" end return ["You have not configured a value for `#{exposed_key}`"] if locations.empty? locations end def without=(array) self[:without] = (array.empty? ? nil : array.join(":")) if array end def without self[:without] ? self[:without].split(":").map { |w| w.to_sym } : [] end # @local_config["BUNDLE_PATH"] should be prioritized over ENV["BUNDLE_PATH"] def path key = key_for(:path) path = ENV[key] || @global_config[key] return path if path && !@local_config.key?(key) if path = self[:path] "#{path}/#{Bundler.ruby_scope}" else Bundler.rubygems.gem_dir end end def allow_sudo? !@local_config.key?(key_for(:path)) end def ignore_config? ENV['BUNDLE_IGNORE_CONFIG'] end private def key_for(key) key = key.to_s.sub(".", "__").upcase "BUNDLE_#{key}" end def is_bool(key) %w(frozen cache_all no_prune disable_local_branch_check).include? key.to_s end def to_bool(value) !(value.nil? || value == '' || value =~ /^(false|f|no|n|0)$/i) end def set_key(key, value, hash, file) key = key_for(key) unless hash[key] == value hash[key] = value hash.delete(key) if value.nil? FileUtils.mkdir_p(file.dirname) require 'bundler/psyched_yaml' File.open(file, "w") { |f| f.puts YAML.dump(hash) } end value end def global_config_file file = ENV["BUNDLE_CONFIG"] || File.join(Bundler.rubygems.user_home, ".bundle/config") Pathname.new(file) end def local_config_file Pathname.new(@root).join("config") if @root end def load_config(config_file) valid_file = config_file && config_file.exist? && !config_file.size.zero? if !ignore_config? && valid_file Hash[config_file.read.scan(/^(BUNDLE_.+): ['"]?(.+?)['"]?$/)] else {} end end # TODO: duplicates Rubygems#normalize_uri # TODO: is this the correct place to validate mirror URIs? def normalize_uri(uri) uri = uri.to_s uri = "#{uri}/" unless uri =~ %r[/\Z] uri = URI(uri) raise ArgumentError, "Gem mirror sources must be absolute URIs (configured: #{mirror_source})" unless uri.absolute? uri end end end setup.rb000066400000000000000000000011751446701454400343710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'bundler/shared_helpers' if Bundler::SharedHelpers.in_bundle? require 'bundler' if STDOUT.tty? begin Bundler.setup rescue Bundler::BundlerError => e puts "\e[31m#{e.message}\e[0m" puts e.backtrace.join("\n") if ENV["DEBUG"] if Bundler::GemNotFound === e puts "\e[33mRun `bundle install` to install missing gems.\e[0m" end exit e.status_code end else Bundler.setup end # Add bundler to the load path after disabling system gems bundler_lib = File.expand_path("../..", __FILE__) $LOAD_PATH.unshift(bundler_lib) unless $LOAD_PATH.include?(bundler_lib) end shared_helpers.rb000066400000000000000000000047761446701454400362330ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'pathname' require 'rubygems' require 'bundler/constants' require 'bundler/rubygems_integration' require 'bundler/current_ruby' module Gem class Dependency if !instance_methods.map { |m| m.to_s }.include?("requirement") def requirement version_requirements end end end end module Bundler module SharedHelpers attr_accessor :gem_loaded def default_gemfile gemfile = find_gemfile raise GemfileNotFound, "Could not locate Gemfile" unless gemfile Pathname.new(gemfile) end def default_lockfile Pathname.new("#{default_gemfile}.lock") end def in_bundle? find_gemfile end if Bundler.current_ruby.mswin? || Bundler.current_ruby.jruby? require 'monitor' @chdir_monitor = Monitor.new def chdir(dir, &blk) @chdir_monitor.synchronize do Dir.chdir dir, &blk end end def pwd @chdir_monitor.synchronize do Dir.pwd end end else def chdir(dir, &blk) Dir.chdir dir, &blk end def pwd Dir.pwd end end def with_clean_git_env(&block) keys = %w[GIT_DIR GIT_WORK_TREE] old_env = keys.inject({}) do |h, k| h.update(k => ENV[k]) end keys.each {|key| ENV.delete(key) } block.call ensure keys.each {|key| ENV[key] = old_env[key] } end private def find_gemfile given = ENV['BUNDLE_GEMFILE'] return given if given && !given.empty? previous = nil current = File.expand_path(SharedHelpers.pwd) until !File.directory?(current) || current == previous if ENV['BUNDLE_SPEC_RUN'] # avoid stepping above the tmp directory when testing return nil if File.file?(File.join(current, 'bundler.gemspec')) end # otherwise return the Gemfile if it's there filename = File.join(current, 'Gemfile') return filename if File.file?(filename) current, previous = File.expand_path("..", current), current end end def clean_load_path # handle 1.9 where system gems are always on the load path if defined?(::Gem) me = File.expand_path("../../", __FILE__) $LOAD_PATH.reject! do |p| next if File.expand_path(p) =~ /^#{Regexp.escape(me)}/ p != File.dirname(__FILE__) && Bundler.rubygems.gem_path.any?{|gp| p =~ /^#{Regexp.escape(gp)}/ } end $LOAD_PATH.uniq! end end extend self end end similarity_detector.rb000066400000000000000000000034571446701454400373150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler class SimilarityDetector SimilarityScore = Struct.new(:string, :distance) # initialize with an array of words to be matched against def initialize(corpus) @corpus = corpus end # return an array of words similar to 'word' from the corpus def similar_words(word, limit=3) words_by_similarity = @corpus.map{|w| SimilarityScore.new(w, levenshtein_distance(word, w))} words_by_similarity.select{|s| s.distance<=limit}.sort_by(&:distance).map(&:string) end # return the result of 'similar_words', concatenated into a list # (eg "a, b, or c") def similar_word_list(word, limit=3) words = similar_words(word,limit) if words.length==1 words[0] elsif words.length>1 [words[0..-2].join(', '), words[-1]].join(' or ') end end protected # http://www.informit.com/articles/article.aspx?p=683059&seqNum=36 def levenshtein_distance(this, that, ins=2, del=2, sub=1) # ins, del, sub are weighted costs return nil if this.nil? return nil if that.nil? dm = [] # distance matrix # Initialize first row values dm[0] = (0..this.length).collect { |i| i * ins } fill = [0] * (this.length - 1) # Initialize first column values for i in 1..that.length dm[i] = [i * del, fill.flatten] end # populate matrix for i in 1..that.length for j in 1..this.length # critical comparison dm[i][j] = [ dm[i-1][j-1] + (this[j-1] == that[i-1] ? 0 : sub), dm[i][j-1] + ins, dm[i-1][j] + del ].min end end # The last value in matrix is the Levenshtein distance between the strings dm[that.length][this.length] end end end source.rb000066400000000000000000000006671446701454400345360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler module Source autoload :Rubygems, 'bundler/source/rubygems' autoload :Path, 'bundler/source/path' autoload :Git, 'bundler/source/git' def self.mirror_for(uri) uri = URI(uri.to_s) unless uri.is_a?(URI) # Settings keys are all downcased mirrors = Bundler.settings.gem_mirrors normalized_key = URI(uri.to_s.downcase) mirrors[normalized_key] || uri end end end source/000077500000000000000000000000001446701454400342005ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlergit.rb000066400000000000000000000175731446701454400353250ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/sourcerequire 'fileutils' require 'uri' require 'digest/sha1' module Bundler module Source class Git < Path autoload :GitProxy, 'bundler/source/git/git_proxy' attr_reader :uri, :ref, :branch, :options, :submodules def initialize(options) @options = options @glob = options["glob"] || DEFAULT_GLOB @allow_cached = false @allow_remote = false # Stringify options that could be set as symbols %w(ref branch tag revision).each{|k| options[k] = options[k].to_s if options[k] } @uri = options["uri"] @branch = options["branch"] @ref = options["ref"] || options["branch"] || options["tag"] || 'master' @submodules = options["submodules"] @name = options["name"] @version = options["version"] @copied = false @local = false end def self.from_lock(options) new(options.merge("uri" => options.delete("remote"))) end def to_lock out = "GIT\n" out << " remote: #{@uri}\n" out << " revision: #{revision}\n" %w(ref branch tag submodules).each do |opt| out << " #{opt}: #{options[opt]}\n" if options[opt] end out << " glob: #{@glob}\n" unless @glob == DEFAULT_GLOB out << " specs:\n" end def eql?(o) Git === o && uri == o.uri && ref == o.ref && branch == o.branch && name == o.name && version == o.version && submodules == o.submodules end alias == eql? def to_s at = if local? path elsif options["ref"] shortref_for_display(options["ref"]) else ref end "#{uri} (at #{at})" end def name File.basename(@uri, '.git') end # This is the path which is going to contain a specific # checkout of the git repository. When using local git # repos, this is set to the local repo. def install_path @install_path ||= begin git_scope = "#{base_name}-#{shortref_for_path(revision)}" if Bundler.requires_sudo? Bundler.user_bundle_path.join(Bundler.ruby_scope).join(git_scope) else Bundler.install_path.join(git_scope) end end end alias :path :install_path def unlock! git_proxy.revision = nil @unlocked = true end def local_override!(path) return false if local? path = Pathname.new(path) path = path.expand_path(Bundler.root) unless path.relative? unless options["branch"] || Bundler.settings[:disable_local_branch_check] raise GitError, "Cannot use local override for #{name} at #{path} because " \ ":branch is not specified in Gemfile. Specify a branch or use " \ "`bundle config --delete` to remove the local override" end unless path.exist? raise GitError, "Cannot use local override for #{name} because #{path} " \ "does not exist. Check `bundle config --delete` to remove the local override" end set_local!(path) # Create a new git proxy without the cached revision # so the Gemfile.lock always picks up the new revision. @git_proxy = GitProxy.new(path, uri, ref) if git_proxy.branch != options["branch"] && !Bundler.settings[:disable_local_branch_check] raise GitError, "Local override for #{name} at #{path} is using branch " \ "#{git_proxy.branch} but Gemfile specifies #{options["branch"]}" end changed = cached_revision && cached_revision != git_proxy.revision if changed && !@unlocked && !git_proxy.contains?(cached_revision) raise GitError, "The Gemfile lock is pointing to revision #{shortref_for_display(cached_revision)} " \ "but the current branch in your local override for #{name} does not contain such commit. " \ "Please make sure your branch is up to date." end changed end # TODO: actually cache git specs def specs(*) if has_app_cache? && !local? set_local!(app_cache_path) end if requires_checkout? && !@copied git_proxy.checkout git_proxy.copy_to(install_path, submodules) serialize_gemspecs_in(install_path) @copied = true end local_specs end def install(spec) debug = nil if requires_checkout? && !@copied debug = " * Checking out revision: #{ref}" git_proxy.copy_to(install_path, submodules) serialize_gemspecs_in(install_path) @copied = true end generate_bin(spec) ["Using #{spec.name} (#{spec.version}) from #{to_s}", nil, debug] end def cache(spec) return unless Bundler.settings[:cache_all] return if path == app_cache_path cached! FileUtils.rm_rf(app_cache_path) git_proxy.checkout if requires_checkout? git_proxy.copy_to(app_cache_path, @submodules) serialize_gemspecs_in(app_cache_path) end def load_spec_files super rescue PathError => e Bundler.ui.trace e raise GitError, "#{to_s} is not yet checked out. Run `bundle install` first." end # This is the path which is going to contain a cache # of the git repository. When using the same git repository # across different projects, this cache will be shared. # When using local git repos, this is set to the local repo. def cache_path @cache_path ||= begin git_scope = "#{base_name}-#{uri_hash}" if Bundler.requires_sudo? Bundler.user_bundle_path.join("cache/git", git_scope) else Bundler.cache.join("git", git_scope) end end end def app_cache_dirname "#{base_name}-#{shortref_for_path(cached_revision || revision)}" end private def serialize_gemspecs_in(destination) expanded_path = destination.expand_path(Bundler.root) Dir["#{expanded_path}/#{@glob}"].each do |spec_path| # Evaluate gemspecs and cache the result. Gemspecs # in git might require git or other dependencies. # The gemspecs we cache should already be evaluated. spec = Bundler.load_gemspec(spec_path) next unless spec File.open(spec_path, 'wb') {|file| file.write(spec.to_ruby) } end end def set_local!(path) @local = true @local_specs = @git_proxy = nil @cache_path = @install_path = path end def has_app_cache? cached_revision && super end def local? @local end def requires_checkout? allow_git_ops? && !local? end def base_name File.basename(uri.sub(%r{^(\w+://)?([^/:]+:)?(//\w*/)?(\w*/)*},''),".git") end def shortref_for_display(ref) ref[0..6] end def shortref_for_path(ref) ref[0..11] end def uri_hash if uri =~ %r{^\w+://(\w+@)?} # Downcase the domain component of the URI # and strip off a trailing slash, if one is present input = URI.parse(uri).normalize.to_s.sub(%r{/$},'') else # If there is no URI scheme, assume it is an ssh/git URI input = uri end Digest::SHA1.hexdigest(input) end def allow_git_ops? @allow_remote || @allow_cached end def cached_revision options["revision"] end def revision git_proxy.revision end def cached? cache_path.exist? end def git_proxy @git_proxy ||= GitProxy.new(cache_path, uri, ref, cached_revision){ allow_git_ops? } end end end end git/000077500000000000000000000000001446701454400347635ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/sourcegit_proxy.rb000066400000000000000000000125401446701454400373360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/source/gitmodule Bundler module Source class Git < Path class GitNotInstalledError < GitError def initialize msg = "You need to install git to be able to use gems from git repositories. " msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git" super msg end end class GitNotAllowedError < GitError def initialize(command) msg = "Bundler is trying to run a `git #{command}` at runtime. You probably need to run `bundle install`. However, " msg << "this error message could probably be more useful. Please submit a ticket at http://github.com/bundler/bundler/issues " msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}" super msg end end class GitCommandError < GitError def initialize(command, path = nil) msg = "Git error: command `git #{command}` in directory #{Dir.pwd} has failed." msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path && path.exist? super msg end end # The GitProxy is responsible to iteract with git repositories. # All actions required by the Git source is encapsualted in this # object. class GitProxy attr_accessor :path, :uri, :ref attr_writer :revision def initialize(path, uri, ref, revision=nil, &allow) @path = path @uri = uri @ref = ref @revision = revision @allow = allow || Proc.new { true } end def revision @revision ||= allowed_in_path { git("rev-parse #{ref}").strip } end def branch @branch ||= allowed_in_path do git("branch") =~ /^\* (.*)$/ && $1.strip end end def contains?(commit) allowed_in_path do result = git_null("branch --contains #{commit}") $? == 0 && result =~ /^\* (.*)$/ end end def checkout if path.exist? return if has_revision_cached? Bundler.ui.info "Updating #{uri}" in_path do git %|fetch --force --quiet --tags #{uri_escaped} "refs/heads/*:refs/heads/*"| end else Bundler.ui.info "Fetching #{uri}" FileUtils.mkdir_p(path.dirname) clone_command = %|clone #{uri_escaped} "#{path}" --bare --no-hardlinks| clone_command = "#{clone_command} --quiet" if Bundler.ui.quiet? git clone_command end end def copy_to(destination, submodules=false) unless File.exist?(destination.join(".git")) FileUtils.mkdir_p(destination.dirname) FileUtils.rm_rf(destination) git %|clone --no-checkout "#{path}" "#{destination}"| File.chmod((0777 & ~File.umask), destination) end SharedHelpers.chdir(destination) do git %|fetch --force --quiet --tags "#{path}"| git "reset --hard #{@revision}" if submodules git "submodule update --init --recursive" end end end private # TODO: Do not rely on /dev/null. # Given that open3 is not cross platform until Ruby 1.9.3, # the best solution is to pipe to /dev/null if it exists. # If it doesn't, everything will work fine, but the user # will get the $stderr messages as well. def git_null(command) if !Bundler::WINDOWS && File.exist?("/dev/null") git("#{command} 2>/dev/null", false) else git(command, false) end end def git(command, check_errors=true) raise GitNotAllowedError.new(command) unless allow? raise GitNotInstalledError.new unless Bundler.git_present? Bundler::Retry.new("git #{command}").attempts do out = SharedHelpers.with_clean_git_env { %x{git #{command}} } raise GitCommandError.new(command, path) if check_errors && !$?.success? out end end def has_revision_cached? return unless @revision in_path { git("cat-file -e #{@revision}") } true rescue GitError false end # Escape the URI for git commands def uri_escaped if Bundler::WINDOWS # Windows quoting requires double quotes only, with double quotes # inside the string escaped by being doubled. '"' + uri.gsub('"') {|s| '""'} + '"' else # Bash requires single quoted strings, with the single quotes escaped # by ending the string, escaping the quote, and restarting the string. "'" + uri.gsub("'") {|s| "'\\''"} + "'" end end def allow? @allow.call end def in_path(&blk) checkout unless path.exist? SharedHelpers.chdir(path, &blk) end def allowed_in_path if allow? in_path { yield } else raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application" end end end end end end path.rb000066400000000000000000000141751446701454400354710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/sourcemodule Bundler module Source class Path autoload :Installer, 'bundler/source/path/installer' attr_reader :path, :options attr_writer :name attr_accessor :version DEFAULT_GLOB = "{,*,*/*}.gemspec" def initialize(options) @options = options @glob = options["glob"] || DEFAULT_GLOB @allow_cached = false @allow_remote = false if options["path"] @path = Pathname.new(options["path"]) @path = @path.expand_path(Bundler.root) unless @path.relative? end @name = options["name"] @version = options["version"] # Stores the original path. If at any point we move to the # cached directory, we still have the original path to copy from. @original_path = @path end def remote! @allow_remote = true end def cached! @allow_cached = true end def self.from_lock(options) new(options.merge("path" => options.delete("remote"))) end def to_lock out = "PATH\n" out << " remote: #{relative_path}\n" out << " glob: #{@glob}\n" unless @glob == DEFAULT_GLOB out << " specs:\n" end def to_s "source at #{@path}" end def hash self.class.hash end def eql?(o) o.instance_of?(Path) && path.expand_path(Bundler.root) == o.path.expand_path(Bundler.root) && version == o.version end alias == eql? def name File.basename(path.expand_path(Bundler.root).to_s) end def install(spec) generate_bin(spec, :disable_extensions) ["Using #{spec.name} (#{spec.version}) from #{to_s}", nil] end def cache(spec) return unless Bundler.settings[:cache_all] return if @original_path.expand_path(Bundler.root).to_s.index(Bundler.root.to_s) == 0 FileUtils.rm_rf(app_cache_path) FileUtils.cp_r("#{@original_path}/.", app_cache_path) FileUtils.touch(app_cache_path.join(".bundlecache")) end def local_specs(*) @local_specs ||= load_spec_files end def specs if has_app_cache? @path = app_cache_path end local_specs end def app_cache_dirname name end private def app_cache_path @app_cache_path ||= Bundler.app_cache.join(app_cache_dirname) end def has_app_cache? SharedHelpers.in_bundle? && app_cache_path.exist? end def load_spec_files index = Index.new expanded_path = path.expand_path(Bundler.root) if File.directory?(expanded_path) Dir["#{expanded_path}/#{@glob}"].each do |file| spec = Bundler.load_gemspec(file) if spec spec.loaded_from = file.to_s spec.source = self index << spec end end if index.empty? && @name && @version index << Gem::Specification.new do |s| s.name = @name s.source = self s.version = Gem::Version.new(@version) s.platform = Gem::Platform::RUBY s.summary = "Fake gemspec for #{@name}" s.relative_loaded_from = "#{@name}.gemspec" s.authors = ["no one"] if expanded_path.join("bin").exist? executables = expanded_path.join("bin").children executables.reject!{|p| File.directory?(p) } s.executables = executables.map{|c| c.basename.to_s } end end end elsif File.exists?(expanded_path) raise PathError, "The path `#{expanded_path}` is not a directory." else raise PathError, "The path `#{expanded_path}` does not exist." end index end def relative_path if path.to_s.match(%r{^#{Regexp.escape Bundler.root.to_s}}) return path.relative_path_from(Bundler.root) end path end def generate_bin(spec, disable_extensions = false) gem_dir = Pathname.new(spec.full_gem_path) # Some gem authors put absolute paths in their gemspec # and we have to save them from themselves spec.files = spec.files.map do |p| next if File.directory?(p) begin Pathname.new(p).relative_path_from(gem_dir).to_s rescue ArgumentError p end end.compact gem_file = Bundler.rubygems.build_gem gem_dir, spec installer = Path::Installer.new(spec, :env_shebang => false) run_hooks(:pre_install, installer) installer.build_extensions unless disable_extensions run_hooks(:post_build, installer) installer.generate_bin run_hooks(:post_install, installer) rescue Gem::InvalidSpecificationException => e Bundler.ui.warn "\n#{spec.name} at #{spec.full_gem_path} did not have a valid gemspec.\n" \ "This prevents bundler from installing bins or native extensions, but " \ "that may not affect its functionality." if !spec.extensions.empty? && !spec.email.empty? Bundler.ui.warn "If you need to use this package without installing it from a gem " \ "repository, please contact #{spec.email} and ask them " \ "to modify their .gemspec so it can work with `gem build`." end Bundler.ui.warn "The validation message from Rubygems was:\n #{e.message}" ensure if gem_dir && gem_file FileUtils.rm_rf(gem_dir.join gem_file) end end def run_hooks(type, installer) hooks_meth = "#{type}_hooks" return unless Gem.respond_to?(hooks_meth) Gem.send(hooks_meth).each do |hook| result = hook.call(installer) if result == false location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/ message = "#{type} hook#{location} failed for #{installer.spec.full_name}" raise InstallHookError, message end end end end end end path/000077500000000000000000000000001446701454400351345ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/sourceinstaller.rb000066400000000000000000000022611446701454400374570ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/source/pathmodule Bundler module Source class Path class Installer < Bundler::GemInstaller def initialize(spec, options = {}) @spec = spec @bin_dir = Bundler.requires_sudo? ? "#{Bundler.tmp}/bin" : "#{Bundler.rubygems.gem_dir}/bin" @gem_dir = Bundler.rubygems.path(spec.full_gem_path) @wrappers = options[:wrappers] || true @env_shebang = options[:env_shebang] || true @format_executable = options[:format_executable] || false @build_args = options[:build_args] || Bundler.rubygems.build_args end def generate_bin return if spec.executables.nil? || spec.executables.empty? if Bundler.requires_sudo? FileUtils.mkdir_p("#{Bundler.tmp}/bin") unless File.exist?("#{Bundler.tmp}/bin") end super if Bundler.requires_sudo? Bundler.mkdir_p "#{Bundler.rubygems.gem_dir}/bin" spec.executables.each do |exe| Bundler.sudo "cp -R #{Bundler.tmp}/bin/#{exe} #{Bundler.rubygems.gem_dir}/bin/" end end end end end end end rubygems.rb000066400000000000000000000222551446701454400363700ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/sourcerequire 'uri' require 'rubygems/user_interaction' require 'rubygems/spec_fetcher' module Bundler module Source # TODO: Refactor this class class Rubygems API_REQUEST_LIMIT = 100 # threshold for switching back to the modern index instead of fetching every spec attr_reader :remotes, :caches attr_accessor :dependency_names def initialize(options = {}) @options = options @remotes = (options["remotes"] || []).map { |r| normalize_uri(r) } @fetchers = {} @dependency_names = [] @allow_remote = false @allow_cached = false @caches = [ Bundler.app_cache ] + Bundler.rubygems.gem_path.map{|p| File.expand_path("#{p}/cache") } end def remote! @allow_remote = true end def cached! @allow_cached = true end def hash Rubygems.hash end def eql?(o) Rubygems === o end alias == eql? def options { "remotes" => @remotes.map { |r| r.to_s } } end def self.from_lock(options) s = new(options) Array(options["remote"]).each { |r| s.add_remote(r) } s end def to_lock out = "GEM\n" out << remotes.map {|r| " remote: #{r}\n" }.join out << " specs:\n" end def to_s remote_names = self.remotes.map { |r| r.to_s }.join(', ') "rubygems repository #{remote_names}" end alias_method :name, :to_s def specs @specs ||= fetch_specs end def install(spec) if installed_specs[spec].any? && gem_dir_exists?(spec) return ["Using #{spec.name} (#{spec.version})", nil] end # Download the gem to get the spec, because some specs that are returned # by rubygems.org are broken and wrong. if spec.source_uri path = Fetcher.download_gem_from_uri(spec, spec.source_uri) s = Bundler.rubygems.spec_from_gem(path, Bundler.settings["trust-policy"]) spec.__swap__(s) end install_message = "Installing #{spec.name} (#{spec.version})" path = cached_gem(spec) if Bundler.requires_sudo? install_path = Bundler.tmp bin_path = install_path.join("bin") else install_path = Bundler.rubygems.gem_dir bin_path = Bundler.system_bindir end installed_spec = nil Bundler.rubygems.preserve_paths do installed_spec = Bundler::GemInstaller.new(path, :install_dir => install_path.to_s, :bin_dir => bin_path.to_s, :ignore_dependencies => true, :wrappers => true, :env_shebang => true ).install end # SUDO HAX if Bundler.requires_sudo? Bundler.mkdir_p "#{Bundler.rubygems.gem_dir}/gems" Bundler.mkdir_p "#{Bundler.rubygems.gem_dir}/specifications" Bundler.sudo "cp -R #{Bundler.tmp}/gems/#{spec.full_name} #{Bundler.rubygems.gem_dir}/gems/" Bundler.sudo "cp -R #{Bundler.tmp}/specifications/#{spec.full_name}.gemspec #{Bundler.rubygems.gem_dir}/specifications/" spec.executables.each do |exe| Bundler.mkdir_p Bundler.system_bindir Bundler.sudo "cp -R #{Bundler.tmp}/bin/#{exe} #{Bundler.system_bindir}" end end installed_spec.loaded_from = "#{Bundler.rubygems.gem_dir}/specifications/#{spec.full_name}.gemspec" spec.loaded_from = "#{Bundler.rubygems.gem_dir}/specifications/#{spec.full_name}.gemspec" [install_message, spec.post_install_message] end def cache(spec) cached_path = cached_gem(spec) raise GemNotFound, "Missing gem file '#{spec.full_name}.gem'." unless cached_path return if File.dirname(cached_path) == Bundler.app_cache.to_s Bundler.ui.info " * #{File.basename(cached_path)}" FileUtils.cp(cached_path, Bundler.app_cache) end def add_remote(source) @remotes << normalize_uri(source) end def replace_remotes(source) return false if source.remotes == @remotes @remotes = [] source.remotes.each do |r| add_remote r.to_s end true end private def cached_gem(spec) possibilities = @caches.map { |p| "#{p}/#{spec.file_name}" } cached_gem = possibilities.find { |p| File.exist?(p) } unless cached_gem raise Bundler::GemNotFound, "Could not find #{spec.file_name} for installation" end cached_gem end def normalize_uri(uri) uri = uri.to_s uri = "#{uri}/" unless uri =~ %r'/$' uri = URI(uri) raise ArgumentError, "The source must be an absolute URI" unless uri.absolute? uri end def fetch_specs # remote_specs usually generates a way larger Index than the other # sources, and large_idx.use small_idx is way faster than # small_idx.use large_idx. if @allow_remote idx = remote_specs.dup else idx = Index.new end idx.use(cached_specs, :override_dupes) if @allow_cached || @allow_remote idx.use(installed_specs, :override_dupes) idx end def installed_specs @installed_specs ||= begin idx = Index.new have_bundler = false Bundler.rubygems.all_specs.reverse.each do |spec| next if spec.name == 'bundler' && spec.version.to_s != VERSION have_bundler = true if spec.name == 'bundler' spec.source = self idx << spec end # Always have bundler locally unless have_bundler # We're running bundler directly from the source # so, let's create a fake gemspec for it (it's a path) # gemspec bundler = Gem::Specification.new do |s| s.name = 'bundler' s.version = VERSION s.platform = Gem::Platform::RUBY s.source = self s.authors = ["bundler team"] s.loaded_from = File.expand_path("..", __FILE__) end idx << bundler end idx end end def cached_specs @cached_specs ||= begin idx = installed_specs.dup path = Bundler.app_cache Dir["#{path}/*.gem"].each do |gemfile| next if gemfile =~ /^bundler\-[\d\.]+?\.gem/ s ||= Bundler.rubygems.spec_from_gem(gemfile) s.source = self idx << s end end idx end def remote_specs @remote_specs ||= begin old = Bundler.rubygems.sources idx = Index.new fetchers = remotes.map { |uri| Bundler::Fetcher.new(uri) } api_fetchers = fetchers.select { |f| f.use_api } index_fetchers = fetchers - api_fetchers # gather lists from non-api sites index_fetchers.each do |f| Bundler.ui.info "Fetching source index from #{f.uri}" idx.use f.specs(nil, self) end return idx if api_fetchers.empty? # because ensuring we have all the gems we need involves downloading # the gemspecs of those gems, if the non-api sites contain more than # about 100 gems, we just treat all sites as non-api for speed. allow_api = idx.size < API_REQUEST_LIMIT && dependency_names.size < API_REQUEST_LIMIT if allow_api api_fetchers.each do |f| Bundler.ui.info "Fetching gem metadata from #{f.uri}", Bundler.ui.debug? idx.use f.specs(dependency_names, self) Bundler.ui.info "" if !Bundler.ui.debug? # new line now that the dots are over end if api_fetchers.all?{|f| f.use_api } # it's possible that gems from one source depend on gems from some # other source, so now we download gemspecs and iterate over those # dependencies, looking for gems we don't have info on yet. unmet = idx.unmet_dependency_names # if there are any cross-site gems we missed, get them now api_fetchers.each do |f| Bundler.ui.info "Fetching additional metadata from #{f.uri}", Bundler.ui.debug? idx.use f.specs(unmet, self) Bundler.ui.info "" if !Bundler.ui.debug? # new line now that the dots are over end if unmet.any? else allow_api = false end end if !allow_api api_fetchers.each do |f| Bundler.ui.info "Fetching source index from #{f.uri}" idx.use f.specs(nil, self) end end return idx ensure Bundler.rubygems.sources = old end end def gem_dir_exists?(spec) return true if spec.name == "bundler" # Ruby 2 default gems return true if spec.loaded_from.include?("specifications/default/") # Ruby 1.9 default gems return true if spec.summary =~ /is bundled with Ruby/ File.directory?(spec.full_gem_path) end end end end spec_set.rb000066400000000000000000000072331446701454400350370ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'tsort' require 'forwardable' module Bundler class SpecSet extend Forwardable include TSort, Enumerable def_delegators :@specs, :<<, :length, :add, :remove def_delegators :sorted, :each def initialize(specs) @specs = specs.sort_by { |s| s.name } end def for(dependencies, skip = [], check = false, match_current_platform = false) handled, deps, specs = {}, dependencies.dup, [] skip << 'bundler' until deps.empty? dep = deps.shift next if handled[dep] || skip.include?(dep.name) spec = lookup[dep.name].find do |s| if match_current_platform Gem::Platform.match(s.platform) else s.match_platform(dep.__platform) end end handled[dep] = true if spec specs << spec spec.dependencies.each do |d| next if d.type == :development d = DepProxy.new(d, dep.__platform) unless match_current_platform deps << d end elsif check return false end end if spec = lookup['bundler'].first specs << spec end check ? true : SpecSet.new(specs) end def valid_for?(deps) self.for(deps, [], true) end def [](key) key = key.name if key.respond_to?(:name) lookup[key].reverse end def []=(key, value) @specs << value @lookup = nil @sorted = nil value end def sort! self end def to_a sorted.dup end def to_hash lookup.dup end def materialize(deps, missing_specs = nil) materialized = self.for(deps, [], false, true).to_a deps = materialized.map {|s| s.name }.uniq materialized.map! do |s| next s unless s.is_a?(LazySpecification) s.source.dependency_names = deps if s.source.respond_to?(:dependency_names=) spec = s.__materialize__ if missing_specs missing_specs << s unless spec else raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec end spec if spec end SpecSet.new(materialized.compact) end def merge(set) arr = sorted.dup set.each do |s| next if arr.any? { |s2| s2.name == s.name && s2.version == s.version && s2.platform == s.platform } arr << s end SpecSet.new(arr) end private def sorted rake = @specs.find { |s| s.name == 'rake' } begin @sorted ||= ([rake] + tsort).compact.uniq rescue TSort::Cyclic => error cgems = extract_circular_gems(error) raise CyclicDependencyError, "Your Gemfile requires gems that depend" \ " depend on each other, creating an infinite loop. Please remove" \ " either gem '#{cgems[1]}' or gem '#{cgems[0]}' and try again." end end def extract_circular_gems(error) if Bundler.current_ruby.mri? && Bundler.current_ruby.on_19? error.message.scan(/(\w+) \([^)]/).flatten else error.message.scan(/@name="(.*?)"/).flatten end end def lookup @lookup ||= begin lookup = Hash.new { |h,k| h[k] = [] } specs = @specs.sort_by do |s| s.platform.to_s == 'ruby' ? "\0" : s.platform.to_s end specs.reverse_each do |s| lookup[s.name] << s end lookup end end def tsort_each_node @specs.each { |s| yield s } end def tsort_each_child(s) s.dependencies.sort_by { |d| d.name }.each do |d| next if d.type == :development lookup[d.name].each { |s2| yield s2 } end end end end ssl_certs/000077500000000000000000000000001446701454400347015ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler.document000066400000000000000000000000451446701454400365170ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/ssl_certs# Ignore all files in this directory Class3PublicPrimaryCertificationAuthority.pem000066400000000000000000000015021446701454400456520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/ssl_certs-----BEGIN CERTIFICATE----- MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k -----END CERTIFICATE----- DigiCertHighAssuranceEVRootCA.pem000066400000000000000000000025271446701454400430540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/ssl_certs-----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep +OkuE6N36B9K -----END CERTIFICATE----- EntrustnetSecureServerCertificationAuthority.pem000066400000000000000000000033141446701454400465330ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/ssl_certs-----BEGIN CERTIFICATE----- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= -----END CERTIFICATE----- GeoTrustGlobalCA.pem000066400000000000000000000023001446701454400405000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/ssl_certs-----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- templates/000077500000000000000000000000001446701454400346765ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerExecutable000066400000000000000000000007521446701454400367060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG['ruby_install_name'] %> # # This file was generated by Bundler. # # The application '<%= executable %>' is installed as part of a gem, and # this file is here to facilitate running it. # require 'pathname' ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../<%= relative_gemfile_path %>", Pathname.new(__FILE__).realpath) require 'rubygems' require 'bundler/setup' load Gem.bin_path('<%= spec.name %>', '<%= executable %>') Executable.standalone000066400000000000000000000006251446701454400410340ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG['ruby_install_name'] %> # # This file was generated by Bundler. # # The application '<%= executable %>' is installed as part of a gem, and # this file is here to facilitate running it. # $:.unshift File.expand_path '../<%= standalone_path %>', __FILE__ require 'bundler/setup' load File.expand_path '../<%= executable_path %>', __FILE__ Gemfile000066400000000000000000000001001446701454400361600ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates# A sample Gemfile source "https://rubygems.org" # gem "rails" newgem/000077500000000000000000000000001446701454400361605ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates.travis.yml.tt000066400000000000000000000000541446701454400407160ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemlanguage: ruby rvm: - <%= RUBY_VERSION %> Gemfile.tt000066400000000000000000000001471446701454400401030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemsource 'https://rubygems.org' # Specify your gem's dependencies in <%=config[:name]%>.gemspec gemspec LICENSE.txt.tt000066400000000000000000000021031446701454400404250ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemCopyright (c) <%=Time.now.year%> <%=config[:author]%> MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. README.md.tt000066400000000000000000000011361446701454400400660ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem# <%=config[:constant_name]%> TODO: Write a gem description ## Installation Add this line to your application's Gemfile: gem '<%=config[:name]%>' And then execute: $ bundle Or install it yourself as: $ gem install <%=config[:name]%> ## Usage TODO: Write usage instructions here ## Contributing 1. Fork it ( http://github.com//<%=config[:name]%>/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request Rakefile.tt000066400000000000000000000004651446701454400402600ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemrequire "bundler/gem_tasks" <% if config[:test] == 'minitest' -%> require "rake/testtask" Rake::TestTask.new(:test) do |t| t.libs << "test" end task :default => :test <% elsif config[:test] == 'rspec' -%> require "rspec/core/rake_task" RSpec::Core::RakeTask.new(:spec) task :default => :spec <% end -%> bin/000077500000000000000000000000001446701454400367305ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemnewgem.tt000066400000000000000000000000771446701454400405670ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/bin#!/usr/bin/env ruby require '<%= config[:namespaced_path] %>' gitignore.tt000066400000000000000000000002321446701454400405150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem*.gem *.rbc .bundle .config .yardoc Gemfile.lock InstalledFiles _yardoc coverage doc/ lib/bundler/man pkg rdoc spec/reports test/tmp test/version_tmp tmp lib/000077500000000000000000000000001446701454400367265ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemnewgem.rb.tt000066400000000000000000000004531446701454400411650ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/librequire "<%=config[:namespaced_path]%>/version" <%- config[:constant_array].each_with_index do |c,i| -%> <%= ' '*i %>module <%= c %> <%- end -%> <%= ' '*config[:constant_array].size %># Your code goes here... <%- (config[:constant_array].size-1).downto(0) do |i| -%> <%= ' '*i %>end <%- end -%> newgem/000077500000000000000000000000001446701454400402105ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/libversion.rb.tt000066400000000000000000000003631446701454400426520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/lib/newgem<%- config[:constant_array].each_with_index do |c,i| -%> <%= ' '*i %>module <%= c %> <%- end -%> <%= ' '*config[:constant_array].size %>VERSION = "0.0.1" <%- (config[:constant_array].size-1).downto(0) do |i| -%> <%= ' '*i %>end <%- end -%> newgem.gemspec.tt000066400000000000000000000020571446701454400414410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem# coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require '<%=config[:namespaced_path]%>/version' Gem::Specification.new do |spec| spec.name = <%=config[:name].inspect%> spec.version = <%=config[:constant_name]%>::VERSION spec.authors = [<%=config[:author].inspect%>] spec.email = [<%=config[:email].inspect%>] spec.summary = %q{TODO: Write a short summary. Required.} spec.description = %q{TODO: Write a longer description. Optional.} spec.homepage = "" spec.license = "MIT" spec.files = `git ls-files -z`.split("\x0") spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] spec.add_development_dependency "bundler", "~> <%= Bundler::VERSION.split(".")[0..1].join(".") %>" spec.add_development_dependency "rake" <% if config[:test] -%> spec.add_development_dependency "<%=config[:test]%>" <% end -%> end rspec.tt000066400000000000000000000000371446701454400376450ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem--format documentation --color spec/000077500000000000000000000000001446701454400371125ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemnewgem_spec.rb.tt000066400000000000000000000003641446701454400423640ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/specrequire 'spec_helper' describe <%= config[:constant_name] %> do it 'should have a version number' do <%= config[:constant_name] %>::VERSION.should_not be_nil end it 'should do something useful' do false.should be_true end end spec_helper.rb.tt000066400000000000000000000001451446701454400423560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/spec$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) require '<%= config[:namespaced_path] %>' test/000077500000000000000000000000001446701454400371375ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgemminitest_helper.rb.tt000066400000000000000000000002011446701454400432760ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/test$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) require '<%= config[:namespaced_path] %>' require 'minitest/autorun' test_newgem.rb.tt000066400000000000000000000004041446701454400424310ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/templates/newgem/testrequire 'minitest_helper' class Test<%= config[:constant_name] %> < MiniTest::Unit::TestCase def test_that_it_has_a_version_number refute_nil ::<%= config[:constant_name] %>::VERSION end def test_it_does_something_useful assert false end end ui.rb000066400000000000000000000061071446701454400336460ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerrequire 'rubygems/user_interaction' module Bundler class UI def warn(message, newline = nil) end def debug(message, newline = nil) end def trace(message, newline = nil) end def error(message, newline = nil) end def info(message, newline = nil) end def confirm(message, newline = nil) end def quiet? false end def debug? false end def ask(message) end class Shell < UI LEVELS = %w(silent error warn confirm info debug) attr_writer :shell def initialize(options = {}) if options["no-color"] || !STDOUT.tty? Thor::Base.shell = Thor::Shell::Basic end @shell = Thor::Base.shell.new @level = ENV['DEBUG'] ? "debug" : "info" end def info(msg, newline = nil) tell_me(msg, nil, newline) if level("info") end def confirm(msg, newline = nil) tell_me(msg, :green, newline) if level("confirm") end def warn(msg, newline = nil) tell_me(msg, :yellow, newline) if level("warn") end def error(msg, newline = nil) tell_me(msg, :red, newline) if level("error") end def debug(msg, newline = nil) tell_me(msg, nil, newline) if level("debug") end def debug? # needs to be false instead of nil to be newline param to other methods level("debug") end def quiet? LEVELS.index(@level) <= LEVELS.index("warn") end def ask(msg) @shell.ask(msg) end def level=(level) raise ArgumentError unless LEVELS.include?(level.to_s) @level = level end def level(name = nil) name ? LEVELS.index(name) <= LEVELS.index(@level) : @level end def trace(e, newline = nil) msg = ["#{e.class}: #{e.message}", *e.backtrace].join("\n") if debug? tell_me(msg, nil, newline) elsif @trace STDERR.puts "#{msg}#{newline}" end end def silence old_level, @level = @level, "silent" yield ensure @level = old_level end private # valimism def tell_me(msg, color = nil, newline = nil) msg = word_wrap(msg) if newline.is_a?(Hash) && newline[:wrap] if newline.nil? @shell.say(msg, color) else @shell.say(msg, color, newline) end end def strip_leading_spaces(text) spaces = text[/\A\s+/, 0] spaces ? text.gsub(/#{spaces}/, '') : text end def word_wrap(text, line_width = @shell.terminal_width) strip_leading_spaces(text).split("\n").collect do |line| line.length > line_width ? line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip : line end * "\n" end end class RGProxy < ::Gem::SilentUI def initialize(ui) @ui = ui super() end def say(message) if message =~ /native extensions/ @ui.info "with native extensions " else @ui.debug(message) end end end end end vendor/000077500000000000000000000000001446701454400341755ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler.document000066400000000000000000000000001446701454400360020ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendornet/000077500000000000000000000000001446701454400347635ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendorhttp/000077500000000000000000000000001446701454400357425ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/netfaster.rb000066400000000000000000000012251446701454400375530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/net/httprequire 'net/protocol' ## # Aaron Patterson's monkeypatch (accepted into 1.9.1) to fix Net::HTTP's speed # problems. # # http://gist.github.com/251244 class Net::BufferedIO #:nodoc: alias :old_rbuf_fill :rbuf_fill def rbuf_fill if @io.respond_to? :read_nonblock then begin @rbuf << @io.read_nonblock(65536) rescue Errno::EWOULDBLOCK, Errno::EAGAIN => e retry if IO.select [@io], nil, nil, @read_timeout raise Timeout::Error, e.message end else # SSL sockets do not have read_nonblock timeout @read_timeout do @rbuf << @io.sysread(65536) end end end end if RUBY_VERSION < '1.9' persistent.rb000066400000000000000000001002021446701454400404620ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/net/httprequire 'net/http' begin require 'net/https' rescue LoadError # net/https or openssl end if RUBY_VERSION < '1.9' # but only for 1.8 require 'net/http/faster' require 'uri' require 'cgi' # for escaping begin require 'net/http/pipeline' rescue LoadError end autoload :OpenSSL, 'openssl' ## # Persistent connections for Net::HTTP # # Net::HTTP::Persistent maintains persistent connections across all the # servers you wish to talk to. For each host:port you communicate with a # single persistent connection is created. # # Multiple Net::HTTP::Persistent objects will share the same set of # connections. # # For each thread you start a new connection will be created. A # Net::HTTP::Persistent connection will not be shared across threads. # # You can shut down the HTTP connections when done by calling #shutdown. You # should name your Net::HTTP::Persistent object if you intend to call this # method. # # Example: # # require 'net/http/persistent' # # uri = URI 'http://example.com/awesome/web/service' # # http = Net::HTTP::Persistent.new 'my_app_name' # # # perform a GET # response = http.request uri # # # or # # get = Net::HTTP::Get.new uri.request_uri # response = http.request get # # # create a POST # post_uri = uri + 'create' # post = Net::HTTP::Post.new post_uri.path # post.set_form_data 'some' => 'cool data' # # # perform the POST, the URI is always required # response http.request post_uri, post # # Note that for GET, HEAD and other requests that do not have a body you want # to use URI#request_uri not URI#path. The request_uri contains the query # params which are sent in the body for other requests. # # == SSL # # SSL connections are automatically created depending upon the scheme of the # URI. SSL connections are automatically verified against the default # certificate store for your computer. You can override this by changing # verify_mode or by specifying an alternate cert_store. # # Here are the SSL settings, see the individual methods for documentation: # # #certificate :: This client's certificate # #ca_file :: The certificate-authority # #cert_store :: An SSL certificate store # #private_key :: The client's SSL private key # #reuse_ssl_sessions :: Reuse a previously opened SSL session for a new # connection # #ssl_version :: Which specific SSL version to use # #verify_callback :: For server certificate verification # #verify_mode :: How connections should be verified # # == Proxies # # A proxy can be set through #proxy= or at initialization time by providing a # second argument to ::new. The proxy may be the URI of the proxy server or # :ENV which will consult environment variables. # # See #proxy= and #proxy_from_env for details. # # == Headers # # Headers may be specified for use in every request. #headers are appended to # any headers on the request. #override_headers replace existing headers on # the request. # # The difference between the two can be seen in setting the User-Agent. Using # http.headers['User-Agent'] = 'MyUserAgent' will send "Ruby, # MyUserAgent" while http.override_headers['User-Agent'] = # 'MyUserAgent' will send "MyUserAgent". # # == Tuning # # === Segregation # # By providing an application name to ::new you can separate your connections # from the connections of other applications. # # === Idle Timeout # # If a connection hasn't been used for this number of seconds it will automatically be # reset upon the next use to avoid attempting to send to a closed connection. # The default value is 5 seconds. nil means no timeout. Set through #idle_timeout. # # Reducing this value may help avoid the "too many connection resets" error # when sending non-idempotent requests while increasing this value will cause # fewer round-trips. # # === Read Timeout # # The amount of time allowed between reading two chunks from the socket. Set # through #read_timeout # # === Max Requests # # The number of requests that should be made before opening a new connection. # Typically many keep-alive capable servers tune this to 100 or less, so the # 101st request will fail with ECONNRESET. If unset (default), this value has no # effect, if set, connections will be reset on the request after max_requests. # # === Open Timeout # # The amount of time to wait for a connection to be opened. Set through # #open_timeout. # # === Socket Options # # Socket options may be set on newly-created connections. See #socket_options # for details. # # === Non-Idempotent Requests # # By default non-idempotent requests will not be retried per RFC 2616. By # setting retry_change_requests to true requests will automatically be retried # once. # # Only do this when you know that retrying a POST or other non-idempotent # request is safe for your application and will not create duplicate # resources. # # The recommended way to handle non-idempotent requests is the following: # # require 'net/http/persistent' # # uri = URI 'http://example.com/awesome/web/service' # post_uri = uri + 'create' # # http = Net::HTTP::Persistent.new 'my_app_name' # # post = Net::HTTP::Post.new post_uri.path # # ... fill in POST request # # begin # response = http.request post_uri, post # rescue Net::HTTP::Persistent::Error # # # POST failed, make a new request to verify the server did not process # # the request # exists_uri = uri + '...' # response = http.get exists_uri # # # Retry if it failed # retry if response.code == '404' # end # # The method of determining if the resource was created or not is unique to # the particular service you are using. Of course, you will want to add # protection from infinite looping. # # === Connection Termination # # If you are done using the Net::HTTP::Persistent instance you may shut down # all the connections in the current thread with #shutdown. This is not # recommended for normal use, it should only be used when it will be several # minutes before you make another HTTP request. # # If you are using multiple threads, call #shutdown in each thread when the # thread is done making requests. If you don't call shutdown, that's OK. # Ruby will automatically garbage collect and shutdown your HTTP connections # when the thread terminates. class Net::HTTP::Persistent ## # The beginning of Time EPOCH = Time.at 0 # :nodoc: ## # Is OpenSSL available? This test works with autoload HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc: ## # The version of Net::HTTP::Persistent you are using VERSION = '2.9' ## # Exceptions rescued for automatic retry on ruby 2.0.0. This overlaps with # the exception list for ruby 1.x. RETRIED_EXCEPTIONS = [ # :nodoc: (Net::ReadTimeout if Net.const_defined? :ReadTimeout), IOError, EOFError, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, (OpenSSL::SSL::SSLError if HAVE_OPENSSL), Timeout::Error, ].compact ## # Error class for errors raised by Net::HTTP::Persistent. Various # SystemCallErrors are re-raised with a human-readable message under this # class. class Error < StandardError; end ## # Use this method to detect the idle timeout of the host at +uri+. The # value returned can be used to configure #idle_timeout. +max+ controls the # maximum idle timeout to detect. # # After # # Idle timeout detection is performed by creating a connection then # performing a HEAD request in a loop until the connection terminates # waiting one additional second per loop. # # NOTE: This may not work on ruby > 1.9. def self.detect_idle_timeout uri, max = 10 uri = URI uri unless URI::Generic === uri uri += '/' req = Net::HTTP::Head.new uri.request_uri http = new 'net-http-persistent detect_idle_timeout' connection = http.connection_for uri sleep_time = 0 loop do response = connection.request req $stderr.puts "HEAD #{uri} => #{response.code}" if $DEBUG unless Net::HTTPOK === response then raise Error, "bad response code #{response.code} detecting idle timeout" end break if sleep_time >= max sleep_time += 1 $stderr.puts "sleeping #{sleep_time}" if $DEBUG sleep sleep_time end rescue # ignore StandardErrors, we've probably found the idle timeout. ensure http.shutdown return sleep_time unless $! end ## # This client's OpenSSL::X509::Certificate attr_reader :certificate # For Net::HTTP parity alias cert certificate ## # An SSL certificate authority. Setting this will set verify_mode to # VERIFY_PEER. attr_reader :ca_file ## # An SSL certificate store. Setting this will override the default # certificate store. See verify_mode for more information. attr_reader :cert_store ## # Sends debug_output to this IO via Net::HTTP#set_debug_output. # # Never use this method in production code, it causes a serious security # hole. attr_accessor :debug_output ## # Current connection generation attr_reader :generation # :nodoc: ## # Where this instance's connections live in the thread local variables attr_reader :generation_key # :nodoc: ## # Headers that are added to every request using Net::HTTP#add_field attr_reader :headers ## # Maps host:port to an HTTP version. This allows us to enable version # specific features. attr_reader :http_versions ## # Maximum time an unused connection can remain idle before being # automatically closed. attr_accessor :idle_timeout ## # Maximum number of requests on a connection before it is considered expired # and automatically closed. attr_accessor :max_requests ## # The value sent in the Keep-Alive header. Defaults to 30. Not needed for # HTTP/1.1 servers. # # This may not work correctly for HTTP/1.0 servers # # This method may be removed in a future version as RFC 2616 does not # require this header. attr_accessor :keep_alive ## # A name for this connection. Allows you to keep your connections apart # from everybody else's. attr_reader :name ## # Seconds to wait until a connection is opened. See Net::HTTP#open_timeout attr_accessor :open_timeout ## # Headers that are added to every request using Net::HTTP#[]= attr_reader :override_headers ## # This client's SSL private key attr_reader :private_key # For Net::HTTP parity alias key private_key ## # The URL through which requests will be proxied attr_reader :proxy_uri ## # List of host suffixes which will not be proxied attr_reader :no_proxy ## # Seconds to wait until reading one block. See Net::HTTP#read_timeout attr_accessor :read_timeout ## # Where this instance's request counts live in the thread local variables attr_reader :request_key # :nodoc: ## # By default SSL sessions are reused to avoid extra SSL handshakes. Set # this to false if you have problems communicating with an HTTPS server # like: # # SSL_connect [...] read finished A: unexpected message (OpenSSL::SSL::SSLError) attr_accessor :reuse_ssl_sessions ## # An array of options for Socket#setsockopt. # # By default the TCP_NODELAY option is set on sockets. # # To set additional options append them to this array: # # http.socket_options << [Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1] attr_reader :socket_options ## # Current SSL connection generation attr_reader :ssl_generation # :nodoc: ## # Where this instance's SSL connections live in the thread local variables attr_reader :ssl_generation_key # :nodoc: ## # SSL version to use. # # By default, the version will be negotiated automatically between client # and server. Ruby 1.9 and newer only. attr_reader :ssl_version if RUBY_VERSION > '1.9' ## # Where this instance's last-use times live in the thread local variables attr_reader :timeout_key # :nodoc: ## # SSL verification callback. Used when ca_file is set. attr_reader :verify_callback ## # HTTPS verify mode. Defaults to OpenSSL::SSL::VERIFY_PEER which verifies # the server certificate. # # If no ca_file or cert_store is set the default system certificate store is # used. # # You can use +verify_mode+ to override any default values. attr_reader :verify_mode ## # Enable retries of non-idempotent requests that change data (e.g. POST # requests) when the server has disconnected. # # This will in the worst case lead to multiple requests with the same data, # but it may be useful for some applications. Take care when enabling # this option to ensure it is safe to POST or perform other non-idempotent # requests to the server. attr_accessor :retry_change_requests ## # Creates a new Net::HTTP::Persistent. # # Set +name+ to keep your connections apart from everybody else's. Not # required currently, but highly recommended. Your library name should be # good enough. This parameter will be required in a future version. # # +proxy+ may be set to a URI::HTTP or :ENV to pick up proxy options from # the environment. See proxy_from_env for details. # # In order to use a URI for the proxy you may need to do some extra work # beyond URI parsing if the proxy requires a password: # # proxy = URI 'http://proxy.example' # proxy.user = 'AzureDiamond' # proxy.password = 'hunter2' def initialize name = nil, proxy = nil @name = name @debug_output = nil @proxy_uri = nil @no_proxy = [] @headers = {} @override_headers = {} @http_versions = {} @keep_alive = 30 @open_timeout = nil @read_timeout = nil @idle_timeout = 5 @max_requests = nil @socket_options = [] @socket_options << [Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1] if Socket.const_defined? :TCP_NODELAY key = ['net_http_persistent', name].compact @generation_key = [key, 'generations' ].join('_').intern @ssl_generation_key = [key, 'ssl_generations'].join('_').intern @request_key = [key, 'requests' ].join('_').intern @timeout_key = [key, 'timeouts' ].join('_').intern @certificate = nil @ca_file = nil @private_key = nil @ssl_version = nil @verify_callback = nil @verify_mode = nil @cert_store = nil @generation = 0 # incremented when proxy URI changes @ssl_generation = 0 # incremented when SSL session variables change if HAVE_OPENSSL then @verify_mode = OpenSSL::SSL::VERIFY_PEER @reuse_ssl_sessions = OpenSSL::SSL.const_defined? :Session end @retry_change_requests = false @ruby_1 = RUBY_VERSION < '2' @retried_on_ruby_2 = !@ruby_1 self.proxy = proxy if proxy end ## # Sets this client's OpenSSL::X509::Certificate def certificate= certificate @certificate = certificate reconnect_ssl end # For Net::HTTP parity alias cert= certificate= ## # Sets the SSL certificate authority file. def ca_file= file @ca_file = file reconnect_ssl end ## # Overrides the default SSL certificate store used for verifying # connections. def cert_store= store @cert_store = store reconnect_ssl end ## # Finishes all connections on the given +thread+ that were created before # the given +generation+ in the threads +generation_key+ list. # # See #shutdown for a bunch of scary warning about misusing this method. def cleanup(generation, thread = Thread.current, generation_key = @generation_key) # :nodoc: timeouts = thread[@timeout_key] (0...generation).each do |old_generation| next unless thread[generation_key] conns = thread[generation_key].delete old_generation conns.each_value do |conn| finish conn, thread timeouts.delete conn.object_id if timeouts end if conns end end ## # Creates a new connection for +uri+ def connection_for uri Thread.current[@generation_key] ||= Hash.new { |h,k| h[k] = {} } Thread.current[@ssl_generation_key] ||= Hash.new { |h,k| h[k] = {} } Thread.current[@request_key] ||= Hash.new 0 Thread.current[@timeout_key] ||= Hash.new EPOCH use_ssl = uri.scheme.downcase == 'https' if use_ssl then raise Net::HTTP::Persistent::Error, 'OpenSSL is not available' unless HAVE_OPENSSL ssl_generation = @ssl_generation ssl_cleanup ssl_generation connections = Thread.current[@ssl_generation_key][ssl_generation] else generation = @generation cleanup generation connections = Thread.current[@generation_key][generation] end net_http_args = [uri.host, uri.port] connection_id = net_http_args.join ':' if @proxy_uri and not proxy_bypass? uri.host, uri.port then connection_id << @proxy_connection_id net_http_args.concat @proxy_args end connection = connections[connection_id] unless connection = connections[connection_id] then connections[connection_id] = http_class.new(*net_http_args) connection = connections[connection_id] ssl connection if use_ssl else reset connection if expired? connection end start connection unless connection.started? connection.read_timeout = @read_timeout if @read_timeout connection rescue Errno::ECONNREFUSED address = connection.proxy_address || connection.address port = connection.proxy_port || connection.port raise Error, "connection refused: #{address}:#{port}" rescue Errno::EHOSTDOWN address = connection.proxy_address || connection.address port = connection.proxy_port || connection.port raise Error, "host down: #{address}:#{port}" end ## # Returns an error message containing the number of requests performed on # this connection def error_message connection requests = Thread.current[@request_key][connection.object_id] - 1 # fixup last_use = Thread.current[@timeout_key][connection.object_id] age = Time.now - last_use "after #{requests} requests on #{connection.object_id}, " \ "last used #{age} seconds ago" end ## # URI::escape wrapper def escape str CGI.escape str if str end ## # Returns true if the connection should be reset due to an idle timeout, or # maximum request count, false otherwise. def expired? connection requests = Thread.current[@request_key][connection.object_id] return true if @max_requests && requests >= @max_requests return false unless @idle_timeout return true if @idle_timeout.zero? last_used = Thread.current[@timeout_key][connection.object_id] Time.now - last_used > @idle_timeout end ## # Starts the Net::HTTP +connection+ def start connection connection.set_debug_output @debug_output if @debug_output connection.open_timeout = @open_timeout if @open_timeout connection.start socket = connection.instance_variable_get :@socket if socket then # for fakeweb @socket_options.each do |option| socket.io.setsockopt(*option) end end end ## # Finishes the Net::HTTP +connection+ def finish connection, thread = Thread.current if requests = thread[@request_key] then requests.delete connection.object_id end connection.finish rescue IOError end def http_class # :nodoc: if RUBY_VERSION > '2.0' then Net::HTTP elsif [:Artifice, :FakeWeb, :WebMock].any? { |klass| Object.const_defined?(klass) } or not @reuse_ssl_sessions then Net::HTTP else Net::HTTP::Persistent::SSLReuse end end ## # Returns the HTTP protocol version for +uri+ def http_version uri @http_versions["#{uri.host}:#{uri.port}"] end ## # Is +req+ idempotent according to RFC 2616? def idempotent? req case req when Net::HTTP::Delete, Net::HTTP::Get, Net::HTTP::Head, Net::HTTP::Options, Net::HTTP::Put, Net::HTTP::Trace then true end end ## # Is the request +req+ idempotent or is retry_change_requests allowed. # # If +retried_on_ruby_2+ is true, true will be returned if we are on ruby, # retry_change_requests is allowed and the request is not idempotent. def can_retry? req, retried_on_ruby_2 = false return @retry_change_requests && !idempotent?(req) if retried_on_ruby_2 @retry_change_requests || idempotent?(req) end if RUBY_VERSION > '1.9' then ## # Workaround for missing Net::HTTPHeader#connection_close? on Ruby 1.8 def connection_close? header header.connection_close? end ## # Workaround for missing Net::HTTPHeader#connection_keep_alive? on Ruby 1.8 def connection_keep_alive? header header.connection_keep_alive? end else ## # Workaround for missing Net::HTTPRequest#connection_close? on Ruby 1.8 def connection_close? header header['connection'] =~ /close/ or header['proxy-connection'] =~ /close/ end ## # Workaround for missing Net::HTTPRequest#connection_keep_alive? on Ruby # 1.8 def connection_keep_alive? header header['connection'] =~ /keep-alive/ or header['proxy-connection'] =~ /keep-alive/ end end ## # Deprecated in favor of #expired? def max_age # :nodoc: return Time.now + 1 unless @idle_timeout Time.now - @idle_timeout end ## # Adds "http://" to the String +uri+ if it is missing. def normalize_uri uri (uri =~ /^https?:/) ? uri : "http://#{uri}" end ## # Pipelines +requests+ to the HTTP server at +uri+ yielding responses if a # block is given. Returns all responses recieved. # # See # Net::HTTP::Pipeline[http://docs.seattlerb.org/net-http-pipeline/Net/HTTP/Pipeline.html] # for further details. # # Only if net-http-pipeline was required before # net-http-persistent #pipeline will be present. def pipeline uri, requests, &block # :yields: responses connection = connection_for uri connection.pipeline requests, &block end ## # Sets this client's SSL private key def private_key= key @private_key = key reconnect_ssl end # For Net::HTTP parity alias key= private_key= ## # Sets the proxy server. The +proxy+ may be the URI of the proxy server, # the symbol +:ENV+ which will read the proxy from the environment or nil to # disable use of a proxy. See #proxy_from_env for details on setting the # proxy from the environment. # # If the proxy URI is set after requests have been made, the next request # will shut-down and re-open all connections. # # The +no_proxy+ query parameter can be used to specify hosts which shouldn't # be reached via proxy; if set it should be a comma separated list of # hostname suffixes, optionally with +:port+ appended, for example # example.com,some.host:8080. def proxy= proxy @proxy_uri = case proxy when :ENV then proxy_from_env when URI::HTTP then proxy when nil then # ignore else raise ArgumentError, 'proxy must be :ENV or a URI::HTTP' end @no_proxy.clear if @proxy_uri then @proxy_args = [ @proxy_uri.host, @proxy_uri.port, @proxy_uri.user, @proxy_uri.password, ] @proxy_connection_id = [nil, *@proxy_args].join ':' if @proxy_uri.query then @no_proxy = CGI.parse(@proxy_uri.query)['no_proxy'].join(',').downcase.split(',').map { |x| x.strip }.reject { |x| x.empty? } end end reconnect reconnect_ssl end ## # Creates a URI for an HTTP proxy server from ENV variables. # # If +HTTP_PROXY+ is set a proxy will be returned. # # If +HTTP_PROXY_USER+ or +HTTP_PROXY_PASS+ are set the URI is given the # indicated user and password unless HTTP_PROXY contains either of these in # the URI. # # The +NO_PROXY+ ENV variable can be used to specify hosts which shouldn't # be reached via proxy; if set it should be a comma separated list of # hostname suffixes, optionally with +:port+ appended, for example # example.com,some.host:8080. When set to * no proxy will # be returned. # # For Windows users, lowercase ENV variables are preferred over uppercase ENV # variables. def proxy_from_env env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY'] return nil if env_proxy.nil? or env_proxy.empty? uri = URI normalize_uri env_proxy env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY'] # '*' is special case for always bypass return nil if env_no_proxy == '*' if env_no_proxy then uri.query = "no_proxy=#{escape(env_no_proxy)}" end unless uri.user or uri.password then uri.user = escape ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER'] uri.password = escape ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS'] end uri end ## # Returns true when proxy should by bypassed for host. def proxy_bypass? host, port host = host.downcase host_port = [host, port].join ':' @no_proxy.each do |name| return true if host[-name.length, name.length] == name or host_port[-name.length, name.length] == name end false end ## # Forces reconnection of HTTP connections. def reconnect @generation += 1 end ## # Forces reconnection of SSL connections. def reconnect_ssl @ssl_generation += 1 end ## # Finishes then restarts the Net::HTTP +connection+ def reset connection Thread.current[@request_key].delete connection.object_id Thread.current[@timeout_key].delete connection.object_id finish connection start connection rescue Errno::ECONNREFUSED raise Error, "connection refused: #{connection.address}:#{connection.port}" rescue Errno::EHOSTDOWN raise Error, "host down: #{connection.address}:#{connection.port}" end ## # Makes a request on +uri+. If +req+ is nil a Net::HTTP::Get is performed # against +uri+. # # If a block is passed #request behaves like Net::HTTP#request (the body of # the response will not have been read). # # +req+ must be a Net::HTTPRequest subclass (see Net::HTTP for a list). # # If there is an error and the request is idempotent according to RFC 2616 # it will be retried automatically. def request uri, req = nil, &block retried = false bad_response = false req = request_setup req || uri connection = connection_for uri connection_id = connection.object_id begin Thread.current[@request_key][connection_id] += 1 response = connection.request req, &block if connection_close?(req) or (response.http_version <= '1.0' and not connection_keep_alive?(response)) or connection_close?(response) then connection.finish end rescue Net::HTTPBadResponse => e message = error_message connection finish connection raise Error, "too many bad responses #{message}" if bad_response or not can_retry? req bad_response = true retry rescue *RETRIED_EXCEPTIONS => e # retried on ruby 2 request_failed e, req, connection if retried or not can_retry? req, @retried_on_ruby_2 reset connection retried = true retry rescue Errno::EINVAL, Errno::ETIMEDOUT => e # not retried on ruby 2 request_failed e, req, connection if retried or not can_retry? req reset connection retried = true retry rescue Exception => e finish connection raise ensure Thread.current[@timeout_key][connection_id] = Time.now end @http_versions["#{uri.host}:#{uri.port}"] ||= response.http_version response end ## # Raises an Error for +exception+ which resulted from attempting the request # +req+ on the +connection+. # # Finishes the +connection+. def request_failed exception, req, connection # :nodoc: due_to = "(due to #{exception.message} - #{exception.class})" message = "too many connection resets #{due_to} #{error_message connection}" finish connection raise Error, message, exception.backtrace end ## # Creates a GET request if +req_or_uri+ is a URI and adds headers to the # request. # # Returns the request. def request_setup req_or_uri # :nodoc: req = if URI === req_or_uri then Net::HTTP::Get.new req_or_uri.request_uri else req_or_uri end @headers.each do |pair| req.add_field(*pair) end @override_headers.each do |name, value| req[name] = value end unless req['Connection'] then req.add_field 'Connection', 'keep-alive' req.add_field 'Keep-Alive', @keep_alive end req end ## # Shuts down all connections for +thread+. # # Uses the current thread by default. # # If you've used Net::HTTP::Persistent across multiple threads you should # call this in each thread when you're done making HTTP requests. # # *NOTE*: Calling shutdown for another thread can be dangerous! # # If the thread is still using the connection it may cause an error! It is # best to call #shutdown in the thread at the appropriate time instead! def shutdown thread = Thread.current generation = reconnect cleanup generation, thread, @generation_key ssl_generation = reconnect_ssl cleanup ssl_generation, thread, @ssl_generation_key thread[@request_key] = nil thread[@timeout_key] = nil end ## # Shuts down all connections in all threads # # *NOTE*: THIS METHOD IS VERY DANGEROUS! # # Do not call this method if other threads are still using their # connections! Call #shutdown at the appropriate time instead! # # Use this method only as a last resort! def shutdown_in_all_threads Thread.list.each do |thread| shutdown thread end nil end ## # Enables SSL on +connection+ def ssl connection connection.use_ssl = true connection.ssl_version = @ssl_version if @ssl_version connection.verify_mode = @verify_mode if OpenSSL::SSL::VERIFY_PEER == OpenSSL::SSL::VERIFY_NONE and not Object.const_defined?(:I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG) then warn <<-WARNING !!!SECURITY WARNING!!! The SSL HTTP connection to: #{connection.address}:#{connection.port} !!!MAY NOT BE VERIFIED!!! On your platform your OpenSSL implementation is broken. There is no difference between the values of VERIFY_NONE and VERIFY_PEER. This means that attempting to verify the security of SSL connections may not work. This exposes you to man-in-the-middle exploits, snooping on the contents of your connection and other dangers to the security of your data. To disable this warning define the following constant at top-level in your application: I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil WARNING end if @ca_file then connection.ca_file = @ca_file connection.verify_mode = OpenSSL::SSL::VERIFY_PEER connection.verify_callback = @verify_callback if @verify_callback end if @certificate and @private_key then connection.cert = @certificate connection.key = @private_key end connection.cert_store = if @cert_store then @cert_store else store = OpenSSL::X509::Store.new store.set_default_paths store end end ## # Finishes all connections that existed before the given SSL parameter # +generation+. def ssl_cleanup generation # :nodoc: cleanup generation, Thread.current, @ssl_generation_key end ## # SSL version to use def ssl_version= ssl_version @ssl_version = ssl_version reconnect_ssl end if RUBY_VERSION > '1.9' ## # Sets the HTTPS verify mode. Defaults to OpenSSL::SSL::VERIFY_PEER. # # Setting this to VERIFY_NONE is a VERY BAD IDEA and should NEVER be used. # Securely transfer the correct certificate and update the default # certificate store or set the ca file instead. def verify_mode= verify_mode @verify_mode = verify_mode reconnect_ssl end ## # SSL verification callback. def verify_callback= callback @verify_callback = callback reconnect_ssl end end require 'net/http/persistent/ssl_reuse' persistent/000077500000000000000000000000001446701454400401425ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/net/httpssl_reuse.rb000066400000000000000000000077631446701454400425100ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/net/http/persistent## # This Net::HTTP subclass adds SSL session reuse and Server Name Indication # (SNI) RFC 3546. # # DO NOT DEPEND UPON THIS CLASS # # This class is an implementation detail and is subject to change or removal # at any time. class Net::HTTP::Persistent::SSLReuse < Net::HTTP @is_proxy_class = false @proxy_addr = nil @proxy_port = nil @proxy_user = nil @proxy_pass = nil def initialize address, port = nil # :nodoc: super @ssl_session = nil end ## # From ruby trunk r33086 including http://redmine.ruby-lang.org/issues/5341 def connect # :nodoc: D "opening connection to #{conn_address()}..." s = timeout(@open_timeout) { TCPSocket.open(conn_address(), conn_port()) } D "opened" if use_ssl? ssl_parameters = Hash.new iv_list = instance_variables SSL_ATTRIBUTES.each do |name| ivname = "@#{name}".intern if iv_list.include?(ivname) and value = instance_variable_get(ivname) ssl_parameters[name] = value end end unless @ssl_context then @ssl_context = OpenSSL::SSL::SSLContext.new @ssl_context.set_params(ssl_parameters) end s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context) s.sync_close = true end @socket = Net::BufferedIO.new(s) @socket.read_timeout = @read_timeout @socket.continue_timeout = @continue_timeout if @socket.respond_to? :continue_timeout @socket.debug_output = @debug_output if use_ssl? begin if proxy? @socket.writeline sprintf('CONNECT %s:%s HTTP/%s', @address, @port, HTTPVersion) @socket.writeline "Host: #{@address}:#{@port}" if proxy_user credential = ["#{proxy_user}:#{proxy_pass}"].pack('m') credential.delete!("\r\n") @socket.writeline "Proxy-Authorization: Basic #{credential}" end @socket.writeline '' Net::HTTPResponse.read_new(@socket).value end s.session = @ssl_session if @ssl_session # Server Name Indication (SNI) RFC 3546 s.hostname = @address if s.respond_to? :hostname= timeout(@open_timeout) { s.connect } if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE s.post_connection_check(@address) end @ssl_session = s.session rescue => exception D "Conn close because of connect error #{exception}" @socket.close if @socket and not @socket.closed? raise exception end end on_connect end if RUBY_VERSION > '1.9' ## # From ruby_1_8_7 branch r29865 including a modified # http://redmine.ruby-lang.org/issues/5341 def connect # :nodoc: D "opening connection to #{conn_address()}..." s = timeout(@open_timeout) { TCPSocket.open(conn_address(), conn_port()) } D "opened" if use_ssl? unless @ssl_context.verify_mode warn "warning: peer certificate won't be verified in this SSL session" @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE end s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context) s.sync_close = true end @socket = Net::BufferedIO.new(s) @socket.read_timeout = @read_timeout @socket.debug_output = @debug_output if use_ssl? if proxy? @socket.writeline sprintf('CONNECT %s:%s HTTP/%s', @address, @port, HTTPVersion) @socket.writeline "Host: #{@address}:#{@port}" if proxy_user credential = ["#{proxy_user}:#{proxy_pass}"].pack('m') credential.delete!("\r\n") @socket.writeline "Proxy-Authorization: Basic #{credential}" end @socket.writeline '' Net::HTTPResponse.read_new(@socket).value end s.session = @ssl_session if @ssl_session s.connect if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE s.post_connection_check(@address) end @ssl_session = s.session end on_connect end if RUBY_VERSION < '1.9' private :connect end thor.rb000066400000000000000000000365601446701454400355100ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendorrequire 'set' require 'thor/base' class Thor # rubocop:disable ClassLength class << self # Allows for custom "Command" package naming. # # === Parameters # name # options # def package_name(name, options = {}) @package_name = name.nil? || name == '' ? nil : name end # Sets the default command when thor is executed without an explicit command to be called. # # ==== Parameters # meth:: name of the default command # def default_command(meth = nil) if meth @default_command = meth == :none ? 'help' : meth.to_s else @default_command ||= from_superclass(:default_command, 'help') end end alias_method :default_task, :default_command # Registers another Thor subclass as a command. # # ==== Parameters # klass:: Thor subclass to register # command:: Subcommand name to use # usage:: Short usage for the subcommand # description:: Description for the subcommand def register(klass, subcommand_name, usage, description, options = {}) if klass <= Thor::Group desc usage, description, options define_method(subcommand_name) { |*args| invoke(klass, args) } else desc usage, description, options subcommand subcommand_name, klass end end # Defines the usage and the description of the next command. # # ==== Parameters # usage # description # options # def desc(usage, description, options = {}) if options[:for] command = find_and_refresh_command(options[:for]) command.usage = usage if usage command.description = description if description else @usage, @desc, @hide = usage, description, options[:hide] || false end end # Defines the long description of the next command. # # ==== Parameters # long description # def long_desc(long_description, options = {}) if options[:for] command = find_and_refresh_command(options[:for]) command.long_description = long_description if long_description else @long_desc = long_description end end # Maps an input to a command. If you define: # # map "-T" => "list" # # Running: # # thor -T # # Will invoke the list command. # # ==== Parameters # Hash[String|Array => Symbol]:: Maps the string or the strings in the array to the given command. # def map(mappings = nil) @map ||= from_superclass(:map, {}) if mappings mappings.each do |key, value| if key.respond_to?(:each) key.each { |subkey| @map[subkey] = value } else @map[key] = value end end end @map end # Declares the options for the next command to be declared. # # ==== Parameters # Hash[Symbol => Object]:: The hash key is the name of the option and the value # is the type of the option. Can be :string, :array, :hash, :boolean, :numeric # or :required (string). If you give a value, the type of the value is used. # def method_options(options = nil) @method_options ||= {} build_options(options, @method_options) if options @method_options end alias_method :options, :method_options # Adds an option to the set of method options. If :for is given as option, # it allows you to change the options from a previous defined command. # # def previous_command # # magic # end # # method_option :foo => :bar, :for => :previous_command # # def next_command # # magic # end # # ==== Parameters # name:: The name of the argument. # options:: Described below. # # ==== Options # :desc - Description for the argument. # :required - If the argument is required or not. # :default - Default value for this argument. It cannot be required and have default values. # :aliases - Aliases for this option. # :type - The type of the argument, can be :string, :hash, :array, :numeric or :boolean. # :banner - String to show on usage notes. # :hide - If you want to hide this option from the help. # def method_option(name, options = {}) scope = if options[:for] find_and_refresh_command(options[:for]).options else method_options end build_option(name, options, scope) end alias_method :option, :method_option # Prints help information for the given command. # # ==== Parameters # shell # command_name # def command_help(shell, command_name) meth = normalize_command_name(command_name) command = all_commands[meth] handle_no_command_error(meth) unless command shell.say 'Usage:' shell.say " #{banner(command)}" shell.say class_options_help(shell, nil => command.options.map { |_, o| o }) if command.long_description shell.say 'Description:' shell.print_wrapped(command.long_description, :indent => 2) else shell.say command.description end end alias_method :task_help, :command_help # Prints help information for this class. # # ==== Parameters # shell # def help(shell, subcommand = false) list = printable_commands(true, subcommand) Thor::Util.thor_classes_in(self).each do |klass| list += klass.printable_commands(false) end list.sort! { |a, b| a[0] <=> b[0] } if defined?(@package_name) && @package_name shell.say "#{@package_name} commands:" else shell.say 'Commands:' end shell.print_table(list, :indent => 2, :truncate => true) shell.say class_options_help(shell) end # Returns commands ready to be printed. def printable_commands(all = true, subcommand = false) (all ? all_commands : commands).map do |_, command| next if command.hidden? item = [] item << banner(command, false, subcommand) item << (command.description ? "# #{command.description.gsub(/\s+/m, ' ')}" : '') item end.compact end alias_method :printable_tasks, :printable_commands def subcommands @subcommands ||= from_superclass(:subcommands, []) end alias_method :subtasks, :subcommands def subcommand(subcommand, subcommand_class) subcommands << subcommand.to_s subcommand_class.subcommand_help subcommand define_method(subcommand) do |*args| args, opts = Thor::Arguments.split(args) args.unshift("help") if opts.include? "--help" or opts.include? "-h" invoke subcommand_class, args, opts, :invoked_via_subcommand => true, :class_options => options end end alias_method :subtask, :subcommand # Extend check unknown options to accept a hash of conditions. # # === Parameters # options: A hash containing :only and/or :except keys def check_unknown_options!(options = {}) @check_unknown_options ||= {} options.each do |key, value| if value @check_unknown_options[key] = Array(value) else @check_unknown_options.delete(key) end end @check_unknown_options end # Overwrite check_unknown_options? to take subcommands and options into account. def check_unknown_options?(config) #:nodoc: options = check_unknown_options return false unless options command = config[:current_command] return true unless command name = command.name if subcommands.include?(name) false elsif options[:except] !options[:except].include?(name.to_sym) elsif options[:only] options[:only].include?(name.to_sym) else true end end # Stop parsing of options as soon as an unknown option or a regular # argument is encountered. All remaining arguments are passed to the command. # This is useful if you have a command that can receive arbitrary additional # options, and where those additional options should not be handled by # Thor. # # ==== Example # # To better understand how this is useful, let's consider a command that calls # an external command. A user may want to pass arbitrary options and # arguments to that command. The command itself also accepts some options, # which should be handled by Thor. # # class_option "verbose", :type => :boolean # stop_on_unknown_option! :exec # check_unknown_options! :except => :exec # # desc "exec", "Run a shell command" # def exec(*args) # puts "diagnostic output" if options[:verbose] # Kernel.exec(*args) # end # # Here +exec+ can be called with +--verbose+ to get diagnostic output, # e.g.: # # $ thor exec --verbose echo foo # diagnostic output # foo # # But if +--verbose+ is given after +echo+, it is passed to +echo+ instead: # # $ thor exec echo --verbose foo # --verbose foo # # ==== Parameters # Symbol ...:: A list of commands that should be affected. def stop_on_unknown_option!(*command_names) stop_on_unknown_option.merge(command_names) end def stop_on_unknown_option?(command) #:nodoc: command && stop_on_unknown_option.include?(command.name.to_sym) end protected def stop_on_unknown_option #:nodoc: @stop_on_unknown_option ||= Set.new end # The method responsible for dispatching given the args. def dispatch(meth, given_args, given_opts, config) #:nodoc: # rubocop:disable MethodLength # There is an edge case when dispatching from a subcommand. # A problem occurs invoking the default command. This case occurs # when arguments are passed and a default command is defined, and # the first given_args does not match the default command. # Thor use "help" by default so we skip that case. # Note the call to retrieve_command_name. It's called with # given_args.dup since that method calls args.shift. Then lookup # the command normally. If the first item in given_args is not # a command then use the default command. The given_args will be # intact later since dup was used. if config[:invoked_via_subcommand] && given_args.size >= 1 && default_command != 'help' && given_args.first != default_command meth ||= retrieve_command_name(given_args.dup) command = all_commands[normalize_command_name(meth)] command ||= all_commands[normalize_command_name(default_command)] else meth ||= retrieve_command_name(given_args) command = all_commands[normalize_command_name(meth)] end if command args, opts = Thor::Options.split(given_args) if stop_on_unknown_option?(command) && !args.empty? # given_args starts with a non-option, so we treat everything as # ordinary arguments args.concat opts opts.clear end else args, opts = given_args, nil command = dynamic_command_class.new(meth) end opts = given_opts || opts || [] config.merge!(:current_command => command, :command_options => command.options) instance = new(args, opts, config) yield instance if block_given? args = instance.args trailing = args[Range.new(arguments.size, -1)] instance.invoke_command(command, trailing || []) end # The banner for this class. You can customize it if you are invoking the # thor class by another ways which is not the Thor::Runner. It receives # the command that is going to be invoked and a boolean which indicates if # the namespace should be displayed as arguments. # def banner(command, namespace = nil, subcommand = false) "#{basename} #{command.formatted_usage(self, $thor_runner, subcommand)}" end def baseclass #:nodoc: Thor end def dynamic_command_class #:nodoc: Thor::DynamicCommand end def create_command(meth) #:nodoc: @usage ||= nil @desc ||= nil @long_desc ||= nil if @usage && @desc base_class = @hide ? Thor::HiddenCommand : Thor::Command commands[meth] = base_class.new(meth, @desc, @long_desc, @usage, method_options) @usage, @desc, @long_desc, @method_options, @hide = nil true elsif all_commands[meth] || meth == 'method_missing' true else puts "[WARNING] Attempted to create command #{meth.inspect} without usage or description. " << 'Call desc if you want this method to be available as command or declare it inside a ' << "no_commands{} block. Invoked from #{caller[1].inspect}." false end end alias_method :create_task, :create_command def initialize_added #:nodoc: class_options.merge!(method_options) @method_options = nil end # Retrieve the command name from given args. def retrieve_command_name(args) #:nodoc: meth = args.first.to_s unless args.empty? if meth && (map[meth] || meth !~ /^\-/) args.shift else nil end end alias_method :retrieve_task_name, :retrieve_command_name # receives a (possibly nil) command name and returns a name that is in # the commands hash. In addition to normalizing aliases, this logic # will determine if a shortened command is an unambiguous substring of # a command or alias. # # +normalize_command_name+ also converts names like +animal-prison+ # into +animal_prison+. def normalize_command_name(meth) #:nodoc: return default_command.to_s.gsub('-', '_') unless meth possibilities = find_command_possibilities(meth) if possibilities.size > 1 fail AmbiguousTaskError, "Ambiguous command #{meth} matches [#{possibilities.join(', ')}]" elsif possibilities.size < 1 meth = meth || default_command elsif map[meth] meth = map[meth] else meth = possibilities.first end meth.to_s.gsub('-', '_') # treat foo-bar as foo_bar end alias_method :normalize_task_name, :normalize_command_name # this is the logic that takes the command name passed in by the user # and determines whether it is an unambiguous substrings of a command or # alias name. def find_command_possibilities(meth) len = meth.to_s.length possibilities = all_commands.merge(map).keys.select { |n| meth == n[0, len] }.sort unique_possibilities = possibilities.map { |k| map[k] || k }.uniq if possibilities.include?(meth) [meth] elsif unique_possibilities.size == 1 unique_possibilities else possibilities end end alias_method :find_task_possibilities, :find_command_possibilities def subcommand_help(cmd) desc 'help [COMMAND]', 'Describe subcommands or one specific subcommand' class_eval " def help(command = nil, subcommand = true); super; end " end alias_method :subtask_help, :subcommand_help end include Thor::Base map HELP_MAPPINGS => :help desc 'help [COMMAND]', 'Describe available commands or one specific command' def help(command = nil, subcommand = false) command ? self.class.command_help(shell, command) : self.class.help(shell, subcommand) end end thor/000077500000000000000000000000001446701454400351515ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendoractions.rb000066400000000000000000000240201446701454400371340ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'fileutils' require 'uri' require 'thor/core_ext/io_binary_read' require 'thor/actions/create_file' require 'thor/actions/create_link' require 'thor/actions/directory' require 'thor/actions/empty_directory' require 'thor/actions/file_manipulation' require 'thor/actions/inject_into_file' class Thor module Actions attr_accessor :behavior def self.included(base) #:nodoc: base.extend ClassMethods end module ClassMethods # Hold source paths for one Thor instance. source_paths_for_search is the # method responsible to gather source_paths from this current class, # inherited paths and the source root. # def source_paths @_source_paths ||= [] end # Stores and return the source root for this class def source_root(path = nil) @_source_root = path if path @_source_root ||= nil end # Returns the source paths in the following order: # # 1) This class source paths # 2) Source root # 3) Parents source paths # def source_paths_for_search paths = [] paths += source_paths paths << source_root if source_root paths += from_superclass(:source_paths, []) paths end # Add runtime options that help actions execution. # def add_runtime_options! class_option :force, :type => :boolean, :aliases => '-f', :group => :runtime, :desc => 'Overwrite files that already exist' class_option :pretend, :type => :boolean, :aliases => '-p', :group => :runtime, :desc => 'Run but do not make any changes' class_option :quiet, :type => :boolean, :aliases => '-q', :group => :runtime, :desc => 'Suppress status output' class_option :skip, :type => :boolean, :aliases => '-s', :group => :runtime, :desc => 'Skip files that already exist' end end # Extends initializer to add more configuration options. # # ==== Configuration # behavior:: The actions default behavior. Can be :invoke or :revoke. # It also accepts :force, :skip and :pretend to set the behavior # and the respective option. # # destination_root:: The root directory needed for some actions. # def initialize(args = [], options = {}, config = {}) self.behavior = case config[:behavior].to_s when 'force', 'skip' _cleanup_options_and_set(options, config[:behavior]) :invoke when 'revoke' :revoke else :invoke end super self.destination_root = config[:destination_root] end # Wraps an action object and call it accordingly to the thor class behavior. # def action(instance) #:nodoc: if behavior == :revoke instance.revoke! else instance.invoke! end end # Returns the root for this thor class (also aliased as destination root). # def destination_root @destination_stack.last end # Sets the root for this thor class. Relatives path are added to the # directory where the script was invoked and expanded. # def destination_root=(root) @destination_stack ||= [] @destination_stack[0] = File.expand_path(root || '') end # Returns the given path relative to the absolute root (ie, root where # the script started). # def relative_to_original_destination_root(path, remove_dot = true) path = path.dup if path.gsub!(@destination_stack[0], '.') remove_dot ? (path[2..-1] || '') : path else path end end # Holds source paths in instance so they can be manipulated. # def source_paths @source_paths ||= self.class.source_paths_for_search end # Receives a file or directory and search for it in the source paths. # def find_in_source_paths(file) # rubocop:disable MethodLength possible_files = [file, file + TEMPLATE_EXTNAME] relative_root = relative_to_original_destination_root(destination_root, false) source_paths.each do |source| possible_files.each do |f| source_file = File.expand_path(f, File.join(source, relative_root)) return source_file if File.exist?(source_file) end end message = "Could not find #{file.inspect} in any of your source paths. " unless self.class.source_root message << "Please invoke #{self.class.name}.source_root(PATH) with the PATH containing your templates. " end if source_paths.empty? message << 'Currently you have no source paths.' else message << "Your current source paths are: \n#{source_paths.join("\n")}" end fail Error, message end # Do something in the root or on a provided subfolder. If a relative path # is given it's referenced from the current root. The full path is yielded # to the block you provide. The path is set back to the previous path when # the method exits. # # ==== Parameters # dir:: the directory to move to. # config:: give :verbose => true to log and use padding. # def inside(dir = '', config = {}, &block) verbose = config.fetch(:verbose, false) pretend = options[:pretend] say_status :inside, dir, verbose shell.padding += 1 if verbose @destination_stack.push File.expand_path(dir, destination_root) # If the directory doesnt exist and we're not pretending if !File.exist?(destination_root) && !pretend FileUtils.mkdir_p(destination_root) end if pretend # In pretend mode, just yield down to the block block.arity == 1 ? yield(destination_root) : yield else FileUtils.cd(destination_root) { block.arity == 1 ? yield(destination_root) : yield } end @destination_stack.pop shell.padding -= 1 if verbose end # Goes to the root and execute the given block. # def in_root inside(@destination_stack.first) { yield } end # Loads an external file and execute it in the instance binding. # # ==== Parameters # path:: The path to the file to execute. Can be a web address or # a relative path from the source root. # # ==== Examples # # apply "http://gist.github.com/103208" # # apply "recipes/jquery.rb" # def apply(path, config = {}) verbose = config.fetch(:verbose, true) is_uri = path =~ %r{^https?\://} path = find_in_source_paths(path) unless is_uri say_status :apply, path, verbose shell.padding += 1 if verbose if is_uri contents = open(path, 'Accept' => 'application/x-thor-template') { |io| io.read } else contents = open(path) { |io| io.read } end instance_eval(contents, path) shell.padding -= 1 if verbose end # Executes a command returning the contents of the command. # # ==== Parameters # command:: the command to be executed. # config:: give :verbose => false to not log the status, :capture => true to hide to output. Specify :with # to append an executable to command execution. # # ==== Example # # inside('vendor') do # run('ln -s ~/edge rails') # end # def run(command, config = {}) return unless behavior == :invoke destination = relative_to_original_destination_root(destination_root, false) desc = "#{command} from #{destination.inspect}" if config[:with] desc = "#{File.basename(config[:with].to_s)} #{desc}" command = "#{config[:with]} #{command}" end say_status :run, desc, config.fetch(:verbose, true) unless options[:pretend] config[:capture] ? `#{command}` : system("#{command}") end end # Executes a ruby script (taking into account WIN32 platform quirks). # # ==== Parameters # command:: the command to be executed. # config:: give :verbose => false to not log the status. # def run_ruby_script(command, config = {}) return unless behavior == :invoke run command, config.merge(:with => Thor::Util.ruby_command) end # Run a thor command. A hash of options can be given and it's converted to # switches. # # ==== Parameters # command:: the command to be invoked # args:: arguments to the command # config:: give :verbose => false to not log the status, :capture => true to hide to output. # Other options are given as parameter to Thor. # # # ==== Examples # # thor :install, "http://gist.github.com/103208" # #=> thor install http://gist.github.com/103208 # # thor :list, :all => true, :substring => 'rails' # #=> thor list --all --substring=rails # def thor(command, *args) config = args.last.is_a?(Hash) ? args.pop : {} verbose = config.key?(:verbose) ? config.delete(:verbose) : true pretend = config.key?(:pretend) ? config.delete(:pretend) : false capture = config.key?(:capture) ? config.delete(:capture) : false args.unshift(command) args.push Thor::Options.to_switches(config) command = args.join(' ').strip run command, :with => :thor, :verbose => verbose, :pretend => pretend, :capture => capture end protected # Allow current root to be shared between invocations. # def _shared_configuration #:nodoc: super.merge!(:destination_root => destination_root) end def _cleanup_options_and_set(options, key) #:nodoc: case options when Array %w(--force -f --skip -s).each { |i| options.delete(i) } options << "--#{key}" when Hash [:force, :skip, 'force', 'skip'].each { |i| options.delete(i) } options.merge!(key => true) end end end end actions/000077500000000000000000000000001446701454400366115ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorcreate_file.rb000066400000000000000000000060731446701454400414060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/actionsrequire 'thor/actions/empty_directory' class Thor module Actions # Create a new file relative to the destination root with the given data, # which is the return value of a block or a data string. # # ==== Parameters # destination:: the relative path to the destination root. # data:: the data to append to the file. # config:: give :verbose => false to not log the status. # # ==== Examples # # create_file "lib/fun_party.rb" do # hostname = ask("What is the virtual hostname I should use?") # "vhost.name = #{hostname}" # end # # create_file "config/apache.conf", "your apache config" # def create_file(destination, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} data = args.first action CreateFile.new(self, destination, block || data.to_s, config) end alias_method :add_file, :create_file # CreateFile is a subset of Template, which instead of rendering a file with # ERB, it gets the content from the user. # class CreateFile < EmptyDirectory #:nodoc: attr_reader :data def initialize(base, destination, data, config = {}) @data = data super(base, destination, config) end # Checks if the content of the file at the destination is identical to the rendered result. # # ==== Returns # Boolean:: true if it is identical, false otherwise. # def identical? exists? && File.binread(destination) == render end # Holds the content to be added to the file. # def render @render ||= if data.is_a?(Proc) data.call else data end end def invoke! invoke_with_conflict_check do FileUtils.mkdir_p(File.dirname(destination)) File.open(destination, 'wb') { |f| f.write render } end given_destination end protected # Now on conflict we check if the file is identical or not. # def on_conflict_behavior(&block) if identical? say_status :identical, :blue else options = base.options.merge(config) force_or_skip_or_conflict(options[:force], options[:skip], &block) end end # If force is true, run the action, otherwise check if it's not being # skipped. If both are false, show the file_collision menu, if the menu # returns true, force it, otherwise skip. # def force_or_skip_or_conflict(force, skip, &block) if force say_status :force, :yellow block.call unless pretend? elsif skip say_status :skip, :yellow else say_status :conflict, :red force_or_skip_or_conflict(force_on_collision?, true, &block) end end # Shows the file collision menu to the user and gets the result. # def force_on_collision? base.shell.file_collision(destination) { render } end end end end create_link.rb000066400000000000000000000034151446701454400414210ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/actionsrequire 'thor/actions/create_file' class Thor module Actions # Create a new file relative to the destination root from the given source. # # ==== Parameters # destination:: the relative path to the destination root. # source:: the relative path to the source root. # config:: give :verbose => false to not log the status. # :: give :symbolic => false for hard link. # # ==== Examples # # create_link "config/apache.conf", "/etc/apache.conf" # def create_link(destination, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} source = args.first action CreateLink.new(self, destination, source, config) end alias_method :add_link, :create_link # CreateLink is a subset of CreateFile, which instead of taking a block of # data, just takes a source string from the user. # class CreateLink < CreateFile #:nodoc: attr_reader :data # Checks if the content of the file at the destination is identical to the rendered result. # # ==== Returns # Boolean:: true if it is identical, false otherwise. # def identical? exists? && File.identical?(render, destination) end def invoke! invoke_with_conflict_check do FileUtils.mkdir_p(File.dirname(destination)) # Create a symlink by default config[:symbolic] = true if config[:symbolic].nil? File.unlink(destination) if exists? if config[:symbolic] File.symlink(render, destination) else File.link(render, destination) end end given_destination end def exists? super || File.symlink?(destination) end end end end directory.rb000066400000000000000000000077351446701454400411560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/actionsrequire 'thor/actions/empty_directory' class Thor module Actions # Copies recursively the files from source directory to root directory. # If any of the files finishes with .tt, it's considered to be a template # and is placed in the destination without the extension .tt. If any # empty directory is found, it's copied and all .empty_directory files are # ignored. If any file name is wrapped within % signs, the text within # the % signs will be executed as a method and replaced with the returned # value. Let's suppose a doc directory with the following files: # # doc/ # components/.empty_directory # README # rdoc.rb.tt # %app_name%.rb # # When invoked as: # # directory "doc" # # It will create a doc directory in the destination with the following # files (assuming that the `app_name` method returns the value "blog"): # # doc/ # components/ # README # rdoc.rb # blog.rb # # Encoded path note: Since Thor internals use Object#respond_to? to check if it can # expand %something%, this `something` should be a public method in the class calling # #directory. If a method is private, Thor stack raises PrivateMethodEncodedError. # # ==== Parameters # source:: the relative path to the source root. # destination:: the relative path to the destination root. # config:: give :verbose => false to not log the status. # If :recursive => false, does not look for paths recursively. # If :mode => :preserve, preserve the file mode from the source. # If :exclude_pattern => /regexp/, prevents copying files that match that regexp. # # ==== Examples # # directory "doc" # directory "doc", "docs", :recursive => false # def directory(source, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} destination = args.first || source action Directory.new(self, source, destination || source, config, &block) end class Directory < EmptyDirectory #:nodoc: attr_reader :source def initialize(base, source, destination = nil, config = {}, &block) @source = File.expand_path(base.find_in_source_paths(source.to_s)) @block = block super(base, destination, {:recursive => true}.merge(config)) end def invoke! base.empty_directory given_destination, config execute! end def revoke! execute! end protected def execute! # rubocop:disable MethodLength lookup = Util.escape_globs(source) lookup = config[:recursive] ? File.join(lookup, '**') : lookup lookup = file_level_lookup(lookup) files(lookup).sort.each do |file_source| next if File.directory?(file_source) next if config[:exclude_pattern] && file_source.match(config[:exclude_pattern]) file_destination = File.join(given_destination, file_source.gsub(source, '.')) file_destination.gsub!('/./', '/') case file_source when /\.empty_directory$/ dirname = File.dirname(file_destination).gsub(/\/\.$/, '') next if dirname == given_destination base.empty_directory(dirname, config) when /#{TEMPLATE_EXTNAME}$/ base.template(file_source, file_destination[0..-4], config, &@block) else base.copy_file(file_source, file_destination, config, &@block) end end end if RUBY_VERSION < '2.0' def file_level_lookup(previous_lookup) File.join(previous_lookup, '{*,.[a-z]*}') end def files(lookup) Dir[lookup] end else def file_level_lookup(previous_lookup) File.join(previous_lookup, '*') end def files(lookup) Dir.glob(lookup, File::FNM_DOTMATCH) end end end end end empty_directory.rb000066400000000000000000000100331446701454400423550ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/actionsclass Thor module Actions # Creates an empty directory. # # ==== Parameters # destination:: the relative path to the destination root. # config:: give :verbose => false to not log the status. # # ==== Examples # # empty_directory "doc" # def empty_directory(destination, config = {}) action EmptyDirectory.new(self, destination, config) end # Class which holds create directory logic. This is the base class for # other actions like create_file and directory. # # This implementation is based in Templater actions, created by Jonas Nicklas # and Michael S. Klishin under MIT LICENSE. # class EmptyDirectory #:nodoc: attr_reader :base, :destination, :given_destination, :relative_destination, :config # Initializes given the source and destination. # # ==== Parameters # base:: A Thor::Base instance # source:: Relative path to the source of this file # destination:: Relative path to the destination of this file # config:: give :verbose => false to not log the status. # def initialize(base, destination, config = {}) @base, @config = base, {:verbose => true}.merge(config) self.destination = destination end # Checks if the destination file already exists. # # ==== Returns # Boolean:: true if the file exists, false otherwise. # def exists? ::File.exist?(destination) end def invoke! invoke_with_conflict_check do ::FileUtils.mkdir_p(destination) end end def revoke! say_status :remove, :red ::FileUtils.rm_rf(destination) if !pretend? && exists? given_destination end protected # Shortcut for pretend. # def pretend? base.options[:pretend] end # Sets the absolute destination value from a relative destination value. # It also stores the given and relative destination. Let's suppose our # script is being executed on "dest", it sets the destination root to # "dest". The destination, given_destination and relative_destination # are related in the following way: # # inside "bar" do # empty_directory "baz" # end # # destination #=> dest/bar/baz # relative_destination #=> bar/baz # given_destination #=> baz # def destination=(destination) if destination @given_destination = convert_encoded_instructions(destination.to_s) @destination = ::File.expand_path(@given_destination, base.destination_root) @relative_destination = base.relative_to_original_destination_root(@destination) end end # Filenames in the encoded form are converted. If you have a file: # # %file_name%.rb # # It calls #file_name from the base and replaces %-string with the # return value (should be String) of #file_name: # # user.rb # # The method referenced can be either public or private. # def convert_encoded_instructions(filename) filename.gsub(/%(.*?)%/) do |initial_string| method = $1.strip base.respond_to?(method, true) ? base.send(method) : initial_string end end # Receives a hash of options and just execute the block if some # conditions are met. # def invoke_with_conflict_check(&block) if exists? on_conflict_behavior(&block) else say_status :create, :green block.call unless pretend? end destination end # What to do when the destination file already exists. # def on_conflict_behavior(&block) say_status :exist, :blue end # Shortcut to say_status shell method. # def say_status(status, color) base.shell.say_status status, relative_destination, color if config[:verbose] end end end end file_manipulation.rb000066400000000000000000000253311446701454400426410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/actionsrequire 'erb' require 'open-uri' class Thor module Actions # Copies the file from the relative source to the relative destination. If # the destination is not given it's assumed to be equal to the source. # # ==== Parameters # source:: the relative path to the source root. # destination:: the relative path to the destination root. # config:: give :verbose => false to not log the status, and # :mode => :preserve, to preserve the file mode from the source. # # ==== Examples # # copy_file "README", "doc/README" # # copy_file "doc/README" # def copy_file(source, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} destination = args.first || source source = File.expand_path(find_in_source_paths(source.to_s)) create_file destination, nil, config do content = File.binread(source) content = block.call(content) if block content end if config[:mode] == :preserve mode = File.stat(source).mode chmod(destination, mode, config) end end # Links the file from the relative source to the relative destination. If # the destination is not given it's assumed to be equal to the source. # # ==== Parameters # source:: the relative path to the source root. # destination:: the relative path to the destination root. # config:: give :verbose => false to not log the status. # # ==== Examples # # link_file "README", "doc/README" # # link_file "doc/README" # def link_file(source, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} destination = args.first || source source = File.expand_path(find_in_source_paths(source.to_s)) create_link destination, source, config end # Gets the content at the given address and places it at the given relative # destination. If a block is given instead of destination, the content of # the url is yielded and used as location. # # ==== Parameters # source:: the address of the given content. # destination:: the relative path to the destination root. # config:: give :verbose => false to not log the status. # # ==== Examples # # get "http://gist.github.com/103208", "doc/README" # # get "http://gist.github.com/103208" do |content| # content.split("\n").first # end # def get(source, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} destination = args.first source = File.expand_path(find_in_source_paths(source.to_s)) unless source =~ %r{^https?\://} render = open(source) { |input| input.binmode.read } destination ||= if block_given? block.arity == 1 ? block.call(render) : block.call else File.basename(source) end create_file destination, render, config end # Gets an ERB template at the relative source, executes it and makes a copy # at the relative destination. If the destination is not given it's assumed # to be equal to the source removing .tt from the filename. # # ==== Parameters # source:: the relative path to the source root. # destination:: the relative path to the destination root. # config:: give :verbose => false to not log the status. # # ==== Examples # # template "README", "doc/README" # # template "doc/README" # def template(source, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} destination = args.first || source.sub(/#{TEMPLATE_EXTNAME}$/, '') source = File.expand_path(find_in_source_paths(source.to_s)) context = instance_eval('binding') create_file destination, nil, config do content = ERB.new(::File.binread(source), nil, '-', '@output_buffer').result(context) content = block.call(content) if block content end end # Changes the mode of the given file or directory. # # ==== Parameters # mode:: the file mode # path:: the name of the file to change mode # config:: give :verbose => false to not log the status. # # ==== Example # # chmod "script/server", 0755 # def chmod(path, mode, config = {}) return unless behavior == :invoke path = File.expand_path(path, destination_root) say_status :chmod, relative_to_original_destination_root(path), config.fetch(:verbose, true) FileUtils.chmod_R(mode, path) unless options[:pretend] end # Prepend text to a file. Since it depends on insert_into_file, it's reversible. # # ==== Parameters # path:: path of the file to be changed # data:: the data to prepend to the file, can be also given as a block. # config:: give :verbose => false to not log the status. # # ==== Example # # prepend_to_file 'config/environments/test.rb', 'config.gem "rspec"' # # prepend_to_file 'config/environments/test.rb' do # 'config.gem "rspec"' # end # def prepend_to_file(path, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} config.merge!(:after => /\A/) insert_into_file(path, *(args << config), &block) end alias_method :prepend_file, :prepend_to_file # Append text to a file. Since it depends on insert_into_file, it's reversible. # # ==== Parameters # path:: path of the file to be changed # data:: the data to append to the file, can be also given as a block. # config:: give :verbose => false to not log the status. # # ==== Example # # append_to_file 'config/environments/test.rb', 'config.gem "rspec"' # # append_to_file 'config/environments/test.rb' do # 'config.gem "rspec"' # end # def append_to_file(path, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} config.merge!(:before => /\z/) insert_into_file(path, *(args << config), &block) end alias_method :append_file, :append_to_file # Injects text right after the class definition. Since it depends on # insert_into_file, it's reversible. # # ==== Parameters # path:: path of the file to be changed # klass:: the class to be manipulated # data:: the data to append to the class, can be also given as a block. # config:: give :verbose => false to not log the status. # # ==== Examples # # inject_into_class "app/controllers/application_controller.rb", ApplicationController, " filter_parameter :password\n" # # inject_into_class "app/controllers/application_controller.rb", ApplicationController do # " filter_parameter :password\n" # end # def inject_into_class(path, klass, *args, &block) config = args.last.is_a?(Hash) ? args.pop : {} config.merge!(:after => /class #{klass}\n|class #{klass} .*\n/) insert_into_file(path, *(args << config), &block) end # Run a regular expression replacement on a file. # # ==== Parameters # path:: path of the file to be changed # flag:: the regexp or string to be replaced # replacement:: the replacement, can be also given as a block # config:: give :verbose => false to not log the status. # # ==== Example # # gsub_file 'app/controllers/application_controller.rb', /#\s*(filter_parameter_logging :password)/, '\1' # # gsub_file 'README', /rake/, :green do |match| # match << " no more. Use thor!" # end # def gsub_file(path, flag, *args, &block) return unless behavior == :invoke config = args.last.is_a?(Hash) ? args.pop : {} path = File.expand_path(path, destination_root) say_status :gsub, relative_to_original_destination_root(path), config.fetch(:verbose, true) unless options[:pretend] content = File.binread(path) content.gsub!(flag, *args, &block) File.open(path, 'wb') { |file| file.write(content) } end end # Uncomment all lines matching a given regex. It will leave the space # which existed before the comment hash in tact but will remove any spacing # between the comment hash and the beginning of the line. # # ==== Parameters # path:: path of the file to be changed # flag:: the regexp or string used to decide which lines to uncomment # config:: give :verbose => false to not log the status. # # ==== Example # # uncomment_lines 'config/initializers/session_store.rb', /active_record/ # def uncomment_lines(path, flag, *args) flag = flag.respond_to?(:source) ? flag.source : flag gsub_file(path, /^(\s*)#[[:blank:]]*(.*#{flag})/, '\1\2', *args) end # Comment all lines matching a given regex. It will leave the space # which existed before the beginning of the line in tact and will insert # a single space after the comment hash. # # ==== Parameters # path:: path of the file to be changed # flag:: the regexp or string used to decide which lines to comment # config:: give :verbose => false to not log the status. # # ==== Example # # comment_lines 'config/initializers/session_store.rb', /cookie_store/ # def comment_lines(path, flag, *args) flag = flag.respond_to?(:source) ? flag.source : flag gsub_file(path, /^(\s*)([^#|\n]*#{flag})/, '\1# \2', *args) end # Removes a file at the given location. # # ==== Parameters # path:: path of the file to be changed # config:: give :verbose => false to not log the status. # # ==== Example # # remove_file 'README' # remove_file 'app/controllers/application_controller.rb' # def remove_file(path, config = {}) return unless behavior == :invoke path = File.expand_path(path, destination_root) say_status :remove, relative_to_original_destination_root(path), config.fetch(:verbose, true) ::FileUtils.rm_rf(path) if !options[:pretend] && File.exist?(path) end alias_method :remove_dir, :remove_file attr_accessor :output_buffer private :output_buffer, :output_buffer= private def concat(string) @output_buffer.concat(string) end def capture(*args, &block) with_output_buffer { block.call(*args) } end def with_output_buffer(buf = '') #:nodoc: self.output_buffer, old_buffer = buf, output_buffer yield output_buffer ensure self.output_buffer = old_buffer end end end inject_into_file.rb000066400000000000000000000064221446701454400424460ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/actionsrequire 'thor/actions/empty_directory' class Thor module Actions # Injects the given content into a file. Different from gsub_file, this # method is reversible. # # ==== Parameters # destination:: Relative path to the destination root # data:: Data to add to the file. Can be given as a block. # config:: give :verbose => false to not log the status and the flag # for injection (:after or :before) or :force => true for # insert two or more times the same content. # # ==== Examples # # insert_into_file "config/environment.rb", "config.gem :thor", :after => "Rails::Initializer.run do |config|\n" # # insert_into_file "config/environment.rb", :after => "Rails::Initializer.run do |config|\n" do # gems = ask "Which gems would you like to add?" # gems.split(" ").map{ |gem| " config.gem :#{gem}" }.join("\n") # end # def insert_into_file(destination, *args, &block) if block_given? data, config = block, args.shift else data, config = args.shift, args.shift end action InjectIntoFile.new(self, destination, data, config) end alias_method :inject_into_file, :insert_into_file class InjectIntoFile < EmptyDirectory #:nodoc: attr_reader :replacement, :flag, :behavior def initialize(base, destination, data, config) super(base, destination, {:verbose => true}.merge(config)) @behavior, @flag = if @config.key?(:after) [:after, @config.delete(:after)] else [:before, @config.delete(:before)] end @replacement = data.is_a?(Proc) ? data.call : data @flag = Regexp.escape(@flag) unless @flag.is_a?(Regexp) end def invoke! say_status :invoke content = if @behavior == :after '\0' + replacement else replacement + '\0' end replace!(/#{flag}/, content, config[:force]) end def revoke! say_status :revoke regexp = if @behavior == :after content = '\1\2' /(#{flag})(.*)(#{Regexp.escape(replacement)})/m else content = '\2\3' /(#{Regexp.escape(replacement)})(.*)(#{flag})/m end replace!(regexp, content, true) end protected def say_status(behavior) status = if behavior == :invoke if flag == /\A/ :prepend elsif flag == /\z/ :append else :insert end else :subtract end super(status, config[:verbose]) end # Adds the content to the file. # def replace!(regexp, string, force) unless base.options[:pretend] content = File.binread(destination) if force || !content.include?(replacement) content.gsub!(regexp, string) File.open(destination, 'wb') { |file| file.write(content) } end end end end end end base.rb000066400000000000000000000544151446701454400364210ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'thor/command' require 'thor/core_ext/hash_with_indifferent_access' require 'thor/core_ext/ordered_hash' require 'thor/error' require 'thor/invocation' require 'thor/parser' require 'thor/shell' require 'thor/line_editor' require 'thor/util' class Thor autoload :Actions, 'thor/actions' autoload :RakeCompat, 'thor/rake_compat' autoload :Group, 'thor/group' # Shortcuts for help. HELP_MAPPINGS = %w(-h -? --help -D) # Thor methods that should not be overwritten by the user. THOR_RESERVED_WORDS = %w(invoke shell options behavior root destination_root relative_root action add_file create_file in_root inside run run_ruby_script) TEMPLATE_EXTNAME = '.tt' module Base attr_accessor :options, :parent_options, :args # It receives arguments in an Array and two hashes, one for options and # other for configuration. # # Notice that it does not check if all required arguments were supplied. # It should be done by the parser. # # ==== Parameters # args:: An array of objects. The objects are applied to their # respective accessors declared with argument. # # options:: An options hash that will be available as self.options. # The hash given is converted to a hash with indifferent # access, magic predicates (options.skip?) and then frozen. # # config:: Configuration for this Thor class. # def initialize(args = [], local_options = {}, config = {}) # rubocop:disable MethodLength parse_options = self.class.class_options # The start method splits inbound arguments at the first argument # that looks like an option (starts with - or --). It then calls # new, passing in the two halves of the arguments Array as the # first two parameters. command_options = config.delete(:command_options) # hook for start parse_options = parse_options.merge(command_options) if command_options if local_options.is_a?(Array) array_options, hash_options = local_options, {} else # Handle the case where the class was explicitly instantiated # with pre-parsed options. array_options, hash_options = [], local_options end # Let Thor::Options parse the options first, so it can remove # declared options from the array. This will leave us with # a list of arguments that weren't declared. stop_on_unknown = self.class.stop_on_unknown_option? config[:current_command] opts = Thor::Options.new(parse_options, hash_options, stop_on_unknown) self.options = opts.parse(array_options) self.options = config[:class_options].merge(options) if config[:class_options] # If unknown options are disallowed, make sure that none of the # remaining arguments looks like an option. opts.check_unknown! if self.class.check_unknown_options?(config) # Add the remaining arguments from the options parser to the # arguments passed in to initialize. Then remove any positional # arguments declared using #argument (this is primarily used # by Thor::Group). Tis will leave us with the remaining # positional arguments. to_parse = args to_parse += opts.remaining unless self.class.strict_args_position?(config) thor_args = Thor::Arguments.new(self.class.arguments) thor_args.parse(to_parse).each { |k, v| __send__("#{k}=", v) } @args = thor_args.remaining end class << self def included(base) #:nodoc: base.extend ClassMethods base.send :include, Invocation base.send :include, Shell end # Returns the classes that inherits from Thor or Thor::Group. # # ==== Returns # Array[Class] # def subclasses @subclasses ||= [] end # Returns the files where the subclasses are kept. # # ==== Returns # Hash[path => Class] # def subclass_files @subclass_files ||= Hash.new { |h, k| h[k] = [] } end # Whenever a class inherits from Thor or Thor::Group, we should track the # class and the file on Thor::Base. This is the method responsable for it. # def register_klass_file(klass) #:nodoc: file = caller[1].match(/(.*):\d+/)[1] Thor::Base.subclasses << klass unless Thor::Base.subclasses.include?(klass) file_subclasses = Thor::Base.subclass_files[File.expand_path(file)] file_subclasses << klass unless file_subclasses.include?(klass) end end module ClassMethods def attr_reader(*) #:nodoc: no_commands { super } end def attr_writer(*) #:nodoc: no_commands { super } end def attr_accessor(*) #:nodoc: no_commands { super } end # If you want to raise an error for unknown options, call check_unknown_options! # This is disabled by default to allow dynamic invocations. def check_unknown_options! @check_unknown_options = true end def check_unknown_options #:nodoc: @check_unknown_options ||= from_superclass(:check_unknown_options, false) end def check_unknown_options?(config) #:nodoc: !!check_unknown_options end # If true, option parsing is suspended as soon as an unknown option or a # regular argument is encountered. All remaining arguments are passed to # the command as regular arguments. def stop_on_unknown_option?(command_name) #:nodoc: false end # If you want only strict string args (useful when cascading thor classes), # call strict_args_position! This is disabled by default to allow dynamic # invocations. def strict_args_position! @strict_args_position = true end def strict_args_position #:nodoc: @strict_args_position ||= from_superclass(:strict_args_position, false) end def strict_args_position?(config) #:nodoc: !!strict_args_position end # Adds an argument to the class and creates an attr_accessor for it. # # Arguments are different from options in several aspects. The first one # is how they are parsed from the command line, arguments are retrieved # from position: # # thor command NAME # # Instead of: # # thor command --name=NAME # # Besides, arguments are used inside your code as an accessor (self.argument), # while options are all kept in a hash (self.options). # # Finally, arguments cannot have type :default or :boolean but can be # optional (supplying :optional => :true or :required => false), although # you cannot have a required argument after a non-required argument. If you # try it, an error is raised. # # ==== Parameters # name:: The name of the argument. # options:: Described below. # # ==== Options # :desc - Description for the argument. # :required - If the argument is required or not. # :optional - If the argument is optional or not. # :type - The type of the argument, can be :string, :hash, :array, :numeric. # :default - Default value for this argument. It cannot be required and have default values. # :banner - String to show on usage notes. # # ==== Errors # ArgumentError:: Raised if you supply a required argument after a non required one. # def argument(name, options = {}) # rubocop:disable MethodLength is_thor_reserved_word?(name, :argument) no_commands { attr_accessor name } required = if options.key?(:optional) !options[:optional] elsif options.key?(:required) options[:required] else options[:default].nil? end remove_argument name arguments.each do |argument| next if argument.required? fail ArgumentError, "You cannot have #{name.to_s.inspect} as required argument after " << "the non-required argument #{argument.human_name.inspect}." end if required options[:required] = required arguments << Thor::Argument.new(name, options) end # Returns this class arguments, looking up in the ancestors chain. # # ==== Returns # Array[Thor::Argument] # def arguments @arguments ||= from_superclass(:arguments, []) end # Adds a bunch of options to the set of class options. # # class_options :foo => false, :bar => :required, :baz => :string # # If you prefer more detailed declaration, check class_option. # # ==== Parameters # Hash[Symbol => Object] # def class_options(options = nil) @class_options ||= from_superclass(:class_options, {}) build_options(options, @class_options) if options @class_options end # Adds an option to the set of class options # # ==== Parameters # name:: The name of the argument. # options:: Described below. # # ==== Options # :desc:: -- Description for the argument. # :required:: -- If the argument is required or not. # :default:: -- Default value for this argument. # :group:: -- The group for this options. Use by class options to output options in different levels. # :aliases:: -- Aliases for this option. Note: Thor follows a convention of one-dash-one-letter options. Thus aliases like "-something" wouldn't be parsed; use either "\--something" or "-s" instead. # :type:: -- The type of the argument, can be :string, :hash, :array, :numeric or :boolean. # :banner:: -- String to show on usage notes. # :hide:: -- If you want to hide this option from the help. # def class_option(name, options = {}) build_option(name, options, class_options) end # Removes a previous defined argument. If :undefine is given, undefine # accessors as well. # # ==== Parameters # names:: Arguments to be removed # # ==== Examples # # remove_argument :foo # remove_argument :foo, :bar, :baz, :undefine => true # def remove_argument(*names) options = names.last.is_a?(Hash) ? names.pop : {} names.each do |name| arguments.delete_if { |a| a.name == name.to_s } undef_method name, "#{name}=" if options[:undefine] end end # Removes a previous defined class option. # # ==== Parameters # names:: Class options to be removed # # ==== Examples # # remove_class_option :foo # remove_class_option :foo, :bar, :baz # def remove_class_option(*names) names.each do |name| class_options.delete(name) end end # Defines the group. This is used when thor list is invoked so you can specify # that only commands from a pre-defined group will be shown. Defaults to standard. # # ==== Parameters # name # def group(name = nil) if name @group = name.to_s else @group ||= from_superclass(:group, 'standard') end end # Returns the commands for this Thor class. # # ==== Returns # OrderedHash:: An ordered hash with commands names as keys and Thor::Command # objects as values. # def commands @commands ||= Thor::CoreExt::OrderedHash.new end alias_method :tasks, :commands # Returns the commands for this Thor class and all subclasses. # # ==== Returns # OrderedHash:: An ordered hash with commands names as keys and Thor::Command # objects as values. # def all_commands @all_commands ||= from_superclass(:all_commands, Thor::CoreExt::OrderedHash.new) @all_commands.merge(commands) end alias_method :all_tasks, :all_commands # Removes a given command from this Thor class. This is usually done if you # are inheriting from another class and don't want it to be available # anymore. # # By default it only remove the mapping to the command. But you can supply # :undefine => true to undefine the method from the class as well. # # ==== Parameters # name:: The name of the command to be removed # options:: You can give :undefine => true if you want commands the method # to be undefined from the class as well. # def remove_command(*names) options = names.last.is_a?(Hash) ? names.pop : {} names.each do |name| commands.delete(name.to_s) all_commands.delete(name.to_s) undef_method name if options[:undefine] end end alias_method :remove_task, :remove_command # All methods defined inside the given block are not added as commands. # # So you can do: # # class MyScript < Thor # no_commands do # def this_is_not_a_command # end # end # end # # You can also add the method and remove it from the command list: # # class MyScript < Thor # def this_is_not_a_command # end # remove_command :this_is_not_a_command # end # def no_commands @no_commands = true yield ensure @no_commands = false end alias_method :no_tasks, :no_commands # Sets the namespace for the Thor or Thor::Group class. By default the # namespace is retrieved from the class name. If your Thor class is named # Scripts::MyScript, the help method, for example, will be called as: # # thor scripts:my_script -h # # If you change the namespace: # # namespace :my_scripts # # You change how your commands are invoked: # # thor my_scripts -h # # Finally, if you change your namespace to default: # # namespace :default # # Your commands can be invoked with a shortcut. Instead of: # # thor :my_command # def namespace(name = nil) if name @namespace = name.to_s else @namespace ||= Thor::Util.namespace_from_thor_class(self) end end # Parses the command and options from the given args, instantiate the class # and invoke the command. This method is used when the arguments must be parsed # from an array. If you are inside Ruby and want to use a Thor class, you # can simply initialize it: # # script = MyScript.new(args, options, config) # script.invoke(:command, first_arg, second_arg, third_arg) # def start(given_args = ARGV, config = {}) config[:shell] ||= Thor::Base.shell.new dispatch(nil, given_args.dup, nil, config) rescue Thor::Error => e config[:debug] || ENV['THOR_DEBUG'] == '1' ? (raise e) : config[:shell].error(e.message) exit(1) if exit_on_failure? rescue Errno::EPIPE # This happens if a thor command is piped to something like `head`, # which closes the pipe when it's done reading. This will also # mean that if the pipe is closed, further unnecessary # computation will not occur. exit(0) end # Allows to use private methods from parent in child classes as commands. # # ==== Parameters # names:: Method names to be used as commands # # ==== Examples # # public_command :foo # public_command :foo, :bar, :baz # def public_command(*names) names.each do |name| class_eval "def #{name}(*); super end" end end alias_method :public_task, :public_command def handle_no_command_error(command, has_namespace = $thor_runner) #:nodoc: if has_namespace fail UndefinedCommandError, "Could not find command #{command.inspect} in #{namespace.inspect} namespace." else fail UndefinedCommandError, "Could not find command #{command.inspect}." end end alias_method :handle_no_task_error, :handle_no_command_error def handle_argument_error(command, error, args, arity) #:nodoc: msg = "ERROR: \"#{basename} #{command.name}\" was called with " msg << 'no arguments' if args.empty? msg << 'arguments ' << args.inspect unless args.empty? msg << "\nUsage: #{banner(command).inspect}" fail InvocationError, msg end protected # Prints the class options per group. If an option does not belong to # any group, it's printed as Class option. # def class_options_help(shell, groups = {}) #:nodoc: # Group options by group class_options.each do |_, value| groups[value.group] ||= [] groups[value.group] << value end # Deal with default group global_options = groups.delete(nil) || [] print_options(shell, global_options) # Print all others groups.each do |group_name, options| print_options(shell, options, group_name) end end # Receives a set of options and print them. def print_options(shell, options, group_name = nil) return if options.empty? list = [] padding = options.map { |o| o.aliases.size }.max.to_i * 4 options.each do |option| unless option.hide item = [option.usage(padding)] item.push(option.description ? "# #{option.description}" : '') list << item list << ['', "# Default: #{option.default}"] if option.show_default? list << ['', "# Possible values: #{option.enum.join(', ')}"] if option.enum end end shell.say(group_name ? "#{group_name} options:" : 'Options:') shell.print_table(list, :indent => 2) shell.say '' end # Raises an error if the word given is a Thor reserved word. def is_thor_reserved_word?(word, type) #:nodoc: return false unless THOR_RESERVED_WORDS.include?(word.to_s) fail "#{word.inspect} is a Thor reserved word and cannot be defined as #{type}" end # Build an option and adds it to the given scope. # # ==== Parameters # name:: The name of the argument. # options:: Described in both class_option and method_option. # scope:: Options hash that is being built up def build_option(name, options, scope) #:nodoc: scope[name] = Thor::Option.new(name, options) end # Receives a hash of options, parse them and add to the scope. This is a # fast way to set a bunch of options: # # build_options :foo => true, :bar => :required, :baz => :string # # ==== Parameters # Hash[Symbol => Object] def build_options(options, scope) #:nodoc: options.each do |key, value| scope[key] = Thor::Option.parse(key, value) end end # Finds a command with the given name. If the command belongs to the current # class, just return it, otherwise dup it and add the fresh copy to the # current command hash. def find_and_refresh_command(name) #:nodoc: if commands[name.to_s] commands[name.to_s] elsif command = all_commands[name.to_s] # rubocop:disable AssignmentInCondition commands[name.to_s] = command.clone else fail ArgumentError, "You supplied :for => #{name.inspect}, but the command #{name.inspect} could not be found." end end alias_method :find_and_refresh_task, :find_and_refresh_command # Everytime someone inherits from a Thor class, register the klass # and file into baseclass. def inherited(klass) Thor::Base.register_klass_file(klass) klass.instance_variable_set(:@no_commands, false) end # Fire this callback whenever a method is added. Added methods are # tracked as commands by invoking the create_command method. def method_added(meth) meth = meth.to_s if meth == 'initialize' initialize_added return end # Return if it's not a public instance method return unless public_method_defined?(meth.to_sym) @no_commands ||= false return if @no_commands || !create_command(meth) is_thor_reserved_word?(meth, :command) Thor::Base.register_klass_file(self) end # Retrieves a value from superclass. If it reaches the baseclass, # returns default. def from_superclass(method, default = nil) if self == baseclass || !superclass.respond_to?(method, true) default else value = superclass.send(method) # Ruby implements `dup` on Object, but raises a `TypeError` # if the method is called on immediates. As a result, we # don't have a good way to check whether dup will succeed # without calling it and rescuing the TypeError. begin value.dup rescue TypeError value end end end # A flag that makes the process exit with status 1 if any error happens. def exit_on_failure? false end # # The basename of the program invoking the thor class. # def basename File.basename($PROGRAM_NAME).split(' ').first end # SIGNATURE: Sets the baseclass. This is where the superclass lookup # finishes. def baseclass #:nodoc: end # SIGNATURE: Creates a new command if valid_command? is true. This method is # called when a new method is added to the class. def create_command(meth) #:nodoc: end alias_method :create_task, :create_command # SIGNATURE: Defines behavior when the initialize method is added to the # class. def initialize_added #:nodoc: end # SIGNATURE: The hook invoked by start. def dispatch(command, given_args, given_opts, config) #:nodoc: fail NotImplementedError end end end end command.rb000066400000000000000000000106541446701454400371220ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorclass Thor class Command < Struct.new(:name, :description, :long_description, :usage, :options) FILE_REGEXP = /^#{Regexp.escape(File.dirname(__FILE__))}/ def initialize(name, description, long_description, usage, options = nil) super(name.to_s, description, long_description, usage, options || {}) end def initialize_copy(other) #:nodoc: super(other) self.options = other.options.dup if other.options end def hidden? false end # By default, a command invokes a method in the thor class. You can change this # implementation to create custom commands. def run(instance, args = []) arity = nil if private_method?(instance) instance.class.handle_no_command_error(name) elsif public_method?(instance) arity = instance.method(name).arity instance.__send__(name, *args) elsif local_method?(instance, :method_missing) instance.__send__(:method_missing, name.to_sym, *args) else instance.class.handle_no_command_error(name) end rescue ArgumentError => e handle_argument_error?(instance, e, caller) ? instance.class.handle_argument_error(self, e, args, arity) : (raise e) rescue NoMethodError => e handle_no_method_error?(instance, e, caller) ? instance.class.handle_no_command_error(name) : (fail e) end # Returns the formatted usage by injecting given required arguments # and required options into the given usage. def formatted_usage(klass, namespace = true, subcommand = false) if namespace namespace = klass.namespace formatted = "#{namespace.gsub(/^(default)/, '')}:" end formatted = "#{klass.namespace.split(':').last} " if subcommand formatted ||= '' # Add usage with required arguments formatted << if klass && !klass.arguments.empty? usage.to_s.gsub(/^#{name}/) do |match| match << ' ' << klass.arguments.map { |a| a.usage }.compact.join(' ') end else usage.to_s end # Add required options formatted << " #{required_options}" # Strip and go! formatted.strip end protected def not_debugging?(instance) !(instance.class.respond_to?(:debugging) && instance.class.debugging) end def required_options @required_options ||= options.map { |_, o| o.usage if o.required? }.compact.sort.join(' ') end # Given a target, checks if this class name is a public method. def public_method?(instance) #:nodoc: !(instance.public_methods & [name.to_s, name.to_sym]).empty? end def private_method?(instance) !(instance.private_methods & [name.to_s, name.to_sym]).empty? end def local_method?(instance, name) methods = instance.public_methods(false) + instance.private_methods(false) + instance.protected_methods(false) !(methods & [name.to_s, name.to_sym]).empty? end def sans_backtrace(backtrace, caller) #:nodoc: saned = backtrace.reject { |frame| frame =~ FILE_REGEXP || (frame =~ /\.java:/ && RUBY_PLATFORM =~ /java/) } saned - caller end def handle_argument_error?(instance, error, caller) not_debugging?(instance) && error.message =~ /wrong number of arguments/ && begin saned = sans_backtrace(error.backtrace, caller) # Ruby 1.9 always include the called method in the backtrace saned.empty? || (saned.size == 1 && RUBY_VERSION >= '1.9') end end def handle_no_method_error?(instance, error, caller) not_debugging?(instance) && error.message =~ /^undefined method `#{name}' for #{Regexp.escape(instance.to_s)}$/ end end Task = Command # rubocop:disable ConstantName # A command that is hidden in help messages but still invocable. class HiddenCommand < Command def hidden? true end end HiddenTask = HiddenCommand # rubocop:disable ConstantName # A dynamic command that handles method missing scenarios. class DynamicCommand < Command def initialize(name, options = nil) super(name.to_s, 'A dynamically-generated command', name.to_s, name.to_s, options) end def run(instance, args = []) if (instance.methods & [name.to_s, name.to_sym]).empty? super else instance.class.handle_no_command_error(name) end end end DynamicTask = DynamicCommand # rubocop:disable ConstantName end core_ext/000077500000000000000000000000001446701454400367615ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorhash_with_indifferent_access.rb000066400000000000000000000033661446701454400451720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/core_extclass Thor module CoreExt #:nodoc: # A hash with indifferent access and magic predicates. # # hash = Thor::CoreExt::HashWithIndifferentAccess.new 'foo' => 'bar', 'baz' => 'bee', 'force' => true # # hash[:foo] #=> 'bar' # hash['foo'] #=> 'bar' # hash.foo? #=> true # class HashWithIndifferentAccess < ::Hash #:nodoc: def initialize(hash = {}) super() hash.each do |key, value| self[convert_key(key)] = value end end def [](key) super(convert_key(key)) end def []=(key, value) super(convert_key(key), value) end def delete(key) super(convert_key(key)) end def values_at(*indices) indices.map { |key| self[convert_key(key)] } end def merge(other) dup.merge!(other) end def merge!(other) other.each do |key, value| self[convert_key(key)] = value end self end # Convert to a Hash with String keys. def to_hash Hash.new(default).merge!(self) end protected def convert_key(key) key.is_a?(Symbol) ? key.to_s : key end # Magic predicates. For instance: # # options.force? # => !!options['force'] # options.shebang # => "/usr/lib/local/ruby" # options.test_framework?(:rspec) # => options[:test_framework] == :rspec # def method_missing(method, *args, &block) method = method.to_s if method =~ /^(\w+)\?$/ if args.empty? !!self[$1] else self[$1] == args.first end else self[method] end end end end end io_binary_read.rb000066400000000000000000000004331446701454400422540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/core_extclass IO #:nodoc: class << self def binread(file, *args) fail ArgumentError, "wrong number of arguments (#{1 + args.size} for 1..3)" unless args.size < 3 File.open(file, 'rb') do |f| f.read(*args) end end unless method_defined? :binread end end ordered_hash.rb000066400000000000000000000042721446701454400417420ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/core_extclass Thor module CoreExt #:nodoc: if RUBY_VERSION >= '1.9' class OrderedHash < ::Hash end else # This class is based on the Ruby 1.9 ordered hashes. # # It keeps the semantics and most of the efficiency of normal hashes # while also keeping track of the order in which elements were set. # class OrderedHash #:nodoc: include Enumerable Node = Struct.new(:key, :value, :next, :prev) def initialize @hash = {} end def [](key) @hash[key] && @hash[key].value end def []=(key, value) if node = @hash[key] # rubocop:disable AssignmentInCondition node.value = value else node = Node.new(key, value) if !defined?(@first) || @first.nil? @first = @last = node else node.prev = @last @last.next = node @last = node end end @hash[key] = node value end def delete(key) if node = @hash[key] # rubocop:disable AssignmentInCondition prev_node = node.prev next_node = node.next next_node.prev = prev_node if next_node prev_node.next = next_node if prev_node @first = next_node if @first == node @last = prev_node if @last == node value = node.value end @hash.delete(key) value end def keys map { |k, v| k } end def values map { |k, v| v } end def each return unless defined?(@first) && @first yield [@first.key, @first.value] node = @first yield [node.key, node.value] while node = node.next # rubocop:disable AssignmentInCondition self end def merge(other) hash = self.class.new each do |key, value| hash[key] = value end other.each do |key, value| hash[key] = value end hash end def empty? @hash.empty? end end end end end error.rb000066400000000000000000000017251446701454400366340ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorclass Thor # Thor::Error is raised when it's caused by wrong usage of thor classes. Those # errors have their backtrace suppressed and are nicely shown to the user. # # Errors that are caused by the developer, like declaring a method which # overwrites a thor keyword, it SHOULD NOT raise a Thor::Error. This way, we # ensure that developer errors are shown with full backtrace. class Error < StandardError end # Raised when a command was not found. class UndefinedCommandError < Error end UndefinedTaskError = UndefinedCommandError # rubocop:disable ConstantName class AmbiguousCommandError < Error end AmbiguousTaskError = AmbiguousCommandError # rubocop:disable ConstantName # Raised when a command was found, but not invoked properly. class InvocationError < Error end class UnknownArgumentError < Error end class RequiredArgumentMissingError < InvocationError end class MalformattedArgumentError < InvocationError end end group.rb000066400000000000000000000215351446701454400366400ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'thor/base' # Thor has a special class called Thor::Group. The main difference to Thor class # is that it invokes all commands at once. It also include some methods that allows # invocations to be done at the class method, which are not available to Thor # commands. class Thor::Group # rubocop:disable ClassLength class << self # The description for this Thor::Group. If none is provided, but a source root # exists, tries to find the USAGE one folder above it, otherwise searches # in the superclass. # # ==== Parameters # description:: The description for this Thor::Group. # def desc(description = nil) if description @desc = description else @desc ||= from_superclass(:desc, nil) end end # Prints help information. # # ==== Options # short:: When true, shows only usage. # def help(shell) shell.say 'Usage:' shell.say " #{banner}\n" shell.say class_options_help(shell) shell.say desc if desc end # Stores invocations for this class merging with superclass values. # def invocations #:nodoc: @invocations ||= from_superclass(:invocations, {}) end # Stores invocation blocks used on invoke_from_option. # def invocation_blocks #:nodoc: @invocation_blocks ||= from_superclass(:invocation_blocks, {}) end # Invoke the given namespace or class given. It adds an instance # method that will invoke the klass and command. You can give a block to # configure how it will be invoked. # # The namespace/class given will have its options showed on the help # usage. Check invoke_from_option for more information. # def invoke(*names, &block) # rubocop:disable MethodLength options = names.last.is_a?(Hash) ? names.pop : {} verbose = options.fetch(:verbose, true) names.each do |name| invocations[name] = false invocation_blocks[name] = block if block_given? class_eval <<-METHOD, __FILE__, __LINE__ def _invoke_#{name.to_s.gsub(/\W/, '_')} klass, command = self.class.prepare_for_invocation(nil, #{name.inspect}) if klass say_status :invoke, #{name.inspect}, #{verbose.inspect} block = self.class.invocation_blocks[#{name.inspect}] _invoke_for_class_method klass, command, &block else say_status :error, %(#{name.inspect} [not found]), :red end end METHOD end end # Invoke a thor class based on the value supplied by the user to the # given option named "name". A class option must be created before this # method is invoked for each name given. # # ==== Examples # # class GemGenerator < Thor::Group # class_option :test_framework, :type => :string # invoke_from_option :test_framework # end # # ==== Boolean options # # In some cases, you want to invoke a thor class if some option is true or # false. This is automatically handled by invoke_from_option. Then the # option name is used to invoke the generator. # # ==== Preparing for invocation # # In some cases you want to customize how a specified hook is going to be # invoked. You can do that by overwriting the class method # prepare_for_invocation. The class method must necessarily return a klass # and an optional command. # # ==== Custom invocations # # You can also supply a block to customize how the option is going to be # invoked. The block receives two parameters, an instance of the current # class and the klass to be invoked. # def invoke_from_option(*names, &block) # rubocop:disable MethodLength options = names.last.is_a?(Hash) ? names.pop : {} verbose = options.fetch(:verbose, :white) names.each do |name| unless class_options.key?(name) fail ArgumentError, "You have to define the option #{name.inspect} " << 'before setting invoke_from_option.' end invocations[name] = true invocation_blocks[name] = block if block_given? class_eval <<-METHOD, __FILE__, __LINE__ def _invoke_from_option_#{name.to_s.gsub(/\W/, '_')} return unless options[#{name.inspect}] value = options[#{name.inspect}] value = #{name.inspect} if TrueClass === value klass, command = self.class.prepare_for_invocation(#{name.inspect}, value) if klass say_status :invoke, value, #{verbose.inspect} block = self.class.invocation_blocks[#{name.inspect}] _invoke_for_class_method klass, command, &block else say_status :error, %(\#{value} [not found]), :red end end METHOD end end # Remove a previously added invocation. # # ==== Examples # # remove_invocation :test_framework # def remove_invocation(*names) names.each do |name| remove_command(name) remove_class_option(name) invocations.delete(name) invocation_blocks.delete(name) end end # Overwrite class options help to allow invoked generators options to be # shown recursively when invoking a generator. # def class_options_help(shell, groups = {}) #:nodoc: get_options_from_invocations(groups, class_options) do |klass| klass.send(:get_options_from_invocations, groups, class_options) end super(shell, groups) end # Get invocations array and merge options from invocations. Those # options are added to group_options hash. Options that already exists # in base_options are not added twice. # def get_options_from_invocations(group_options, base_options) #:nodoc: # rubocop:disable MethodLength invocations.each do |name, from_option| value = if from_option option = class_options[name] option.type == :boolean ? name : option.default else name end next unless value klass, _ = prepare_for_invocation(name, value) next unless klass && klass.respond_to?(:class_options) value = value.to_s human_name = value.respond_to?(:classify) ? value.classify : value group_options[human_name] ||= [] group_options[human_name] += klass.class_options.values.select do |class_option| base_options[class_option.name.to_sym].nil? && class_option.group.nil? && !group_options.values.flatten.any? { |i| i.name == class_option.name } end yield klass if block_given? end end # Returns commands ready to be printed. def printable_commands(*) item = [] item << banner item << (desc ? "# #{desc.gsub(/\s+/m, ' ')}" : '') [item] end alias_method :printable_tasks, :printable_commands def handle_argument_error(command, error, args, arity) #:nodoc: msg = "#{basename} #{command.name} takes #{arity} argument" msg << 's' if arity > 1 msg << ', but it should not.' fail error, msg end protected # The method responsible for dispatching given the args. def dispatch(command, given_args, given_opts, config) #:nodoc: if Thor::HELP_MAPPINGS.include?(given_args.first) help(config[:shell]) return end args, opts = Thor::Options.split(given_args) opts = given_opts || opts instance = new(args, opts, config) yield instance if block_given? if command instance.invoke_command(all_commands[command]) else instance.invoke_all end end # The banner for this class. You can customize it if you are invoking the # thor class by another ways which is not the Thor::Runner. def banner "#{basename} #{self_command.formatted_usage(self, false)}" end # Represents the whole class as a command. def self_command #:nodoc: Thor::DynamicCommand.new(namespace, class_options) end alias_method :self_task, :self_command def baseclass #:nodoc: Thor::Group end def create_command(meth) #:nodoc: commands[meth.to_s] = Thor::Command.new(meth, nil, nil, nil, nil) true end alias_method :create_task, :create_command end include Thor::Base protected # Shortcut to invoke with padding and block handling. Use internally by # invoke and invoke_from_option class methods. def _invoke_for_class_method(klass, command = nil, *args, &block) #:nodoc: with_padding do if block case block.arity when 3 block.call(self, klass, command) when 2 block.call(self, klass) when 1 instance_exec(klass, &block) end else invoke klass, command, *args end end end end invocation.rb000066400000000000000000000134371446701454400376570ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorclass Thor module Invocation def self.included(base) #:nodoc: base.extend ClassMethods end module ClassMethods # This method is responsible for receiving a name and find the proper # class and command for it. The key is an optional parameter which is # available only in class methods invocations (i.e. in Thor::Group). def prepare_for_invocation(key, name) #:nodoc: case name when Symbol, String Thor::Util.find_class_and_command_by_namespace(name.to_s, !key) else name end end end # Make initializer aware of invocations and the initialization args. def initialize(args = [], options = {}, config = {}, &block) #:nodoc: @_invocations = config[:invocations] || Hash.new { |h, k| h[k] = [] } @_initializer = [args, options, config] super end # Receives a name and invokes it. The name can be a string (either "command" or # "namespace:command"), a Thor::Command, a Class or a Thor instance. If the # command cannot be guessed by name, it can also be supplied as second argument. # # You can also supply the arguments, options and configuration values for # the command to be invoked, if none is given, the same values used to # initialize the invoker are used to initialize the invoked. # # When no name is given, it will invoke the default command of the current class. # # ==== Examples # # class A < Thor # def foo # invoke :bar # invoke "b:hello", ["Erik"] # end # # def bar # invoke "b:hello", ["Erik"] # end # end # # class B < Thor # def hello(name) # puts "hello #{name}" # end # end # # You can notice that the method "foo" above invokes two commands: "bar", # which belongs to the same class and "hello" which belongs to the class B. # # By using an invocation system you ensure that a command is invoked only once. # In the example above, invoking "foo" will invoke "b:hello" just once, even # if it's invoked later by "bar" method. # # When class A invokes class B, all arguments used on A initialization are # supplied to B. This allows lazy parse of options. Let's suppose you have # some rspec commands: # # class Rspec < Thor::Group # class_option :mock_framework, :type => :string, :default => :rr # # def invoke_mock_framework # invoke "rspec:#{options[:mock_framework]}" # end # end # # As you noticed, it invokes the given mock framework, which might have its # own options: # # class Rspec::RR < Thor::Group # class_option :style, :type => :string, :default => :mock # end # # Since it's not rspec concern to parse mock framework options, when RR # is invoked all options are parsed again, so RR can extract only the options # that it's going to use. # # If you want Rspec::RR to be initialized with its own set of options, you # have to do that explicitly: # # invoke "rspec:rr", [], :style => :foo # # Besides giving an instance, you can also give a class to invoke: # # invoke Rspec::RR, [], :style => :foo # def invoke(name = nil, *args) if name.nil? warn "[Thor] Calling invoke() without argument is deprecated. Please use invoke_all instead.\n#{caller.join("\n")}" return invoke_all end args.unshift(nil) if args.first.is_a?(Array) || args.first.nil? command, args, opts, config = args klass, command = _retrieve_class_and_command(name, command) fail "Missing Thor class for invoke #{name}" unless klass fail "Expected Thor class, got #{klass}" unless klass <= Thor::Base args, opts, config = _parse_initialization_options(args, opts, config) klass.send(:dispatch, command, args, opts, config) do |instance| instance.parent_options = options end end # Invoke the given command if the given args. def invoke_command(command, *args) #:nodoc: current = @_invocations[self.class] unless current.include?(command.name) current << command.name command.run(self, *args) end end alias_method :invoke_task, :invoke_command # Invoke all commands for the current instance. def invoke_all #:nodoc: self.class.all_commands.map { |_, command| invoke_command(command) } end # Invokes using shell padding. def invoke_with_padding(*args) with_padding { invoke(*args) } end protected # Configuration values that are shared between invocations. def _shared_configuration #:nodoc: {:invocations => @_invocations} end # This method simply retrieves the class and command to be invoked. # If the name is nil or the given name is a command in the current class, # use the given name and return self as class. Otherwise, call # prepare_for_invocation in the current class. def _retrieve_class_and_command(name, sent_command = nil) #:nodoc: case when name.nil? [self.class, nil] when self.class.all_commands[name.to_s] [self.class, name.to_s] else klass, command = self.class.prepare_for_invocation(nil, name) [klass, command || sent_command] end end alias_method :_retrieve_class_and_task, :_retrieve_class_and_command # Initialize klass using values stored in the @_initializer. def _parse_initialization_options(args, opts, config) #:nodoc: stored_args, stored_opts, stored_config = @_initializer args ||= stored_args.dup opts ||= stored_opts.dup config ||= {} config = stored_config.merge(_shared_configuration).merge!(config) [args, opts, config] end end end line_editor.rb000066400000000000000000000005421446701454400377740ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'thor/line_editor/basic' require 'thor/line_editor/readline' class Thor module LineEditor def self.readline(prompt, options={}) best_available.new(prompt, options).readline end def self.best_available [ Thor::LineEditor::Readline, Thor::LineEditor::Basic ].detect(&:available?) end end end line_editor/000077500000000000000000000000001446701454400374465ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorbasic.rb000066400000000000000000000010261446701454400410530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/line_editorclass Thor module LineEditor class Basic attr_reader :prompt, :options def self.available? true end def initialize(prompt, options) @prompt = prompt @options = options end def readline $stdout.print(prompt) get_input end private def get_input if echo? $stdin.gets else $stdin.noecho(&:gets) end end def echo? options.fetch(:echo, true) end end end end readline.rb000066400000000000000000000034311446701454400415570ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/line_editorbegin require 'readline' rescue LoadError end class Thor module LineEditor class Readline < Basic def self.available? Object.const_defined?(:Readline) end def readline if echo? ::Readline.completion_append_character = nil # Ruby 1.8.7 does not allow Readline.completion_proc= to receive nil. if complete = completion_proc ::Readline.completion_proc = complete end ::Readline.readline(prompt, add_to_history?) else super end end private def add_to_history? options.fetch(:add_to_history, true) end def completion_proc if use_path_completion? Proc.new { |text| PathCompletion.new(text).matches } elsif completion_options.any? Proc.new do |text| completion_options.select { |option| option.start_with?(text) } end end end def completion_options options.fetch(:limited_to, []) end def use_path_completion? options.fetch(:path, false) end class PathCompletion attr_reader :text private :text def initialize(text) @text = text end def matches relative_matches end private def relative_matches absolute_matches.map { |path| path.sub(base_path, '') } end def absolute_matches Dir[glob_pattern].map do |path| if File.directory?(path) "#{path}/" else path end end end def glob_pattern "#{base_path}#{text}*" end def base_path "#{Dir.pwd}/" end end end end end parser.rb000066400000000000000000000001721446701454400367720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'thor/parser/argument' require 'thor/parser/arguments' require 'thor/parser/option' require 'thor/parser/options' parser/000077500000000000000000000000001446701454400364455ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorargument.rb000066400000000000000000000034241446701454400406170ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/parserclass Thor class Argument #:nodoc: VALID_TYPES = [:numeric, :hash, :array, :string] attr_reader :name, :description, :enum, :required, :type, :default, :banner alias_method :human_name, :name def initialize(name, options = {}) class_name = self.class.name.split('::').last type = options[:type] fail ArgumentError, "#{class_name} name can't be nil." if name.nil? fail ArgumentError, "Type :#{type} is not valid for #{class_name.downcase}s." if type && !valid_type?(type) @name = name.to_s @description = options[:desc] @required = options.key?(:required) ? options[:required] : true @type = (type || :string).to_sym @default = options[:default] @banner = options[:banner] || default_banner @enum = options[:enum] validate! # Trigger specific validations end def usage required? ? banner : "[#{banner}]" end def required? required end def show_default? case default when Array, String, Hash !default.empty? else default end end protected def validate! if required? && !default.nil? fail ArgumentError, 'An argument cannot be required and have default value.' elsif @enum && !@enum.is_a?(Array) fail ArgumentError, 'An argument cannot have an enum other than an array.' end end def valid_type?(type) self.class::VALID_TYPES.include?(type.to_sym) end def default_banner case type when :boolean nil when :string, :default human_name.upcase when :numeric 'N' when :hash 'key:value' when :array 'one two three' end end end end arguments.rb000066400000000000000000000104661446701454400410060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/parserclass Thor class Arguments #:nodoc: # rubocop:disable ClassLength NUMERIC = /(\d*\.\d+|\d+)/ # Receives an array of args and returns two arrays, one with arguments # and one with switches. # def self.split(args) arguments = [] args.each do |item| break if item =~ /^-/ arguments << item end [arguments, args[Range.new(arguments.size, -1)]] end def self.parse(*args) to_parse = args.pop new(*args).parse(to_parse) end # Takes an array of Thor::Argument objects. # def initialize(arguments = []) @assigns, @non_assigned_required = {}, [] @switches = arguments arguments.each do |argument| if !argument.default.nil? @assigns[argument.human_name] = argument.default elsif argument.required? @non_assigned_required << argument end end end def parse(args) @pile = args.dup @switches.each do |argument| break unless peek @non_assigned_required.delete(argument) @assigns[argument.human_name] = send(:"parse_#{argument.type}", argument.human_name) end check_requirement! @assigns end def remaining # rubocop:disable TrivialAccessors @pile end private def no_or_skip?(arg) arg =~ /^--(no|skip)-([-\w]+)$/ $2 end def last? @pile.empty? end def peek @pile.first end def shift @pile.shift end def unshift(arg) if arg.kind_of?(Array) @pile = arg + @pile else @pile.unshift(arg) end end def current_is_value? peek && peek.to_s !~ /^-/ end # Runs through the argument array getting strings that contains ":" and # mark it as a hash: # # [ "name:string", "age:integer" ] # # Becomes: # # { "name" => "string", "age" => "integer" } # def parse_hash(name) return shift if peek.is_a?(Hash) hash = {} while current_is_value? && peek.include?(':') key, value = shift.split(':', 2) hash[key] = value end hash end # Runs through the argument array getting all strings until no string is # found or a switch is found. # # ["a", "b", "c"] # # And returns it as an array: # # ["a", "b", "c"] # def parse_array(name) return shift if peek.is_a?(Array) array = [] array << shift while current_is_value? array end # Check if the peek is numeric format and return a Float or Integer. # Check if the peek is included in enum if enum is provided. # Otherwise raises an error. # def parse_numeric(name) return shift if peek.is_a?(Numeric) unless peek =~ NUMERIC && $& == peek fail MalformattedArgumentError, "Expected numeric value for '#{name}'; got #{peek.inspect}" end value = $&.index('.') ? shift.to_f : shift.to_i if @switches.is_a?(Hash) && switch = @switches[name] if switch.enum && !switch.enum.include?(value) raise MalformattedArgumentError, "Expected '#{name}' to be one of #{switch.enum.join(', ')}; got #{value}" end end value end # Parse string: # for --string-arg, just return the current value in the pile # for --no-string-arg, nil # Check if the peek is included in enum if enum is provided. Otherwise raises an error. # def parse_string(name) if no_or_skip?(name) nil else value = shift if @switches.is_a?(Hash) && switch = @switches[name] # rubocop:disable AssignmentInCondition if switch.enum && !switch.enum.include?(value) fail MalformattedArgumentError, "Expected '#{name}' to be one of #{switch.enum.join(', ')}; got #{value}" end end value end end # Raises an error if @non_assigned_required array is not empty. # def check_requirement! unless @non_assigned_required.empty? names = @non_assigned_required.map do |o| o.respond_to?(:switch_name) ? o.switch_name : o.human_name end.join("', '") class_name = self.class.name.split('::').last.downcase fail RequiredArgumentMissingError, "No value provided for required #{class_name} '#{names}'" end end end end option.rb000066400000000000000000000065121446701454400403060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/parserclass Thor class Option < Argument #:nodoc: attr_reader :aliases, :group, :lazy_default, :hide VALID_TYPES = [:boolean, :numeric, :hash, :array, :string] def initialize(name, options = {}) options[:required] = false unless options.key?(:required) super @lazy_default = options[:lazy_default] @group = options[:group].to_s.capitalize if options[:group] @aliases = Array(options[:aliases]) @hide = options[:hide] end # This parse quick options given as method_options. It makes several # assumptions, but you can be more specific using the option method. # # parse :foo => "bar" # #=> Option foo with default value bar # # parse [:foo, :baz] => "bar" # #=> Option foo with default value bar and alias :baz # # parse :foo => :required # #=> Required option foo without default value # # parse :foo => 2 # #=> Option foo with default value 2 and type numeric # # parse :foo => :numeric # #=> Option foo without default value and type numeric # # parse :foo => true # #=> Option foo with default value true and type boolean # # The valid types are :boolean, :numeric, :hash, :array and :string. If none # is given a default type is assumed. This default type accepts arguments as # string (--foo=value) or booleans (just --foo). # # By default all options are optional, unless :required is given. # def self.parse(key, value) # rubocop:disable MethodLength if key.is_a?(Array) name, *aliases = key else name, aliases = key, [] end name = name.to_s default = value type = case value when Symbol default = nil if VALID_TYPES.include?(value) value elsif required = (value == :required) # rubocop:disable AssignmentInCondition :string end when TrueClass, FalseClass :boolean when Numeric :numeric when Hash, Array, String value.class.name.downcase.to_sym end new(name.to_s, :required => required, :type => type, :default => default, :aliases => aliases) end def switch_name @switch_name ||= dasherized? ? name : dasherize(name) end def human_name @human_name ||= dasherized? ? undasherize(name) : name end def usage(padding = 0) sample = if banner && !banner.to_s.empty? "#{switch_name}=#{banner}" else switch_name end sample = "[#{sample}]" unless required? if aliases.empty? (' ' * padding) << sample else "#{aliases.join(', ')}, #{sample}" end end VALID_TYPES.each do |type| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{type}? self.type == #{type.inspect} end RUBY end protected def validate! fail ArgumentError, 'An option cannot be boolean and required.' if boolean? && required? end def dasherized? name.index('-') == 0 end def undasherize(str) str.sub(/^-{1,2}/, '') end def dasherize(str) (str.length > 1 ? '--' : '-') + str.gsub('_', '-') end end end options.rb000066400000000000000000000134661446701454400404770ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/parserclass Thor class Options < Arguments #:nodoc: # rubocop:disable ClassLength LONG_RE = /^(--\w+(?:-\w+)*)$/ SHORT_RE = /^(-[a-z])$/i EQ_RE = /^(--\w+(?:-\w+)*|-[a-z])=(.*)$/i SHORT_SQ_RE = /^-([a-z]{2,})$/i # Allow either -x -v or -xv style for single char args SHORT_NUM = /^(-[a-z])#{NUMERIC}$/i OPTS_END = '--'.freeze # Receives a hash and makes it switches. def self.to_switches(options) options.map do |key, value| case value when true "--#{key}" when Array "--#{key} #{value.map { |v| v.inspect }.join(' ')}" when Hash "--#{key} #{value.map { |k, v| "#{k}:#{v}" }.join(' ')}" when nil, false '' else "--#{key} #{value.inspect}" end end.join(' ') end # Takes a hash of Thor::Option and a hash with defaults. # # If +stop_on_unknown+ is true, #parse will stop as soon as it encounters # an unknown option or a regular argument. def initialize(hash_options = {}, defaults = {}, stop_on_unknown = false) @stop_on_unknown = stop_on_unknown options = hash_options.values super(options) # Add defaults defaults.each do |key, value| @assigns[key.to_s] = value @non_assigned_required.delete(hash_options[key]) end @shorts, @switches, @extra = {}, {}, [] options.each do |option| @switches[option.switch_name] = option option.aliases.each do |short| name = short.to_s.sub(/^(?!\-)/, '-') @shorts[name] ||= option.switch_name end end end def remaining # rubocop:disable TrivialAccessors @extra end def peek return super unless @parsing_options result = super if result == OPTS_END shift @parsing_options = false super else result end end def parse(args) # rubocop:disable MethodLength @pile = args.dup @parsing_options = true while peek if parsing_options? match, is_switch = current_is_switch? shifted = shift if is_switch case shifted when SHORT_SQ_RE unshift($1.split('').map { |f| "-#{f}" }) next when EQ_RE, SHORT_NUM unshift($2) switch = $1 when LONG_RE, SHORT_RE switch = $1 end switch = normalize_switch(switch) option = switch_option(switch) @assigns[option.human_name] = parse_peek(switch, option) elsif @stop_on_unknown @parsing_options = false @extra << shifted @extra << shift while peek break elsif match @extra << shifted @extra << shift while peek && peek !~ /^-/ else @extra << shifted end else @extra << shift end end check_requirement! assigns = Thor::CoreExt::HashWithIndifferentAccess.new(@assigns) assigns.freeze assigns end def check_unknown! # an unknown option starts with - or -- and has no more --'s afterward. unknown = @extra.select { |str| str =~ /^--?(?:(?!--).)*$/ } fail UnknownArgumentError, "Unknown switches '#{unknown.join(', ')}'" unless unknown.empty? end protected # Check if the current value in peek is a registered switch. # # Two booleans are returned. The first is true if the current value # starts with a hyphen; the second is true if it is a registered switch. def current_is_switch? case peek when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM [true, switch?($1)] when SHORT_SQ_RE [true, $1.split('').any? { |f| switch?("-#{f}") }] else [false, false] end end def current_is_switch_formatted? case peek when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM, SHORT_SQ_RE true else false end end def current_is_value? peek && (!parsing_options? || super) end def switch?(arg) switch_option(normalize_switch(arg)) end def switch_option(arg) if match = no_or_skip?(arg) # rubocop:disable AssignmentInCondition @switches[arg] || @switches["--#{match}"] else @switches[arg] end end # Check if the given argument is actually a shortcut. # def normalize_switch(arg) (@shorts[arg] || arg).tr('_', '-') end def parsing_options? peek @parsing_options end # Parse boolean values which can be given as --foo=true, --foo or --no-foo. # def parse_boolean(switch) if current_is_value? if ['true', 'TRUE', 't', 'T', true].include?(peek) shift true elsif ['false', 'FALSE', 'f', 'F', false].include?(peek) shift false else true end else @switches.key?(switch) || !no_or_skip?(switch) end end # Parse the value at the peek analyzing if it requires an input or not. # def parse_peek(switch, option) if parsing_options? && (current_is_switch_formatted? || last?) if option.boolean? # No problem for boolean types elsif no_or_skip?(switch) return nil # User set value to nil elsif option.string? && !option.required? # Return the default if there is one, else the human name return option.lazy_default || option.default || option.human_name elsif option.lazy_default return option.lazy_default else fail MalformattedArgumentError, "No value provided for option '#{switch}'" end end @non_assigned_required.delete(option) send(:"parse_#{option.type}", switch) end end end rake_compat.rb000066400000000000000000000037621446701454400377730ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'rake' require 'rake/dsl_definition' class Thor # Adds a compatibility layer to your Thor classes which allows you to use # rake package tasks. For example, to use rspec rake tasks, one can do: # # require 'thor/rake_compat' # require 'rspec/core/rake_task' # # class Default < Thor # include Thor::RakeCompat # # RSpec::Core::RakeTask.new(:spec) do |t| # t.spec_opts = ['--options', './.rspec'] # t.spec_files = FileList['spec/**/*_spec.rb'] # end # end # module RakeCompat include Rake::DSL if defined?(Rake::DSL) def self.rake_classes @rake_classes ||= [] end def self.included(base) # Hack. Make rakefile point to invoker, so rdoc task is generated properly. rakefile = File.basename(caller[0].match(/(.*):\d+/)[1]) Rake.application.instance_variable_set(:@rakefile, rakefile) rake_classes << base end end end # override task on (main), for compatibility with Rake 0.9 instance_eval do alias rake_namespace namespace def task(*) task = super if klass = Thor::RakeCompat.rake_classes.last # rubocop:disable AssignmentInCondition non_namespaced_name = task.name.split(':').last description = non_namespaced_name description << task.arg_names.map { |n| n.to_s.upcase }.join(' ') description.strip! klass.desc description, Rake.application.last_description || non_namespaced_name Rake.application.last_description = nil klass.send :define_method, non_namespaced_name do |*args| Rake::Task[task.name.to_sym].invoke(*args) end end task end def namespace(name) if klass = Thor::RakeCompat.rake_classes.last # rubocop:disable AssignmentInCondition const_name = Thor::Util.camel_case(name.to_s).to_sym klass.const_set(const_name, Class.new(Thor)) new_klass = klass.const_get(const_name) Thor::RakeCompat.rake_classes << new_klass end super Thor::RakeCompat.rake_classes.pop end end runner.rb000066400000000000000000000231161446701454400370120ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'thor' require 'thor/group' require 'thor/core_ext/io_binary_read' require 'fileutils' require 'open-uri' require 'yaml' require 'digest/md5' require 'pathname' class Thor::Runner < Thor #:nodoc: # rubocop:disable ClassLength map '-T' => :list, '-i' => :install, '-u' => :update, '-v' => :version # Override Thor#help so it can give information about any class and any method. # def help(meth = nil) if meth && !self.respond_to?(meth) initialize_thorfiles(meth) klass, command = Thor::Util.find_class_and_command_by_namespace(meth) self.class.handle_no_command_error(command, false) if klass.nil? klass.start(['-h', command].compact, :shell => shell) else super end end # If a command is not found on Thor::Runner, method missing is invoked and # Thor::Runner is then responsible for finding the command in all classes. # def method_missing(meth, *args) meth = meth.to_s initialize_thorfiles(meth) klass, command = Thor::Util.find_class_and_command_by_namespace(meth) self.class.handle_no_command_error(command, false) if klass.nil? args.unshift(command) if command klass.start(args, :shell => shell) end desc 'install NAME', 'Install an optionally named Thor file into your system commands' method_options :as => :string, :relative => :boolean, :force => :boolean def install(name) # rubocop:disable MethodLength initialize_thorfiles # If a directory name is provided as the argument, look for a 'main.thor' # command in said directory. begin if File.directory?(File.expand_path(name)) base, package = File.join(name, 'main.thor'), :directory contents = open(base) { |input| input.read } else base, package = name, :file contents = open(name) { |input| input.read } end rescue OpenURI::HTTPError raise Error, "Error opening URI '#{name}'" rescue Errno::ENOENT fail Error, "Error opening file '#{name}'" end say 'Your Thorfile contains:' say contents unless options['force'] return false if no?('Do you wish to continue [y/N]?') end as = options['as'] || begin first_line = contents.split("\n")[0] (match = first_line.match(/\s*#\s*module:\s*([^\n]*)/)) ? match[1].strip : nil end unless as basename = File.basename(name) as = ask("Please specify a name for #{name} in the system repository [#{basename}]:") as = basename if as.empty? end location = if options[:relative] || name =~ %r{^https?://} name else File.expand_path(name) end thor_yaml[as] = { :filename => Digest::MD5.hexdigest(name + as), :location => location, :namespaces => Thor::Util.namespaces_in_content(contents, base) } save_yaml(thor_yaml) say 'Storing thor file in your system repository' destination = File.join(thor_root, thor_yaml[as][:filename]) if package == :file File.open(destination, 'w') { |f| f.puts contents } else FileUtils.cp_r(name, destination) end thor_yaml[as][:filename] # Indicate success end desc 'version', 'Show Thor version' def version require 'thor/version' say "Thor #{Thor::VERSION}" end desc 'uninstall NAME', 'Uninstall a named Thor module' def uninstall(name) fail Error, "Can't find module '#{name}'" unless thor_yaml[name] say "Uninstalling #{name}." FileUtils.rm_rf(File.join(thor_root, "#{thor_yaml[name][:filename]}")) thor_yaml.delete(name) save_yaml(thor_yaml) puts 'Done.' end desc 'update NAME', 'Update a Thor file from its original location' def update(name) fail Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location] say "Updating '#{name}' from #{thor_yaml[name][:location]}" old_filename = thor_yaml[name][:filename] self.options = options.merge('as' => name) if File.directory? File.expand_path(name) FileUtils.rm_rf(File.join(thor_root, old_filename)) thor_yaml.delete(old_filename) save_yaml(thor_yaml) filename = install(name) else filename = install(thor_yaml[name][:location]) end unless filename == old_filename File.delete(File.join(thor_root, old_filename)) end end desc 'installed', 'List the installed Thor modules and commands' method_options :internal => :boolean def installed initialize_thorfiles(nil, true) display_klasses(true, options['internal']) end desc 'list [SEARCH]', 'List the available thor commands (--substring means .*SEARCH)' method_options :substring => :boolean, :group => :string, :all => :boolean, :debug => :boolean def list(search = '') initialize_thorfiles search = ".*#{search}" if options['substring'] search = /^#{search}.*/i group = options[:group] || 'standard' klasses = Thor::Base.subclasses.select do |k| (options[:all] || k.group == group) && k.namespace =~ search end display_klasses(false, false, klasses) end private def self.banner(command, all = false, subcommand = false) 'thor ' + command.formatted_usage(self, all, subcommand) end def thor_root Thor::Util.thor_root end def thor_yaml @thor_yaml ||= begin yaml_file = File.join(thor_root, 'thor.yml') yaml = YAML.load_file(yaml_file) if File.exist?(yaml_file) yaml || {} end end # Save the yaml file. If none exists in thor root, creates one. # def save_yaml(yaml) yaml_file = File.join(thor_root, 'thor.yml') unless File.exist?(yaml_file) FileUtils.mkdir_p(thor_root) yaml_file = File.join(thor_root, 'thor.yml') FileUtils.touch(yaml_file) end File.open(yaml_file, 'w') { |f| f.puts yaml.to_yaml } end def self.exit_on_failure? true end # Load the Thorfiles. If relevant_to is supplied, looks for specific files # in the thor_root instead of loading them all. # # By default, it also traverses the current path until find Thor files, as # described in thorfiles. This look up can be skipped by supplying # skip_lookup true. # def initialize_thorfiles(relevant_to = nil, skip_lookup = false) thorfiles(relevant_to, skip_lookup).each do |f| Thor::Util.load_thorfile(f, nil, options[:debug]) unless Thor::Base.subclass_files.keys.include?(File.expand_path(f)) end end # Finds Thorfiles by traversing from your current directory down to the root # directory of your system. If at any time we find a Thor file, we stop. # # We also ensure that system-wide Thorfiles are loaded first, so local # Thorfiles can override them. # # ==== Example # # If we start at /Users/wycats/dev/thor ... # # 1. /Users/wycats/dev/thor # 2. /Users/wycats/dev # 3. /Users/wycats <-- we find a Thorfile here, so we stop # # Suppose we start at c:\Documents and Settings\james\dev\thor ... # # 1. c:\Documents and Settings\james\dev\thor # 2. c:\Documents and Settings\james\dev # 3. c:\Documents and Settings\james # 4. c:\Documents and Settings # 5. c:\ <-- no Thorfiles found! # def thorfiles(relevant_to = nil, skip_lookup = false) thorfiles = [] unless skip_lookup Pathname.pwd.ascend do |path| thorfiles = Thor::Util.globs_for(path).map { |g| Dir[g] }.flatten break unless thorfiles.empty? end end files = (relevant_to ? thorfiles_relevant_to(relevant_to) : Thor::Util.thor_root_glob) files += thorfiles files -= ["#{thor_root}/thor.yml"] files.map! do |file| File.directory?(file) ? File.join(file, 'main.thor') : file end end # Load Thorfiles relevant to the given method. If you provide "foo:bar" it # will load all thor files in the thor.yaml that has "foo" e "foo:bar" # namespaces registered. # def thorfiles_relevant_to(meth) lookup = [meth, meth.split(':')[0...-1].join(':')] files = thor_yaml.select do |k, v| v[:namespaces] && !(v[:namespaces] & lookup).empty? end files.map { |k, v| File.join(thor_root, "#{v[:filename]}") } end # Display information about the given klasses. If with_module is given, # it shows a table with information extracted from the yaml file. # def display_klasses(with_modules = false, show_internal = false, klasses = Thor::Base.subclasses) klasses -= [Thor, Thor::Runner, Thor::Group] unless show_internal fail Error, 'No Thor commands available' if klasses.empty? show_modules if with_modules && !thor_yaml.empty? list = Hash.new { |h, k| h[k] = [] } groups = klasses.select { |k| k.ancestors.include?(Thor::Group) } # Get classes which inherit from Thor (klasses - groups).each { |k| list[k.namespace.split(':').first] += k.printable_commands(false) } # Get classes which inherit from Thor::Base groups.map! { |k| k.printable_commands(false).first } list['root'] = groups # Order namespaces with default coming first list = list.sort { |a, b| a[0].sub(/^default/, '') <=> b[0].sub(/^default/, '') } list.each { |n, commands| display_commands(n, commands) unless commands.empty? } end def display_commands(namespace, list) #:nodoc: list.sort! { |a, b| a[0] <=> b[0] } say shell.set_color(namespace, :blue, true) say '-' * namespace.size print_table(list, :truncate => true) say end alias_method :display_tasks, :display_commands def show_modules #:nodoc: info = [] labels = %w[Modules Namespaces] info << labels info << ['-' * labels[0].size, '-' * labels[1].size] thor_yaml.each do |name, hash| info << [name, hash[:namespaces].join(', ')] end print_table info say '' end end shell.rb000066400000000000000000000043101446701454400366030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'rbconfig' class Thor module Base class << self attr_writer :shell # Returns the shell used in all Thor classes. If you are in a Unix platform # it will use a colored log, otherwise it will use a basic one without color. # def shell @shell ||= if ENV['THOR_SHELL'] && ENV['THOR_SHELL'].size > 0 Thor::Shell.const_get(ENV['THOR_SHELL']) elsif RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ && !ENV['ANSICON'] Thor::Shell::Basic else Thor::Shell::Color end end end end module Shell SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width] attr_writer :shell autoload :Basic, 'thor/shell/basic' autoload :Color, 'thor/shell/color' autoload :HTML, 'thor/shell/html' # Add shell to initialize config values. # # ==== Configuration # shell:: An instance of the shell to be used. # # ==== Examples # # class MyScript < Thor # argument :first, :type => :numeric # end # # MyScript.new [1.0], { :foo => :bar }, :shell => Thor::Shell::Basic.new # def initialize(args = [], options = {}, config = {}) super self.shell = config[:shell] shell.base ||= self if shell.respond_to?(:base) end # Holds the shell for the given Thor instance. If no shell is given, # it gets a default shell from Thor::Base.shell. def shell @shell ||= Thor::Base.shell.new end # Common methods that are delegated to the shell. SHELL_DELEGATED_METHODS.each do |method| module_eval <<-METHOD, __FILE__, __LINE__ def #{method}(*args,&block) shell.#{method}(*args,&block) end METHOD end # Yields the given block with padding. def with_padding shell.padding += 1 yield ensure shell.padding -= 1 end protected # Allow shell to be shared between invocations. # def _shared_configuration #:nodoc: super.merge!(:shell => shell) end end end shell/000077500000000000000000000000001446701454400362605ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorbasic.rb000066400000000000000000000302741446701454400376740ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/shellrequire 'tempfile' class Thor module Shell class Basic # rubocop:disable ClassLength attr_accessor :base attr_reader :padding # Initialize base, mute and padding to nil. # def initialize #:nodoc: @base, @mute, @padding, @always_force = nil, false, 0, false end # Mute everything that's inside given block # def mute @mute = true yield ensure @mute = false end # Check if base is muted # def mute? # rubocop:disable TrivialAccessors @mute end # Sets the output padding, not allowing less than zero values. # def padding=(value) @padding = [0, value].max end # Asks something to the user and receives a response. # # If asked to limit the correct responses, you can pass in an # array of acceptable answers. If one of those is not supplied, # they will be shown a message stating that one of those answers # must be given and re-asked the question. # # If asking for sensitive information, the :echo option can be set # to false to mask user input from $stdin. # # If the required input is a path, then set the path option to # true. This will enable tab completion for file paths relative # to the current working directory on systems that support # Readline. # # ==== Example # ask("What is your name?") # # ask("What is your favorite Neopolitan flavor?", :limited_to => ["strawberry", "chocolate", "vanilla"]) # # ask("What is your password?", :echo => false) # # ask("Where should the file be saved?", :path => true) # def ask(statement, *args) options = args.last.is_a?(Hash) ? args.pop : {} color = args.first if options[:limited_to] ask_filtered(statement, color, options) else ask_simply(statement, color, options) end end # Say (print) something to the user. If the sentence ends with a whitespace # or tab character, a new line is not appended (print + flush). Otherwise # are passed straight to puts (behavior got from Highline). # # ==== Example # say("I know you knew that.") # def say(message = '', color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/)) buffer = prepare_message(message, *color) buffer << "\n" if force_new_line && !message.end_with?("\n") stdout.print(buffer) stdout.flush end # Say a status with the given color and appends the message. Since this # method is used frequently by actions, it allows nil or false to be given # in log_status, avoiding the message from being shown. If a Symbol is # given in log_status, it's used as the color. # def say_status(status, message, log_status = true) return if quiet? || log_status == false spaces = ' ' * (padding + 1) color = log_status.is_a?(Symbol) ? log_status : :green status = status.to_s.rjust(12) status = set_color status, color, true if color buffer = "#{status}#{spaces}#{message}" buffer << "\n" unless buffer.end_with?("\n") stdout.print(buffer) stdout.flush end # Make a question the to user and returns true if the user replies "y" or # "yes". # def yes?(statement, color = nil) !!(ask(statement, color, :add_to_history => false) =~ is?(:yes)) end # Make a question the to user and returns true if the user replies "n" or # "no". # def no?(statement, color = nil) !!(ask(statement, color, :add_to_history => false) =~ is?(:no)) end # Prints values in columns # # ==== Parameters # Array[String, String, ...] # def print_in_columns(array) return if array.empty? colwidth = (array.map { |el| el.to_s.size }.max || 0) + 2 array.each_with_index do |value, index| # Don't output trailing spaces when printing the last column if ((((index + 1) % (terminal_width / colwidth))).zero? && !index.zero?) || index + 1 == array.length stdout.puts value else stdout.printf("%-#{colwidth}s", value) end end end # Prints a table. # # ==== Parameters # Array[Array[String, String, ...]] # # ==== Options # indent:: Indent the first column by indent value. # colwidth:: Force the first column to colwidth spaces wide. # def print_table(array, options = {}) # rubocop:disable MethodLength return if array.empty? formats, indent, colwidth = [], options[:indent].to_i, options[:colwidth] options[:truncate] = terminal_width if options[:truncate] == true formats << "%-#{colwidth + 2}s" if colwidth start = colwidth ? 1 : 0 colcount = array.max { |a, b| a.size <=> b.size }.size maximas = [] start.upto(colcount - 1) do |index| maxima = array.map { |row| row[index] ? row[index].to_s.size : 0 }.max maximas << maxima if index == colcount - 1 # Don't output 2 trailing spaces when printing the last column formats << '%-s' else formats << "%-#{maxima + 2}s" end end formats[0] = formats[0].insert(0, ' ' * indent) formats << '%s' array.each do |row| sentence = '' row.each_with_index do |column, index| maxima = maximas[index] if column.is_a?(Numeric) if index == row.size - 1 # Don't output 2 trailing spaces when printing the last column f = "%#{maxima}s" else f = "%#{maxima}s " end else f = formats[index] end sentence << f % column.to_s end sentence = truncate(sentence, options[:truncate]) if options[:truncate] stdout.puts sentence end end # Prints a long string, word-wrapping the text to the current width of the # terminal display. Ideal for printing heredocs. # # ==== Parameters # String # # ==== Options # indent:: Indent each line of the printed paragraph by indent value. # def print_wrapped(message, options = {}) indent = options[:indent] || 0 width = terminal_width - indent paras = message.split("\n\n") paras.map! do |unwrapped| unwrapped.strip.gsub(/\n/, ' ').squeeze(' ').gsub(/.{1,#{width}}(?:\s|\Z)/) { ($& + 5.chr).gsub(/\n\005/, "\n").gsub(/\005/, "\n") } end paras.each do |para| para.split("\n").each do |line| stdout.puts line.insert(0, ' ' * indent) end stdout.puts unless para == paras.last end end # Deals with file collision and returns true if the file should be # overwritten and false otherwise. If a block is given, it uses the block # response as the content for the diff. # # ==== Parameters # destination:: the destination file to solve conflicts # block:: an optional block that returns the value to be used in diff # def file_collision(destination) # rubocop:disable MethodLength return true if @always_force options = block_given? ? '[Ynaqdh]' : '[Ynaqh]' loop do answer = ask( %[Overwrite #{destination}? (enter "h" for help) #{options}], :add_to_history => false ) case answer when is?(:yes), is?(:force), '' return true when is?(:no), is?(:skip) return false when is?(:always) return @always_force = true when is?(:quit) say 'Aborting...' fail SystemExit when is?(:diff) show_diff(destination, yield) if block_given? say 'Retrying...' else say file_collision_help end end end # This code was copied from Rake, available under MIT-LICENSE # Copyright (c) 2003, 2004 Jim Weirich def terminal_width if ENV['THOR_COLUMNS'] result = ENV['THOR_COLUMNS'].to_i else result = unix? ? dynamic_width : 80 end result < 10 ? 80 : result rescue 80 end # Called if something goes wrong during the execution. This is used by Thor # internally and should not be used inside your scripts. If something went # wrong, you can always raise an exception. If you raise a Thor::Error, it # will be rescued and wrapped in the method below. # def error(statement) stderr.puts statement end # Apply color to the given string with optional bold. Disabled in the # Thor::Shell::Basic class. # def set_color(string, *args) #:nodoc: string end protected def prepare_message(message, *color) spaces = " " * padding spaces + set_color(message.to_s, *color) end def can_display_colors? false end def lookup_color(color) return color unless color.is_a?(Symbol) self.class.const_get(color.to_s.upcase) end def stdout $stdout end def stderr $stderr end def is?(value) #:nodoc: value = value.to_s if value.size == 1 /\A#{value}\z/i else /\A(#{value}|#{value[0, 1]})\z/i end end def file_collision_help #:nodoc: <<-HELP Y - yes, overwrite n - no, do not overwrite a - all, overwrite this and all others q - quit, abort d - diff, show the differences between the old and the new h - help, show this help HELP end def show_diff(destination, content) #:nodoc: diff_cmd = ENV['THOR_DIFF'] || ENV['RAILS_DIFF'] || 'diff -u' Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp| temp.write content temp.rewind system %(#{diff_cmd} "#{destination}" "#{temp.path}") end end def quiet? #:nodoc: mute? || (base && base.options[:quiet]) end # Calculate the dynamic width of the terminal def dynamic_width @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput) end def dynamic_width_stty %x{stty size 2>/dev/null}.split[1].to_i end def dynamic_width_tput %x{tput cols 2>/dev/null}.to_i end def unix? RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i end def truncate(string, width) as_unicode do chars = string.chars.to_a if chars.length <= width chars.join else ( chars[0, width - 3].join) + '...' end end end if ''.respond_to?(:encode) def as_unicode yield end else def as_unicode old, $KCODE = $KCODE, 'U' yield ensure $KCODE = old end end def ask_simply(statement, color, options) default = options[:default] message = [statement, ("(#{default})" if default), nil].uniq.join(' ') message = prepare_message(message, color) result = Thor::LineEditor.readline(message, options) return unless result result.strip! if default && result == '' default else result end end def ask_filtered(statement, color, options) answer_set = options[:limited_to] correct_answer = nil until correct_answer answers = answer_set.join(', ') answer = ask_simply("#{statement} [#{answers}]", color, options) correct_answer = answer_set.include?(answer) ? answer : nil say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer end correct_answer end end end end color.rb000066400000000000000000000111751446701454400377300ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/shellrequire 'thor/shell/basic' class Thor module Shell # Inherit from Thor::Shell::Basic and add set_color behavior. Check # Thor::Shell::Basic to see all available methods. # class Color < Basic # Embed in a String to clear all previous ANSI sequences. CLEAR = "\e[0m" # The start of an ANSI bold sequence. BOLD = "\e[1m" # Set the terminal's foreground ANSI color to black. BLACK = "\e[30m" # Set the terminal's foreground ANSI color to red. RED = "\e[31m" # Set the terminal's foreground ANSI color to green. GREEN = "\e[32m" # Set the terminal's foreground ANSI color to yellow. YELLOW = "\e[33m" # Set the terminal's foreground ANSI color to blue. BLUE = "\e[34m" # Set the terminal's foreground ANSI color to magenta. MAGENTA = "\e[35m" # Set the terminal's foreground ANSI color to cyan. CYAN = "\e[36m" # Set the terminal's foreground ANSI color to white. WHITE = "\e[37m" # Set the terminal's background ANSI color to black. ON_BLACK = "\e[40m" # Set the terminal's background ANSI color to red. ON_RED = "\e[41m" # Set the terminal's background ANSI color to green. ON_GREEN = "\e[42m" # Set the terminal's background ANSI color to yellow. ON_YELLOW = "\e[43m" # Set the terminal's background ANSI color to blue. ON_BLUE = "\e[44m" # Set the terminal's background ANSI color to magenta. ON_MAGENTA = "\e[45m" # Set the terminal's background ANSI color to cyan. ON_CYAN = "\e[46m" # Set the terminal's background ANSI color to white. ON_WHITE = "\e[47m" # Set color by using a string or one of the defined constants. If a third # option is set to true, it also adds bold to the string. This is based # on Highline implementation and it automatically appends CLEAR to the end # of the returned String. # # Pass foreground, background and bold options to this method as # symbols. # # Example: # # set_color "Hi!", :red, :on_white, :bold # # The available colors are: # # :bold # :black # :red # :green # :yellow # :blue # :magenta # :cyan # :white # :on_black # :on_red # :on_green # :on_yellow # :on_blue # :on_magenta # :on_cyan # :on_white def set_color(string, *colors) if colors.compact.empty? || !can_display_colors? string elsif colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) } ansi_colors = colors.map { |color| lookup_color(color) } "#{ansi_colors.join}#{string}#{CLEAR}" else # The old API was `set_color(color, bold=boolean)`. We # continue to support the old API because you should never # break old APIs unnecessarily :P foreground, bold = colors foreground = self.class.const_get(foreground.to_s.upcase) if foreground.is_a?(Symbol) bold = bold ? BOLD : '' "#{bold}#{foreground}#{string}#{CLEAR}" end end protected def can_display_colors? stdout.tty? end # Overwrite show_diff to show diff with colors if Diff::LCS is # available. # def show_diff(destination, content) #:nodoc: if diff_lcs_loaded? && ENV['THOR_DIFF'].nil? && ENV['RAILS_DIFF'].nil? actual = File.binread(destination).to_s.split("\n") content = content.to_s.split("\n") Diff::LCS.sdiff(actual, content).each do |diff| output_diff_line(diff) end else super end end def output_diff_line(diff) #:nodoc: case diff.action when '-' say "- #{diff.old_element.chomp}", :red, true when '+' say "+ #{diff.new_element.chomp}", :green, true when '!' say "- #{diff.old_element.chomp}", :red, true say "+ #{diff.new_element.chomp}", :green, true else say " #{diff.old_element.chomp}", nil, true end end # Check if Diff::LCS is loaded. If it is, use it to create pretty output # for diff. # def diff_lcs_loaded? #:nodoc: return true if defined?(Diff::LCS) return @diff_lcs_loaded unless @diff_lcs_loaded.nil? @diff_lcs_loaded = begin require 'diff/lcs' true rescue LoadError false end end end end end html.rb000066400000000000000000000104521446701454400375530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thor/shellrequire 'thor/shell/basic' class Thor module Shell # Inherit from Thor::Shell::Basic and add set_color behavior. Check # Thor::Shell::Basic to see all available methods. # class HTML < Basic # The start of an HTML bold sequence. BOLD = 'font-weight: bold' # Set the terminal's foreground HTML color to black. BLACK = 'color: black' # Set the terminal's foreground HTML color to red. RED = 'color: red' # Set the terminal's foreground HTML color to green. GREEN = 'color: green' # Set the terminal's foreground HTML color to yellow. YELLOW = 'color: yellow' # Set the terminal's foreground HTML color to blue. BLUE = 'color: blue' # Set the terminal's foreground HTML color to magenta. MAGENTA = 'color: magenta' # Set the terminal's foreground HTML color to cyan. CYAN = 'color: cyan' # Set the terminal's foreground HTML color to white. WHITE = 'color: white' # Set the terminal's background HTML color to black. ON_BLACK = 'background-color: black' # Set the terminal's background HTML color to red. ON_RED = 'background-color: red' # Set the terminal's background HTML color to green. ON_GREEN = 'background-color: green' # Set the terminal's background HTML color to yellow. ON_YELLOW = 'background-color: yellow' # Set the terminal's background HTML color to blue. ON_BLUE = 'background-color: blue' # Set the terminal's background HTML color to magenta. ON_MAGENTA = 'background-color: magenta' # Set the terminal's background HTML color to cyan. ON_CYAN = 'background-color: cyan' # Set the terminal's background HTML color to white. ON_WHITE = 'background-color: white' # Set color by using a string or one of the defined constants. If a third # option is set to true, it also adds bold to the string. This is based # on Highline implementation and it automatically appends CLEAR to the end # of the returned String. # def set_color(string, *colors) if colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) } html_colors = colors.map { |color| lookup_color(color) } "#{string}" else color, bold = colors html_color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol) styles = [html_color] styles << BOLD if bold "#{string}" end end # Ask something to the user and receives a response. # # ==== Example # ask("What is your name?") # # TODO: Implement #ask for Thor::Shell::HTML def ask(statement, color = nil) fail NotImplementedError, 'Implement #ask for Thor::Shell::HTML' end protected def can_display_colors? true end # Overwrite show_diff to show diff with colors if Diff::LCS is # available. # def show_diff(destination, content) #:nodoc: if diff_lcs_loaded? && ENV['THOR_DIFF'].nil? && ENV['RAILS_DIFF'].nil? actual = File.binread(destination).to_s.split("\n") content = content.to_s.split("\n") Diff::LCS.sdiff(actual, content).each do |diff| output_diff_line(diff) end else super end end def output_diff_line(diff) #:nodoc: case diff.action when '-' say "- #{diff.old_element.chomp}", :red, true when '+' say "+ #{diff.new_element.chomp}", :green, true when '!' say "- #{diff.old_element.chomp}", :red, true say "+ #{diff.new_element.chomp}", :green, true else say " #{diff.old_element.chomp}", nil, true end end # Check if Diff::LCS is loaded. If it is, use it to create pretty output # for diff. # def diff_lcs_loaded? #:nodoc: return true if defined?(Diff::LCS) return @diff_lcs_loaded unless @diff_lcs_loaded.nil? @diff_lcs_loaded = begin require 'diff/lcs' true rescue LoadError false end end end end end util.rb000066400000000000000000000211501446701454400364520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorrequire 'rbconfig' class Thor module Sandbox #:nodoc: end # This module holds several utilities: # # 1) Methods to convert thor namespaces to constants and vice-versa. # # Thor::Util.namespace_from_thor_class(Foo::Bar::Baz) #=> "foo:bar:baz" # # 2) Loading thor files and sandboxing: # # Thor::Util.load_thorfile("~/.thor/foo") # module Util class << self # Receives a namespace and search for it in the Thor::Base subclasses. # # ==== Parameters # namespace:: The namespace to search for. # def find_by_namespace(namespace) namespace = "default#{namespace}" if namespace.empty? || namespace =~ /^:/ Thor::Base.subclasses.detect { |klass| klass.namespace == namespace } end # Receives a constant and converts it to a Thor namespace. Since Thor # commands can be added to a sandbox, this method is also responsable for # removing the sandbox namespace. # # This method should not be used in general because it's used to deal with # older versions of Thor. On current versions, if you need to get the # namespace from a class, just call namespace on it. # # ==== Parameters # constant:: The constant to be converted to the thor path. # # ==== Returns # String:: If we receive Foo::Bar::Baz it returns "foo:bar:baz" # def namespace_from_thor_class(constant) constant = constant.to_s.gsub(/^Thor::Sandbox::/, '') constant = snake_case(constant).squeeze(':') constant end # Given the contents, evaluate it inside the sandbox and returns the # namespaces defined in the sandbox. # # ==== Parameters # contents # # ==== Returns # Array[Object] # def namespaces_in_content(contents, file = __FILE__) old_constants = Thor::Base.subclasses.dup Thor::Base.subclasses.clear load_thorfile(file, contents) new_constants = Thor::Base.subclasses.dup Thor::Base.subclasses.replace(old_constants) new_constants.map! { |c| c.namespace } new_constants.compact! new_constants end # Returns the thor classes declared inside the given class. # def thor_classes_in(klass) stringfied_constants = klass.constants.map { |c| c.to_s } Thor::Base.subclasses.select do |subclass| next unless subclass.name stringfied_constants.include?(subclass.name.gsub("#{klass.name}::", '')) end end # Receives a string and convert it to snake case. SnakeCase returns snake_case. # # ==== Parameters # String # # ==== Returns # String # def snake_case(str) return str.downcase if str =~ /^[A-Z_]+$/ str.gsub(/\B[A-Z]/, '_\&').squeeze('_') =~ /_*(.*)/ $+.downcase end # Receives a string and convert it to camel case. camel_case returns CamelCase. # # ==== Parameters # String # # ==== Returns # String # def camel_case(str) return str if str !~ /_/ && str =~ /[A-Z]+.*/ str.split('_').map { |i| i.capitalize }.join end # Receives a namespace and tries to retrieve a Thor or Thor::Group 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. # # ==== Examples # # class Foo::Bar < Thor # def baz # end # end # # class Baz::Foo < Thor::Group # end # # Thor::Util.namespace_to_thor_class("foo:bar") #=> Foo::Bar, nil # will invoke default command # Thor::Util.namespace_to_thor_class("baz:foo") #=> Baz::Foo, nil # Thor::Util.namespace_to_thor_class("foo:bar:baz") #=> Foo::Bar, "baz" # # ==== Parameters # namespace # def find_class_and_command_by_namespace(namespace, fallback = true) if namespace.include?(':') # look for a namespaced command pieces = namespace.split(':') command = pieces.pop klass = Thor::Util.find_by_namespace(pieces.join(':')) end unless klass # look for a Thor::Group with the right name klass, command = Thor::Util.find_by_namespace(namespace), nil end if !klass && fallback # try a command in the default namespace command = namespace klass = Thor::Util.find_by_namespace('') end [klass, command] end alias_method :find_class_and_task_by_namespace, :find_class_and_command_by_namespace # Receives a path and load the thor file in the path. The file is evaluated # inside the sandbox to avoid namespacing conflicts. # def load_thorfile(path, content = nil, debug = false) content ||= File.binread(path) begin Thor::Sandbox.class_eval(content, path) rescue StandardError => e $stderr.puts("WARNING: unable to load thorfile #{path.inspect}: #{e.message}") if debug $stderr.puts(*e.backtrace) else $stderr.puts(e.backtrace.first) end end end def user_home # rubocop:disable MethodLength @@user_home ||= if ENV['HOME'] ENV['HOME'] elsif ENV['USERPROFILE'] ENV['USERPROFILE'] elsif ENV['HOMEDRIVE'] && ENV['HOMEPATH'] File.join(ENV['HOMEDRIVE'], ENV['HOMEPATH']) elsif ENV['APPDATA'] ENV['APPDATA'] else begin File.expand_path('~') rescue if File::ALT_SEPARATOR 'C:/' else '/' end end end end # Returns the root where thor files are located, depending on the OS. # def thor_root File.join(user_home, '.thor').gsub(/\\/, '/') end # Returns the files in the thor root. On Windows thor_root will be something # like this: # # C:\Documents and Settings\james\.thor # # If we don't #gsub the \ character, Dir.glob will fail. # def thor_root_glob files = Dir["#{escape_globs(thor_root)}/*"] files.map! do |file| File.directory?(file) ? File.join(file, 'main.thor') : file end end # Where to look for Thor files. # def globs_for(path) path = escape_globs(path) ["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/*.thor"] end # Return the path to the ruby interpreter taking into account multiple # installations and windows extensions. # def ruby_command # rubocop:disable MethodLength @ruby_command ||= begin ruby_name = RbConfig::CONFIG['ruby_install_name'] ruby = File.join(RbConfig::CONFIG['bindir'], ruby_name) ruby << RbConfig::CONFIG['EXEEXT'] # avoid using different name than ruby (on platforms supporting links) if ruby_name != 'ruby' && File.respond_to?(:readlink) begin alternate_ruby = File.join(RbConfig::CONFIG['bindir'], 'ruby') alternate_ruby << RbConfig::CONFIG['EXEEXT'] # ruby is a symlink if File.symlink? alternate_ruby linked_ruby = File.readlink alternate_ruby # symlink points to 'ruby_install_name' ruby = alternate_ruby if linked_ruby == ruby_name || linked_ruby == ruby end rescue NotImplementedError # rubocop:disable HandleExceptions # just ignore on windows end end # escape string in case path to ruby executable contain spaces. ruby.sub!(/.*\s.*/m, '"\&"') ruby end end # Returns a string that has had any glob characters escaped. # The glob characters are `* ? { } [ ]`. # # ==== Examples # # Thor::Util.escape_globs('[apps]') # => '\[apps\]' # # ==== Parameters # String # # ==== Returns # String # def escape_globs(path) path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&') end end end end version.rb000066400000000000000000000000441446701454400371610ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler/vendor/thorclass Thor VERSION = '0.18.1' end vendored_persistent.rb000066400000000000000000000001751446701454400373160ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlervendor = File.expand_path('../vendor', __FILE__) $:.unshift(vendor) unless $:.include?(vendor) require 'net/http/persistent' vendored_thor.rb000066400000000000000000000004221446701454400360650ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlerif defined?(Thor) Bundler.ui.warn "Thor has already been required. " + "This may cause Bundler to malfunction in unexpected ways." end vendor = File.expand_path('../vendor', __FILE__) $:.unshift(vendor) unless $:.include?(vendor) require 'thor' require 'thor/actions' version.rb000066400000000000000000000003331446701454400347110ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundlermodule Bundler # We're doing this because we might write tests that deal # with other versions of bundler and we are unsure how to # handle this better. VERSION = "1.5.2" unless defined?(::Bundler::VERSION) end vlad.rb000066400000000000000000000005141446701454400341530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/lib/bundler# Vlad task for Bundler. # # Just add "require 'bundler/vlad'" in your Vlad deploy.rb, and # include the vlad:bundle:install task in your vlad:deploy task. require 'bundler/deployment' include Rake::DSL if defined? Rake::DSL namespace :vlad do Bundler::Deployment.define_task(Rake::RemoteTask, :remote_task, :roles => :app) end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/man/000077500000000000000000000000001446701454400313315ustar00rootroot00000000000000bundle-config.ronn000066400000000000000000000145371446701454400346760ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manbundle-config(1) -- Set bundler configuration options ===================================================== ## SYNOPSIS `bundle config` [ []] ## DESCRIPTION This command allows you to interact with bundler's configuration system. Bundler retrieves its configuration from the local application (`app/.bundle/config`), environment variables, and the user's home directory (`~/.bundle/config`), in that order of priority. Executing `bundle config` with no parameters will print a list of all bundler configuration for the current bundle, and where that configuration was set. Executing `bundle config ` will print the value of that configuration setting, and where it was set. Executing `bundle config ` will set that configuration to the value specified for all bundles executed as the current user. The configuration will be stored in `~/.bundle/config`. If already is set, will be overridden and user will be warned. Executing `bundle config --global ` works the same as above. Executing `bundle config --local ` will set that configuration to the local application. The configuration will be stored in `app/.bundle/config`. Executing `bundle config --delete ` will delete the configuration in both local and global sources. Not compatible with --global or --local flag. Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will cause it to ignore all configuration. ## BUILD OPTIONS You can use `bundle config` to give bundler the flags to pass to the gem installer every time bundler tries to install a particular gem. A very common example, the `mysql` gem, requires Snow Leopard users to pass configuration flags to `gem install` to specify where to find the `mysql_config` executable. gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config Since the specific location of that executable can change from machine to machine, you can specify these flags on a per-machine basis. bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config After running this command, every time bundler needs to install the `mysql` gem, it will pass along the flags you specified. ## CONFIGURATION KEYS Configuration keys in bundler have two forms: the canonical form and the environment variable form. For instance, passing the `--without` flag to [bundle install(1)][bundle-install] prevents Bundler from installing certain groups specified in the Gemfile(5). Bundler persists this value in `app/.bundle/config` so that calls to `Bundler.setup` do not try to find gems from the `Gemfile` that you didn't install. Additionally, subsequent calls to [bundle install(1)][bundle-install] remember this setting and skip those groups. The canonical form of this configuration is `"without"`. To convert the canonical form to the environment variable form, capitalize it, and prepend `BUNDLE_`. The environment variable form of `"without"` is `BUNDLE_WITHOUT`. ## LIST OF AVAILABLE KEYS The following is a list of all configuration keys and their purpose. You can learn more about their operation in [bundle install(1)][bundle-install]. * `path` (`BUNDLE_PATH`): The location on disk to install gems. Defaults to `$GEM_HOME` in development and `vendor/bundler` when `--deployment` is used * `frozen` (`BUNDLE_FROZEN`): Disallow changes to the `Gemfile`. Defaults to `true` when `--deployment` is used. * `without` (`BUNDLE_WITHOUT`): A `:`-separated list of groups whose gems bundler should not install * `bin` (`BUNDLE_BIN`): Install executables from gems in the bundle to the specified directory. Defaults to `false`. * `gemfile` (`BUNDLE_GEMFILE`): The name of the file that bundler should use as the `Gemfile`. This location of this file also sets the root of the project, which is used to resolve relative paths in the `Gemfile`, among other things. By default, bundler will search up from the current working directory until it finds a `Gemfile`. * `ssl_ca_cert` (`BUNDLE_SSL_CA_CERT`): Path to a designated CA certificate file or folder containing multiple certificates for trusted CAs in PEM format. * `ssl_client_cert` (`BUNDLE_SSL_CLIENT_CERT`): Path to a designated file containing a X.509 client certificate and key in PEM format. In general, you should set these settings per-application by using the applicable flag to the [bundle install(1)][bundle-install] command. You can set them globally either via environment variables or `bundle config`, whichever is preferable for your setup. If you use both, environment variables will take preference over global settings. ## LOCAL GIT REPOS Bundler also allows you to work against a git repository locally instead of using the remote version. This can be achieved by setting up a local override: bundle config local.GEM_NAME /path/to/local/git/repository For example, in order to use a local Rack repository, a developer could call: bundle config local.rack ~/Work/git/rack Now instead of checking out the remote git repository, the local override will be used. Similar to a path source, every time the local git repository change, changes will be automatically picked up by Bundler. This means a commit in the local git repo will update the revision in the `Gemfile.lock` to the local git repo revision. This requires the same attention as git submodules. Before pushing to the remote, you need to ensure the local override was pushed, otherwise you may point to a commit that only exists in your local machine. Bundler does many checks to ensure a developer won't work with invalid references. Particularly, we force a developer to specify a branch in the `Gemfile` in order to use this feature. If the branch specified in the `Gemfile` and the current branch in the local git repository do not match, Bundler will abort. This ensures that a developer is always working against the correct branches, and prevents accidental locking to a different branch. Finally, Bundler also ensures that the current revision in the `Gemfile.lock` exists in the local git repository. By doing this, Bundler forces you to fetch the latest changes in the remotes. ## MIRRORS OF GEM REPOSITORIES Bundler supports overriding gem sources with mirrors. This allows you to configure rubygems.org as the gem source in your Gemfile while still using your mirror to fetch gems. bundle config mirror.http://rubygems.org http://rubygems-mirror.org bundle-exec.ronn000066400000000000000000000120201446701454400343360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manbundle-exec(1) -- Execute a command in the context of the bundle ================================================================ ## SYNOPSIS `bundle exec` [--keep-file-descriptors] ## DESCRIPTION This command executes the command, making all gems specified in the `Gemfile(5)` available to `require` in Ruby programs. Essentially, if you would normally have run something like `rspec spec/my_spec.rb`, and you want to use the gems specified in the `Gemfile(5)` and installed via [bundle install(1)][bundle-install], you should run `bundle exec rspec spec/my_spec.rb`. Note that `bundle exec` does not require that an executable is available on your shell's `$PATH`. ## OPTIONS * `--keep-file-descriptors`: Exec in Ruby 2.0 began discarding non-standard file descriptors. When this flag is passed, exec will revert to the 1.9 behaviour of passing all file descriptors to the new process. ## BUNDLE INSTALL --BINSTUBS If you use the `--binstubs` flag in [bundle install(1)][bundle-install], Bundler will automatically create a directory (which defaults to `app_root/bin`) containing all of the executables available from gems in the bundle. After using `--binstubs`, `bin/rspec spec/my_spec.rb` is identical to `bundle exec rspec spec/my_spec.rb`. ## ENVIRONMENT MODIFICATIONS `bundle exec` makes a number of changes to the shell environment, then executes the command you specify in full. * make sure that it's still possible to shell out to `bundle` from inside a command invoked by `bundle exec` (using `$BUNDLE_BIN_PATH`) * put the directory containing executables (like `rails`, `rspec`, `rackup`) for your bundle on `$PATH` * make sure that if bundler is invoked in the subshell, it uses the same `Gemfile` (by setting `BUNDLE_GEMFILE`) * add `-rbundler/setup` to `$RUBYOPT`, which makes sure that Ruby programs invoked in the subshell can see the gems in the bundle It also modifies Rubygems: * disallow loading additional gems not in the bundle * modify the `gem` method to be a no-op if a gem matching the requirements is in the bundle, and to raise a `Gem::LoadError` if it's not * Define `Gem.refresh` to be a no-op, since the source index is always frozen when using bundler, and to prevent gems from the system leaking into the environment * Override `Gem.bin_path` to use the gems in the bundle, making system executables work * Add all gems in the bundle into Gem.loaded_specs ### Shelling out Any Ruby code that opens a subshell (like `system`, backticks, or `%x{}`) will automatically use the current Bundler environment. If you need to shell out to a Ruby command that is not part of your current bundle, use the `with_clean_env` method with a block. Any subshells created inside the block will be given the environment present before Bundler was activated. For example, Homebrew commands run Ruby, but don't work inside a bundle: Bundler.with_clean_env do `brew install wget` end Using `with_clean_env` is also necessary if you are shelling out to a different bundle. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use `with_clean_env`. Bundler.with_clean_env do Dir.chdir "/other/bundler/project" do `bundle exec ./script` end end Bundler provides convenience helpers that wrap `system` and `exec`, and they can be used like this: Bundler.clean_system('brew install wget') Bundler.clean_exec('brew install wget') ## RUBYGEMS PLUGINS At present, the Rubygems plugin system requires all files named `rubygems_plugin.rb` on the load path of _any_ installed gem when any Ruby code requires `rubygems.rb`. This includes executables installed into the system, like `rails`, `rackup`, and `rspec`. Since Rubygems plugins can contain arbitrary Ruby code, they commonly end up activating themselves or their dependencies. For instance, the `gemcutter 0.5` gem depended on `json_pure`. If you had that version of gemcutter installed (even if you _also_ had a newer version without this problem), Rubygems would activate `gemcutter 0.5` and `json_pure `. If your Gemfile(5) also contained `json_pure` (or a gem with a dependency on `json_pure`), the latest version on your system might conflict with the version in your Gemfile(5), or the snapshot version in your `Gemfile.lock`. If this happens, bundler will say: You have already activated json_pure 1.4.6 but your Gemfile requires json_pure 1.4.3. Consider using bundle exec. In this situation, you almost certainly want to remove the underlying gem with the problematic gem plugin. In general, the authors of these plugins (in this case, the `gemcutter` gem) have released newer versions that are more careful in their plugins. You can find a list of all the gems containing gem plugins by running ruby -rubygems -e "puts Gem.find_files('rubygems_plugin.rb')" At the very least, you should remove all but the newest version of each gem plugin, and also remove all gem plugins that you aren't using (`gem uninstall gem_name`). bundle-install.ronn000066400000000000000000000341351446701454400350730ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manbundle-install(1) -- Install the dependencies specified in your Gemfile ======================================================================= ## SYNOPSIS `bundle install` [--gemfile=GEMFILE] [--path PATH] [--system] [--without=GROUP1[ GROUP2...]] [--local] [--deployment] [--binstubs[=DIRECTORY]] [--standalone[=GROUP1[ GROUP2...]]] [--trust-policy=POLICY] [--jobs=SIZE] [--retry=TRIES] [--no-cache] [--quiet] ## DESCRIPTION Install the gems specified in your Gemfile(5). If this is the first time you run bundle install (and a `Gemfile.lock` does not exist), bundler will fetch all remote sources, resolve dependencies and install all needed gems. If a `Gemfile.lock` does exist, and you have not updated your Gemfile(5), bundler will fetch all remote sources, but use the dependencies specified in the `Gemfile.lock` instead of resolving dependencies. If a `Gemfile.lock` does exist, and you have updated your Gemfile(5), bundler will use the dependencies in the `Gemfile.lock` for all gems that you did not update, but will re-resolve the dependencies of gems that you did update. You can find more information about this update process below under [CONSERVATIVE UPDATING][]. ## OPTIONS * `--gemfile=`: The location of the Gemfile(5) that bundler should use. This defaults to a gemfile in the current working directory. In general, bundler will assume that the location of the Gemfile(5) is also the project root, and will look for the `Gemfile.lock` and `vendor/cache` relative to it. * `--path=`: The location to install the gems in the bundle to. This defaults to Rubygems' gem home, which is also the default location where `gem install` installs gems. This means that, by default, gems installed without a `--path` setting will show up in `gem list`. This setting is a [remembered option][REMEMBERED OPTIONS]. * `--system`: Installs the gems in the bundle to the system location. This overrides any previous [remembered][REMEMBERED OPTIONS] use of `--path`. * `--without=`: A space-separated list of groups to skip installing. This is a [remembered option][REMEMBERED OPTIONS]. * `--local`: Do not attempt to connect to `rubygems.org`, instead using just the gems already present in Rubygems' cache or in `vendor/cache`. Note that if a more appropriate platform-specific gem exists on `rubygems.org`, it will not be found. * `--deployment`: Switches bundler's defaults into [deployment mode][DEPLOYMENT MODE]. Do not use this flag on development machines. * `--binstubs[=]`: Create a directory (defaults to `bin`) containing an executable that runs in the context of the bundle. For instance, if the `rails` gem comes with a `rails` executable, this flag will create a `bin/rails` executable that ensures that all dependencies used come from the bundled gems. * `--shebang ruby-install-name`: Uses the ruby executable (usually `ruby`) provided to execute the scripts created with --binstubs. For instance, if you use --binstubs with `--shebang jruby`, all executables will be created to use jruby instead. * `--standalone[=]`: Make a bundle that can work without Ruby Gems or Bundler at runtime. It takes a space separated list of groups to install. It creates a `bundle` directory and installs the bundle there. It also generates a `bundle/bundler/setup.rb` file to replace Bundler's own setup. * `--trust-policy=[]`: Apply the Rubygems security policy named , where policy is one of HighSecurity, MediumSecurity, LowSecurity, or NoSecurity. For more detail, see the Rubygems signing documentation, linked below in [SEE ALSO][]. * `--jobs=[]`: Install gems parallely by starting number of parallel workers. * `--retry[ times. * `--no-cache`: Do not update the cache in `vendor/cache` with the newly bundled gems. This does not remove any existing cached gems, only stops the newly bundled gems from being cached during the install. * `--quiet`: Do not print progress information to stdout. Instead, communicate the success of the install operation via exit status code. ## DEPLOYMENT MODE Bundler's defaults are optimized for development. To switch to defaults optimized for deployment, use the `--deployment` flag. Do not activate deployment mode on development machines, as it will cause in an error when the Gemfile is modified. 1. A `Gemfile.lock` is required. To ensure that the same versions of the gems you developed with and tested with are also used in deployments, a `Gemfile.lock` is required. This is mainly to ensure that you remember to check your `Gemfile.lock` into version control. 2. The `Gemfile.lock` must be up to date In development, you can modify your Gemfile(5) and re-run `bundle install` to [conservatively update][CONSERVATIVE UPDATING] your `Gemfile.lock` snapshot. In deployment, your `Gemfile.lock` should be up-to-date with changes made in your Gemfile(5). 3. Gems are installed to `vendor/bundle` not your default system location In development, it's convenient to share the gems used in your application with other applications and other scripts run on the system. In deployment, isolation is a more important default. In addition, the user deploying the application may not have permission to install gems to the system, or the web server may not have permission to read them. As a result, `bundle install --deployment` installs gems to the `vendor/bundle` directory in the application. This may be overridden using the `--path` option. ## SUDO USAGE By default, bundler installs gems to the same location as `gem install`. In some cases, that location may not be writable by your Unix user. In that case, bundler will stage everything in a temporary directory, then ask you for your `sudo` password in order to copy the gems into their system location. From your perspective, this is identical to installing them gems directly into the system. You should never use `sudo bundle install`. This is because several other steps in `bundle install` must be performed as the current user: * Updating your `Gemfile.lock` * Updating your `vendor/cache`, if necessary * Checking out private git repositories using your user's SSH keys Of these three, the first two could theoretically be performed by `chown`ing the resulting files to `$SUDO_USER`. The third, however, can only be performed by actually invoking the `git` command as the current user. Therefore, git gems are downloaded and installed into `~/.bundle` rather than $GEM_HOME or $BUNDLE_PATH. As a result, you should run `bundle install` as the current user, and bundler will ask for your password if it is needed to put the gems into their final location. ## INSTALLING GROUPS By default, `bundle install` will install all gems in all groups in your Gemfile(5), except those declared for a different platform. However, you can explicitly tell bundler to skip installing certain groups with the `--without` option. This option takes a space-separated list of groups. While the `--without` option will skip _installing_ the gems in the specified groups, it will still _download_ those gems and use them to resolve the dependencies of every gem in your Gemfile(5). This is so that installing a different set of groups on another machine (such as a production server) will not change the gems and versions that you have already developed and tested against. `Bundler offers a rock-solid guarantee that the third-party code you are running in development and testing is also the third-party code you are running in production. You can choose to exclude some of that code in different environments, but you will never be caught flat-footed by different versions of third-party code being used in different environments.` For a simple illustration, consider the following Gemfile(5): source "https://rubygems.org" gem "sinatra" group :production do gem "rack-perftools-profiler" end In this case, `sinatra` depends on any version of Rack (`>= 1.0`, while `rack-perftools-profiler` depends on 1.x (`~> 1.0`). When you run `bundle install --without production` in development, we look at the dependencies of `rack-perftools-profiler` as well. That way, you do not spend all your time developing against Rack 2.0, using new APIs unavailable in Rack 1.x, only to have bundler switch to Rack 1.2 when the `production` group _is_ used. This should not cause any problems in practice, because we do not attempt to `install` the gems in the excluded groups, and only evaluate as part of the dependency resolution process. This also means that you cannot include different versions of the same gem in different groups, because doing so would result in different sets of dependencies used in development and production. Because of the vagaries of the dependency resolution process, this usually affects more than just the gems you list in your Gemfile(5), and can (surprisingly) radically change the gems you are using. ## REMEMBERED OPTIONS Some options (marked above in the [OPTIONS][] section) are remembered between calls to `bundle install`, and by the Bundler runtime. For instance, if you run `bundle install --without test`, a subsequent call to `bundle install` that does not include a `--without` flag will remember your previous choice. In addition, a call to `Bundler.setup` will not attempt to make the gems in those groups available on the Ruby load path, as they were not installed. The settings that are remembered are: * `--deployment`: At runtime, this remembered setting will also result in Bundler raising an exception if the `Gemfile.lock` is out of date. * `--path`: Subsequent calls to `bundle install` will install gems to the directory originally passed to `--path`. The Bundler runtime will look for gems in that location. You can revert this option by running `bundle install --system`. * `--binstubs`: Bundler will update the executables every subsequent call to `bundle install`. * `--without`: As described above, Bundler will skip the gems specified by `--without` in subsequent calls to `bundle install`. The Bundler runtime will also not try to make the gems in the skipped groups available. ## THE GEMFILE.LOCK When you run `bundle install`, Bundler will persist the full names and versions of all gems that you used (including dependencies of the gems specified in the Gemfile(5)) into a file called `Gemfile.lock`. Bundler uses this file in all subsequent calls to `bundle install`, which guarantees that you always use the same exact code, even as your application moves across machines. Because of the way dependency resolution works, even a seemingly small change (for instance, an update to a point-release of a dependency of a gem in your Gemfile(5)) can result in radically different gems being needed to satisfy all dependencies. As a result, you `SHOULD` check your `Gemfile.lock` into version control. If you do not, every machine that checks out your repository (including your production server) will resolve all dependencies again, which will result in different versions of third-party code being used if `any` of the gems in the Gemfile(5) or any of their dependencies have been updated. ## CONSERVATIVE UPDATING When you make a change to the Gemfile(5) and then run `bundle install`, Bundler will update only the gems that you modified. In other words, if a gem that you `did not modify` worked before you called `bundle install`, it will continue to use the exact same versions of all dependencies as it used before the update. Let's take a look at an example. Here's your original Gemfile(5): source "https://rubygems.org" gem "actionpack", "2.3.8" gem "activemerchant" In this case, both `actionpack` and `activemerchant` depend on `activesupport`. The `actionpack` gem depends on `activesupport 2.3.8` and `rack ~> 1.1.0`, while the `activemerchant` gem depends on `activesupport >= 2.3.2`, `braintree >= 2.0.0`, and `builder >= 2.0.0`. When the dependencies are first resolved, Bundler will select `activesupport 2.3.8`, which satisfies the requirements of both gems in your Gemfile(5). Next, you modify your Gemfile(5) to: source "https://rubygems.org" gem "actionpack", "3.0.0.rc" gem "activemerchant" The `actionpack 3.0.0.rc` gem has a number of new dependencies, and updates the `activesupport` dependency to `= 3.0.0.rc` and the `rack` dependency to `~> 1.2.1`. When you run `bundle install`, Bundler notices that you changed the `actionpack` gem, but not the `activemerchant` gem. It evaluates the gems currently being used to satisfy its requirements: * `activesupport 2.3.8`: also used to satisfy a dependency in `activemerchant`, which is not being updated * `rack ~> 1.1.0`: not currently being used to satisfy another dependency Because you did not explicitly ask to update `activemerchant`, you would not expect it to suddenly stop working after updating `actionpack`. However, satisfying the new `activesupport 3.0.0.rc` dependency of actionpack requires updating one of its dependencies. Even though `activemerchant` declares a very loose dependency that theoretically matches `activesupport 3.0.0.rc`, bundler treats gems in your Gemfile(5) that have not changed as an atomic unit together with their dependencies. In this case, the `activemerchant` dependency is treated as `activemerchant 1.7.1 + activesupport 2.3.8`, so `bundle install` will report that it cannot update `actionpack`. To explicitly update `actionpack`, including its dependencies which other gems in the Gemfile(5) still depend on, run `bundle update actionpack` (see `bundle update(1)`). `Summary`: In general, after making a change to the Gemfile(5) , you should first try to run `bundle install`, which will guarantee that no other gems in the Gemfile(5) are impacted by the change. If that does not work, run [bundle update(1)][bundle-update]. ## SEE ALSO * Gem install docs: http://docs.rubygems.org/read/chapter/2 * Rubygems signing docs: http://docs.rubygems.org/read/chapter/21 bundle-package.ronn000066400000000000000000000044711446701454400350200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manbundle-package(1) -- Package your needed `.gem` files into your application =========================================================================== ## SYNOPSIS `bundle package` ## DESCRIPTION Copy all of the `.gem` files needed to run the application into the `vendor/cache` directory. In the future, when running [bundle install(1)][bundle-install], use the gems in the cache in preference to the ones on `rubygems.org`. ## GIT AND PATH GEMS Since Bundler 1.2, the `bundle package` command can also package `:git` and `:path` dependencies besides .gem files. This needs to be explicitly enabled via the `--all` option. Once used, the `--all` option will be remembered. ## REMOTE FETCHING By default, if you simply run [bundle install(1)][bundle-install] after running [bundle package(1)][bundle-package], bundler will still connect to `rubygems.org` to check whether a platform-specific gem exists for any of the gems in `vendor/cache`. For instance, consider this Gemfile(5): source "https://rubygems.org" gem "nokogiri" If you run `bundle package` under C Ruby, bundler will retrieve the version of `nokogiri` for the `"ruby"` platform. If you deploy to JRuby and run `bundle install`, bundler is forced to check to see whether a `"java"` platformed `nokogiri` exists. Even though the `nokogiri` gem for the Ruby platform is _technically_ acceptable on JRuby, it actually has a C extension that does not run on JRuby. As a result, bundler will, by default, still connect to `rubygems.org` to check whether it has a version of one of your gems more specific to your platform. This problem is also not just limited to the `"java"` platform. A similar (common) problem can happen when developing on Windows and deploying to Linux, or even when developing on OSX and deploying to Linux. If you know for sure that the gems packaged in `vendor/cache` are appropriate for the platform you are on, you can run `bundle install --local` to skip checking for more appropriate gems, and just use the ones in `vendor/cache`. One way to be sure that you have the right platformed versions of all your gems is to run `bundle package` on an identical machine and check in the gems. For instance, you can run `bundle package` on an identical staging box during your staging process, and check in the `vendor/cache` before deploying to production. bundle-platform.ronn000066400000000000000000000022021446701454400352370ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manbundle-platform(1) -- Displays platform compatibility information ================================================================= ## SYNOPSIS `bundle platform` [--ruby] ## DESCRIPTION `platform` will display information from your Gemfile, Gemfile.lock, and Ruby VM about your platform. For instance, using this Gemfile(5): source "https://rubygems.org" ruby "1.9.3" gem "rack" If you run `bundle platform` on Ruby 1.9.3, it will display the following output: Your platform is: x86_64-linux Your app has gems that work on these platforms: * ruby Your Gemfile specifies a Ruby version requirement: * ruby 1.9.3 Your current platform satisfies the Ruby version requirement. `platform` will list all the platforms in your `Gemfile.lock` as well as the `ruby` directive if applicable from your Gemfile(5). It will also let you know if the `ruby` directive requirement has been met. If `ruby` directive doesn't match the running Ruby VM, it will tell you what part does not. ## OPTIONS * `--ruby`: It will just display the ruby directive information, so you don't have to parse it from the Gemfile(5). bundle-update.ronn000066400000000000000000000147001446701454400347030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manbundle-update(1) -- Update your gems to the latest available versions ===================================================================== ## SYNOPSIS `bundle update` <*gems> [--source=NAME] ## DESCRIPTION Update the gems specified (all gems, if none are specified), ignoring the previously installed gems specified in the `Gemfile.lock`. In general, you should use [bundle install(1)][bundle-install] to install the same exact gems and versions across machines. You would use `bundle update` to explicitly update the version of a gem. ## OPTIONS * `--source=`: The name of a `:git` or `:path` source used in the Gemfile(5). For instance, with a `:git` source of `http://github.com/rails/rails.git`, you would call `bundle update --source rails` ## UPDATING ALL GEMS If you run `bundle update` with no parameters, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources. Consider the following Gemfile(5): source "https://rubygems.org" gem "rails", "3.0.0.rc" gem "nokogiri" When you run [bundle install(1)][bundle-install] the first time, bundler will resolve all of the dependencies, all the way down, and install what you need: Fetching source index for https://rubygems.org/ Installing rake (10.0.2) Installing abstract (1.0.0) Installing activesupport (3.0.0.rc) Installing builder (2.1.2) Installing i18n (0.4.1) Installing activemodel (3.0.0.rc) Installing erubis (2.6.6) Installing rack (1.2.1) Installing rack-mount (0.6.9) Installing rack-test (0.5.4) Installing tzinfo (0.3.22) Installing actionpack (3.0.0.rc) Installing mime-types (1.16) Installing polyglot (0.3.1) Installing treetop (1.4.8) Installing mail (2.2.5) Installing actionmailer (3.0.0.rc) Installing arel (0.4.0) Installing activerecord (3.0.0.rc) Installing activeresource (3.0.0.rc) Installing bundler (1.0.0.rc.3) Installing nokogiri (1.4.3.1) with native extensions Installing thor (0.14.0) Installing railties (3.0.0.rc) Installing rails (3.0.0.rc) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. As you can see, even though you have just two gems in the Gemfile(5), your application actually needs 25 different gems in order to run. Bundler remembers the exact versions it installed in `Gemfile.lock`. The next time you run [bundle install(1)][bundle-install], bundler skips the dependency resolution and installs the same gems as it installed last time. After checking in the `Gemfile.lock` into version control and cloning it on another machine, running [bundle install(1)][bundle-install] will _still_ install the gems that you installed last time. You don't need to worry that a new release of `erubis` or `mail` changes the gems you use. However, from time to time, you might want to update the gems you are using to the newest versions that still match the gems in your Gemfile(5). To do this, run `bundle update`, which will ignore the `Gemfile.lock`, and resolve all the dependencies again. Keep in mind that this process can result in a significantly different set of the 25 gems, based on the requirements of new gems that the gem authors released since the last time you ran `bundle update`. ## UPDATING A LIST OF GEMS Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the gems that you specified locked to the versions in the `Gemfile.lock`. For instance, in the scenario above, imagine that `nokogiri` releases version `1.4.4`, and you want to update it _without_ updating Rails and all of its dependencies. To do this, run `bundle update nokogiri`. Bundler will update `nokogiri` and any of its dependencies, but leave alone Rails and its dependencies. ## OVERLAPPING DEPENDENCIES Sometimes, multiple gems declared in your Gemfile(5) are satisfied by the same second-level dependency. For instance, consider the case of `thin` and `rack-perftools-profiler`. source "https://rubygems.org" gem "thin" gem "rack-perftools-profiler" The `thin` gem depends on `rack >= 1.0`, while `rack-perftools-profiler` depends on `rack ~> 1.0`. If you run bundle install, you get: Fetching source index for https://rubygems.org/ Installing daemons (1.1.0) Installing eventmachine (0.12.10) with native extensions Installing open4 (1.0.1) Installing perftools.rb (0.4.7) with native extensions Installing rack (1.2.1) Installing rack-perftools_profiler (0.0.2) Installing thin (1.2.7) with native extensions Using bundler (1.0.0.rc.3) In this case, the two gems have their own set of dependencies, but they share `rack` in common. If you run `bundle update thin`, bundler will update `daemons`, `eventmachine` and `rack`, which are dependencies of `thin`, but not `open4` or `perftools.rb`, which are dependencies of `rack-perftools_profiler`. Note that `bundle update thin` will update `rack` even though it's _also_ a dependency of `rack-perftools_profiler`. `In short`, when you update a gem using `bundle update`, bundler will update all dependencies of that gem, including those that are also dependencies of another gem. In this scenario, updating the `thin` version manually in the Gemfile(5), and then running [bundle install(1)][bundle-install] will only update `daemons` and `eventmachine`, but not `rack`. For more information, see the `CONSERVATIVE UPDATING` section of [bundle install(1)][bundle-install]. ## RECOMMENDED WORKFLOW In general, when working with an application managed with bundler, you should use the following workflow: * After you create your Gemfile(5) for the first time, run $ bundle install * Check the resulting `Gemfile.lock` into version control $ git add Gemfile.lock * When checking out this repository on another development machine, run $ bundle install * When checking out this repository on a deployment machine, run $ bundle install --deployment * After changing the Gemfile(5) to reflect a new or update dependency, run $ bundle install * Make sure to check the updated `Gemfile.lock` into version control $ git add Gemfile.lock * If [bundle install(1)][bundle-install] reports a conflict, manually update the specific gems that you changed in the Gemfile(5) $ bundle update rails thin * If you want to update all the gems to the latest possible versions that still match the gems listed in the Gemfile(5), run $ bundle update bundle.ronn000066400000000000000000000043311446701454400334220ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manbundle(1) -- Ruby Dependency Management ======================================= ## SYNOPSIS `bundle` COMMAND [--no-color] [--verbose] [ARGS] ## DESCRIPTION Bundler manages an `application's dependencies` through its entire life across many machines systematically and repeatably. See [the bundler website](http://bundler.io) for information on getting started, and Gemfile(5) for more information on the `Gemfile` format. ## OPTIONS * `--no-color`: Prints all output without color * `--verbose`: Prints out additional logging information ## BUNDLE COMMANDS We divide `bundle` subcommands into primary commands and utilities. ## PRIMARY COMMANDS * [bundle install(1)][bundle-install]: Install the gems specified by the `Gemfile` or `Gemfile.lock` * [bundle update(1)][bundle-update]: Update dependencies to their latest versions * [bundle package(1)][bundle-package]: Package the .gem files required by your application into the `vendor/cache` directory * [bundle exec(1)][bundle-exec]: Execute a script in the context of the current bundle * [bundle config(1)][bundle-config]: Specify and read configuration options for bundler * `bundle help(1)`: Displays detailed help for each subcommand ## UTILITIES * `bundle check(1)`: Determine whether the requirements for your application are installed and available to bundler * `bundle list(1)`: Show all of the gems in the current bundle * `bundle show(1)`: Show the source location of a particular gem in the bundle * `bundle outdated(1)`: Show all of the outdated gems in the current bundle * `bundle console(1)`: Start an IRB session in the context of the current bundle * `bundle open(1)`: Open an installed gem in the editor * `bundle viz(1)`: Generate a visual representation of your dependencies * `bundle init(1)`: Generate a simple `Gemfile`, placed in the current directory * `bundle gem(1)`: Create a simple gem, suitable for development with bundler * [bundle platform(1)][bundle-platform]: Displays platform compatibility information * `bundle clean(1)`: Cleans up unused gems in your bundler directory ## OBSOLETE These commands are obsolete and should no longer be used * `bundle lock(1)` * `bundle unlock(1)` * `bundle cache(1)` gemfile.5.ronn000066400000000000000000000311571446701454400337320ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/manGemfile(5) -- A format for describing gem dependencies for Ruby programs ======================================================================== ## SYNOPSIS A `Gemfile` describes the gem dependencies required to execute associated Ruby code. Place the `Gemfile` in the root of the directory containing the associated code. For instance, in a Rails application, place the `Gemfile` in the same directory as the `Rakefile`. ## SYNTAX A `Gemfile` is evaluated as Ruby code, in a context which makes available a number of methods used to describe the gem requirements. ## SOURCES (#source) At the top of the `Gemfile`, add one line for each `Rubygems` source that might contain the gems listed in the `Gemfile`. source "https://rubygems.org" source "http://gems.github.com" Each of these _source_s `MUST` be a valid Rubygems repository. Sources are checked for gems following the heuristics described in [SOURCE PRIORITY][]. ## RUBY (#ruby) If your application requires a specific Ruby version or engine, specify your requirements using the `ruby` method, with the following arguments. All parameters are `OPTIONAL` unless otherwise specified. ### VERSION (required) The version of Ruby that your application requires. If your application requires an alternate Ruby engine, such as JRuby or Rubinius, this should be the Ruby version that the engine is compatible with. ruby "1.9.3" ### ENGINE (:engine) Each application _may_ specify a Ruby engine. If an engine is specified, an engine version _must_ also be specified. ### ENGINE VERSION (:engine_version) Each application _may_ specify a Ruby engine version. If an engine version is specified, an engine _must_ also be specified. If the engine is "ruby" the engine version specified _must_ match the Ruby version. ruby "1.8.7", :engine => "jruby", :engine_version => "1.6.7" ### PATCHLEVEL (:patchlevel) Each application _may_ specify a Ruby patchlevel. ruby "2.0.0", :patchlevel => "247" ## GEMS (#gem) Specify gem requirements using the `gem` method, with the following arguments. All parameters are `OPTIONAL` unless otherwise specified. ### NAME (required) For each gem requirement, list a single _gem_ line. gem "nokogiri" ### VERSION Each _gem_ `MAY` have one or more version specifiers. gem "nokogiri", ">= 1.4.2" gem "RedCloth", ">= 4.1.0", "< 4.2.0" ### REQUIRE AS (:require) Each _gem_ `MAY` specify files that should be used when autorequiring via `Bundler.require`. You may pass an array with multiple files or `true` if file you want `required` has same name as _gem_ or `false` to prevent any file from being autorequired. gem "redis", :require => ["redis/connection/hiredis", "redis"] gem "webmock", :require => false gem "debugger", :require => true The argument defaults to the name of the gem. For example, these are identical: gem "nokogiri" gem "nokogiri", :require => "nokogiri" gem "nokogiri", :require => true ### GROUPS (:group or :groups) Each _gem_ `MAY` specify membership in one or more groups. Any _gem_ that does not specify membership in any group is placed in the `default` group. gem "rspec", :group => :test gem "wirble", :groups => [:development, :test] The Bundler runtime allows its two main methods, `Bundler.setup` and `Bundler.require`, to limit their impact to particular groups. # setup adds gems to Ruby's load path Bundler.setup # defaults to all groups require "bundler/setup" # same as Bundler.setup Bundler.setup(:default) # only set up the _default_ group Bundler.setup(:test) # only set up the _test_ group (but `not` _default_) Bundler.setup(:default, :test) # set up the _default_ and _test_ groups, but no others # require requires all of the gems in the specified groups Bundler.require # defaults to just the _default_ group Bundler.require(:default) # identical Bundler.require(:default, :test) # requires the _default_ and _test_ groups Bundler.require(:test) # requires just the _test_ group The Bundler CLI allows you to specify a list of groups whose gems `bundle install` should not install with the `--without` option. To specify multiple groups to ignore, specify a list of groups separated by spaces. bundle install --without test bundle install --without development test After running `bundle install --without test`, bundler will remember that you excluded the test group in the last installation. The next time you run `bundle install`, without any `--without option`, bundler will recall it. Also, calling `Bundler.setup` with no parameters, or calling `require "bundler/setup"` will setup all groups except for the ones you excluded via `--without` (since they are obviously not available). Note that on `bundle install`, bundler downloads and evaluates all gems, in order to create a single canonical list of all of the required gems and their dependencies. This means that you cannot list different versions of the same gems in different groups. For more details, see [Understanding Bundler](http://bundler.io/rationale.html). ### PLATFORMS (:platforms) If a gem should only be used in a particular platform or set of platforms, you can specify them. Platforms are essentially identical to groups, except that you do not need to use the `--without` install-time flag to exclude groups of gems for other platforms. There are a number of `Gemfile` platforms: * `ruby`: C Ruby (MRI) or Rubinius, but `NOT` Windows * `ruby_18`: _ruby_ `AND` version 1.8 * `ruby_19`: _ruby_ `AND` version 1.9 * `ruby_20`: _ruby_ `AND` version 2.0 * `ruby_21`: _ruby_ `AND` version 2.1 * `mri`: Same as _ruby_, but not Rubinius * `mri_18`: _mri_ `AND` version 1.8 * `mri_19`: _mri_ `AND` version 1.9 * `mri_20`: _mri_ `AND` version 2.0 * `mri_21`: _mri_ `AND` version 2.1 * `rbx`: Same as _ruby_, but only Rubinius (not MRI) * `jruby`: JRuby * `mswin`: Windows * `mingw`: Windows 32 bit 'mingw32' platform (aka RubyInstaller) * `mingw_18`: _mingw_ `AND` version 1.8 * `mingw_19`: _mingw_ `AND` version 1.9 * `mingw_20`: _mingw_ `AND` version 2.0 * `mingw_21`: _mingw_ `AND` version 2.1 * `x64_mingw`: Windows 64 bit 'mingw32' platform (aka RubyInstaller x64) * `x64_mingw_20`: _x64_mingw_ `AND` version 2.0 * `x64_mingw_21`: _x64_mingw_ `AND` version 2.1 As with groups, you can specify one or more platforms: gem "weakling", :platforms => :jruby gem "ruby-debug", :platforms => :mri_18 gem "nokogiri", :platforms => [:mri_18, :jruby] All operations involving groups (`bundle install`, `Bundler.setup`, `Bundler.require`) behave exactly the same as if any groups not matching the current platform were explicitly excluded. ### GIT (:git) If necessary, you can specify that a gem is located at a particular git repository. The repository can be public (`http://github.com/rails/rails.git`) or private (`git@github.com:rails/rails.git`). If the repository is private, the user that you use to run `bundle install` `MUST` have the appropriate keys available in their `$HOME/.ssh`. Git repositories are specified using the `:git` parameter. The `group`, `platforms`, and `require` options are available and behave exactly the same as they would for a normal gem. gem "rails", :git => "git://github.com/rails/rails.git" A git repository `SHOULD` have at least one file, at the root of the directory containing the gem, with the extension `.gemspec`. This file `MUST` contain a valid gem specification, as expected by the `gem build` command. If a git repository does not have a `.gemspec`, bundler will attempt to create one, but it will not contain any dependencies, executables, or C extension compilation instructions. As a result, it may fail to properly integrate into your application. If a git repository does have a `.gemspec` for the gem you attached it to, a version specifier, if provided, means that the git repository is only valid if the `.gemspec` specifies a version matching the version specifier. If not, bundler will print a warning. gem "rails", "2.3.8", :git => "git://github.com/rails/rails.git" # bundle install will fail, because the .gemspec in the rails # repository's master branch specifies version 3.0.0 If a git repository does `not` have a `.gemspec` for the gem you attached it to, a version specifier `MUST` be provided. Bundler will use this version in the simple `.gemspec` it creates. Git repositories support a number of additional options. * `branch`, `tag`, and `ref`: You `MUST` only specify at most one of these options. The default is `:branch => "master"` * `submodules`: Specify `:submodules => true` to cause bundler to expand any submodules included in the git repository If a git repository contains multiple `.gemspecs`, each `.gemspec` represents a gem located at the same place in the file system as the `.gemspec`. |~rails [git root] | |-rails.gemspec [rails gem located here] |~actionpack | |-actionpack.gemspec [actionpack gem located here] |~activesupport | |-activesupport.gemspec [activesupport gem located here] |... To install a gem located in a git repository, bundler changes to the directory containing the gemspec, runs `gem build name.gemspec` and then installs the resulting gem. The `gem build` command, which comes standard with Rubygems, evaluates the `.gemspec` in the context of the directory in which it is located. ### GITHUB (:github) If the git repository you want to use is hosted on GitHub and is public, you can use the :github shorthand to specify just the github username and repository name (without the trailing ".git"), separated by a slash. If both the username and repository name are the same, you can omit one. gem "rails", :github => "rails/rails" gem "rails", :github => "rails" Are both equivalent to gem "rails", :git => "git://github.com/rails/rails.git" In addition, if you wish to choose a specific branch: gem "rails", :github => "rails/rails", :branch => "branch_name" ### PATH (:path) You can specify that a gem is located in a particular location on the file system. Relative paths are resolved relative to the directory containing the `Gemfile`. Similar to the semantics of the `:git` option, the `:path` option requires that the directory in question either contains a `.gemspec` for the gem, or that you specify an explicit version that bundler should use. Unlike `:git`, bundler does not compile C extensions for gems specified as paths. gem "rails", :path => "vendor/rails" ## BLOCK FORM OF GIT, PATH, GROUP and PLATFORMS The `:git`, `:path`, `:group`, and `:platforms` options may be applied to a group of gems by using block form. git "git://github.com/rails/rails.git" do gem "activesupport" gem "actionpack" end platforms :ruby do gem "ruby-debug" gem "sqlite3" end group :development do gem "wirble" gem "faker" end In the case of the `git` block form, the `:ref`, `:branch`, `:tag`, and `:submodules` options may be passed to the `git` method, and all gems in the block will inherit those options. ## GEMSPEC (#gemspec) If you wish to use Bundler to help install dependencies for a gem while it is being developed, use the `gemspec` method to pull in the dependencies listed in the `.gemspec` file. The `gemspec` method adds any runtime dependencies as gem requirements in the default group. It also adds development dependencies as gem requirements in the `development` group. Finally, it adds a gem requirement on your project (`:path => '.'`). In conjunction with `Bundler.setup`, this allows you to require project files in your test code as you would if the project were installed as a gem; you need not manipulate the load path manually or require project files via relative paths. The `gemspec` method supports optional `:path`, `:name`, and `:development_group` options, which control where bundler looks for the `.gemspec`, what named `.gemspec` it uses (if more than one is present), and which group development dependencies are included in. ## SOURCE PRIORITY When attempting to locate a gem to satisfy a gem requirement, bundler uses the following priority order: 1. The source explicitly attached to the gem (using `:path` or `:git`) 2. For implicit gems (dependencies of explicit gems), any git or path repository otherwise declared. This results in bundler prioritizing the ActiveSupport gem from the Rails git repository over ones from `rubygems.org` 3. The sources specified via `source`, searching each source in your `Gemfile` from last added to first added. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/man/index.txt000066400000000000000000000003611446701454400332010ustar00rootroot00000000000000Gemfile(5) gemfile.5 bundle-install bundle-install.1 bundle-update bundle-update.1 bundle-package bundle-package.1 bundle-exec bundle-exec.1 bundle-config bundle-config.1 bundle-platform bundle-platform.1 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/000077500000000000000000000000001446701454400315105ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundler/000077500000000000000000000000001446701454400331435ustar00rootroot00000000000000bundler_spec.rb000066400000000000000000000041401446701454400360550ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundler# encoding: utf-8 require 'spec_helper' require 'bundler' describe Bundler do describe "#load_gemspec_uncached" do before do @gemspec = tmp("test.gemspec") @gemspec.open('wb') do |f| f.write strip_whitespace(<<-GEMSPEC) --- {:!00 ao=gu\g1= 7~f GEMSPEC end end describe "on Ruby 1.8", :ruby => "1.8" do it "should catch YAML syntax errors" do expect { Bundler.load_gemspec_uncached(@gemspec) }. to raise_error(Bundler::GemspecError) end end context "on Ruby 1.9", :ruby => "1.9" do context "with Syck as YAML::Engine" do it "raises a GemspecError after YAML load throws ArgumentError" do orig_yamler, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'syck' expect { Bundler.load_gemspec_uncached(@gemspec) }. to raise_error(Bundler::GemspecError) YAML::ENGINE.yamler = orig_yamler end end context "with Psych as YAML::Engine" do it "raises a GemspecError after YAML load throws Psych::SyntaxError" do orig_yamler, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'psych' expect { Bundler.load_gemspec_uncached(@gemspec) }. to raise_error(Bundler::GemspecError) YAML::ENGINE.yamler = orig_yamler end end end it "can load a gemspec with unicode characters with default ruby encoding" do # spec_helper forces the external encoding to UTF-8 but that's not the # ruby default. encoding = nil if defined?(Encoding) encoding = Encoding.default_external Encoding.default_external = "ASCII" end File.open(tmp("test.gemspec"), "wb") do |file| file.puts <<-G.gsub(/^\s+/, '') # -*- encoding: utf-8 -*- Gem::Specification.new do |gem| gem.author = "André the Giant" end G end gemspec = Bundler.load_gemspec_uncached(tmp("test.gemspec")) expect(gemspec.author).to eq("André the Giant") Encoding.default_external = encoding if defined?(Encoding) end end end cli_rspec.rb000066400000000000000000000006131446701454400353540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire 'spec_helper' describe "bundle executable" do it "returns non-zero exit status when passed unrecognized options" do bundle '--invalid_argument', :exitstatus => true expect(exitstatus).to_not be_zero end it "returns non-zero exit status when passed unrecognized task" do bundle 'unrecognized-tast', :exitstatus => true expect(exitstatus).to_not be_zero end end definition_spec.rb000066400000000000000000000011371446701454400365550ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire 'spec_helper' require 'bundler/definition' describe Bundler::Definition do before do Bundler.stub(:settings){ Bundler::Settings.new(".") } end describe "#lock" do context "when it's not possible to write to the file" do subject{ Bundler::Definition.new(nil, [], [], []) } before do File.should_receive(:open).with("Gemfile.lock", "wb"). and_raise(Errno::EACCES) end it "raises an InstallError with explanation" do expect{ subject.lock("Gemfile.lock") }. to raise_error(Bundler::InstallError) end end end end dsl_spec.rb000066400000000000000000000040651446701454400352120ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire 'spec_helper' describe Bundler::Dsl do before do @rubygems = double("rubygems") Bundler::Source::Rubygems.stub(:new){ @rubygems } end describe "#_normalize_options" do it "converts :github to :git" do subject.gem("sparks", :github => "indirect/sparks") github_uri = "git://github.com/indirect/sparks.git" expect(subject.dependencies.first.source.uri).to eq(github_uri) end it "converts numeric :gist to :git" do subject.gem("not-really-a-gem", :gist => 2859988) github_uri = "https://gist.github.com/2859988.git" expect(subject.dependencies.first.source.uri).to eq(github_uri) end it "converts :gist to :git" do subject.gem("not-really-a-gem", :gist => "2859988") github_uri = "https://gist.github.com/2859988.git" expect(subject.dependencies.first.source.uri).to eq(github_uri) end it "converts 'rails' to 'rails/rails'" do subject.gem("rails", :github => "rails") github_uri = "git://github.com/rails/rails.git" expect(subject.dependencies.first.source.uri).to eq(github_uri) end end describe "#method_missing" do it "raises an error for unknown DSL methods" do Bundler.should_receive(:read_file).with("Gemfile").and_return("unknown") error_msg = "Undefined local variable or method `unknown'" \ " for Gemfile\\s+from Gemfile:1" expect { subject.eval_gemfile("Gemfile") }. to raise_error(Bundler::GemfileError, Regexp.new(error_msg)) end end describe "#eval_gemfile" do it "handles syntax errors with a useful message" do Bundler.should_receive(:read_file).with("Gemfile").and_return("}") expect { subject.eval_gemfile("Gemfile") }. to raise_error(Bundler::GemfileError, /Gemfile syntax error/) end end describe "syntax errors" do it "will raise a Bundler::GemfileError" do gemfile "gem 'foo', :path => /unquoted/string/syntax/error" expect { Bundler::Dsl.evaluate(bundled_app("Gemfile"), nil, true) }. to raise_error(Bundler::GemfileError) end end end friendly_errors_spec.rb000066400000000000000000000005121446701454400376310ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire "spec_helper" require "bundler" require "bundler/friendly_errors" describe Bundler, "friendly errors" do it "rescues Thor::AmbiguousTaskError and raises SystemExit" do expect { Bundler.with_friendly_errors do raise Thor::AmbiguousTaskError.new("") end }.to raise_error(SystemExit) end end gem_helper_spec.rb000066400000000000000000000140241446701454400365330ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire "spec_helper" require 'rake' require 'bundler/gem_helper' describe "Bundler::GemHelper tasks" do context "determining gemspec" do it "interpolates the name when there is only one gemspec" do bundle 'gem test' app = bundled_app("test") helper = Bundler::GemHelper.new(app.to_s) expect(helper.gemspec.name).to eq('test') end it "interpolates the name for a hidden gemspec" do bundle 'gem test' app = bundled_app("test") FileUtils.mv app.join('test.gemspec'), app.join('.gemspec') helper = Bundler::GemHelper.new(app.to_s) expect(helper.gemspec.name).to eq('test') end it "should fail when there is no gemspec" do bundle 'gem test' app = bundled_app("test") FileUtils.rm(File.join(app.to_s, 'test.gemspec')) expect { Bundler::GemHelper.new(app.to_s) }.to raise_error(/Unable to determine name/) end it "should fail when there are two gemspecs and the name isn't specified" do bundle 'gem test' app = bundled_app("test") File.open(File.join(app.to_s, 'test2.gemspec'), 'w') {|f| f << ''} expect { Bundler::GemHelper.new(app.to_s) }.to raise_error(/Unable to determine name/) end it "handles namespaces and converting to CamelCase" do bundle 'gem test-foo_bar' lib = bundled_app('test-foo_bar').join('lib/test/foo_bar.rb').read expect(lib).to include("module Test") expect(lib).to include("module FooBar") end end context "gem management" do def mock_confirm_message(message) Bundler.ui.should_receive(:confirm).with(message) end def mock_build_message mock_confirm_message "test 0.0.1 built to pkg/test-0.0.1.gem." end before(:each) do bundle 'gem test' @app = bundled_app("test") @gemspec = File.read("#{@app.to_s}/test.gemspec") File.open("#{@app.to_s}/test.gemspec", 'w'){|f| f << @gemspec.gsub('TODO: ', '') } @helper = Bundler::GemHelper.new(@app.to_s) end it "uses a shell UI for output" do expect(Bundler.ui).to be_a(Bundler::UI::Shell) end describe "install_tasks" do before(:each) do @saved, Rake.application = Rake.application, Rake::Application.new end after(:each) do Rake.application = @saved end it "defines Rake tasks" do names = %w[build install release] names.each { |name| expect { Rake.application[name] }.to raise_error(/Don't know how to build task/) } @helper.install names.each { |name| expect { Rake.application[name] }.not_to raise_error expect(Rake.application[name]).to be_instance_of Rake::Task } end it "provides a way to access the gemspec object" do @helper.install expect(Bundler::GemHelper.gemspec.name).to eq('test') end end describe "build" do it "builds" do mock_build_message @helper.build_gem expect(bundled_app('test/pkg/test-0.0.1.gem')).to exist end it "raises an appropriate error when the build fails" do # break the gemspec by adding back the TODOs... File.open("#{@app.to_s}/test.gemspec", 'w'){|f| f << @gemspec } expect { @helper.build_gem }.to raise_error(/TODO/) end end describe "install" do it "installs" do mock_build_message mock_confirm_message "test (0.0.1) installed." @helper.install_gem expect(bundled_app('test/pkg/test-0.0.1.gem')).to exist expect(%x{gem list}).to include("test (0.0.1)") end it "raises an appropriate error when the install fails" do @helper.should_receive(:build_gem) do # write an invalid gem file, so we can simulate install failure... FileUtils.mkdir_p(File.join(@app.to_s, 'pkg')) path = "#{@app.to_s}/pkg/test-0.0.1.gem" File.open(path, 'w'){|f| f << "not actually a gem"} path end expect { @helper.install_gem }.to raise_error end end describe "release" do before do Dir.chdir(@app) do `git init` `git config user.email "you@example.com"` `git config user.name "name"` end end it "shouldn't push if there are unstaged files" do expect { @helper.release_gem }.to raise_error(/files that need to be committed/) end it "shouldn't push if there are uncommitted files" do %x{cd test; git add .} expect { @helper.release_gem }.to raise_error(/files that need to be committed/) end it "raises an appropriate error if there is no git remote" do Bundler.ui.stub(:confirm => nil, :error => nil) # silence messages Dir.chdir(gem_repo1) { `git init --bare` } Dir.chdir(@app) { `git commit -a -m "initial commit"` } expect { @helper.release_gem }.to raise_error end it "releases" do mock_build_message mock_confirm_message(/Tagged v0.0.1/) mock_confirm_message("Pushed git commits and tags.") @helper.should_receive(:rubygem_push).with(bundled_app('test/pkg/test-0.0.1.gem').to_s) Dir.chdir(gem_repo1) { `git init --bare` } Dir.chdir(@app) do `git remote add origin file://#{gem_repo1}` `git commit -a -m "initial commit"` sys_exec("git push origin master", true) `git commit -a -m "another commit"` end @helper.release_gem end it "releases even if tag already exists" do mock_build_message mock_confirm_message("Tag v0.0.1 has already been created.") @helper.should_receive(:rubygem_push).with(bundled_app('test/pkg/test-0.0.1.gem').to_s) Dir.chdir(gem_repo1) { `git init --bare` } Dir.chdir(@app) { `git init` `git config user.email "you@example.com"` `git config user.name "name"` `git commit -a -m "another commit"` `git tag -a -m \"Version 0.0.1\" v0.0.1` } @helper.release_gem end end end end psyched_yaml_spec.rb000066400000000000000000000003271446701454400371060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire 'spec_helper' require 'bundler/psyched_yaml' describe Bundler::YamlSyntaxError do it "is raised on YAML parse errors" do expect{ YAML.parse "{foo" }.to raise_error(Bundler::YamlSyntaxError) end end retry_spec.rb000066400000000000000000000025241446701454400355730ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire 'spec_helper' describe "bundle retry" do it "return successful result if no errors" do attempts = 0 result = Bundler::Retry.new(nil, nil, 3).attempt do attempts += 1 :success end expect(result).to eq(:success) expect(attempts).to eq(1) end it "defaults to retrying twice" do attempts = 0 expect { Bundler::Retry.new(nil).attempt do attempts += 1 raise "nope" end }.to raise_error expect(attempts).to eq(3) end it "returns the first valid result" do jobs = [Proc.new{ raise "foo" }, Proc.new{ :bar }, Proc.new{ raise "foo" }] attempts = 0 result = Bundler::Retry.new(nil, nil, 3).attempt do attempts += 1 job = jobs.shift job.call end expect(result).to eq(:bar) expect(attempts).to eq(2) end it "raises the last error" do error = Bundler::GemfileNotFound attempts = 0 expect { Bundler::Retry.new(nil, nil, 3).attempt do attempts += 1 raise error end }.to raise_error(error) expect(attempts).to eq(4) end it "raises exceptions" do error = Bundler::GemfileNotFound attempts = 0 expect { Bundler::Retry.new(nil, error).attempt do attempts += 1 raise error end }.to raise_error(error) expect(attempts).to eq(1) end end safe_catch_spec.rb000066400000000000000000000020261446701454400365030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundler# encoding: utf-8 require 'spec_helper' require 'bundler' require "bundler/safe_catch" require "bundler/current_ruby" class RecursiveTmpResolver include Bundler::SafeCatch end describe Bundler::SafeCatch do let(:resolver) { RecursiveTmpResolver.new() } it "should use safe_catch on jruby" do if Bundler.current_ruby.jruby? Bundler::SafeCatch::Internal.should_receive(:catch).and_call_original Bundler::SafeCatch::Internal.should_receive(:throw).and_call_original retval = resolver.safe_catch(:resolve) do resolver.safe_throw(:resolve, "good bye world") end expect(retval).to eq("good bye world") end end it "should use regular catch/throw on MRI" do if Bundler.current_ruby.mri? Bundler::SafeCatch::Internal.should_not_receive(:catch) Bundler::SafeCatch::Internal.should_not_receive(:throw) retval = resolver.safe_catch(:resolve) do resolver.safe_throw(:resolve, "good bye world") end expect(retval).to eq("good bye world") end end end source_spec.rb000066400000000000000000000011451446701454400357240ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/bundlerrequire 'spec_helper' describe Bundler::Source::Rubygems do before do Bundler.stub(:root){ Pathname.new("root") } end describe "caches" do it "should include Bundler.app_cache" do expect(subject.caches).to include(Bundler.app_cache) end it "should include GEM_PATH entries" do Gem.path.each do |path| expect(subject.caches).to include(File.expand_path("#{path}/cache")) end end it "should be an array of strings or pathnames" do subject.caches.each do |cache| expect([String, Pathname]).to include(cache.class) end end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/cache/000077500000000000000000000000001446701454400325535ustar00rootroot00000000000000gems_spec.rb000066400000000000000000000136371446701454400350000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/cacherequire "spec_helper" describe "bundle cache" do describe "when there are only gemsources" do before :each do gemfile <<-G gem 'rack' G system_gems "rack-1.0.0" bundle :cache end it "copies the .gem file to vendor/cache" do expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist end it "uses the cache as a source when installing gems" do build_gem "omg", :path => bundled_app('vendor/cache') install_gemfile <<-G source "file://#{gem_repo1}" gem "omg" G should_be_installed "omg 1.0.0" end it "uses the cache as a source when installing gems with --local" do system_gems [] bundle "install --local" should_be_installed("rack 1.0.0") end it "does not reinstall gems from the cache if they exist on the system" do build_gem "rack", "1.0.0", :path => bundled_app('vendor/cache') do |s| s.write "lib/rack.rb", "RACK = 'FAIL'" end install_gemfile <<-G gem "rack" G should_be_installed("rack 1.0.0") end it "does not reinstall gems from the cache if they exist in the bundle" do system_gems "rack-1.0.0" gemfile <<-G gem "rack" G build_gem "rack", "1.0.0", :path => bundled_app('vendor/cache') do |s| s.write "lib/rack.rb", "RACK = 'FAIL'" end bundle "install --local" should_be_installed("rack 1.0.0") end it "creates a lockfile" do cache_gems "rack-1.0.0" gemfile <<-G gem "rack" G bundle "cache" expect(bundled_app("Gemfile.lock")).to exist end end describe "when there are also git sources" do before do build_git "foo" system_gems "rack-1.0.0" install_gemfile <<-G source "file://#{gem_repo1}" git "#{lib_path("foo-1.0")}" do gem 'foo' end gem 'rack' G end it "still works" do bundle :cache system_gems [] bundle "install --local" should_be_installed("rack 1.0.0", "foo 1.0") end it "should not explode if the lockfile is not present" do FileUtils.rm(bundled_app("Gemfile.lock")) bundle :cache expect(bundled_app("Gemfile.lock")).to exist end end describe "when previously cached" do before :each do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack" gem "actionpack" G bundle :cache expect(cached_gem("rack-1.0.0")).to exist expect(cached_gem("actionpack-2.3.2")).to exist expect(cached_gem("activesupport-2.3.2")).to exist end it "re-caches during install" do cached_gem("rack-1.0.0").rmtree bundle :install expect(out).to include("Updating files in vendor/cache") expect(cached_gem("rack-1.0.0")).to exist end it "adds and removes when gems are updated" do update_repo2 bundle 'update' expect(cached_gem("rack-1.2")).to exist expect(cached_gem("rack-1.0.0")).not_to exist end it "adds new gems and dependencies" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rails" G expect(cached_gem("rails-2.3.2")).to exist expect(cached_gem("activerecord-2.3.2")).to exist end it "removes .gems for removed gems and dependencies" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rack" G expect(cached_gem("rack-1.0.0")).to exist expect(cached_gem("actionpack-2.3.2")).not_to exist expect(cached_gem("activesupport-2.3.2")).not_to exist end it "removes .gems when gem changes to git source" do build_git "rack" install_gemfile <<-G source "file://#{gem_repo2}" gem "rack", :git => "#{lib_path("rack-1.0")}" gem "actionpack" G expect(cached_gem("rack-1.0.0")).not_to exist expect(cached_gem("actionpack-2.3.2")).to exist expect(cached_gem("activesupport-2.3.2")).to exist end it "doesn't remove gems that are for another platform" do simulate_platform "java" do install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G bundle :cache expect(cached_gem("platform_specific-1.0-java")).to exist end simulate_new_machine install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G expect(cached_gem("platform_specific-1.0-#{Gem::Platform.local}")).to exist expect(cached_gem("platform_specific-1.0-java")).to exist end it "doesn't remove gems with mismatched :rubygems_version or :date" do cached_gem("rack-1.0.0").rmtree build_gem "rack", "1.0.0", :path => bundled_app('vendor/cache'), :rubygems_version => "1.3.2" simulate_new_machine bundle :install expect(cached_gem("rack-1.0.0")).to exist end it "handles directories and non .gem files in the cache" do bundled_app("vendor/cache/foo").mkdir File.open(bundled_app("vendor/cache/bar"), 'w'){|f| f.write("not a gem") } bundle :cache end it "does not say that it is removing gems when it isn't actually doing so" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "cache" bundle "install" expect(out).not_to match(/removing/i) end it "does not warn about all if it doesn't have any git/path dependency" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "cache" expect(out).not_to match(/\-\-all/) end it "should install gems with the name bundler in them (that aren't bundler)" do build_gem "foo-bundler", "1.0", :path => bundled_app('vendor/cache') install_gemfile <<-G gem "foo-bundler" G should_be_installed "foo-bundler 1.0" end end end git_spec.rb000066400000000000000000000122551446701454400346230ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/cacherequire "spec_helper" describe "git base name" do it "base_name should strip private repo uris" do source = Bundler::Source::Git.new("uri" => "git@github.com:bundler.git") expect(source.send(:base_name)).to eq("bundler") end it "base_name should strip network share paths" do source = Bundler::Source::Git.new("uri" => "//MachineName/ShareFolder") expect(source.send(:base_name)).to eq("ShareFolder") end end %w(cache package).each do |cmd| describe "bundle #{cmd} with git" do it "copies repository to vendor cache and uses it" do git = build_git "foo" ref = git.ref_for("master", 11) install_gemfile <<-G gem "foo", :git => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.git")).not_to exist expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.bundlecache")).to be_file FileUtils.rm_rf lib_path("foo-1.0") should_be_installed "foo 1.0" end it "copies repository to vendor cache and uses it even when installed with bundle --path" do git = build_git "foo" ref = git.ref_for("master", 11) install_gemfile <<-G gem "foo", :git => '#{lib_path("foo-1.0")}' G bundle "install --path vendor/bundle" bundle "#{cmd} --all" expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.git")).not_to exist FileUtils.rm_rf lib_path("foo-1.0") should_be_installed "foo 1.0" end it "runs twice without exploding" do build_git "foo" install_gemfile <<-G gem "foo", :git => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" bundle "#{cmd} --all" expect(err).to eq("") FileUtils.rm_rf lib_path("foo-1.0") should_be_installed "foo 1.0" end it "tracks updates" do git = build_git "foo" old_ref = git.ref_for("master", 11) install_gemfile <<-G gem "foo", :git => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" update_git "foo" do |s| s.write "lib/foo.rb", "puts :CACHE" end ref = git.ref_for("master", 11) expect(ref).not_to eq(old_ref) bundle "update" bundle "#{cmd} --all" expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist expect(bundled_app("vendor/cache/foo-1.0-#{old_ref}")).not_to exist FileUtils.rm_rf lib_path("foo-1.0") run "require 'foo'" expect(out).to eq("CACHE") end it "uses the local repository to generate the cache" do git = build_git "foo" ref = git.ref_for("master", 11) gemfile <<-G gem "foo", :git => '#{lib_path("foo-invalid")}', :branch => :master G bundle %|config local.foo #{lib_path('foo-1.0')}| bundle "install" bundle "#{cmd} --all" expect(bundled_app("vendor/cache/foo-invalid-#{ref}")).to exist # Updating the local still uses the local. update_git "foo" do |s| s.write "lib/foo.rb", "puts :LOCAL" end run "require 'foo'" expect(out).to eq("LOCAL") end it "copies repository to vendor cache, including submodules" do build_git "submodule", "1.0" git = build_git "has_submodule", "1.0" do |s| s.add_dependency "submodule" end Dir.chdir(lib_path('has_submodule-1.0')) do `git submodule add #{lib_path('submodule-1.0')} submodule-1.0` `git commit -m "submodulator"` end install_gemfile <<-G git "#{lib_path('has_submodule-1.0')}", :submodules => true do gem "has_submodule" end G ref = git.ref_for("master", 11) bundle "#{cmd} --all" expect(bundled_app("vendor/cache/has_submodule-1.0-#{ref}")).to exist expect(bundled_app("vendor/cache/has_submodule-1.0-#{ref}/submodule-1.0")).to exist should_be_installed "has_submodule 1.0" end it "displays warning message when detecting git repo in Gemfile" do build_git "foo" install_gemfile <<-G gem "foo", :git => '#{lib_path("foo-1.0")}' G bundle "#{cmd}" expect(out).to include("Your Gemfile contains path and git dependencies.") end it "does not display warning message if cache_all is set in bundle config" do build_git "foo" install_gemfile <<-G gem "foo", :git => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" bundle "#{cmd}" expect(out).not_to include("Your Gemfile contains path and git dependencies.") end it "caches pre-evaluated gemspecs" do git = build_git "foo" # Insert a gemspec method that shells out spec_lines = lib_path("foo-1.0/foo.gemspec").read.split("\n") spec_lines.insert(-2, "s.description = `echo bob`") update_git("foo"){ |s| s.write "foo.gemspec", spec_lines.join("\n") } install_gemfile <<-G gem "foo", :git => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" ref = git.ref_for("master", 11) gemspec = bundled_app("vendor/cache/foo-1.0-#{ref}/foo.gemspec").read expect(gemspec).to_not match("`echo bob`") end end end path_spec.rb000066400000000000000000000054651446701454400350010ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/cacherequire "spec_helper" %w(cache package).each do |cmd| describe "bundle #{cmd} with path" do it "is no-op when the path is within the bundle" do build_lib "foo", :path => bundled_app("lib/foo") install_gemfile <<-G gem "foo", :path => '#{bundled_app("lib/foo")}' G bundle "#{cmd} --all" expect(bundled_app("vendor/cache/foo-1.0")).not_to exist should_be_installed "foo 1.0" end it "copies when the path is outside the bundle " do build_lib "foo" install_gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" expect(bundled_app("vendor/cache/foo-1.0")).to exist expect(bundled_app("vendor/cache/foo-1.0/.bundlecache")).to be_file FileUtils.rm_rf lib_path("foo-1.0") should_be_installed "foo 1.0" end it "updates the path on each cache" do build_lib "foo" install_gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" build_lib "foo" do |s| s.write "lib/foo.rb", "puts :CACHE" end bundle "#{cmd} --all" expect(bundled_app("vendor/cache/foo-1.0")).to exist FileUtils.rm_rf lib_path("foo-1.0") run "require 'foo'" expect(out).to eq("CACHE") end it "removes stale entries cache" do build_lib "foo" install_gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" install_gemfile <<-G gem "bar", :path => '#{lib_path("bar-1.0")}' G bundle "#{cmd} --all" expect(bundled_app("vendor/cache/bar-1.0")).not_to exist end it "raises a warning without --all" do build_lib "foo" install_gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' G bundle cmd expect(out).to match(/please pass the \-\-all flag/) expect(bundled_app("vendor/cache/foo-1.0")).not_to exist end it "stores the given flag" do build_lib "foo" install_gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" build_lib "bar" install_gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' gem "bar", :path => '#{lib_path("bar-1.0")}' G bundle cmd expect(bundled_app("vendor/cache/bar-1.0")).to exist end it "can rewind chosen configuration" do build_lib "foo" install_gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' G bundle "#{cmd} --all" build_lib "baz" gemfile <<-G gem "foo", :path => '#{lib_path("foo-1.0")}' gem "baz", :path => '#{lib_path("baz-1.0")}' G bundle "#{cmd} --no-all" expect(bundled_app("vendor/cache/baz-1.0")).not_to exist end end end platform_spec.rb000066400000000000000000000026711446701454400356650ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/cacherequire "spec_helper" describe "bundle cache with multiple platforms" do before :each do gemfile <<-G source "file://#{gem_repo1}" platforms :ruby, :ruby_18, :ruby_19, :ruby_20, :ruby_21 do gem "rack", "1.0.0" end platforms :jruby do gem "activesupport", "2.3.5" end platforms :mri, :mri_18, :mri_19, :mri_20, :mri_21 do gem "activerecord", "2.3.2" end G lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) activesupport (2.3.5) activerecord (2.3.2) PLATFORMS ruby java DEPENDENCIES rack (1.0.0) activesupport (2.3.5) activerecord (2.3.2) G cache_gems "rack-1.0.0", "activesupport-2.3.5", "activerecord-2.3.2" end it "ensures that bundle install does not delete gems for other platforms" do bundle "install" expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist expect(bundled_app("vendor/cache/activesupport-2.3.5.gem")).to exist expect(bundled_app("vendor/cache/activerecord-2.3.2.gem")).to exist end it "ensures that bundle update does not delete gems for other platforms" do bundle "update" expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist expect(bundled_app("vendor/cache/activesupport-2.3.5.gem")).to exist expect(bundled_app("vendor/cache/activerecord-2.3.2.gem")).to exist end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commands/000077500000000000000000000000001446701454400333115ustar00rootroot00000000000000binstubs_spec.rb000066400000000000000000000121561446701454400364270ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle binstubs " do context "when the gem exists in the lockfile" do it "sets up the binstub" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "binstubs rack" expect(bundled_app("bin/rackup")).to exist end it "does not install other binstubs" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rails" G bundle "binstubs rails" expect(bundled_app("bin/rackup")).not_to exist expect(bundled_app("bin/rails")).to exist end it "does install multiple binstubs" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rails" G bundle "binstubs rails rack" expect(bundled_app("bin/rackup")).to exist expect(bundled_app("bin/rails")).to exist end it "displays an error when used without any gem" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "binstubs", :exitstatus => true expect(exitstatus).to eq(1) expect(out).to eq("`bundle binstubs` needs at least one gem to run.") end it "does not bundle the bundler binary" do install_gemfile <<-G source "file://#{gem_repo1}" G bundle "binstubs bundler" expect(bundled_app("bin/bundle")).not_to exist expect(out).to eq("Sorry, Bundler can only be run via Rubygems.") end it "installs binstubs from git gems" do FileUtils.mkdir_p(lib_path("foo/bin")) FileUtils.touch(lib_path("foo/bin/foo")) build_git "foo", "1.0", :path => lib_path("foo") do |s| s.executables = %w(foo) end install_gemfile <<-G gem "foo", :git => "#{lib_path('foo')}" G bundle "binstubs foo" expect(bundled_app("bin/foo")).to exist end it "installs binstubs from path gems" do FileUtils.mkdir_p(lib_path("foo/bin")) FileUtils.touch(lib_path("foo/bin/foo")) build_lib "foo" , "1.0", :path => lib_path("foo") do |s| s.executables = %w(foo) end install_gemfile <<-G gem "foo", :path => "#{lib_path('foo')}" G bundle "binstubs foo" expect(bundled_app("bin/foo")).to exist end it "sets correct permissions for binstubs" do with_umask(0002) do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "binstubs rack" binary = bundled_app("bin/rackup") expect(File.stat(binary).mode.to_s(8)).to eq("100775") end end end context "--path" do it "sets the binstubs dir" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "binstubs rack --path exec" expect(bundled_app("exec/rackup")).to exist end it "setting is saved for bundle install" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rails" G bundle "binstubs rack --path exec" bundle :install expect(bundled_app("exec/rails")).to exist end end context "when the bin already exists" do it "doesn't overwrite and warns" do FileUtils.mkdir_p(bundled_app("bin")) File.open(bundled_app("bin/rackup"), 'wb') do |file| file.print "OMG" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "binstubs rack" expect(bundled_app("bin/rackup")).to exist expect(File.read(bundled_app("bin/rackup"))).to eq("OMG") expect(out).to include("Skipped rackup") expect(out).to include("overwrite skipped stubs, use --force") end context "when using --force" do it "overwrites the binstub" do FileUtils.mkdir_p(bundled_app("bin")) File.open(bundled_app("bin/rackup"), 'wb') do |file| file.print "OMG" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "binstubs rack --force" expect(bundled_app("bin/rackup")).to exist expect(File.read(bundled_app("bin/rackup"))).not_to eq("OMG") end end end context "when the gem has no bins" do it "suggests child gems if they have bins" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama" G bundle "binstubs rack-obama" expect(out).to include('rack-obama has no executables') expect(out).to include('rack has: rackup') end it "works if child gems don't have bins" do install_gemfile <<-G source "file://#{gem_repo1}" gem "actionpack" G bundle "binstubs actionpack" expect(out).to include('no executables for the gem actionpack') end it "works if the gem has development dependencies" do install_gemfile <<-G source "file://#{gem_repo1}" gem "with_development_dependency" G bundle "binstubs with_development_dependency" expect(out).to include('no executables for the gem with_development_dependency') end end end check_spec.rb000066400000000000000000000145701446701454400356550ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle check" do it "returns success when the Gemfile is satisfied" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G bundle :check, :exitstatus => true expect(@exitstatus).to eq(0) expect(out).to eq("The Gemfile's dependencies are satisfied") end it "works with the --gemfile flag when not in the directory" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G Dir.chdir tmp bundle "check --gemfile bundled_app/Gemfile" expect(out).to eq("The Gemfile's dependencies are satisfied") end it "creates a Gemfile.lock by default if one does not exist" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G FileUtils.rm("Gemfile.lock") bundle "check" expect(bundled_app("Gemfile.lock")).to exist end it "does not create a Gemfile.lock if --dry-run was passed" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G FileUtils.rm("Gemfile.lock") bundle "check --dry-run" expect(bundled_app("Gemfile.lock")).not_to exist end it "prints a generic error if the missing gems are unresolvable" do system_gems ["rails-2.3.2"] gemfile <<-G source "file://#{gem_repo1}" gem "rails" G bundle :check expect(out).to include("Bundler can't satisfy your Gemfile's dependencies.") end it "prints a generic error if a Gemfile.lock does not exist and a toplevel dependency does not exist" do gemfile <<-G source "file://#{gem_repo1}" gem "rails" G bundle :check, :exitstatus => true expect(@exitstatus).to be > 0 expect(out).to include("Bundler can't satisfy your Gemfile's dependencies.") end it "prints a generic message if you changed your lockfile" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'rails' G install_gemfile <<-G source "file://#{gem_repo1}" gem 'rails_fail' G gemfile <<-G source "file://#{gem_repo1}" gem "rails" gem "rails_fail" G bundle :check expect(out).to include("Bundler can't satisfy your Gemfile's dependencies.") end it "remembers --without option from install" do gemfile <<-G source "file://#{gem_repo1}" group :foo do gem "rack" end G bundle "install --without foo" bundle "check", :exitstatus => true expect(@exitstatus).to eq(0) expect(out).to include("The Gemfile's dependencies are satisfied") end it "ensures that gems are actually installed and not just cached" do gemfile <<-G source "file://#{gem_repo1}" gem "rack", :group => :foo G bundle "install --without foo" gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "check", :exitstatus => true expect(out).to include("* rack (1.0.0)") expect(@exitstatus).to eq(1) end it "ignores missing gems restricted to other platforms" do system_gems "rack-1.0.0" gemfile <<-G source "file://#{gem_repo1}" gem "rack" platforms :#{not_local_tag} do gem "activesupport" end G lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: activesupport (2.3.5) rack (1.0.0) PLATFORMS #{local} #{not_local} DEPENDENCIES rack activesupport G bundle :check expect(out).to eq("The Gemfile's dependencies are satisfied") end it "works with env conditionals" do system_gems "rack-1.0.0" gemfile <<-G source "file://#{gem_repo1}" gem "rack" env :NOT_GOING_TO_BE_SET do gem "activesupport" end G lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: activesupport (2.3.5) rack (1.0.0) PLATFORMS #{local} #{not_local} DEPENDENCIES rack activesupport G bundle :check expect(out).to eq("The Gemfile's dependencies are satisfied") end it "outputs an error when the default Gemfile is not found" do bundle :check, :exitstatus => true expect(@exitstatus).to eq(10) expect(out).to include("Could not locate Gemfile") end it "does not output fatal error message" do bundle :check, :exitstatus => true expect(@exitstatus).to eq(10) expect(out).not_to include("Unfortunately, a fatal error has occurred. ") end it "should not crash when called multiple times on a new machine" do gemfile <<-G gem 'rails', '3.0.0.beta3' gem 'paperclip', :git => 'git://github.com/thoughtbot/paperclip.git' G simulate_new_machine bundle "check" last_out = out 3.times do |i| bundle :check expect(out).to eq(last_out) expect(err).to be_empty end end it "fails when there's no lock file and frozen is set" do gemfile <<-G source "file://#{gem_repo1}" gem "foo" G bundle "install" bundle "install --deployment" FileUtils.rm(bundled_app("Gemfile.lock")) bundle :check, :exitstatus => true expect(exitstatus).not_to eq(0) end context "--path" do before do gemfile <<-G source "file://#{gem_repo1}" gem "rails" G bundle "install --path vendor/bundle" FileUtils.rm_rf(bundled_app(".bundle")) end it "returns success" do bundle "check --path vendor/bundle", :exitstatus => true expect(@exitstatus).to eq(0) expect(out).to eq("The Gemfile's dependencies are satisfied") end it "should write to .bundle/config" do bundle "check --path vendor/bundle", :exitstatus => true bundle "check", :exitstatus => true expect(@exitstatus).to eq(0) end end describe "when locked" do before :each do system_gems "rack-1.0.0" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0" G end it "returns success when the Gemfile is satisfied" do bundle :install bundle :check, :exitstatus => true expect(@exitstatus).to eq(0) expect(out).to eq("The Gemfile's dependencies are satisfied") end it "shows what is missing with the current Gemfile if it is not satisfied" do simulate_new_machine bundle :check expect(out).to match(/The following gems are missing/) expect(out).to include("* rack (1.0") end end end clean_spec.rb000066400000000000000000000314051446701454400356560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle clean" do def should_have_gems(*gems) gems.each do |g| expect(vendored_gems("gems/#{g}")).to exist expect(vendored_gems("specifications/#{g}.gemspec")).to exist expect(vendored_gems("cache/#{g}.gem")).to exist end end def should_not_have_gems(*gems) gems.each do |g| expect(vendored_gems("gems/#{g}")).not_to exist expect(vendored_gems("specifications/#{g}.gemspec")).not_to exist expect(vendored_gems("cache/#{g}.gem")).not_to exist end end it "removes unused gems that are different" do gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "foo" G bundle "install --path vendor/bundle --no-clean" gemfile <<-G source "file://#{gem_repo1}" gem "thin" G bundle "install" bundle :clean expect(out).to eq("Removing foo (1.0)") should_have_gems 'thin-1.0', 'rack-1.0.0' should_not_have_gems 'foo-1.0' expect(vendored_gems("bin/rackup")).to exist end it "removes old version of gem if unused" do gemfile <<-G source "file://#{gem_repo1}" gem "rack", "0.9.1" gem "foo" G bundle "install --path vendor/bundle --no-clean" gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" gem "foo" G bundle "install" bundle :clean expect(out).to eq("Removing rack (0.9.1)") should_have_gems 'foo-1.0', 'rack-1.0.0' should_not_have_gems 'rack-0.9.1' expect(vendored_gems("bin/rackup")).to exist end it "removes new version of gem if unused" do gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" gem "foo" G bundle "install --path vendor/bundle --no-clean" gemfile <<-G source "file://#{gem_repo1}" gem "rack", "0.9.1" gem "foo" G bundle "install" bundle :clean expect(out).to eq("Removing rack (1.0.0)") should_have_gems 'foo-1.0', 'rack-0.9.1' should_not_have_gems 'rack-1.0.0' expect(vendored_gems("bin/rackup")).to exist end it "removes gems in bundle without groups" do gemfile <<-G source "file://#{gem_repo1}" gem "foo" group :test_group do gem "rack", "1.0.0" end G bundle "install --path vendor/bundle" bundle "install --without test_group" bundle :clean expect(out).to eq("Removing rack (1.0.0)") should_have_gems 'foo-1.0' should_not_have_gems 'rack-1.0.0' expect(vendored_gems("bin/rackup")).to_not exist end it "does not remove cached git dir if it's being used" do build_git "foo" revision = revision_for(lib_path("foo-1.0")) git_path = lib_path('foo-1.0') gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" git "#{git_path}", :ref => "#{revision}" do gem "foo" end G bundle "install --path vendor/bundle" bundle :clean digest = Digest::SHA1.hexdigest(git_path.to_s) expect(vendored_gems("cache/bundler/git/foo-1.0-#{digest}")).to exist end it "removes unused git gems" do build_git "foo", :path => lib_path("foo") git_path = lib_path('foo') revision = revision_for(git_path) gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" git "#{git_path}", :ref => "#{revision}" do gem "foo" end G bundle "install --path vendor/bundle" gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" G bundle "install" bundle :clean expect(out).to eq("Removing foo (#{revision[0..11]})") expect(vendored_gems("gems/rack-1.0.0")).to exist expect(vendored_gems("bundler/gems/foo-#{revision[0..11]}")).not_to exist digest = Digest::SHA1.hexdigest(git_path.to_s) expect(vendored_gems("cache/bundler/git/foo-#{digest}")).not_to exist expect(vendored_gems("specifications/rack-1.0.0.gemspec")).to exist expect(vendored_gems("bin/rackup")).to exist end it "removes old git gems" do build_git "foo-bar", :path => lib_path("foo-bar") revision = revision_for(lib_path("foo-bar")) gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" git "#{lib_path('foo-bar')}" do gem "foo-bar" end G bundle "install --path vendor/bundle" update_git "foo", :path => lib_path("foo-bar") revision2 = revision_for(lib_path("foo-bar")) bundle "update" bundle :clean expect(out).to eq("Removing foo-bar (#{revision[0..11]})") expect(vendored_gems("gems/rack-1.0.0")).to exist expect(vendored_gems("bundler/gems/foo-bar-#{revision[0..11]}")).not_to exist expect(vendored_gems("bundler/gems/foo-bar-#{revision2[0..11]}")).to exist expect(vendored_gems("specifications/rack-1.0.0.gemspec")).to exist expect(vendored_gems("bin/rackup")).to exist end it "does not remove nested gems in a git repo" do build_lib "activesupport", "3.0", :path => lib_path("rails/activesupport") build_git "rails", "3.0", :path => lib_path("rails") do |s| s.add_dependency "activesupport", "= 3.0" end revision = revision_for(lib_path("rails")) gemfile <<-G gem "activesupport", :git => "#{lib_path('rails')}", :ref => '#{revision}' G bundle "install --path vendor/bundle" bundle :clean expect(out).to eq("") expect(vendored_gems("bundler/gems/rails-#{revision[0..11]}")).to exist end it "does not remove git sources that are in without groups" do build_git "foo", :path => lib_path("foo") git_path = lib_path('foo') revision = revision_for(git_path) gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" group :test do git "#{git_path}", :ref => "#{revision}" do gem "foo" end end G bundle "install --path vendor/bundle --without test" bundle :clean expect(out).to eq("") expect(vendored_gems("bundler/gems/foo-#{revision[0..11]}")).to exist digest = Digest::SHA1.hexdigest(git_path.to_s) expect(vendored_gems("cache/bundler/git/foo-#{digest}")).to_not exist end it "does not blow up when using without groups" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" group :development do gem "foo" end G bundle "install --path vendor/bundle --without development" bundle :clean, :exitstatus => true expect(exitstatus).to eq(0) end it "displays an error when used without --path" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" G bundle :clean, :exitstatus => true expect(exitstatus).to eq(1) expect(out).to eq("Can only use bundle clean when --path is set or --force is set") end # handling bundle clean upgrade path from the pre's it "removes .gem/.gemspec file even if there's no corresponding gem dir" do gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "foo" G bundle "install --path vendor/bundle" gemfile <<-G source "file://#{gem_repo1}" gem "foo" G bundle "install" FileUtils.rm(vendored_gems("bin/rackup")) FileUtils.rm_rf(vendored_gems("gems/thin-1.0")) FileUtils.rm_rf(vendored_gems("gems/rack-1.0.0")) bundle :clean should_not_have_gems 'thin-1.0', 'rack-1.0' should_have_gems 'foo-1.0' expect(vendored_gems("bin/rackup")).not_to exist end it "does not call clean automatically when using system gems" do gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "rack" G bundle :install gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle :install sys_exec "gem list" expect(out).to include("rack (1.0.0)") expect(out).to include("thin (1.0)") end it "--clean should override the bundle setting on install" do gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "rack" G bundle "install --path vendor/bundle --clean" gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "install" should_have_gems 'rack-1.0.0' should_not_have_gems 'thin-1.0' end it "--clean should override the bundle setting on update" do build_repo2 gemfile <<-G source "file://#{gem_repo2}" gem "foo" G bundle "install --path vendor/bundle --clean" update_repo2 do build_gem 'foo', '1.0.1' end bundle "update" should_have_gems 'foo-1.0.1' should_not_have_gems 'foo-1.0' end it "does not clean automatically on --path" do gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "rack" G bundle "install --path vendor/bundle" gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "install" should_have_gems 'rack-1.0.0', 'thin-1.0' end it "does not clean on bundle update with --path" do build_repo2 gemfile <<-G source "file://#{gem_repo2}" gem "foo" G bundle "install --path vendor/bundle" update_repo2 do build_gem 'foo', '1.0.1' end bundle :update should_have_gems 'foo-1.0', 'foo-1.0.1' end it "does not clean on bundle update when using --system" do build_repo2 gemfile <<-G source "file://#{gem_repo2}" gem "foo" G bundle "install" update_repo2 do build_gem 'foo', '1.0.1' end bundle :update sys_exec "gem list" expect(out).to include("foo (1.0.1, 1.0)") end it "cleans system gems when --force is used" do gemfile <<-G source "file://#{gem_repo1}" gem "foo" gem "rack" G bundle :install gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle :install bundle "clean --force" expect(out).to eq("Removing foo (1.0)") sys_exec "gem list" expect(out).not_to include("foo (1.0)") expect(out).to include("rack (1.0.0)") end it "cleans git gems with a 7 length git revision" do build_git "foo" revision = revision_for(lib_path("foo-1.0")) gemfile <<-G source "file://#{gem_repo1}" gem "foo", :git => "#{lib_path('foo-1.0')}" G bundle "install --path vendor/bundle" # mimic 7 length git revisions in Gemfile.lock gemfile_lock = File.read(bundled_app('Gemfile.lock')).split("\n") gemfile_lock.each_with_index do |line, index| gemfile_lock[index] = line[0..(11 + 7)] if line.include?(" revision:") end File.open(bundled_app('Gemfile.lock'), 'w') do |file| file.print gemfile_lock.join("\n") end bundle "install --path vendor/bundle" bundle :clean expect(out).not_to include("Removing foo (1.0 #{revision[0..6]})") expect(vendored_gems("bundler/gems/foo-1.0-#{revision[0..6]}")).to exist end it "when using --force on system gems, it doesn't remove binaries" do build_repo2 update_repo2 do build_gem 'bindir' do |s| s.bindir = "exe" s.executables = "foo" end end gemfile <<-G source "file://#{gem_repo2}" gem "bindir" G bundle :install bundle "clean --force" sys_status "foo" expect(exitstatus).to eq(0) expect(out).to eq("1.0") end it "doesn't blow up on path gems without a .gempsec" do relative_path = "vendor/private_gems/bar-1.0" absolute_path = bundled_app(relative_path) FileUtils.mkdir_p("#{absolute_path}/lib/bar") File.open("#{absolute_path}/lib/bar/bar.rb", 'wb') do |file| file.puts "module Bar; end" end gemfile <<-G source "file://#{gem_repo1}" gem "foo" gem "bar", "1.0", :path => "#{relative_path}" G bundle "install --path vendor/bundle" bundle :clean, :exitstatus => true expect(exitstatus).to eq(0) end it "doesn't remove gems in dry-run mode" do gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "foo" G bundle "install --path vendor/bundle --no-clean" gemfile <<-G source "file://#{gem_repo1}" gem "thin" G bundle :install bundle "clean --dry-run" expect(out).not_to eq("Removing foo (1.0)") expect(out).to eq("Would have removed foo (1.0)") should_have_gems 'thin-1.0', 'rack-1.0.0', 'foo-1.0' expect(vendored_gems("bin/rackup")).to exist end it "doesn't store dry run as a config setting" do gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "foo" G bundle "install --path vendor/bundle --no-clean" bundle "config dry_run false" gemfile <<-G source "file://#{gem_repo1}" gem "thin" G bundle :install bundle "clean" expect(out).to eq("Removing foo (1.0)") expect(out).not_to eq("Would have removed foo (1.0)") should_have_gems 'thin-1.0', 'rack-1.0.0' should_not_have_gems 'foo-1.0' expect(vendored_gems("bin/rackup")).to exist end end config_spec.rb000066400000000000000000000124451446701454400360440ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe ".bundle/config" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" G end describe "BUNDLE_APP_CONFIG" do it "can be moved with an environment variable" do ENV['BUNDLE_APP_CONFIG'] = tmp('foo/bar').to_s bundle "install --path vendor/bundle" expect(bundled_app('.bundle')).not_to exist expect(tmp('foo/bar/config')).to exist should_be_installed "rack 1.0.0" end it "can provide a relative path with the environment variable" do FileUtils.mkdir_p bundled_app('omg') Dir.chdir bundled_app('omg') ENV['BUNDLE_APP_CONFIG'] = "../foo" bundle "install --path vendor/bundle" expect(bundled_app(".bundle")).not_to exist expect(bundled_app("../foo/config")).to exist should_be_installed "rack 1.0.0" end it "removes environment.rb from BUNDLE_APP_CONFIG's path" do FileUtils.mkdir_p(tmp('foo/bar')) ENV['BUNDLE_APP_CONFIG'] = tmp('foo/bar').to_s bundle "install" FileUtils.touch tmp('foo/bar/environment.rb') should_be_installed "rack 1.0.0" expect(tmp('foo/bar/environment.rb')).not_to exist end end describe "global" do before(:each) { bundle :install } it "is the default" do bundle "config foo global" run "puts Bundler.settings[:foo]" expect(out).to eq("global") end it "can also be set explicitly" do bundle "config --global foo global" run "puts Bundler.settings[:foo]" expect(out).to eq("global") end it "has lower precedence than local" do bundle "config --local foo local" bundle "config --global foo global" expect(out).to match(/Your application has set foo to "local"/) run "puts Bundler.settings[:foo]" expect(out).to eq("local") end it "has lower precedence than env" do begin ENV["BUNDLE_FOO"] = "env" bundle "config --global foo global" expect(out).to match(/You have a bundler environment variable for foo set to "env"/) run "puts Bundler.settings[:foo]" expect(out).to eq("env") ensure ENV.delete("BUNDLE_FOO") end end it "can be deleted" do bundle "config --global foo global" bundle "config --delete foo" run "puts Bundler.settings[:foo] == nil" expect(out).to eq("true") end it "warns when overriding" do bundle "config --global foo previous" bundle "config --global foo global" expect(out).to match(/You are replacing the current global value of foo/) run "puts Bundler.settings[:foo]" expect(out).to eq("global") end it "expands the path at time of setting" do bundle "config --global local.foo .." run "puts Bundler.settings['local.foo']" expect(out).to eq(File.expand_path(Dir.pwd + "/..")) end end describe "local" do before(:each) { bundle :install } it "can also be set explicitly" do bundle "config --local foo local" run "puts Bundler.settings[:foo]" expect(out).to eq("local") end it "has higher precedence than env" do begin ENV["BUNDLE_FOO"] = "env" bundle "config --local foo local" run "puts Bundler.settings[:foo]" expect(out).to eq("local") ensure ENV.delete("BUNDLE_FOO") end end it "can be deleted" do bundle "config --local foo local" bundle "config --delete foo" run "puts Bundler.settings[:foo] == nil" expect(out).to eq("true") end it "warns when overriding" do bundle "config --local foo previous" bundle "config --local foo local" expect(out).to match(/You are replacing the current local value of foo/) run "puts Bundler.settings[:foo]" expect(out).to eq("local") end it "expands the path at time of setting" do bundle "config --local local.foo .." run "puts Bundler.settings['local.foo']" expect(out).to eq(File.expand_path(Dir.pwd + "/..")) end end describe "env" do before(:each) { bundle :install } it "can set boolean properties via the environment" do ENV["BUNDLE_FROZEN"] = "true" run "if Bundler.settings[:frozen]; puts 'true' else puts 'false' end" expect(out).to eq("true") end it "can set negative boolean properties via the environment" do run "if Bundler.settings[:frozen]; puts 'true' else puts 'false' end" expect(out).to eq("false") ENV["BUNDLE_FROZEN"] = "false" run "if Bundler.settings[:frozen]; puts 'true' else puts 'false' end" expect(out).to eq("false") ENV["BUNDLE_FROZEN"] = "0" run "if Bundler.settings[:frozen]; puts 'true' else puts 'false' end" expect(out).to eq("false") ENV["BUNDLE_FROZEN"] = "" run "if Bundler.settings[:frozen]; puts 'true' else puts 'false' end" expect(out).to eq("false") end end describe "gem mirrors" do before(:each) { bundle :install } it "configures mirrors using keys with `mirror.`" do bundle "config --local mirror.http://gems.example.org http://gem-mirror.example.org" run(<<-E) Bundler.settings.gem_mirrors.each do |k, v| puts "\#{k} => \#{v}" end E expect(out).to eq("http://gems.example.org/ => http://gem-mirror.example.org/") end end end console_spec.rb000066400000000000000000000023741446701454400362410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle console" do before :each do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development G end it "starts IRB with the default group loaded" do bundle "console" do |input| input.puts("puts RACK") input.puts("exit") end expect(out).to include("0.9.1") end it "doesn't load any other groups" do bundle "console" do |input| input.puts("puts ACTIVESUPPORT") input.puts("exit") end expect(out).to include("NameError") end describe "when given a group" do it "loads the given group" do bundle "console test" do |input| input.puts("puts ACTIVESUPPORT") input.puts("exit") end expect(out).to include("2.3.5") end it "loads the default group" do bundle "console test" do |input| input.puts("puts RACK") input.puts("exit") end expect(out).to include("0.9.1") end it "doesn't load other groups" do bundle "console test" do |input| input.puts("puts RACK_MIDDLEWARE") input.puts("exit") end expect(out).to include("NameError") end end end exec_spec.rb000066400000000000000000000162711446701454400355240ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle exec" do before :each do system_gems "rack-1.0.0", "rack-0.9.1" end it "activates the correct gem" do gemfile <<-G gem "rack", "0.9.1" G bundle "exec rackup" expect(out).to eq("0.9.1") end it "works when the bins are in ~/.bundle" do install_gemfile <<-G gem "rack" G bundle "exec rackup" expect(out).to eq("1.0.0") end it "works when running from a random directory" do install_gemfile <<-G gem "rack" G bundle "exec 'cd #{tmp('gems')} && rackup'" expect(out).to eq("1.0.0") end it "works when exec'ing something else" do install_gemfile 'gem "rack"' bundle "exec echo exec" expect(out).to eq("exec") end it "works when exec'ing to ruby" do install_gemfile 'gem "rack"' bundle "exec ruby -e 'puts %{hi}'" expect(out).to eq("hi") end it "accepts --verbose" do install_gemfile 'gem "rack"' bundle "exec --verbose echo foobar" expect(out).to eq("foobar") end it "passes --verbose to command if it is given after the command" do install_gemfile 'gem "rack"' bundle "exec echo --verbose" expect(out).to eq("--verbose") end it "handles --keep-file-descriptors" do require 'tempfile' bundle_bin = File.expand_path('../../../bin/bundle', __FILE__) command = Tempfile.new("io-test") command.sync = true command.write <<-G if ARGV[0] IO.for_fd(ARGV[0].to_i) else require 'tempfile' io = Tempfile.new("io-test-fd") args = %W[#{Gem.ruby} -I#{lib} #{bundle_bin} exec --keep-file-descriptors #{Gem.ruby} #{command.path} \#{io.to_i}] args << { io.to_i => io } if RUBY_VERSION >= "2.0" exec(*args) end G install_gemfile '' sys_exec("#{Gem.ruby} #{command.path}") if RUBY_VERSION >= "2.0" expect(out).to eq("") else expect(out).to eq("Ruby version #{RUBY_VERSION} defaults to keeping non-standard file descriptors on Kernel#exec.") end expect(err).to eq("") end it "accepts --keep-file-descriptors" do install_gemfile '' bundle "exec --keep-file-descriptors echo foobar" expect(err).to eq("") end it "can run a command named --verbose" do install_gemfile 'gem "rack"' File.open("--verbose", 'w') do |f| f.puts "#!/bin/sh" f.puts "echo foobar" end File.chmod(0744, "--verbose") ENV['PATH'] = "." bundle "exec -- --verbose" expect(out).to eq("foobar") end it "handles different versions in different bundles" do build_repo2 do build_gem "rack_two", "1.0.0" do |s| s.executables = "rackup" end end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "0.9.1" G Dir.chdir bundled_app2 do install_gemfile bundled_app2('Gemfile'), <<-G source "file://#{gem_repo2}" gem "rack_two", "1.0.0" G end bundle "exec rackup" expect(out).to eq("0.9.1") Dir.chdir bundled_app2 do bundle "exec rackup" expect(out).to eq("1.0.0") end end it "handles gems installed with --without" do install_gemfile <<-G, :without => :middleware source "file://#{gem_repo1}" gem "rack" # rack 0.9.1 and 1.0 exist group :middleware do gem "rack_middleware" # rack_middleware depends on rack 0.9.1 end G bundle "exec rackup" expect(out).to eq("0.9.1") should_not_be_installed "rack_middleware 1.0" end it "does not duplicate already exec'ed RUBYOPT" do install_gemfile <<-G gem "rack" G rubyopt = ENV['RUBYOPT'] rubyopt = "-rbundler/setup #{rubyopt}" bundle "exec 'echo $RUBYOPT'" expect(out).to have_rubyopts(rubyopt) bundle "exec 'echo $RUBYOPT'", :env => {"RUBYOPT" => rubyopt} expect(out).to have_rubyopts(rubyopt) end it "does not duplicate already exec'ed RUBYLIB" do install_gemfile <<-G gem "rack" G rubylib = ENV['RUBYLIB'] rubylib = "#{rubylib}".split(File::PATH_SEPARATOR).unshift "#{bundler_path}" rubylib = rubylib.uniq.join(File::PATH_SEPARATOR) bundle "exec 'echo $RUBYLIB'" expect(out).to eq(rubylib) bundle "exec 'echo $RUBYLIB'", :env => {"RUBYLIB" => rubylib} expect(out).to eq(rubylib) end it "errors nicely when the argument doesn't exist" do install_gemfile <<-G gem "rack" G bundle "exec foobarbaz", :exitstatus => true expect(exitstatus).to eq(127) expect(out).to include("bundler: command not found: foobarbaz") expect(out).to include("Install missing gem executables with `bundle install`") end it "errors nicely when the argument is not executable" do install_gemfile <<-G gem "rack" G bundle "exec touch foo" bundle "exec ./foo", :exitstatus => true expect(exitstatus).to eq(126) expect(out).to include("bundler: not executable: ./foo") end it "errors nicely when no arguments are passed" do install_gemfile <<-G gem "rack" G bundle "exec", :exitstatus => true expect(exitstatus).to eq(128) expect(out).to include("bundler: exec needs a command to run") end describe "with gem executables" do describe "run from a random directory" do before(:each) do install_gemfile <<-G gem "rack" G end it "works when unlocked" do bundle "exec 'cd #{tmp('gems')} && rackup'" expect(out).to eq("1.0.0") end it "works when locked" do should_be_locked bundle "exec 'cd #{tmp('gems')} && rackup'" expect(out).to eq("1.0.0") end end describe "from gems bundled via :path" do before(:each) do build_lib "fizz", :path => home("fizz") do |s| s.executables = "fizz" end install_gemfile <<-G gem "fizz", :path => "#{File.expand_path(home("fizz"))}" G end it "works when unlocked" do bundle "exec fizz" expect(out).to eq("1.0") end it "works when locked" do should_be_locked bundle "exec fizz" expect(out).to eq("1.0") end end describe "from gems bundled via :git" do before(:each) do build_git "fizz_git" do |s| s.executables = "fizz_git" end install_gemfile <<-G gem "fizz_git", :git => "#{lib_path('fizz_git-1.0')}" G end it "works when unlocked" do bundle "exec fizz_git" expect(out).to eq("1.0") end it "works when locked" do should_be_locked bundle "exec fizz_git" expect(out).to eq("1.0") end end describe "from gems bundled via :git with no gemspec" do before(:each) do build_git "fizz_no_gemspec", :gemspec => false do |s| s.executables = "fizz_no_gemspec" end install_gemfile <<-G gem "fizz_no_gemspec", "1.0", :git => "#{lib_path('fizz_no_gemspec-1.0')}" G end it "works when unlocked" do bundle "exec fizz_no_gemspec" expect(out).to eq("1.0") end it "works when locked" do should_be_locked bundle "exec fizz_no_gemspec" expect(out).to eq("1.0") end end end end help_spec.rb000066400000000000000000000022621446701454400355230ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle help" do # Rubygems 1.4+ no longer load gem plugins so this test is no longer needed rubygems_under_14 = Gem::Requirement.new("< 1.4").satisfied_by?(Gem::Version.new(Gem::VERSION)) it "complains if older versions of bundler are installed", :if => rubygems_under_14 do system_gems "bundler-0.8.1" bundle "help", :expect_err => true expect(err).to include("older than 0.9") expect(err).to include("running `gem cleanup bundler`.") end it "uses mann when available" do fake_man! bundle "help gemfile" expect(out).to eq(%|["#{root}/lib/bundler/man/gemfile.5"]|) end it "prefixes bundle commands with bundle- when finding the groff files" do fake_man! bundle "help install" expect(out).to eq(%|["#{root}/lib/bundler/man/bundle-install"]|) end it "simply outputs the txt file when there is no man on the path" do kill_path! bundle "help install", :expect_err => true expect(out).to match(/BUNDLE-INSTALL/) end it "still outputs the old help for commands that do not have man pages yet" do bundle "help check" expect(out).to include("Check searches the local machine") end end init_spec.rb000066400000000000000000000017461446701454400355440ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle init" do it "generates a Gemfile" do bundle :init expect(bundled_app("Gemfile")).to exist end it "does not change existing Gemfiles" do gemfile <<-G gem "rails" G expect { bundle :init }.not_to change { File.read(bundled_app("Gemfile")) } end it "should generate from an existing gemspec" do spec_file = tmp.join('test.gemspec') File.open(spec_file, 'w') do |file| file << <<-S Gem::Specification.new do |s| s.name = 'test' s.add_dependency 'rack', '= 1.0.1' s.add_development_dependency 'rspec', '1.2' end S end bundle :init, :gemspec => spec_file gemfile = bundled_app("Gemfile").read expect(gemfile).to match(/source :gemcutter/) expect(gemfile.scan(/gem "rack", "= 1.0.1"/).size).to eq(1) expect(gemfile.scan(/gem "rspec", "= 1.2"/).size).to eq(1) expect(gemfile.scan(/group :development/).size).to eq(1) end end inject_spec.rb000066400000000000000000000042261446701454400360510ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire 'spec_helper' describe "bundle inject" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end context "without a lockfile" do it "locks with the injected gems" do expect(bundled_app("Gemfile.lock")).not_to exist bundle "inject 'rack-obama' '> 0'" expect(bundled_app("Gemfile.lock").read).to match(/rack-obama/) end end context "with a lockfile" do before do bundle "install" end it "adds the injected gems to the Gemfile" do expect(bundled_app("Gemfile").read).not_to match(/rack-obama/) bundle "inject 'rack-obama' '> 0'" expect(bundled_app("Gemfile").read).to match(/rack-obama/) end it "locks with the injected gems" do expect(bundled_app("Gemfile.lock").read).not_to match(/rack-obama/) bundle "inject 'rack-obama' '> 0'" expect(bundled_app("Gemfile.lock").read).to match(/rack-obama/) end end context "with injected gems already in the Gemfile" do it "doesn't add existing gems" do bundle "inject 'rack' '> 0'" expect(out).to match(/cannot specify the same gem twice/i) end end context "when frozen" do before do bundle "install" bundle "config --local frozen 1" end it "injects anyway" do bundle "inject 'rack-obama' '> 0'" expect(bundled_app("Gemfile").read).to match(/rack-obama/) end it "locks with the injected gems" do expect(bundled_app("Gemfile.lock").read).not_to match(/rack-obama/) bundle "inject 'rack-obama' '> 0'" expect(bundled_app("Gemfile.lock").read).to match(/rack-obama/) end it "restores frozen afterwards" do bundle "inject 'rack-obama' '> 0'" config = YAML.load(bundled_app(".bundle/config").read) expect(config["BUNDLE_FROZEN"]).to eq("1") end it "doesn't allow Gemfile changes" do gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama" G bundle "inject 'rack' '> 0'" expect(out).to match(/trying to install in deployment mode after changing/) expect(bundled_app("Gemfile.lock").read).not_to match(/rack-obama/) end end end licenses_spec.rb000066400000000000000000000005761446701454400364060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle licenses" do before :each do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" gem "with_license" G end it "prints license information for all gems in the bundle" do bundle "licenses" expect(out).to include("actionpack: Unknown") expect(out).to include("with_license: MIT") end end newgem_spec.rb000066400000000000000000000303351446701454400360570ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle gem" do before do @git_name = `git config --global user.name`.chomp `git config --global user.name "Bundler User"` @git_email = `git config --global user.email`.chomp `git config --global user.email user@example.com` end after do `git config --global user.name "#{@git_name}"` `git config --global user.email #{@git_email}` end shared_examples_for "git config is present" do context "git config user.{name,email} present" do it "sets gemspec author to git user.name if available" do expect(generated_gem.gemspec.authors.first).to eq("Bundler User") end it "sets gemspec email to git user.email if available" do expect(generated_gem.gemspec.email.first).to eq("user@example.com") end end end shared_examples_for "git config is absent" do |hoge| it "sets gemspec author to default message if git user.name is not set or empty" do expect(generated_gem.gemspec.authors.first).to eq("TODO: Write your name") end it "sets gemspec email to default message if git user.email is not set or empty" do expect(generated_gem.gemspec.email.first).to eq("TODO: Write your email address") end end context "gem naming with underscore" do let(:gem_name) { 'test_gem' } before do bundle "gem #{gem_name}" # reset gemspec cache for each test because of commit 3d4163a Bundler.clear_gemspec_cache end let(:generated_gem) { Bundler::GemHelper.new(bundled_app(gem_name).to_s) } it "generates a gem skeleton" do expect(bundled_app("test_gem/test_gem.gemspec")).to exist expect(bundled_app("test_gem/LICENSE.txt")).to exist expect(bundled_app("test_gem/Gemfile")).to exist expect(bundled_app("test_gem/Rakefile")).to exist expect(bundled_app("test_gem/lib/test_gem.rb")).to exist expect(bundled_app("test_gem/lib/test_gem/version.rb")).to exist end it "starts with version 0.0.1" do expect(bundled_app("test_gem/lib/test_gem/version.rb").read).to match(/VERSION = "0.0.1"/) end it "does not nest constants" do expect(bundled_app("test_gem/lib/test_gem/version.rb").read).to match(/module TestGem/) expect(bundled_app("test_gem/lib/test_gem.rb").read).to match(/module TestGem/) end it_should_behave_like "git config is present" context "git config user.{name,email} is not set" do before do `git config --global --unset user.name` `git config --global --unset user.email` reset! in_app_root bundle "gem #{gem_name}" end it_should_behave_like "git config is absent" end it "sets gemspec license to MIT by default" do expect(generated_gem.gemspec.license).to eq("MIT") end it "requires the version file" do expect(bundled_app("test_gem/lib/test_gem.rb").read).to match(/require "test_gem\/version"/) end it "runs rake without problems" do system_gems ["rake-10.0.2"] rakefile = strip_whitespace <<-RAKEFILE task :default do puts 'SUCCESS' end RAKEFILE File.open(bundled_app("test_gem/Rakefile"), 'w') do |file| file.puts rakefile end Dir.chdir(bundled_app(gem_name)) do sys_exec("rake") expect(out).to include("SUCCESS") end end context "--bin parameter set" do before do reset! in_app_root bundle "gem #{gem_name} --bin" end it "builds bin skeleton" do expect(bundled_app("test_gem/bin/test_gem")).to exist end it "requires 'test-gem'" do expect(bundled_app("test_gem/bin/test_gem").read).to match(/require 'test_gem'/) end end context "no --test parameter" do before do reset! in_app_root bundle "gem #{gem_name}" end it "doesn't create any spec/test file" do expect(bundled_app("test_gem/.rspec")).to_not exist expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to_not exist expect(bundled_app("test_gem/spec/spec_helper.rb")).to_not exist expect(bundled_app("test_gem/test/test_test_gem.rb")).to_not exist expect(bundled_app("test_gem/test/minitest_helper.rb")).to_not exist end end context "--test parameter set to rspec" do before do reset! in_app_root bundle "gem #{gem_name} --test=rspec" end it "builds spec skeleton" do expect(bundled_app("test_gem/.rspec")).to exist expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to exist expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist end it "requires 'test-gem'" do expect(bundled_app("test_gem/spec/spec_helper.rb").read).to match(/require 'test_gem'/) end it "creates a default test which fails" do expect(bundled_app("test_gem/spec/test_gem_spec.rb").read).to match(/false.should be_true/) end end context "--test parameter set to minitest" do before do reset! in_app_root bundle "gem #{gem_name} --test=minitest" end it "builds spec skeleton" do expect(bundled_app("test_gem/test/test_test_gem.rb")).to exist expect(bundled_app("test_gem/test/minitest_helper.rb")).to exist end it "requires 'test-gem'" do expect(bundled_app("test_gem/test/minitest_helper.rb").read).to match(/require 'test_gem'/) end it "requires 'minitest_helper'" do expect(bundled_app("test_gem/test/test_test_gem.rb").read).to match(/require 'minitest_helper'/) end it "creates a default test which fails" do expect(bundled_app("test_gem/test/test_test_gem.rb").read).to match(/assert false/) end end context "--test with no arguments" do before do reset! in_app_root bundle "gem #{gem_name} --test" end it "defaults to rspec" do expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist expect(bundled_app("test_gem/test/minitest_helper.rb")).to_not exist end it "creates a .travis.yml file to test the library against the current Ruby version on Travis CI" do expect(bundled_app("test_gem/.travis.yml").read).to match(%r(- #{RUBY_VERSION})) end end context "--edit option" do it "opens the generated gemspec in the user's text editor" do reset! in_app_root output = bundle "gem #{gem_name} --edit=echo" gemspec_path = File.join(Dir.pwd, gem_name, "#{gem_name}.gemspec") expect(output).to include("echo \"#{gemspec_path}\"") end end end context "gem naming with dashed" do let(:gem_name) { 'test-gem' } before do bundle "gem #{gem_name}" # reset gemspec cache for each test because of commit 3d4163a Bundler.clear_gemspec_cache end let(:generated_gem) { Bundler::GemHelper.new(bundled_app(gem_name).to_s) } it "generates a gem skeleton" do expect(bundled_app("test-gem/test-gem.gemspec")).to exist expect(bundled_app("test-gem/LICENSE.txt")).to exist expect(bundled_app("test-gem/Gemfile")).to exist expect(bundled_app("test-gem/Rakefile")).to exist expect(bundled_app("test-gem/lib/test/gem.rb")).to exist expect(bundled_app("test-gem/lib/test/gem/version.rb")).to exist end it "starts with version 0.0.1" do expect(bundled_app("test-gem/lib/test/gem/version.rb").read).to match(/VERSION = "0.0.1"/) end it "nests constants so they work" do expect(bundled_app("test-gem/lib/test/gem/version.rb").read).to match(/module Test\n module Gem/) expect(bundled_app("test-gem/lib/test/gem.rb").read).to match(/module Test\n module Gem/) end it_should_behave_like "git config is present" context "git config user.{name,email} is not set" do before do `git config --global --unset user.name` `git config --global --unset user.email` reset! in_app_root bundle "gem #{gem_name}" end it_should_behave_like "git config is absent" end it "sets gemspec license to MIT by default" do expect(generated_gem.gemspec.license).to eq("MIT") end it "requires the version file" do expect(bundled_app("test-gem/lib/test/gem.rb").read).to match(/require "test\/gem\/version"/) end it "runs rake without problems" do system_gems ["rake-10.0.2"] rakefile = strip_whitespace <<-RAKEFILE task :default do puts 'SUCCESS' end RAKEFILE File.open(bundled_app("test-gem/Rakefile"), 'w') do |file| file.puts rakefile end Dir.chdir(bundled_app(gem_name)) do sys_exec("rake") expect(out).to include("SUCCESS") end end context "--bin parameter set" do before do reset! in_app_root bundle "gem #{gem_name} --bin" end it "builds bin skeleton" do expect(bundled_app("test-gem/bin/test-gem")).to exist end it "requires 'test/gem'" do expect(bundled_app("test-gem/bin/test-gem").read).to match(/require 'test\/gem'/) end end context "no --test parameter" do before do reset! in_app_root bundle "gem #{gem_name}" end it "doesn't create any spec/test file" do expect(bundled_app("test-gem/.rspec")).to_not exist expect(bundled_app("test-gem/spec/test/gem_spec.rb")).to_not exist expect(bundled_app("test-gem/spec/spec_helper.rb")).to_not exist expect(bundled_app("test-gem/test/test_test/gem.rb")).to_not exist expect(bundled_app("test-gem/test/minitest_helper.rb")).to_not exist end end context "--test parameter set to rspec" do before do reset! in_app_root bundle "gem #{gem_name} --test=rspec" end it "builds spec skeleton" do expect(bundled_app("test-gem/.rspec")).to exist expect(bundled_app("test-gem/spec/test/gem_spec.rb")).to exist expect(bundled_app("test-gem/spec/spec_helper.rb")).to exist end it "requires 'test/gem'" do expect(bundled_app("test-gem/spec/spec_helper.rb").read).to match(/require 'test\/gem'/) end it "creates a default test which fails" do expect(bundled_app("test-gem/spec/test/gem_spec.rb").read).to match(/false.should be_true/) end it "creates a default rake task to run the specs" do rakefile = strip_whitespace <<-RAKEFILE require "bundler/gem_tasks" require "rspec/core/rake_task" RSpec::Core::RakeTask.new(:spec) task :default => :spec RAKEFILE expect(bundled_app("test-gem/Rakefile").read).to eq(rakefile) end end context "--test parameter set to minitest" do before do reset! in_app_root bundle "gem #{gem_name} --test=minitest" end it "builds spec skeleton" do expect(bundled_app("test-gem/test/test_test/gem.rb")).to exist expect(bundled_app("test-gem/test/minitest_helper.rb")).to exist end it "requires 'test/gem'" do expect(bundled_app("test-gem/test/minitest_helper.rb").read).to match(/require 'test\/gem'/) end it "requires 'minitest_helper'" do expect(bundled_app("test-gem/test/test_test/gem.rb").read).to match(/require 'minitest_helper'/) end it "creates a default test which fails" do expect(bundled_app("test-gem/test/test_test/gem.rb").read).to match(/assert false/) end it "creates a default rake task to run the test suite" do rakefile = strip_whitespace <<-RAKEFILE require "bundler/gem_tasks" require "rake/testtask" Rake::TestTask.new(:test) do |t| t.libs << "test" end task :default => :test RAKEFILE expect(bundled_app("test-gem/Rakefile").read).to eq(rakefile) end end context "--test with no arguments" do before do reset! in_app_root bundle "gem #{gem_name} --test" end it "defaults to rspec" do expect(bundled_app("test-gem/spec/spec_helper.rb")).to exist expect(bundled_app("test-gem/test/minitest_helper.rb")).to_not exist end end end end open_spec.rb000066400000000000000000000042341446701454400355350ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle open" do before :each do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G end it "opens the gem with BUNDLER_EDITOR as highest priority" do bundle "open rails", :env => {"EDITOR" => "echo editor", "VISUAL" => "echo visual", "BUNDLER_EDITOR" => "echo bundler_editor"} expect(out).to eq("bundler_editor #{default_bundle_path('gems', 'rails-2.3.2')}") end it "opens the gem with VISUAL as 2nd highest priority" do bundle "open rails", :env => {"EDITOR" => "echo editor", "VISUAL" => "echo visual", "BUNDLER_EDITOR" => ""} expect(out).to eq("visual #{default_bundle_path('gems', 'rails-2.3.2')}") end it "opens the gem with EDITOR as 3rd highest priority" do bundle "open rails", :env => {"EDITOR" => "echo editor", "VISUAL" => "", "BUNDLER_EDITOR" => ""} expect(out).to eq("editor #{default_bundle_path('gems', 'rails-2.3.2')}") end it "complains if no EDITOR is set" do bundle "open rails", :env => {"EDITOR" => "", "VISUAL" => "", "BUNDLER_EDITOR" => ""} expect(out).to eq("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") end it "complains if gem not in bundle" do bundle "open missing", :env => {"EDITOR" => "echo editor", "VISUAL" => "", "BUNDLER_EDITOR" => ""} expect(out).to match(/could not find gem 'missing'/i) end it "suggests alternatives for similar-sounding gems" do bundle "open Rails", :env => {"EDITOR" => "echo editor", "VISUAL" => "", "BUNDLER_EDITOR" => ""} expect(out).to match(/did you mean rails\?/i) end it "opens the gem with short words" do bundle "open rec" , :env => {"EDITOR" => "echo editor", "VISUAL" => "echo visual", "BUNDLER_EDITOR" => "echo bundler_editor"} expect(out).to eq("bundler_editor #{default_bundle_path('gems', 'activerecord-2.3.2')}") end it "select the gem from many match gems" do env = {"EDITOR" => "echo editor", "VISUAL" => "echo visual", "BUNDLER_EDITOR" => "echo bundler_editor"} bundle "open active" , :env => env do |input| input.puts '2' end expect(out).to match(/bundler_editor #{default_bundle_path('gems', 'activerecord-2.3.2')}\z/) end end outdated_spec.rb000066400000000000000000000101411446701454400363770ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle outdated" do before :each do build_repo2 do build_git "foo", :path => lib_path("foo") build_git "zebra", :path => lib_path("zebra") end install_gemfile <<-G source "file://#{gem_repo2}" gem "zebra", :git => "#{lib_path('zebra')}" gem "foo", :git => "#{lib_path('foo')}" gem "activesupport", "2.3.5" gem "weakling", "~> 0.0.1" G end describe "with no arguments" do it "returns a sorted list of outdated gems" do update_repo2 do build_gem "activesupport", "3.0" build_gem "weakling", "0.2" update_git "foo", :path => lib_path("foo") update_git "zebra", :path => lib_path("zebra") end bundle "outdated" expect(out).to include("activesupport (3.0 > 2.3.5) Gemfile specifies \"= 2.3.5\"") expect(out).to include("weakling (0.2 > 0.0.3) Gemfile specifies \"~> 0.0.1\"") expect(out).to include("foo (1.0") # Gem names are one per-line, between "*" and their parenthesized version. gem_list = out.split("\n").map { |g| g[ /\* (.*) \(/, 1] }.compact expect(gem_list).to eq(gem_list.sort) end it "returns non zero exit status if outdated gems present" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end bundle "outdated", :exitstatus => true expect(exitstatus).to_not be_zero end it "returns success exit status if no outdated gems present" do bundle "outdated", :exitstatus => true expect(exitstatus).to be_zero end end describe "with --local option" do it "doesn't hit repo2" do FileUtils.rm_rf(gem_repo2) bundle "outdated --local" expect(out).not_to match(/Fetching/) end end describe "with specified gems" do it "returns list of outdated gems" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end bundle "outdated foo" expect(out).not_to include("activesupport (3.0 > 2.3.5)") expect(out).to include("foo (1.0") end end describe "pre-release gems" do context "without the --pre option" do it "ignores pre-release versions" do update_repo2 do build_gem "activesupport", "3.0.0.beta" end bundle "outdated" expect(out).not_to include("activesupport (3.0.0.beta > 2.3.5)") end end context "with the --pre option" do it "includes pre-release versions" do update_repo2 do build_gem "activesupport", "3.0.0.beta" end bundle "outdated --pre" expect(out).to include("activesupport (3.0.0.beta > 2.3.5) Gemfile specifies \"= 2.3.5\"") end end context "when current gem is a pre-release" do it "includes the gem" do update_repo2 do build_gem "activesupport", "3.0.0.beta.1" build_gem "activesupport", "3.0.0.beta.2" end install_gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "3.0.0.beta.1" G bundle "outdated" expect(out).to include("activesupport (3.0.0.beta.2 > 3.0.0.beta.1) Gemfile specifies \"= 3.0.0.beta.1\"") end end end describe "with --strict option" do it "only reports gems that have a newer version that matches the specified dependency version requirements" do update_repo2 do build_gem "activesupport", "3.0" build_gem "weakling", "0.0.5" end bundle "outdated --strict" expect(out).to_not include("activesupport (3.0 > 2.3.5) Gemfile specifies \"= 2.3.5\"") expect(out).to include("weakling (0.0.5 > 0.0.3) Gemfile specifies \"~> 0.0.1\"") end end describe "with invalid gem name" do it "returns could not find gem name" do bundle "outdated invalid_gem_name" expect(out).to include("Could not find gem 'invalid_gem_name'.") end it "returns non-zero exit code" do bundle "outdated invalid_gem_name", :exitstatus => true expect(exitstatus).to_not be_zero end end end show_spec.rb000066400000000000000000000051211446701454400355500ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/commandsrequire "spec_helper" describe "bundle show" do before :each do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G end it "creates a Gemfile.lock if one did not exist" do FileUtils.rm("Gemfile.lock") bundle "show" expect(bundled_app("Gemfile.lock")).to exist end it "creates a Gemfile.lock when invoked with a gem name" do FileUtils.rm("Gemfile.lock") bundle "show rails" expect(bundled_app("Gemfile.lock")).to exist end it "prints path if gem exists in bundle" do bundle "show rails" expect(out).to eq(default_bundle_path('gems', 'rails-2.3.2').to_s) end it "warns if path no longer exists on disk" do FileUtils.rm_rf("#{system_gem_path}/gems/rails-2.3.2") bundle "show rails" expect(out).to match(/has been deleted/i) expect(out).to include(default_bundle_path('gems', 'rails-2.3.2').to_s) end it "prints the path to the running bundler" do bundle "show bundler" expect(out).to eq(File.expand_path('../../../', __FILE__)) end it "complains if gem not in bundle" do bundle "show missing" expect(out).to match(/could not find gem 'missing'/i) end it "prints path of all gems in bundle sorted by name" do bundle "show --paths" expect(out).to include(default_bundle_path('gems', 'rake-10.0.2').to_s) expect(out).to include(default_bundle_path('gems', 'rails-2.3.2').to_s) # Gem names are the last component of their path. gem_list = out.split.map { |p| p.split('/').last } expect(gem_list).to eq(gem_list.sort) end end describe "bundle show with a git repo" do before :each do @git = build_git "foo", "1.0" end it "prints out git info" do install_gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G should_be_installed "foo 1.0" bundle :show expect(out).to include("foo (1.0 #{@git.ref_for('master', 6)}") end it "prints out branch names other than master" do update_git "foo", :branch => "omg" do |s| s.write "lib/foo.rb", "FOO = '1.0.omg'" end @revision = revision_for(lib_path("foo-1.0"))[0...6] install_gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}", :branch => "omg" G should_be_installed "foo 1.0.omg" bundle :show expect(out).to include("foo (1.0 #{@git.ref_for('omg', 6)}") end it "doesn't print the branch when tied to a ref" do sha = revision_for(lib_path("foo-1.0")) install_gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}", :ref => "#{sha}" G bundle :show expect(out).to include("foo (1.0 #{sha[0..6]})") end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/000077500000000000000000000000001446701454400331565ustar00rootroot00000000000000binstubs_spec.rb000066400000000000000000000013251446701454400362700ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire 'spec_helper' describe "bundle install" do describe "when system_bindir is set" do # On OS X, Gem.bindir defaults to /usr/bin, so system_bindir is useful if # you want to avoid sudo installs for system gems with OS X's default ruby it "overrides Gem.bindir" do expect(Pathname.new("/usr/bin")).not_to be_writable unless Process::euid == 0 gemfile <<-G require 'rubygems' def Gem.bindir; "/usr/bin"; end source "file://#{gem_repo1}" gem "rack" G config "BUNDLE_SYSTEM_BINDIR" => system_gem_path('altbin').to_s bundle :install should_be_installed "rack 1.0.0" expect(system_gem_path("altbin/rackup")).to exist end end endbundler_spec.rb000066400000000000000000000076271446701454400361050ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire 'spec_helper' describe "bundle install" do describe "with bundler dependencies" do before(:each) do build_repo2 do build_gem "rails", "3.0" do |s| s.add_dependency "bundler", ">= 0.9.0.pre" end build_gem "bundler", "0.9.1" build_gem "bundler", Bundler::VERSION end end it "are forced to the current bundler version" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rails", "3.0" G should_be_installed "bundler #{Bundler::VERSION}" end it "are not added if not already present" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G should_not_be_installed "bundler #{Bundler::VERSION}" end it "causes a conflict if explicitly requesting a different version" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rails", "3.0" gem "bundler", "0.9.2" G nice_error = <<-E.strip.gsub(/^ {8}/, '') Fetching source index from file:#{gem_repo2}/ Resolving dependencies... Bundler could not find compatible versions for gem "bundler": In Gemfile: bundler (= 0.9.2) ruby Current Bundler version: bundler (#{Bundler::VERSION}) E expect(out).to include(nice_error) end it "works for gems with multiple versions in its dependencies" do install_gemfile <<-G source "file://#{gem_repo2}" gem "multiple_versioned_deps" G install_gemfile <<-G source "file://#{gem_repo2}" gem "multiple_versioned_deps" gem "rack" G should_be_installed "multiple_versioned_deps 1.0.0" end it "includes bundler in the bundle when it's a child dependency" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rails", "3.0" G run "begin; gem 'bundler'; puts 'WIN'; rescue Gem::LoadError; puts 'FAIL'; end" expect(out).to eq("WIN") end it "allows gem 'bundler' when Bundler is not in the Gemfile or its dependencies" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rack" G run "begin; gem 'bundler'; puts 'WIN'; rescue Gem::LoadError => e; puts e.backtrace; end" expect(out).to eq("WIN") end it "causes a conflict if child dependencies conflict" do install_gemfile <<-G source "file://#{gem_repo2}" gem "activemerchant" gem "rails_fail" G nice_error = <<-E.strip.gsub(/^ {8}/, '') Fetching source index from file:#{gem_repo2}/ Resolving dependencies... Bundler could not find compatible versions for gem "activesupport": In Gemfile: activemerchant (>= 0) ruby depends on activesupport (>= 2.0.0) ruby rails_fail (>= 0) ruby depends on activesupport (1.2.3) E expect(out).to eq(nice_error) end it "causes a conflict if a child dependency conflicts with the Gemfile" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rails_fail" gem "activesupport", "2.3.5" G nice_error = <<-E.strip.gsub(/^ {8}/, '') Fetching source index from file:#{gem_repo2}/ Resolving dependencies... Bundler could not find compatible versions for gem "activesupport": In Gemfile: rails_fail (>= 0) ruby depends on activesupport (= 1.2.3) ruby activesupport (2.3.5) E expect(out).to eq(nice_error) end it "can install dependencies with newer bundler version" do install_gemfile <<-G source "file://#{gem_repo2}" gem "rails", "3.0" G simulate_bundler_version "10.0.0" #simulate_new_machine bundle "check" expect(out).to eq("The Gemfile's dependencies are satisfied") end end enddeploy_spec.rb000066400000000000000000000156411446701454400357410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire "spec_helper" describe "install with --deployment or --frozen" do before do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end it "fails without a lockfile and says that --deployment requires a lock" do bundle "install --deployment" expect(out).to include("The --deployment flag requires a Gemfile.lock") end it "fails without a lockfile and says that --frozen requires a lock" do bundle "install --frozen" expect(out).to include("The --frozen flag requires a Gemfile.lock") end it "works after you try to deploy without a lock" do bundle "install --deployment" bundle :install, :exitstatus => true expect(exitstatus).to eq(0) should_be_installed "rack 1.0" end it "still works if you are not in the app directory and specify --gemfile" do bundle "install" Dir.chdir tmp simulate_new_machine bundle "install --gemfile #{tmp}/bundled_app/Gemfile --deployment" Dir.chdir bundled_app should_be_installed "rack 1.0" end it "works if you exclude a group with a git gem" do build_git "foo" gemfile <<-G group :test do gem "foo", :git => "#{lib_path('foo-1.0')}" end G bundle :install bundle "install --deployment --without test", :exitstatus => true expect(exitstatus).to eq(0) end it "works when you bundle exec bundle" do bundle :install bundle "install --deployment" bundle "exec bundle check", :exitstatus => true expect(exitstatus).to eq(0) end it "works when using path gems from the same path and the version is specified" do build_lib "foo", :path => lib_path("nested/foo") build_lib "bar", :path => lib_path("nested/bar") gemfile <<-G gem "foo", "1.0", :path => "#{lib_path("nested")}" gem "bar", :path => "#{lib_path("nested")}" G bundle :install bundle "install --deployment", :exitstatus => true expect(exitstatus).to eq(0) end describe "with an existing lockfile" do before do bundle "install" end it "works with the --deployment flag if you didn't change anything" do bundle "install --deployment", :exitstatus => true expect(exitstatus).to eq(0) end it "works with the --frozen flag if you didn't change anything" do bundle "install --frozen", :exitstatus => true expect(exitstatus).to eq(0) end it "explodes with the --deployment flag if you make a change and don't check in the lockfile" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rack-obama" G bundle "install --deployment" expect(out).to include("deployment mode") expect(out).to include("You have added to the Gemfile") expect(out).to include("* rack-obama") expect(out).not_to include("You have deleted from the Gemfile") expect(out).not_to include("You have changed in the Gemfile") end it "can have --frozen set via an environment variable" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rack-obama" G ENV['BUNDLE_FROZEN'] = '1' bundle "install" expect(out).to include("deployment mode") expect(out).to include("You have added to the Gemfile") expect(out).to include("* rack-obama") expect(out).not_to include("You have deleted from the Gemfile") expect(out).not_to include("You have changed in the Gemfile") end it "can have --frozen set to false via an environment variable" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rack-obama" G ENV['BUNDLE_FROZEN'] = "false" bundle "install" expect(out).not_to include("deployment mode") expect(out).not_to include("You have added to the Gemfile") expect(out).not_to include("* rack-obama") end it "explodes with the --frozen flag if you make a change and don't check in the lockfile" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rack-obama" G bundle "install --frozen" expect(out).to include("deployment mode") expect(out).to include("You have added to the Gemfile") expect(out).to include("* rack-obama") expect(out).not_to include("You have deleted from the Gemfile") expect(out).not_to include("You have changed in the Gemfile") end it "explodes if you remove a gem and don't check in the lockfile" do gemfile <<-G source "file://#{gem_repo1}" gem "activesupport" G bundle "install --deployment" expect(out).to include("deployment mode") expect(out).to include("You have added to the Gemfile:\n* activesupport\n\n") expect(out).to include("You have deleted from the Gemfile:\n* rack") expect(out).not_to include("You have changed in the Gemfile") end it "explodes if you add a source" do gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "git://hubz.com" G bundle "install --deployment" expect(out).to include("deployment mode") expect(out).to include("You have added to the Gemfile:\n* source: git://hubz.com (at master)") expect(out).not_to include("You have changed in the Gemfile") end it "explodes if you unpin a source" do build_git "rack" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path("rack-1.0")}" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "install --deployment" expect(out).to include("deployment mode") expect(out).to include("You have deleted from the Gemfile:\n* source: #{lib_path("rack-1.0")} (at master)") expect(out).not_to include("You have added to the Gemfile") expect(out).not_to include("You have changed in the Gemfile") end it "explodes if you unpin a source, leaving it pinned somewhere else" do build_lib "foo", :path => lib_path("rack/foo") build_git "rack", :path => lib_path("rack") install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path("rack")}" gem "foo", :git => "#{lib_path("rack")}" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "foo", :git => "#{lib_path("rack")}" G bundle "install --deployment" expect(out).to include("deployment mode") expect(out).to include("You have changed in the Gemfile:\n* rack from `no specified source` to `#{lib_path("rack")} (at master)`") expect(out).not_to include("You have added to the Gemfile") expect(out).not_to include("You have deleted from the Gemfile") end it "remembers that the bundle is frozen at runtime" do bundle "install --deployment" gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" gem "rack-obama" G should_be_installed "rack 1.0.0" end end end gemfile/000077500000000000000000000000001446701454400345075ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installgemspec_spec.rb000066400000000000000000000131151446701454400374720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemfilerequire "spec_helper" describe "bundle install from an existing gemspec" do before(:each) do build_gem "bar", :to_system => true build_gem "bar-dev", :to_system => true end it "should install runtime and development dependencies" do build_lib("foo", :path => tmp.join("foo")) do |s| s.write("Gemfile", "source :rubygems\ngemspec") s.add_dependency "bar", "=1.0.0" s.add_development_dependency "bar-dev", '=1.0.0' end install_gemfile <<-G source "file://#{gem_repo2}" gemspec :path => '#{tmp.join("foo")}' G should_be_installed "bar 1.0.0" should_be_installed "bar-dev 1.0.0", :groups => :development end it "that is hidden should install runtime and development dependencies" do build_lib("foo", :path => tmp.join("foo")) do |s| s.write("Gemfile", "source :rubygems\ngemspec") s.add_dependency "bar", "=1.0.0" s.add_development_dependency "bar-dev", '=1.0.0' end FileUtils.mv tmp.join('foo', 'foo.gemspec'), tmp.join('foo', '.gemspec') install_gemfile <<-G source "file://#{gem_repo2}" gemspec :path => '#{tmp.join("foo")}' G should_be_installed "bar 1.0.0" should_be_installed "bar-dev 1.0.0", :groups => :development end it "should handle a list of requirements" do build_gem "baz", "1.0", :to_system => true build_gem "baz", "1.1", :to_system => true build_lib("foo", :path => tmp.join("foo")) do |s| s.write("Gemfile", "source :rubygems\ngemspec") s.add_dependency "baz", ">= 1.0", "< 1.1" end install_gemfile <<-G source "file://#{gem_repo2}" gemspec :path => '#{tmp.join("foo")}' G should_be_installed "baz 1.0" end it "should raise if there are no gemspecs available" do build_lib("foo", :path => tmp.join("foo"), :gemspec => false) error = install_gemfile(<<-G, :expect_err => true) source "file://#{gem_repo2}" gemspec :path => '#{tmp.join("foo")}' G expect(error).to match(/There are no gemspecs at #{tmp.join('foo')}/) end it "should raise if there are too many gemspecs available" do build_lib("foo", :path => tmp.join("foo")) do |s| s.write("foo2.gemspec", "") end error = install_gemfile(<<-G, :expect_err => true) source "file://#{gem_repo2}" gemspec :path => '#{tmp.join("foo")}' G expect(error).to match(/There are multiple gemspecs at #{tmp.join('foo')}/) end it "should pick a specific gemspec" do build_lib("foo", :path => tmp.join("foo")) do |s| s.write("foo2.gemspec", "") s.add_dependency "bar", "=1.0.0" s.add_development_dependency "bar-dev", '=1.0.0' end install_gemfile(<<-G, :expect_err => true) source "file://#{gem_repo2}" gemspec :path => '#{tmp.join("foo")}', :name => 'foo' G should_be_installed "bar 1.0.0" should_be_installed "bar-dev 1.0.0", :groups => :development end it "should use a specific group for development dependencies" do build_lib("foo", :path => tmp.join("foo")) do |s| s.write("foo2.gemspec", "") s.add_dependency "bar", "=1.0.0" s.add_development_dependency "bar-dev", '=1.0.0' end install_gemfile(<<-G, :expect_err => true) source "file://#{gem_repo2}" gemspec :path => '#{tmp.join("foo")}', :name => 'foo', :development_group => :dev G should_be_installed "bar 1.0.0" should_not_be_installed "bar-dev 1.0.0", :groups => :development should_be_installed "bar-dev 1.0.0", :groups => :dev end it "should match a lockfile even if the gemspec defines development dependencies" do build_lib("foo", :path => tmp.join("foo")) do |s| s.write("Gemfile", "source 'file://#{gem_repo1}'\ngemspec") s.add_dependency "actionpack", "=2.3.2" s.add_development_dependency "rake", '=10.0.2' end Dir.chdir(tmp.join("foo")) do bundle "install" # This should really be able to rely on $stderr, but, it's not written # right, so we can't. In fact, this is a bug negation test, and so it'll # ghost pass in future, and will only catch a regression if the message # doesn't change. Exit codes should be used correctly (they can be more # than just 0 and 1). output = bundle("install --deployment") expect(output).not_to match(/You have added to the Gemfile/) expect(output).not_to match(/You have deleted from the Gemfile/) expect(output).not_to match(/install in deployment mode after changing/) end end it "should evaluate the gemspec in its directory" do build_lib("foo", :path => tmp.join("foo")) File.open(tmp.join("foo/foo.gemspec"), "w") do |s| s.write "raise 'ahh' unless Dir.pwd == '#{tmp.join("foo")}'" end install_gemfile <<-G, :expect_err => true gemspec :path => '#{tmp.join("foo")}' G expect(@err).not_to match(/ahh/) end context "when child gemspecs conflict with a released gemspec" do before do # build the "parent" gem that depends on another gem in the same repo build_lib "source_conflict", :path => bundled_app do |s| s.add_dependency "rack_middleware" end # build the "child" gem that is the same version as a released gem, but # has completely different and conflicting dependency requirements build_lib "rack_middleware", "1.0", :path => bundled_app("rack_middleware") do |s| s.add_dependency "rack", "1.0" # anything other than 0.9.1 end end it "should install the child gemspec's deps" do install_gemfile <<-G source "file://#{gem_repo1}" gemspec G should_be_installed "rack 1.0" end end end git_spec.rb000066400000000000000000000570701446701454400366420ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemfilerequire "spec_helper" describe "bundle install with git sources" do describe "when floating on master" do before :each do build_git "foo" do |s| s.executables = "foobar" end install_gemfile <<-G source "file://#{gem_repo1}" git "#{lib_path('foo-1.0')}" do gem 'foo' end G end it "fetches gems" do should_be_installed("foo 1.0") run <<-RUBY require 'foo' puts "WIN" unless defined?(FOO_PREV_REF) RUBY expect(out).to eq("WIN") end it "caches the git repo" do expect(Dir["#{default_bundle_path}/cache/bundler/git/foo-1.0-*"]).to have(1).item end it "caches the evaluated gemspec" do git = update_git "foo" do |s| s.executables = ["foobar"] # we added this the first time, so keep it now s.files = ["bin/foobar"] # updating git nukes the files list foospec = s.to_ruby.gsub(/s\.files.*/, 's.files = `git ls-files -z`.split("\x0")') s.write "foo.gemspec", foospec end bundle "update foo" sha = git.ref_for("master", 11) spec_file = default_bundle_path.join("bundler/gems/foo-1.0-#{sha}/foo.gemspec").to_s ruby_code = Gem::Specification.load(spec_file).to_ruby file_code = File.read(spec_file) expect(file_code).to eq(ruby_code) end it "does not update the git source implicitly" do update_git "foo" in_app_root2 do install_gemfile bundled_app2("Gemfile"), <<-G git "#{lib_path('foo-1.0')}" do gem 'foo' end G end in_app_root do run <<-RUBY require 'foo' puts "fail" if defined?(FOO_PREV_REF) RUBY expect(out).to be_empty end end it "sets up git gem executables on the path" do pending_jruby_shebang_fix bundle "exec foobar" expect(out).to eq("1.0") end it "complains if pinned specs don't exist in the git repo" do build_git "foo" install_gemfile <<-G gem "foo", "1.1", :git => "#{lib_path('foo-1.0')}" G expect(out).to include("Source contains 'foo' at: 1.0") end it "still works after moving the application directory" do bundle "install --path vendor/bundle" FileUtils.mv bundled_app, tmp('bundled_app.bck') Dir.chdir tmp('bundled_app.bck') should_be_installed "foo 1.0" end it "can still install after moving the application directory" do bundle "install --path vendor/bundle" FileUtils.mv bundled_app, tmp('bundled_app.bck') update_git "foo", "1.1", :path => lib_path("foo-1.0") Dir.chdir tmp('bundled_app.bck') gemfile tmp('bundled_app.bck/Gemfile'), <<-G source "file://#{gem_repo1}" git "#{lib_path('foo-1.0')}" do gem 'foo' end gem "rack", "1.0" G bundle "update foo" should_be_installed "foo 1.1", "rack 1.0" end end describe "with an empty git block" do before do build_git "foo" gemfile <<-G source "file://#{gem_repo1}" gem "rack" git "#{lib_path("foo-1.0")}" do # this page left intentionally blank end G end it "does not explode" do bundle "install" should_be_installed "rack 1.0" end end describe "when specifying a revision" do before(:each) do build_git "foo" @revision = revision_for(lib_path("foo-1.0")) update_git "foo" end it "works" do install_gemfile <<-G git "#{lib_path('foo-1.0')}", :ref => "#{@revision}" do gem "foo" end G run <<-RUBY require 'foo' puts "WIN" unless defined?(FOO_PREV_REF) RUBY expect(out).to eq("WIN") end it "works when the revision is a symbol" do install_gemfile <<-G git "#{lib_path('foo-1.0')}", :ref => #{@revision.to_sym.inspect} do gem "foo" end G expect(err).to eq("") run <<-RUBY require 'foo' puts "WIN" unless defined?(FOO_PREV_REF) RUBY expect(out).to eq("WIN") end end describe "when specifying local override" do it "uses the local repository instead of checking a new one out" do # We don't generate it because we actually don't need it # build_git "rack", "0.8" build_git "rack", "0.8", :path => lib_path('local-rack') do |s| s.write "lib/rack.rb", "puts :LOCAL" end gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/at #{lib_path('local-rack')}/) run "require 'rack'" expect(out).to eq("LOCAL") end it "chooses the local repository on runtime" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) update_git "rack", "0.8", :path => lib_path('local-rack') do |s| s.write "lib/rack.rb", "puts :LOCAL" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| run "require 'rack'" expect(out).to eq("LOCAL") end it "updates specs on runtime" do system_gems "nokogiri-1.4.2" build_git "rack", "0.8" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G lockfile0 = File.read(bundled_app("Gemfile.lock")) FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) update_git "rack", "0.8", :path => lib_path('local-rack') do |s| s.add_dependency "nokogiri", "1.4.2" end bundle %|config local.rack #{lib_path('local-rack')}| run "require 'rack'" lockfile1 = File.read(bundled_app("Gemfile.lock")) expect(lockfile1).not_to eq(lockfile0) end it "updates ref on install" do build_git "rack", "0.8" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G lockfile0 = File.read(bundled_app("Gemfile.lock")) FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) update_git "rack", "0.8", :path => lib_path('local-rack') bundle %|config local.rack #{lib_path('local-rack')}| bundle :install lockfile1 = File.read(bundled_app("Gemfile.lock")) expect(lockfile1).not_to eq(lockfile0) end it "explodes if given path does not exist on install" do build_git "rack", "0.8" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/Cannot use local override for rack-0.8 because #{Regexp.escape(lib_path('local-rack').to_s)} does not exist/) end it "explodes if branch is not given on install" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/cannot use local override/i) end it "does not explode if disable_local_branch_check is given" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}" G bundle %|config local.rack #{lib_path('local-rack')}| bundle %|config disable_local_branch_check true| bundle :install expect(out).to match(/Your bundle is complete!/) end it "explodes on different branches on install" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) update_git "rack", "0.8", :path => lib_path('local-rack'), :branch => "another" do |s| s.write "lib/rack.rb", "puts :LOCAL" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/is using branch another but Gemfile specifies master/) end it "explodes on invalid revision on install" do build_git "rack", "0.8" build_git "rack", "0.8", :path => lib_path('local-rack') do |s| s.write "lib/rack.rb", "puts :LOCAL" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/The Gemfile lock is pointing to revision \w+/) end end describe "specified inline" do # TODO: Figure out how to write this test so that it is not flaky depending # on the current network situation. # it "supports private git URLs" do # gemfile <<-G # gem "thingy", :git => "git@notthere.fallingsnow.net:somebody/thingy.git" # G # # bundle :install, :expect_err => true # # # p out # # p err # puts err unless err.empty? # This spec fails randomly every so often # err.should include("notthere.fallingsnow.net") # err.should include("ssh") # end it "installs from git even if a newer gem is available elsewhere" do build_git "rack", "0.8" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}" G should_be_installed "rack 0.8" end it "installs dependencies from git even if a newer gem is available elsewhere" do system_gems "rack-1.0.0" build_lib "rack", "1.0", :path => lib_path('nested/bar') do |s| s.write "lib/rack.rb", "puts 'WIN OVERRIDE'" end build_git "foo", :path => lib_path('nested') do |s| s.add_dependency "rack", "= 1.0" end install_gemfile <<-G source "file://#{gem_repo1}" gem "foo", :git => "#{lib_path('nested')}" G run "require 'rack'" expect(out).to eq('WIN OVERRIDE') end it "correctly unlocks when changing to a git source" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "0.9.1" G build_git "rack", :path => lib_path("rack") install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0", :git => "#{lib_path('rack')}" G should_be_installed "rack 1.0.0" end it "correctly unlocks when changing to a git source without versions" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G build_git "rack", "1.2", :path => lib_path("rack") install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack')}" G should_be_installed "rack 1.2" end end describe "block syntax" do it "pulls all gems from a git block" do build_lib "omg", :path => lib_path('hi2u/omg') build_lib "hi2u", :path => lib_path('hi2u') install_gemfile <<-G path "#{lib_path('hi2u')}" do gem "omg" gem "hi2u" end G should_be_installed "omg 1.0", "hi2u 1.0" end end it "uses a ref if specified" do build_git "foo" @revision = revision_for(lib_path("foo-1.0")) update_git "foo" install_gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}", :ref => "#{@revision}" G run <<-RUBY require 'foo' puts "WIN" unless defined?(FOO_PREV_REF) RUBY expect(out).to eq("WIN") end it "correctly handles cases with invalid gemspecs" do build_git "foo" do |s| s.summary = nil end install_gemfile <<-G source "file://#{gem_repo1}" gem "foo", :git => "#{lib_path('foo-1.0')}" gem "rails", "2.3.2" G should_be_installed "foo 1.0" should_be_installed "rails 2.3.2" end it "runs the gemspec in the context of its parent directory" do build_lib "bar", :path => lib_path("foo/bar"), :gemspec => false do |s| s.write lib_path("foo/bar/lib/version.rb"), %{BAR_VERSION = '1.0'} s.write "bar.gemspec", <<-G $:.unshift Dir.pwd # For 1.9 require 'lib/version' Gem::Specification.new do |s| s.name = 'bar' s.version = BAR_VERSION s.summary = 'Bar' s.files = Dir["lib/**/*.rb"] end G end build_git "foo", :path => lib_path("foo") do |s| s.write "bin/foo", "" end install_gemfile <<-G source "file://#{gem_repo1}" gem "bar", :git => "#{lib_path("foo")}" gem "rails", "2.3.2" G should_be_installed "bar 1.0" should_be_installed "rails 2.3.2" end it "installs from git even if a rubygems gem is present" do build_gem "foo", "1.0", :path => lib_path('fake_foo'), :to_system => true do |s| s.write "lib/foo.rb", "raise 'FAIL'" end build_git "foo", "1.0" install_gemfile <<-G gem "foo", "1.0", :git => "#{lib_path('foo-1.0')}" G should_be_installed "foo 1.0" end it "fakes the gem out if there is no gemspec" do build_git "foo", :gemspec => false install_gemfile <<-G source "file://#{gem_repo1}" gem "foo", "1.0", :git => "#{lib_path('foo-1.0')}" gem "rails", "2.3.2" G should_be_installed("foo 1.0") should_be_installed("rails 2.3.2") end it "catches git errors and spits out useful output" do gemfile <<-G gem "foo", "1.0", :git => "omgomg" G bundle :install, :expect_err => true expect(out).to include("Git error:") expect(err).to include("fatal") expect(err).to include("omgomg") end it "works when the gem path has spaces in it" do build_git "foo", :path => lib_path('foo space-1.0') install_gemfile <<-G gem "foo", :git => "#{lib_path('foo space-1.0')}" G should_be_installed "foo 1.0" end it "handles repos that have been force-pushed" do build_git "forced", "1.0" install_gemfile <<-G git "#{lib_path('forced-1.0')}" do gem 'forced' end G should_be_installed "forced 1.0" update_git "forced" do |s| s.write "lib/forced.rb", "FORCED = '1.1'" end bundle "update" should_be_installed "forced 1.1" Dir.chdir(lib_path('forced-1.0')) do `git reset --hard HEAD^` end bundle "update" should_be_installed "forced 1.0" end it "ignores submodules if :submodule is not passed" do build_git "submodule", "1.0" build_git "has_submodule", "1.0" do |s| s.add_dependency "submodule" end Dir.chdir(lib_path('has_submodule-1.0')) do `git submodule add #{lib_path('submodule-1.0')} submodule-1.0` `git commit -m "submodulator"` end install_gemfile <<-G, :expect_err => true git "#{lib_path('has_submodule-1.0')}" do gem "has_submodule" end G expect(out).to match(/could not find gem 'submodule/i) should_not_be_installed "has_submodule 1.0", :expect_err => true end it "handles repos with submodules" do build_git "submodule", "1.0" build_git "has_submodule", "1.0" do |s| s.add_dependency "submodule" end Dir.chdir(lib_path('has_submodule-1.0')) do `git submodule add #{lib_path('submodule-1.0')} submodule-1.0` `git commit -m "submodulator"` end install_gemfile <<-G git "#{lib_path('has_submodule-1.0')}", :submodules => true do gem "has_submodule" end G should_be_installed "has_submodule 1.0" end it "handles implicit updates when modifying the source info" do git = build_git "foo" install_gemfile <<-G git "#{lib_path('foo-1.0')}" do gem "foo" end G update_git "foo" update_git "foo" install_gemfile <<-G git "#{lib_path('foo-1.0')}", :ref => "#{git.ref_for('HEAD^')}" do gem "foo" end G run <<-RUBY require 'foo' puts "WIN" if FOO_PREV_REF == '#{git.ref_for("HEAD^^")}' RUBY expect(out).to eq("WIN") end it "does not to a remote fetch if the revision is cached locally" do build_git "foo" install_gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G FileUtils.rm_rf(lib_path('foo-1.0')) bundle "install" expect(out).not_to match(/updating/i) end it "doesn't blow up if bundle install is run twice in a row" do build_git "foo" gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G bundle "install" bundle "install", :exitstatus => true expect(exitstatus).to eq(0) end it "does not duplicate git gem sources" do build_lib "foo", :path => lib_path('nested/foo') build_lib "bar", :path => lib_path('nested/bar') build_git "foo", :path => lib_path('nested') build_git "bar", :path => lib_path('nested') gemfile <<-G gem "foo", :git => "#{lib_path('nested')}" gem "bar", :git => "#{lib_path('nested')}" G bundle "install" expect(File.read(bundled_app("Gemfile.lock")).scan('GIT').size).to eq(1) end describe "switching sources" do it "doesn't explode when switching Path to Git sources" do build_gem "foo", "1.0", :to_system => true do |s| s.write "lib/foo.rb", "raise 'fail'" end build_lib "foo", "1.0", :path => lib_path('bar/foo') build_git "bar", "1.0", :path => lib_path('bar') do |s| s.add_dependency 'foo' end install_gemfile <<-G source "file://#{gem_repo1}" gem "bar", :path => "#{lib_path('bar')}" G install_gemfile <<-G source "file://#{gem_repo1}" gem "bar", :git => "#{lib_path('bar')}" G should_be_installed "foo 1.0", "bar 1.0" end it "doesn't explode when switching Gem to Git source" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama" gem "rack", "1.0.0" G build_git "rack", "1.0" do |s| s.write "lib/new_file.rb", "puts 'USING GIT'" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama" gem "rack", "1.0.0", :git => "#{lib_path("rack-1.0")}" G run "require 'new_file'" expect(out).to eq("USING GIT") end end describe "bundle install after the remote has been updated" do it "installs" do build_git "valim" install_gemfile <<-G gem "valim", :git => "file://#{lib_path("valim-1.0")}" G old_revision = revision_for(lib_path("valim-1.0")) update_git "valim" new_revision = revision_for(lib_path("valim-1.0")) lockfile = File.read(bundled_app("Gemfile.lock")) File.open(bundled_app("Gemfile.lock"), "w") do |file| file.puts lockfile.gsub(/revision: #{old_revision}/, "revision: #{new_revision}") end bundle "install" run <<-R require "valim" puts VALIM_PREV_REF R expect(out).to eq(old_revision) end end describe "bundle install --deployment with git sources" do it "works" do build_git "valim", :path => lib_path('valim') install_gemfile <<-G source "file://#{gem_repo1}" gem "valim", "= 1.0", :git => "#{lib_path('valim')}" G simulate_new_machine bundle "install --deployment", :exitstatus => true expect(exitstatus).to eq(0) end end describe "gem install hooks" do it "runs pre-install hooks" do build_git "foo" gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G File.open(lib_path("install_hooks.rb"), "w") do |h| h.write <<-H require 'rubygems' Gem.pre_install_hooks << lambda do |inst| STDERR.puts "Ran pre-install hook: \#{inst.spec.full_name}" end H end bundle :install, :expect_err => true, :requires => [lib_path('install_hooks.rb')] expect(err).to eq("Ran pre-install hook: foo-1.0") end it "runs post-install hooks" do build_git "foo" gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G File.open(lib_path("install_hooks.rb"), "w") do |h| h.write <<-H require 'rubygems' Gem.post_install_hooks << lambda do |inst| STDERR.puts "Ran post-install hook: \#{inst.spec.full_name}" end H end bundle :install, :expect_err => true, :requires => [lib_path('install_hooks.rb')] expect(err).to eq("Ran post-install hook: foo-1.0") end it "complains if the install hook fails" do build_git "foo" gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G File.open(lib_path("install_hooks.rb"), "w") do |h| h.write <<-H require 'rubygems' Gem.pre_install_hooks << lambda do |inst| false end H end bundle :install, :expect_err => true, :requires => [lib_path('install_hooks.rb')] expect(out).to include("failed for foo-1.0") end end context "with an extension" do it "installs the extension" do build_git "foo" do |s| s.add_dependency "rake" s.extensions << "Rakefile" s.write "Rakefile", <<-RUBY task :default do path = File.expand_path("../lib", __FILE__) FileUtils.mkdir_p(path) File.open("\#{path}/foo.rb", "w") do |f| f.puts "FOO = 'YES'" end end RUBY end install_gemfile <<-G source "file://#{gem_repo1}" gem "foo", :git => "#{lib_path('foo-1.0')}" G run <<-R require 'foo' puts FOO R expect(out).to eq("YES") end it "does not prompt to gem install if extension fails" do build_git "foo" do |s| s.add_dependency "rake" s.extensions << "Rakefile" s.write "Rakefile", <<-RUBY task :default do raise end RUBY end install_gemfile <<-G source "file://#{gem_repo1}" gem "foo", :git => "#{lib_path('foo-1.0')}" G expect(out).to include("An error occurred while installing foo (1.0)") expect(out).not_to include("gem install foo") end end it "ignores git environment variables" do build_git "xxxxxx" do |s| s.executables = "xxxxxxbar" end Bundler::SharedHelpers.with_clean_git_env do ENV['GIT_DIR'] = 'bar' ENV['GIT_WORK_TREE'] = 'bar' install_gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" git "#{lib_path('xxxxxx-1.0')}" do gem 'xxxxxx' end G expect(exitstatus).to eq(0) expect(ENV['GIT_DIR']).to eq('bar') expect(ENV['GIT_WORK_TREE']).to eq('bar') end end describe "without git installed" do it "prints a better error message" do build_git "foo" install_gemfile <<-G git "#{lib_path('foo-1.0')}" do gem 'foo' end G bundle "update", :env => {"PATH" => ""} expect(out).to include("You need to install git to be able to use gems from git repositories. For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git") end end end path_spec.rb000066400000000000000000000262021446701454400370040ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemfilerequire "spec_helper" describe "bundle install with explicit source paths" do it "fetches gems" do build_lib "foo" install_gemfile <<-G path "#{lib_path('foo-1.0')}" gem 'foo' G should_be_installed("foo 1.0") end it "supports pinned paths" do build_lib "foo" install_gemfile <<-G gem 'foo', :path => "#{lib_path('foo-1.0')}" G should_be_installed("foo 1.0") end it "supports relative paths" do build_lib "foo" relative_path = lib_path('foo-1.0').relative_path_from(Pathname.new(Dir.pwd)) install_gemfile <<-G gem 'foo', :path => "#{relative_path}" G should_be_installed("foo 1.0") end it "expands paths" do build_lib "foo" relative_path = lib_path('foo-1.0').relative_path_from(Pathname.new('~').expand_path) install_gemfile <<-G gem 'foo', :path => "~/#{relative_path}" G should_be_installed("foo 1.0") end it "expands paths relative to Bundler.root" do build_lib "foo", :path => bundled_app("foo-1.0") install_gemfile <<-G gem 'foo', :path => "./foo-1.0" G bundled_app("subdir").mkpath Dir.chdir(bundled_app("subdir")) do should_be_installed("foo 1.0") end end it "expands paths when comparing locked paths to Gemfile paths" do build_lib "foo", :path => bundled_app("foo-1.0") install_gemfile <<-G gem 'foo', :path => File.expand_path("../foo-1.0", __FILE__) G bundle "install --frozen", :exitstatus => true expect(exitstatus).to eq(0) end it "installs dependencies from the path even if a newer gem is available elsewhere" do system_gems "rack-1.0.0" build_lib "rack", "1.0", :path => lib_path('nested/bar') do |s| s.write "lib/rack.rb", "puts 'WIN OVERRIDE'" end build_lib "foo", :path => lib_path('nested') do |s| s.add_dependency "rack", "= 1.0" end install_gemfile <<-G source "file://#{gem_repo1}" gem "foo", :path => "#{lib_path('nested')}" G run "require 'rack'" expect(out).to eq('WIN OVERRIDE') end it "works" do build_gem "foo", "1.0.0", :to_system => true do |s| s.write "lib/foo.rb", "puts 'FAIL'" end build_lib "omg", "1.0", :path => lib_path("omg") do |s| s.add_dependency "foo" end build_lib "foo", "1.0.0", :path => lib_path("omg/foo") install_gemfile <<-G gem "omg", :path => "#{lib_path('omg')}" G should_be_installed "foo 1.0" end it "supports gemspec syntax" do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.add_dependency "rack", "1.0" end gemfile = <<-G source "file://#{gem_repo1}" gemspec G File.open(lib_path("foo/Gemfile"), "w") {|f| f.puts gemfile } Dir.chdir(lib_path("foo")) do bundle "install" should_be_installed "foo 1.0" should_be_installed "rack 1.0" end end it "supports gemspec syntax with an alternative path" do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.add_dependency "rack", "1.0" end install_gemfile <<-G source "file://#{gem_repo1}" gemspec :path => "#{lib_path("foo")}" G should_be_installed "foo 1.0" should_be_installed "rack 1.0" end it "doesn't automatically unlock dependencies when using the gemspec syntax" do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.add_dependency "rack", ">= 1.0" end Dir.chdir lib_path("foo") install_gemfile lib_path("foo/Gemfile"), <<-G source "file://#{gem_repo1}" gemspec G build_gem "rack", "1.0.1", :to_system => true bundle "install" should_be_installed "foo 1.0" should_be_installed "rack 1.0" end it "doesn't automatically unlock dependencies when using the gemspec syntax and the gem has development dependencies" do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.add_dependency "rack", ">= 1.0" s.add_development_dependency "activesupport" end Dir.chdir lib_path("foo") install_gemfile lib_path("foo/Gemfile"), <<-G source "file://#{gem_repo1}" gemspec G build_gem "rack", "1.0.1", :to_system => true bundle "install" should_be_installed "foo 1.0" should_be_installed "rack 1.0" end it "raises if there are multiple gemspecs" do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.write "bar.gemspec" end install_gemfile <<-G, :exitstatus => true gemspec :path => "#{lib_path("foo")}" G expect(exitstatus).to eq(15) expect(out).to match(/There are multiple gemspecs/) end it "allows :name to be specified to resolve ambiguity" do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.write "bar.gemspec" end install_gemfile <<-G, :exitstatus => true gemspec :path => "#{lib_path("foo")}", :name => "foo" G should_be_installed "foo 1.0" end it "sets up executables" do pending_jruby_shebang_fix build_lib "foo" do |s| s.executables = "foobar" end install_gemfile <<-G path "#{lib_path('foo-1.0')}" gem 'foo' G bundle "exec foobar" expect(out).to eq("1.0") end it "handles directories in bin/" do build_lib "foo" lib_path("foo-1.0").join("foo.gemspec").rmtree lib_path("foo-1.0").join("bin/performance").mkpath install_gemfile <<-G gem 'foo', '1.0', :path => "#{lib_path('foo-1.0')}" G expect(err).to eq("") end it "removes the .gem file after installing" do build_lib "foo" install_gemfile <<-G gem 'foo', :path => "#{lib_path('foo-1.0')}" G expect(lib_path('foo-1.0').join('foo-1.0.gem')).not_to exist end describe "block syntax" do it "pulls all gems from a path block" do build_lib "omg" build_lib "hi2u" install_gemfile <<-G path "#{lib_path}" do gem "omg" gem "hi2u" end G should_be_installed "omg 1.0", "hi2u 1.0" end end it "keeps source pinning" do build_lib "foo", "1.0", :path => lib_path('foo') build_lib "omg", "1.0", :path => lib_path('omg') build_lib "foo", "1.0", :path => lib_path('omg/foo') do |s| s.write "lib/foo.rb", "puts 'FAIL'" end install_gemfile <<-G gem "foo", :path => "#{lib_path('foo')}" gem "omg", :path => "#{lib_path('omg')}" G should_be_installed "foo 1.0" end it "works when the path does not have a gemspec" do build_lib "foo", :gemspec => false gemfile <<-G gem "foo", "1.0", :path => "#{lib_path('foo-1.0')}" G should_be_installed "foo 1.0" should_be_installed "foo 1.0" end it "installs executable stubs" do build_lib "foo" do |s| s.executables = ['foo'] end install_gemfile <<-G gem "foo", :path => "#{lib_path('foo-1.0')}" G bundle "exec foo" expect(out).to eq("1.0") end describe "when the gem version in the path is updated" do before :each do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.add_dependency "bar" end build_lib "bar", "1.0", :path => lib_path("foo/bar") install_gemfile <<-G gem "foo", :path => "#{lib_path('foo')}" G end it "unlocks all gems when the top level gem is updated" do build_lib "foo", "2.0", :path => lib_path("foo") do |s| s.add_dependency "bar" end bundle "install" should_be_installed "foo 2.0", "bar 1.0" end it "unlocks all gems when a child dependency gem is updated" do build_lib "bar", "2.0", :path => lib_path("foo/bar") bundle "install" should_be_installed "foo 1.0", "bar 2.0" end end describe "when dependencies in the path are updated" do before :each do build_lib "foo", "1.0", :path => lib_path("foo") install_gemfile <<-G source "file://#{gem_repo1}" gem "foo", :path => "#{lib_path('foo')}" G end it "gets dependencies that are updated in the path" do build_lib "foo", "1.0", :path => lib_path("foo") do |s| s.add_dependency "rack" end bundle "install" should_be_installed "rack 1.0.0" end end describe "switching sources" do it "doesn't switch pinned git sources to rubygems when pinning the parent gem to a path source" do build_gem "foo", "1.0", :to_system => true do |s| s.write "lib/foo.rb", "raise 'fail'" end build_lib "foo", "1.0", :path => lib_path('bar/foo') build_git "bar", "1.0", :path => lib_path('bar') do |s| s.add_dependency 'foo' end install_gemfile <<-G source "file://#{gem_repo1}" gem "bar", :git => "#{lib_path('bar')}" G install_gemfile <<-G source "file://#{gem_repo1}" gem "bar", :path => "#{lib_path('bar')}" G should_be_installed "foo 1.0", "bar 1.0" end it "switches the source when the gem existed in rubygems and the path was already being used for another gem" do build_lib "foo", "1.0", :path => lib_path("foo") build_gem "bar", "1.0", :to_system => true do |s| s.write "lib/bar.rb", "raise 'fail'" end install_gemfile <<-G source "file://#{gem_repo1}" gem "bar" path "#{lib_path('foo')}" do gem "foo" end G build_lib "bar", "1.0", :path => lib_path("foo/bar") install_gemfile <<-G source "file://#{gem_repo1}" path "#{lib_path('foo')}" do gem "foo" gem "bar" end G should_be_installed "bar 1.0" end end describe "gem install hooks" do it "runs pre-install hooks" do build_git "foo" gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G File.open(lib_path("install_hooks.rb"), "w") do |h| h.write <<-H require 'rubygems' Gem.pre_install_hooks << lambda do |inst| STDERR.puts "Ran pre-install hook: \#{inst.spec.full_name}" end H end bundle :install, :expect_err => true, :requires => [lib_path('install_hooks.rb')] expect(err).to eq("Ran pre-install hook: foo-1.0") end it "runs post-install hooks" do build_git "foo" gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G File.open(lib_path("install_hooks.rb"), "w") do |h| h.write <<-H require 'rubygems' Gem.post_install_hooks << lambda do |inst| STDERR.puts "Ran post-install hook: \#{inst.spec.full_name}" end H end bundle :install, :expect_err => true, :requires => [lib_path('install_hooks.rb')] expect(err).to eq("Ran post-install hook: foo-1.0") end it "complains if the install hook fails" do build_git "foo" gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G File.open(lib_path("install_hooks.rb"), "w") do |h| h.write <<-H require 'rubygems' Gem.pre_install_hooks << lambda do |inst| false end H end bundle :install, :expect_err => true, :requires => [lib_path('install_hooks.rb')] expect(out).to include("failed for foo-1.0") end end end gemfile_spec.rb000066400000000000000000000016641446701454400360550ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire "spec_helper" describe "bundle install" do context "with duplicated gems" do it "will display a warning" do install_gemfile <<-G gem 'rails', '~> 4.0.0' gem 'rails', '~> 4.0.0' G expect(out).to include("more than once") end end context "with --gemfile" do it "finds the gemfile" do gemfile bundled_app("NotGemfile"), <<-G source "file://#{gem_repo1}" gem 'rack' G bundle :install, :gemfile => bundled_app("NotGemfile") ENV['BUNDLE_GEMFILE'] = "NotGemfile" should_be_installed "rack 1.0.0" end end context "with deprecated features" do before :each do in_app_root end it "reports that lib is an invalid option" do gemfile <<-G gem "rack", :lib => "rack" G bundle :install expect(out).to match(/You passed :lib as an option for gem 'rack', but it is invalid/) end end endgems/000077500000000000000000000000001446701454400340325ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installc_ext_spec.rb000066400000000000000000000023161446701454400364750ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "installing a gem with C extensions" do it "installs" do build_repo2 do build_gem "c_extension" do |s| s.extensions = ["ext/extconf.rb"] s.write "ext/extconf.rb", <<-E require "mkmf" name = "c_extension_bundle" dir_config(name) raise "OMG" unless with_config("c_extension") == "hello" create_makefile(name) E s.write "ext/c_extension.c", <<-C #include "ruby.h" VALUE c_extension_true(VALUE self) { return Qtrue; } void Init_c_extension_bundle() { VALUE c_Extension = rb_define_class("CExtension", rb_cObject); rb_define_method(c_Extension, "its_true", c_extension_true, 0); } C s.write "lib/c_extension.rb", <<-C require "c_extension_bundle" C end end gemfile <<-G source "file://#{gem_repo2}" gem "c_extension" G bundle "config build.c_extension --with-c_extension=hello" bundle "install" expect(out).not_to include("extconf.rb failed") run "Bundler.require; puts CExtension.new.its_true" expect(out).to eq("true") end end dependency_api_spec.rb000066400000000000000000000333031446701454400403420ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "gemcutter's dependency API" do let(:source_uri) { "http://localgemserver.test" } it "should use the API" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle :install, :artifice => "endpoint" expect(out).to include("Fetching gem metadata from #{source_uri}") should_be_installed "rack 1.0.0" end it "should URI encode gem names" do gemfile <<-G source "#{source_uri}" gem " sinatra" G bundle :install, :artifice => "endpoint" expect(out).to include("Could not find gem ' sinatra") end it "should handle nested dependencies" do gemfile <<-G source "#{source_uri}" gem "rails" G bundle :install, :artifice => "endpoint" expect(out).to include("Fetching gem metadata from #{source_uri}/...") should_be_installed( "rails 2.3.2", "actionpack 2.3.2", "activerecord 2.3.2", "actionmailer 2.3.2", "activeresource 2.3.2", "activesupport 2.3.2") end it "should handle multiple gem dependencies on the same gem" do gemfile <<-G source "#{source_uri}" gem "net-sftp" G bundle :install, :artifice => "endpoint" should_be_installed "net-sftp 1.1.1" end it "should use the endpoint when using --deployment" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle :install, :artifice => "endpoint" bundle "install --deployment", :artifice => "endpoint" expect(out).to include("Fetching gem metadata from #{source_uri}") should_be_installed "rack 1.0.0" end it "handles git dependencies that are in rubygems" do build_git "foo" do |s| s.executables = "foobar" s.add_dependency "rails", "2.3.2" end gemfile <<-G source "#{source_uri}" git "file:///#{lib_path('foo-1.0')}" do gem 'foo' end G bundle :install, :artifice => "endpoint" should_be_installed("rails 2.3.2") end it "handles git dependencies that are in rubygems using --deployment" do build_git "foo" do |s| s.executables = "foobar" s.add_dependency "rails", "2.3.2" end gemfile <<-G source "#{source_uri}" gem 'foo', :git => "file:///#{lib_path('foo-1.0')}" G bundle :install, :artifice => "endpoint" bundle "install --deployment", :artifice => "endpoint" should_be_installed("rails 2.3.2") end it "doesn't fail if you only have a git gem with no deps when using --deployment" do build_git "foo" gemfile <<-G source "#{source_uri}" gem 'foo', :git => "file:///#{lib_path('foo-1.0')}" G bundle "install", :artifice => "endpoint" bundle "install --deployment", :artifice => "endpoint", :exitstatus => true expect(exitstatus).to eq(0) should_be_installed("foo 1.0") end it "falls back when the API errors out" do simulate_platform mswin gemfile <<-G source "#{source_uri}" gem "rcov" G bundle :install, :fakeweb => "windows" expect(out).to include("Fetching source index from #{source_uri}") should_be_installed "rcov 1.0.0" end it "falls back when hitting the Gemcutter Dependency Limit" do gemfile <<-G source "#{source_uri}" gem "activesupport" gem "actionpack" gem "actionmailer" gem "activeresource" gem "thin" gem "rack" gem "rails" G bundle :install, :artifice => "endpoint_fallback" expect(out).to include("Fetching source index from #{source_uri}") should_be_installed( "activesupport 2.3.2", "actionpack 2.3.2", "actionmailer 2.3.2", "activeresource 2.3.2", "activesupport 2.3.2", "thin 1.0.0", "rack 1.0.0", "rails 2.3.2") end it "falls back when Gemcutter API doesn't return proper Marshal format" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle :install, :artifice => "endpoint_marshal_fail" expect(out).to include("Fetching source index from #{source_uri}") should_be_installed "rack 1.0.0" end it "handles host redirects" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle :install, :artifice => "endpoint_host_redirect" should_be_installed "rack 1.0.0" end it "handles host redirects without Net::HTTP::Persistent" do gemfile <<-G source "#{source_uri}" gem "rack" G FileUtils.mkdir_p lib_path File.open(lib_path("disable_net_http_persistent.rb"), "w") do |h| h.write <<-H module Kernel alias require_without_disabled_net_http require def require(*args) raise LoadError, 'simulated' if args.first == 'openssl' && !caller.grep(/vendored_persistent/).empty? require_without_disabled_net_http(*args) end end H end bundle :install, :artifice => "endpoint_host_redirect", :requires => [lib_path("disable_net_http_persistent.rb")] expect(out).to_not match(/Too many redirects/) should_be_installed "rack 1.0.0" end it "timeouts when Bundler::Fetcher redirects too much" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle :install, :artifice => "endpoint_redirect" expect(out).to match(/Too many redirects/) end context "when --full-index is specified" do it "should use the modern index for install" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle "install --full-index", :artifice => "endpoint" expect(out).to include("Fetching source index from #{source_uri}") should_be_installed "rack 1.0.0" end it "should use the modern index for update" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle "update --full-index", :artifice => "endpoint" expect(out).to include("Fetching source index from #{source_uri}") should_be_installed "rack 1.0.0" end end it "fetches again when more dependencies are found in subsequent sources" do build_repo2 do build_gem "back_deps" do |s| s.add_dependency "foo" end FileUtils.rm_rf Dir[gem_repo2("gems/foo-*.gem")] end gemfile <<-G source "#{source_uri}" source "#{source_uri}/extra" gem "back_deps" G bundle :install, :artifice => "endpoint_extra" should_be_installed "back_deps 1.0" end it "prints API output properly with back deps" do build_repo2 do build_gem "back_deps" do |s| s.add_dependency "foo" end FileUtils.rm_rf Dir[gem_repo2("gems/foo-*.gem")] end gemfile <<-G source "#{source_uri}" source "#{source_uri}/extra" gem "back_deps" G bundle :install, :artifice => "endpoint_extra" expect(out).to include("Fetching gem metadata from http://localgemserver.test/..") expect(out).to include("Fetching source index from http://localgemserver.test/extra") end it "does not fetch every specs if the index of gems is large when doing back deps" do build_repo2 do build_gem "back_deps" do |s| s.add_dependency "foo" end build_gem "missing" # need to hit the limit 1.upto(Bundler::Source::Rubygems::API_REQUEST_LIMIT) do |i| build_gem "gem#{i}" end FileUtils.rm_rf Dir[gem_repo2("gems/foo-*.gem")] end gemfile <<-G source "#{source_uri}" source "#{source_uri}/extra" gem "back_deps" G bundle :install, :artifice => "endpoint_extra_missing" should_be_installed "back_deps 1.0" end it "uses the endpoint if all sources support it" do gemfile <<-G source "#{source_uri}" gem 'foo' G bundle :install, :artifice => "endpoint_api_missing" should_be_installed "foo 1.0" end it "fetches again when more dependencies are found in subsequent sources using --deployment" do build_repo2 do build_gem "back_deps" do |s| s.add_dependency "foo" end FileUtils.rm_rf Dir[gem_repo2("gems/foo-*.gem")] end gemfile <<-G source "#{source_uri}" source "#{source_uri}/extra" gem "back_deps" G bundle :install, :artifice => "endpoint_extra" bundle "install --deployment", :artifice => "endpoint_extra" should_be_installed "back_deps 1.0" end it "does not refetch if the only unmet dependency is bundler" do gemfile <<-G source "#{source_uri}" gem "bundler_dep" G bundle :install, :artifice => "endpoint" expect(out).to include("Fetching gem metadata from #{source_uri}") end it "should install when EndpointSpecification has a bin dir owned by root", :sudo => true do sudo "mkdir -p #{system_gem_path("bin")}" sudo "chown -R root #{system_gem_path("bin")}" gemfile <<-G source "#{source_uri}" gem "rails" G bundle :install, :artifice => "endpoint" should_be_installed "rails 2.3.2" end it "installs the binstubs" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle "install --binstubs", :artifice => "endpoint" gembin "rackup" expect(out).to eq("1.0.0") end it "installs the bins when using --path and uses autoclean" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle "install --path vendor/bundle", :artifice => "endpoint" expect(vendored_gems("bin/rackup")).to exist end it "installs the bins when using --path and uses bundle clean" do gemfile <<-G source "#{source_uri}" gem "rack" G bundle "install --path vendor/bundle --no-clean", :artifice => "endpoint" expect(vendored_gems("bin/rackup")).to exist end it "prints post_install_messages" do gemfile <<-G source "#{source_uri}" gem 'rack-obama' G bundle :install, :artifice => "endpoint" expect(out).to include("Post-install message from rack:") end it "should display the post install message for a dependency" do gemfile <<-G source "#{source_uri}" gem 'rack_middleware' G bundle :install, :artifice => "endpoint" expect(out).to include("Post-install message from rack:") expect(out).to include("Rack's post install message") end context "when using basic authentication" do let(:user) { "user" } let(:password) { "pass" } let(:basic_auth_source_uri) do uri = URI.parse(source_uri) uri.user = user uri.password = password uri end it "passes basic authentication details and strips out creds" do gemfile <<-G source "#{basic_auth_source_uri}" gem "rack" G bundle :install, :artifice => "endpoint_basic_authentication" expect(out).not_to include("#{user}:#{password}") should_be_installed "rack 1.0.0" end it "strips http basic authentication creds for modern index" do gemfile <<-G source "#{basic_auth_source_uri}" gem "rack" G bundle :install, :artifice => "endopint_marshal_fail_basic_authentication" expect(out).not_to include("#{user}:#{password}") should_be_installed "rack 1.0.0" end it "strips http basic auth creds when it can't reach the server" do gemfile <<-G source "#{basic_auth_source_uri}" gem "rack" G bundle :install, :artifice => "endpoint_500" expect(out).not_to include("#{user}:#{password}") end it "does not pass the user / password to different hosts on redirect" do gemfile <<-G source "#{basic_auth_source_uri}" gem "rack" G bundle :install, :artifice => "endpoint_creds_diff_host" should_be_installed "rack 1.0.0" end describe "with no password" do let(:password) { nil } it "passes basic authentication details" do gemfile <<-G source "#{basic_auth_source_uri}" gem "rack" G bundle :install, :artifice => "endpoint_basic_authentication" should_be_installed "rack 1.0.0" end end end context "when ruby is compiled without openssl" do before do # Install a monkeypatch that reproduces the effects of openssl being # missing when the fetcher runs, as happens in real life. The reason # we can't just overwrite openssl.rb is that Artifice uses it. bundled_app("broken_ssl").mkpath bundled_app("broken_ssl/openssl.rb").open("w") do |f| f.write <<-RUBY raise LoadError, "cannot load such file -- openssl" RUBY end end it "explains what to do to get it" do gemfile <<-G source "#{source_uri.gsub(/http/, 'https')}" gem "rack" G bundle :install, :env => {"RUBYOPT" => "-I#{bundled_app("broken_ssl")}"} expect(out).to include("OpenSSL") end end context "when SSL certificate verification fails" do it "explains what happened" do # Install a monkeypatch that reproduces the effects of openssl raising # a certificate validation error when Rubygems tries to connect. gemfile <<-G class Net::HTTP def start raise OpenSSL::SSL::SSLError, "certificate verify failed" end end source "#{source_uri.gsub(/http/, 'https')}" gem "rack" G bundle :install expect(out).to match(/could not verify the SSL certificate/i) end end context ".gemrc with sources is present" do before do File.open(home('.gemrc'), 'w') do |file| file.puts({:sources => ["https://rubygems.org"]}.to_yaml) end end after do home('.gemrc').rmtree end it "uses other sources declared in the Gemfile" do gemfile <<-G source "#{source_uri}" gem 'rack' G bundle "install", :exitstatus => true, :artifice => "endpoint_marshal_fail" expect(exitstatus).to eq(0) end end end env_spec.rb000066400000000000000000000050151446701454400361620ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install with ENV conditionals" do describe "when just setting an ENV key as a string" do before :each do gemfile <<-G source "file://#{gem_repo1}" env "BUNDLER_TEST" do gem "rack" end G end it "excludes the gems when the ENV variable is not set" do bundle :install should_not_be_installed "rack" end it "includes the gems when the ENV variable is set" do ENV['BUNDLER_TEST'] = '1' bundle :install should_be_installed "rack 1.0" end end describe "when just setting an ENV key as a symbol" do before :each do gemfile <<-G source "file://#{gem_repo1}" env :BUNDLER_TEST do gem "rack" end G end it "excludes the gems when the ENV variable is not set" do bundle :install should_not_be_installed "rack" end it "includes the gems when the ENV variable is set" do ENV['BUNDLER_TEST'] = '1' bundle :install should_be_installed "rack 1.0" end end describe "when setting a string to match the env" do before :each do gemfile <<-G source "file://#{gem_repo1}" env "BUNDLER_TEST" => "foo" do gem "rack" end G end it "excludes the gems when the ENV variable is not set" do bundle :install should_not_be_installed "rack" end it "excludes the gems when the ENV variable is set but does not match the condition" do ENV['BUNDLER_TEST'] = '1' bundle :install should_not_be_installed "rack" end it "includes the gems when the ENV variable is set and matches the condition" do ENV['BUNDLER_TEST'] = 'foo' bundle :install should_be_installed "rack 1.0" end end describe "when setting a regex to match the env" do before :each do gemfile <<-G source "file://#{gem_repo1}" env "BUNDLER_TEST" => /foo/ do gem "rack" end G end it "excludes the gems when the ENV variable is not set" do bundle :install should_not_be_installed "rack" end it "excludes the gems when the ENV variable is set but does not match the condition" do ENV['BUNDLER_TEST'] = 'fo' bundle :install should_not_be_installed "rack" end it "includes the gems when the ENV variable is set and matches the condition" do ENV['BUNDLER_TEST'] = 'foobar' bundle :install should_be_installed "rack 1.0" end end end flex_spec.rb000066400000000000000000000163161446701454400363360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle flex_install" do it "installs the gems as expected" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'rack' G should_be_installed "rack 1.0.0" should_be_locked end it "installs even when the lockfile is invalid" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'rack' G should_be_installed "rack 1.0.0" should_be_locked gemfile <<-G source "file://#{gem_repo1}" gem 'rack', '1.0' G bundle :install should_be_installed "rack 1.0.0" should_be_locked end it "keeps child dependencies at the same version" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack-obama" G should_be_installed "rack 1.0.0", "rack-obama 1.0.0" update_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack-obama", "1.0" G should_be_installed "rack 1.0.0", "rack-obama 1.0.0" end describe "adding new gems" do it "installs added gems without updating previously installed gems" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack' G update_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack' gem 'activesupport', '2.3.5' G should_be_installed "rack 1.0.0", 'activesupport 2.3.5' end it "keeps child dependencies pinned" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack-obama" G update_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack-obama" gem "thin" G should_be_installed "rack 1.0.0", 'rack-obama 1.0', 'thin 1.0' end end describe "removing gems" do it "removes gems without changing the versions of remaining gems" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack' gem 'activesupport', '2.3.5' G update_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack' G should_be_installed "rack 1.0.0" should_not_be_installed "activesupport 2.3.5" install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack' gem 'activesupport', '2.3.2' G should_be_installed "rack 1.0.0", 'activesupport 2.3.2' end it "removes top level dependencies when removed from the Gemfile while leaving other dependencies intact" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack' gem 'activesupport', '2.3.5' G update_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack' G should_not_be_installed "activesupport 2.3.5" end it "removes child dependencies" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'rack-obama' gem 'activesupport' G should_be_installed "rack 1.0.0", "rack-obama 1.0.0", "activesupport 2.3.5" update_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem 'activesupport' G should_be_installed 'activesupport 2.3.5' should_not_be_installed "rack-obama", "rack" end end describe "when Gemfile conflicts with lockfile" do before(:each) do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack_middleware" G should_be_installed "rack_middleware 1.0", "rack 0.9.1" build_repo2 update_repo2 do build_gem "rack-obama", "2.0" do |s| s.add_dependency "rack", "=1.2" end build_gem "rack_middleware", "2.0" do |s| s.add_dependency "rack", ">=1.0" end end gemfile <<-G source "file://#{gem_repo2}" gem "rack-obama", "2.0" gem "rack_middleware" G end it "does not install gems whose dependencies are not met" do bundle :install ruby <<-RUBY, :expect_err => true require 'bundler/setup' RUBY expect(err).to match(/could not find gem 'rack-obama/i) end it "suggests bundle update when the Gemfile requires different versions than the lock" do nice_error = <<-E.strip.gsub(/^ {8}/, '') Fetching source index from file:#{gem_repo2}/ Resolving dependencies... Bundler could not find compatible versions for gem "rack": In snapshot (Gemfile.lock): rack (0.9.1) In Gemfile: rack-obama (= 2.0) ruby depends on rack (= 1.2) ruby Running `bundle update` will rebuild your snapshot from scratch, using only the gems in your Gemfile, which may resolve the conflict. E bundle :install, :retry => 0 expect(out).to eq(nice_error) end end describe "subtler cases" do before :each do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rack-obama" G gemfile <<-G source "file://#{gem_repo1}" gem "rack", "0.9.1" gem "rack-obama" G end it "does something" do expect { bundle "install" }.not_to change { File.read(bundled_app('Gemfile.lock')) } expect(out).to include('rack = 0.9.1') expect(out).to include('locked at 1.0.0') expect(out).to include('bundle update rack') end it "should work when you update" do bundle "update rack" end end describe "when adding a new source" do it "updates the lockfile" do build_repo2 install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G install_gemfile <<-G source "file://#{gem_repo1}" source "file://#{gem_repo2}" gem "rack" G lockfile_should_be <<-L GEM remote: file:#{gem_repo1}/ remote: file:#{gem_repo2}/ specs: rack (1.0.0) PLATFORMS ruby DEPENDENCIES rack L end end # This was written to test github issue #636, but it passed. # It's insanoly slow (3.36s) so I'm not going to run it # describe "when a locked child dependency conflicts" do # before(:each) do # build_repo2 do # build_gem "capybara", "0.3.9" do |s| # s.add_dependency "rack", ">= 1.0.0" # end # # build_gem "rack", "1.1.0" # build_gem "rails", "3.0.0.rc4" do |s| # s.add_dependency "rack", "~> 1.1.0" # end # # build_gem "rack", "1.2.1" # build_gem "rails", "3.0.0" do |s| # s.add_dependency "rack", "~> 1.2.1" # end # end # end # # it "prints the correct error message" do # # install Rails 3.0.0.rc # install_gemfile <<-G # source "file://#{gem_repo2}" # gem "rails", "3.0.0.rc4" # gem "capybara", "0.3.9" # G # # # upgrade Rails to 3.0.0 and then install again # install_gemfile <<-G # source "file://#{gem_repo2}" # gem "rails", "3.0.0" # gem "capybara", "0.3.9" # G # # out.should match(/Gemfile.lock/) # end # end end groups_spec.rb000066400000000000000000000202171446701454400367120ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install with groups" do describe "installing with no options" do before :each do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" group :emo do gem "activesupport", "2.3.5" end gem "thin", :groups => [:emo] G end it "installs gems in the default group" do should_be_installed "rack 1.0.0" end it "installs gems in a group block into that group" do should_be_installed "activesupport 2.3.5" load_error_run <<-R, 'activesupport', :default require 'activesupport' puts ACTIVESUPPORT R expect(err).to eq("ZOMG LOAD ERROR") end it "installs gems with inline :groups into those groups" do should_be_installed "thin 1.0" load_error_run <<-R, 'thin', :default require 'thin' puts THIN R expect(err).to eq("ZOMG LOAD ERROR") end it "sets up everything if Bundler.setup is used with no groups" do out = run("require 'rack'; puts RACK") expect(out).to eq('1.0.0') out = run("require 'activesupport'; puts ACTIVESUPPORT") expect(out).to eq('2.3.5') out = run("require 'thin'; puts THIN") expect(out).to eq('1.0') end it "removes old groups when new groups are set up" do load_error_run <<-RUBY, 'thin', :emo Bundler.setup(:default) require 'thin' puts THIN RUBY expect(err).to eq("ZOMG LOAD ERROR") end it "sets up old groups when they have previously been removed" do out = run <<-RUBY, :emo Bundler.setup(:default) Bundler.setup(:default, :emo) require 'thin'; puts THIN RUBY expect(out).to eq('1.0') end end describe "installing --without" do describe "with gems assigned to a single group" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" group :emo do gem "activesupport", "2.3.5" end G end it "installs gems in the default group" do bundle :install, :without => "emo" should_be_installed "rack 1.0.0", :groups => [:default] end it "does not install gems from the excluded group" do bundle :install, :without => "emo" should_not_be_installed "activesupport 2.3.5", :groups => [:default] end it "does not install gems from the previously excluded group" do bundle :install, :without => "emo" should_not_be_installed "activesupport 2.3.5" bundle :install should_not_be_installed "activesupport 2.3.5" end it "does not say it installed gems from the excluded group" do bundle :install, :without => "emo" expect(out).not_to include("activesupport") end it "allows Bundler.setup for specific groups" do bundle :install, :without => "emo" run("require 'rack'; puts RACK", :default) expect(out).to eq('1.0.0') end it "does not effect the resolve" do gemfile <<-G source "file://#{gem_repo1}" gem "activesupport" group :emo do gem "rails", "2.3.2" end G bundle :install, :without => "emo" should_be_installed "activesupport 2.3.2", :groups => [:default] end it "still works on a different machine and excludes gems" do bundle :install, :without => "emo" simulate_new_machine bundle :install, :without => "emo" should_be_installed "rack 1.0.0", :groups => [:default] should_not_be_installed "activesupport 2.3.5", :groups => [:default] end it "still works when BUNDLE_WITHOUT is set" do ENV["BUNDLE_WITHOUT"] = "emo" bundle :install expect(out).not_to include("activesupport") should_be_installed "rack 1.0.0", :groups => [:default] should_not_be_installed "activesupport 2.3.5", :groups => [:default] ENV["BUNDLE_WITHOUT"] = nil end it "clears without when passed an empty list" do bundle :install, :without => "emo" bundle 'install --without ""' should_be_installed "activesupport 2.3.5" end it "doesn't clear without when nothing is passed" do bundle :install, :without => "emo" bundle :install should_not_be_installed "activesupport 2.3.5" end end describe "with gems assigned to multiple groups" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" group :emo, :lolercoaster do gem "activesupport", "2.3.5" end G end it "installs gems in the default group" do bundle :install, :without => "emo lolercoaster" should_be_installed "rack 1.0.0" end it "installs the gem if any of its groups are installed" do bundle "install --without emo" should_be_installed "rack 1.0.0", "activesupport 2.3.5" end describe "with a gem defined multiple times in different groups" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" group :emo do gem "activesupport", "2.3.5" end group :lolercoaster do gem "activesupport", "2.3.5" end G end it "installs the gem w/ option --without emo" do bundle "install --without emo" should_be_installed "activesupport 2.3.5" end it "installs the gem w/ option --without lolercoaster" do bundle "install --without lolercoaster" should_be_installed "activesupport 2.3.5" end it "does not install the gem w/ option --without emo lolercoaster" do bundle "install --without emo lolercoaster" should_not_be_installed "activesupport 2.3.5" end it "does not install the gem w/ option --without 'emo lolercoaster'" do bundle "install --without 'emo lolercoaster'" should_not_be_installed "activesupport 2.3.5" end end end describe "nesting groups" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" group :emo do group :lolercoaster do gem "activesupport", "2.3.5" end end G end it "installs gems in the default group" do bundle :install, :without => "emo lolercoaster" should_be_installed "rack 1.0.0" end it "installs the gem if any of its groups are installed" do bundle "install --without emo" should_be_installed "rack 1.0.0", "activesupport 2.3.5" end end end describe "when loading only the default group" do it "should not load all groups" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :groups => :development G ruby <<-R require "bundler" Bundler.setup :default Bundler.require :default puts RACK begin require "activesupport" rescue LoadError puts "no activesupport" end R expect(out).to include("1.0") expect(out).to include("no activesupport") end end describe "when locked and installed with --without" do before(:each) do build_repo2 system_gems "rack-0.9.1" do install_gemfile <<-G, :without => :rack source "file://#{gem_repo2}" gem "rack" group :rack do gem "rack_middleware" end G end end it "uses the correct versions even if --without was used on the original" do should_be_installed "rack 0.9.1" should_not_be_installed "rack_middleware 1.0" simulate_new_machine bundle :install should_be_installed "rack 0.9.1" should_be_installed "rack_middleware 1.0" end it "does not hit the remote a second time" do FileUtils.rm_rf gem_repo2 bundle "install --without rack" expect(err).to be_empty end end endmirror_spec.rb000066400000000000000000000021741446701454400367070ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install with a mirror configured" do describe "when the mirror does not match the gem source" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "config --local mirror.http://gems.example.org http://gem-mirror.example.org" end it "installs from the normal location" do bundle :install expect(out).to include("Fetching source index from file:#{gem_repo1}") should_be_installed "rack 1.0" end end describe "when the gem source matches a configured mirror" do before :each do gemfile <<-G # This source is bogus and doesn't have the gem we're looking for source "file://#{gem_repo2}" gem "rack" G bundle "config --local mirror.file://#{gem_repo2} file://#{gem_repo1}" end it "installs the gem from the mirror" do bundle :install expect(out).to include("Fetching source index from file:#{gem_repo1}") expect(out).not_to include("Fetching source index from file:#{gem_repo2}") should_be_installed "rack 1.0" end end end packed_spec.rb000066400000000000000000000037551446701454400366320ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install with gem sources" do describe "when cached and locked" do it "does not hit the remote at all" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack" G bundle :pack simulate_new_machine FileUtils.rm_rf gem_repo2 bundle "install --local" should_be_installed "rack 1.0.0" end it "does not hit the remote at all" do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack" G bundle :pack simulate_new_machine FileUtils.rm_rf gem_repo2 bundle "install --deployment" should_be_installed "rack 1.0.0" end it "does not reinstall already-installed gems" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle :pack build_gem "rack", "1.0.0", :path => bundled_app('vendor/cache') do |s| s.write "lib/rack.rb", "raise 'omg'" end bundle :install expect(err).to be_empty should_be_installed "rack 1.0" end it "ignores cached gems for the wrong platform" do simulate_platform "java" do install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G bundle :pack end simulate_new_machine simulate_platform "ruby" do install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" expect(out).to eq("1.0.0 RUBY") end end it "does not update the cache if --no-cache is passed" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundled_app("vendor/cache").mkpath expect(bundled_app("vendor/cache").children).to be_empty bundle "install --no-cache" expect(bundled_app("vendor/cache").children).to be_empty end end end platform_spec.rb000066400000000000000000000105331446701454400372170ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install across platforms" do it "maintains the same lockfile if all gems are compatible across platforms" do lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: rack (0.9.1) PLATFORMS #{not_local} DEPENDENCIES rack G install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G should_be_installed "rack 0.9.1" end it "pulls in the correct platform specific gem" do lockfile <<-G GEM remote: file:#{gem_repo1} specs: platform_specific (1.0) platform_specific (1.0-java) platform_specific (1.0-x86-mswin32) PLATFORMS ruby DEPENDENCIES platform_specific G simulate_platform "java" install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G should_be_installed "platform_specific 1.0 JAVA" end it "works with gems that have different dependencies" do simulate_platform "java" install_gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri" G should_be_installed "nokogiri 1.4.2 JAVA", "weakling 0.0.3" simulate_new_machine simulate_platform "ruby" install_gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri" G should_be_installed "nokogiri 1.4.2" should_not_be_installed "weakling" end it "works the other way with gems that have different dependencies" do simulate_platform "ruby" install_gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri" G simulate_platform "java" bundle "install" should_be_installed "nokogiri 1.4.2 JAVA", "weakling 0.0.3" end it "fetches gems again after changing the version of Ruby" do gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" G bundle "install --path vendor/bundle" new_version = Gem::ConfigMap[:ruby_version] == "1.8" ? "1.9.1" : "1.8" FileUtils.mv(vendored_gems, bundled_app("vendor/bundle", Gem.ruby_engine, new_version)) bundle "install --path vendor/bundle" expect(vendored_gems("gems/rack-1.0.0")).to exist end end describe "bundle install with platform conditionals" do it "installs gems tagged w/ the current platforms" do install_gemfile <<-G source "file://#{gem_repo1}" platforms :#{local_tag} do gem "nokogiri" end G should_be_installed "nokogiri 1.4.2" end it "does not install gems tagged w/ another platforms" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" platforms :#{not_local_tag} do gem "nokogiri" end G should_be_installed "rack 1.0" should_not_be_installed "nokogiri 1.4.2" end it "installs gems tagged w/ the current platforms inline" do install_gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri", :platforms => :#{local_tag} G should_be_installed "nokogiri 1.4.2" end it "does not install gems tagged w/ another platforms inline" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "nokogiri", :platforms => :#{not_local_tag} G should_be_installed "rack 1.0" should_not_be_installed "nokogiri 1.4.2" end it "installs gems tagged w/ the current platform inline" do install_gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri", :platform => :#{local_tag} G should_be_installed "nokogiri 1.4.2" end it "doesn't install gems tagged w/ another platform inline" do install_gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri", :platform => :#{not_local_tag} G should_not_be_installed "nokogiri 1.4.2" end it "does not blow up on sources with all platform-excluded specs" do build_git "foo" install_gemfile <<-G platform :#{not_local_tag} do gem "foo", :git => "#{lib_path('foo-1.0')}" end G bundle :show, :exitstatus => true expect(exitstatus).to eq(0) end end describe "when a gem has no architecture" do it "still installs correctly" do simulate_platform mswin gemfile <<-G # Try to install gem with nil arch source "http://localgemserver.test/" gem "rcov" G bundle :install, :fakeweb => "windows" should_be_installed "rcov 1.0.0" end end post_install_spec.rb000066400000000000000000000026231446701454400401070ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire 'spec_helper' describe "bundle install with gem sources" do describe "when gems include post install messages" do it "should display the post-install messages after installing" do gemfile <<-G source "file://#{gem_repo1}" gem 'rack' gem 'thin' gem 'rack-obama' G bundle :install expect(out).to include("Post-install message from rack:") expect(out).to include("Rack's post install message") expect(out).to include("Post-install message from thin:") expect(out).to include("Thin's post install message") expect(out).to include("Post-install message from rack-obama:") expect(out).to include("Rack-obama's post install message") end end describe "when gems do not include post install messages" do it "should not display any post-install messages" do gemfile <<-G source "file://#{gem_repo1}" gem "activesupport" G bundle :install expect(out).not_to include("Post-install message") end end describe "when a dependecy includes a post install message" do it "should display the post install message" do gemfile <<-G source "file://#{gem_repo1}" gem 'rack_middleware' G bundle :install expect(out).to include("Post-install message from rack:") expect(out).to include("Rack's post install message") end end end resolving_spec.rb000066400000000000000000000065521446701454400374110ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install with gem sources" do describe "install time dependencies" do it "installs gems with implicit rake dependencies" do install_gemfile <<-G source "file://#{gem_repo1}" gem "with_implicit_rake_dep" gem "another_implicit_rake_dep" gem "rake" G run <<-R require 'implicit_rake_dep' require 'another_implicit_rake_dep' puts IMPLICIT_RAKE_DEP puts ANOTHER_IMPLICIT_RAKE_DEP R expect(out).to eq("YES\nYES") end it "installs gems with a dependency with no type" do build_repo2 path = "#{gem_repo2}/#{Gem::MARSHAL_SPEC_DIR}/actionpack-2.3.2.gemspec.rz" spec = Marshal.load(Zlib::Inflate.inflate(File.read(path))) spec.dependencies.each do |d| d.instance_variable_set(:@type, :fail) end File.open(path, 'w') do |f| f.write Gem.deflate(Marshal.dump(spec)) end install_gemfile <<-G source "file://#{gem_repo2}" gem "actionpack", "2.3.2" G should_be_installed "actionpack 2.3.2", "activesupport 2.3.2" end describe "with crazy rubygem plugin stuff" do it "installs plugins" do install_gemfile <<-G source "file://#{gem_repo1}" gem "net_b" G should_be_installed "net_b 1.0" end it "installs plugins depended on by other plugins" do install_gemfile <<-G source "file://#{gem_repo1}" gem "net_a" G should_be_installed "net_a 1.0", "net_b 1.0" end it "installs multiple levels of dependencies" do install_gemfile <<-G source "file://#{gem_repo1}" gem "net_c" gem "net_e" G should_be_installed "net_a 1.0", "net_b 1.0", "net_c 1.0", "net_d 1.0", "net_e 1.0" end context "with ENV['DEBUG_RESOLVER'] set" do before do ENV['DEBUG_RESOLVER'] = '1' end it "produces debug output" do expect(capture(:stdout) do install_gemfile <<-G source "file://#{gem_repo1}" gem "net_c" gem "net_e" G end).to include "==== Iterating ====" end after do ENV['DEBUG_RESOLVER'] = nil end end context "with ENV['DEBUG_RESOLVER_TREE'] set" do before do ENV['DEBUG_RESOLVER_TREE'] = '1' end it "produces debug output" do expect(capture(:stdout) do install_gemfile <<-G source "file://#{gem_repo1}" gem "net_c" gem "net_e" G end).to include " net_b (>= 0) ruby" end after do ENV['DEBUG_RESOLVER_TREE'] = nil end end end describe "when some gems require a different version of ruby" do it "does not try to install those gems" do pending "waiting for a rubygems index that includes ruby version" update_repo gem_repo1 do build_gem "require_ruby" do |s| s.required_ruby_version = "> 9000" end end install_gemfile <<-G source "file://#{gem_repo1}" gem 'require_ruby' G expect(out).to_not include("Gem::InstallError: require_ruby requires Ruby version > 9000") end end end end simple_case_spec.rb000066400000000000000000000240411446701454400376560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install with gem sources" do describe "the simple case" do it "prints output and returns if no dependencies are specified" do gemfile <<-G source "file://#{gem_repo1}" G bundle :install expect(out).to match(/no dependencies/) end it "does not make a lockfile if the install fails" do install_gemfile <<-G, :expect_err => true raise StandardError, "FAIL" G expect(err).to match(/FAIL \(StandardError\)/) expect(bundled_app("Gemfile.lock")).not_to exist end it "creates a Gemfile.lock" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G expect(bundled_app('Gemfile.lock')).to exist end it "creates lock files based on the Gemfile name" do gemfile bundled_app('OmgFile'), <<-G source "file://#{gem_repo1}" gem "rack", "1.0" G bundle 'install --gemfile OmgFile' expect(bundled_app("OmgFile.lock")).to exist end it "doesn't delete the lockfile if one already exists" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'rack' G lockfile = File.read(bundled_app("Gemfile.lock")) install_gemfile <<-G, :expect_err => true raise StandardError, "FAIL" G expect(File.read(bundled_app("Gemfile.lock"))).to eq(lockfile) end it "does not touch the lockfile if nothing changed" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G expect { run '1' }.not_to change { File.mtime(bundled_app('Gemfile.lock')) } end it "fetches gems" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'rack' G expect(default_bundle_path("gems/rack-1.0.0")).to exist should_be_installed("rack 1.0.0") end it "fetches gems when multiple versions are specified" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'rack', "> 0.9", "< 1.0" G expect(default_bundle_path("gems/rack-0.9.1")).to exist should_be_installed("rack 0.9.1") end it "fetches gems when multiple versions are specified take 2" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'rack', "< 1.0", "> 0.9" G expect(default_bundle_path("gems/rack-0.9.1")).to exist should_be_installed("rack 0.9.1") end it "raises an appropriate error when gems are specified using symbols" do status = install_gemfile(<<-G, :exitstatus => true) source "file://#{gem_repo1}" gem :rack G expect(status).to eq(4) end it "pulls in dependencies" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G should_be_installed "actionpack 2.3.2", "rails 2.3.2" end it "does the right version" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "0.9.1" G should_be_installed "rack 0.9.1" end it "does not install the development dependency" do install_gemfile <<-G source "file://#{gem_repo1}" gem "with_development_dependency" G should_be_installed "with_development_dependency 1.0.0" should_not_be_installed "activesupport 2.3.5" end it "resolves correctly" do install_gemfile <<-G source "file://#{gem_repo1}" gem "activemerchant" gem "rails" G should_be_installed "activemerchant 1.0", "activesupport 2.3.2", "actionpack 2.3.2" end it "activates gem correctly according to the resolved gems" do install_gemfile <<-G source "file://#{gem_repo1}" gem "activesupport", "2.3.5" G install_gemfile <<-G source "file://#{gem_repo1}" gem "activemerchant" gem "rails" G should_be_installed "activemerchant 1.0", "activesupport 2.3.2", "actionpack 2.3.2" end it "does not reinstall any gem that is already available locally" do system_gems "activesupport-2.3.2" build_repo2 do build_gem "activesupport", "2.3.2" do |s| s.write "lib/activesupport.rb", "ACTIVESUPPORT = 'fail'" end end install_gemfile <<-G source "file://#{gem_repo2}" gem "activerecord", "2.3.2" G should_be_installed "activesupport 2.3.2" end it "works when the gemfile specifies gems that only exist in the system" do build_gem "foo", :to_system => true install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "foo" G should_be_installed "rack 1.0.0", "foo 1.0.0" end it "prioritizes local gems over remote gems" do build_gem 'rack', '1.0.0', :to_system => true do |s| s.add_dependency "activesupport", "2.3.5" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G should_be_installed "rack 1.0.0", "activesupport 2.3.5" end describe "with a gem that installs multiple platforms" do it "installs gems for the local platform as first choice" do install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" expect(out).to eq("1.0.0 #{Gem::Platform.local}") end it "falls back on plain ruby" do simulate_platform "foo-bar-baz" install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" expect(out).to eq("1.0.0 RUBY") end it "installs gems for java" do simulate_platform "java" install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" expect(out).to eq("1.0.0 JAVA") end it "installs gems for windows" do simulate_platform mswin install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" expect(out).to eq("1.0.0 MSWIN") end end describe "doing bundle install foo" do before do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end it "works" do bundle "install --path vendor" should_be_installed "rack 1.0" end it "allows running bundle install --system without deleting foo" do bundle "install --path vendor" bundle "install --system" FileUtils.rm_rf(bundled_app("vendor")) should_be_installed "rack 1.0" end it "allows running bundle install --system after deleting foo" do bundle "install --path vendor" FileUtils.rm_rf(bundled_app("vendor")) bundle "install --system" should_be_installed "rack 1.0" end end it "finds gems in multiple sources" do build_repo2 update_repo2 install_gemfile <<-G source "file://#{gem_repo1}" source "file://#{gem_repo2}" gem "activesupport", "1.2.3" gem "rack", "1.2" G should_be_installed "rack 1.2", "activesupport 1.2.3" end it "gives a useful error if no sources are set" do install_gemfile <<-G gem "rack" G bundle :install, :expect_err => true expect(out).to match(/Your Gemfile has no gem server sources/i) end it "creates a Gemfile.lock on a blank Gemfile" do install_gemfile <<-G G expect(File.exists?(bundled_app("Gemfile.lock"))).to be_true end it "gracefully handles error when rubygems server is unavailable" do install_gemfile <<-G source "file://#{gem_repo1}" source "http://localhost:9384" gem 'foo' G bundle :install expect(out).to include("Could not fetch specs from http://localhost:9384/") expect(out).not_to include("file://") end it "doesn't blow up when the local .bundle/config is empty" do FileUtils.mkdir_p(bundled_app(".bundle")) FileUtils.touch(bundled_app(".bundle/config")) install_gemfile(<<-G, :exitstatus => true) source "file://#{gem_repo1}" gem 'foo' G expect(exitstatus).to eq(0) end it "doesn't blow up when the global .bundle/config is empty" do FileUtils.mkdir_p("#{Bundler.rubygems.user_home}/.bundle") FileUtils.touch("#{Bundler.rubygems.user_home}/.bundle/config") install_gemfile(<<-G, :exitstatus => true) source "file://#{gem_repo1}" gem 'foo' G expect(exitstatus).to eq(0) end it "reinstalls the gem if the gem dir is missing but the specification file exists" do gemfile(<<-G) source "file://#{gem_repo1}" gem 'foo' G bundle "install --path vendor/bundle" FileUtils.rm_rf(vendored_gems('gems/foo-1.0')) bundle "install" expect(vendored_gems('gems/foo-1.0')).to exist end end describe "when Bundler root contains regex chars" do before do root_dir = tmp("foo[]bar") FileUtils.mkdir_p(root_dir) in_app_root_custom(root_dir) end it "doesn't blow up" do build_lib "foo" gemfile = <<-G gem 'foo', :path => "#{lib_path('foo-1.0')}" G File.open('Gemfile', 'w') do |file| file.puts gemfile end bundle :install, :exitstatus => true expect(exitstatus).to eq(0) end end describe "when requesting a quiet install via --quiet" do it "should be quiet if there are no warnings" do gemfile <<-G source "file://#{gem_repo1}" gem 'rack' G bundle :install, :quiet => true expect(out).to eq("") end it "should still display warnings" do gemfile <<-G gem 'rack' G bundle :install, :quiet => true expect(out).to match(/Your Gemfile has no gem server sources/) end end end standalone_spec.rb000066400000000000000000000145761446701454400375360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "bundle install --standalone" do describe "with simple gems" do before do install_gemfile <<-G, :standalone => true source "file://#{gem_repo1}" gem "rails" G end it "still makes the gems available to normal bundler" do should_be_installed "actionpack 2.3.2", "rails 2.3.2" end it "generates a bundle/bundler/setup.rb" do expect(bundled_app("bundle/bundler/setup.rb")).to exist end it "makes the gems available without bundler" do ruby <<-RUBY, :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK RUBY expect(out).to eq("2.3.2") end it "works on a different system" do FileUtils.mv(bundled_app, "#{bundled_app}2") Dir.chdir("#{bundled_app}2") ruby <<-RUBY, :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK RUBY expect(out).to eq("2.3.2") end end describe "with a combination of gems and git repos" do before do build_git "devise", "1.0" install_gemfile <<-G, :standalone => true source "file://#{gem_repo1}" gem "rails" gem "devise", :git => "#{lib_path('devise-1.0')}" G end it "still makes the gems available to normal bundler" do should_be_installed "actionpack 2.3.2", "rails 2.3.2", "devise 1.0" end it "generates a bundle/bundler/setup.rb" do expect(bundled_app("bundle/bundler/setup.rb")).to exist end it "makes the gems available without bundler" do ruby <<-RUBY, :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "devise" require "actionpack" puts DEVISE puts ACTIONPACK RUBY expect(out).to eq("1.0\n2.3.2") end end describe "with groups" do before do build_git "devise", "1.0" install_gemfile <<-G, :standalone => true source "file://#{gem_repo1}" gem "rails" group :test do gem "rspec" gem "rack-test" end G end it "makes the gems available without bundler" do ruby <<-RUBY, :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" require "spec" require "rack/test" puts ACTIONPACK puts SPEC puts RACK_TEST RUBY expect(out).to eq("2.3.2\n1.2.7\n1.0") end it "allows creating a standalone file with limited groups" do bundle "install --standalone default" load_error_ruby <<-RUBY, 'spec', :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK require "spec" RUBY expect(out).to eq("2.3.2") expect(err).to eq("ZOMG LOAD ERROR") end it "allows --without to limit the groups used in a standalone" do bundle "install --standalone --without test" load_error_ruby <<-RUBY, 'spec', :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK require "spec" RUBY expect(out).to eq("2.3.2") expect(err).to eq("ZOMG LOAD ERROR") end it "allows --path to change the location of the standalone bundle" do bundle "install --standalone --path path/to/bundle" ruby <<-RUBY, :no_lib => true, :expect_err => false $:.unshift File.expand_path("path/to/bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK RUBY expect(out).to eq("2.3.2") end it "allows remembered --without to limit the groups used in a standalone" do bundle "install --without test" bundle "install --standalone" load_error_ruby <<-RUBY, 'spec', :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK require "spec" RUBY expect(out).to eq("2.3.2") expect(err).to eq("ZOMG LOAD ERROR") end end describe "with gemcutter's dependency API" do let(:source_uri) { "http://localgemserver.test" } describe "simple gems" do before do gemfile <<-G source "#{source_uri}" gem "rails" G end it "should run without errors" do bundle "install --standalone", :artifice => "endpoint", :exitstatus => true expect(@exitstatus).to eq(0) end it "still makes the gems available to normal bundler" do bundle "install --standalone", :artifice => "endpoint" should_be_installed "actionpack 2.3.2", "rails 2.3.2" end it "generates a bundle/bundler/setup.rb" do bundle "install --standalone", :artifice => "endpoint" expect(bundled_app("bundle/bundler/setup.rb")).to exist end it "makes the gems available without bundler" do bundle "install --standalone", :artifice => "endpoint" ruby <<-RUBY, :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK RUBY expect(out).to eq("2.3.2") end it "works on a different system" do bundle "install --standalone", :artifice => "endpoint" FileUtils.mv(bundled_app, "#{bundled_app}2") Dir.chdir("#{bundled_app}2") ruby <<-RUBY, :no_lib => true $:.unshift File.expand_path("bundle") require "bundler/setup" require "actionpack" puts ACTIONPACK RUBY expect(out).to eq("2.3.2") end end end describe "with --binstubs" do before do install_gemfile <<-G, :standalone => true, :binstubs => true source "file://#{gem_repo1}" gem "rails" G end it "creates stubs that use the standalone load path" do Dir.chdir(bundled_app) do expect(`bin/rails -v`.chomp).to eql "2.3.2" end end it "creates stubs that can be executed from anywhere" do require 'tmpdir' Dir.chdir(Dir.tmpdir) do expect(`#{bundled_app}/bin/rails -v`.chomp).to eql "2.3.2" end end end end sudo_spec.rb000066400000000000000000000052671446701454400363550ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire "spec_helper" describe "when using sudo", :sudo => true do describe "and BUNDLE_PATH is writable" do context "but BUNDLE_PATH/build_info is not writable" do before do subdir = system_gem_path('cache') subdir.mkpath sudo "chmod u-w #{subdir}" end it "installs" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G expect(out).to_not match(/an error occurred/i) expect(system_gem_path("cache/rack-1.0.0.gem")).to exist should_be_installed "rack 1.0" end end end describe "and GEM_HOME is owned by root" do before :each do chown_system_gems_to_root end it "installs" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", '1.0' gem "thin" G expect(system_gem_path("gems/rack-1.0.0")).to exist expect(system_gem_path("gems/rack-1.0.0").stat.uid).to eq(0) should_be_installed "rack 1.0" end it "installs rake and a gem dependent on rake in the same session" do gemfile <<-G source "file://#{gem_repo1}" gem "rake" gem "another_implicit_rake_dep" G bundle "install" expect(system_gem_path("gems/another_implicit_rake_dep-1.0")).to exist end it "installs when BUNDLE_PATH is owned by root" do bundle_path = tmp("owned_by_root") FileUtils.mkdir_p bundle_path sudo "chown -R root #{bundle_path}" ENV['BUNDLE_PATH'] = bundle_path.to_s install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", '1.0' G expect(bundle_path.join("gems/rack-1.0.0")).to exist expect(bundle_path.join("gems/rack-1.0.0").stat.uid).to eq(0) should_be_installed "rack 1.0" end it "installs when BUNDLE_PATH does not exist" end describe "and BUNDLE_PATH is not writable" do it "installs" do sudo "chmod ugo-w #{default_bundle_path}" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", '1.0' G expect(default_bundle_path("gems/rack-1.0.0")).to exist should_be_installed "rack 1.0" end end describe "and GEM_HOME is not writable" do it "installs" do gem_home = tmp('sudo_gem_home') sudo "mkdir -p #{gem_home}" sudo "chmod ugo-w #{gem_home}" gemfile <<-G source "file://#{gem_repo1}" gem "rack", '1.0' G bundle :install, :env => {'GEM_HOME' => gem_home.to_s, 'GEM_PATH' => nil} expect(gem_home.join('bin/rackup')).to exist should_be_installed "rack 1.0", :env => {'GEM_HOME' => gem_home.to_s, 'GEM_PATH' => nil} end end end win32_spec.rb000066400000000000000000000011441446701454400363330ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/install/gemsrequire 'spec_helper' describe "bundle install with win32-generated lockfile" do it "should read lockfile" do File.open(bundled_app('Gemfile.lock'), 'wb') do |f| f << "GEM\r\n" f << " remote: file:#{gem_repo1}/\r\n" f << " specs:\r\n" f << "\r\n" f << " rack (1.0.0)\r\n" f << "\r\n" f << "PLATFORMS\r\n" f << " ruby\r\n" f << "\r\n" f << "DEPENDENCIES\r\n" f << " rack\r\n" end install_gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" G expect(@exitstatus).to eq(0) end end gemspecs_spec.rb000066400000000000000000000023541446701454400362500ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire 'spec_helper' describe "bundle install" do describe "when a gem has a YAML gemspec" do before :each do build_repo2 do build_gem "yaml_spec", :gemspec => :yaml end end it "still installs correctly" do gemfile <<-G source "file://#{gem_repo2}" gem "yaml_spec" G bundle :install expect(err).to be_empty end it "still installs correctly when using path" do build_lib 'yaml_spec', :gemspec => :yaml install_gemfile <<-G gem 'yaml_spec', :path => "#{lib_path('yaml_spec-1.0')}" G expect(err).to eq("") end end it "should use gemspecs in the system cache when available" do gemfile <<-G source "http://localtestserver.gem" gem 'rack' G FileUtils.mkdir_p "#{tmp}/gems/system/specifications" File.open("#{tmp}/gems/system/specifications/rack-1.0.0.gemspec", 'w+') do |f| spec = Gem::Specification.new do |s| s.name = 'rack' s.version = '1.0.0' s.add_runtime_dependency 'activesupport', '2.3.2' end f.write spec.to_ruby end bundle :install, :artifice => 'endpoint_marshal_fail' # force gemspec load should_be_installed "activesupport 2.3.2" end endpath_spec.rb000066400000000000000000000101021446701454400353640ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire "spec_helper" describe "bundle install" do describe "with --path" do before :each do build_gem "rack", "1.0.0", :to_system => true do |s| s.write "lib/rack.rb", "puts 'FAIL'" end gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end it "does not use available system gems with bundle --path vendor/bundle" do bundle "install --path vendor/bundle" should_be_installed "rack 1.0.0" end it "handles paths with regex characters in them" do dir = bundled_app("bun++dle") dir.mkpath Dir.chdir(dir) do bundle "install --path vendor/bundle" expect(out).to include("installed into ./vendor/bundle") end dir.rmtree end it "prints a warning to let the user know what has happened with bundle --path vendor/bundle" do bundle "install --path vendor/bundle" expect(out).to include("It was installed into ./vendor") end it "disallows --path vendor/bundle --system" do bundle "install --path vendor/bundle --system" expect(out).to include("Please choose.") end it "remembers to disable system gems after the first time with bundle --path vendor/bundle" do bundle "install --path vendor/bundle" FileUtils.rm_rf bundled_app('vendor') bundle "install" expect(vendored_gems('gems/rack-1.0.0')).to be_directory should_be_installed "rack 1.0.0" end end describe "when BUNDLE_PATH or the global path config is set" do before :each do build_lib "rack", "1.0.0", :to_system => true do |s| s.write "lib/rack.rb", "raise 'FAIL'" end gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end def set_bundle_path(type, location) if type == :env ENV["BUNDLE_PATH"] = location elsif type == :global bundle "config path #{location}", "no-color" => nil end end [:env, :global].each do |type| it "installs gems to a path if one is specified" do set_bundle_path(type, bundled_app("vendor2").to_s) bundle "install --path vendor/bundle" expect(vendored_gems("gems/rack-1.0.0")).to be_directory expect(bundled_app("vendor2")).not_to be_directory should_be_installed "rack 1.0.0" end it "installs gems to BUNDLE_PATH with #{type}" do set_bundle_path(type, bundled_app("vendor").to_s) bundle :install expect(bundled_app('vendor/gems/rack-1.0.0')).to be_directory should_be_installed "rack 1.0.0" end it "installs gems to BUNDLE_PATH relative to root when relative" do set_bundle_path(type, "vendor") FileUtils.mkdir_p bundled_app('lol') Dir.chdir(bundled_app('lol')) do bundle :install end expect(bundled_app('vendor/gems/rack-1.0.0')).to be_directory should_be_installed "rack 1.0.0" end end it "installs gems to BUNDLE_PATH from .bundle/config" do config "BUNDLE_PATH" => bundled_app("vendor/bundle").to_s bundle :install expect(vendored_gems('gems/rack-1.0.0')).to be_directory should_be_installed "rack 1.0.0" end it "sets BUNDLE_PATH as the first argument to bundle install" do bundle "install --path ./vendor/bundle" expect(vendored_gems('gems/rack-1.0.0')).to be_directory should_be_installed "rack 1.0.0" end it "disables system gems when passing a path to install" do # This is so that vendored gems can be distributed to others build_gem "rack", "1.1.0", :to_system => true bundle "install --path ./vendor/bundle" expect(vendored_gems('gems/rack-1.0.0')).to be_directory should_be_installed "rack 1.0.0" end end describe "to a dead symlink" do before do in_app_root do `ln -s /tmp/idontexist bundle` end end it "reports the symlink is dead" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "install --path bundle" expect(out).to match(/invalid symlink/) end end endpost_bundle_message_spec.rb000066400000000000000000000116751446701454400404720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire 'spec_helper' describe "post bundle message" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", "2.3.5", :group => [:emo, :test] group :test do gem "rspec" end gem "rack-obama", :group => :obama G end let(:bundle_show_message) {"Use `bundle show [gemname]` to see where a bundled gem is installed."} let(:bundle_deployment_message) {"It was installed into ./vendor"} let(:bundle_complete_message) {"Your bundle is complete!"} let(:bundle_updated_message) {"Your bundle is updated!"} describe "for fresh bundle install" do it "without any options" do bundle :install expect(out).to include(bundle_show_message) expect(out).not_to include("Gems in the group") expect(out).to include(bundle_complete_message) end it "with --without one group" do bundle "install --without emo" expect(out).to include(bundle_show_message) expect(out).to include("Gems in the group emo were not installed") expect(out).to include(bundle_complete_message) end it "with --without two groups" do bundle "install --without emo test" expect(out).to include(bundle_show_message) expect(out).to include("Gems in the groups emo and test were not installed") expect(out).to include(bundle_complete_message) end it "with --without more groups" do bundle "install --without emo obama test" expect(out).to include(bundle_show_message) expect(out).to include("Gems in the groups emo, obama and test were not installed") expect(out).to include(bundle_complete_message) end describe "with --path and" do it "without any options" do bundle "install --path vendor" expect(out).to include(bundle_deployment_message) expect(out).to_not include("Gems in the group") expect(out).to include(bundle_complete_message) end it "with --without one group" do bundle "install --without emo --path vendor" expect(out).to include(bundle_deployment_message) expect(out).to include("Gems in the group emo were not installed") expect(out).to include(bundle_complete_message) end it "with --without two groups" do bundle "install --without emo test --path vendor" expect(out).to include(bundle_deployment_message) expect(out).to include("Gems in the groups emo and test were not installed") expect(out).to include(bundle_complete_message) end it "with --without more groups" do bundle "install --without emo obama test --path vendor" expect(out).to include(bundle_deployment_message) expect(out).to include("Gems in the groups emo, obama and test were not installed") expect(out).to include(bundle_complete_message) end end end describe "for second bundle install run" do it "without any options" do 2.times { bundle :install } expect(out).to include(bundle_show_message) expect(out).to_not include("Gems in the groups") expect(out).to include(bundle_complete_message) end it "with --without one group" do bundle "install --without emo" bundle :install expect(out).to include(bundle_show_message) expect(out).to include("Gems in the group emo were not installed") expect(out).to include(bundle_complete_message) end it "with --without two groups" do bundle "install --without emo test" bundle :install expect(out).to include(bundle_show_message) expect(out).to include("Gems in the groups emo and test were not installed") expect(out).to include(bundle_complete_message) end it "with --without more groups" do bundle "install --without emo obama test" bundle :install expect(out).to include(bundle_show_message) expect(out).to include("Gems in the groups emo, obama and test were not installed") expect(out).to include(bundle_complete_message) end end describe "for bundle update" do it "without any options" do bundle :update expect(out).not_to include("Gems in the groups") expect(out).to include(bundle_updated_message) end it "with --without one group" do bundle :install, :without => :emo bundle :update expect(out).to include("Gems in the group emo were not installed") expect(out).to include(bundle_updated_message) end it "with --without two groups" do bundle "install --without emo test" bundle :update expect(out).to include("Gems in the groups emo and test were not installed") expect(out).to include(bundle_updated_message) end it "with --without more groups" do bundle "install --without emo obama test" bundle :update expect(out).to include("Gems in the groups emo, obama and test were not installed") expect(out).to include(bundle_updated_message) end end end prereleases_spec.rb000066400000000000000000000016771446701454400367630ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire 'spec_helper' describe "bundle install" do describe "when prerelease gems are available" do it "finds prereleases" do install_gemfile <<-G source "file://#{gem_repo1}" gem "not_released" G should_be_installed "not_released 1.0.pre" end it "uses regular releases if available" do install_gemfile <<-G source "file://#{gem_repo1}" gem "has_prerelease" G should_be_installed "has_prerelease 1.0" end it "uses prereleases if requested" do install_gemfile <<-G source "file://#{gem_repo1}" gem "has_prerelease", "1.1.pre" G should_be_installed "has_prerelease 1.1.pre" end end describe "when prerelease gems are not available" do it "still works" do build_repo3 install_gemfile <<-G source "file://#{gem_repo3}" gem "rack" G should_be_installed "rack 1.0" end end endsecurity_policy_spec.rb000066400000000000000000000045321446701454400376700ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire "spec_helper" require "rubygems/security" # unfortunately, testing signed gems with a provided CA is extremely difficult # as 'gem cert' is currently the only way to add CAs to the system. describe "policies with unsigned gems" do before do build_security_repo gemfile <<-G source "file://#{security_repo}" gem "rack" gem "signed_gem" G end it "will work after you try to deploy without a lock" do bundle "install --deployment" bundle :install, :exitstatus => true expect(exitstatus).to eq(0) should_be_installed "rack 1.0", "signed_gem 1.0" end it "will fail when given invalid security policy" do bundle "install --trust-policy=InvalidPolicyName" expect(out).to include("Rubygems doesn't know about trust policy") end it "will fail with High Security setting due to presence of unsigned gem" do bundle "install --trust-policy=HighSecurity" expect(out).to include("security policy didn't allow") end # This spec will fail on Rubygems 2 rc1 due to a bug in policy.rb. the bug is fixed in rc3. it "will fail with Medium Security setting due to presence of unsigned gem", :unless => ENV['RGV'] == "v2.0.0.rc.1" do bundle "install --trust-policy=MediumSecurity" expect(out).to include("security policy didn't allow") end it "will succeed with no policy" do bundle "install", :exitstatus => true expect(exitstatus).to eq(0) end end describe "policies with signed gems and no CA" do before do build_security_repo gemfile <<-G source "file://#{security_repo}" gem "signed_gem" G end it "will fail with High Security setting, gem is self-signed" do bundle "install --trust-policy=HighSecurity" expect(out).to include("security policy didn't allow") end it "will fail with Medium Security setting, gem is self-signed" do bundle "install --trust-policy=MediumSecurity" expect(out).to include("security policy didn't allow") end it "will succeed with Low Security setting, low security accepts self signed gem" do bundle "install --trust-policy=LowSecurity", :exitstatus => true expect(exitstatus).to eq(0) should_be_installed "signed_gem 1.0" end it "will succeed with no policy" do bundle "install", :exitstatus => true expect(exitstatus).to eq(0) should_be_installed "signed_gem 1.0" end end upgrade_spec.rb000066400000000000000000000012131446701454400360620ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/installrequire "spec_helper" describe "bundle install for the first time with v1.0" do before :each do in_app_root gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end it "removes lockfiles in 0.9 YAML format" do File.open("Gemfile.lock", "w"){|f| YAML.dump({}, f) } bundle :install expect(File.read("Gemfile.lock")).not_to match(/^---/) end it "removes env.rb if it exists" do bundled_app.join(".bundle").mkdir bundled_app.join(".bundle/environment.rb").open("w"){|f| f.write("raise 'nooo'") } bundle :install expect(bundled_app.join(".bundle/environment.rb")).not_to exist end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/lock/000077500000000000000000000000001446701454400324405ustar00rootroot00000000000000git_spec.rb000066400000000000000000000012551446701454400345060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/lockrequire "spec_helper" describe "bundle lock with git gems" do before :each do build_git "foo" install_gemfile <<-G gem 'foo', :git => "#{lib_path('foo-1.0')}" G end it "doesn't break right after running lock" do should_be_installed "foo 1.0.0" end it "locks a git source to the current ref" do update_git "foo" bundle :install run <<-RUBY require 'foo' puts "WIN" unless defined?(FOO_PREV_REF) RUBY expect(out).to eq("WIN") end it "provides correct #full_gem_path" do run <<-RUBY puts Bundler.rubygems.find_name('foo').first.full_gem_path RUBY expect(out).to eq(bundle("show foo")) end end lockfile_spec.rb000066400000000000000000000424031446701454400355130ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/lockrequire "spec_helper" describe "the lockfile format" do include Bundler::GemHelpers it "generates a simple lockfile for a single source, gem" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES rack G end it "generates a simple lockfile for a single source, gem with dependencies" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) rack-obama (1.0) rack PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES rack-obama G end it "generates a simple lockfile for a single source, gem with a version requirement" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama", ">= 1.0" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) rack-obama (1.0) rack PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES rack-obama (>= 1.0) G end it "generates lockfiles with multiple requirements" do install_gemfile <<-G source "file://#{gem_repo1}" gem "net-sftp" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: net-sftp (1.1.1) net-ssh (>= 1.0.0, < 1.99.0) net-ssh (1.0) PLATFORMS ruby DEPENDENCIES net-sftp G should_be_installed "net-sftp 1.1.1", "net-ssh 1.0.0" end it "generates a simple lockfile for a single pinned source, gem with a version requirement" do git = build_git "foo" install_gemfile <<-G gem "foo", :git => "#{lib_path("foo-1.0")}" G lockfile_should_be <<-G GIT remote: #{lib_path("foo-1.0")} revision: #{git.ref_for('master')} specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo! G end it "does not assplode when a platform specific dependency is present and the Gemfile has not been resolved on that platform" do build_lib "omg", :path => lib_path('omg') gemfile <<-G source "file://#{gem_repo1}" platforms :#{not_local_tag} do gem "omg", :path => "#{lib_path('omg')}" end gem "rack" G lockfile <<-L GIT remote: git://github.com/nex3/haml.git revision: 8a2271f specs: GEM remote: file://#{gem_repo1}/ specs: rack (1.0.0) PLATFORMS #{not_local} DEPENDENCIES omg! rack L bundle "install" should_be_installed "rack 1.0.0" end it "serializes global git sources" do git = build_git "foo" install_gemfile <<-G git "#{lib_path('foo-1.0')}" do gem "foo" end G lockfile_should_be <<-G GIT remote: #{lib_path('foo-1.0')} revision: #{git.ref_for('master')} specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo! G end it "generates a lockfile with a ref for a single pinned source, git gem with a branch requirement" do git = build_git "foo" update_git "foo", :branch => "omg" install_gemfile <<-G gem "foo", :git => "#{lib_path("foo-1.0")}", :branch => "omg" G lockfile_should_be <<-G GIT remote: #{lib_path("foo-1.0")} revision: #{git.ref_for('omg')} branch: omg specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo! G end it "generates a lockfile with a ref for a single pinned source, git gem with a tag requirement" do git = build_git "foo" update_git "foo", :tag => "omg" install_gemfile <<-G gem "foo", :git => "#{lib_path("foo-1.0")}", :tag => "omg" G lockfile_should_be <<-G GIT remote: #{lib_path("foo-1.0")} revision: #{git.ref_for('omg')} tag: omg specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo! G end it "serializes pinned path sources to the lockfile" do build_lib "foo" install_gemfile <<-G gem "foo", :path => "#{lib_path("foo-1.0")}" G lockfile_should_be <<-G PATH remote: #{lib_path("foo-1.0")} specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo! G end it "lists gems alphabetically" do install_gemfile <<-G source "file://#{gem_repo1}" gem "thin" gem "actionpack" gem "rack-obama" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: actionpack (2.3.2) activesupport (= 2.3.2) activesupport (2.3.2) rack (1.0.0) rack-obama (1.0) rack thin (1.0) rack PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES actionpack rack-obama thin G end it "orders dependencies' dependencies in alphabetical order" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: actionmailer (2.3.2) activesupport (= 2.3.2) actionpack (2.3.2) activesupport (= 2.3.2) activerecord (2.3.2) activesupport (= 2.3.2) activeresource (2.3.2) activesupport (= 2.3.2) activesupport (2.3.2) rails (2.3.2) actionmailer (= 2.3.2) actionpack (= 2.3.2) activerecord (= 2.3.2) activeresource (= 2.3.2) rake (= 10.0.2) rake (10.0.2) PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES rails G end it "orders dependencies by version" do install_gemfile <<-G source "file://#{gem_repo1}" gem 'double_deps' G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: double_deps (1.0) net-ssh net-ssh (>= 1.0.0) net-ssh (1.0) PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES double_deps G end it "does not add the :require option to the lockfile" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama", ">= 1.0", :require => "rack/obama" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) rack-obama (1.0) rack PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES rack-obama (>= 1.0) G end it "does not add the :group option to the lockfile" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack-obama", ">= 1.0", :group => :test G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) rack-obama (1.0) rack PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES rack-obama (>= 1.0) G end it "stores relative paths when the path is provided in a relative fashion and in Gemfile dir" do build_lib "foo", :path => bundled_app('foo') install_gemfile <<-G path "foo" gem "foo" G lockfile_should_be <<-G PATH remote: foo specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo G end it "stores relative paths when the path is provided in a relative fashion and is above Gemfile dir" do build_lib "foo", :path => bundled_app(File.join('..', 'foo')) install_gemfile <<-G path "../foo" gem "foo" G lockfile_should_be <<-G PATH remote: ../foo specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo G end it "stores relative paths when the path is provided in an absolute fashion but is relative" do build_lib "foo", :path => bundled_app('foo') install_gemfile <<-G path File.expand_path("../foo", __FILE__) gem "foo" G lockfile_should_be <<-G PATH remote: foo specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo G end it "stores relative paths when the path is provided for gemspec" do build_lib("foo", :path => tmp.join("foo")) install_gemfile <<-G gemspec :path => "../foo" G lockfile_should_be <<-G PATH remote: ../foo specs: foo (1.0) GEM specs: PLATFORMS #{generic(Gem::Platform.local)} DEPENDENCIES foo! G end it "keeps existing platforms in the lockfile" do lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) PLATFORMS java DEPENDENCIES rack G install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G platforms = ['java', generic(Gem::Platform.local).to_s].sort lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) PLATFORMS #{platforms[0]} #{platforms[1]} DEPENDENCIES rack G end it "persists the spec's platform to the lockfile" do build_gem "platform_specific", "1.0.0", :to_system => true do |s| s.platform = Gem::Platform.new('universal-java-16') end simulate_platform "universal-java-16" install_gemfile <<-G source "file://#{gem_repo1}" gem "platform_specific" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: platform_specific (1.0-java) PLATFORMS java DEPENDENCIES platform_specific G end it "does not add duplicate gems" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: activesupport (2.3.5) rack (1.0.0) PLATFORMS ruby DEPENDENCIES activesupport rack G end it "does not add duplicate dependencies" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rack" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) PLATFORMS ruby DEPENDENCIES rack G end it "does not add duplicate dependencies with versions" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0" gem "rack", "1.0" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) PLATFORMS ruby DEPENDENCIES rack (= 1.0) G end it "does not add duplicate dependencies in different groups" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0", :group => :one gem "rack", "1.0", :group => :two G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0.0) PLATFORMS ruby DEPENDENCIES rack (= 1.0) G end it "raises if two different versions are used" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0" gem "rack", "1.1" G expect(bundled_app("Gemfile.lock")).not_to exist expect(out).to include "rack (= 1.0) and rack (= 1.1)" end it "raises if two different sources are used" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "rack", :git => "git://hubz.com" G expect(bundled_app("Gemfile.lock")).not_to exist expect(out).to include "rack (>= 0) should come from an unspecified source and git://hubz.com (at master)" end it "works correctly with multiple version dependencies" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "> 0.9", "< 1.0" G lockfile_should_be <<-G GEM remote: file:#{gem_repo1}/ specs: rack (0.9.1) PLATFORMS ruby DEPENDENCIES rack (> 0.9, < 1.0) G end # Some versions of the Bundler 1.1 RC series introduced corrupted # lockfiles. There were two major problems: # # * multiple copies of the same GIT section appeared in the lockfile # * when this happened, those sections got multiple copies of gems # in those sections. it "fixes corrupted lockfiles" do build_git "omg", :path => lib_path('omg') revision = revision_for(lib_path('omg')) gemfile <<-G source "file://#{gem_repo1}" gem "omg", :git => "#{lib_path('omg')}", :branch => 'master' G bundle "install --path vendor" should_be_installed "omg 1.0" # Create a Gemfile.lock that has duplicate GIT sections lockfile <<-L GIT remote: #{lib_path('omg')} revision: #{revision} branch: master specs: omg (1.0) GIT remote: #{lib_path('omg')} revision: #{revision} branch: master specs: omg (1.0) GEM remote: file:#{gem_repo1}/ specs: PLATFORMS #{local} DEPENDENCIES omg! L FileUtils.rm_rf(bundled_app('vendor')) bundle "install" should_be_installed "omg 1.0" # Confirm that duplicate specs do not appear expect(File.read(bundled_app('Gemfile.lock'))).to eq(strip_whitespace(<<-L)) GIT remote: #{lib_path('omg')} revision: #{revision} branch: master specs: omg (1.0) GEM remote: file:#{gem_repo1}/ specs: PLATFORMS #{local} DEPENDENCIES omg! L end describe "a line ending" do def set_lockfile_mtime_to_known_value time = Time.local(2000, 1, 1, 0, 0, 0) File.utime(time, time, bundled_app('Gemfile.lock')) end before(:each) do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "rack" G set_lockfile_mtime_to_known_value end it "generates Gemfile.lock with \\n line endings" do expect(File.read(bundled_app("Gemfile.lock"))).not_to match("\r\n") should_be_installed "rack 1.0" end context "during updates" do it "preserves Gemfile.lock \\n line endings" do update_repo2 expect { bundle "update" }.to change { File.mtime(bundled_app('Gemfile.lock')) } expect(File.read(bundled_app("Gemfile.lock"))).not_to match("\r\n") should_be_installed "rack 1.2" end it "preserves Gemfile.lock \\n\\r line endings" do update_repo2 win_lock = File.read(bundled_app("Gemfile.lock")).gsub(/\n/, "\r\n") File.open(bundled_app("Gemfile.lock"), "wb"){|f| f.puts(win_lock) } set_lockfile_mtime_to_known_value expect { bundle "update" }.to change { File.mtime(bundled_app('Gemfile.lock')) } expect(File.read(bundled_app("Gemfile.lock"))).to match("\r\n") should_be_installed "rack 1.2" end end context "when nothing changes" do it "preserves Gemfile.lock \\n line endings" do expect { ruby <<-RUBY require 'rubygems' require 'bundler' Bundler.setup RUBY }.not_to change { File.mtime(bundled_app('Gemfile.lock')) } end it "preserves Gemfile.lock \\n\\r line endings" do win_lock = File.read(bundled_app("Gemfile.lock")).gsub(/\n/, "\r\n") File.open(bundled_app("Gemfile.lock"), "wb"){|f| f.puts(win_lock) } set_lockfile_mtime_to_known_value expect { ruby <<-RUBY require 'rubygems' require 'bundler' Bundler.setup RUBY }.not_to change { File.mtime(bundled_app('Gemfile.lock')) } end end end it "refuses to install if Gemfile.lock contains conflict markers" do lockfile <<-L GEM remote: file://#{gem_repo1}/ specs: <<<<<<< rack (1.0.0) ======= rack (1.0.1) >>>>>>> PLATFORMS ruby DEPENDENCIES rack L error = install_gemfile(<<-G, :expect_err => true) source "file://#{gem_repo1}" gem "rack" G expect(error).to match(/your Gemfile.lock contains merge conflicts/i) expect(error).to match(/git checkout HEAD -- Gemfile.lock/i) end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/other/000077500000000000000000000000001446701454400326315ustar00rootroot00000000000000bundle_ruby_spec.rb000066400000000000000000000057261446701454400364350ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/otherrequire "spec_helper" describe "bundle_ruby" do context "without patchlevel" do it "returns the ruby version" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.9.3", :engine => 'ruby', :engine_version => '1.9.3' gem "foo" G bundle_ruby expect(out).to eq("ruby 1.9.3") end it "engine defaults to MRI" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.9.3" gem "foo" G bundle_ruby expect(out).to eq("ruby 1.9.3") end it "handles jruby" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'jruby', :engine_version => '1.6.5' gem "foo" G bundle_ruby expect(out).to eq("ruby 1.8.7 (jruby 1.6.5)") end it "handles rbx" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'rbx', :engine_version => '1.2.4' gem "foo" G bundle_ruby expect(out).to eq("ruby 1.8.7 (rbx 1.2.4)") end it "raises an error if engine is used but engine version is not" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'rbx' gem "foo" G bundle_ruby :exitstatus => true expect(exitstatus).not_to eq(0) bundle_ruby expect(out).to eq("Please define :engine_version") end it "raises an error if engine_version is used but engine is not" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine_version => '1.2.4' gem "foo" G bundle_ruby :exitstatus => true expect(exitstatus).not_to eq(0) bundle_ruby expect(out).to eq("Please define :engine") end it "raises an error if engine version doesn't match ruby version for MRI" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'ruby', :engine_version => '1.2.4' gem "foo" G bundle_ruby :exitstatus => true expect(exitstatus).not_to eq(0) bundle_ruby expect(out).to eq("ruby_version must match the :engine_version for MRI") end it "should print if no ruby version is specified" do gemfile <<-G source "file://#{gem_repo1}" gem "foo" G bundle_ruby expect(out).to eq("No ruby version specified") end end context "when using patchlevel" do it "returns the ruby version" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.9.3", :patchlevel => '429', :engine => 'ruby', :engine_version => '1.9.3' gem "foo" G bundle_ruby expect(out).to eq("ruby 1.9.3p429") end it "handles an engine" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.9.3", :patchlevel => '392', :engine => 'jruby', :engine_version => '1.7.4' gem "foo" G bundle_ruby expect(out).to eq("ruby 1.9.3p392 (jruby 1.7.4)") end end end cli_dispatch_spec.rb000066400000000000000000000007311446701454400365400ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/otherrequire "spec_helper" describe "bundle command names" do it "work when given fully" do bundle "install" expect(err).to eq("") expect(out).not_to match(/Ambiguous command/) end it "work when not ambiguous" do bundle "ins" expect(err).to eq("") expect(out).not_to match(/Ambiguous command/) end it "print a friendly error when ambiguous" do bundle "i" expect(err).to eq("") expect(out).to match(/Ambiguous command/) end end ext_spec.rb000066400000000000000000000036261446701454400347200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/otherrequire 'spec_helper' describe "Gem::Specification#match_platform" do it "does not match platforms other than the gem platform" do darwin = gem "lol", "1.0", "platform_specific-1.0-x86-darwin-10" expect(darwin.match_platform(pl('java'))).to be_false end end describe "Bundler::GemHelpers#generic" do include Bundler::GemHelpers it "converts non-windows platforms into ruby" do expect(generic(pl('x86-darwin-10'))).to eq(pl('ruby')) expect(generic(pl('ruby'))).to eq(pl('ruby')) end it "converts java platform variants into java" do expect(generic(pl('universal-java-17'))).to eq(pl('java')) expect(generic(pl('java'))).to eq(pl('java')) end it "converts mswin platform variants into x86-mswin32" do expect(generic(pl('mswin32'))).to eq(pl('x86-mswin32')) expect(generic(pl('i386-mswin32'))).to eq(pl('x86-mswin32')) expect(generic(pl('x86-mswin32'))).to eq(pl('x86-mswin32')) end it "converts 32-bit mingw platform variants into x86-mingw32" do expect(generic(pl('mingw32'))).to eq(pl('x86-mingw32')) expect(generic(pl('i386-mingw32'))).to eq(pl('x86-mingw32')) expect(generic(pl('x86-mingw32'))).to eq(pl('x86-mingw32')) end it "converts 64-bit mingw platform variants into x64-mingw32" do expect(generic(pl('x64-mingw32'))).to eq(pl('x64-mingw32')) expect(generic(pl('x86_64-mingw32'))).to eq(pl('x64-mingw32')) end end describe "Gem::SourceIndex#refresh!" do rubygems_1_7 = Gem::Version.new(Gem::VERSION) >= Gem::Version.new("1.7.0") before do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end it "does not explode when called", :if => rubygems_1_7 do run "Gem.source_index.refresh!" run "Gem::SourceIndex.new([]).refresh!" end it "does not explode when called", :unless => rubygems_1_7 do run "Gem.source_index.refresh!" run "Gem::SourceIndex.from_gems_in([]).refresh!" end end platform_spec.rb000066400000000000000000000740661446701454400357520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/otherrequire "spec_helper" describe "bundle platform" do context "without flags" do it "returns all the output" do gemfile <<-G source "file://#{gem_repo1}" #{ruby_version_correct} gem "foo" G bundle "platform" expect(out).to eq(<<-G.chomp) Your platform is: #{RUBY_PLATFORM} Your app has gems that work on these platforms: * ruby Your Gemfile specifies a Ruby version requirement: * ruby #{RUBY_VERSION} Your current platform satisfies the Ruby version requirement. G end it "returns all the output including the patchlevel" do gemfile <<-G source "file://#{gem_repo1}" #{ruby_version_correct_patchlevel} gem "foo" G bundle "platform" expect(out).to eq(<<-G.chomp) Your platform is: #{RUBY_PLATFORM} Your app has gems that work on these platforms: * ruby Your Gemfile specifies a Ruby version requirement: * ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL} Your current platform satisfies the Ruby version requirement. G end it "doesn't print ruby version requirement if it isn't specified" do gemfile <<-G source "file://#{gem_repo1}" gem "foo" G bundle "platform" expect(out).to eq(<<-G.chomp) Your platform is: #{RUBY_PLATFORM} Your app has gems that work on these platforms: * ruby Your Gemfile does not specify a Ruby version requirement. G end it "doesn't match the ruby version requirement" do gemfile <<-G source "file://#{gem_repo1}" #{ruby_version_incorrect} gem "foo" G bundle "platform" expect(out).to eq(<<-G.chomp) Your platform is: #{RUBY_PLATFORM} Your app has gems that work on these platforms: * ruby Your Gemfile specifies a Ruby version requirement: * ruby #{not_local_ruby_version} Your Ruby version is #{RUBY_VERSION}, but your Gemfile specified #{not_local_ruby_version} G end end context "--ruby" do it "returns ruby version when explicit" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.9.3", :engine => 'ruby', :engine_version => '1.9.3' gem "foo" G bundle "platform --ruby" expect(out).to eq("ruby 1.9.3") end it "defaults to MRI" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.9.3" gem "foo" G bundle "platform --ruby" expect(out).to eq("ruby 1.9.3") end it "handles jruby" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'jruby', :engine_version => '1.6.5' gem "foo" G bundle "platform --ruby" expect(out).to eq("ruby 1.8.7 (jruby 1.6.5)") end it "handles rbx" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'rbx', :engine_version => '1.2.4' gem "foo" G bundle "platform --ruby" expect(out).to eq("ruby 1.8.7 (rbx 1.2.4)") end it "raises an error if engine is used but engine version is not" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'rbx' gem "foo" G bundle "platform", :exitstatus => true expect(exitstatus).not_to eq(0) end it "raises an error if engine_version is used but engine is not" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine_version => '1.2.4' gem "foo" G bundle "platform", :exitstatus => true expect(exitstatus).not_to eq(0) end it "raises an error if engine version doesn't match ruby version for MRI" do gemfile <<-G source "file://#{gem_repo1}" ruby "1.8.7", :engine => 'ruby', :engine_version => '1.2.4' gem "foo" G bundle "platform", :exitstatus => true expect(exitstatus).not_to eq(0) end it "should print if no ruby version is specified" do gemfile <<-G source "file://#{gem_repo1}" gem "foo" G bundle "platform --ruby" puts err expect(out).to eq("No ruby version specified") end end let(:ruby_version_correct) { "ruby \"#{RUBY_VERSION}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{local_engine_version}\"" } let(:ruby_version_correct_engineless) { "ruby \"#{RUBY_VERSION}\"" } let(:ruby_version_correct_patchlevel) { "#{ruby_version_correct}, :patchlevel => '#{RUBY_PATCHLEVEL}'" } let(:ruby_version_incorrect) { "ruby \"#{not_local_ruby_version}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{not_local_ruby_version}\"" } let(:engine_incorrect) { "ruby \"#{RUBY_VERSION}\", :engine => \"#{not_local_tag}\", :engine_version => \"#{RUBY_VERSION}\"" } let(:engine_version_incorrect) { "ruby \"#{RUBY_VERSION}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{not_local_engine_version}\"" } let(:patchlevel_incorrect) { "#{ruby_version_correct}, :patchlevel => '#{not_local_patchlevel}'" } let(:patchlevel_fixnum) { "#{ruby_version_correct}, :patchlevel => #{RUBY_PATCHLEVEL}1" } def should_be_ruby_version_incorrect(opts = {:exitstatus => true}) expect(exitstatus).to eq(18) if opts[:exitstatus] expect(out).to be_include("Your Ruby version is #{RUBY_VERSION}, but your Gemfile specified #{not_local_ruby_version}") end def should_be_engine_incorrect(opts = {:exitstatus => true}) expect(exitstatus).to eq(18) if opts[:exitstatus] expect(out).to be_include("Your Ruby engine is #{local_ruby_engine}, but your Gemfile specified #{not_local_tag}") end def should_be_engine_version_incorrect(opts = {:exitstatus => true}) expect(exitstatus).to eq(18) if opts[:exitstatus] expect(out).to be_include("Your #{local_ruby_engine} version is #{local_engine_version}, but your Gemfile specified #{local_ruby_engine} #{not_local_engine_version}") end def should_be_patchlevel_incorrect(opts = {:exitstatus => true}) expect(exitstatus).to eq(18) if opts[:exitstatus] expect(out).to be_include("Your Ruby patchlevel is #{RUBY_PATCHLEVEL}, but your Gemfile specified #{not_local_patchlevel}") end def should_be_patchlevel_fixnum(opts = {:exitstatus => true}) expect(exitstatus).to eq(18) if opts[:exitstatus] expect(out).to be_include("The Ruby patchlevel in your Gemfile must be a string") end context "bundle install" do it "installs fine when the ruby version matches" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{ruby_version_correct} G expect(bundled_app('Gemfile.lock')).to exist end it "installs fine with any engine" do simulate_ruby_engine "jruby" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{ruby_version_correct_engineless} G expect(bundled_app('Gemfile.lock')).to exist end end it "installs fine when the patchlevel matches" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{ruby_version_correct_patchlevel} G expect(bundled_app('Gemfile.lock')).to exist end it "doesn't install when the ruby version doesn't match" do install_gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{ruby_version_incorrect} G expect(bundled_app('Gemfile.lock')).not_to exist should_be_ruby_version_incorrect end it "doesn't install when engine doesn't match" do install_gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{engine_incorrect} G expect(bundled_app('Gemfile.lock')).not_to exist should_be_engine_incorrect end it "doesn't install when engine version doesn't match" do simulate_ruby_engine "jruby" do install_gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{engine_version_incorrect} G expect(bundled_app('Gemfile.lock')).not_to exist should_be_engine_version_incorrect end end it "doesn't install when patchlevel doesn't match" do install_gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{patchlevel_incorrect} G expect(bundled_app('Gemfile.lock')).not_to exist should_be_patchlevel_incorrect end end context "bundle check" do it "checks fine when the ruby version matches" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{ruby_version_correct} G bundle :check, :exitstatus => true expect(exitstatus).to eq(0) expect(out).to eq("The Gemfile's dependencies are satisfied") end it "checks fine with any engine" do simulate_ruby_engine "jruby" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{ruby_version_correct_engineless} G bundle :check, :exitstatus => true expect(exitstatus).to eq(0) expect(out).to eq("The Gemfile's dependencies are satisfied") end end it "fails when ruby version doesn't match" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{ruby_version_incorrect} G bundle :check, :exitstatus => true should_be_ruby_version_incorrect end it "fails when engine doesn't match" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{engine_incorrect} G bundle :check, :exitstatus => true should_be_engine_incorrect end it "fails when engine version doesn't match" do simulate_ruby_engine "ruby" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{engine_version_incorrect} G bundle :check, :exitstatus => true should_be_engine_version_incorrect end end it "fails when patchlevel doesn't match" do install_gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" G gemfile <<-G source "file://#{gem_repo1}" gem "rack" #{patchlevel_incorrect} G bundle :check, :exitstatus => true should_be_patchlevel_incorrect end end context "bundle update" do before do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" G end it "updates successfully when the ruby version matches" do gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" #{ruby_version_correct} G update_repo2 do build_gem "activesupport", "3.0" end bundle "update" should_be_installed "rack 1.2", "rack-obama 1.0", "activesupport 3.0" end it "updates fine with any engine" do simulate_ruby_engine "jruby" do gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" #{ruby_version_correct_engineless} G update_repo2 do build_gem "activesupport", "3.0" end bundle "update" should_be_installed "rack 1.2", "rack-obama 1.0", "activesupport 3.0" end end it "fails when ruby version doesn't match" do gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" #{ruby_version_incorrect} G update_repo2 do build_gem "activesupport", "3.0" end bundle :update, :exitstatus => true should_be_ruby_version_incorrect end it "fails when ruby engine doesn't match" do gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" #{engine_incorrect} G update_repo2 do build_gem "activesupport", "3.0" end bundle :update, :exitstatus => true should_be_engine_incorrect end it "fails when ruby engine version doesn't match" do simulate_ruby_engine "jruby" do gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" #{engine_version_incorrect} G update_repo2 do build_gem "activesupport", "3.0" end bundle :update, :exitstatus => true should_be_engine_version_incorrect end end it "fails when patchlevel doesn't match" do gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{patchlevel_incorrect} G update_repo2 do build_gem "activesupport", "3.0" end bundle :update, :exitstatus => true should_be_patchlevel_incorrect end end context "bundle show" do before do install_gemfile <<-G source "file://#{gem_repo1}" gem "rails" G end it "prints path if ruby version is correct" do gemfile <<-G source "file://#{gem_repo1}" gem "rails" #{ruby_version_correct} G bundle "show rails" expect(out).to eq(default_bundle_path('gems', 'rails-2.3.2').to_s) end it "prints path if ruby version is correct for any engine" do simulate_ruby_engine "jruby" do gemfile <<-G source "file://#{gem_repo1}" gem "rails" #{ruby_version_correct_engineless} G bundle "show rails" expect(out).to eq(default_bundle_path('gems', 'rails-2.3.2').to_s) end end it "fails if ruby version doesn't match" do gemfile <<-G source "file://#{gem_repo1}" gem "rails" #{ruby_version_incorrect} G bundle "show rails", :exitstatus => true should_be_ruby_version_incorrect end it "fails if engine doesn't match" do gemfile <<-G source "file://#{gem_repo1}" gem "rails" #{engine_incorrect} G bundle "show rails", :exitstatus => true should_be_engine_incorrect end it "fails if engine version doesn't match" do simulate_ruby_engine "jruby" do gemfile <<-G source "file://#{gem_repo1}" gem "rails" #{engine_version_incorrect} G bundle "show rails", :exitstatus => true should_be_engine_version_incorrect end end it "fails when patchlevel doesn't match" do gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{patchlevel_incorrect} G update_repo2 do build_gem "activesupport", "3.0" end bundle "show rails", :exitstatus => true should_be_patchlevel_incorrect end end context "bundle cache" do before do gemfile <<-G gem 'rack' G system_gems "rack-1.0.0" end it "copies the .gem file to vendor/cache when ruby version matches" do gemfile <<-G gem 'rack' #{ruby_version_correct} G bundle :cache expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist end it "copies the .gem file to vendor/cache when ruby version matches for any engine" do simulate_ruby_engine "jruby" do gemfile <<-G gem 'rack' #{ruby_version_correct_engineless} G bundle :cache expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist end end it "fails if the ruby version doesn't match" do gemfile <<-G gem 'rack' #{ruby_version_incorrect} G bundle :cache, :exitstatus => true should_be_ruby_version_incorrect end it "fails if the engine doesn't match" do gemfile <<-G gem 'rack' #{engine_incorrect} G bundle :cache, :exitstatus => true should_be_engine_incorrect end it "fails if the engine version doesn't match" do simulate_ruby_engine "jruby" do gemfile <<-G gem 'rack' #{engine_version_incorrect} G bundle :cache, :exitstatus => true should_be_engine_version_incorrect end end it "fails when patchlevel doesn't match" do gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{patchlevel_incorrect} G bundle :cache, :exitstatus => true should_be_patchlevel_incorrect end end context "bundle pack" do before do gemfile <<-G gem 'rack' G system_gems "rack-1.0.0" end it "copies the .gem file to vendor/cache when ruby version matches" do gemfile <<-G gem 'rack' #{ruby_version_correct} G bundle :pack expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist end it "copies the .gem file to vendor/cache when ruby version matches any engine" do simulate_ruby_engine "jruby" do gemfile <<-G gem 'rack' #{ruby_version_correct_engineless} G bundle :pack expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist end end it "fails if the ruby version doesn't match" do gemfile <<-G gem 'rack' #{ruby_version_incorrect} G bundle :pack, :exitstatus => true should_be_ruby_version_incorrect end it "fails if the engine doesn't match" do gemfile <<-G gem 'rack' #{engine_incorrect} G bundle :pack, :exitstatus => true should_be_engine_incorrect end it "fails if the engine version doesn't match" do simulate_ruby_engine "jruby" do gemfile <<-G gem 'rack' #{engine_version_incorrect} G bundle :pack, :exitstatus => true should_be_engine_version_incorrect end end it "fails when patchlevel doesn't match" do gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{patchlevel_incorrect} G bundle :pack, :exitstatus => true should_be_patchlevel_incorrect end end context "bundle exec" do before do system_gems "rack-1.0.0", "rack-0.9.1" end it "activates the correct gem when ruby version matches" do gemfile <<-G gem "rack", "0.9.1" #{ruby_version_correct} G bundle "exec rackup" expect(out).to eq("0.9.1") end it "activates the correct gem when ruby version matches any engine" do simulate_ruby_engine "jruby" do gemfile <<-G gem "rack", "0.9.1" #{ruby_version_correct_engineless} G bundle "exec rackup" expect(out).to eq("0.9.1") end end it "fails when the ruby version doesn't match" do gemfile <<-G gem "rack", "0.9.1" #{ruby_version_incorrect} G bundle "exec rackup", :exitstatus => true should_be_ruby_version_incorrect end it "fails when the engine doesn't match" do gemfile <<-G gem "rack", "0.9.1" #{engine_incorrect} G bundle "exec rackup", :exitstatus => true should_be_engine_incorrect end it "fails when the engine version doesn't match" do simulate_ruby_engine "jruby" do gemfile <<-G gem "rack", "0.9.1" #{engine_version_incorrect} G bundle "exec rackup", :exitstatus => true should_be_engine_version_incorrect end end it "fails when patchlevel doesn't match" do gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" #{patchlevel_incorrect} G bundle "exec rackup", :exitstatus => true should_be_patchlevel_incorrect end end context "bundle console" do before do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development G end it "starts IRB with the default group loaded when ruby version matches" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development #{ruby_version_correct} G bundle "console" do |input| input.puts("puts RACK") input.puts("exit") end expect(out).to include("0.9.1") end it "starts IRB with the default group loaded when ruby version matches any engine" do simulate_ruby_engine "jruby" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development #{ruby_version_correct_engineless} G bundle "console" do |input| input.puts("puts RACK") input.puts("exit") end expect(out).to include("0.9.1") end end it "fails when ruby version doesn't match" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development #{ruby_version_incorrect} G bundle "console", :exitstatus => true should_be_ruby_version_incorrect end it "fails when engine doesn't match" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development #{engine_incorrect} G bundle "console", :exitstatus => true should_be_engine_incorrect end it "fails when engine version doesn't match" do simulate_ruby_engine "jruby" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development #{engine_version_incorrect} G bundle "console", :exitstatus => true should_be_engine_version_incorrect end end it "fails when patchlevel doesn't match" do gemfile <<-G, :exitstatus => true source "file://#{gem_repo1}" gem "rack" gem "activesupport", :group => :test gem "rack_middleware", :group => :development #{patchlevel_incorrect} G bundle "console", :exitstatus => true should_be_patchlevel_incorrect end end context "Bundler.setup" do before do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack", :group => :test G end it "makes a Gemfile.lock if setup succeeds" do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack" #{ruby_version_correct} G File.read(bundled_app("Gemfile.lock")) FileUtils.rm(bundled_app("Gemfile.lock")) run "1" expect(bundled_app("Gemfile.lock")).to exist end it "makes a Gemfile.lock if setup succeeds for any engine" do simulate_ruby_engine "jruby" do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack" #{ruby_version_correct_engineless} G File.read(bundled_app("Gemfile.lock")) FileUtils.rm(bundled_app("Gemfile.lock")) run "1" expect(bundled_app("Gemfile.lock")).to exist end end it "fails when ruby version doesn't match" do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack" #{ruby_version_incorrect} G File.read(bundled_app("Gemfile.lock")) FileUtils.rm(bundled_app("Gemfile.lock")) ruby <<-R require 'rubygems' require 'bundler' begin Bundler.setup rescue Bundler::RubyVersionMismatch => e puts e.message end R expect(bundled_app("Gemfile.lock")).not_to exist should_be_ruby_version_incorrect(:exitstatus => false) end it "fails when engine doesn't match" do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack" #{engine_incorrect} G File.read(bundled_app("Gemfile.lock")) FileUtils.rm(bundled_app("Gemfile.lock")) ruby <<-R require 'rubygems' require 'bundler' begin Bundler.setup rescue Bundler::RubyVersionMismatch => e puts e.message end R expect(bundled_app("Gemfile.lock")).not_to exist should_be_engine_incorrect(:exitstatus => false) end it "fails when engine version doesn't match" do simulate_ruby_engine "jruby" do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack" #{engine_version_incorrect} G File.read(bundled_app("Gemfile.lock")) FileUtils.rm(bundled_app("Gemfile.lock")) ruby <<-R require 'rubygems' require 'bundler' begin Bundler.setup rescue Bundler::RubyVersionMismatch => e puts e.message end R expect(bundled_app("Gemfile.lock")).not_to exist should_be_engine_version_incorrect(:exitstatus => false) end end it "fails when patchlevel doesn't match" do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack" #{patchlevel_incorrect} G puts File.read(bundled_app("Gemfile")) File.read(bundled_app("Gemfile.lock")) FileUtils.rm(bundled_app("Gemfile.lock")) ruby <<-R require 'rubygems' require 'bundler' begin Bundler.setup rescue Bundler::RubyVersionMismatch => e puts e.message end R expect(bundled_app("Gemfile.lock")).not_to exist should_be_patchlevel_incorrect(:exitstatus => false) end end context "bundle outdated" do before do build_repo2 do build_git "foo", :path => lib_path("foo") end install_gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" G end it "returns list of outdated gems when the ruby version matches" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" #{ruby_version_correct} G bundle "outdated" expect(out).to include("activesupport (3.0 > 2.3.5)") expect(out).to include("foo (1.0") end it "returns list of outdated gems when the ruby version matches for any engine" do simulate_ruby_engine "jruby" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" #{ruby_version_correct_engineless} G bundle "outdated" expect(out).to include("activesupport (3.0 > 2.3.5)") expect(out).to include("foo (1.0") end end it "fails when the ruby version doesn't match" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" #{ruby_version_incorrect} G bundle "outdated", :exitstatus => true should_be_ruby_version_incorrect end it "fails when the engine doesn't match" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" #{engine_incorrect} G bundle "outdated", :exitstatus => true should_be_engine_incorrect end it "fails when the engine version doesn't match" do simulate_ruby_engine "jruby" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" #{engine_version_incorrect} G bundle "outdated", :exitstatus => true should_be_engine_version_incorrect end end it "fails when the patchlevel doesn't match" do simulate_ruby_engine "jruby" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" #{patchlevel_incorrect} G bundle "outdated", :exitstatus => true should_be_patchlevel_incorrect end end it "fails when the patchlevel is a fixnum" do simulate_ruby_engine "jruby" do update_repo2 do build_gem "activesupport", "3.0" update_git "foo", :path => lib_path("foo") end gemfile <<-G source "file://#{gem_repo2}" gem "activesupport", "2.3.5" gem "foo", :git => "#{lib_path('foo')}" #{patchlevel_fixnum} G bundle "outdated", :exitstatus => true should_be_patchlevel_fixnum end end end end quality_spec.rb000066400000000000000000000047051446701454400344660ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/specrequire "spec_helper" if defined?(Encoding) && Encoding.default_external != "UTF-8" Encoding.default_external = "UTF-8" end describe "The library itself" do def check_for_spec_defs_with_single_quotes(filename) failing_lines = [] File.readlines(filename).each_with_index do |line,number| failing_lines << number + 1 if line =~ /^ *(describe|it|context) {1}'{1}/ end unless failing_lines.empty? "#{filename} uses inconsistent single quotes on lines #{failing_lines.join(', ')}" end end def check_for_tab_characters(filename) failing_lines = [] File.readlines(filename).each_with_index do |line,number| failing_lines << number + 1 if line =~ /\t/ end unless failing_lines.empty? "#{filename} has tab characters on lines #{failing_lines.join(', ')}" end end def check_for_extra_spaces(filename) failing_lines = [] File.readlines(filename).each_with_index do |line,number| next if line =~ /^\s+#.*\s+\n$/ next if %w(LICENCE.md).include?(line) failing_lines << number + 1 if line =~ /\s+\n$/ end unless failing_lines.empty? "#{filename} has spaces on the EOL on lines #{failing_lines.join(', ')}" end end RSpec::Matchers.define :be_well_formed do failure_message_for_should do |actual| actual.join("\n") end match do |actual| actual.empty? end end it "has no malformed whitespace" do exempt = /\.gitmodules|\.marshal|fixtures|vendor|ssl_certs|LICENSE/ error_messages = [] Dir.chdir(File.expand_path("../..", __FILE__)) do `git ls-files -z`.split("\x0").each do |filename| next if filename =~ exempt error_messages << check_for_tab_characters(filename) error_messages << check_for_extra_spaces(filename) end end expect(error_messages.compact).to be_well_formed end it "uses double-quotes consistently in specs" do included = /spec/ error_messages = [] Dir.chdir(File.expand_path("../", __FILE__)) do `git ls-files -z`.split("\x0").each do |filename| next unless filename =~ included error_messages << check_for_spec_defs_with_single_quotes(filename) end end expect(error_messages.compact).to be_well_formed end it "can still be built" do Dir.chdir(root) do `gem build bundler.gemspec` expect($?).to eq(0) # clean up the .gem generated system("rm bundler-#{Bundler::VERSION}.gem") end end end realworld/000077500000000000000000000000001446701454400334245ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/specdependency_api_spec.rb000066400000000000000000000031311446701454400377300ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/realworldrequire "spec_helper" describe "gemcutter's dependency API", :realworld => true do def wait_for_server(port, seconds = 15) tries = 0 TCPSocket.new("127.0.0.1", port) rescue => e raise(e) if tries > (seconds * 2) tries += 1 sleep 0.5 retry end context "when Gemcutter API takes too long to respond" do before do # need to hack, so we can require rack old_gem_home = ENV['GEM_HOME'] ENV['GEM_HOME'] = Spec::Path.base_system_gems.to_s require 'rack' ENV['GEM_HOME'] = old_gem_home port = 21453 port += 1 while TCPSocket.new("127.0.0.1", port) rescue false @server_uri = "http://127.0.0.1:#{port}" require File.expand_path('../../support/artifice/endpoint_timeout', __FILE__) require 'thread' @t = Thread.new { server = Rack::Server.start(:app => EndpointTimeout, :Host => '0.0.0.0', :Port => port, :server => 'webrick', :AccessLog => []) server.start } @t.run wait_for_server(port) end after do @t.kill end it "times out and falls back on the modern index" do gemfile <<-G source "#{@server_uri}" gem "rack" old_v, $VERBOSE = $VERBOSE, nil Bundler::Fetcher.api_timeout = 1 $VERBOSE = old_v G bundle :install expect(out).to include("Fetching source index from #{@server_uri}/") should_be_installed "rack 1.0.0" end end end edgecases_spec.rb000066400000000000000000000120451446701454400367100ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/realworldrequire 'spec_helper' describe "real world edgecases", :realworld => true do # there is no rbx-relative-require gem that will install on 1.9 it "ignores extra gems with bad platforms", :ruby => "1.8" do install_gemfile <<-G source :rubygems gem "linecache", "0.46" G expect(err).to eq("") end # https://github.com/bundler/bundler/issues/1202 it "bundle cache works with rubygems 1.3.7 and pre gems", :ruby => "1.8" do install_gemfile <<-G source :rubygems gem "rack", "1.3.0.beta2" gem "will_paginate", "3.0.pre2" G bundle :cache expect(out).not_to include("Removing outdated .gem files from vendor/cache") end # https://github.com/bundler/bundler/issues/1486 # this is a hash collision that only manifests on 1.8.7 it "finds the correct child versions", :ruby => "1.8" do install_gemfile <<-G source :rubygems gem 'i18n', '~> 0.4' gem 'activesupport', '~> 3.0' gem 'activerecord', '~> 3.0' gem 'builder', '~> 2.1.2' G expect(out).to include("activemodel (3.0.5)") end # https://github.com/bundler/bundler/issues/1500 it "does not fail install because of gem plugins" do realworld_system_gems("open_gem --version 1.4.2", "rake --version 0.9.2") gemfile <<-G source :rubygems gem 'rack', '1.0.1' G bundle "install --path vendor/bundle", :expect_err => true expect(err).not_to include("Could not find rake") expect(err).to be_empty end it "checks out git repos when the lockfile is corrupted" do gemfile <<-G source :rubygems gem 'activerecord', :github => 'carlhuda/rails-bundler-test', :branch => 'master' gem 'activesupport', :github => 'carlhuda/rails-bundler-test', :branch => 'master' gem 'actionpack', :github => 'carlhuda/rails-bundler-test', :branch => 'master' G lockfile <<-L GIT remote: git://github.com/carlhuda/rails-bundler-test.git revision: 369e28a87419565f1940815219ea9200474589d4 branch: master specs: actionpack (3.2.2) activemodel (= 3.2.2) activesupport (= 3.2.2) builder (~> 3.0.0) erubis (~> 2.7.0) journey (~> 1.0.1) rack (~> 1.4.0) rack-cache (~> 1.2) rack-test (~> 0.6.1) sprockets (~> 2.1.2) activemodel (3.2.2) activesupport (= 3.2.2) builder (~> 3.0.0) activerecord (3.2.2) activemodel (= 3.2.2) activesupport (= 3.2.2) arel (~> 3.0.2) tzinfo (~> 0.3.29) activesupport (3.2.2) i18n (~> 0.6) multi_json (~> 1.0) GIT remote: git://github.com/carlhuda/rails-bundler-test.git revision: 369e28a87419565f1940815219ea9200474589d4 branch: master specs: actionpack (3.2.2) activemodel (= 3.2.2) activesupport (= 3.2.2) builder (~> 3.0.0) erubis (~> 2.7.0) journey (~> 1.0.1) rack (~> 1.4.0) rack-cache (~> 1.2) rack-test (~> 0.6.1) sprockets (~> 2.1.2) activemodel (3.2.2) activesupport (= 3.2.2) builder (~> 3.0.0) activerecord (3.2.2) activemodel (= 3.2.2) activesupport (= 3.2.2) arel (~> 3.0.2) tzinfo (~> 0.3.29) activesupport (3.2.2) i18n (~> 0.6) multi_json (~> 1.0) GIT remote: git://github.com/carlhuda/rails-bundler-test.git revision: 369e28a87419565f1940815219ea9200474589d4 branch: master specs: actionpack (3.2.2) activemodel (= 3.2.2) activesupport (= 3.2.2) builder (~> 3.0.0) erubis (~> 2.7.0) journey (~> 1.0.1) rack (~> 1.4.0) rack-cache (~> 1.2) rack-test (~> 0.6.1) sprockets (~> 2.1.2) activemodel (3.2.2) activesupport (= 3.2.2) builder (~> 3.0.0) activerecord (3.2.2) activemodel (= 3.2.2) activesupport (= 3.2.2) arel (~> 3.0.2) tzinfo (~> 0.3.29) activesupport (3.2.2) i18n (~> 0.6) multi_json (~> 1.0) GEM remote: https://rubygems.org/ specs: arel (3.0.2) builder (3.0.0) erubis (2.7.0) hike (1.2.1) i18n (0.6.0) journey (1.0.3) multi_json (1.1.0) rack (1.4.1) rack-cache (1.2) rack (>= 0.4) rack-test (0.6.1) rack (>= 1.0) sprockets (2.1.2) hike (~> 1.2) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) tilt (1.3.3) tzinfo (0.3.32) PLATFORMS ruby DEPENDENCIES actionpack! activerecord! activesupport! L bundle :install, :exitstatus => true expect(exitstatus).to eq(0) end end parallel_spec.rb000066400000000000000000000031751446701454400365650ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/realworldrequire 'spec_helper' describe "parallel", :realworld => true do it "installs", :ruby => "1.8" do gemfile <<-G source "https://rubygems.org" gem 'activesupport', '~> 3.2.13' gem 'faker', '~> 1.1.2' G bundle :install, :jobs => 4, :env => {"DEBUG" => "1"} expect(out).to match(/[1-3]: /) bundle "show activesupport" expect(out).to match(/activesupport/) bundle "show faker" expect(out).to match(/faker/) bundle "config jobs" expect(out).to match(/: "4"/) end it "installs even with circular dependency", :ruby => "1.9" do gemfile <<-G source 'https://rubygems.org' gem 'activesupport', '~> 3.2.13' gem 'mongoid_auto_increment', "0.1.1" G bundle :install, :jobs => 4, :env => {"DEBUG" => "1"} expect(out).to match(/[1-3]: /) bundle "show activesupport" expect(out).to match(/activesupport/) bundle "show mongoid_auto_increment" expect(out).to match(%r{gems/mongoid_auto_increment}) bundle "config jobs" expect(out).to match(/: "4"/) end it "updates" do install_gemfile <<-G source "https://rubygems.org" gem 'activesupport', '3.2.12' gem 'faker', '~> 1.1.2' G gemfile <<-G source "https://rubygems.org" gem 'activesupport', '~> 3.2.12' gem 'faker', '~> 1.1.2' G bundle :update, :jobs => 4, :env => {"DEBUG" => "1"} expect(out).to match(/[1-3]: /) bundle "show activesupport" expect(out).to match(/activesupport-3\.2\.1[3-9]/) bundle "show faker" expect(out).to match(/faker/) bundle "config jobs" expect(out).to match(/: "4"/) end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/resolver/000077500000000000000000000000001446701454400333515ustar00rootroot00000000000000basic_spec.rb000066400000000000000000000014621446701454400357150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/resolverrequire "spec_helper" describe "Resolving" do before :each do @index = an_awesome_index end it "resolves a single gem" do dep "rack" should_resolve_as %w(rack-1.1) end it "resolves a gem with dependencies" do dep "actionpack" should_resolve_as %w(actionpack-2.3.5 activesupport-2.3.5 rack-1.0) end it "resolves a conflicting index" do @index = a_conflict_index dep "my_app" should_resolve_as %w(activemodel-3.2.11 builder-3.0.4 grape-0.2.6 my_app-1.0.0) end it "should throw error in case of circular dependencies" do @index = a_circular_index dep "circular_app" got = resolve expect { got = got.map { |s| s.full_name }.sort }.to raise_error(Bundler::CyclicDependencyError, /please remove either gem 'foo' or gem 'bar'/i) end end platform_spec.rb000066400000000000000000000037031446701454400364600ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/resolverrequire "spec_helper" describe "Resolving platform craziness" do describe "with cross-platform gems" do before :each do @index = an_awesome_index end it "resolves a simple multi platform gem" do dep "nokogiri" platforms "ruby", "java" should_resolve_as %w(nokogiri-1.4.2 nokogiri-1.4.2-java weakling-0.0.3) end it "doesn't pull gems that don't exist for the current platform" do dep "nokogiri" platforms "ruby" should_resolve_as %w(nokogiri-1.4.2) end it "doesn't pull gems when the version is available for all requested platforms" do dep "nokogiri" platforms "mswin32" should_resolve_as %w(nokogiri-1.4.2.1-x86-mswin32) end end describe "with mingw32" do before :each do @index = build_index do platforms "mingw32 mswin32 x64-mingw32" do |platform| gem "thin", "1.2.7", platform end end end it "finds mswin gems" do # win32 is hardcoded to get CPU x86 in rubygems platforms "mswin32" dep "thin" should_resolve_as %w(thin-1.2.7-x86-mswin32) end it "finds mingw gems" do # mingw is _not_ hardcoded to add CPU x86 in rubygems platforms "x86-mingw32" dep "thin" should_resolve_as %w(thin-1.2.7-x86-mingw32) end it "finds x64-mingw gems" do platforms "x64-mingw32" dep "thin" should_resolve_as %w(thin-1.2.7-x64-mingw32) end end describe "with conflicting cases" do before :each do @index = build_index do gem "foo", "1.0.0" do dep "bar", ">= 0" end gem 'bar', "1.0.0" do dep "baz", "~> 1.0.0" end gem "bar", "1.0.0", "java" do dep "baz", " ~> 1.1.0" end gem "baz", %w(1.0.0 1.1.0 1.2.0) end end it "reports on the conflict" do platforms "ruby", "java" dep "foo" should_conflict_on "baz" end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/runtime/000077500000000000000000000000001446701454400331735ustar00rootroot00000000000000executable_spec.rb000066400000000000000000000066431446701454400366050ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/runtimerequire "spec_helper" describe "Running bin/* commands" do before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end it "runs the bundled command when in the bundle" do bundle "install --binstubs" build_gem "rack", "2.0", :to_system => true do |s| s.executables = "rackup" end gembin "rackup" expect(out).to eq("1.0.0") end it "allows the location of the gem stubs to be specified" do bundle "install --binstubs gbin" expect(bundled_app("bin")).not_to exist expect(bundled_app("gbin/rackup")).to exist gembin bundled_app("gbin/rackup") expect(out).to eq("1.0.0") end it "allows absolute paths as a specification of where to install bin stubs" do bundle "install --binstubs #{tmp}/bin" gembin tmp("bin/rackup") expect(out).to eq("1.0.0") end it "uses the default ruby install name when shebang is not specified" do bundle "install --binstubs" expect(File.open("bin/rackup").gets).to eq("#!/usr/bin/env #{RbConfig::CONFIG['ruby_install_name']}\n") end it "allows the name of the shebang executable to be specified" do bundle "install --binstubs --shebang ruby-foo" expect(File.open("bin/rackup").gets).to eq("#!/usr/bin/env ruby-foo\n") end it "runs the bundled command when out of the bundle" do bundle "install --binstubs" build_gem "rack", "2.0", :to_system => true do |s| s.executables = "rackup" end Dir.chdir(tmp) do gembin "rackup" expect(out).to eq("1.0.0") end end it "works with gems in path" do build_lib "rack", :path => lib_path("rack") do |s| s.executables = 'rackup' end gemfile <<-G gem "rack", :path => "#{lib_path('rack')}" G bundle "install --binstubs" build_gem 'rack', '2.0', :to_system => true do |s| s.executables = 'rackup' end gembin "rackup" expect(out).to eq('1.0') end it "don't bundle da bundla" do build_gem "bundler", Bundler::VERSION, :to_system => true do |s| s.executables = "bundle" end gemfile <<-G source "file://#{gem_repo1}" gem "bundler" G bundle "install --binstubs" expect(bundled_app("bin/bundle")).not_to exist end it "does not generate bin stubs if the option was not specified" do bundle "install" expect(bundled_app("bin/rackup")).not_to exist end it "allows you to stop installing binstubs" do bundle "install --binstubs bin/" bundled_app("bin/rackup").rmtree bundle "install --binstubs \"\"" expect(bundled_app("bin/rackup")).not_to exist #expect(bundled_app("rackup")).not_to exist bundle "config bin" expect(out).to include("You have not configured a value for `bin`") end it "remembers that the option was specified" do gemfile <<-G source "file://#{gem_repo1}" gem "activesupport" G bundle "install --binstubs" gemfile <<-G source "file://#{gem_repo1}" gem "activesupport" gem "rack" G bundle "install" expect(bundled_app("bin/rackup")).to exist end it "rewrites bins on --binstubs (to maintain backwards compatibility)" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G bundle "install --binstubs bin/" File.open(bundled_app("bin/rackup"), 'wb') do |file| file.print "OMG" end bundle "install" expect(bundled_app("bin/rackup").read).to_not eq("OMG") end end load_spec.rb000066400000000000000000000052321446701454400353740ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/runtimerequire "spec_helper" describe "Bundler.load" do before :each do system_gems "rack-1.0.0" # clear memoized method results # TODO: Don't reset internal ivars Bundler.instance_eval do @load = nil @runtime = nil @definition = nil end end describe "with a gemfile" do before(:each) do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G end it "provides a list of the env dependencies" do expect(Bundler.load.dependencies).to have_dep("rack", ">= 0") end it "provides a list of the resolved gems" do expect(Bundler.load.gems).to have_gem("rack-1.0.0", "bundler-#{Bundler::VERSION}") end it "ignores blank BUNDLE_GEMFILEs" do expect { ENV['BUNDLE_GEMFILE'] = "" Bundler.load }.not_to raise_error() end end describe "without a gemfile" do it "raises an exception if the default gemfile is not found" do expect { Bundler.load }.to raise_error(Bundler::GemfileNotFound, /could not locate gemfile/i) end it "raises an exception if a specified gemfile is not found" do expect { ENV['BUNDLE_GEMFILE'] = "omg.rb" Bundler.load }.to raise_error(Bundler::GemfileNotFound, /omg\.rb/) end it "does not find a Gemfile above the testing directory" do bundler_gemfile = tmp.join("../Gemfile") unless File.exists?(bundler_gemfile) FileUtils.touch(bundler_gemfile) @remove_bundler_gemfile = true end begin expect { Bundler.load }.to raise_error(Bundler::GemfileNotFound) ensure bundler_gemfile.rmtree if @remove_bundler_gemfile end end end describe "when called twice" do it "doesn't try to load the runtime twice" do system_gems "rack-1.0.0", "activesupport-2.3.5" gemfile <<-G gem "rack" gem "activesupport", :group => :test G ruby <<-RUBY require "bundler" Bundler.setup :default Bundler.require :default puts RACK begin require "activesupport" rescue LoadError puts "no activesupport" end RUBY expect(out.split("\n")).to eq(["1.0.0", "no activesupport"]) end end describe "not hurting brittle rubygems" do it "does not inject #source into the generated YAML of the gem specs" do system_gems "activerecord-2.3.2", "activesupport-2.3.2" gemfile <<-G gem "activerecord" G Bundler.load.specs.each do |spec| expect(spec.to_yaml).not_to match(/^\s+source:/) expect(spec.to_yaml).not_to match(/^\s+groups:/) end end end end platform_spec.rb000066400000000000000000000033171446701454400363030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/runtimerequire "spec_helper" describe "Bundler.setup with multi platform stuff" do it "raises a friendly error when gems are missing locally" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: rack (1.0) PLATFORMS #{local_tag} DEPENDENCIES rack G ruby <<-R begin require 'bundler' Bundler.setup rescue Bundler::GemNotFound => e puts "WIN" end R expect(out).to eq("WIN") end it "will resolve correctly on the current platform when the lockfile was targetted for a different one" do lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: nokogiri (1.4.2-java) weakling (= 0.0.3) weakling (0.0.3) PLATFORMS java DEPENDENCIES nokogiri G system_gems "nokogiri-1.4.2" simulate_platform "x86-darwin-10" gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri" G should_be_installed "nokogiri 1.4.2" end it "will add the resolve for the current platform" do lockfile <<-G GEM remote: file:#{gem_repo1}/ specs: nokogiri (1.4.2-java) weakling (= 0.0.3) weakling (0.0.3) PLATFORMS java DEPENDENCIES nokogiri G simulate_platform "x86-darwin-100" system_gems "nokogiri-1.4.2", "platform_specific-1.0-x86-darwin-100" gemfile <<-G source "file://#{gem_repo1}" gem "nokogiri" gem "platform_specific" G should_be_installed "nokogiri 1.4.2", "platform_specific 1.0 x86-darwin-100" end end require_spec.rb000066400000000000000000000202301446701454400361240ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/runtimerequire "spec_helper" describe "Bundler.require" do before :each do build_lib "one", "1.0.0" do |s| s.write "lib/baz.rb", "puts 'baz'" s.write "lib/qux.rb", "puts 'qux'" end build_lib "two", "1.0.0" do |s| s.write "lib/two.rb", "puts 'two'" s.add_dependency "three", "= 1.0.0" end build_lib "three", "1.0.0" do |s| s.write "lib/three.rb", "puts 'three'" s.add_dependency "seven", "= 1.0.0" end build_lib "four", "1.0.0" do |s| s.write "lib/four.rb", "puts 'four'" end build_lib "five", "1.0.0", :no_default => true do |s| s.write "lib/mofive.rb", "puts 'five'" end build_lib "six", "1.0.0" do |s| s.write "lib/six.rb", "puts 'six'" end build_lib "seven", "1.0.0" do |s| s.write "lib/seven.rb", "puts 'seven'" end build_lib "eight", "1.0.0" do |s| s.write "lib/eight.rb", "puts 'eight'" end gemfile <<-G path "#{lib_path}" gem "one", :group => :bar, :require => %w(baz qux) gem "two" gem "three", :group => :not gem "four", :require => false gem "five" gem "six", :group => "string" gem "seven", :group => :not gem "eight", :require => true, :group => :require_true G end it "requires the gems" do # default group run "Bundler.require" expect(out).to eq("two") # specific group run "Bundler.require(:bar)" expect(out).to eq("baz\nqux") # default and specific group run "Bundler.require(:default, :bar)" expect(out).to eq("baz\nqux\ntwo") # specific group given as a string run "Bundler.require('bar')" expect(out).to eq("baz\nqux") # specific group declared as a string run "Bundler.require(:string)" expect(out).to eq("six") # required in resolver order instead of gemfile order run("Bundler.require(:not)") expect(out.split("\n").sort).to eq(['seven', 'three']) # test require: true run "Bundler.require(:require_true)" expect(out).to eq("eight") end it "allows requiring gems with non standard names explicitly" do run "Bundler.require ; require 'mofive'" expect(out).to eq("two\nfive") end it "raises an exception if a require is specified but the file does not exist" do gemfile <<-G path "#{lib_path}" gem "two", :require => 'fail' G load_error_run <<-R, 'fail' Bundler.require R expect(err).to eq("ZOMG LOAD ERROR") end describe "with namespaced gems" do before :each do build_lib "jquery-rails", "1.0.0" do |s| s.write "lib/jquery/rails.rb", "puts 'jquery/rails'" end lib_path('jquery-rails-1.0.0/lib/jquery-rails.rb').rmtree end it "requires gem names that are namespaced" do gemfile <<-G path '#{lib_path}' gem 'jquery-rails' G run "Bundler.require" expect(out).to eq("jquery/rails") end it "silently passes if the require fails" do build_lib "bcrypt-ruby", "1.0.0", :no_default => true do |s| s.write "lib/brcrypt.rb", "BCrypt = '1.0.0'" end gemfile <<-G path "#{lib_path}" gem "bcrypt-ruby" G cmd = <<-RUBY require 'bundler' Bundler.require RUBY ruby(cmd, :expect_err => true) expect(err).to be_empty end it "does not mangle explictly given requires" do gemfile <<-G path "#{lib_path}" gem 'jquery-rails', :require => 'jquery-rails' G load_error_run <<-R, 'jquery-rails' Bundler.require R expect(err).to eq("ZOMG LOAD ERROR") end it "handles the case where regex fails" do build_lib "load-fuuu", "1.0.0" do |s| s.write "lib/load-fuuu.rb", "raise LoadError.new(\"Could not open library 'libfuuu-1.0': libfuuu-1.0: cannot open shared object file: No such file or directory.\")" end gemfile <<-G path "#{lib_path}" gem "load-fuuu" G cmd = <<-RUBY begin Bundler.require rescue LoadError => e $stderr.puts "ZOMG LOAD ERROR" if e.message.include?("Could not open library 'libfuuu-1.0'") end RUBY run(cmd, :expect_err => true) expect(err).to eq("ZOMG LOAD ERROR") end it "doesn't swallow the error when the library has an unrelated error" do build_lib "load-fuuu", "1.0.0" do |s| s.write "lib/load-fuuu.rb", "raise LoadError.new(\"cannot load such file -- load-bar\")" end gemfile <<-G path "#{lib_path}" gem "load-fuuu" G cmd = <<-RUBY begin Bundler.require rescue LoadError => e $stderr.puts "ZOMG LOAD ERROR: \#{e.message}" end RUBY run(cmd, :expect_err => true) expect(err).to eq("ZOMG LOAD ERROR: cannot load such file -- load-bar") end end describe "using bundle exec" do it "requires the locked gems" do bundle "exec ruby -e 'Bundler.require'" expect(out).to eq("two") bundle "exec ruby -e 'Bundler.require(:bar)'" expect(out).to eq("baz\nqux") bundle "exec ruby -e 'Bundler.require(:default, :bar)'" expect(out).to eq("baz\nqux\ntwo") end end describe "order" do before(:each) do build_lib "one", "1.0.0" do |s| s.write "lib/one.rb", <<-ONE if defined?(Two) Two.two else puts "two_not_loaded" end puts 'one' ONE end build_lib "two", "1.0.0" do |s| s.write "lib/two.rb", <<-TWO module Two def self.two puts 'module_two' end end puts 'two' TWO end end it "works when the gems are in the Gemfile in the correct order" do gemfile <<-G path "#{lib_path}" gem "two" gem "one" G run "Bundler.require" expect(out).to eq("two\nmodule_two\none") end describe "a gem with different requires for different envs" do before(:each) do build_gem "multi_gem", :to_system => true do |s| s.write "lib/one.rb", "puts 'ONE'" s.write "lib/two.rb", "puts 'TWO'" end install_gemfile <<-G gem "multi_gem", :require => "one", :group => :one gem "multi_gem", :require => "two", :group => :two G end it "requires both with Bundler.require(both)" do run "Bundler.require(:one, :two)" expect(out).to eq("ONE\nTWO") end it "requires one with Bundler.require(:one)" do run "Bundler.require(:one)" expect(out).to eq("ONE") end it "requires :two with Bundler.require(:two)" do run "Bundler.require(:two)" expect(out).to eq("TWO") end end it "fails when the gems are in the Gemfile in the wrong order" do gemfile <<-G path "#{lib_path}" gem "one" gem "two" G run "Bundler.require" expect(out).to eq("two_not_loaded\none\ntwo") end describe "with busted gems" do it "should be busted" do build_gem "busted_require", :to_system => true do |s| s.write "lib/busted_require.rb", "require 'no_such_file_omg'" end install_gemfile <<-G gem "busted_require" G load_error_run <<-R, 'no_such_file_omg' Bundler.require R expect(err).to eq('ZOMG LOAD ERROR') end end end end describe "Bundler.require with platform specific dependencies" do it "does not require the gems that are pinned to other platforms" do install_gemfile <<-G source "file://#{gem_repo1}" platforms :#{not_local_tag} do gem "fail", :require => "omgomg" end gem "rack", "1.0.0" G run "Bundler.require", :expect_err => true expect(err).to be_empty end it "requires gems pinned to multiple platforms, including the current one" do install_gemfile <<-G source "file://#{gem_repo1}" platforms :#{not_local_tag}, :#{local_tag} do gem "rack", :require => "rack" end G run "Bundler.require; puts RACK", :expect_err => true expect(out).to eq("1.0.0") expect(err).to be_empty end end setup_spec.rb000066400000000000000000000513511446701454400356200ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/runtimerequire "spec_helper" describe "Bundler.setup" do describe "with no arguments" do it "makes all groups available" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :group => :test G ruby <<-RUBY require 'rubygems' require 'bundler' Bundler.setup require 'rack' puts RACK RUBY expect(err).to eq("") expect(out).to eq("1.0.0") end end describe "when called with groups" do before(:each) do install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" gem "rack", :group => :test G end it "doesn't make all groups available" do ruby <<-RUBY require 'rubygems' require 'bundler' Bundler.setup(:default) begin require 'rack' rescue LoadError puts "WIN" end RUBY expect(err).to eq("") expect(out).to eq("WIN") end it "accepts string for group name" do ruby <<-RUBY require 'rubygems' require 'bundler' Bundler.setup(:default, 'test') require 'rack' puts RACK RUBY expect(err).to eq("") expect(out).to eq("1.0.0") end it "leaves all groups available if they were already" do ruby <<-RUBY require 'rubygems' require 'bundler' Bundler.setup Bundler.setup(:default) require 'rack' puts RACK RUBY expect(err).to eq("") expect(out).to eq("1.0.0") end it "leaves :default available if setup is called twice" do ruby <<-RUBY require 'rubygems' require 'bundler' Bundler.setup(:default) Bundler.setup(:default, :test) begin require 'yard' puts "WIN" rescue LoadError puts "FAIL" end RUBY expect(err).to eq("") expect(out).to match("WIN") end end it "raises if the Gemfile was not yet installed" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G ruby <<-R require 'rubygems' require 'bundler' begin Bundler.setup puts "FAIL" rescue Bundler::GemNotFound puts "WIN" end R expect(out).to eq("WIN") end it "doesn't create a Gemfile.lock if the setup fails" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G ruby <<-R, :expect_err => true require 'rubygems' require 'bundler' Bundler.setup R expect(bundled_app("Gemfile.lock")).not_to exist end it "doesn't change the Gemfile.lock if the setup fails" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G lockfile = File.read(bundled_app("Gemfile.lock")) gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "nosuchgem", "10.0" G ruby <<-R, :expect_err => true require 'rubygems' require 'bundler' Bundler.setup R expect(File.read(bundled_app("Gemfile.lock"))).to eq(lockfile) end it "makes a Gemfile.lock if setup succeeds" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G File.read(bundled_app("Gemfile.lock")) FileUtils.rm(bundled_app("Gemfile.lock")) run "1" expect(bundled_app("Gemfile.lock")).to exist end it "uses BUNDLE_GEMFILE to locate the gemfile if present" do gemfile <<-G source "file://#{gem_repo1}" gem "rack" G gemfile bundled_app('4realz'), <<-G source "file://#{gem_repo1}" gem "activesupport", "2.3.5" G ENV['BUNDLE_GEMFILE'] = bundled_app('4realz').to_s bundle :install should_be_installed "activesupport 2.3.5" end it "prioritizes gems in BUNDLE_PATH over gems in GEM_HOME" do ENV['BUNDLE_PATH'] = bundled_app('.bundle').to_s install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" G build_gem "rack", "1.0", :to_system => true do |s| s.write "lib/rack.rb", "RACK = 'FAIL'" end should_be_installed "rack 1.0.0" end describe "integrate with rubygems" do describe "by replacing #gem" do before :each do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "0.9.1" G end it "replaces #gem but raises when the gem is missing" do run <<-R begin gem "activesupport" puts "FAIL" rescue LoadError puts "WIN" end R expect(out).to eq("WIN") end it "version_requirement is now deprecated in rubygems 1.4.0+ when gem is missing" do run <<-R, :expect_err => true begin gem "activesupport" puts "FAIL" rescue LoadError puts "WIN" end R expect(err).to be_empty end it "replaces #gem but raises when the version is wrong" do run <<-R begin gem "rack", "1.0.0" puts "FAIL" rescue LoadError puts "WIN" end R expect(out).to eq("WIN") end it "version_requirement is now deprecated in rubygems 1.4.0+ when the version is wrong" do run <<-R, :expect_err => true begin gem "rack", "1.0.0" puts "FAIL" rescue LoadError puts "WIN" end R expect(err).to be_empty end end describe "by hiding system gems" do before :each do system_gems "activesupport-2.3.5" install_gemfile <<-G source "file://#{gem_repo1}" gem "yard" G end it "removes system gems from Gem.source_index" do run "require 'yard'" expect(out).to eq("bundler-#{Bundler::VERSION}\nyard-1.0") end context "when the ruby stdlib is a substring of Gem.path" do it "does not reject the stdlib from $LOAD_PATH" do substring = "/" + $LOAD_PATH.find{|p| p =~ /vendor_ruby/ }.split("/")[2] run "puts 'worked!'", :env => {"GEM_PATH" => substring} expect(out).to eq("worked!") end end end end describe "with paths" do it "activates the gems in the path source" do system_gems "rack-1.0.0" build_lib "rack", "1.0.0" do |s| s.write "lib/rack.rb", "puts 'WIN'" end gemfile <<-G path "#{lib_path('rack-1.0.0')}" source "file://#{gem_repo1}" gem "rack" G run "require 'rack'" expect(out).to eq("WIN") end end describe "with git" do before do build_git "rack", "1.0.0" gemfile <<-G gem "rack", :git => "#{lib_path('rack-1.0.0')}" G end it "provides a useful exception when the git repo is not checked out yet" do run "1", :expect_err => true expect(err).to match(/the git source #{lib_path('rack-1.0.0')} is not yet checked out. Please run `bundle install`/i) end it "does not hit the git binary if the lockfile is available and up to date" do bundle "install" break_git! ruby <<-R require 'rubygems' require 'bundler' begin Bundler.setup puts "WIN" rescue Exception => e puts "FAIL" end R expect(out).to eq("WIN") end it "provides a good exception if the lockfile is unavailable" do bundle "install" FileUtils.rm(bundled_app("Gemfile.lock")) break_git! ruby <<-R require "rubygems" require "bundler" begin Bundler.setup puts "FAIL" rescue Bundler::GitError => e puts e.message end R run "puts 'FAIL'", :expect_err => true expect(err).not_to include "This is not the git you are looking for" end it "works even when the cache directory has been deleted" do bundle "install --path vendor/bundle" FileUtils.rm_rf vendored_gems('cache') should_be_installed "rack 1.0.0" end it "does not randomly change the path when specifying --path and the bundle directory becomes read only" do begin bundle "install --path vendor/bundle" Dir["**/*"].each do |f| File.directory?(f) ? File.chmod(0555, f) : File.chmod(0444, f) end should_be_installed "rack 1.0.0" ensure Dir["**/*"].each do |f| File.directory?(f) ? File.chmod(0755, f) : File.chmod(0644, f) end end end end describe "when specifying local override" do it "explodes if given path does not exist on runtime" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/at #{lib_path('local-rack')}/) FileUtils.rm_rf(lib_path('local-rack')) run "require 'rack'", :expect_err => true expect(err).to match(/Cannot use local override for rack-0.8 because #{Regexp.escape(lib_path('local-rack').to_s)} does not exist/) end it "explodes if branch is not given on runtime" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/at #{lib_path('local-rack')}/) gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}" G run "require 'rack'", :expect_err => true expect(err).to match(/because :branch is not specified in Gemfile/) end it "explodes on different branches on runtime" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle :install expect(out).to match(/at #{lib_path('local-rack')}/) gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "changed" G run "require 'rack'", :expect_err => true expect(err).to match(/is using branch master but Gemfile specifies changed/) end it "explodes on refs with different branches on runtime" do build_git "rack", "0.8" FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack')) install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :ref => "master", :branch => "master" G gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :ref => "master", :branch => "nonexistant" G bundle %|config local.rack #{lib_path('local-rack')}| run "require 'rack'", :expect_err => true expect(err).to match(/is using branch master but Gemfile specifies nonexistant/) end end describe "when excluding groups" do it "doesn't change the resolve if --without is used" do install_gemfile <<-G, :without => :rails source "file://#{gem_repo1}" gem "activesupport" group :rails do gem "rails", "2.3.2" end G install_gems "activesupport-2.3.5" should_be_installed "activesupport 2.3.2", :groups => :default end it "remembers --without and does not bail on bare Bundler.setup" do install_gemfile <<-G, :without => :rails source "file://#{gem_repo1}" gem "activesupport" group :rails do gem "rails", "2.3.2" end G install_gems "activesupport-2.3.5" should_be_installed "activesupport 2.3.2" end it "remembers --without and does not include groups passed to Bundler.setup" do install_gemfile <<-G, :without => :rails source "file://#{gem_repo1}" gem "activesupport" group :rack do gem "rack" end group :rails do gem "rails", "2.3.2" end G should_not_be_installed "activesupport 2.3.2", :groups => :rack should_be_installed "rack 1.0.0", :groups => :rack end end # Unfortunately, gem_prelude does not record the information about # activated gems, so this test cannot work on 1.9 :( if RUBY_VERSION < "1.9" describe "preactivated gems" do it "raises an exception if a pre activated gem conflicts with the bundle" do system_gems "thin-1.0", "rack-1.0.0" build_gem "thin", "1.1", :to_system => true do |s| s.add_dependency "rack" end gemfile <<-G gem "thin", "1.0" G ruby <<-R require 'rubygems' gem "thin" require 'bundler' begin Bundler.setup puts "FAIL" rescue Gem::LoadError => e puts e.message end R expect(out).to eq("You have already activated thin 1.1, but your Gemfile requires thin 1.0. Prepending `bundle exec` to your command may solve this.") end it "version_requirement is now deprecated in rubygems 1.4.0+" do system_gems "thin-1.0", "rack-1.0.0" build_gem "thin", "1.1", :to_system => true do |s| s.add_dependency "rack" end gemfile <<-G gem "thin", "1.0" G ruby <<-R, :expect_err => true require 'rubygems' gem "thin" require 'bundler' begin Bundler.setup puts "FAIL" rescue Gem::LoadError => e puts e.message end R expect(err).to be_empty end end end # Rubygems returns loaded_from as a string it "has loaded_from as a string on all specs" do build_git "foo" build_git "no-gemspec", :gemspec => false install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" gem "foo", :git => "#{lib_path('foo-1.0')}" gem "no-gemspec", "1.0", :git => "#{lib_path('no-gemspec-1.0')}" G run <<-R Gem.loaded_specs.each do |n, s| puts "FAIL" unless String === s.loaded_from end R expect(out).to be_empty end it "ignores empty gem paths" do install_gemfile <<-G source "file://#{gem_repo1}" gem "rack" G ENV["GEM_HOME"] = "" bundle %{exec ruby -e "require 'set'"} expect(err).to be_empty end it "should prepend gemspec require paths to $LOAD_PATH in order" do update_repo2 do build_gem("requirepaths") do |s| s.write("lib/rq.rb", "puts 'yay'") s.write("src/rq.rb", "puts 'nooo'") s.require_paths = ["lib", "src"] end end install_gemfile <<-G source "file://#{gem_repo2}" gem "requirepaths", :require => nil G run "require 'rq'" expect(out).to eq("yay") end it "stubs out Gem.refresh so it does not reveal system gems" do system_gems "rack-1.0.0" install_gemfile <<-G source "file://#{gem_repo1}" gem "activesupport" G run <<-R puts Bundler.rubygems.find_name("rack").inspect Gem.refresh puts Bundler.rubygems.find_name("rack").inspect R expect(out).to eq("[]\n[]") end describe "when a vendored gem specification uses the :path option" do it "should resolve paths relative to the Gemfile" do path = bundled_app(File.join('vendor', 'foo')) build_lib "foo", :path => path # If the .gemspec exists, then Bundler handles the path differently. # See Source::Path.load_spec_files for details. FileUtils.rm(File.join(path, 'foo.gemspec')) install_gemfile <<-G gem 'foo', '1.2.3', :path => 'vendor/foo' G Dir.chdir(bundled_app.parent) do run <<-R, :env => {"BUNDLE_GEMFILE" => bundled_app('Gemfile')} require 'foo' R end expect(err).to eq("") end it "should make sure the Bundler.root is really included in the path relative to the Gemfile" do relative_path = File.join('vendor', Dir.pwd[1..-1], 'foo') absolute_path = bundled_app(relative_path) FileUtils.mkdir_p(absolute_path) build_lib "foo", :path => absolute_path # If the .gemspec exists, then Bundler handles the path differently. # See Source::Path.load_spec_files for details. FileUtils.rm(File.join(absolute_path, 'foo.gemspec')) gemfile <<-G gem 'foo', '1.2.3', :path => '#{relative_path}' G bundle :install Dir.chdir(bundled_app.parent) do run <<-R, :env => {"BUNDLE_GEMFILE" => bundled_app('Gemfile')} require 'foo' R end expect(err).to eq("") end end describe "with git gems that don't have gemspecs" do before :each do build_git "no-gemspec", :gemspec => false install_gemfile <<-G gem "no-gemspec", "1.0", :git => "#{lib_path('no-gemspec-1.0')}" G end it "loads the library via a virtual spec" do run <<-R require 'no-gemspec' puts NOGEMSPEC R expect(out).to eq("1.0") end end describe "with bundled and system gems" do before :each do system_gems "rack-1.0.0" install_gemfile <<-G source "file://#{gem_repo1}" gem "activesupport", "2.3.5" G end it "does not pull in system gems" do run <<-R require 'rubygems' begin; require 'rack' rescue LoadError puts 'WIN' end R expect(out).to eq("WIN") end it "provides a gem method" do run <<-R gem 'activesupport' require 'activesupport' puts ACTIVESUPPORT R expect(out).to eq("2.3.5") end it "raises an exception if gem is used to invoke a system gem not in the bundle" do run <<-R begin gem 'rack' rescue LoadError => e puts e.message end R expect(out).to eq("rack is not part of the bundle. Add it to Gemfile.") end it "sets GEM_HOME appropriately" do run "puts ENV['GEM_HOME']" expect(out).to eq(default_bundle_path.to_s) end end describe "with system gems in the bundle" do before :each do system_gems "rack-1.0.0" install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", "1.0.0" gem "activesupport", "2.3.5" G end it "sets GEM_PATH appropriately" do run "puts Gem.path" paths = out.split("\n") expect(paths).to include(system_gem_path.to_s) expect(paths).to include(default_bundle_path.to_s) end end describe "with a gemspec that requires other files" do before :each do build_git "bar", :gemspec => false do |s| s.write "lib/bar/version.rb", %{BAR_VERSION = '1.0'} s.write "bar.gemspec", <<-G lib = File.expand_path('../lib/', __FILE__) $:.unshift lib unless $:.include?(lib) require 'bar/version' Gem::Specification.new do |s| s.name = 'bar' s.version = BAR_VERSION s.summary = 'Bar' s.files = Dir["lib/**/*.rb"] end G end gemfile <<-G gem "bar", :git => "#{lib_path('bar-1.0')}" G end it "evals each gemspec in the context of its parent directory" do bundle :install run "require 'bar'; puts BAR" expect(out).to eq("1.0") end it "error intelligently if the gemspec has a LoadError" do update_git "bar", :gemspec => false do |s| s.write "bar.gemspec", "require 'foobarbaz'" end bundle :install expect(out).to include("was a LoadError while loading bar.gemspec") expect(out).to include("foobarbaz") expect(out).to include("bar.gemspec:1") expect(out).to include("try to require a relative path") if RUBY_VERSION >= "1.9" end it "evals each gemspec with a binding from the top level" do bundle "install" ruby <<-RUBY require 'bundler' def Bundler.require(path) raise "LOSE" end Bundler.load RUBY expect(err).to eq("") expect(out).to eq("") end end describe "when Bundler is bundled" do it "doesn't blow up" do install_gemfile <<-G gem "bundler", :path => "#{File.expand_path("..", lib)}" G bundle %|exec ruby -e "require 'bundler'; Bundler.setup"| expect(err).to be_empty end end end with_clean_env_spec.rb000066400000000000000000000050021446701454400374350ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/runtimerequire "spec_helper" describe "Bundler.with_env helpers" do shared_examples_for "Bundler.with_*_env" do it "should reset and restore the environment" do gem_path = ENV['GEM_PATH'] Bundler.with_clean_env do expect(`echo $GEM_PATH`.strip).not_to eq(gem_path) end expect(ENV['GEM_PATH']).to eq(gem_path) end end around do |example| env = Bundler::ORIGINAL_ENV.dup Bundler::ORIGINAL_ENV['BUNDLE_PATH'] = "./Gemfile" example.run Bundler::ORIGINAL_ENV.replace env end describe "Bundler.with_clean_env" do it_should_behave_like "Bundler.with_*_env" it "should keep the original GEM_PATH even in sub processes" do gemfile "" bundle "install --path vendor/bundle" code = "Bundler.with_clean_env do;" + " print ENV['GEM_PATH'] != '';" + "end" result = bundle "exec ruby -e #{code.inspect}" expect(result).to eq("true") end it "should not pass any bundler environment variables" do Bundler.with_clean_env do expect(`echo $BUNDLE_PATH`.strip).not_to eq('./Gemfile') end end it "should not pass RUBYOPT changes" do lib_path = File.expand_path('../../../lib', __FILE__) Bundler::ORIGINAL_ENV['RUBYOPT'] = " -I#{lib_path} -rbundler/setup" Bundler.with_clean_env do expect(`echo $RUBYOPT`.strip).not_to include '-rbundler/setup' expect(`echo $RUBYOPT`.strip).not_to include "-I#{lib_path}" end expect(Bundler::ORIGINAL_ENV['RUBYOPT']).to eq(" -I#{lib_path} -rbundler/setup") end it "should not change ORIGINAL_ENV" do expect(Bundler::ORIGINAL_ENV['BUNDLE_PATH']).to eq('./Gemfile') end end describe "Bundler.with_original_env" do it_should_behave_like "Bundler.with_*_env" it "should pass bundler environment variables set before Bundler was run" do Bundler.with_original_env do expect(`echo $BUNDLE_PATH`.strip).to eq('./Gemfile') end end end describe "Bundler.clean_system" do it "runs system inside with_clean_env" do Bundler.clean_system(%{echo 'if [ "$BUNDLE_PATH" = "" ]; then exit 42; else exit 1; fi' | /bin/sh}) expect($?.exitstatus).to eq(42) end end describe "Bundler.clean_exec" do it "runs exec inside with_clean_env" do pid = Kernel.fork do Bundler.clean_exec(%{echo 'if [ "$BUNDLE_PATH" = "" ]; then exit 42; else exit 1; fi' | /bin/sh}) end Process.wait(pid) expect($?.exitstatus).to eq(42) end end end spec_helper.rb000066400000000000000000000051531446701454400342530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec$:.unshift File.expand_path('..', __FILE__) $:.unshift File.expand_path('../../lib', __FILE__) require 'rspec' require 'bundler/psyched_yaml' require 'fileutils' require 'rubygems' require 'bundler' require 'uri' require 'digest/sha1' # Require the correct version of popen for the current platform if RbConfig::CONFIG['host_os'] =~ /mingw|mswin/ begin require 'win32/open3' rescue LoadError abort "Run `gem install win32-open3` to be able to run specs" end else require 'open3' end Dir["#{File.expand_path('../support', __FILE__)}/*.rb"].each do |file| require file unless file =~ /fakeweb\/.*\.rb/ end $debug = false $show_err = true Spec::Rubygems.setup FileUtils.rm_rf(Spec::Path.gem_repo1) ENV['RUBYOPT'] = "#{ENV['RUBYOPT']} -r#{Spec::Path.root}/spec/support/hax.rb" ENV['BUNDLE_SPEC_RUN'] = "true" # Don't wrap output in tests ENV['THOR_COLUMNS'] = '10000' RSpec.configure do |config| config.include Spec::Builders config.include Spec::Helpers config.include Spec::Indexes config.include Spec::Matchers config.include Spec::Path config.include Spec::Rubygems config.include Spec::Platforms config.include Spec::Sudo config.include Spec::Permissions if Spec::Sudo.test_sudo? config.filter_run :sudo => true else config.filter_run_excluding :sudo => true end if ENV['BUNDLER_REALWORLD_TESTS'] config.filter_run :realworld => true else config.filter_run_excluding :realworld => true end if RUBY_VERSION >= "1.9" config.filter_run_excluding :ruby => "1.8" else config.filter_run_excluding :ruby => "1.9" end config.filter_run :focused => true unless ENV['CI'] config.run_all_when_everything_filtered = true config.alias_example_to :fit, :focused => true original_wd = Dir.pwd original_path = ENV['PATH'] original_gem_home = ENV['GEM_HOME'] def pending_jruby_shebang_fix pending "JRuby executables do not have a proper shebang" if RUBY_PLATFORM == "java" end config.expect_with :rspec do |c| c.syntax = :expect end config.before :all do build_repo1 end config.before :each do reset! system_gems [] in_app_root end config.after :each do puts @out if example.exception Dir.chdir(original_wd) # Reset ENV ENV['PATH'] = original_path ENV['GEM_HOME'] = original_gem_home ENV['GEM_PATH'] = original_gem_home ENV['BUNDLE_PATH'] = nil ENV['BUNDLE_GEMFILE'] = nil ENV['BUNDLER_TEST'] = nil ENV['BUNDLE_FROZEN'] = nil ENV['BUNDLER_SPEC_PLATFORM'] = nil ENV['BUNDLER_SPEC_VERSION'] = nil ENV['BUNDLE_APP_CONFIG'] = nil end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/000077500000000000000000000000001446701454400332245ustar00rootroot00000000000000artifice/000077500000000000000000000000001446701454400347335ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportendopint_marshal_fail_basic_authentication.rb000066400000000000000000000005161446701454400460440ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint_marshal_fail", __FILE__) Artifice.deactivate class EndpointMarshalFailBasicAuthentication < EndpointMarshalFail before do unless env["HTTP_AUTHORIZATION"] halt 401, "Authentication info not supplied" end end end Artifice.activate_with(EndpointMarshalFailBasicAuthentication) endpoint.rb000066400000000000000000000044171446701454400371060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../../path.rb", __FILE__) require File.expand_path("../../../../lib/bundler/deprecate", __FILE__) include Spec::Path # Set up pretend http gem server with FakeWeb $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/artifice*/lib")].first}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/rack-*/lib")].first}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/rack-*/lib")].last}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/tilt*/lib")].first}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/sinatra*/lib")].first}" require 'artifice' require 'sinatra/base' class Endpoint < Sinatra::Base helpers do def dependencies_for(gem_names, marshal = gem_repo1("specs.4.8")) return [] if gem_names.nil? || gem_names.empty? require 'rubygems' require 'bundler' Bundler::Deprecate.skip_during do Marshal.load(File.open(marshal).read).map do |name, version, platform| spec = load_spec(name, version, platform) if gem_names.include?(spec.name) { :name => spec.name, :number => spec.version.version, :platform => spec.platform.to_s, :dependencies => spec.dependencies.select {|dep| dep.type == :runtime }.map do |dep| [dep.name, dep.requirement.requirements.map {|a| a.join(" ") }.join(", ")] end } end end.compact end end def load_spec(name, version, platform) full_name = "#{name}-#{version}" full_name += "-#{platform}" if platform != "ruby" Marshal.load(Zlib::Inflate.inflate(File.open(gem_repo1("quick/Marshal.4.8/#{full_name}.gemspec.rz")).read)) end end get "/quick/Marshal.4.8/:id" do redirect "/fetch/actual/gem/#{params[:id]}" end get "/fetch/actual/gem/:id" do File.read("#{gem_repo1}/quick/Marshal.4.8/#{params[:id]}") end get "/gems/:id" do File.read("#{gem_repo1}/gems/#{params[:id]}") end get "/api/v1/dependencies" do Marshal.dump(dependencies_for(params[:gems])) end get "/specs.4.8.gz" do File.read("#{gem_repo1}/specs.4.8.gz") end get "/prerelease_specs.4.8.gz" do File.read("#{gem_repo1}/prerelease_specs.4.8.gz") end end Artifice.activate_with(Endpoint) endpoint_500.rb000066400000000000000000000015071446701454400374670ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../../path.rb", __FILE__) include Spec::Path $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/artifice*/lib")].first}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/rack-*/lib")].first}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/rack-*/lib")].last}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/tilt*/lib")].first}" $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/sinatra*/lib")].first}" require 'artifice' require 'sinatra/base' Artifice.deactivate class Endpoint500 < Sinatra::Base get "/quick/Marshal.4.8/:id" do halt 500 end get "/fetch/actual/gem/:id" do halt 500 end get "/gems/:id" do halt 500 end get "/api/v1/dependencies" do halt 500 end get "/specs.4.8.gz" do halt 500 end end Artifice.activate_with(Endpoint500) endpoint_api_missing.rb000066400000000000000000000005551446701454400414670ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint", __FILE__) Artifice.deactivate class EndpointApiMissing < Endpoint get "/fetch/actual/gem/:id" do $stderr.puts params[:id] if params[:id] == 'rack-1.0.gemspec.rz' halt 404 else File.read("#{gem_repo2}/quick/Marshal.4.8/#{params[:id]}") end end end Artifice.activate_with(EndpointApiMissing) endpoint_basic_authentication.rb000066400000000000000000000004401446701454400433360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint", __FILE__) Artifice.deactivate class EndpointBasicAuthentication < Endpoint before do unless env["HTTP_AUTHORIZATION"] halt 401, "Authentication info not supplied" end end end Artifice.activate_with(EndpointBasicAuthentication) endpoint_creds_diff_host.rb000066400000000000000000000015751446701454400423150ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint", __FILE__) Artifice.deactivate class EndpointCredsDiffHost < Endpoint helpers do def auth @auth ||= Rack::Auth::Basic::Request.new(request.env) end def authorized? auth.provided? && auth.basic? && auth.credentials && auth.credentials == ['user', 'pass'] end def protected! unless authorized? response['WWW-Authenticate'] = %(Basic realm="Testing HTTP Auth") throw(:halt, [401, "Not authorized\n"]) end end end before do protected! unless request.path_info.include?("/no/creds/") end get "/gems/:id" do redirect "http://diffhost.com/no/creds/#{params[:id]}" end get "/no/creds/:id" do if request.host.include?("diffhost") && !auth.provided? File.read("#{gem_repo1}/gems/#{params[:id]}") end end end Artifice.activate_with(EndpointCredsDiffHost) endpoint_extra.rb000066400000000000000000000012511446701454400403020ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint", __FILE__) Artifice.deactivate class EndpointExtra < Endpoint get "/extra/api/v1/dependencies" do halt 404 end get "/extra/specs.4.8.gz" do File.read("#{gem_repo2}/specs.4.8.gz") end get "/extra/prerelease_specs.4.8.gz" do File.read("#{gem_repo2}/prerelease_specs.4.8.gz") end get "/extra/quick/Marshal.4.8/:id" do redirect "/extra/fetch/actual/gem/#{params[:id]}" end get "/extra/fetch/actual/gem/:id" do File.read("#{gem_repo2}/quick/Marshal.4.8/#{params[:id]}") end get "/extra/gems/:id" do File.read("#{gem_repo2}/gems/#{params[:id]}") end end Artifice.activate_with(EndpointExtra) endpoint_extra_missing.rb000066400000000000000000000005501446701454400420340ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint_extra", __FILE__) Artifice.deactivate class EndpointExtraMissing < EndpointExtra get "/extra/fetch/actual/gem/:id" do if params[:id] == 'missing-1.0.gemspec.rz' halt 404 else File.read("#{gem_repo2}/quick/Marshal.4.8/#{params[:id]}") end end end Artifice.activate_with(EndpointExtraMissing) endpoint_fallback.rb000066400000000000000000000006711446701454400407230ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint", __FILE__) Artifice.deactivate class EndpointFallback < Endpoint DEPENDENCY_LIMIT = 60 get "/api/v1/dependencies" do if params[:gems] && params[:gems].size <= DEPENDENCY_LIMIT Marshal.dump(dependencies_for(params[:gems])) else halt 413, "Too many gems to resolve, please request less than #{DEPENDENCY_LIMIT} gems" end end end Artifice.activate_with(EndpointFallback) endpoint_host_redirect.rb000066400000000000000000000005501446701454400420160ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint", __FILE__) Artifice.deactivate class EndpointHostRedirect < Endpoint get "/fetch/actual/gem/:id", :host_name => 'localgemserver.test' do redirect "http://bundler.localgemserver.test#{request.path_info}" end get "/api/v1/dependencies" do status 404 end end Artifice.activate_with(EndpointHostRedirect) endpoint_marshal_fail.rb000066400000000000000000000003501446701454400416000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint_fallback", __FILE__) Artifice.deactivate class EndpointMarshalFail < EndpointFallback get "/api/v1/dependencies" do "f0283y01hasf" end end Artifice.activate_with(EndpointMarshalFail) endpoint_redirect.rb000066400000000000000000000004451446701454400407640ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint", __FILE__) Artifice.deactivate class EndpointRedirect < Endpoint get "/fetch/actual/gem/:id" do redirect "/fetch/actual/gem/#{params[:id]}" end get "/api/v1/dependencies" do status 404 end end Artifice.activate_with(EndpointRedirect) endpoint_timeout.rb000066400000000000000000000003741446701454400406520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/artificerequire File.expand_path("../endpoint_fallback", __FILE__) Artifice.deactivate class EndpointTimeout < EndpointFallback SLEEP_TIMEOUT = 15 get "/api/v1/dependencies" do sleep(SLEEP_TIMEOUT) end end Artifice.activate_with(EndpointTimeout) builders.rb000066400000000000000000000472311446701454400353120ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportrequire 'bundler/shared_helpers' module Spec module Builders def self.constantize(name) name.gsub('-', '').upcase end def v(version) Gem::Version.new(version) end def pl(platform) Gem::Platform.new(platform) end def build_repo1 build_repo gem_repo1 do build_gem "rack", %w(0.9.1 1.0.0) do |s| s.executables = "rackup" s.post_install_message = "Rack's post install message" end build_gem "thin" do |s| s.add_dependency "rack" s.post_install_message = "Thin's post install message" end build_gem "rack-obama" do |s| s.add_dependency "rack" s.post_install_message = "Rack-obama's post install message" end build_gem "rack_middleware", "1.0" do |s| s.add_dependency "rack", "0.9.1" end build_gem "rails", "2.3.2" do |s| s.executables = "rails" s.add_dependency "rake", "10.0.2" s.add_dependency "actionpack", "2.3.2" s.add_dependency "activerecord", "2.3.2" s.add_dependency "actionmailer", "2.3.2" s.add_dependency "activeresource", "2.3.2" end build_gem "actionpack", "2.3.2" do |s| s.add_dependency "activesupport", "2.3.2" end build_gem "activerecord", ["2.3.1", "2.3.2"] do |s| s.add_dependency "activesupport", "2.3.2" end build_gem "actionmailer", "2.3.2" do |s| s.add_dependency "activesupport", "2.3.2" end build_gem "activeresource", "2.3.2" do |s| s.add_dependency "activesupport", "2.3.2" end build_gem "activesupport", %w(1.2.3 2.3.2 2.3.5) build_gem "activemerchant" do |s| s.add_dependency "activesupport", ">= 2.0.0" end build_gem "rails_fail" do |s| s.add_dependency "activesupport", "= 1.2.3" end build_gem "missing_dep" do |s| s.add_dependency "not_here" end build_gem "rspec", "1.2.7", :no_default => true do |s| s.write "lib/spec.rb", "SPEC = '1.2.7'" end build_gem "rack-test", :no_default => true do |s| s.write "lib/rack/test.rb", "RACK_TEST = '1.0'" end build_gem "platform_specific" do |s| s.platform = Gem::Platform.local s.write "lib/platform_specific.rb", "PLATFORM_SPECIFIC = '1.0.0 #{Gem::Platform.local}'" end build_gem "platform_specific" do |s| s.platform = "java" s.write "lib/platform_specific.rb", "PLATFORM_SPECIFIC = '1.0.0 JAVA'" end build_gem "platform_specific" do |s| s.platform = "ruby" s.write "lib/platform_specific.rb", "PLATFORM_SPECIFIC = '1.0.0 RUBY'" end build_gem "platform_specific" do |s| s.platform = "x86-mswin32" s.write "lib/platform_specific.rb", "PLATFORM_SPECIFIC = '1.0.0 MSWIN'" end build_gem "platform_specific" do |s| s.platform = "x86-darwin-100" s.write "lib/platform_specific.rb", "PLATFORM_SPECIFIC = '1.0.0 x86-darwin-100'" end build_gem "only_java" do |s| s.platform = "java" end build_gem "nokogiri", "1.4.2" build_gem "nokogiri", "1.4.2" do |s| s.platform = "java" s.write "lib/nokogiri.rb", "NOKOGIRI = '1.4.2 JAVA'" s.add_dependency "weakling", ">= 0.0.3" end build_gem "weakling", "0.0.3" build_gem "multiple_versioned_deps" do |s| s.add_dependency "weakling", ">= 0.0.1", "< 0.1" end build_gem "not_released", "1.0.pre" build_gem "has_prerelease", "1.0" build_gem "has_prerelease", "1.1.pre" build_gem "with_development_dependency" do |s| s.add_development_dependency "activesupport", "= 2.3.5" end build_gem "with_license" do |s| s.license = "MIT" end build_gem "with_implicit_rake_dep" do |s| s.extensions << "Rakefile" s.write "Rakefile", <<-RUBY task :default do path = File.expand_path("../lib", __FILE__) FileUtils.mkdir_p(path) File.open("\#{path}/implicit_rake_dep.rb", "w") do |f| f.puts "IMPLICIT_RAKE_DEP = 'YES'" end end RUBY end build_gem "another_implicit_rake_dep" do |s| s.extensions << "Rakefile" s.write "Rakefile", <<-RUBY task :default do path = File.expand_path("../lib", __FILE__) FileUtils.mkdir_p(path) File.open("\#{path}/another_implicit_rake_dep.rb", "w") do |f| f.puts "ANOTHER_IMPLICIT_RAKE_DEP = 'YES'" end end RUBY end build_gem "very_simple_binary" do |s| s.add_c_extension end build_gem "bundler", "0.9" do |s| s.executables = "bundle" s.write "bin/bundle", "puts 'FAIL'" end # The bundler 0.8 gem has a rubygems plugin that always loads :( build_gem "bundler", "0.8.1" do |s| s.write "lib/bundler/omg.rb", "" s.write "lib/rubygems_plugin.rb", "require 'bundler/omg' ; puts 'FAIL'" end build_gem "bundler_dep" do |s| s.add_dependency "bundler" end # The yard gem iterates over Gem.source_index looking for plugins build_gem "yard" do |s| s.write "lib/yard.rb", <<-Y if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("1.8.10") specs = Gem::Specification else specs = Gem.source_index.find_name('') end specs.each do |gem| puts gem.full_name end Y end # The rcov gem is platform mswin32, but has no arch build_gem "rcov" do |s| s.platform = Gem::Platform.new([nil, "mswin32", nil]) s.write "lib/rcov.rb", "RCOV = '1.0.0'" end build_gem "net-ssh" build_gem "net-sftp", "1.1.1" do |s| s.add_dependency "net-ssh", ">= 1.0.0", "< 1.99.0" end # Test comlicated gem dependencies for install build_gem "net_a" do |s| s.add_dependency "net_b" s.add_dependency "net_build_extensions" end build_gem "net_b" build_gem "net_build_extensions" do |s| s.add_dependency "rake" s.extensions << "Rakefile" s.write "Rakefile", <<-RUBY task :default do path = File.expand_path("../lib", __FILE__) FileUtils.mkdir_p(path) File.open("\#{path}/net_build_extensions.rb", "w") do |f| f.puts "NET_BUILD_EXTENSIONS = 'YES'" end end RUBY end build_gem "net_c" do |s| s.add_dependency "net_a" s.add_dependency "net_d" end build_gem "net_d" build_gem "net_e" do |s| s.add_dependency "net_d" end # Capistrano did this (at least until version 2.5.10) # Rubygems 2.2 doesn't allow the specifying of a dependency twice # See https://github.com/rubygems/rubygems/commit/03dbac93a3396a80db258d9bc63500333c25bd2f build_gem "double_deps", "1.0", :skip_validation => true do |s| s.add_dependency "net-ssh", ">= 1.0.0" s.add_dependency "net-ssh" end build_gem "foo" end end def build_repo2(&blk) FileUtils.rm_rf gem_repo2 FileUtils.cp_r gem_repo1, gem_repo2 update_repo2(&blk) if block_given? end def build_repo3 build_repo gem_repo3 do build_gem "rack" end FileUtils.rm_rf Dir[gem_repo3("prerelease*")] end def update_repo2 update_repo gem_repo2 do build_gem "rack", "1.2" do |s| s.executables = "rackup" end yield if block_given? end end def build_security_repo build_repo security_repo do build_gem "rack" build_gem "signed_gem" do |s| cert = 'signing-cert.pem' pkey = 'signing-pkey.pem' s.write cert, TEST_CERT s.write pkey, TEST_PKEY s.signing_key = pkey s.cert_chain = [cert] end end end def build_repo(path, &blk) return if File.directory?(path) rake_path = Dir["#{Path.base_system_gems}/**/rake*.gem"].first if rake_path FileUtils.mkdir_p("#{path}/gems") FileUtils.cp rake_path, "#{path}/gems/" else abort "You need to `rm -rf #{tmp}`" end update_repo(path, &blk) end def update_repo(path) @_build_path = "#{path}/gems" yield @_build_path = nil with_gem_path_as Path.base_system_gems do Dir.chdir(path) { gem_command :generate_index } end end def build_index(&block) index = Bundler::Index.new IndexBuilder.run(index, &block) if block_given? index end def build_spec(name, version, platform = nil, &block) Array(version).map do |v| Gem::Specification.new do |s| s.name = name s.version = Gem::Version.new(v) s.platform = platform DepBuilder.run(s, &block) if block_given? end end end def build_dep(name, requirements = Gem::Requirement.default, type = :runtime) Bundler::Dependency.new(name, :version => requirements) end def build_lib(name, *args, &blk) build_with(LibBuilder, name, args, &blk) end def build_gem(name, *args, &blk) build_with(GemBuilder, name, args, &blk) end def build_git(name, *args, &block) opts = args.last.is_a?(Hash) ? args.last : {} builder = opts[:bare] ? GitBareBuilder : GitBuilder spec = build_with(builder, name, args, &block) GitReader.new(opts[:path] || lib_path(spec.full_name)) end def update_git(name, *args, &block) spec = build_with(GitUpdater, name, args, &block) GitReader.new lib_path(spec.full_name) end private def build_with(builder, name, args, &blk) @_build_path ||= nil options = args.last.is_a?(Hash) ? args.pop : {} versions = args.last || "1.0" spec = nil options[:path] ||= @_build_path Array(versions).each do |version| spec = builder.new(self, name, version) if !spec.authors or spec.authors.empty? spec.authors = ["no one"] end yield spec if block_given? spec._build(options) end spec end class IndexBuilder include Builders def self.run(index, &block) new(index).run(&block) end def initialize(index) @index = index end def run(&block) instance_eval(&block) end def gem(*args, &block) build_spec(*args, &block).each do |s| @index << s end end def platforms(platforms) platforms.split(/\s+/).each do |platform| platform.gsub!(/^(mswin32)$/, 'x86-\1') yield Gem::Platform.new(platform) end end def versions(versions) versions.split(/\s+/).each { |version| yield v(version) } end end class DepBuilder include Builders def self.run(spec, &block) new(spec).run(&block) end def initialize(spec) @spec = spec end def run(&block) instance_eval(&block) end def runtime(name, requirements) @spec.add_runtime_dependency(name, requirements) end alias dep runtime end class LibBuilder def initialize(context, name, version) @context = context @name = name @spec = Gem::Specification.new do |s| s.name = name s.version = version s.summary = "This is just a fake gem for testing" end @files = {} end def method_missing(*args, &blk) @spec.send(*args, &blk) end def write(file, source = "") @files[file] = source end def executables=(val) Array(val).each do |file| write "#{@spec.bindir}/#{file}", "require '#{@name}' ; puts #{@name.upcase}" end @spec.executables = Array(val) end def add_c_extension require_paths << 'ext' extensions << "ext/extconf.rb" write "ext/extconf.rb", <<-RUBY require "mkmf" # exit 1 unless with_config("simple") extension_name = "very_simple_binary_c" dir_config extension_name create_makefile extension_name RUBY write "ext/very_simple_binary.c", <<-C #include "ruby.h" void Init_very_simple_binary_c() { rb_define_module("VerySimpleBinaryInC"); } C end def _build(options) path = options[:path] || _default_path if options[:rubygems_version] @spec.rubygems_version = options[:rubygems_version] def @spec.mark_version; end def @spec.validate; end end case options[:gemspec] when false # do nothing when :yaml @files["#{name}.gemspec"] = @spec.to_yaml else @files["#{name}.gemspec"] = @spec.to_ruby end unless options[:no_default] @files = _default_files.merge(@files) end @spec.authors = ["no one"] @files.each do |file, source| file = Pathname.new(path).join(file) FileUtils.mkdir_p(file.dirname) File.open(file, 'w') { |f| f.puts source } end @spec.files = @files.keys path end def _default_files @_default_files ||= { "lib/#{name}.rb" => "#{Builders.constantize(name)} = '#{version}'" } end def _default_path @context.tmp('libs', @spec.full_name) end end class GitBuilder < LibBuilder def _build(options) path = options[:path] || _default_path super(options.merge(:path => path)) Dir.chdir(path) do `git init` `git add *` `git config user.email "lol@wut.com"` `git config user.name "lolwut"` `git commit -m 'OMG INITIAL COMMIT'` end end end class GitBareBuilder < LibBuilder def _build(options) path = options[:path] || _default_path super(options.merge(:path => path)) Dir.chdir(path) do `git init --bare` end end end class GitUpdater < LibBuilder def silently(str) `#{str} 2>#{Bundler::NULL}` end def _build(options) libpath = options[:path] || _default_path Dir.chdir(libpath) do silently "git checkout master" if branch = options[:branch] raise "You can't specify `master` as the branch" if branch == "master" if `git branch | grep #{branch}`.empty? silently("git branch #{branch}") end silently("git checkout #{branch}") elsif tag = options[:tag] `git tag #{tag}` elsif options[:remote] silently("git remote add origin file://#{options[:remote]}") elsif options[:push] silently("git push origin #{options[:push]}") end current_ref = `git rev-parse HEAD`.strip _default_files.keys.each do |path| _default_files[path] << "\n#{Builders.constantize(name)}_PREV_REF = '#{current_ref}'" end super(options.merge(:path => libpath, :gemspec => false)) `git add *` `git commit -m "BUMP"` end end end class GitReader attr_reader :path def initialize(path) @path = path end def ref_for(ref, len = nil) ref = git "rev-parse #{ref}" ref = ref[0..len] if len ref end private def git(cmd) Bundler::SharedHelpers.with_clean_git_env do Dir.chdir(@path) { `git #{cmd}`.strip } end end end class GemBuilder < LibBuilder def _build(opts) lib_path = super(opts.merge(:path => @context.tmp(".tmp/#{@spec.full_name}"), :no_default => opts[:no_default])) Dir.chdir(lib_path) do destination = opts[:path] || _default_path FileUtils.mkdir_p(destination) if !@spec.authors or @spec.authors.empty? @spec.authors = ["that guy"] end Bundler.rubygems.build(@spec, opts[:skip_validation]) if opts[:to_system] `gem install --ignore-dependencies #{@spec.full_name}.gem` else FileUtils.mv("#{@spec.full_name}.gem", opts[:path] || _default_path) end end end def _default_path @context.gem_repo1('gems') end end TEST_CERT=<= 0["ruby-openid" ~> 2.0.0[" mongrel" >= 0["memcache-client" >= 0[" fcgi" >= 0[" camping" >= 0["test-spec" >= 0: platform" ruby: name" rack: number" 1.0.0windows.rb000066400000000000000000000014241446701454400365710ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/support/fakewebrequire File.expand_path("../../path.rb", __FILE__) include Spec::Path files = [ 'specs.4.8.gz', 'prerelease_specs.4.8.gz', 'quick/Marshal.4.8/rcov-1.0-mswin32.gemspec.rz', 'gems/rcov-1.0-mswin32.gem' ] # Set up pretend http gem server with FakeWeb $LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/fakeweb*/lib")].first}" require 'fakeweb' FakeWeb.allow_net_connect = false files.each do |file| FakeWeb.register_uri(:get, "http://localgemserver.test/#{file}", :body => File.read("#{gem_repo1}/#{file}")) end FakeWeb.register_uri(:get, "http://localgemserver.test/gems/rcov-1.0-x86-mswin32.gem", :status => ["404", "Not Found"]) FakeWeb.register_uri(:get, "http://localgemserver.test/api/v1/dependencies", :status => ["404", "Not Found"]) hax.rb000066400000000000000000000007551446701454400342610ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportrequire 'rubygems' class Gem::Platform @local = new(ENV['BUNDLER_SPEC_PLATFORM']) if ENV['BUNDLER_SPEC_PLATFORM'] end if ENV['BUNDLER_SPEC_VERSION'] module Bundler VERSION = ENV['BUNDLER_SPEC_VERSION'].dup end end class Object if ENV['BUNDLER_SPEC_RUBY_ENGINE'] remove_const :RUBY_ENGINE if defined?(RUBY_ENGINE) RUBY_ENGINE = ENV['BUNDLER_SPEC_RUBY_ENGINE'] if RUBY_ENGINE == "jruby" JRUBY_VERSION = ENV["BUNDLER_SPEC_RUBY_ENGINE_VERSION"] end end end helpers.rb000066400000000000000000000230471446701454400351420ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportmodule Spec module Helpers def reset! @in_p, @out_p, @err_p = nil, nil, nil Dir["#{tmp}/{gems/*,*}"].each do |dir| next if %(base remote1 gems rubygems).include?(File.basename(dir)) unless ENV['BUNDLER_SUDO_TESTS'] FileUtils.rm_rf(dir) else `sudo rm -rf #{dir}` end end FileUtils.mkdir_p(tmp) FileUtils.mkdir_p(home) end attr_reader :out, :err, :exitstatus def in_app_root(&blk) Dir.chdir(bundled_app, &blk) end def in_app_root2(&blk) Dir.chdir(bundled_app2, &blk) end def in_app_root_custom(root, &blk) Dir.chdir(root, &blk) end def run(cmd, *args) opts = args.last.is_a?(Hash) ? args.pop : {} expect_err = opts.delete(:expect_err) env = opts.delete(:env) groups = args.map {|a| a.inspect }.join(", ") setup = "require 'rubygems' ; require 'bundler' ; Bundler.setup(#{groups})\n" @out = ruby(setup + cmd, :expect_err => expect_err, :env => env) end def load_error_run(ruby, name, *args) cmd = <<-RUBY begin #{ruby} rescue LoadError => e $stderr.puts "ZOMG LOAD ERROR" if e.message.include?("-- #{name}") end RUBY opts = args.last.is_a?(Hash) ? args.pop : {} opts.merge!(:expect_err => true) args += [opts] run(cmd, *args) end def lib File.expand_path('../../../lib', __FILE__) end def bundle(cmd, options = {}) expect_err = options.delete(:expect_err) exitstatus = options.delete(:exitstatus) options["no-color"] = true unless options.key?("no-color") || %w(exec conf).include?(cmd.to_s[0..3]) bundle_bin = File.expand_path('../../../bin/bundle', __FILE__) requires = options.delete(:requires) || [] requires << File.expand_path('../fakeweb/'+options.delete(:fakeweb)+'.rb', __FILE__) if options.key?(:fakeweb) requires << File.expand_path('../artifice/'+options.delete(:artifice)+'.rb', __FILE__) if options.key?(:artifice) requires_str = requires.map{|r| "-r#{r}"}.join(" ") env = (options.delete(:env) || {}).map{|k,v| "#{k}='#{v}' "}.join args = options.map do |k,v| v == true ? " --#{k}" : " --#{k} #{v}" if v end.join cmd = "#{env}#{Gem.ruby} -I#{lib} #{requires_str} #{bundle_bin} #{cmd}#{args}" if exitstatus sys_status(cmd) else sys_exec(cmd, expect_err){|i| yield i if block_given? } end end def bundle_ruby(options = {}) expect_err = options.delete(:expect_err) exitstatus = options.delete(:exitstatus) options["no-color"] = true unless options.key?("no-color") bundle_bin = File.expand_path('../../../bin/bundle_ruby', __FILE__) requires = options.delete(:requires) || [] requires << File.expand_path('../fakeweb/'+options.delete(:fakeweb)+'.rb', __FILE__) if options.key?(:fakeweb) requires << File.expand_path('../artifice/'+options.delete(:artifice)+'.rb', __FILE__) if options.key?(:artifice) requires_str = requires.map{|r| "-r#{r}"}.join(" ") env = (options.delete(:env) || {}).map{|k,v| "#{k}='#{v}' "}.join cmd = "#{env}#{Gem.ruby} -I#{lib} #{requires_str} #{bundle_bin}" if exitstatus sys_status(cmd) else sys_exec(cmd, expect_err){|i| yield i if block_given? } end end def ruby(ruby, options = {}) expect_err = options.delete(:expect_err) env = (options.delete(:env) || {}).map{|k,v| "#{k}='#{v}' "}.join ruby.gsub!(/["`\$]/) {|m| "\\#{m}" } lib_option = options[:no_lib] ? "" : " -I#{lib}" sys_exec(%{#{env}#{Gem.ruby}#{lib_option} -e "#{ruby}"}, expect_err) end def load_error_ruby(ruby, name, opts = {}) cmd = <<-R begin #{ruby} rescue LoadError => e $stderr.puts "ZOMG LOAD ERROR"# if e.message.include?("-- #{name}") end R ruby(cmd, opts.merge(:expect_err => true)) end def gembin(cmd) lib = File.expand_path("../../../lib", __FILE__) old, ENV['RUBYOPT'] = ENV['RUBYOPT'], "#{ENV['RUBYOPT']} -I#{lib}" cmd = bundled_app("bin/#{cmd}") unless cmd.to_s.include?("/") sys_exec(cmd.to_s) ensure ENV['RUBYOPT'] = old end def sys_exec(cmd, expect_err = false) Open3.popen3(cmd.to_s) do |stdin, stdout, stderr| @in_p, @out_p, @err_p = stdin, stdout, stderr yield @in_p if block_given? @in_p.close @out = @out_p.read_available_bytes.strip @err = @err_p.read_available_bytes.strip end puts @err unless expect_err || @err.empty? || !$show_err @out end def sys_status(cmd) @err = nil @out = %x{#{cmd}}.strip @exitstatus = $?.exitstatus end def config(config = nil) path = bundled_app('.bundle/config') return YAML.load_file(path) unless config FileUtils.mkdir_p(File.dirname(path)) File.open(path, 'w') do |f| f.puts config.to_yaml end config end def gemfile(*args) path = bundled_app("Gemfile") path = args.shift if Pathname === args.first str = args.shift || "" path.dirname.mkpath File.open(path.to_s, 'w') do |f| f.puts strip_whitespace(str) end end def lockfile(*args) path = bundled_app("Gemfile.lock") path = args.shift if Pathname === args.first str = args.shift || "" File.open(path.to_s, 'w') do |f| f.puts strip_whitespace(str) end end def strip_whitespace(str) # Trim the leading spaces spaces = str[/\A\s+/, 0] || "" str.gsub(/^#{spaces}/, '') end def install_gemfile(*args) gemfile(*args) opts = args.last.is_a?(Hash) ? args.last : {} opts[:retry] ||= 0 bundle :install, opts end def install_gems(*gems) gems.each do |g| path = "#{gem_repo1}/gems/#{g}.gem" raise "OMG `#{path}` does not exist!" unless File.exist?(path) gem_command :install, "--no-rdoc --no-ri --ignore-dependencies #{path}" end end alias install_gem install_gems def with_gem_path_as(path) gem_home, gem_path = ENV['GEM_HOME'], ENV['GEM_PATH'] ENV['GEM_HOME'], ENV['GEM_PATH'] = path.to_s, path.to_s yield ensure ENV['GEM_HOME'], ENV['GEM_PATH'] = gem_home, gem_path end def break_git! FileUtils.mkdir_p(tmp("broken_path")) File.open(tmp("broken_path/git"), "w", 0755) do |f| f.puts "#!/usr/bin/env ruby\nSTDERR.puts 'This is not the git you are looking for'\nexit 1" end ENV["PATH"] = "#{tmp("broken_path")}:#{ENV["PATH"]}" end def fake_man! FileUtils.mkdir_p(tmp("fake_man")) File.open(tmp("fake_man/man"), "w", 0755) do |f| f.puts "#!/usr/bin/env ruby\nputs ARGV.inspect\n" end ENV["PATH"] = "#{tmp("fake_man")}:#{ENV["PATH"]}" end def kill_path! ENV["PATH"] = "" end def system_gems(*gems) gems = gems.flatten FileUtils.rm_rf(system_gem_path) FileUtils.mkdir_p(system_gem_path) Gem.clear_paths gem_home, gem_path, path = ENV['GEM_HOME'], ENV['GEM_PATH'], ENV['PATH'] ENV['GEM_HOME'], ENV['GEM_PATH'] = system_gem_path.to_s, system_gem_path.to_s install_gems(*gems) if block_given? begin yield ensure ENV['GEM_HOME'], ENV['GEM_PATH'] = gem_home, gem_path ENV['PATH'] = path end end end def realworld_system_gems(*gems) gems = gems.flatten FileUtils.rm_rf(system_gem_path) FileUtils.mkdir_p(system_gem_path) Gem.clear_paths gem_home, gem_path, path = ENV['GEM_HOME'], ENV['GEM_PATH'], ENV['PATH'] ENV['GEM_HOME'], ENV['GEM_PATH'] = system_gem_path.to_s, system_gem_path.to_s gems.each do |gem| gem_command :install, "--no-rdoc --no-ri #{gem}" end if block_given? begin yield ensure ENV['GEM_HOME'], ENV['GEM_PATH'] = gem_home, gem_path ENV['PATH'] = path end end end def cache_gems(*gems) gems = gems.flatten FileUtils.rm_rf("#{bundled_app}/vendor/cache") FileUtils.mkdir_p("#{bundled_app}/vendor/cache") gems.each do |g| path = "#{gem_repo1}/gems/#{g}.gem" raise "OMG `#{path}` does not exist!" unless File.exist?(path) FileUtils.cp(path, "#{bundled_app}/vendor/cache") end end def simulate_new_machine system_gems [] FileUtils.rm_rf default_bundle_path FileUtils.rm_rf bundled_app('.bundle') end def simulate_platform(platform) old, ENV['BUNDLER_SPEC_PLATFORM'] = ENV['BUNDLER_SPEC_PLATFORM'], platform.to_s yield if block_given? ensure ENV['BUNDLER_SPEC_PLATFORM'] = old if block_given? end def simulate_ruby_engine(engine, version = "1.6.0") return if engine == local_ruby_engine old, ENV['BUNDLER_SPEC_RUBY_ENGINE'] = ENV['BUNDLER_SPEC_RUBY_ENGINE'], engine old_version, ENV['BUNDLER_SPEC_RUBY_ENGINE_VERSION'] = ENV['BUNDLER_SPEC_RUBY_ENGINE_VERSION'], version yield if block_given? ensure ENV['BUNDLER_SPEC_RUBY_ENGINE'] = old if block_given? ENV['BUNDLER_SPEC_RUBY_ENGINE_VERSION'] = old_version if block_given? end def simulate_bundler_version(version) old, ENV['BUNDLER_SPEC_VERSION'] = ENV['BUNDLER_SPEC_VERSION'], version.to_s yield if block_given? ensure ENV['BUNDLER_SPEC_VERSION'] = old if block_given? end def revision_for(path) Dir.chdir(path) { `git rev-parse HEAD`.strip } end end end indexes.rb000066400000000000000000000102651446701454400351350ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportmodule Spec module Indexes def dep(name, reqs = nil) @deps ||= [] @deps << Bundler::Dependency.new(name, :version => reqs) end def platform(*args) @platforms ||= [] @platforms.concat args.map { |p| Gem::Platform.new(p) } end alias platforms platform def resolve @platforms ||= ['ruby'] deps = [] @deps.each do |d| @platforms.each do |p| deps << Bundler::DepProxy.new(d, p) end end Bundler::Resolver.resolve(deps, @index) end def should_resolve_as(specs) got = resolve got = got.map { |s| s.full_name }.sort expect(got).to eq(specs.sort) end def should_conflict_on(names) begin got = resolve flunk "The resolve succeeded with: #{got.map { |s| s.full_name }.sort.inspect}" rescue Bundler::VersionConflict => e expect(Array(names).sort).to eq(e.conflicts.sort) end end def gem(*args, &blk) build_spec(*args, &blk).first end def an_awesome_index build_index do gem "rack", %w(0.8 0.9 0.9.1 0.9.2 1.0 1.1) gem "rack-mount", %w(0.4 0.5 0.5.1 0.5.2 0.6) # --- Rails versions "1.2.3 2.2.3 2.3.5 3.0.0.beta 3.0.0.beta1" do |version| gem "activesupport", version gem "actionpack", version do dep "activesupport", version if version >= v('3.0.0.beta') dep "rack", '~> 1.1' dep "rack-mount", ">= 0.5" elsif version > v('2.3') then dep "rack", '~> 1.0.0' elsif version > v('2.0.0') then dep "rack", '~> 0.9.0' end end gem "activerecord", version do dep "activesupport", version dep "arel", ">= 0.2" if version >= v('3.0.0.beta') end gem "actionmailer", version do dep "activesupport", version dep "actionmailer", version end if version < v('3.0.0.beta') gem "railties", version do dep "activerecord", version dep "actionpack", version dep "actionmailer", version dep "activesupport", version end else gem "railties", version gem "rails", version do dep "activerecord", version dep "actionpack", version dep "actionmailer", version dep "activesupport", version dep "railties", version end end end versions '1.0 1.2 1.2.1 1.2.2 1.3 1.3.0.1 1.3.5 1.4.0 1.4.2 1.4.2.1' do |version| platforms "ruby java mswin32 mingw32 x64-mingw32" do |platform| next if version == v('1.4.2.1') && platform != pl('x86-mswin32') next if version == v('1.4.2') && platform == pl('x86-mswin32') gem "nokogiri", version, platform do dep "weakling", ">= 0.0.3" if platform =~ pl('java') end end end versions '0.0.1 0.0.2 0.0.3' do |version| gem "weakling", version end # --- Rails related versions '1.2.3 2.2.3 2.3.5' do |version| gem "activemerchant", version do dep "activesupport", ">= #{version}" end end end end # Builder 3.1.4 will activate first, but if all # goes well, it should resolve to 3.0.4 def a_conflict_index build_index do gem "builder", %w(3.0.4 3.1.4) gem("grape", '0.2.6') do dep "builder", ">= 0" end versions '3.2.8 3.2.9 3.2.10 3.2.11' do |version| gem("activemodel", version) do dep "builder", "~> 3.0.0" end end gem("my_app", '1.0.0') do dep "activemodel", ">= 0" dep "grape", ">= 0" end end end def a_circular_index build_index do gem "rack", "1.0.1" gem("foo", '0.2.6') do dep "bar", ">= 0" end gem("bar", "1.0.0") do dep "foo", ">= 0" end gem("circular_app", '1.0.0') do dep "foo", ">= 0" dep "bar", ">= 0" end end end end end matchers.rb000066400000000000000000000045571446701454400353130ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportmodule Spec module Matchers RSpec::Matchers.define :have_dep do |*args| dep = Bundler::Dependency.new(*args) match do |actual| actual.length == 1 && actual.all? { |d| d == dep } end end RSpec::Matchers.define :have_gem do |*args| match do |actual| actual.length == args.length && actual.all? { |a| args.include?(a.full_name) } end end RSpec::Matchers.define :have_rubyopts do |*args| args = args.flatten args = args.first.split(/\s+/) if args.size == 1 #failure_message_for_should "Expected RUBYOPT to have options #{args.join(" ")}. It was #{ENV["RUBYOPT"]}" match do |actual| actual = actual.split(/\s+/) if actual.is_a?(String) args.all? {|arg| actual.include?(arg) } && actual.uniq.size == actual.size end end def should_be_installed(*names) opts = names.last.is_a?(Hash) ? names.pop : {} groups = Array(opts[:groups]) groups << opts names.each do |name| name, version, platform = name.split(/\s+/) version_const = name == 'bundler' ? 'Bundler::VERSION' : Spec::Builders.constantize(name) run "require '#{name}.rb'; puts #{version_const}", *groups actual_version, actual_platform = out.split(/\s+/) expect(Gem::Version.new(actual_version)).to eq(Gem::Version.new(version)) expect(actual_platform).to eq(platform) end end alias should_be_available should_be_installed def should_not_be_installed(*names) opts = names.last.is_a?(Hash) ? names.pop : {} groups = Array(opts[:groups]) || [] names.each do |name| name, version = name.split(/\s+/) run <<-R, *(groups + [opts]) begin require '#{name}' puts #{Spec::Builders.constantize(name)} rescue LoadError, NameError puts "WIN" end R if version.nil? || out == "WIN" expect(out).to eq("WIN") else expect(Gem::Version.new(out)).not_to eq(Gem::Version.new(version)) end end end def should_be_locked expect(bundled_app("Gemfile.lock")).to exist end def lockfile_should_be(expected) should_be_locked spaces = expected[/\A\s+/, 0] || "" expected.gsub!(/^#{spaces}/, '') expect(bundled_app("Gemfile.lock").read).to eq(expected) end end end path.rb000066400000000000000000000027371446701454400344370ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportrequire 'pathname' module Spec module Path def root @root ||= Pathname.new(File.expand_path("../../..", __FILE__)) end def tmp(*path) root.join("tmp", *path) end def home(*path) tmp.join("home", *path) end def default_bundle_path(*path) system_gem_path(*path) end def bundled_app(*path) root = tmp.join("bundled_app") FileUtils.mkdir_p(root) root.join(*path) end alias bundled_app1 bundled_app def bundled_app2(*path) root = tmp.join("bundled_app2") FileUtils.mkdir_p(root) root.join(*path) end def vendored_gems(path = nil) bundled_app(*["vendor/bundle", Gem.ruby_engine, Gem::ConfigMap[:ruby_version], path].compact) end def cached_gem(path) bundled_app("vendor/cache/#{path}.gem") end def base_system_gems tmp.join("gems/base") end def gem_repo1(*args) tmp("gems/remote1", *args) end def gem_repo_missing(*args) tmp("gems/missing", *args) end def gem_repo2(*args) tmp("gems/remote2", *args) end def gem_repo3(*args) tmp("gems/remote3", *args) end def security_repo(*args) tmp("gems/security_repo", *args) end def system_gem_path(*path) tmp("gems/system", *path) end def lib_path(*args) tmp("libs", *args) end def bundler_path Pathname.new(File.expand_path('../../../lib', __FILE__)) end extend self end end permissions.rb000066400000000000000000000002751446701454400360510ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportmodule Spec module Permissions def with_umask(new_umask) old_umask = File.umask(new_umask) yield if block_given? ensure File.umask(old_umask) end end end platforms.rb000066400000000000000000000033051446701454400355020ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportmodule Spec module Platforms include Bundler::GemHelpers def rb Gem::Platform::RUBY end def mac Gem::Platform.new('x86-darwin-10') end def java Gem::Platform.new([nil, "java", nil]) end def linux Gem::Platform.new(['x86', 'linux', nil]) end def mswin Gem::Platform.new(['x86', 'mswin32', nil]) end def mingw Gem::Platform.new(['x86', 'mingw32', nil]) end def x64_mingw Gem::Platform.new(['x64', 'mingw32', nil]) end def all_platforms [rb, java, linux, mswin, mingw, x64_mingw] end def local generic(Gem::Platform.local) end def not_local all_platforms.find { |p| p != generic(Gem::Platform.local) } end def local_tag if RUBY_PLATFORM == "java" :jruby else :ruby end end def not_local_tag [:ruby, :jruby].find { |tag| tag != local_tag } end def local_ruby_engine ENV["BUNDLER_SPEC_RUBY_ENGINE"] || (defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby") end def local_engine_version return ENV["BUNDLER_SPEC_RUBY_ENGINE_VERSION"] if ENV["BUNDLER_SPEC_RUBY_ENGINE_VERSION"] case local_ruby_engine when "ruby" RUBY_VERSION when "rbx" Rubinius::VERSION when "jruby" JRUBY_VERSION else raise BundlerError, "That RUBY_ENGINE is not recognized" nil end end def not_local_engine_version case not_local_tag when :ruby not_local_ruby_version when :jruby "1.6.1" end end def not_local_ruby_version "1.12" end def not_local_patchlevel 9999 end end end ruby_ext.rb000066400000000000000000000007411446701454400353350ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportclass IO def read_available_bytes(chunk_size = 16384, select_timeout = 0.02) buffer = [] return "" if closed? || eof? # IO.select cannot be used here due to the fact that it # just does not work on windows while true begin IO.select([self], nil, nil, select_timeout) break if eof? # stop raising :-( buffer << self.readpartial(chunk_size) rescue(EOFError) break end end return buffer.join end end rubygems_ext.rb000066400000000000000000000026141446701454400362120ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportrequire 'rubygems/user_interaction' module Spec module Rubygems def self.setup Gem.clear_paths ENV['BUNDLE_PATH'] = nil ENV['GEM_HOME'] = ENV['GEM_PATH'] = Path.base_system_gems.to_s ENV['PATH'] = ["#{Path.root}/bin", "#{Path.system_gem_path}/bin", ENV['PATH']].join(File::PATH_SEPARATOR) unless File.exist?("#{Path.base_system_gems}") FileUtils.mkdir_p(Path.base_system_gems) puts "fetching fakeweb, artifice, sinatra, rake, rack, and builder for the tests to use..." `gem install fakeweb artifice --no-rdoc --no-ri` `gem install sinatra --version 1.2.7 --no-rdoc --no-ri` # Rake version has to be consistent for tests to pass `gem install rake --version 10.0.2 --no-rdoc --no-ri` # 3.0.0 breaks 1.9.2 specs `gem install builder --version 2.1.2 --no-rdoc --no-ri` `gem install rack --no-rdoc --no-ri` `gem install pry --no-rdoc --no-ri` end ENV['HOME'] = Path.home.to_s Gem::DefaultUserInteraction.ui = Gem::SilentUI.new end def gem_command(command, args = "", options = {}) if command == :exec && !options[:no_quote] args = args.gsub(/(?=")/, "\\") args = %["#{args}"] end lib = File.join(File.dirname(__FILE__), '..', '..', 'lib') %x{#{Gem.ruby} -I#{lib} -rubygems -S gem --backtrace #{command} #{args}}.strip end end end streams.rb000066400000000000000000000004361446701454400351530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportrequire 'stringio' def capture(*streams) streams.map! { |stream| stream.to_s } begin result = StringIO.new streams.each { |stream| eval "$#{stream} = result" } yield ensure streams.each { |stream| eval("$#{stream} = #{stream.upcase}") } end result.string end sudo.rb000066400000000000000000000006011446701454400344410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/supportmodule Spec module Sudo def self.present? @which_sudo ||= Bundler.which("sudo") end def self.test_sudo? present? && ENV['BUNDLER_SUDO_TESTS'] end def sudo(cmd) raise "sudo not present" unless Sudo.present? sys_exec("sudo #{cmd}") end def chown_system_gems_to_root sudo "chown -R root #{system_gem_path}" end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/update/000077500000000000000000000000001446701454400327725ustar00rootroot00000000000000gems_spec.rb000066400000000000000000000067701446701454400352170ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/updaterequire "spec_helper" describe "bundle update" do before :each do build_repo2 install_gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" G end describe "with no arguments" do it "updates the entire bundle" do update_repo2 do build_gem "activesupport", "3.0" end bundle "update" should_be_installed "rack 1.2", "rack-obama 1.0", "activesupport 3.0" end it "doesn't delete the Gemfile.lock file if something goes wrong" do gemfile <<-G source "file://#{gem_repo2}" gem "activesupport" gem "rack-obama" exit! G bundle "update" expect(bundled_app("Gemfile.lock")).to exist end end describe "--quiet argument" do it "shows UI messages without --quiet argument" do bundle "update" expect(out).to include("Fetching source") end it "does not show UI messages with --quiet argument" do bundle "update --quiet" expect(out).not_to include("Fetching source") end end describe "with a top level dependency" do it "unlocks all child dependencies that are unrelated to other locked dependencies" do update_repo2 do build_gem "activesupport", "3.0" end bundle "update rack-obama" should_be_installed "rack 1.2", "rack-obama 1.0", "activesupport 2.3.5" end end describe "with an unknown dependency" do it "should inform the user" do bundle "update halting-problem-solver", :expect_err=>true expect(out).to include "Could not find gem 'halting-problem-solver'" end it "should suggest alternatives" do bundle "update active-support", :expect_err=>true expect(out).to include "Did you mean activesupport?" end end describe "with a child dependency" do it "should update the child dependency" do update_repo2 bundle "update rack" should_be_installed "rack 1.2" end end describe "with --local option" do it "doesn't hit repo2" do FileUtils.rm_rf(gem_repo2) bundle "update --local" expect(out).not_to match(/Fetching source index/) end end end describe "bundle update in more complicated situations" do before :each do build_repo2 end it "will eagerly unlock dependencies of a specified gem" do install_gemfile <<-G source "file://#{gem_repo2}" gem "thin" gem "rack-obama" G update_repo2 do build_gem "thin" , '2.0' do |s| s.add_dependency "rack" end end bundle "update thin" should_be_installed "thin 2.0", "rack 1.2", "rack-obama 1.0" end end describe "bundle update without a Gemfile.lock" do it "should not explode" do build_repo2 gemfile <<-G source "file://#{gem_repo2}" gem "rack", "1.0" G bundle "update" should_be_installed "rack 1.0.0" end end describe "bundle update when a gem depends on a newer version of bundler" do before(:each) do build_repo2 do build_gem "rails", "3.0.1" do |s| s.add_dependency "bundler", Bundler::VERSION.succ end end gemfile <<-G source "file://#{gem_repo2}" gem "rails", "3.0.1" G end it "should not explode" do bundle "update" expect(err).to be_empty end it "should explain that bundler conflicted" do bundle "update" expect(out).not_to match(/in snapshot/i) expect(out).to match(/current Bundler version/i) expect(out).to match(/perhaps you need to update bundler/i) end end git_spec.rb000066400000000000000000000133741446701454400350450ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/updaterequire "spec_helper" describe "bundle update" do describe "git sources" do it "floats on a branch when :branch is used" do build_git "foo", "1.0" update_git "foo", :branch => "omg" install_gemfile <<-G git "#{lib_path('foo-1.0')}", :branch => "omg" do gem 'foo' end G update_git "foo", :branch => "omg" do |s| s.write "lib/foo.rb", "FOO = '1.1'" end bundle "update" should_be_installed "foo 1.1" end it "updates correctly when you have like craziness" do build_lib "activesupport", "3.0", :path => lib_path("rails/activesupport") build_git "rails", "3.0", :path => lib_path("rails") do |s| s.add_dependency "activesupport", "= 3.0" end install_gemfile <<-G gem "rails", :git => "#{lib_path('rails')}" G bundle "update rails" expect(out).to include("Using activesupport (3.0) from #{lib_path('rails')} (at master)") should_be_installed "rails 3.0", "activesupport 3.0" end it "floats on a branch when :branch is used and the source is specified in the update" do build_git "foo", "1.0", :path => lib_path("foo") update_git "foo", :branch => "omg", :path => lib_path("foo") install_gemfile <<-G git "#{lib_path('foo')}", :branch => "omg" do gem 'foo' end G update_git "foo", :branch => "omg", :path => lib_path("foo") do |s| s.write "lib/foo.rb", "FOO = '1.1'" end bundle "update --source foo" should_be_installed "foo 1.1" end it "floats on master when updating all gems that are pinned to the source even if you have child dependencies" do build_git "foo", :path => lib_path('foo') build_gem "bar", :to_system => true do |s| s.add_dependency "foo" end install_gemfile <<-G gem "foo", :git => "#{lib_path('foo')}" gem "bar" G update_git "foo", :path => lib_path('foo') do |s| s.write "lib/foo.rb", "FOO = '1.1'" end bundle "update foo" should_be_installed "foo 1.1" end it "notices when you change the repo url in the Gemfile" do build_git "foo", :path => lib_path("foo_one") build_git "foo", :path => lib_path("foo_two") install_gemfile <<-G gem "foo", "1.0", :git => "#{lib_path('foo_one')}" G FileUtils.rm_rf lib_path("foo_one") install_gemfile <<-G gem "foo", "1.0", :git => "#{lib_path('foo_two')}" G expect(err).to be_empty expect(out).to include("Fetching #{lib_path}/foo_two") expect(out).to include("Your bundle is complete!") end it "fetches tags from the remote" do build_git "foo" @remote = build_git("bar", :bare => true) update_git "foo", :remote => @remote.path update_git "foo", :push => "master" install_gemfile <<-G gem 'foo', :git => "#{@remote.path}" G # Create a new tag on the remote that needs fetching update_git "foo", :tag => "fubar" update_git "foo", :push => "fubar" gemfile <<-G gem 'foo', :git => "#{@remote.path}", :tag => "fubar" G bundle "update", :exitstatus => true expect(exitstatus).to eq(0) end describe "with submodules" do before :each do build_gem "submodule", :to_system => true do |s| s.write "lib/submodule.rb", "puts 'GEM'" end build_git "submodule", "1.0" do |s| s.write "lib/submodule.rb", "puts 'GIT'" end build_git "has_submodule", "1.0" do |s| s.add_dependency "submodule" end Dir.chdir(lib_path('has_submodule-1.0')) do `git submodule add #{lib_path('submodule-1.0')} submodule-1.0` `git commit -m "submodulator"` end end it "it unlocks the source when submodules are added to a git source" do install_gemfile <<-G git "#{lib_path('has_submodule-1.0')}" do gem "has_submodule" end G run "require 'submodule'" expect(out).to eq('GEM') install_gemfile <<-G git "#{lib_path('has_submodule-1.0')}", :submodules => true do gem "has_submodule" end G run "require 'submodule'" expect(out).to eq('GIT') end it "it unlocks the source when submodules are removed from git source" do pending "This would require actually removing the submodule from the clone" install_gemfile <<-G git "#{lib_path('has_submodule-1.0')}", :submodules => true do gem "has_submodule" end G run "require 'submodule'" expect(out).to eq('GIT') install_gemfile <<-G git "#{lib_path('has_submodule-1.0')}" do gem "has_submodule" end G run "require 'submodule'" expect(out).to eq('GEM') end end it "errors with a message when the .git repo is gone" do build_git "foo", "1.0" install_gemfile <<-G gem "foo", :git => "#{lib_path('foo-1.0')}" G lib_path("foo-1.0").join(".git").rmtree bundle :update, :expect_err => true expect(out).to include(lib_path("foo-1.0").to_s) end it "should not explode on invalid revision on update of gem by name" do build_git "rack", "0.8" build_git "rack", "0.8", :path => lib_path('local-rack') do |s| s.write "lib/rack.rb", "puts :LOCAL" end install_gemfile <<-G source "file://#{gem_repo1}" gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master" G bundle %|config local.rack #{lib_path('local-rack')}| bundle "update rack" expect(out).to include("Your bundle is updated!") end end end source_spec.rb000066400000000000000000000020631446701454400355530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/bundler-1.5.2/spec/updaterequire "spec_helper" describe "bundle update" do describe "git sources" do before :each do build_repo2 @git = build_git "foo", :path => lib_path("foo") do |s| s.executables = "foobar" end install_gemfile <<-G source "file://#{gem_repo2}" git "#{lib_path('foo')}" do gem 'foo' end gem 'rack' G end it "updates the source" do update_git "foo", :path => @git.path bundle "update --source foo" in_app_root do run <<-RUBY require 'foo' puts "WIN" if defined?(FOO_PREV_REF) RUBY expect(out).to eq("WIN") end end it "unlocks gems that were originally pulled in by the source" do update_git "foo", "2.0", :path => @git.path bundle "update --source foo" should_be_installed "foo 2.0" end it "leaves all other gems frozen" do update_repo2 update_git "foo", :path => @git.path bundle "update --source foo" should_be_installed "rack 1.0" end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/000077500000000000000000000000001446701454400310465ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/.autotest000066400000000000000000000021231446701454400327150ustar00rootroot00000000000000# -*- ruby -*- require 'autotest/restart' require 'autotest/rcov' if ENV['RCOV'] Autotest.add_hook :initialize do |at| at.testlib = 'minitest/autorun' bench_tests = %w(TestMinitestBenchmark) mock_tests = %w(TestMinitestMock TestMinitestStub) spec_tests = %w(TestMinitestReporter TestMetaStatic TestMeta TestSpecInTestCase) unit_tests = %w(TestMinitestGuard TestMinitestRunnable TestMinitestRunner TestMinitestTest TestMinitestUnit TestMinitestUnitInherited TestMinitestUnitOrder TestMinitestUnitRecording TestMinitestUnitTestCase) { bench_tests => "test/minitest/test_minitest_benchmark.rb", mock_tests => "test/minitest/test_minitest_mock.rb", spec_tests => "test/minitest/test_minitest_reporter.rb", unit_tests => "test/minitest/test_minitest_unit.rb", }.each do |klasses, file| klasses.each do |klass| at.extra_class_map[klass] = file end end at.add_exception 'coverage.info' at.add_exception 'coverage' end # require 'autotest/rcov' # Autotest::RCov.command = 'rcov_info' mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/History.rdoc000066400000000000000000001351351446701454400333700ustar00rootroot00000000000000=== 5.18.1 / 2023-06-16 * 3 bug fixes: * Avoid extra string allocations when filtering tests. (tenderlove) * Only mention deprecated ENV['N'] if it is an integer string. * Push up test_order to Minitest::Runnable to fix minitest/hell. (koic) === 5.18.0 / 2023-03-04 * 2 major enhancements: * Added assert_pattern & refute_pattern for pattern matching. (flavorjones) * Added matching must_pattern_match & wont_pattern_match to minitest/spec. * 1 bug fix: * Support the new message format of NameError in Ruby 3.3 (mame) === 5.17.0 / 2022-12-31 * 1 minor enhancement: * Refactor setup hooks into a SETUP_METHODS constant. (MSP-Greg) * 3 bug fixes: * Fix kwargs for Mock calls to delegator. (blowmage) * Fix kwargs for expectations. (bobmazanec, blowmage) * Remove check for .b method. (tenderlove) === 5.16.3 / 2022-08-17 * 2 bug fixes: * Fixed exception sanitization by removing TypeError restriction on rescue. * Use A instead of deprecated TESTOPTS in rake test:slow. (davidstosik) === 5.16.2 / 2022-07-03 * 4 bug fixes: * Added MT_KWARGS_HACK kludge for stub to deal with ruby 2.7 kwargs nastiness. (tsugimoto) * In #expect, pop Hash class from args if $MT_KWARGS_HACK. (casperisfine) * In above scenario, set expected kwargs (as Objects) based on actual kwargs. * Nuke ivars if exception fails to marshal twice (eg better_errors). (irphilli) === 5.16.1 / 2022-06-20 * 2 bug fixes: * Apparently adding real kwarg support to mocks/stubs broke some code. Fixed. * Use `MT_KWARGS_HACK=1` to activate the kludgy kwargs support w/ caveats. * Clarified some doco wrt the block on #stub. === 5.16.0 / 2022-06-14 * 2 major enhancements: * Added Minitest::TestTask. * Dropping ruby 2.2 - 2.5. 2.6 is DTM soon too. * 11 minor enhancements: * Added --show-skips option to show skips at end of run but not require --verbose. (MSP-Greg) * Added Minitest.seed, the random seed used by the run. * Calling `srand Minitest.seed` before all shuffles to ensure determinism. * Extended #stub to handle kwargs for both block and call args. (SampsonCrowley) * Extended Mock#__call to display kwargs. * Extended Mock#expect to record kwargs. * Extended Mock#method_missing to take kwargs & compare them against expected. * Mock#method_missing displays better errors on arity mismatch. * Removed minor optimization removing empty suites before run. * Simplified test randomization (test order will change even with fixed seed). * assert_match now returns the MatchData on success. (Nakilon) * 3 bug fixes: * (Re)Fixed marshalling of exceptions, neutering them in 2 passes. * Fixed more problems with rdoc. * Had to patch up mock and stub to deal with <=2.7 kwargs oddities === 5.15.0 / 2021-12-14 * 1 major enhancement: * assert_throws returns the value returned, if any. (volmer) * 3 minor enhancements: * Added -S option to skip reporting of certain types of output * Enable Ruby deprecation warnings by default. (casperisfine) * Use Etc.nprocessors by default in order to maximize cpu usage. (tonytonyjan) * 6 bug fixes: * Close then unlink tempfiles on Windows. (nobu) * Fixed #skip_until for windows paths. (MSP-Greg) * Fixed a bunch of tests for jruby and windows. (MSP-Greg) * Fixed marshalling of specs if they error. (tenderlove, jeremyevans, et al) * Updated deprecation message for block expectations. (blowmage) * Use Kernel.warn directly in expectations in case CUT defines their own warn. (firien) === 5.14.4 / 2021-02-23 * 1 bug fix: * Fixed deprecation warning using stub with methods using keyword arguments. (Nakilon) === 5.14.3 / 2021-01-05 * 1 bug fix: * Bumped require_ruby_version to < 4 (trunk = 3.1). === 5.14.2 / 2020-08-31 * 1 bug fix: * Bumped ruby version to include 3.0 (trunk). === 5.14.1 / 2020-05-15 * 3 minor enhancements: * Minitest.filter_backtrace returns original backtrace if filter comes back empty. * Minitest::BacktraceFilter now returns entire backtrace if $MT_DEBUG set in env. * Return true on a successful refute. (jusleg) * 1 bug fix: * Fixed expectation doco to not use global expectations. === 5.14.0 / 2020-01-11 * 2 minor enhancements: * Block-assertions (eg assert_output) now error if raised inside the block. (casperisfine) * Changed assert_raises to only catch Assertion since that covers Skip and friends. * 3 bug fixes: * Added example for value wrapper with block to Expectations module. (stomar) * Fixed use of must/wont_be_within_delta on Expectation instance. (stomar) * Renamed UnexpectedError#exception to #error to avoid problems with reraising. (casperisfine) === 5.13.0 / 2019-10-29 * 9 minor enhancements: * Added Minitest::Guard#osx? * Added examples to documentation for assert_raises. (lxxxvi) * Added expectations #path_must_exist and #path_wont_exist. Not thrilled with the names. * Added fail_after(year, month, day, msg) to allow time-bombing after a deadline. * Added skip_until(year, month, day, msg) to allow deferring until a deadline. * Deprecated Minitest::Guard#maglev? * Deprecated Minitest::Guard#rubinius? * Finally added assert_path_exists and refute_path_exists. (deivid-rodriguez) * Refactored and pulled Assertions#things_to_diff out of #diff. (BurdetteLamar) * 3 bug fixes: * Fix autorun bug that affects fork exit status in tests. (dylanahsmith/jhawthorn) * Improved documentation for _/value/expect, especially for blocks. (svoop) * Support new Proc#to_s format. (ko1) === 5.12.2 / 2019-09-28 * 1 bug fix: * After chatting w/ @y-yagi and others, decided to lower support to include ruby 2.2. === 5.12.1 / 2019-09-28 * 1 minor enhancement: * Added documentation for Reporter classes. (sshaw) * 3 bug fixes: * Avoid using 'match?' to support older ruby versions. (y-yagi) * Fixed broken link to reference on goodness-of-fit testing. (havenwood) * Update requirements in readme and Rakefile/hoe spec. === 5.12.0 / 2019-09-22 * 8 minor enhancements: * Added a descriptive error if assert_output or assert_raises called without a block. (okuramasafumi) * Changed mu_pp_for_diff to make having both \n and \\n easier to debug. * Deprecated $N for specifying number of parallel test runners. Use MT_CPU. * Deprecated use of global expectations. To be removed from MT6. * Extended Assertions#mu_pp to encoding validity output for strings to improve diffs. * Extended Assertions#mu_pp to output encoding and validity if invalid to improve diffs. * Extended Assertions#mu_pp_for_diff to make escaped newlines more obvious in diffs. * Fail gracefully when expectation used outside of `it`. * 3 bug fixes: * Check `option[:filter]` klass before match. Fixes 2.6 warning. (y-yagi) * Fixed Assertions#diff from recalculating if set to nil * Fixed spec section of readme to not use deprecated global expectations. (CheezItMan) === 5.11.3 / 2018-01-26 * 1 bug fix: * Pushed #error? up to Reportable module. (composerinteralia) === 5.11.2 / 2018-01-25 * 1 minor enhancement: * Reversed Test < Result. Back to < Runnable and using Reportable for shared code. * 2 bug fixes: * Fixed Result#location for instances of Test. (alexisbernard) * Fixed deprecation message for Runnable#marshal_dump. (y-yagi) === 5.11.1 / 2018-01-02 * 1 bug fix: * Fixed Result (a superclass of Test) overriding Runnable's name accessors. (y-yagi, MSP-Greg) === 5.11.0 / 2018-01-01 * 2 major enhancements: * Added Minitest::Result and Minitest::Result.from(runnable). * Changed Minitest::Test to subclass Result and refactored methods up. * 7 minor enhancements: * Added --no-plugins and MT_NO_PLUGINS to bypass MT plugin autoloading. Helps with bad actors installed globally. * Added bench_performance_{logarithmic,power} for spec-style benchmarks. (rickhull) * Added deprecation warning for Runnable#marshal_dump. * Minitest.run_one_method now checks for instance of Result, not exact same class. * Minitest::Test.run returns a Result version of self, not self. * ProgressReporter#prerecord now explicitly prints klass.name. Allows for fakers. * 4 bug fixes: * Object.stub no longer calls the passed block if stubbed with a callable. * Object.stub now passes blocks down to the callable result. * Pushed Minitest::Test#time & #time_it up to Runnable. * Test nil equality directly in assert_equal. Fixes #679. (voxik) === 5.11.0b1 / 2017-12-20 * 2 major enhancements: * Added Minitest::Result and Minitest::Result.from(runnable). * Changed Minitest::Test to subclass Result and refactored methods up. * 6 minor enhancements: * Added --no-plugins and MT_NO_PLUGINS to bypass MT plugin autoloading. Helps with bad actors installed globally. * Added bench_performance_{logarithmic,power} for spec-style benchmarks. (rickhull) * Minitest.run_one_method now checks for instance of Result, not exact same class. * Minitest::Test.run returns a Result version of self, not self. * ProgressReporter#prerecord now explicitly prints klass.name. Allows for fakers. * Removed Runnable.marshal_dump/load. * 4 bug fixes: * Object.stub no longer calls the passed block if stubbed with a callable. * Object.stub now passes blocks down to the callable result. * Pushed Minitest::Test#time & #time_it up to Runnable. * Test nil equality directly in assert_equal. Fixes #679. (voxik) === 5.10.3 / 2017-07-21 * 1 minor enhancement: * Extended documentation for Mock#expect for multiple calls to mock object. (insti) * 2 bug fixes: * Finished off missing doco. * Fixed verbose output on parallelize_me! classes. (chanks) === 5.10.2 / 2017-05-09 * 1 minor enhancement: * Added suggestion in minitest/hell to install minitest/proveit. * 7 bug fixes: * Expand MT6 to Minitest 6. (xaviershay) * Fixed location of assert_send deprecation. (rab) * Fixed location of nil assert_equal deprecation to work with expectations. (jeremyevans) * Fixed minitest/hell to use parallelize_me! (azul) * Made deprecation use warn so -W0 will silence it. * Workaround for rdoc nodoc generation bug that totally f'd up minitest doco. (Paxa) * Write aggregated_results directly to the IO object to avoid mixed encoding errors. (tenderlove) === 5.10.1 / 2016-12-01 * 1 bug fix: * Added a hack/kludge to deal with missing #prerecord on reporters that aren't properly subclassing AbstractReporter (I'm looking at you minitest-reporters) === 5.10.0 / 2016-11-30 * 1 major enhancement: * Deprecated ruby 1.8, 1.9, possibly 2.0, assert_send, & old MiniTest namespace. * 3 minor enhancements: * Warn if assert_equal expects a nil. This will fail in minitest 6+. (tenderlove) * Added AbstractReporter#prerecord and extended ProgressReporter and CompositeReporter to use it. * Minor optimization: remove runnables with no runnable methods before run. * 3 bug fixes: * Fix assert_throw rescuing any NameError and ArgumentError. (waldyr) * Clean up (most of the) last remaining vestiges of minitest/unit. * 2.4: removed deprecation warnings when referring to Fixnum. === 5.9.1 / 2016-09-25 * 2 bug fixes: * Re-release to refresh gem certificate signing. ugh. * Fixed hoe/minitest to not augment load path if we're actually testing minitest. === 5.9.0 / 2016-05-16 * 8 minor enhancements: * Added Minitest.info_signal accessors to customize signal for test run info. (nate) * Added assert_mock to make it more clear that you're testing w/ them. * Added negative filter by test name. (utilum) * Added warning to README that 1.8 and 1.9 support will be dropped in minitest 6. * Automatically activate minitest/hell if $MT_HELL is defined. * Improved default error messages for assert and refute. (bhenderson) * minitest/hell now tries to require minitest/proveit * mu_pp for strings prints out non-standard encodings to improve assert_equal diffs. * 1 bug fix: * Removed Interrupt from PASSTHROUGH_EXCEPTIONS (already handled). (waldyr) === 5.8.5 / 2016-09-25 * 2 bug fixes: * Re-release to refresh gem certificate signing. ugh. * Fixed hoe/minitest to not augment load path if we're actually testing minitest. === 5.8.4 / 2016-01-21 * 1 bug fix: * Allow Minitest::Assertion to pass through assert_raises so inner failures are dealt with first. === 5.8.3 / 2015-11-17 * 1 minor enhancement: * Added extra note about mocks and threads to readme. (zamith) * 1 bug fix: * Fixed bug in Mock#verify. (pithub/zamith) === 5.8.2 / 2015-10-26 * 1 bug fix: * Fixed using parallelize_me! and capture_io (or any locking io). (arlt/tenderlove) === 5.8.1 / 2015-09-23 * 1 minor enhancement: * Refactor assert_raises to be cleaner and to pass SystemExit and SignalException. (bhenderson) === 5.8.0 / 2015-08-06 * 2 minor enhancements: * Add optional delegation mechanism to extend object with a mock. (zamith) * Return early if there are no filtered methods. (jeremyevans) * 1 bug fix: * Don't extend io with pride if io is not a tty. (toy) === 5.7.0 / 2015-05-27 * 1 major enhancement: * assert_raises now matches subclasses of the expected exception types. (jeremyevans) * 3 minor enhancements: * Added :block type for minitest/spec's #infect_an_assertion. (jeremyevans) * Inline verification error messages in minitest/mock for GC performance. (zamith) * assert_raises defaults to RuntimeError if not specified. (jeremyevans) * 4 bug fixes: * Added 'class' to minitest/mock's overridden_methods list. (zamith) * Added file/line to infect_an_assertion's class_eval call. (jeremyevans) * Cleared UnexpectedError's mesg w/ generic string. * Fixed non-proc-oriented expectations when used on proc target. (jeremyevans) === 5.6.1 / 2015-04-27 * 2 bug fixes: * Added Minitest.clock_time and switched all Time.now to it. (tenderlove) * Moved Minitest::Expectations#_ into Minitest::Spec::DSL. === 5.6.0 / 2015-04-13 * 4 major enhancements: * Added Minitest::Expectation value monad. * Added Minitest::Expectations#_ that returns an Expectation. Aliased to value. * All expectations are added to Minitest::Expectation. * At some point, the methods on Object will be deprecated and then removed. * 4 minor enhancements: * Added a note about bundle exec pitfall in ruby 2.2+. (searls) * Lazily start the parallel executor. (tenderlove) * Make mocks more debugger-friendly (edward) * Print out the current test run on interrupt. (riffraff) * 3 bug fixes: * Fix failing test under Windows. (kimhmadsen) * Record mocked calls before they happen so mocks can raise exceptions easier (tho I'm not a fan). (corecode) * Tried to clarify mocks vs stubs terminology better. (kkirsche) === 5.5.1 / 2015-01-09 * 1 bug fix: * Fixed doco problems. (zzak) === 5.5.0 / 2014-12-12 // mri 2.2.0 (as a real gem) * 1 minor enhancement: * Allow seed to be given via ENV for rake test loader sadness: eg rake SEED=42. === 5.4.3 / 2014-11-11 * 2 bug fixes: * Clarified requirements for ruby are now 1.8.7 or better. * Force encode error output in case mal-encoded exception is raised. (jasonrclark) === 5.4.2 / 2014-09-26 * 2 minor enhancements: * Extract teardown method list. * Thanks to minitest-gcstats got a 5-10% speedup via reduced GC! === 5.4.1 / 2014-08-28 * 1 bug fix: * Fixed specs hidden by nesting/ordering bug (blowmage/apotonick) === 5.4.0 / 2014-07-07 * 2 minor enhancements: * Kernel#describe extended to splat additional_desc. * Spec#spec_type extended to take a splat of additional items, passed to matcher procs. * 1 bug fix: * minitest/spec should require minitest/test, not minitest/unit. (doudou) === 5.3.5 / 2014-06-17 * 1 minor enhancement: * Spit and polish (mostly spit). === 5.3.4 / 2014-05-15 * 1 minor enhancement: * Test classes are randomized before running. (judofyr) === 5.3.3 / 2014-04-14 * 1 bug fix: * Fixed using expectations w/ DSL in Test class w/o describe. (blowmage+others) === 5.3.2 / 2014-04-02 * 1 bug fix: * Fixed doco on Assertions.assertions. (xaviershay) === 5.3.1 / 2014-03-14 * 1 minor enhancement: * Modified verbage on bad 'let' names to be more helpful. (Archytaus) * 1 bug fix: * Fixed 2 cases still using MiniTest. (mikesea) === 5.3.0 / 2014-02-25 * 1 minor enhancement: * Mocked methods can take a block to verify state. Seattle.rb 12 bday present from ernie! Thanks!! === 5.2.3 / 2014-02-10 * 1 bug fix: * Fixed Spec#let check to allow overriding of other lets. (mvz) === 5.2.2 / 2014-01-22 * 1 minor enhancement: * Spec#let raises ArgumentError if you override _any_ instance method (except subject). (rynr) * 1 bug fix: * Fixed up benchmark spec doco and added a test to demonstrate. (bhenderson) === 5.2.1 / 2014-01-07 * 1 bug fix: * Properly deal with horrible mix of runtime load errors + other at_exit handlers. (dougo/chqr) === 5.2.0 / 2013-12-13 * 1 minor enhancement: * Change expectations to allow calling most on procs (but not calling the proc). (bhenderson+others) === 5.1.0 / 2013-12-05 * 1 minor enhancement: * Use a Queue for scheduling parallel tests. (tenderlove) * 1 bug fix: * Fixed misspelling in doco. (amatsuda) === 5.0.8 / 2013-09-20 * 1 bug fix: * Fixed siginfo handler by rearranging reporters and fixing to_s. (tenderlove) === 5.0.7 / 2013-09-05 * 2 minor enhancements: * Added clarification about the use of thread local variables in expectations. (jemc) * Added extra message about skipped tests, if any. Disable globally with $MT_NO_SKIP_MSG. * 2 bug fixes: * Only require minitest, not minitest/autorun in pride_plugin. (judofyr) * Require rubygems in load_plugins in case you're not using minitest/autorun. === 5.0.6 / 2013-06-28 * 3 minor enhancements: * Allow stub to pass args to blocks. (swindsor) * Improved warning message about minitest/autorun to address 1.9's minitest/autorun. * Made minitest/test require minitest as needed. For lib writers. (erikh) * 1 bug fix: * Fixed missing require in minitest/test. (erikh) === 4.7.5 / 2013-06-21 // mri 2.1.1 * 2 bug fixes: * Fix Spec#describe_stack to be thread local. * Fix multithreaded test failures by defining Time local to mock test namespace === 5.0.5 / 2013-06-20 * 6 bug fixes: * DOH! Fixed the rest of the new casing on Minitest. (splattael) * Fixed typo on minitest/mock rdoc. (mrgilman/guiceolin) * Make Spec::DSL.describe_stack thread local to avoid failing on my own tests. * Make a fake Time.now local to the tests so they won't interfere with real reporter timings. * Make everything mockable by wrapping all 'special' methods in a smarter wrapper. (bestie) * Raise ArgumentError if let name starts with 'test'. (johnmaxwell) === 5.0.4 / 2013-06-07 * 5 minor enhancements: * Added AbstractReporter, defining required Reporter API to quack properly. * Added doco for writing reporters. * Refactored Reporter into ProgressReporter and SummaryReporter. (idea: phiggins, code:me+scotch) * Refactored SummaryReporter pushing up to StatisticsReporter. (phiggins) * Removed Reporter#run_and_report... cleaner, but doesn't "fit" in the API. === 5.0.3 / 2013-05-29 * 4 minor enhancements: * Added Runnable.with_info_handler and Runnable.on_signal. * Moved io.sync restore to Reporter#run_and_report. * Refactored inner loop of Reporter#report to #to_s. Callable for status updates. * Restored MT4's mid-run report (^t). (tenderlove). === 5.0.2 / 2013-05-20 * 3 bug fixes: * Gem.find_files is smarter than I remember... cause I wrote it that way. *sigh* I'm getting old. * Pride wasn't doing puts through its #io. (tmiller/tenderlove) * Replaced Runnable#dup and Test#dup with marshal_dump/load. Too many problems cropping up on untested rails code. (tenderlove/rubys) === 5.0.1 / 2013-05-14 * 2 bug fixes: * Documented Assertions' need for @assertions to be defined by the includer. * Only load one plugin version per name. Tries for latest. === 5.0.0 / 2013-05-10 Oh god... here we go... Minitest 5: * 4 deaths in the family: * MiniTest.runner is dead. No more manager objects. * MiniTest::Unit#record is dead. Use a Reporter instance instead. * MiniTest::Unit._run_* is dead. Runnable things are responsible for their own runs. * MiniTest::Unit.output is dead. No more centralized IO. * 12 major (oft incompatible) changes: * Renamed MiniTest to Minitest. Your pinkies will thank me. (aliased to MiniTest) * Removed MiniTest::Unit entirely. No more manager objects. * Added Minitest::Runnable. Everything minitest can run subclasses this. * Renamed MiniTest::Unit::TestCase to Minitest::Test (subclassing Runnable). * Added Minitest::Benchmark. * Your benchmarks need to move to their own subclass. * Benchmarks using the spec DSL have to have "Bench" somewhere in their describe. * MiniTest::Unit.after_tests moved to Minitest.after_run * MiniTest::Unit.autorun is now Minitest.autorun. Just require minitest/autorun pls. * Removed ParallelEach#grep since it isn't used anywhere. * Renamed Runnable#__name__ to Runnable#name (but uses @NAME internally). * Runnable#run needs to return self. Allows for swapping of results as needed. * 8 minor moves: * Moved Assertions module to minitest/assertions.rb * Moved Expectations module to minitest/expectations.rb * Moved Test to minitest/test.rb * Moved everything else in minitest/unit.rb to minitest.rb * minitest/unit.rb is now just a small (user-test only) compatibility layer. * Moved most of minitest/pride into minitest/pride_plugin. * minitest/pride now just activates pride. * Moved ParallelEach under Minitest. * 9 additions: * Added a plugin system that can extend command-line options. * Added Minitest.extensions. * Added Minitest.reporter (only available during startup). * Added Minitest.run(args). This is the very top of any Minitest run. * Added Minitest::Reporter. Everything minitest can report goes through here. * Minitest.reporter is a composite so you can add your own. * Added Minitest::CompositeReporter. Much easier to extend with your own reporters. * Added UnexpectedError, an Assertion subclass, to wrap up errors. * Minitest::Test#run is now freakin' beautiful. 47 -> 17 loc * 11 other: * Removed Object.infect_with_assertions (it was already dead code). * Runnables are responsible for knowing their result_code (eg "." or "F"). * Minitest.autorun now returns boolean, not exit code. * Added FAQ entry for extending via modules. (phiggins) * Implement Runnable#dup to cleanse state back to test results. Helps with serialization. pair:tenderlove * Moved ParallelEach under Minitest. * Runnable#run needs to return self. Allows for swapping of results as needed. * Minitest.init_plugins passes down options. * Minitest.load_plugins only loads once. * Fixed minitest/pride to work with rake test loader again. (tmiller) * Added count/size to ParallelEach to fix use w/in stdlib's test/unit. :( (btaitelb) * 5 voodoo: * Removed mutex from minitest.rb (phiggins) * Removed mutex from test.rb (phiggins) * Removed Minitest::Reporter.synchronize (phiggins) * Removed Minitest::Test.synchronize (phiggins) * Upon loading minitest/parallel_each, record, capture_io and capture_subprocess_io are doped with synchronization code. (phiggins) === 4.7.4 / 2013-05-01 This is probably the last release of the 4.x series. It will be merged to ruby and will be put into maintenance mode there. I'm not set in stone on this, but at this point further development of minitest (5+) will be gem-only. It is just too hard to work w/in ruby-core w/ test-unit compatibility holding minitest development back. * 2 minor enhancements: * Added count/size to ParallelEach to fix use w/in stdlib's test/unit. :( (btaitelb) * Allow disabling of info_signal handler in runner. (erikh) === 4.7.3 / 2013-04-20 * 1 bug fix: * Reverted stubbing of module methods change. Stub the user, not the impl. (ab9/tyabe) === 4.7.2 / 2013-04-18 * 2 bug fixes: * Fixed inconsistency in refute_in_delta/epsilon. I double negatived my logic. (nettsundere) * Fixed stubbing of module methods (eg Kernel#sleep). (steveklabnik) === 4.7.1 / 2013-04-09 * 1 minor enhancement: * Added FAQ section to README * 1 bug fix: * Fixed bug where guard runs tests bypassing minitest/autorun and an ivar isn't set right. (darrencauthon) === 4.7.0 / 2013-03-18 * 1 major enhancement: * Refactored MiniTest::Spec into MiniTest::Spec::DSL. * 1 bug fix: * Removed $DEBUG handler that detected when test/unit and minitest were both loaded. (tenderlove) === 4.6.2 / 2013-02-27 * 1 minor enhancement: * Change error output to match Class#method, making it easier to use -n filter. === 4.6.1 / 2013-02-14 * 1 bug fix: * Fixed an option processing bug caused by test/unit's irresponsibly convoluted code. (floehopper) === 4.6.0 / 2013-02-07 * 3 major enhancements: * Removed ::reset_setup_teardown_hooks * Removed the long deprecated assert_block * Removed the long deprecated lifecycle hooks: add_(setup|teardown)_hook * 1 minor enhancement: * Allow filtering tests by suite name as well as test name. (lazyatom) * 2 bug fixes: * Made hex handling (eg object_ids) in mu_pp_for_diff more specific. (maxim) * nodoc top-level module. (zzak) === 4.5.0 / 2013-01-22 * 1 major enhancement: * Rearranged minitest/unit.rb so NO parallelization code is loaded/used until you opt-in. * 4 minor enhancements: * Added TestCase#skipped? for teardown guards * Added maglev? guard * Document that record can be sent twice if teardown fails or errors (randycoulman) * Errors in teardown are now recorded. (randycoulman) * 3 bug fixes: * Added hacks and skips to get clean test runs on maglev * Modified float tests for maglev float output differences. Not sure this is right. Not sure I care. * Test for existance of diff.exe instead of assuming they have devkit. (blowmage/Cumbayah) === 4.4.0 / 2013-01-07 * 3 minor enhancements: * Added fit_logarithic and assert_performance_logarithmic. (ktheory) * Merge processed options so others can mess with defaults. (tenderlove) * TestCase#message can now take another proc to defer custom message cost. (ordinaryzelig/bhenderson) * 1 bug fix: * TestCase#passed? now true if test is skipped. (qanhd) === 4.3.3 / 2012-12-06 * 1 bug fix: * Updated information about stubbing. (daviddavis) === 4.3.2 / 2012-11-27 // mri 2.0.0 * 1 minor enhancement: * Improved assert_equals error message to point you at #== of member objects. (kcurtin) === 4.3.1 / 2012-11-23 * 1 bug fix: * Moved test_children to serial testcase to prevent random failures. === 4.3.0 / 2012-11-17 * 4 minor enhancements: * Allow #autorun to run even if loaded with other test libs that call exit. (sunaku) * Do not include Expectations in Object if $MT_NO_EXPECTATIONS is set (experimental?) * Gave some much needed love to assert_raises. * Mock#expect can take a block to custom-validate args. (gmoothart) === 4.2.0 / 2012-11-02 * 4 major enhancements: * Added minitest/hell - run all your tests through the ringer! * Added support for :parallel test_order to run test cases in parallel. * Removed last_error and refactored runner code to be threadsafe. * _run_suites now runs suites in parallel if they opt-in. * 4 minor enhancements: * Added TestCase#synchronize * Added TestCase.make_my_diffs_pretty! * Added TestCase.parallelize_me! * Lock on capture_io for thread safety (tenderlove) === 4.1.0 / 2012-10-05 * 2 minor enhancements: * Added skip example to readme. (dissolved) * Extracted backtrace filter to object. (tenderlove) * 1 bug fix: * OMG I'm so dumb. Fixed access to deprecated hook class methods. I hate ruby modules. (route) === 4.0.0 / 2012-09-28 * 1 major enhancement: * The names of a privately-used undocumented constants are Super Important™. * 1 minor enhancement: * Support stubbing methods that would be handled via method_missing. (jhsu) * 3 bug fixes: * Add include_private param to MiniTest::Mock#respond_to? (rf-) * Fixed use of minitest/pride with --help. (zw963) * Made 'No visible difference.' message more clear. (ckrailo) === 3.5.0 / 2012-09-21 * 1 minor enhancement: * Added #capture_subprocess_io. (route) === 3.4.0 / 2012-09-05 * 2 minor enhancements: * assert_output can now take regexps for expected values. (suggested by stomar) * Clarified that ruby 1.9/2.0's phony gems cause serious confusion for rubygems. === 3.3.0 / 2012-07-26 * 1 major enhancement: * Deprecated add_(setup|teardown)_hook in favor of (before|after)_(setup|teardown) [2013-01-01] * 4 minor enhancements: * Refactored deprecated hook system into a module. * Refactored lifecycle hooks into a module. * Removed after_setup/before_teardown + run_X_hooks from Spec. * Spec#before/after now do a simple define_method and call super. DUR. * 2 bug fixes: * Fixed #passed? when used against a test that called flunk. (floehopper) * Fixed rdoc bug preventing doco for some expectations. (stomar). === 3.2.0 / 2012-06-26 * 1 minor enhancement: * Stubs now yield self. (peterhellberg) * 1 bug fix: * Fixed verbose test that only fails when run in verbose mode. mmmm irony. === 3.1.0 / 2012-06-13 * 2 minor enhancements: * Removed LONG deprecated Unit.out accessor * Removed generated method name munging from minitest/spec. (ordinaryzelig/tenderlove) === 3.0.1 / 2012-05-24 * 1 bug fix: * I'm a dumbass and refactored into Mock#call. Renamed to #__call so you can mock #call. (mschuerig) === 3.0.0 / 2012-05-08 * 3 major enhancements: * Added Object#stub (in minitest/mock.rb). * Mock#expect mocks are used in the order they're given. * Mock#verify now strictly compares against expect calls. * 3 minor enhancements: * Added caller to deprecation message. * Mock error messages are much prettier. * Removed String check for RHS of assert/refute_match. This lets #to_str work properly. * 1 bug fix: * Support drive letter on Windows. Patch provided from MRI by Usaku NAKAMURA. (ayumin) === 2.12.1 / 2012-04-10 * 1 minor enhancement: * Added ruby releases to History.txt to make it easier to see what you're missing * 1 bug fix: * Rolled my own deprecate msg to allow MT to work with rubygems < 1.7 === 2.12.0 / 2012-04-03 * 4 minor enhancements: * ::it returns test method name (wojtekmach) * Added #record method to runner so runner subclasses can cleanly gather data. * Added Minitest alias for MiniTest because even I forget. * Deprecated assert_block!! Yay!!! * 1 bug fix: * Fixed warning in i_suck_and_my_tests_are_order_dependent! (phiggins) === 2.11.4 / 2012-03-20 * 2 minor enhancements: * Updated known extensions * You got your unicode in my tests! You got your tests in my unicode! (fl00r) * 1 bug fix: * Fixed MiniTest::Mock example in the readme. (conradwt) === 2.11.3 / 2012-02-29 * 2 bug fixes: * Clarified that assert_raises returns the exception for further testing * Fixed assert_in_epsilon when both args are negative. (tamc) === 2.11.2 / 2012-02-14 * 1 minor enhancement: * Display failures/errors on SIGINFO. (tenderlove) * 1 bug fix: * Fixed MiniTest::Unit.after_tests for Ruby 1.9.3. (ysbaddaden) === 2.11.1 / 2012-02-01 * 3 bug fixes: * Improved description for --name argument. (drd) * Ensure Mock#expect's expected args is an Array. (mperham) * Ensure Mock#verify verifies multiple expects of the same method. (chastell) === 2.11.0 / 2012-01-25 * 2 minor enhancements: * Added before / after hooks for setup and teardown. (tenderlove) * Pushed run_setup_hooks down to Spec. (tenderlove) === 2.10.1 / 2012-01-17 * 1 bug fix: * Fixed stupid 1.9 path handling grumble grumble. (graaff) === 2.10.0 / 2011-12-20 * 3 minor enhancements: * Added specs for must/wont be_empty/respond_to/be_kind_of and others. * Added tests for assert/refute predicate. * Split minitest/excludes.rb out to its own gem. * 1 bug fix: * Fixed must_be_empty and wont_be_empty argument handling. (mrsimo) === 2.9.1 / 2011-12-13 * 4 minor enhancements: * Added a ton of tests on spec error message output. * Cleaned up consistency of msg handling on unary expectations. * Improved error messages on assert/refute_in_delta. * infect_an_assertion no longer checks arity and better handles args. * 1 bug fix: * Fixed error message on specs when 2+ args and custom message provided. (chastell) === 2.9.0 / 2011-12-07 * 4 minor enhancements: * Added TestCase.exclude and load_excludes for programmatic filtering of tests. * Added guard methods so you can cleanly skip based on platform/impl * Holy crap! 100% doco! `rdoc -C` ftw * Switch assert_output to test stderr before stdout to possibly improve debugging === 2.8.1 / 2011-11-17 * 1 bug fix: * Ugh. 1.9's test/unit violates my internals. Added const_missing. === 2.8.0 / 2011-11-08 * 2 minor enhancements: * Add a method so that code can be run around a particular test case (tenderlove) * Turn off backtrace filtering if we're running inside a ruby checkout. (drbrain) * 2 bug fixes: * Fixed 2 typos and 2 doc glitches. (splattael) * Remove unused block arguments to avoid creating Proc objects. (k-tsj) === 2.7.0 / 2011-10-25 * 2 minor enhancements: * Include failed values in the expected arg output in MockExpectationError. (nono) * Make minitest/pride work with other 256 color capable terms. (sunaku) * 2 bug fixes: * Clarified the documentation of minitest/benchmark (eregon) * Fixed using expectations in regular unit tests. (sunaku) === 2.6.2 / 2011-10-19 * 1 minor enhancement: * Added link to vim bundle. (sunaku) * 2 bug fixes: * Force gem activation in hoe minitest plugin * Support RUBY_VERSION='2.0.0' (nagachika) === 2.6.1 / 2011-09-27 * 2 bug fixes: * Alias Spec.name from Spec.to_s so it works when @name is nil (nathany) * Fixed assert and refute_operator where second object has a bad == method. === 2.6.0 / 2011-09-13 * 2 minor enhancements: * Added specify alias for it and made desc optional. * Spec#must_be and #wont_be can be used with predicates (metaskills) * 1 bug fix: * Fixed Mock.respond_to?(var) to work with strings. (holli) === 2.5.1 / 2011-08-27 // ruby 1.9.3: p0, p125, p34579 * 2 minor enhancements: * Added gem activation for minitest in minitest/autoload to help out 1.9 users * Extended Spec.register_spec_type to allow for procs instead of just regexps. === 2.5.0 / 2011-08-18 * 4 minor enhancements: * Added 2 more arguments against rspec: let & subject in 9 loc! (emmanuel/luis) * Added TestCase.i_suck_and_my_tests_are_order_dependent! * Extended describe to take an optional method name (2 line change!). (emmanuel) * Refactored and extended minitest/pride to do full 256 color support. (lolcat) * 1 bug fix: * Doc fixes. (chastell) === 2.4.0 / 2011-08-09 * 4 minor enhancements: * Added simple examples for all expectations. * Improved Mock error output when args mismatch. * Moved all expectations from Object to MiniTest::Expectations. * infect_with_assertions has been removed due to excessive clever * 4 bug fixes: * Fix Assertions#mu_pp to deal with immutable encoded strings. (ferrous26) * Fix minitest/pride for MacRuby (ferrous26) * Made error output less fancy so it is more readable * Mock shouldn't undef === and inspect. (dgraham) === 2.3.1 / 2011-06-22 * 1 bug fix: * Fixed minitest hoe plugin to be a spermy dep and not depend on itself. === 2.3.0 / 2011-06-15 * 5 minor enhancements: * Add setup and teardown hooks to MiniTest::TestCase. (phiggins) * Added nicer error messages for MiniTest::Mock. (phiggins) * Allow for less specific expected arguments in Mock. (bhenderson/phiggins) * Made MiniTest::Mock a blank slate. (phiggins) * Refactored minitest/spec to use the hooks instead of define_inheritable_method. (phiggins) * 2 bug fixes: * Fixed TestCase's inherited hook. (dchelimsky/phiggins/jamis, the 'good' neighbor) * MiniTest::Assertions#refute_empty should use mu_pp in the default message. (whatthejeff) === 2.2.2 / 2011-06-01 * 2 bug fixes: * Got rid of the trailing period in message for assert_equal. (tenderlove) * Windows needs more flushing. (Akio Tajima) === 2.2.1 / 2011-05-31 * 1 bug fix: * My _ONE_ non-rubygems-using minitest user goes to Seattle.rb! === 2.2.0 / 2011-05-29 * 6 minor enhancements: * assert_equal (and must_equal) now tries to diff output where it makes sense. * Added Assertions#diff(exp, act) to be used by assert_equal. * Added Assertions#mu_pp_for_diff * Added Assertions.diff and diff= * Moved minitest hoe-plugin from hoe-seattlerb. (erikh) * Skipped tests only output details in verbose mode. (tenderlove+zenspider=xoxo) === 2.1.0 / 2011-04-11 * 5 minor enhancements: * Added MiniTest::Spec.register_spec_type(matcher, klass) and spec_type(desc) * Added ability for specs to share code via subclassing of Spec. (metaskills) * Clarified (or tried to) bench_performance_linear's use of threshold. * MiniTest::Unit.runner=(runner) provides an easy way of creating custom test runners for specialized needs. (justinweiss) * Reverse order of inheritance in teardowns of specs. (deepfryed) * 3 bug fixes: * FINALLY fixed problems of inheriting specs in describe/it/describe scenario. (MGPalmer) * Fixed a new warning in 1.9.3. * Fixed assert_block's message handling. (nobu) === 2.0.2 / 2010-12-24 * 1 minor enhancement: * Completed doco on minitest/benchmark for specs. * 1 bug fix: * Benchmarks in specs that didn't call bench_range would die. (zzak). === 2.0.1 / 2010-12-15 * 4 minor enhancements: * Do not filter backtrace if $DEBUG * Exit autorun via nested at_exit handler, in case other libs call exit * Make options accesor lazy. * Split printing of test name and its time. (nurse) * 1 bug fix: * Fix bug when ^T is hit before runner start === 2.0.0 / 2010-11-11 * 3 major enhancements: * Added minitest/benchmark! Assert your performance! YAY! * Refactored runner to allow for more extensibility. See minitest/benchmark. * This makes the runner backwards incompatible in some ways! * 9 minor enhancements: * Added MiniTest::Unit.after_tests { ... } * Improved output by adding test rates and a more sortable verbose format * Improved readme based on feedback from others * Added io method to TestCase. If used, it'll supplant '.EF' output. * Refactored IO in MiniTest::Unit. * Refactored _run_anything to _run_suite to make it easier to wrap (ngauthier) * Spec class names are now the unmunged descriptions (btakita) * YAY for not having redundant rdoc/readmes! * Help output is now generated from the flags you passed straight up. * 4 bug fixes: * Fixed scoping issue on minitest/mock (srbaker/prosperity) * Fixed some of the assertion default messages * Fixes autorun when on windows with ruby install on different drive (larsch) * Fixed rdoc output bug in spec.rb === 1.7.2 / 2010-09-23 * 3 bug fixes: * Fixed doco for expectations and Spec. * Fixed test_capture_io on 1.9.3+ (sora_h) * assert_raises now lets MiniTest::Skip through. (shyouhei) === 1.7.1 / 2010-09-01 * 1 bug fix: * 1.9.2 fixes for spec tests === 1.7.0 / 2010-07-15 * 5 minor enhancements: * Added assert_output (mapped to must_output). * Added assert_silent (mapped to must_be_silent). * Added examples to readme (Mike Dalessio) * Added options output at the top of the run, for fatal run debugging (tenderlove) * Spec's describe method returns created class === 1.6.0 / 2010-03-27 // ruby 1.9.2-p290 * 10 minor enhancements: * Added --seed argument so you can reproduce a random order for debugging. * Added documentation for assertions * Added more rdoc and tons of :nodoc: * Added output to give you all the options you need to reproduce that run. * Added proper argument parsing to minitest. * Added unique serial # to spec names so order can be preserved (needs tests). (phrogz) * Empty 'it' fails with default msg. (phrogz) * Remove previous method on expect to remove 1.9 warnings * Spec#it is now order-proof wrt subclasses/nested describes. * assert_same error message now reports in decimal, eg: oid=123. (mattkent) * 2 bug fixes: * Fixed message on refute_same to be consistent with assert_same. * Fixed method randomization to be stable for testing. === 1.5.0 / 2010-01-06 * 4 minor enhancements: * Added ability to specify what assertions should have their args flipped. * Don't flip arguments on *include and *respond_to assertions. * Refactored Module.infect_an_assertion from Module.infect_with_assertions. * before/after :all now bitches and acts like :each * 3 bug fixes: * Nested describes now map to nested test classes to avoid namespace collision. * Using undef_method instead of remove_method to clean out inherited specs. * assert_raises was ignoring passed in message. === 1.4.2 / 2009-06-25 * 1 bug fix: * Fixed info handler for systems that don't have siginfo. === 1.4.1 / 2009-06-23 * 1 major enhancement: * Handle ^C and other fatal exceptions by failing * 1 minor enhancement: * Added something to catch mixed use of test/unit and minitest if $DEBUG * 1 bug fix: * Added SIGINFO handler for finding slow tests without verbose === 1.4.0 / 2009-06-18 * 5 minor enhancement: * Added clarification doco. * Added specs and mocks to autorun. * Changed spec test class creation to be non-destructive. * Updated rakefile for new hoe capabilities. * describes are nestable (via subclass). before/after/def inherits, specs don't. * 3 bug fixes: * Fixed location on must/wont. * Switched to __name__ to avoid common ivar name. * Fixed indentation in test file (1.9). === 1.3.1 / 2009-01-20 // ruby 1.9.1-p431 * 1 minor enhancement: * Added miniunit/autorun.rb as replacement for test/unit.rb's autorun. * 16 bug fixes: * 1.9 test fixes. * Bug fixes from nobu and akira for really odd scenarios. They run ruby funny. * Fixed (assert|refute)_match's argument order. * Fixed LocalJumpError in autorun if exception thrown before at_exit. * Fixed assert_in_delta (should be >=, not >). * Fixed assert_raises to match Modules. * Fixed capture_io to not dup IOs. * Fixed indentation of capture_io for ruby 1.9 warning. * Fixed location to deal better with custom assertions and load paths. (Yuki) * Fixed order of (must|wont)_include in MiniTest::Spec. * Fixed skip's backtrace. * Got arg order wrong in *_match in tests, message wrong as a result. * Made describe private. For some reason I thought that an attribute of Kernel. * Removed disable_autorun method, added autorun.rb instead. * assert_match escapes if passed string for pattern. * instance_of? is different from ===, use instance_of. === 1.3.0 / 2008-10-09 * 2 major enhancements: * renamed to minitest and pulled out test/unit compatibility. * mini/test.rb is now minitest/unit.rb, everything else maps directly. * 12 minor enhancements: * assert_match now checks that act can call =~ and converts exp to a regexp only if needed. * Added assert_send... seems useless to me tho. * message now forces to string... ruby-core likes to pass classes and arrays :( * Added -v handling and switched to @verbose from $DEBUG. * Verbose output now includes test class name and adds a sortable running time! * Switched message generation into procs for message deferment. * Added skip and renamed fail to flunk. * Improved output failure messages for assert_instance_of, assert_kind_of * Improved output for assert_respond_to, assert_same. * at_exit now exits false instead of errors+failures. * Made the tests happier and more readable imhfo. * Switched index(s) == 0 to rindex(s, 0) on nobu's suggestion. Faster. * 5 bug fixes: * 1.9: Added encoding normalization in mu_pp. * 1.9: Fixed backtrace filtering (BTs are expanded now) * Added back exception_details to assert_raises. DOH. * Fixed shadowed variable in mock.rb * Fixed stupid muscle memory message bug in assert_send. === 1.2.1 / 2008-06-10 * 7 minor enhancements: * Added deprecations everywhere in test/unit. * Added test_order to TestCase. :random on mini, :sorted on test/unit (for now). * Big cleanup in test/unit for rails. Thanks Jeremy Kemper! * Minor readability cleanup. * Pushed setup/run/teardown down to testcase allowing specialized testcases. * Removed pp. Tests run 2x faster. :/ * Renamed deprecation methods and moved to test/unit/deprecate.rb. === 1.2.0 / 2008-06-09 * 2 major enhancements: * Added Mini::Spec. * Added Mini::Mock. Thanks Steven Baker!! * 23 minor enhancements: * Added bin/use_miniunit to make it easy to test out miniunit. * Added -n filtering, thanks to Phil Hagelberg! * Added args argument to #run, takes ARGV from at_exit. * Added test name output if $DEBUG. * Added a refute (was deny) for every assert. * Added capture_io and a bunch of nice assertions from zentest. * Added deprecation mechanism for assert_no/not methods to test/unit/assertions. * Added pp output when available. * Added tests for all assertions. Pretty much maxed out coverage. * Added tests to verify consistency and good naming. * Aliased and deprecated all ugly assertions. * Cleaned out test/unit. Moved autorun there. * Code cleanup to make extensions easier. Thanks Chad! * Got spec args reversed in all but a couple assertions. Much more readable. * Improved error messages across the board. Adds your message to the default. * Moved into Mini namespace, renamed to Mini::Test and Mini::Spec. * Pulled the assertions into their own module... * Removed as much code as I could while still maintaining full functionality. * Moved filter_backtrace into MiniTest. * Removed MiniTest::Unit::run. Unnecessary. * Removed location_of_failure. Unnecessary. * Rewrote test/unit's filter_backtrace. Flog from 37.0 to 18.1 * Removed assert_send. Google says it is never used. * Renamed MiniTest::Unit.autotest to #run. * Renamed deny to refute. * Rewrote some ugly/confusing default assertion messages. * assert_in_delta now defaults to 0.001 precision. Makes specs prettier. * 9 bug fixes: * Fixed assert_raises to raise outside of the inner-begin/rescue. * Fixed for ruby 1.9 and rubinius. * No longer exits 0 if exception in code PRE-test run causes early exit. * Removed implementors method list from mini/test.rb - too stale. * assert_nothing_raised takes a class as an arg. wtf? STUPID * ".EF" output is now unbuffered. * Bunch of changes to get working with rails... UGH. * Added stupid hacks to deal with rails not requiring their dependencies. * Now bitch loudly if someone defines one of my classes instead of requiring. * Fixed infect method to work better on 1.9. * Fixed all shadowed variable warnings in 1.9. === 1.1.0 / 2007-11-08 * 4 major enhancements: * Finished writing all missing assertions. * Output matches original test/unit. * Documented every method needed by language implementor. * Fully switched over to self-testing setup. * 2 minor enhancements: * Added deny (assert ! test), our favorite extension to test/unit. * Added .autotest and fairly complete unit tests. (thanks Chad for help here) === 1.0.0 / 2006-10-30 * 1 major enhancement * Birthday! mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/Manifest.txt000066400000000000000000000013301446701454400333520ustar00rootroot00000000000000.autotest History.rdoc Manifest.txt README.rdoc Rakefile design_rationale.rb lib/hoe/minitest.rb lib/minitest.rb lib/minitest/assertions.rb lib/minitest/autorun.rb lib/minitest/benchmark.rb lib/minitest/expectations.rb lib/minitest/hell.rb lib/minitest/mock.rb lib/minitest/parallel.rb lib/minitest/pride.rb lib/minitest/pride_plugin.rb lib/minitest/spec.rb lib/minitest/test.rb lib/minitest/test_task.rb lib/minitest/unit.rb test/minitest/metametameta.rb test/minitest/test_minitest_assertions.rb test/minitest/test_minitest_benchmark.rb test/minitest/test_minitest_mock.rb test/minitest/test_minitest_reporter.rb test/minitest/test_minitest_spec.rb test/minitest/test_minitest_test.rb test/minitest/test_minitest_test_task.rb mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/README.rdoc000066400000000000000000000753451446701454400326720ustar00rootroot00000000000000= minitest/{test,spec,mock,benchmark} home :: https://github.com/minitest/minitest bugs :: https://github.com/minitest/minitest/issues rdoc :: https://docs.seattlerb.org/minitest vim :: https://github.com/sunaku/vim-ruby-minitest emacs:: https://github.com/arthurnn/minitest-emacs == DESCRIPTION: minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking. "I had a class with Jim Weirich on testing last week and we were allowed to choose our testing frameworks. Kirk Haines and I were paired up and we cracked open the code for a few test frameworks... I MUST say that minitest is *very* readable / understandable compared to the 'other two' options we looked at. Nicely done and thank you for helping us keep our mental sanity." -- Wayne E. Seguin minitest/test is a small and incredibly fast unit testing framework. It provides a rich set of assertions to make your tests clean and readable. minitest/spec is a functionally complete spec engine. It hooks onto minitest/test and seamlessly bridges test assertions over to spec expectations. minitest/benchmark is an awesome way to assert the performance of your algorithms in a repeatable manner. Now you can assert that your newb co-worker doesn't replace your linear algorithm with an exponential one! minitest/mock by Steven Baker, is a beautifully tiny mock (and stub) object framework. minitest/pride shows pride in testing and adds coloring to your test output. I guess it is an example of how to write IO pipes too. :P minitest/test is meant to have a clean implementation for language implementors that need a minimal set of methods to bootstrap a working test suite. For example, there is no magic involved for test-case discovery. "Again, I can't praise enough the idea of a testing/specing framework that I can actually read in full in one sitting!" -- Piotr Szotkowski Comparing to rspec: rspec is a testing DSL. minitest is ruby. -- Adam Hawkins, "Bow Before MiniTest" minitest doesn't reinvent anything that ruby already provides, like: classes, modules, inheritance, methods. This means you only have to learn ruby to use minitest and all of your regular OO practices like extract-method refactorings still apply. == FEATURES/PROBLEMS: * minitest/autorun - the easy and explicit way to run all your tests. * minitest/test - a very fast, simple, and clean test system. * minitest/spec - a very fast, simple, and clean spec system. * minitest/mock - a simple and clean mock/stub system. * minitest/benchmark - an awesome way to assert your algorithm's performance. * minitest/pride - show your pride in testing! * minitest/test_task - a full-featured and clean rake task generator. * Incredibly small and fast runner, but no bells and whistles. * Written by squishy human beings. Software can never be perfect. We will all eventually die. == RATIONALE: See design_rationale.rb to see how specs and tests work in minitest. == SYNOPSIS: Given that you'd like to test the following class: class Meme def i_can_has_cheezburger? "OHAI!" end def will_it_blend? "YES!" end end === Unit tests Define your tests as methods beginning with +test_+. require "minitest/autorun" class TestMeme < Minitest::Test def setup @meme = Meme.new end def test_that_kitty_can_eat assert_equal "OHAI!", @meme.i_can_has_cheezburger? end def test_that_it_will_not_blend refute_match /^no/i, @meme.will_it_blend? end def test_that_will_be_skipped skip "test this later" end end === Specs require "minitest/autorun" describe Meme do before do @meme = Meme.new end describe "when asked about cheeseburgers" do it "must respond positively" do _(@meme.i_can_has_cheezburger?).must_equal "OHAI!" end end describe "when asked about blending possibilities" do it "won't say no" do _(@meme.will_it_blend?).wont_match /^no/i end end end For matchers support check out: * https://github.com/wojtekmach/minitest-matchers * https://github.com/rmm5t/minitest-matchers_vaccine === Benchmarks Add benchmarks to your tests. # optionally run benchmarks, good for CI-only work! require "minitest/benchmark" if ENV["BENCH"] class TestMeme < Minitest::Benchmark # Override self.bench_range or default range is [1, 10, 100, 1_000, 10_000] def bench_my_algorithm assert_performance_linear 0.9999 do |n| # n is a range value @obj.my_algorithm(n) end end end Or add them to your specs. If you make benchmarks optional, you'll need to wrap your benchmarks in a conditional since the methods won't be defined. In minitest 5, the describe name needs to match /Bench(mark)?$/. describe "Meme Benchmark" do if ENV["BENCH"] then bench_performance_linear "my_algorithm", 0.9999 do |n| 100.times do @obj.my_algorithm(n) end end end end outputs something like: # Running benchmarks: TestBlah 100 1000 10000 bench_my_algorithm 0.006167 0.079279 0.786993 bench_other_algorithm 0.061679 0.792797 7.869932 Output is tab-delimited to make it easy to paste into a spreadsheet. === Mocks Mocks and stubs defined using terminology by Fowler & Meszaros at https://www.martinfowler.com/bliki/TestDouble.html: "Mocks are pre-programmed with expectations which form a specification of the calls they are expected to receive. They can throw an exception if they receive a call they don't expect and are checked during verification to ensure they got all the calls they were expecting." class MemeAsker def initialize(meme) @meme = meme end def ask(question) method = question.tr(" ", "_") + "?" @meme.__send__(method) end end require "minitest/autorun" describe MemeAsker, :ask do describe "when passed an unpunctuated question" do it "should invoke the appropriate predicate method on the meme" do @meme = Minitest::Mock.new @meme_asker = MemeAsker.new @meme @meme.expect :will_it_blend?, :return_value @meme_asker.ask "will it blend" @meme.verify end end end ==== Multi-threading and Mocks Minitest mocks do not support multi-threading. If it works, fine, if it doesn't you can use regular ruby patterns and facilities like local variables. Here's an example of asserting that code inside a thread is run: def test_called_inside_thread called = false pr = Proc.new { called = true } thread = Thread.new(&pr) thread.join assert called, "proc not called" end === Stubs Mocks and stubs are defined using terminology by Fowler & Meszaros at https://www.martinfowler.com/bliki/TestDouble.html: "Stubs provide canned answers to calls made during the test". Minitest's stub method overrides a single method for the duration of the block. def test_stale_eh obj_under_test = Something.new refute obj_under_test.stale? Time.stub :now, Time.at(0) do # stub goes away once the block is done assert obj_under_test.stale? end end A note on stubbing: In order to stub a method, the method must actually exist prior to stubbing. Use a singleton method to create a new non-existing method: def obj_under_test.fake_method ... end === Running Your Tests Ideally, you'll use a rake task to run your tests (see below), either piecemeal or all at once. BUT! You don't have to: % ruby -Ilib:test test/minitest/test_minitest_test.rb Run options: --seed 37685 # Running: ...................................................................... (etc) Finished in 0.107130s, 1446.8403 runs/s, 2959.0217 assertions/s. 155 runs, 317 assertions, 0 failures, 0 errors, 0 skips There are runtime options available, both from minitest itself, and also provided via plugins. To see them, simply run with +--help+: % ruby -Ilib:test test/minitest/test_minitest_test.rb --help minitest options: -h, --help Display this help. -s, --seed SEED Sets random seed. Also via env. Eg: SEED=n rake -v, --verbose Verbose. Show progress processing files. -n, --name PATTERN Filter run on /regexp/ or string. -e, --exclude PATTERN Exclude /regexp/ or string from run. Known extensions: pride, autotest -p, --pride Pride. Show your testing pride! -a, --autotest Connect to autotest server. === Rake Tasks You can set up a rake task to run all your tests by adding this to your Rakefile: require "minitest/test_task" Minitest::TestTask.create # named test, sensible defaults # or more explicitly: Minitest::TestTask.create(:test) do |t| t.libs << "test" t.libs << "lib" t.warning = false t.test_globs = ["test/**/*_test.rb"] end task :default => :test Each of these will generate 4 tasks: rake test :: Run the test suite. rake test:cmd :: Print out the test command. rake test:isolated :: Show which test files fail when run separately. rake test:slow :: Show bottom 25 tests sorted by time. === Rake Task Variables There are a bunch of variables you can supply to rake to modify the run. MT_LIB_EXTRAS :: Extra libs to dynamically override/inject for custom runs. N :: -n: Tests to run (string or /regexp/). X :: -x: Tests to exclude (string or /regexp/). A :: Any extra arguments. Honors shell quoting. MT_CPU :: How many threads to use for parallel test runs SEED :: -s --seed Sets random seed. TESTOPTS :: Deprecated, same as A FILTER :: Deprecated, same as A == Writing Extensions To define a plugin, add a file named minitest/XXX_plugin.rb to your project/gem. That file must be discoverable via ruby's LOAD_PATH (via rubygems or otherwise). Minitest will find and require that file using Gem.find_files. It will then try to call +plugin_XXX_init+ during startup. The option processor will also try to call +plugin_XXX_options+ passing the OptionParser instance and the current options hash. This lets you register your own command-line options. Here's a totally bogus example: # minitest/bogus_plugin.rb: module Minitest def self.plugin_bogus_options(opts, options) opts.on "--myci", "Report results to my CI" do options[:myci] = true options[:myci_addr] = get_myci_addr options[:myci_port] = get_myci_port end end def self.plugin_bogus_init(options) self.reporter << MyCI.new(options) if options[:myci] end end === Adding custom reporters Minitest uses composite reporter to output test results using multiple reporter instances. You can add new reporters to the composite during the init_plugins phase. As we saw in +plugin_bogus_init+ above, you simply add your reporter instance to the composite via <<. +AbstractReporter+ defines the API for reporters. You may subclass it and override any method you want to achieve your desired behavior. start :: Called when the run has started. record :: Called for each result, passed or otherwise. report :: Called at the end of the run. passed? :: Called to see if you detected any problems. Using our example above, here is how we might implement MyCI: # minitest/bogus_plugin.rb module Minitest class MyCI < AbstractReporter attr_accessor :results, :addr, :port def initialize options self.results = [] self.addr = options[:myci_addr] self.port = options[:myci_port] end def record result self.results << result end def report CI.connect(addr, port).send_results self.results end end # code from above... end == FAQ === What versions are compatible with what? Or what versions are supported? Minitest is a dependency of rails, which until fairly recently had an overzealous backwards compatibility policy. As such, I'm stuck supporting versions of ruby that are long past EOL. Hopefully I'll be able to support only current versions of ruby sometime in the near future. (As of 2023-03-05) Current versions of rails: (https://endoflife.date/rails) | rails | min ruby | rec ruby | minitest | status | EOL Date | |-------+----------+----------+----------+----------+------------| | 7.0 | >= 2.7 | 3.1 | >= 5.1 | Current | 2025-06-01?| | 6.1 | >= 2.5 | 3.0 | >= 5.1 | Maint | 2024-06-01?| | 6.0 | >= 2.5 | 2.6 | >= 5.1 | Security | 2023-06-01 | | 5.2 | >= 2.2.2 | 2.5 | ~> 5.1 | EOL | 2022-06-01 | If you want to look at the requirements for a specific version, run: gem spec -r --ruby rails -v 7.0.0 Current versions of ruby: (https://endoflife.date/ruby) | ruby | Status | EOL Date | |------+---------+------------| | 3.2 | Current | 2026-03-31 | | 3.1 | Maint | 2025-03-31 | | 3.0 | Maint | 2024-03-31 | | 2.7 | Security| 2023-03-31 | | 2.6 | EOL | 2022-03-31 | | 2.5 | EOL | 2021-03-31 | === How to test SimpleDelegates? The following implementation and test: class Worker < SimpleDelegator def work end end describe Worker do before do @worker = Worker.new(Object.new) end it "must respond to work" do _(@worker).must_respond_to :work end end outputs a failure: 1) Failure: Worker#test_0001_must respond to work [bug11.rb:16]: Expected # (Object) to respond to #work. Worker is a SimpleDelegate which in 1.9+ is a subclass of BasicObject. Expectations are put on Object (one level down) so the Worker (SimpleDelegate) hits +method_missing+ and delegates down to the +Object.new+ instance. That object doesn't respond to work so the test fails. You can bypass SimpleDelegate#method_missing by extending the worker with Minitest::Expectations. You can either do that in your setup at the instance level, like: before do @worker = Worker.new(Object.new) @worker.extend Minitest::Expectations end or you can extend the Worker class (within the test file!), like: class Worker include ::Minitest::Expectations end === How to share code across test classes? Use a module. That's exactly what they're for: module UsefulStuff def useful_method # ... end end describe Blah do include UsefulStuff def test_whatever # useful_method available here end end Remember, +describe+ simply creates test classes. It's just ruby at the end of the day and all your normal Good Ruby Rules (tm) apply. If you want to extend your test using setup/teardown via a module, just make sure you ALWAYS call super. before/after automatically call super for you, so make sure you don't do it twice. === How to run code before a group of tests? Use a constant with begin...end like this: describe Blah do SETUP = begin # ... this runs once when describe Blah starts end # ... end This can be useful for expensive initializations or sharing state. Remember, this is just ruby code, so you need to make sure this technique and sharing state doesn't interfere with your tests. === Why am I seeing uninitialized constant MiniTest::Test (NameError)? Are you running the test with Bundler (e.g. via bundle exec )? If so, in order to require minitest, you must first add the gem 'minitest' to your Gemfile and run +bundle+. Once it's installed, you should be able to require minitest and run your tests. == Prominent Projects using Minitest: * arel * journey * mime-types * nokogiri * rails (active_support et al) * rake * rdoc * ...and of course, everything from seattle.rb... == Developing Minitest: Minitest requires {Hoe}[https://rubygems.org/gems/hoe]. === Minitest's own tests require UTF-8 external encoding. This is a common problem in Windows, where the default external Encoding is often CP850, but can affect any platform. Minitest can run test suites using any Encoding, but to run Minitest's own tests you must have a default external Encoding of UTF-8. If your encoding is wrong, you'll see errors like: --- expected +++ actual @@ -1,2 +1,3 @@ # encoding: UTF-8 -"Expected /\\w+/ to not match \"blah blah blah\"." +"Expected /\\w+/ to not match # encoding: UTF-8 +\"blah blah blah\"." To check your current encoding, run: ruby -e 'puts Encoding.default_external' If your output is something other than UTF-8, you can set the RUBYOPTS env variable to a value of '-Eutf-8'. Something like: RUBYOPT='-Eutf-8' ruby -e 'puts Encoding.default_external' Check your OS/shell documentation for the precise syntax (the above will not work on a basic Windows CMD prompt, look for the SET command). Once you've got it successfully outputing UTF-8, use the same setting when running rake in Minitest. === Minitest's own tests require GNU (or similar) diff. This is also a problem primarily affecting Windows developers. PowerShell has a command called diff, but it is not suitable for use with Minitest. If you see failures like either of these, you are probably missing diff tool: 4) Failure: TestMinitestUnitTestCase#test_assert_equal_different_long [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:936]: Expected: "--- expected\n+++ actual\n@@ -1 +1 @@\n-\"hahahahahahahahahahahahahahahahahahahaha\"\n+\"blahblahblahblahblahblahblahblahblahblah\"\n" Actual: "Expected: \"hahahahahahahahahahahahahahahahahahahaha\"\n Actual: \"blahblahblahblahblahblahblahblahblahblah\"" 5) Failure: TestMinitestUnitTestCase#test_assert_equal_different_collection_hash_hex_invisible [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:845]: Expected: "No visible difference in the Hash#inspect output.\nYou should look at the implementation of #== on Hash or its members.\n {1=>#}" Actual: "Expected: {1=>#}\n Actual: {1=>#}" If you use Cygwin or MSYS2 or similar there are packages that include a GNU diff for Windows. If you don't, you can download GNU diffutils from http://gnuwin32.sourceforge.net/packages/diffutils.htm (make sure to add it to your PATH). You can make sure it's installed and path is configured properly with: diff.exe -v There are multiple lines of output, the first should be something like: diff (GNU diffutils) 2.8.1 If you are using PowerShell make sure you run diff.exe, not just diff, which will invoke the PowerShell built in function. == Known Extensions: capybara_minitest_spec :: Bridge between Capybara RSpec matchers and Minitest::Spec expectations (e.g. page.must_have_content("Title")). color_pound_spec_reporter :: Test names print Ruby Object types in color with your Minitest Spec style tests. minispec-metadata :: Metadata for describe/it blocks & CLI tag filter. E.g. it "requires JS driver", js: true do & ruby test.rb --tag js runs tests tagged :js. minispec-rails :: Minimal support to use Spec style in Rails 5+. mini-apivore :: for swagger based automated API testing. minitest-around :: Around block for minitest. An alternative to setup/teardown dance. minitest-assert_errors :: Adds Minitest assertions to test for errors raised or not raised by Minitest itself. minitest-autotest :: autotest is a continuous testing facility meant to be used during development. minitest-bacon :: minitest-bacon extends minitest with bacon-like functionality. minitest-bang :: Adds support for RSpec-style let! to immediately invoke let statements before each test. minitest-bisect :: Helps you isolate and debug random test failures. minitest-blink1_reporter :: Display test results with a Blink1. minitest-capistrano :: Assertions and expectations for testing Capistrano recipes. minitest-capybara :: Capybara matchers support for minitest unit and spec. minitest-cc :: It provides minimal information about code coverage. minitest-chef-handler :: Run Minitest suites as Chef report handlers minitest-ci :: CI reporter plugin for Minitest. minitest-context :: Defines contexts for code reuse in Minitest specs that share common expectations. minitest-debugger :: Wraps assert so failed assertions drop into the ruby debugger. minitest-display :: Patches Minitest to allow for an easily configurable output. minitest-documentation :: Minimal documentation format inspired by rspec's. minitest-doc_reporter :: Detailed output inspired by rspec's documentation format. minitest-emoji :: Print out emoji for your test passes, fails, and skips. minitest-english :: Semantically symmetric aliases for assertions and expectations. minitest-excludes :: Clean API for excluding certain tests you don't want to run under certain conditions. minitest-fail-fast :: Reimplements RSpec's "fail fast" feature minitest-filecontent :: Support unit tests with expectation results in files. Differing results will be stored again in files. minitest-filesystem :: Adds assertion and expectation to help testing filesystem contents. minitest-firemock :: Makes your Minitest mocks more resilient. minitest-focus :: Focus on one test at a time. minitest-gcstats :: A minitest plugin that adds a report of the top tests by number of objects allocated. minitest-global_expectations:: Support minitest expectation methods for all objects minitest-great_expectations :: Generally useful additions to minitest's assertions and expectations. minitest-growl :: Test notifier for minitest via growl. minitest-happy :: GLOBALLY ACTIVATE MINITEST PRIDE! RAWR! minitest-have_tag :: Adds Minitest assertions to test for the existence of HTML tags, including contents, within a provided string. minitest-heat :: Reporting that builds a heat map of failure locations minitest-hooks :: Around and before_all/after_all/around_all hooks minitest-hyper :: Pretty, single-page HTML reports for your Minitest runs minitest-implicit-subject :: Implicit declaration of the test subject. minitest-instrument :: Instrument ActiveSupport::Notifications when test method is executed. minitest-instrument-db :: Store information about speed of test execution provided by minitest-instrument in database. minitest-junit :: JUnit-style XML reporter for minitest. minitest-keyword :: Use Minitest assertions with keyword arguments. minitest-libnotify :: Test notifier for minitest via libnotify. minitest-line :: Run test at line number. minitest-logger :: Define assert_log and enable minitest to test log messages. Supports Logger and Log4r::Logger. minitest-macruby :: Provides extensions to minitest for macruby UI testing. minitest-matchers :: Adds support for RSpec-style matchers to minitest. minitest-matchers_vaccine :: Adds assertions that adhere to the matcher spec, but without any expectation infections. minitest-metadata :: Annotate tests with metadata (key-value). minitest-mock_expectations :: Provides method call assertions for minitest. minitest-mongoid :: Mongoid assertion matchers for Minitest. minitest-must_not :: Provides must_not as an alias for wont in Minitest. minitest-optional_retry :: Automatically retry failed test to help with flakiness. minitest-osx :: Reporter for the Mac OS X notification center. minitest-parallel_fork :: Fork-based parallelization minitest-parallel-db :: Run tests in parallel with a single database. minitest-power_assert :: PowerAssert for Minitest. minitest-predicates :: Adds support for .predicate? methods. minitest-profile :: List the 10 slowest tests in your suite. minitest-rails :: Minitest integration for Rails 3.x. minitest-rails-capybara :: Capybara integration for Minitest::Rails. minitest-reporters :: Create customizable Minitest output formats. minitest-rg :: Colored red/green output for Minitest. minitest-rspec_mocks :: Use RSpec Mocks with Minitest. minitest-server :: minitest-server provides a client/server setup with your minitest process, allowing your test run to send its results directly to a handler. minitest-sequel :: Minitest assertions to speed-up development and testing of Ruby Sequel database setups. minitest-shared_description :: Support for shared specs and shared spec subclasses minitest-should_syntax :: RSpec-style x.should == y assertions for Minitest. minitest-shouldify :: Adding all manner of shoulds to Minitest (bad idea) minitest-snail :: Print a list of tests that take too long minitest-spec-context :: Provides rspec-ish context method to Minitest::Spec. minitest-spec-expect :: Expect syntax for Minitest::Spec (e.g. expect(sequences).to_include :celery_man). minitest-spec-magic :: Minitest::Spec extensions for Rails and beyond. minitest-spec-rails :: Drop in Minitest::Spec superclass for ActiveSupport::TestCase. minitest-sprint :: Runs (Get it? It's fast!) your tests and makes it easier to rerun individual failures. minitest-stately :: Find leaking state between tests minitest-stub_any_instance :: Stub any instance of a method on the given class for the duration of a block. minitest-stub-const :: Stub constants for the duration of a block. minitest-tags :: Add tags for minitest. minitest-unordered :: Adds a new assertion to minitest for checking the contents of a collection, ignoring element order. minitest-vcr :: Automatic cassette management with Minitest::Spec and VCR. minitest_log :: Adds structured logging, data explication, and verdicts. minitest_owrapper :: Get tests results as a TestResult object. minitest_should :: Shoulda style syntax for minitest test::unit. minitest_tu_shim :: Bridges between test/unit and minitest. mongoid-minitest :: Minitest matchers for Mongoid. mutant-minitest :: Minitest integration for mutant. pry-rescue :: A pry plugin w/ minitest support. See pry-rescue/minitest.rb. rematch :: Declutter your test files from large hardcoded data and update them automatically when your code changes. rspec2minitest :: Easily translate any RSpec matchers to Minitest assertions and expectations. stubberry :: Multiple stubbing 'berries', sweet and useful stub helpers and assertions. ( stub_must, assert_method_called, stubbing ORM objects by id ) == Unknown Extensions: Authors... Please send me a pull request with a description of your minitest extension. * assay-minitest * detroit-minitest * em-minitest-spec * flexmock-minitest * guard-minitest * guard-minitest-decisiv * minitest-activemodel * minitest-ar-assertions * minitest-capybara-unit * minitest-colorer * minitest-deluxe * minitest-extra-assertions * minitest-rails-shoulda * minitest-spec * minitest-spec-should * minitest-sugar * spork-minitest == Minitest related goods * minitest/pride fabric: https://www.spoonflower.com/fabric/3928730-again-by-katie_allen == REQUIREMENTS: * Ruby 2.3+. No magic is involved. I hope. == INSTALL: sudo gem install minitest On 1.9, you already have it. To get newer candy you can still install the gem, and then requiring "minitest/autorun" should automatically pull it in. If not, you'll need to do it yourself: gem "minitest" # ensures you"re using the gem, and not the built-in MT require "minitest/autorun" # ... usual testing stuffs ... DO NOTE: There is a serious problem with the way that ruby 1.9/2.0 packages their own gems. They install a gem specification file, but don't install the gem contents in the gem path. This messes up Gem.find_files and many other things (gem which, gem contents, etc). Just install minitest as a gem for real and you'll be happier. == LICENSE: (The MIT License) Copyright (c) Ryan Davis, seattle.rb Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/Rakefile000066400000000000000000000043031446701454400325130ustar00rootroot00000000000000# -*- ruby -*- require "rubygems" require "hoe" $:.unshift "lib" # to pick up lib/minitest/test_task.rb when minitest not installed Hoe.plugin :seattlerb Hoe.plugin :rdoc Hoe.spec "minitest" do developer "Ryan Davis", "ryand-ruby@zenspider.com" license "MIT" require_ruby_version [">= 2.6", "< 4.0"] end desc "Find missing expectations" task :specs do $:.unshift "lib" require "minitest/test" require "minitest/spec" pos_prefix, neg_prefix = "must", "wont" skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|send|raise$)/x dont_flip_re = /(must|wont)_(include|respond_to)/ map = { /(must_throw)s/ => '\1', /(?!not)_same/ => "_be_same_as", /_in_/ => "_be_within_", /_operator/ => "_be", /_includes/ => "_include", /(must|wont)_(.*_of|nil|silent|empty)/ => '\1_be_\2', /must_raises/ => "must_raise", /(must|wont)_predicate/ => '\1_be', /(must|wont)_path_exists/ => 'path_\1_exist', } expectations = Minitest::Expectations.public_instance_methods.map(&:to_s) assertions = Minitest::Assertions.public_instance_methods.map(&:to_s) assertions.sort.each do |assertion| expectation = case assertion when /^assert/ then assertion.sub(/^assert/, pos_prefix.to_s) when /^refute/ then assertion.sub(/^refute/, neg_prefix.to_s) end next unless expectation next if expectation =~ skip_re regexp, replacement = map.find { |re, _| expectation =~ re } expectation.sub! regexp, replacement if replacement next if expectations.include? expectation args = [assertion, expectation].map(&:to_sym).map(&:inspect) args << :reverse if expectation =~ dont_flip_re puts puts "##" puts "# :method: #{expectation}" puts "# See Minitest::Assertions##{assertion}" puts puts "infect_an_assertion #{args.join ", "}" end end task :bugs do sh "for f in bug*.rb ; do echo $f; echo; #{Gem.ruby} -Ilib $f && rm $f ; done" end # vim: syntax=Ruby design_rationale.rb000066400000000000000000000035761446701454400346360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1# Specs: # Equivalent Unit Tests: ############################################################################### describe Thingy do # class TestThingy < Minitest::Test before do # def setup do_some_setup # super end # do_some_setup # end it "should do the first thing" do # 1.must_equal 1 # def test_first_thing end # assert_equal 1, 1 # end describe SubThingy do # end before do # do_more_setup # class TestSubThingy < TestThingy end # def setup # super it "should do the second thing" do # do_more_setup 2.must_equal 2 # end end # end # def test_second_thing end # assert_equal 2, 2 # end # end ############################################################################### # runs 2 specs # runs 3 tests ############################################################################### # The specs generate: class ThingySpec < Minitest::Spec def setup super do_some_setup end def test_should_do_the_first_thing assert_equal 1, 1 end end class SubThingySpec < ThingySpec def setup super do_more_setup end # because only setup/teardown is inherited, not specs remove_method :test_should_do_the_first_thing def test_should_do_the_second_thing assert_equal 2, 2 end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/000077500000000000000000000000001446701454400316145ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/hoe/000077500000000000000000000000001446701454400323675ustar00rootroot00000000000000minitest.rb000066400000000000000000000010301446701454400344630ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/hoe# :stopdoc: class Hoe end module Hoe::Minitest def minitest? self.name == "minitest" end def initialize_minitest unless minitest? then dir = "../../minitest/dev/lib" Hoe.add_include_dirs dir if File.directory? dir end gem "minitest" require "minitest" version = Minitest::VERSION.split(/\./).first(2).join(".") dependency "minitest", "~> #{version}", :development unless minitest? or ENV["MT_NO_ISOLATE"] end def define_minitest_tasks self.testlib = :minitest end end minitest.rb000066400000000000000000000617661446701454400337360ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/librequire "optparse" require "thread" require "mutex_m" require "minitest/parallel" require "stringio" require "etc" ## # :include: README.rdoc module Minitest VERSION = "5.18.1" # :nodoc: @@installed_at_exit ||= false @@after_run = [] @extensions = [] def self.cattr_accessor name # :nodoc: (class << self; self; end).attr_accessor name end ## # The random seed used for this run. This is used to srand at the # start of the run and between each +Runnable.run+. # # Set via Minitest.run after processing args. cattr_accessor :seed ## # Parallel test executor cattr_accessor :parallel_executor warn "DEPRECATED: use MT_CPU instead of N for parallel test runs" if ENV["N"] && ENV["N"].to_i > 0 n_threads = (ENV["MT_CPU"] || ENV["N"] || Etc.nprocessors).to_i self.parallel_executor = Parallel::Executor.new n_threads ## # Filter object for backtraces. cattr_accessor :backtrace_filter ## # Reporter object to be used for all runs. # # NOTE: This accessor is only available during setup, not during runs. cattr_accessor :reporter ## # Names of known extension plugins. cattr_accessor :extensions ## # The signal to use for dumping information to STDERR. Defaults to "INFO". cattr_accessor :info_signal self.info_signal = "INFO" ## # Registers Minitest to run at process exit def self.autorun if Object.const_defined?(:Warning) && Warning.respond_to?(:[]=) Warning[:deprecated] = true end at_exit { next if $! and not ($!.kind_of? SystemExit and $!.success?) exit_code = nil pid = Process.pid at_exit { next if Process.pid != pid @@after_run.reverse_each(&:call) exit exit_code || false } exit_code = Minitest.run ARGV } unless @@installed_at_exit @@installed_at_exit = true end ## # A simple hook allowing you to run a block of code after everything # is done running. Eg: # # Minitest.after_run { p $debugging_info } def self.after_run &block @@after_run << block end def self.init_plugins options # :nodoc: self.extensions.each do |name| msg = "plugin_#{name}_init" send msg, options if self.respond_to? msg end end def self.load_plugins # :nodoc: return unless self.extensions.empty? seen = {} require "rubygems" unless defined? Gem Gem.find_files("minitest/*_plugin.rb").each do |plugin_path| name = File.basename plugin_path, "_plugin.rb" next if seen[name] seen[name] = true require plugin_path self.extensions << name end end ## # This is the top-level run method. Everything starts from here. It # tells each Runnable sub-class to run, and each of those are # responsible for doing whatever they do. # # The overall structure of a run looks like this: # # Minitest.autorun # Minitest.run(args) # Minitest.__run(reporter, options) # Runnable.runnables.each # runnable.run(reporter, options) # self.runnable_methods.each # self.run_one_method(self, runnable_method, reporter) # Minitest.run_one_method(klass, runnable_method) # klass.new(runnable_method).run def self.run args = [] self.load_plugins unless args.delete("--no-plugins") || ENV["MT_NO_PLUGINS"] options = process_args args Minitest.seed = options[:seed] srand Minitest.seed reporter = CompositeReporter.new reporter << SummaryReporter.new(options[:io], options) reporter << ProgressReporter.new(options[:io], options) self.reporter = reporter # this makes it available to plugins self.init_plugins options self.reporter = nil # runnables shouldn't depend on the reporter, ever self.parallel_executor.start if parallel_executor.respond_to?(:start) reporter.start begin __run reporter, options rescue Interrupt warn "Interrupted. Exiting..." end self.parallel_executor.shutdown reporter.report reporter.passed? end ## # Internal run method. Responsible for telling all Runnable # sub-classes to run. def self.__run reporter, options suites = Runnable.runnables.shuffle parallel, serial = suites.partition { |s| s.test_order == :parallel } # If we run the parallel tests before the serial tests, the parallel tests # could run in parallel with the serial tests. This would be bad because # the serial tests won't lock around Reporter#record. Run the serial tests # first, so that after they complete, the parallel tests will lock when # recording results. serial.map { |suite| suite.run reporter, options } + parallel.map { |suite| suite.run reporter, options } end def self.process_args args = [] # :nodoc: options = { :io => $stdout, } orig_args = args.dup OptionParser.new do |opts| opts.banner = "minitest options:" opts.version = Minitest::VERSION opts.on "-h", "--help", "Display this help." do puts opts exit end opts.on "--no-plugins", "Bypass minitest plugin auto-loading (or set $MT_NO_PLUGINS)." desc = "Sets random seed. Also via env. Eg: SEED=n rake" opts.on "-s", "--seed SEED", Integer, desc do |m| options[:seed] = m.to_i end opts.on "-v", "--verbose", "Verbose. Show progress processing files." do options[:verbose] = true end opts.on "--show-skips", "Show skipped at the end of run." do options[:show_skips] = true end opts.on "-n", "--name PATTERN", "Filter run on /regexp/ or string." do |a| options[:filter] = a end opts.on "-e", "--exclude PATTERN", "Exclude /regexp/ or string from run." do |a| options[:exclude] = a end opts.on "-S", "--skip CODES", String, "Skip reporting of certain types of results (eg E)." do |s| options[:skip] = s.chars.to_a end unless extensions.empty? opts.separator "" opts.separator "Known extensions: #{extensions.join(", ")}" extensions.each do |meth| msg = "plugin_#{meth}_options" send msg, opts, options if self.respond_to?(msg) end end begin opts.parse! args rescue OptionParser::InvalidOption => e puts puts e puts puts opts exit 1 end orig_args -= args end unless options[:seed] then srand options[:seed] = (ENV["SEED"] || srand).to_i % 0xFFFF orig_args << "--seed" << options[:seed].to_s end options[:args] = orig_args.map { |s| s =~ /[\s|&<>$()]/ ? s.inspect : s }.join " " options end def self.filter_backtrace bt # :nodoc: result = backtrace_filter.filter bt result = bt.dup if result.empty? result end ## # Represents anything "runnable", like Test, Spec, Benchmark, or # whatever you can dream up. # # Subclasses of this are automatically registered and available in # Runnable.runnables. class Runnable ## # Number of assertions executed in this run. attr_accessor :assertions ## # An assertion raised during the run, if any. attr_accessor :failures ## # The time it took to run. attr_accessor :time def time_it # :nodoc: t0 = Minitest.clock_time yield ensure self.time = Minitest.clock_time - t0 end ## # Name of the run. def name @NAME end ## # Set the name of the run. def name= o @NAME = o end ## # Returns all instance methods matching the pattern +re+. def self.methods_matching re public_instance_methods(true).grep(re).map(&:to_s) end def self.reset # :nodoc: @@runnables = [] end reset ## # Responsible for running all runnable methods in a given class, # each in its own instance. Each instance is passed to the # reporter to record. def self.run reporter, options = {} filtered_methods = if options[:filter] filter = options[:filter] filter = Regexp.new $1 if filter.is_a?(String) && filter =~ %r%/(.*)/% self.runnable_methods.find_all { |m| filter === m || filter === "#{self}##{m}" } else self.runnable_methods end if options[:exclude] exclude = options[:exclude] exclude = Regexp.new $1 if exclude =~ %r%/(.*)/% filtered_methods.delete_if { |m| exclude === m || exclude === "#{self}##{m}" } end return if filtered_methods.empty? with_info_handler reporter do filtered_methods.each do |method_name| run_one_method self, method_name, reporter end end end ## # Runs a single method and has the reporter record the result. # This was considered internal API but is factored out of run so # that subclasses can specialize the running of an individual # test. See Minitest::ParallelTest::ClassMethods for an example. def self.run_one_method klass, method_name, reporter reporter.prerecord klass, method_name reporter.record Minitest.run_one_method(klass, method_name) end ## # Defines the order to run tests (:random by default). Override # this or use a convenience method to change it for your tests. def self.test_order :random end def self.with_info_handler reporter, &block # :nodoc: handler = lambda do unless reporter.passed? then warn "Current results:" warn "" warn reporter.reporters.first warn "" end end on_signal ::Minitest.info_signal, handler, &block end SIGNALS = Signal.list # :nodoc: def self.on_signal name, action # :nodoc: supported = SIGNALS[name] old_trap = trap name do old_trap.call if old_trap.respond_to? :call action.call end if supported yield ensure trap name, old_trap if supported end ## # Each subclass of Runnable is responsible for overriding this # method to return all runnable methods. See #methods_matching. def self.runnable_methods raise NotImplementedError, "subclass responsibility" end ## # Returns all subclasses of Runnable. def self.runnables @@runnables end @@marshal_dump_warned = false def marshal_dump # :nodoc: unless @@marshal_dump_warned then warn ["Minitest::Runnable#marshal_dump is deprecated.", "You might be violating internals. From", caller.first].join " " @@marshal_dump_warned = true end [self.name, self.failures, self.assertions, self.time] end def marshal_load ary # :nodoc: self.name, self.failures, self.assertions, self.time = ary end def failure # :nodoc: self.failures.first end def initialize name # :nodoc: self.name = name self.failures = [] self.assertions = 0 end ## # Runs a single method. Needs to return self. def run raise NotImplementedError, "subclass responsibility" end ## # Did this run pass? # # Note: skipped runs are not considered passing, but they don't # cause the process to exit non-zero. def passed? raise NotImplementedError, "subclass responsibility" end ## # Returns a single character string to print based on the result # of the run. One of ".", "F", # "E" or "S". def result_code raise NotImplementedError, "subclass responsibility" end ## # Was this run skipped? See #passed? for more information. def skipped? raise NotImplementedError, "subclass responsibility" end end ## # Shared code for anything that can get passed to a Reporter. See # Minitest::Test & Minitest::Result. module Reportable ## # Did this run pass? # # Note: skipped runs are not considered passing, but they don't # cause the process to exit non-zero. def passed? not self.failure end ## # The location identifier of this test. Depends on a method # existing called class_name. def location loc = " [#{self.failure.location}]" unless passed? or error? "#{self.class_name}##{self.name}#{loc}" end def class_name # :nodoc: raise NotImplementedError, "subclass responsibility" end ## # Returns ".", "F", or "E" based on the result of the run. def result_code self.failure and self.failure.result_code or "." end ## # Was this run skipped? def skipped? self.failure and Skip === self.failure end ## # Did this run error? def error? self.failures.any? { |f| UnexpectedError === f } end end ## # This represents a test result in a clean way that can be # marshalled over a wire. Tests can do anything they want to the # test instance and can create conditions that cause Marshal.dump to # blow up. By using Result.from(a_test) you can be reasonably sure # that the test result can be marshalled. class Result < Runnable include Minitest::Reportable undef_method :marshal_dump undef_method :marshal_load ## # The class name of the test result. attr_accessor :klass ## # The location of the test method. attr_accessor :source_location ## # Create a new test result from a Runnable instance. def self.from runnable o = runnable r = self.new o.name r.klass = o.class.name r.assertions = o.assertions r.failures = o.failures.dup r.time = o.time r.source_location = o.method(o.name).source_location rescue ["unknown", -1] r end def class_name # :nodoc: self.klass # for Minitest::Reportable end def to_s # :nodoc: return location if passed? and not skipped? failures.map { |failure| "#{failure.result_label}:\n#{self.location}:\n#{failure.message}\n" }.join "\n" end end ## # Defines the API for Reporters. Subclass this and override whatever # you want. Go nuts. class AbstractReporter include Mutex_m ## # Starts reporting on the run. def start end ## # About to start running a test. This allows a reporter to show # that it is starting or that we are in the middle of a test run. def prerecord klass, name end ## # Output and record the result of the test. Call # {result#result_code}[rdoc-ref:Runnable#result_code] to get the # result character string. Stores the result of the run if the run # did not pass. def record result end ## # Outputs the summary of the run. def report end ## # Did this run pass? def passed? true end end class Reporter < AbstractReporter # :nodoc: ## # The IO used to report. attr_accessor :io ## # Command-line options for this run. attr_accessor :options def initialize io = $stdout, options = {} # :nodoc: super() self.io = io self.options = options end end ## # A very simple reporter that prints the "dots" during the run. # # This is added to the top-level CompositeReporter at the start of # the run. If you want to change the output of minitest via a # plugin, pull this out of the composite and replace it with your # own. class ProgressReporter < Reporter def prerecord klass, name #:nodoc: if options[:verbose] then io.print "%s#%s = " % [klass.name, name] io.flush end end def record result # :nodoc: io.print "%.2f s = " % [result.time] if options[:verbose] io.print result.result_code io.puts if options[:verbose] end end ## # A reporter that gathers statistics about a test run. Does not do # any IO because meant to be used as a parent class for a reporter # that does. # # If you want to create an entirely different type of output (eg, # CI, HTML, etc), this is the place to start. # # Example: # # class JenkinsCIReporter < StatisticsReporter # def report # super # Needed to calculate some statistics # # print " 30 characters. # 3. or: Strings are equal to each other (but maybe different encodings?). # 4. and: we found a diff executable. def things_to_diff exp, act expect = mu_pp_for_diff exp butwas = mu_pp_for_diff act e1, e2 = expect.include?("\n"), expect.include?("\\n") b1, b2 = butwas.include?("\n"), butwas.include?("\\n") need_to_diff = (e1 ^ e2 || b1 ^ b2 || expect.size > 30 || butwas.size > 30 || expect == butwas) && Minitest::Assertions.diff need_to_diff && [expect, butwas] end ## # This returns a human-readable version of +obj+. By default # #inspect is called. You can override this to use #pretty_inspect # if you want. # # See Minitest::Test.make_my_diffs_pretty! def mu_pp obj s = obj.inspect if defined? Encoding then s = s.encode Encoding.default_external if String === obj && (obj.encoding != Encoding.default_external || !obj.valid_encoding?) then enc = "# encoding: #{obj.encoding}" val = "# valid: #{obj.valid_encoding?}" s = "#{enc}\n#{val}\n#{s}" end end s end ## # This returns a diff-able more human-readable version of +obj+. # This differs from the regular mu_pp because it expands escaped # newlines and makes hex-values (like object_ids) generic. This # uses mu_pp to do the first pass and then cleans it up. def mu_pp_for_diff obj str = mu_pp obj # both '\n' & '\\n' (_after_ mu_pp (aka inspect)) single = !!str.match(/(?exp == act printing the difference between # the two, if possible. # # If there is no visible difference but the assertion fails, you # should suspect that your #== is buggy, or your inspect output is # missing crucial details. For nicer structural diffing, set # Minitest::Test.make_my_diffs_pretty! # # For floats use assert_in_delta. # # See also: Minitest::Assertions.diff def assert_equal exp, act, msg = nil msg = message(msg, E) { diff exp, act } result = assert exp == act, msg if nil == exp then if Minitest::VERSION =~ /^6/ then refute_nil exp, "Use assert_nil if expecting nil." else where = Minitest.filter_backtrace(caller).first where = where.split(/:in /, 2).first # clean up noise warn "DEPRECATED: Use assert_nil if expecting nil from #{where}. This will fail in Minitest 6." end end result end ## # For comparing Floats. Fails unless +exp+ and +act+ are within +delta+ # of each other. # # assert_in_delta Math::PI, (22.0 / 7.0), 0.01 def assert_in_delta exp, act, delta = 0.001, msg = nil n = (exp - act).abs msg = message(msg) { "Expected |#{exp} - #{act}| (#{n}) to be <= #{delta}" } assert delta >= n, msg end ## # For comparing Floats. Fails unless +exp+ and +act+ have a relative # error less than +epsilon+. def assert_in_epsilon exp, act, epsilon = 0.001, msg = nil assert_in_delta exp, act, [exp.abs, act.abs].min * epsilon, msg end ## # Fails unless +collection+ includes +obj+. def assert_includes collection, obj, msg = nil msg = message(msg) { "Expected #{mu_pp(collection)} to include #{mu_pp(obj)}" } assert_respond_to collection, :include? assert collection.include?(obj), msg end ## # Fails unless +obj+ is an instance of +cls+. def assert_instance_of cls, obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to be an instance of #{cls}, not #{obj.class}" } assert obj.instance_of?(cls), msg end ## # Fails unless +obj+ is a kind of +cls+. def assert_kind_of cls, obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to be a kind of #{cls}, not #{obj.class}" } assert obj.kind_of?(cls), msg end ## # Fails unless +matcher+ =~ +obj+. def assert_match matcher, obj, msg = nil msg = message(msg) { "Expected #{mu_pp matcher} to match #{mu_pp obj}" } assert_respond_to matcher, :"=~" matcher = Regexp.new Regexp.escape matcher if String === matcher assert matcher =~ obj, msg Regexp.last_match end ## # Fails unless +obj+ is nil def assert_nil obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to be nil" } assert obj.nil?, msg end ## # For testing with binary operators. Eg: # # assert_operator 5, :<=, 4 def assert_operator o1, op, o2 = UNDEFINED, msg = nil return assert_predicate o1, op, msg if UNDEFINED == o2 msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op} #{mu_pp(o2)}" } assert o1.__send__(op, o2), msg end ## # Fails if stdout or stderr do not output the expected results. # Pass in nil if you don't care about that streams output. Pass in # "" if you require it to be silent. Pass in a regexp if you want # to pattern match. # # assert_output(/hey/) { method_with_output } # # NOTE: this uses #capture_io, not #capture_subprocess_io. # # See also: #assert_silent def assert_output stdout = nil, stderr = nil flunk "assert_output requires a block to capture output." unless block_given? out, err = capture_io do yield end err_msg = Regexp === stderr ? :assert_match : :assert_equal if stderr out_msg = Regexp === stdout ? :assert_match : :assert_equal if stdout y = send err_msg, stderr, err, "In stderr" if err_msg x = send out_msg, stdout, out, "In stdout" if out_msg (!stdout || x) && (!stderr || y) rescue Assertion raise rescue => e raise UnexpectedError, e end ## # Fails unless +path+ exists. def assert_path_exists path, msg = nil msg = message(msg) { "Expected path '#{path}' to exist" } assert File.exist?(path), msg end ## # For testing with pattern matching (only supported with Ruby 3.0 and later) # # # pass # assert_pattern { [1,2,3] => [Integer, Integer, Integer] } # # # fail "length mismatch (given 3, expected 1)" # assert_pattern { [1,2,3] => [Integer] } # # The bare => pattern will raise a NoMatchingPatternError on failure, which would # normally be counted as a test error. This assertion rescues NoMatchingPatternError and # generates a test failure. Any other exception will be raised as normal and generate a test # error. def assert_pattern raise NotImplementedError, "only available in Ruby 3.0+" unless RUBY_VERSION >= "3.0" flunk "assert_pattern requires a block to capture errors." unless block_given? begin # TODO: remove after ruby 2.6 dropped yield pass rescue NoMatchingPatternError => e flunk e.message end end ## # For testing with predicates. Eg: # # assert_predicate str, :empty? # # This is really meant for specs and is front-ended by assert_operator: # # str.must_be :empty? def assert_predicate o1, op, msg = nil msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op}" } assert o1.__send__(op), msg end ## # Fails unless the block raises one of +exp+. Returns the # exception matched so you can check the message, attributes, etc. # # +exp+ takes an optional message on the end to help explain # failures and defaults to StandardError if no exception class is # passed. Eg: # # assert_raises(CustomError) { method_with_custom_error } # # With custom error message: # # assert_raises(CustomError, 'This should have raised CustomError') { method_with_custom_error } # # Using the returned object: # # error = assert_raises(CustomError) do # raise CustomError, 'This is really bad' # end # # assert_equal 'This is really bad', error.message def assert_raises *exp flunk "assert_raises requires a block to capture errors." unless block_given? msg = "#{exp.pop}.\n" if String === exp.last exp << StandardError if exp.empty? begin yield rescue *exp => e pass # count assertion return e rescue Minitest::Assertion # incl Skip & UnexpectedError # don't count assertion raise rescue SignalException, SystemExit raise rescue Exception => e flunk proc { exception_details(e, "#{msg}#{mu_pp(exp)} exception expected, not") } end exp = exp.first if exp.size == 1 flunk "#{msg}#{mu_pp(exp)} expected but nothing was raised." end ## # Fails unless +obj+ responds to +meth+. def assert_respond_to obj, meth, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} (#{obj.class}) to respond to ##{meth}" } assert obj.respond_to?(meth), msg end ## # Fails unless +exp+ and +act+ are #equal? def assert_same exp, act, msg = nil msg = message(msg) { data = [mu_pp(act), act.object_id, mu_pp(exp), exp.object_id] "Expected %s (oid=%d) to be the same as %s (oid=%d)" % data } assert exp.equal?(act), msg end ## # +send_ary+ is a receiver, message and arguments. # # Fails unless the call returns a true value def assert_send send_ary, m = nil where = Minitest.filter_backtrace(caller).first where = where.split(/:in /, 2).first # clean up noise warn "DEPRECATED: assert_send. From #{where}" recv, msg, *args = send_ary m = message(m) { "Expected #{mu_pp(recv)}.#{msg}(*#{mu_pp(args)}) to return true" } assert recv.__send__(msg, *args), m end ## # Fails if the block outputs anything to stderr or stdout. # # See also: #assert_output def assert_silent assert_output "", "" do yield end end ## # Fails unless the block throws +sym+ def assert_throws sym, msg = nil default = "Expected #{mu_pp(sym)} to have been thrown" caught = true value = catch(sym) do begin yield rescue ThreadError => e # wtf?!? 1.8 + threads == suck default += ", not \:#{e.message[/uncaught throw \`(\w+?)\'/, 1]}" rescue ArgumentError => e # 1.9 exception raise e unless e.message.include?("uncaught throw") default += ", not #{e.message.split(/ /).last}" rescue NameError => e # 1.8 exception raise e unless e.name == sym default += ", not #{e.name.inspect}" end caught = false end assert caught, message(msg) { default } value rescue Assertion raise rescue => e raise UnexpectedError, e end ## # Captures $stdout and $stderr into strings: # # out, err = capture_io do # puts "Some info" # warn "You did a bad thing" # end # # assert_match %r%info%, out # assert_match %r%bad%, err # # NOTE: For efficiency, this method uses StringIO and does not # capture IO for subprocesses. Use #capture_subprocess_io for # that. def capture_io _synchronize do begin captured_stdout, captured_stderr = StringIO.new, StringIO.new orig_stdout, orig_stderr = $stdout, $stderr $stdout, $stderr = captured_stdout, captured_stderr yield return captured_stdout.string, captured_stderr.string ensure $stdout = orig_stdout $stderr = orig_stderr end end end ## # Captures $stdout and $stderr into strings, using Tempfile to # ensure that subprocess IO is captured as well. # # out, err = capture_subprocess_io do # system "echo Some info" # system "echo You did a bad thing 1>&2" # end # # assert_match %r%info%, out # assert_match %r%bad%, err # # NOTE: This method is approximately 10x slower than #capture_io so # only use it when you need to test the output of a subprocess. def capture_subprocess_io _synchronize do begin require "tempfile" captured_stdout, captured_stderr = Tempfile.new("out"), Tempfile.new("err") orig_stdout, orig_stderr = $stdout.dup, $stderr.dup $stdout.reopen captured_stdout $stderr.reopen captured_stderr yield $stdout.rewind $stderr.rewind return captured_stdout.read, captured_stderr.read ensure $stdout.reopen orig_stdout $stderr.reopen orig_stderr orig_stdout.close orig_stderr.close captured_stdout.close! captured_stderr.close! end end end ## # Returns details for exception +e+ def exception_details e, msg [ "#{msg}", "Class: <#{e.class}>", "Message: <#{e.message.inspect}>", "---Backtrace---", "#{Minitest.filter_backtrace(e.backtrace).join("\n")}", "---------------", ].join "\n" end ## # Fails after a given date (in the local time zone). This allows # you to put time-bombs in your tests if you need to keep # something around until a later date lest you forget about it. def fail_after y,m,d,msg flunk msg if Time.now > Time.local(y, m, d) end ## # Fails with +msg+. def flunk msg = nil msg ||= "Epic Fail!" assert false, msg end ## # Returns a proc that will output +msg+ along with the default message. def message msg = nil, ending = nil, &default proc { msg = msg.call.chomp(".") if Proc === msg custom_message = "#{msg}.\n" unless msg.nil? or msg.to_s.empty? "#{custom_message}#{default.call}#{ending || "."}" } end ## # used for counting assertions def pass _msg = nil assert true end ## # Fails if +test+ is truthy. def refute test, msg = nil msg ||= message { "Expected #{mu_pp(test)} to not be truthy" } assert !test, msg end ## # Fails if +obj+ is empty. def refute_empty obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to not be empty" } assert_respond_to obj, :empty? refute obj.empty?, msg end ## # Fails if exp == act. # # For floats use refute_in_delta. def refute_equal exp, act, msg = nil msg = message(msg) { "Expected #{mu_pp(act)} to not be equal to #{mu_pp(exp)}" } refute exp == act, msg end ## # For comparing Floats. Fails if +exp+ is within +delta+ of +act+. # # refute_in_delta Math::PI, (22.0 / 7.0) def refute_in_delta exp, act, delta = 0.001, msg = nil n = (exp - act).abs msg = message(msg) { "Expected |#{exp} - #{act}| (#{n}) to not be <= #{delta}" } refute delta >= n, msg end ## # For comparing Floats. Fails if +exp+ and +act+ have a relative error # less than +epsilon+. def refute_in_epsilon a, b, epsilon = 0.001, msg = nil refute_in_delta a, b, a * epsilon, msg end ## # Fails if +collection+ includes +obj+. def refute_includes collection, obj, msg = nil msg = message(msg) { "Expected #{mu_pp(collection)} to not include #{mu_pp(obj)}" } assert_respond_to collection, :include? refute collection.include?(obj), msg end ## # Fails if +obj+ is an instance of +cls+. def refute_instance_of cls, obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to not be an instance of #{cls}" } refute obj.instance_of?(cls), msg end ## # Fails if +obj+ is a kind of +cls+. def refute_kind_of cls, obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to not be a kind of #{cls}" } refute obj.kind_of?(cls), msg end ## # Fails if +matcher+ =~ +obj+. def refute_match matcher, obj, msg = nil msg = message(msg) { "Expected #{mu_pp matcher} to not match #{mu_pp obj}" } assert_respond_to matcher, :"=~" matcher = Regexp.new Regexp.escape matcher if String === matcher refute matcher =~ obj, msg end ## # Fails if +obj+ is nil. def refute_nil obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to not be nil" } refute obj.nil?, msg end ## # For testing with pattern matching (only supported with Ruby 3.0 and later) # # # pass # refute_pattern { [1,2,3] => [String] } # # # fail "NoMatchingPatternError expected, but nothing was raised." # refute_pattern { [1,2,3] => [Integer, Integer, Integer] } # # This assertion expects a NoMatchingPatternError exception, and will fail if none is raised. Any # other exceptions will be raised as normal and generate a test error. def refute_pattern raise NotImplementedError, "only available in Ruby 3.0+" unless RUBY_VERSION >= "3.0" flunk "refute_pattern requires a block to capture errors." unless block_given? begin yield flunk("NoMatchingPatternError expected, but nothing was raised.") rescue NoMatchingPatternError pass end end ## # Fails if +o1+ is not +op+ +o2+. Eg: # # refute_operator 1, :>, 2 #=> pass # refute_operator 1, :<, 2 #=> fail def refute_operator o1, op, o2 = UNDEFINED, msg = nil return refute_predicate o1, op, msg if UNDEFINED == o2 msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op} #{mu_pp(o2)}" } refute o1.__send__(op, o2), msg end ## # Fails if +path+ exists. def refute_path_exists path, msg = nil msg = message(msg) { "Expected path '#{path}' to not exist" } refute File.exist?(path), msg end ## # For testing with predicates. # # refute_predicate str, :empty? # # This is really meant for specs and is front-ended by refute_operator: # # str.wont_be :empty? def refute_predicate o1, op, msg = nil msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op}" } refute o1.__send__(op), msg end ## # Fails if +obj+ responds to the message +meth+. def refute_respond_to obj, meth, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to not respond to #{meth}" } refute obj.respond_to?(meth), msg end ## # Fails if +exp+ is the same (by object identity) as +act+. def refute_same exp, act, msg = nil msg = message(msg) { data = [mu_pp(act), act.object_id, mu_pp(exp), exp.object_id] "Expected %s (oid=%d) to not be the same as %s (oid=%d)" % data } refute exp.equal?(act), msg end ## # Skips the current run. If run in verbose-mode, the skipped run # gets listed at the end of the run but doesn't cause a failure # exit code. def skip msg = nil, bt = caller msg ||= "Skipped, no message given" @skip = true raise Minitest::Skip, msg, bt end ## # Skips the current run until a given date (in the local time # zone). This allows you to put some fixes on hold until a later # date, but still holds you accountable and prevents you from # forgetting it. def skip_until y,m,d,msg skip msg if Time.now < Time.local(y, m, d) where = caller.first.rpartition(':in').reject(&:empty?).first warn "Stale skip_until %p at %s" % [msg, where] end ## # Was this testcase skipped? Meant for #teardown. def skipped? defined?(@skip) and @skip end end end autorun.rb000066400000000000000000000003251446701454400354130ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestbegin require "rubygems" gem "minitest" rescue Gem::LoadError # do nothing end require "minitest" require "minitest/spec" require "minitest/mock" require "minitest/hell" if ENV["MT_HELL"] Minitest.autorun benchmark.rb000066400000000000000000000300411446701454400356460ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestrequire "minitest/test" require "minitest/spec" module Minitest ## # Subclass Benchmark to create your own benchmark runs. Methods # starting with "bench_" get executed on a per-class. # # See Minitest::Assertions class Benchmark < Test def self.io # :nodoc: @io end def io # :nodoc: self.class.io end def self.run reporter, options = {} # :nodoc: @io = reporter.io super end def self.runnable_methods # :nodoc: methods_matching(/^bench_/) end ## # Returns a set of ranges stepped exponentially from +min+ to # +max+ by powers of +base+. Eg: # # bench_exp(2, 16, 2) # => [2, 4, 8, 16] def self.bench_exp min, max, base = 10 min = (Math.log10(min) / Math.log10(base)).to_i max = (Math.log10(max) / Math.log10(base)).to_i (min..max).map { |m| base ** m }.to_a end ## # Returns a set of ranges stepped linearly from +min+ to +max+ by # +step+. Eg: # # bench_linear(20, 40, 10) # => [20, 30, 40] def self.bench_linear min, max, step = 10 (min..max).step(step).to_a rescue LocalJumpError # 1.8.6 r = []; (min..max).step(step) { |n| r << n }; r end ## # Specifies the ranges used for benchmarking for that class. # Defaults to exponential growth from 1 to 10k by powers of 10. # Override if you need different ranges for your benchmarks. # # See also: ::bench_exp and ::bench_linear. def self.bench_range bench_exp 1, 10_000 end ## # Runs the given +work+, gathering the times of each run. Range # and times are then passed to a given +validation+ proc. Outputs # the benchmark name and times in tab-separated format, making it # easy to paste into a spreadsheet for graphing or further # analysis. # # Ranges are specified by ::bench_range. # # Eg: # # def bench_algorithm # validation = proc { |x, y| ... } # assert_performance validation do |n| # @obj.algorithm(n) # end # end def assert_performance validation, &work range = self.class.bench_range io.print "#{self.name}" times = [] range.each do |x| GC.start t0 = Minitest.clock_time instance_exec(x, &work) t = Minitest.clock_time - t0 io.print "\t%9.6f" % t times << t end io.puts validation[range, times] end ## # Runs the given +work+ and asserts that the times gathered fit to # match a constant rate (eg, linear slope == 0) within a given # +threshold+. Note: because we're testing for a slope of 0, R^2 # is not a good determining factor for the fit, so the threshold # is applied against the slope itself. As such, you probably want # to tighten it from the default. # # See https://www.graphpad.com/guides/prism/8/curve-fitting/reg_intepretingnonlinr2.htm # for more details. # # Fit is calculated by #fit_linear. # # Ranges are specified by ::bench_range. # # Eg: # # def bench_algorithm # assert_performance_constant 0.9999 do |n| # @obj.algorithm(n) # end # end def assert_performance_constant threshold = 0.99, &work validation = proc do |range, times| a, b, rr = fit_linear range, times assert_in_delta 0, b, 1 - threshold [a, b, rr] end assert_performance validation, &work end ## # Runs the given +work+ and asserts that the times gathered fit to # match a exponential curve within a given error +threshold+. # # Fit is calculated by #fit_exponential. # # Ranges are specified by ::bench_range. # # Eg: # # def bench_algorithm # assert_performance_exponential 0.9999 do |n| # @obj.algorithm(n) # end # end def assert_performance_exponential threshold = 0.99, &work assert_performance validation_for_fit(:exponential, threshold), &work end ## # Runs the given +work+ and asserts that the times gathered fit to # match a logarithmic curve within a given error +threshold+. # # Fit is calculated by #fit_logarithmic. # # Ranges are specified by ::bench_range. # # Eg: # # def bench_algorithm # assert_performance_logarithmic 0.9999 do |n| # @obj.algorithm(n) # end # end def assert_performance_logarithmic threshold = 0.99, &work assert_performance validation_for_fit(:logarithmic, threshold), &work end ## # Runs the given +work+ and asserts that the times gathered fit to # match a straight line within a given error +threshold+. # # Fit is calculated by #fit_linear. # # Ranges are specified by ::bench_range. # # Eg: # # def bench_algorithm # assert_performance_linear 0.9999 do |n| # @obj.algorithm(n) # end # end def assert_performance_linear threshold = 0.99, &work assert_performance validation_for_fit(:linear, threshold), &work end ## # Runs the given +work+ and asserts that the times gathered curve # fit to match a power curve within a given error +threshold+. # # Fit is calculated by #fit_power. # # Ranges are specified by ::bench_range. # # Eg: # # def bench_algorithm # assert_performance_power 0.9999 do |x| # @obj.algorithm # end # end def assert_performance_power threshold = 0.99, &work assert_performance validation_for_fit(:power, threshold), &work end ## # Takes an array of x/y pairs and calculates the general R^2 value. # # See: https://en.wikipedia.org/wiki/Coefficient_of_determination def fit_error xys y_bar = sigma(xys) { |_, y| y } / xys.size.to_f ss_tot = sigma(xys) { |_, y| (y - y_bar) ** 2 } ss_err = sigma(xys) { |x, y| (yield(x) - y) ** 2 } 1 - (ss_err / ss_tot) end ## # To fit a functional form: y = ae^(bx). # # Takes x and y values and returns [a, b, r^2]. # # See: https://mathworld.wolfram.com/LeastSquaresFittingExponential.html def fit_exponential xs, ys n = xs.size xys = xs.zip(ys) sxlny = sigma(xys) { |x, y| x * Math.log(y) } slny = sigma(xys) { |_, y| Math.log(y) } sx2 = sigma(xys) { |x, _| x * x } sx = sigma xs c = n * sx2 - sx ** 2 a = (slny * sx2 - sx * sxlny) / c b = ( n * sxlny - sx * slny ) / c return Math.exp(a), b, fit_error(xys) { |x| Math.exp(a + b * x) } end ## # To fit a functional form: y = a + b*ln(x). # # Takes x and y values and returns [a, b, r^2]. # # See: https://mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html def fit_logarithmic xs, ys n = xs.size xys = xs.zip(ys) slnx2 = sigma(xys) { |x, _| Math.log(x) ** 2 } slnx = sigma(xys) { |x, _| Math.log(x) } sylnx = sigma(xys) { |x, y| y * Math.log(x) } sy = sigma(xys) { |_, y| y } c = n * slnx2 - slnx ** 2 b = ( n * sylnx - sy * slnx ) / c a = (sy - b * slnx) / n return a, b, fit_error(xys) { |x| a + b * Math.log(x) } end ## # Fits the functional form: a + bx. # # Takes x and y values and returns [a, b, r^2]. # # See: https://mathworld.wolfram.com/LeastSquaresFitting.html def fit_linear xs, ys n = xs.size xys = xs.zip(ys) sx = sigma xs sy = sigma ys sx2 = sigma(xs) { |x| x ** 2 } sxy = sigma(xys) { |x, y| x * y } c = n * sx2 - sx**2 a = (sy * sx2 - sx * sxy) / c b = ( n * sxy - sx * sy ) / c return a, b, fit_error(xys) { |x| a + b * x } end ## # To fit a functional form: y = ax^b. # # Takes x and y values and returns [a, b, r^2]. # # See: https://mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html def fit_power xs, ys n = xs.size xys = xs.zip(ys) slnxlny = sigma(xys) { |x, y| Math.log(x) * Math.log(y) } slnx = sigma(xs) { |x | Math.log(x) } slny = sigma(ys) { | y| Math.log(y) } slnx2 = sigma(xs) { |x | Math.log(x) ** 2 } b = (n * slnxlny - slnx * slny) / (n * slnx2 - slnx ** 2) a = (slny - b * slnx) / n return Math.exp(a), b, fit_error(xys) { |x| (Math.exp(a) * (x ** b)) } end ## # Enumerates over +enum+ mapping +block+ if given, returning the # sum of the result. Eg: # # sigma([1, 2, 3]) # => 1 + 2 + 3 => 6 # sigma([1, 2, 3]) { |n| n ** 2 } # => 1 + 4 + 9 => 14 def sigma enum, &block enum = enum.map(&block) if block enum.inject { |sum, n| sum + n } end ## # Returns a proc that calls the specified fit method and asserts # that the error is within a tolerable threshold. def validation_for_fit msg, threshold proc do |range, times| a, b, rr = send "fit_#{msg}", range, times assert_operator rr, :>=, threshold [a, b, rr] end end end end module Minitest ## # The spec version of Minitest::Benchmark. class BenchSpec < Benchmark extend Minitest::Spec::DSL ## # This is used to define a new benchmark method. You usually don't # use this directly and is intended for those needing to write new # performance curve fits (eg: you need a specific polynomial fit). # # See ::bench_performance_linear for an example of how to use this. def self.bench name, &block define_method "bench_#{name.gsub(/\W+/, "_")}", &block end ## # Specifies the ranges used for benchmarking for that class. # # bench_range do # bench_exp(2, 16, 2) # end # # See Minitest::Benchmark#bench_range for more details. def self.bench_range &block return super unless block meta = (class << self; self; end) meta.send :define_method, "bench_range", &block end ## # Create a benchmark that verifies that the performance is linear. # # describe "my class Bench" do # bench_performance_linear "fast_algorithm", 0.9999 do |n| # @obj.fast_algorithm(n) # end # end def self.bench_performance_linear name, threshold = 0.99, &work bench name do assert_performance_linear threshold, &work end end ## # Create a benchmark that verifies that the performance is constant. # # describe "my class Bench" do # bench_performance_constant "zoom_algorithm!" do |n| # @obj.zoom_algorithm!(n) # end # end def self.bench_performance_constant name, threshold = 0.99, &work bench name do assert_performance_constant threshold, &work end end ## # Create a benchmark that verifies that the performance is exponential. # # describe "my class Bench" do # bench_performance_exponential "algorithm" do |n| # @obj.algorithm(n) # end # end def self.bench_performance_exponential name, threshold = 0.99, &work bench name do assert_performance_exponential threshold, &work end end ## # Create a benchmark that verifies that the performance is logarithmic. # # describe "my class Bench" do # bench_performance_logarithmic "algorithm" do |n| # @obj.algorithm(n) # end # end def self.bench_performance_logarithmic name, threshold = 0.99, &work bench name do assert_performance_logarithmic threshold, &work end end ## # Create a benchmark that verifies that the performance is power. # # describe "my class Bench" do # bench_performance_power "algorithm" do |n| # @obj.algorithm(n) # end # end def self.bench_performance_power name, threshold = 0.99, &work bench name do assert_performance_power threshold, &work end end end Minitest::Spec.register_spec_type(/Bench(mark)?$/, Minitest::BenchSpec) end expectations.rb000066400000000000000000000153311446701454400364270ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitest## # It's where you hide your "assertions". # # Please note, because of the way that expectations are implemented, # all expectations (eg must_equal) are dependent upon a thread local # variable +:current_spec+. If your specs rely on mixing threads into # the specs themselves, you're better off using assertions or the new # _(value) wrapper. For example: # # it "should still work in threads" do # my_threaded_thingy do # (1+1).must_equal 2 # bad # assert_equal 2, 1+1 # good # _(1 + 1).must_equal 2 # good # value(1 + 1).must_equal 2 # good, also #expect # _ { 1 + "1" }.must_raise TypeError # good # end # end module Minitest::Expectations ## # See Minitest::Assertions#assert_empty. # # _(collection).must_be_empty # # :method: must_be_empty infect_an_assertion :assert_empty, :must_be_empty, :unary ## # See Minitest::Assertions#assert_equal # # _(a).must_equal b # # :method: must_equal infect_an_assertion :assert_equal, :must_equal ## # See Minitest::Assertions#assert_in_delta # # _(n).must_be_close_to m [, delta] # # :method: must_be_close_to infect_an_assertion :assert_in_delta, :must_be_close_to infect_an_assertion :assert_in_delta, :must_be_within_delta # :nodoc: ## # See Minitest::Assertions#assert_in_epsilon # # _(n).must_be_within_epsilon m [, epsilon] # # :method: must_be_within_epsilon infect_an_assertion :assert_in_epsilon, :must_be_within_epsilon ## # See Minitest::Assertions#assert_includes # # _(collection).must_include obj # # :method: must_include infect_an_assertion :assert_includes, :must_include, :reverse ## # See Minitest::Assertions#assert_instance_of # # _(obj).must_be_instance_of klass # # :method: must_be_instance_of infect_an_assertion :assert_instance_of, :must_be_instance_of ## # See Minitest::Assertions#assert_kind_of # # _(obj).must_be_kind_of mod # # :method: must_be_kind_of infect_an_assertion :assert_kind_of, :must_be_kind_of ## # See Minitest::Assertions#assert_match # # _(a).must_match b # # :method: must_match infect_an_assertion :assert_match, :must_match ## # See Minitest::Assertions#assert_nil # # _(obj).must_be_nil # # :method: must_be_nil infect_an_assertion :assert_nil, :must_be_nil, :unary ## # See Minitest::Assertions#assert_operator # # _(n).must_be :<=, 42 # # This can also do predicates: # # _(str).must_be :empty? # # :method: must_be infect_an_assertion :assert_operator, :must_be, :reverse ## # See Minitest::Assertions#assert_output # # _ { ... }.must_output out_or_nil [, err] # # :method: must_output infect_an_assertion :assert_output, :must_output, :block ## # See Minitest::Assertions#assert_pattern_match # # _ { ... }.must_pattern_match [...] # # :method: must_pattern_match infect_an_assertion :assert_pattern, :must_pattern_match, :block ## # See Minitest::Assertions#assert_raises # # _ { ... }.must_raise exception # # :method: must_raise infect_an_assertion :assert_raises, :must_raise, :block ## # See Minitest::Assertions#assert_respond_to # # _(obj).must_respond_to msg # # :method: must_respond_to infect_an_assertion :assert_respond_to, :must_respond_to, :reverse ## # See Minitest::Assertions#assert_same # # _(a).must_be_same_as b # # :method: must_be_same_as infect_an_assertion :assert_same, :must_be_same_as ## # See Minitest::Assertions#assert_silent # # _ { ... }.must_be_silent # # :method: must_be_silent infect_an_assertion :assert_silent, :must_be_silent, :block ## # See Minitest::Assertions#assert_throws # # _ { ... }.must_throw sym # # :method: must_throw infect_an_assertion :assert_throws, :must_throw, :block ## # See Minitest::Assertions#assert_path_exists # # _(some_path).path_must_exist # # :method: path_must_exist infect_an_assertion :assert_path_exists, :path_must_exist, :unary ## # See Minitest::Assertions#refute_path_exists # # _(some_path).path_wont_exist # # :method: path_wont_exist infect_an_assertion :refute_path_exists, :path_wont_exist, :unary ## # See Minitest::Assertions#refute_empty # # _(collection).wont_be_empty # # :method: wont_be_empty infect_an_assertion :refute_empty, :wont_be_empty, :unary ## # See Minitest::Assertions#refute_equal # # _(a).wont_equal b # # :method: wont_equal infect_an_assertion :refute_equal, :wont_equal ## # See Minitest::Assertions#refute_in_delta # # _(n).wont_be_close_to m [, delta] # # :method: wont_be_close_to infect_an_assertion :refute_in_delta, :wont_be_close_to infect_an_assertion :refute_in_delta, :wont_be_within_delta # :nodoc: ## # See Minitest::Assertions#refute_in_epsilon # # _(n).wont_be_within_epsilon m [, epsilon] # # :method: wont_be_within_epsilon infect_an_assertion :refute_in_epsilon, :wont_be_within_epsilon ## # See Minitest::Assertions#refute_includes # # _(collection).wont_include obj # # :method: wont_include infect_an_assertion :refute_includes, :wont_include, :reverse ## # See Minitest::Assertions#refute_instance_of # # _(obj).wont_be_instance_of klass # # :method: wont_be_instance_of infect_an_assertion :refute_instance_of, :wont_be_instance_of ## # See Minitest::Assertions#refute_kind_of # # _(obj).wont_be_kind_of mod # # :method: wont_be_kind_of infect_an_assertion :refute_kind_of, :wont_be_kind_of ## # See Minitest::Assertions#refute_match # # _(a).wont_match b # # :method: wont_match infect_an_assertion :refute_match, :wont_match ## # See Minitest::Assertions#refute_nil # # _(obj).wont_be_nil # # :method: wont_be_nil infect_an_assertion :refute_nil, :wont_be_nil, :unary ## # See Minitest::Assertions#refute_operator # # _(n).wont_be :<=, 42 # # This can also do predicates: # # str.wont_be :empty? # # :method: wont_be infect_an_assertion :refute_operator, :wont_be, :reverse ## # See Minitest::Assertions#refute_pattern_match # # _ { ... }.wont_pattern_match [...] # # :method: wont_pattern_match infect_an_assertion :refute_pattern, :wont_pattern_match, :block ## # See Minitest::Assertions#refute_respond_to # # _(obj).wont_respond_to msg # # :method: wont_respond_to infect_an_assertion :refute_respond_to, :wont_respond_to, :reverse ## # See Minitest::Assertions#refute_same # # _(a).wont_be_same_as b # # :method: wont_be_same_as infect_an_assertion :refute_same, :wont_be_same_as end hell.rb000066400000000000000000000003131446701454400346370ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestrequire "minitest/parallel" class Minitest::Test parallelize_me! end begin require "minitest/proveit" rescue LoadError warn "NOTE: `gem install minitest-proveit` for even more hellish tests" end mock.rb000066400000000000000000000237211446701454400346540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestclass MockExpectationError < StandardError; end # :nodoc: module Minitest # :nodoc: ## # A simple and clean mock object framework. # # All mock objects are an instance of Mock class Mock alias :__respond_to? :respond_to? overridden_methods = %w[ === class inspect instance_eval instance_variables object_id public_send respond_to_missing? send to_s ] instance_methods.each do |m| undef_method m unless overridden_methods.include?(m.to_s) || m =~ /^__/ end overridden_methods.map(&:to_sym).each do |method_id| define_method method_id do |*args, **kwargs, &b| if @expected_calls.key? method_id then if kwargs.empty? then # FIX: drop this after 2.7 dead method_missing(method_id, *args, &b) else method_missing(method_id, *args, **kwargs, &b) end else if kwargs.empty? then # FIX: drop this after 2.7 dead super(*args, &b) else super(*args, **kwargs, &b) end end end end def initialize delegator = nil # :nodoc: @delegator = delegator @expected_calls = Hash.new { |calls, name| calls[name] = [] } @actual_calls = Hash.new { |calls, name| calls[name] = [] } end @@KW_WARNED = false # :nodoc: ## # Expect that method +name+ is called, optionally with +args+ (and # +kwargs+ or a +blk+), and returns +retval+. # # @mock.expect(:meaning_of_life, 42) # @mock.meaning_of_life # => 42 # # @mock.expect(:do_something_with, true, [some_obj, true]) # @mock.do_something_with(some_obj, true) # => true # # @mock.expect(:do_something_else, true) do |a1, a2| # a1 == "buggs" && a2 == :bunny # end # # +args+ is compared to the expected args using case equality (ie, the # '===' operator), allowing for less specific expectations. # # @mock.expect(:uses_any_string, true, [String]) # @mock.uses_any_string("foo") # => true # @mock.verify # => true # # @mock.expect(:uses_one_string, true, ["foo"]) # @mock.uses_one_string("bar") # => raises MockExpectationError # # If a method will be called multiple times, specify a new expect for each one. # They will be used in the order you define them. # # @mock.expect(:ordinal_increment, 'first') # @mock.expect(:ordinal_increment, 'second') # # @mock.ordinal_increment # => 'first' # @mock.ordinal_increment # => 'second' # @mock.ordinal_increment # => raises MockExpectationError "No more expects available for :ordinal_increment" # def expect name, retval, args = [], **kwargs, &blk name = name.to_sym if block_given? raise ArgumentError, "args ignored when block given" unless args.empty? raise ArgumentError, "kwargs ignored when block given" unless kwargs.empty? @expected_calls[name] << { :retval => retval, :block => blk } else raise ArgumentError, "args must be an array" unless Array === args if ENV["MT_KWARGS_HAC\K"] && (Hash === args.last || Hash == args.last) then if kwargs.empty? then kwargs = args.pop else unless @@KW_WARNED then from = caller.first warn "Using MT_KWARGS_HAC\K yet passing kwargs. From #{from}" @@KW_WARNED = true end end end @expected_calls[name] << { :retval => retval, :args => args, :kwargs => kwargs } end self end def __call name, data # :nodoc: case data when Hash then args = data[:args].inspect[1..-2] kwargs = data[:kwargs] if kwargs && !kwargs.empty? then args << ", " unless args.empty? args << kwargs.inspect[1..-2] end "#{name}(#{args}) => #{data[:retval].inspect}" else data.map { |d| __call name, d }.join ", " end end ## # Verify that all methods were called as expected. Raises # +MockExpectationError+ if the mock object was not called as # expected. def verify @expected_calls.each do |name, expected| actual = @actual_calls.fetch(name, nil) raise MockExpectationError, "expected #{__call name, expected[0]}" unless actual raise MockExpectationError, "expected #{__call name, expected[actual.size]}, got [#{__call name, actual}]" if actual.size < expected.size end true end def method_missing sym, *args, **kwargs, &block # :nodoc: unless @expected_calls.key?(sym) then if @delegator && @delegator.respond_to?(sym) if kwargs.empty? then # FIX: drop this after 2.7 dead return @delegator.public_send(sym, *args, &block) else return @delegator.public_send(sym, *args, **kwargs, &block) end else raise NoMethodError, "unmocked method %p, expected one of %p" % [sym, @expected_calls.keys.sort_by(&:to_s)] end end index = @actual_calls[sym].length expected_call = @expected_calls[sym][index] unless expected_call then raise MockExpectationError, "No more expects available for %p: %p %p" % [sym, args, kwargs] end expected_args, expected_kwargs, retval, val_block = expected_call.values_at(:args, :kwargs, :retval, :block) expected_kwargs = kwargs.map { |ak, av| [ak, Object] }.to_h if Hash == expected_kwargs if val_block then # keep "verify" happy @actual_calls[sym] << expected_call raise MockExpectationError, "mocked method %p failed block w/ %p %p" % [sym, args, kwargs] unless val_block.call(*args, **kwargs, &block) return retval end if expected_args.size != args.size then raise ArgumentError, "mocked method %p expects %d arguments, got %p" % [sym, expected_args.size, args] end if expected_kwargs.size != kwargs.size then raise ArgumentError, "mocked method %p expects %d keyword arguments, got %p" % [sym, expected_kwargs.size, kwargs] end zipped_args = expected_args.zip(args) fully_matched = zipped_args.all? { |mod, a| mod === a or mod == a } unless fully_matched then fmt = "mocked method %p called with unexpected arguments %p" raise MockExpectationError, fmt % [sym, args] end unless expected_kwargs.keys.sort == kwargs.keys.sort then fmt = "mocked method %p called with unexpected keywords %p vs %p" raise MockExpectationError, fmt % [sym, expected_kwargs.keys, kwargs.keys] end zipped_kwargs = expected_kwargs.map { |ek, ev| av = kwargs[ek] [ek, [ev, av]] }.to_h fully_matched = zipped_kwargs.all? { |ek, (ev, av)| ev === av or ev == av } unless fully_matched then fmt = "mocked method %p called with unexpected keyword arguments %p vs %p" raise MockExpectationError, fmt % [sym, expected_kwargs, kwargs] end @actual_calls[sym] << { :retval => retval, :args => zipped_args.map { |e, a| e === a ? e : a }, :kwargs => zipped_kwargs.map { |k, (e, a)| [k, e === a ? e : a] }.to_h, } retval end def respond_to? sym, include_private = false # :nodoc: return true if @expected_calls.key? sym.to_sym return true if @delegator && @delegator.respond_to?(sym, include_private) __respond_to?(sym, include_private) end end end module Minitest::Assertions ## # Assert that the mock verifies correctly. def assert_mock mock assert mock.verify end end ## # Object extensions for Minitest::Mock. class Object ## # Add a temporary stubbed method replacing +name+ for the duration # of the +block+. If +val_or_callable+ responds to #call, then it # returns the result of calling it, otherwise returns the value # as-is. If stubbed method yields a block, +block_args+ will be # passed along. Cleans up the stub at the end of the +block+. The # method +name+ must exist before stubbing. # # def test_stale_eh # obj_under_test = Something.new # refute obj_under_test.stale? # # Time.stub :now, Time.at(0) do # assert obj_under_test.stale? # end # end #-- # NOTE: keyword args in callables are NOT checked for correctness # against the existing method. Too many edge cases to be worth it. def stub name, val_or_callable, *block_args, **block_kwargs, &block new_name = "__minitest_stub__#{name}" metaclass = class << self; self; end if respond_to? name and not methods.map(&:to_s).include? name.to_s then metaclass.send :define_method, name do |*args, **kwargs| super(*args, **kwargs) end end metaclass.send :alias_method, new_name, name if ENV["MT_KWARGS_HAC\K"] then metaclass.send :define_method, name do |*args, &blk| if val_or_callable.respond_to? :call then val_or_callable.call(*args, &blk) else blk.call(*block_args, **block_kwargs) if blk val_or_callable end end else metaclass.send :define_method, name do |*args, **kwargs, &blk| if val_or_callable.respond_to? :call then if kwargs.empty? then # FIX: drop this after 2.7 dead val_or_callable.call(*args, &blk) else val_or_callable.call(*args, **kwargs, &blk) end else if blk then if block_kwargs.empty? then # FIX: drop this after 2.7 dead blk.call(*block_args) else blk.call(*block_args, **block_kwargs) end end val_or_callable end end end block[self] ensure metaclass.send :undef_method, name metaclass.send :alias_method, name, new_name metaclass.send :undef_method, new_name end end parallel.rb000066400000000000000000000031071446701454400355130ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestmodule Minitest module Parallel #:nodoc: ## # The engine used to run multiple tests in parallel. class Executor ## # The size of the pool of workers. attr_reader :size ## # Create a parallel test executor of with +size+ workers. def initialize size @size = size @queue = Queue.new @pool = nil end ## # Start the executor def start @pool = size.times.map { Thread.new(@queue) do |queue| Thread.current.abort_on_exception = true while (job = queue.pop) klass, method, reporter = job reporter.synchronize { reporter.prerecord klass, method } result = Minitest.run_one_method klass, method reporter.synchronize { reporter.record result } end end } end ## # Add a job to the queue def << work; @queue << work; end ## # Shuts down the pool of workers by signalling them to quit and # waiting for them all to finish what they're currently working # on. def shutdown size.times { @queue << nil } @pool.each(&:join) end end module Test # :nodoc: def _synchronize; Minitest::Test.io_lock.synchronize { yield }; end # :nodoc: module ClassMethods # :nodoc: def run_one_method klass, method_name, reporter Minitest.parallel_executor << [klass, method_name, reporter] end def test_order :parallel end end end end end pride.rb000066400000000000000000000001031446701454400350130ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestrequire "minitest" Minitest.load_plugins Minitest::PrideIO.pride! pride_plugin.rb000066400000000000000000000061161446701454400364030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestrequire "minitest" module Minitest def self.plugin_pride_options opts, _options # :nodoc: opts.on "-p", "--pride", "Pride. Show your testing pride!" do PrideIO.pride! end end def self.plugin_pride_init options # :nodoc: if PrideIO.pride? then klass = ENV["TERM"] =~ /^xterm|-256color$/ ? PrideLOL : PrideIO io = klass.new options[:io] self.reporter.reporters.grep(Minitest::Reporter).each do |rep| rep.io = io if rep.io.tty? end end end ## # Show your testing pride! class PrideIO ## # Activate the pride plugin. Called from both -p option and minitest/pride def self.pride! @pride = true end ## # Are we showing our testing pride? def self.pride? @pride ||= false end # Start an escape sequence ESC = "\e[" # End the escape sequence NND = "#{ESC}0m" # The IO we're going to pipe through. attr_reader :io def initialize io # :nodoc: @io = io # stolen from /System/Library/Perl/5.10.0/Term/ANSIColor.pm # also reference https://en.wikipedia.org/wiki/ANSI_escape_code @colors ||= (31..36).to_a @size = @colors.size @index = 0 end ## # Wrap print to colorize the output. def print o case o when "." then io.print pride o when "E", "F" then io.print "#{ESC}41m#{ESC}37m#{o}#{NND}" when "S" then io.print pride o else io.print o end end def puts *o # :nodoc: o.map! { |s| s.to_s.sub(/Finished/) { @index = 0 "Fabulous run".split(//).map { |c| pride(c) }.join } } io.puts(*o) end ## # Color a string. def pride string string = "*" if string == "." c = @colors[@index % @size] @index += 1 "#{ESC}#{c}m#{string}#{NND}" end def method_missing msg, *args # :nodoc: io.send(msg, *args) end end ## # If you thought the PrideIO was colorful... # # (Inspired by lolcat, but with clean math) class PrideLOL < PrideIO PI_3 = Math::PI / 3 # :nodoc: def initialize io # :nodoc: # walk red, green, and blue around a circle separated by equal thirds. # # To visualize, type this into wolfram-alpha: # # plot (3*sin(x)+3), (3*sin(x+2*pi/3)+3), (3*sin(x+4*pi/3)+3) # 6 has wide pretty gradients. 3 == lolcat, about half the width @colors = (0...(6 * 7)).map { |n| n *= 1.0 / 6 r = (3 * Math.sin(n ) + 3).to_i g = (3 * Math.sin(n + 2 * PI_3) + 3).to_i b = (3 * Math.sin(n + 4 * PI_3) + 3).to_i # Then we take rgb and encode them in a single number using base 6. # For some mysterious reason, we add 16... to clear the bottom 4 bits? # Yes... they're ugly. 36 * r + 6 * g + b + 16 } super end ## # Make the string even more colorful. Damnit. def pride string c = @colors[@index % @size] @index += 1 "#{ESC}38;5;#{c}m#{string}#{NND}" end end end spec.rb000066400000000000000000000224451446701454400346570ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestrequire "minitest/test" class Module # :nodoc: def infect_an_assertion meth, new_name, dont_flip = false # :nodoc: block = dont_flip == :block dont_flip = false if block target_obj = block ? '_{obj.method}' : '_(obj)' # https://eregon.me/blog/2021/02/13/correct-delegation-in-ruby-2-27-3.html # Drop this when we can drop ruby 2.6 (aka after rails 6.1 EOL, ~2024-06) kw_extra = "ruby2_keywords %p" % [new_name] if respond_to?(:ruby2_keywords, true) # warn "%-22p -> %p %p" % [meth, new_name, dont_flip] self.class_eval <<-EOM, __FILE__, __LINE__ + 1 def #{new_name} *args where = Minitest.filter_backtrace(caller).first where = where.split(/:in /, 2).first # clean up noise Kernel.warn "DEPRECATED: global use of #{new_name} from #\{where}. Use #{target_obj}.#{new_name} instead. This will fail in Minitest 6." Minitest::Expectation.new(self, Minitest::Spec.current).#{new_name}(*args) end #{kw_extra} EOM Minitest::Expectation.class_eval <<-EOM, __FILE__, __LINE__ + 1 def #{new_name} *args raise "Calling ##{new_name} outside of test." unless ctx case when #{!!dont_flip} then ctx.#{meth}(target, *args) when #{block} && Proc === target then ctx.#{meth}(*args, &target) else ctx.#{meth}(args.first, target, *args[1..-1]) end end #{kw_extra} EOM end end Minitest::Expectation = Struct.new :target, :ctx # :nodoc: ## # Kernel extensions for minitest module Kernel ## # Describe a series of expectations for a given target +desc+. # # Defines a test class subclassing from either Minitest::Spec or # from the surrounding describe's class. The surrounding class may # subclass Minitest::Spec manually in order to easily share code: # # class MySpec < Minitest::Spec # # ... shared code ... # end # # class TestStuff < MySpec # it "does stuff" do # # shared code available here # end # describe "inner stuff" do # it "still does stuff" do # # ...and here # end # end # end # # For more information on getting started with writing specs, see: # # http://www.rubyinside.com/a-minitestspec-tutorial-elegant-spec-style-testing-that-comes-with-ruby-5354.html # # For some suggestions on how to improve your specs, try: # # https://betterspecs.org # # but do note that several items there are debatable or specific to # rspec. # # For more information about expectations, see Minitest::Expectations. def describe desc, *additional_desc, &block # :doc: stack = Minitest::Spec.describe_stack name = [stack.last, desc, *additional_desc].compact.join("::") sclas = stack.last || if Class === self && kind_of?(Minitest::Spec::DSL) then self else Minitest::Spec.spec_type desc, *additional_desc end cls = sclas.create name, desc stack.push cls cls.class_eval(&block) stack.pop cls end private :describe end ## # Minitest::Spec -- The faster, better, less-magical spec framework! # # For a list of expectations, see Minitest::Expectations. class Minitest::Spec < Minitest::Test def self.current # :nodoc: Thread.current[:current_spec] end def initialize name # :nodoc: super Thread.current[:current_spec] = self end ## # Oh look! A Minitest::Spec::DSL module! Eat your heart out DHH. module DSL ## # Contains pairs of matchers and Spec classes to be used to # calculate the superclass of a top-level describe. This allows for # automatically customizable spec types. # # See: register_spec_type and spec_type TYPES = [[//, Minitest::Spec]] ## # Register a new type of spec that matches the spec's description. # This method can take either a Regexp and a spec class or a spec # class and a block that takes the description and returns true if # it matches. # # Eg: # # register_spec_type(/Controller$/, Minitest::Spec::Rails) # # or: # # register_spec_type(Minitest::Spec::RailsModel) do |desc| # desc.superclass == ActiveRecord::Base # end def register_spec_type *args, &block if block then matcher, klass = block, args.first else matcher, klass = *args end TYPES.unshift [matcher, klass] end ## # Figure out the spec class to use based on a spec's description. Eg: # # spec_type("BlahController") # => Minitest::Spec::Rails def spec_type desc, *additional TYPES.find { |matcher, _klass| if matcher.respond_to? :call then matcher.call desc, *additional else matcher === desc.to_s end }.last end def describe_stack # :nodoc: Thread.current[:describe_stack] ||= [] end def children # :nodoc: @children ||= [] end def nuke_test_methods! # :nodoc: self.public_instance_methods.grep(/^test_/).each do |name| self.send :undef_method, name end end ## # Define a 'before' action. Inherits the way normal methods should. # # NOTE: +type+ is ignored and is only there to make porting easier. # # Equivalent to Minitest::Test#setup. def before _type = nil, &block define_method :setup do super() self.instance_eval(&block) end end ## # Define an 'after' action. Inherits the way normal methods should. # # NOTE: +type+ is ignored and is only there to make porting easier. # # Equivalent to Minitest::Test#teardown. def after _type = nil, &block define_method :teardown do self.instance_eval(&block) super() end end ## # Define an expectation with name +desc+. Name gets morphed to a # proper test method name. For some freakish reason, people who # write specs don't like class inheritance, so this goes way out of # its way to make sure that expectations aren't inherited. # # This is also aliased to #specify and doesn't require a +desc+ arg. # # Hint: If you _do_ want inheritance, use minitest/test. You can mix # and match between assertions and expectations as much as you want. def it desc = "anonymous", &block block ||= proc { skip "(no tests defined)" } @specs ||= 0 @specs += 1 name = "test_%04d_%s" % [ @specs, desc ] undef_klasses = self.children.reject { |c| c.public_method_defined? name } define_method name, &block undef_klasses.each do |undef_klass| undef_klass.send :undef_method, name end name end ## # Essentially, define an accessor for +name+ with +block+. # # Why use let instead of def? I honestly don't know. def let name, &block name = name.to_s pre, post = "let '#{name}' cannot ", ". Please use another name." methods = Minitest::Spec.instance_methods.map(&:to_s) - %w[subject] raise ArgumentError, "#{pre}begin with 'test'#{post}" if name =~ /\Atest/ raise ArgumentError, "#{pre}override a method in Minitest::Spec#{post}" if methods.include? name define_method name do @_memoized ||= {} @_memoized.fetch(name) { |k| @_memoized[k] = instance_eval(&block) } end end ## # Another lazy man's accessor generator. Made even more lazy by # setting the name for you to +subject+. def subject &block let :subject, &block end def create name, desc # :nodoc: cls = Class.new(self) do @name = name @desc = desc nuke_test_methods! end children << cls cls end def name # :nodoc: defined?(@name) ? @name : super end def to_s # :nodoc: name # Can't alias due to 1.8.7, not sure why end attr_reader :desc # :nodoc: alias :specify :it ## # Rdoc... why are you so dumb? module InstanceMethods ## # Takes a value or a block and returns a value monad that has # all of Expectations methods available to it. # # _(1 + 1).must_equal 2 # # And for blocks: # # _ { 1 + "1" }.must_raise TypeError # # This method of expectation-based testing is preferable to # straight-expectation methods (on Object) because it stores its # test context, bypassing our hacky use of thread-local variables. # # NOTE: At some point, the methods on Object will be deprecated # and then removed. # # It is also aliased to #value and #expect for your aesthetic # pleasure: # # _(1 + 1).must_equal 2 # value(1 + 1).must_equal 2 # expect(1 + 1).must_equal 2 def _ value = nil, &block Minitest::Expectation.new block || value, self end alias value _ alias expect _ def before_setup # :nodoc: super Thread.current[:current_spec] = self end end def self.extended obj # :nodoc: obj.send :include, InstanceMethods end end extend DSL TYPES = DSL::TYPES # :nodoc: end require "minitest/expectations" class Object # :nodoc: include Minitest::Expectations unless ENV["MT_NO_EXPECTATIONS"] end test.rb000066400000000000000000000144121446701454400346770ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestrequire "minitest" unless defined? Minitest::Runnable module Minitest ## # Subclass Test to create your own tests. Typically you'll want a # Test subclass per implementation class. # # See Minitest::Assertions class Test < Runnable require "minitest/assertions" include Minitest::Assertions include Minitest::Reportable def class_name # :nodoc: self.class.name # for Minitest::Reportable end PASSTHROUGH_EXCEPTIONS = [NoMemoryError, SignalException, SystemExit] # :nodoc: SETUP_METHODS = %w[ before_setup setup after_setup ] # :nodoc: TEARDOWN_METHODS = %w[ before_teardown teardown after_teardown ] # :nodoc: # :stopdoc: class << self; attr_accessor :io_lock; end self.io_lock = Mutex.new # :startdoc: ## # Call this at the top of your tests when you absolutely # positively need to have ordered tests. In doing so, you're # admitting that you suck and your tests are weak. def self.i_suck_and_my_tests_are_order_dependent! class << self undef_method :test_order if method_defined? :test_order define_method :test_order do :alpha end end end ## # Make diffs for this Test use #pretty_inspect so that diff # in assert_equal can have more details. NOTE: this is much slower # than the regular inspect but much more usable for complex # objects. def self.make_my_diffs_pretty! require "pp" define_method :mu_pp, &:pretty_inspect end ## # Call this at the top of your tests when you want to run your # tests in parallel. In doing so, you're admitting that you rule # and your tests are awesome. def self.parallelize_me! include Minitest::Parallel::Test extend Minitest::Parallel::Test::ClassMethods end ## # Returns all instance methods starting with "test_". Based on # #test_order, the methods are either sorted, randomized # (default), or run in parallel. def self.runnable_methods methods = methods_matching(/^test_/) case self.test_order when :random, :parallel then srand Minitest.seed methods.sort.shuffle when :alpha, :sorted then methods.sort else raise "Unknown test_order: #{self.test_order.inspect}" end end ## # Runs a single test with setup/teardown hooks. def run with_info_handler do time_it do capture_exceptions do SETUP_METHODS.each do |hook| self.send hook end self.send self.name end TEARDOWN_METHODS.each do |hook| capture_exceptions do self.send hook end end end end Result.from self # per contract end ## # Provides before/after hooks for setup and teardown. These are # meant for library writers, NOT for regular test authors. See # #before_setup for an example. module LifecycleHooks ## # Runs before every test, before setup. This hook is meant for # libraries to extend minitest. It is not meant to be used by # test developers. # # As a simplistic example: # # module MyMinitestPlugin # def before_setup # super # # ... stuff to do before setup is run # end # # def after_setup # # ... stuff to do after setup is run # super # end # # def before_teardown # super # # ... stuff to do before teardown is run # end # # def after_teardown # # ... stuff to do after teardown is run # super # end # end # # class MiniTest::Test # include MyMinitestPlugin # end def before_setup; end ## # Runs before every test. Use this to set up before each test # run. def setup; end ## # Runs before every test, after setup. This hook is meant for # libraries to extend minitest. It is not meant to be used by # test developers. # # See #before_setup for an example. def after_setup; end ## # Runs after every test, before teardown. This hook is meant for # libraries to extend minitest. It is not meant to be used by # test developers. # # See #before_setup for an example. def before_teardown; end ## # Runs after every test. Use this to clean up after each test # run. def teardown; end ## # Runs after every test, after teardown. This hook is meant for # libraries to extend minitest. It is not meant to be used by # test developers. # # See #before_setup for an example. def after_teardown; end end # LifecycleHooks def capture_exceptions # :nodoc: yield rescue *PASSTHROUGH_EXCEPTIONS raise rescue Assertion => e self.failures << e rescue Exception => e self.failures << UnexpectedError.new(sanitize_exception e) end def sanitize_exception e # :nodoc: Marshal.dump e e # good: use as-is rescue neuter_exception e end def neuter_exception e # :nodoc: bt = e.backtrace msg = e.message.dup new_exception e.class, msg, bt # e.class can be a problem... rescue msg.prepend "Neutered Exception #{e.class}: " new_exception RuntimeError, msg, bt, true # but if this raises, we die end def new_exception klass, msg, bt, kill = false # :nodoc: ne = klass.new msg ne.set_backtrace bt if kill then ne.instance_variables.each do |v| ne.remove_instance_variable v end end Marshal.dump ne # can raise TypeError ne end def with_info_handler &block # :nodoc: t0 = Minitest.clock_time handler = lambda do warn "\nCurrent: %s#%s %.2fs" % [self.class, self.name, Minitest.clock_time - t0] end self.class.on_signal ::Minitest.info_signal, handler, &block end include LifecycleHooks include Guard extend Guard end # Test end require "minitest/unit" unless defined?(MiniTest) # compatibility layer only test_task.rb000066400000000000000000000175311446701454400357260ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestrequire "shellwords" require "rbconfig" require "rake/tasklib" module Minitest # :nodoc: ## # Minitest::TestTask is a rake helper that generates several rake # tasks under the main test task's name-space. # # task :: the main test task # task :cmd :: prints the command to use # task :deps :: runs each test file by itself to find dependency errors # task :slow :: runs the tests and reports the slowest 25 tests. # # Examples: # # Minitest::TestTask.create # # The most basic and default setup. # # Minitest::TestTask.create :my_tests # # The most basic/default setup, but with a custom name # # Minitest::TestTask.create :unit do |t| # t.test_globs = ["test/unit/**/*_test.rb"] # t.warning = false # end # # Customize the name and only run unit tests. class TestTask < Rake::TaskLib WINDOWS = RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ # :nodoc: ## # Create several test-oriented tasks under +name+. Takes an # optional block to customize variables. def self.create name = :test, &block task = new name task.instance_eval(&block) if block task.process_env task.define task end ## # Extra arguments to pass to the tests. Defaults empty but gets # populated by a number of enviroment variables: # # N (-n flag) :: a string or regexp of tests to run. # X (-e flag) :: a string or regexp of tests to exclude. # A (arg) :: quick way to inject an arbitrary argument (eg A=--help). # # See #process_env attr_accessor :extra_args ## # The code to load the framework. Defaults to requiring # minitest/autorun... # # Why do I have this as an option? attr_accessor :framework ## # Extra library directories to include. Defaults to %w[lib test # .]. Also uses $MT_LIB_EXTRAS allowing you to dynamically # override/inject directories for custom runs. attr_accessor :libs ## # The name of the task and base name for the other tasks generated. attr_accessor :name ## # File globs to find test files. Defaults to something sensible to # find test files under the test directory. attr_accessor :test_globs ## # Turn on ruby warnings (-w flag). Defaults to true. attr_accessor :warning ## # Optional: Additional ruby to run before the test framework is loaded. attr_accessor :test_prelude ## # Print out commands as they run. Defaults to Rake's +trace+ (-t # flag) option. attr_accessor :verbose ## # Use TestTask.create instead. def initialize name = :test # :nodoc: self.extra_args = [] self.framework = %(require "minitest/autorun") self.libs = %w[lib test .] self.name = name self.test_globs = ["test/**/test_*.rb", "test/**/*_test.rb"] self.test_prelude = nil self.verbose = Rake.application.options.trace self.warning = true end ## # Extract variables from the environment and convert them to # command line arguments. See #extra_args. # # Environment Variables: # # MT_LIB_EXTRAS :: Extra libs to dynamically override/inject for custom runs. # N :: Tests to run (string or /regexp/). # X :: Tests to exclude (string or /regexp/). # A :: Any extra arguments. Honors shell quoting. # # Deprecated: # # TESTOPTS :: For argument passing, use +A+. # N :: For parallel testing, use +MT_CPU+. # FILTER :: Same as +TESTOPTS+. def process_env warn "TESTOPTS is deprecated in Minitest::TestTask. Use A instead" if ENV["TESTOPTS"] warn "FILTER is deprecated in Minitest::TestTask. Use A instead" if ENV["FILTER"] warn "N is deprecated in Minitest::TestTask. Use MT_CPU instead" if ENV["N"] && ENV["N"].to_i > 0 lib_extras = (ENV["MT_LIB_EXTRAS"] || "").split File::PATH_SEPARATOR self.libs[0,0] = lib_extras extra_args << "-n" << ENV["N"] if ENV["N"] extra_args << "-e" << ENV["X"] if ENV["X"] extra_args.concat Shellwords.split(ENV["TESTOPTS"]) if ENV["TESTOPTS"] extra_args.concat Shellwords.split(ENV["FILTER"]) if ENV["FILTER"] extra_args.concat Shellwords.split(ENV["A"]) if ENV["A"] ENV.delete "N" if ENV["N"] # TODO? RUBY_DEBUG = ENV["RUBY_DEBUG"] # TODO? ENV["RUBY_FLAGS"] extra_args.compact! end def define # :nodoc: default_tasks = [] desc "Run the test suite. Use N, X, A, and TESTOPTS to add flags/args." task name do ruby make_test_cmd, verbose:verbose end desc "Print out the test command. Good for profiling and other tools." task "#{name}:cmd" do puts "ruby #{make_test_cmd}" end desc "Show which test files fail when run in isolation." task "#{name}:isolated" do tests = Dir[*self.test_globs].uniq # 3 seems to be the magic number... (tho not by that much) bad, good, n = {}, [], (ENV.delete("K") || 3).to_i file = ENV.delete("F") times = {} tt0 = Time.now n.threads_do tests.sort do |path| t0 = Time.now output = `#{Gem.ruby} #{make_test_cmd path} 2>&1` t1 = Time.now - t0 times[path] = t1 if $?.success? $stderr.print "." good << path else $stderr.print "x" bad[path] = output end end puts "done" puts "Ran in %.2f seconds" % [ Time.now - tt0 ] if file then require "json" File.open file, "w" do |io| io.puts JSON.pretty_generate times end end unless good.empty? puts puts "# Good tests:" puts good.sort.each do |path| puts "%.2fs: %s" % [times[path], path] end end unless bad.empty? puts puts "# Bad tests:" puts bad.keys.sort.each do |path| puts "%.2fs: %s" % [times[path], path] end puts puts "# Bad Test Output:" puts bad.sort.each do |path, output| puts puts "# #{path}:" puts output end exit 1 end end task "#{name}:deps" => "#{name}:isolated" # now just an alias desc "Show bottom 25 tests wrt time." task "#{name}:slow" do sh ["rake #{name} A=-v", "egrep '#test_.* s = .'", "sort -n -k2 -t=", "tail -25"].join " | " end default_tasks << name desc "Run the default task(s)." task :default => default_tasks end ## # Generate the test command-line. def make_test_cmd globs = test_globs tests = [] tests.concat Dir[*globs].sort.shuffle # TODO: SEED -> srand first? tests.map! { |f| %(require "#{f}") } runner = [] runner << test_prelude if test_prelude runner << framework runner.concat tests runner = runner.join "; " args = [] args << "-I#{libs.join(File::PATH_SEPARATOR)}" unless libs.empty? args << "-w" if warning args << '-e' args << "'#{runner}'" args << '--' args << extra_args.map(&:shellescape) args.join " " end end end class Work < Queue # :nodoc: def initialize jobs = [] # :nodoc: super() jobs.each do |job| self << job end close end end class Integer # :nodoc: def threads_do(jobs) # :nodoc: require "thread" q = Work.new jobs self.times.map { Thread.new do while job = q.pop # go until quit value yield job end end }.each(&:join) end end unit.rb000066400000000000000000000023721446701454400347010ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/lib/minitestunless defined?(Minitest) then # all of this crap is just to avoid circular requires and is only # needed if a user requires "minitest/unit" directly instead of # "minitest/autorun", so we also warn from = caller.reject { |s| s =~ /rubygems/ }.join("\n ") warn "Warning: you should require 'minitest/autorun' instead." warn %(Warning: or add 'gem "minitest"' before 'require "minitest/autorun"') warn "From:\n #{from}" module Minitest # :nodoc: end MiniTest = Minitest # :nodoc: # prevents minitest.rb from requiring back to us require "minitest" end MiniTest = Minitest unless defined?(MiniTest) module Minitest class Unit # :nodoc: VERSION = Minitest::VERSION class TestCase < Minitest::Test # :nodoc: def self.inherited klass # :nodoc: from = caller.first warn "MiniTest::Unit::TestCase is now Minitest::Test. From #{from}" super end end def self.autorun # :nodoc: from = caller.first warn "MiniTest::Unit.autorun is now Minitest.autorun. From #{from}" Minitest.autorun end def self.after_tests &b # :nodoc: from = caller.first warn "MiniTest::Unit.after_tests is now Minitest.after_run. From #{from}" Minitest.after_run(&b) end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/000077500000000000000000000000001446701454400320255ustar00rootroot00000000000000minitest/000077500000000000000000000000001446701454400336025ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/testmetametameta.rb000066400000000000000000000055331446701454400366010ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitestrequire "tempfile" require "stringio" require "minitest/autorun" class Minitest::Test def clean s s.gsub(/^ {6}/, "") end def with_empty_backtrace_filter original = Minitest.backtrace_filter obj = Minitest::BacktraceFilter.new def obj.filter _bt [] end Minitest::Test.io_lock.synchronize do # try not to trounce in parallel begin Minitest.backtrace_filter = obj yield ensure Minitest.backtrace_filter = original end end end end class FakeNamedTest < Minitest::Test @@count = 0 def self.name @fake_name ||= begin @@count += 1 "FakeNamedTest%02d" % @@count end end end module MyModule; end class AnError < StandardError; include MyModule; end class MetaMetaMetaTestCase < Minitest::Test attr_accessor :reporter, :output, :tu def with_stderr err old = $stderr $stderr = err yield ensure $stderr = old end def run_tu_with_fresh_reporter flags = %w[--seed 42] options = Minitest.process_args flags @output = StringIO.new("".encode('UTF-8')) self.reporter = Minitest::CompositeReporter.new reporter << Minitest::SummaryReporter.new(@output, options) reporter << Minitest::ProgressReporter.new(@output, options) with_stderr @output do reporter.start yield(reporter) if block_given? @tus ||= [@tu] @tus.each do |tu| Minitest::Runnable.runnables.delete tu tu.run reporter, options end reporter.report end end def first_reporter reporter.reporters.first end def assert_report expected, flags = %w[--seed 42], &block header = clean <<-EOM Run options: #{flags.map { |s| s =~ /\|/ ? s.inspect : s }.join " "} # Running: EOM run_tu_with_fresh_reporter flags, &block output = normalize_output @output.string.dup assert_equal header + expected, output end def normalize_output output output.sub!(/Finished in .*/, "Finished in 0.00") output.sub!(/Loaded suite .*/, "Loaded suite blah") output.gsub!(/FakeNamedTest\d+/, "FakeNamedTestXX") output.gsub!(/ = \d+.\d\d s = /, " = 0.00 s = ") output.gsub!(/0x[A-Fa-f0-9]+/, "0xXXX") output.gsub!(/ +$/, "") if windows? then output.gsub!(/\[(?:[A-Za-z]:)?[^\]:]+:\d+\]/, "[FILE:LINE]") output.gsub!(/^(\s+)(?:[A-Za-z]:)?[^:]+:\d+:in/, '\1FILE:LINE:in') else output.gsub!(/\[[^\]:]+:\d+\]/, "[FILE:LINE]") output.gsub!(/^(\s+)[^:]+:\d+:in/, '\1FILE:LINE:in') end output.gsub!(/( at )[^:]+:\d+/, '\1[FILE:LINE]') output end def restore_env old_value = ENV["MT_NO_SKIP_MSG"] ENV.delete "MT_NO_SKIP_MSG" yield ensure ENV["MT_NO_SKIP_MSG"] = old_value end def setup super Minitest.seed = 42 Minitest::Test.reset @tu = nil end end test_minitest_assertions.rb000066400000000000000000001155321446701454400413030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitest# encoding: UTF-8 require "minitest/autorun" if defined? Encoding then e = Encoding.default_external if e != Encoding::UTF_8 then warn "" warn "" warn "NOTE: External encoding #{e} is not UTF-8. Tests WILL fail." warn " Run tests with `RUBYOPT=-Eutf-8 rake` to avoid errors." warn "" warn "" end end SomeError = Class.new Exception unless defined? MyModule then module MyModule; end class AnError < StandardError; include MyModule; end end class TestMinitestAssertions < Minitest::Test # do not call parallelize_me! - teardown accesses @tc._assertions # which is not threadsafe. Nearly every method in here is an # assertion test so it isn't worth splitting it out further. RUBY18 = !defined? Encoding # not included in JRuby RE_LEVELS = /\(\d+ levels\) / class DummyTest include Minitest::Assertions # include Minitest::Reportable # TODO: why do I really need this? attr_accessor :assertions, :failure def initialize self.assertions = 0 self.failure = nil end end def setup super Minitest::Test.reset @tc = DummyTest.new @zomg = "zomg ponies!" # TODO: const @assertion_count = 1 end def teardown assert_equal(@assertion_count, @tc.assertions, "expected #{@assertion_count} assertions to be fired during the test, not #{@tc.assertions}") end def assert_deprecated name dep = /DEPRECATED: #{name}. From #{__FILE__}:\d+(?::.*)?/ dep = "" if $-w.nil? assert_output nil, dep do yield end end def assert_triggered expected, klass = Minitest::Assertion e = assert_raises klass do yield end msg = e.message.sub(/(---Backtrace---).*/m, '\1') msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)") msg.gsub!(/(\d\.\d{6})\d+/, '\1xxx') # normalize: ruby version, impl, platform assert_msg = Regexp === expected ? :assert_match : :assert_equal self.send assert_msg, expected, msg end def assert_unexpected expected expected = Regexp.new expected if String === expected assert_triggered expected, Minitest::UnexpectedError do yield end end def clean s s.gsub(/^ {6,10}/, "") end def non_verbose orig_verbose = $VERBOSE $VERBOSE = false yield ensure $VERBOSE = orig_verbose end def test_assert @assertion_count = 2 @tc.assert_equal true, @tc.assert(true), "returns true on success" end def test_assert__triggered assert_triggered "Expected false to be truthy." do @tc.assert false end end def test_assert__triggered_message assert_triggered @zomg do @tc.assert false, @zomg end end def test_assert__triggered_lambda assert_triggered "whoops" do @tc.assert false, lambda { "whoops" } end end def test_assert_empty @assertion_count = 2 @tc.assert_empty [] end def test_assert_empty_triggered @assertion_count = 2 assert_triggered "Expected [1] to be empty." do @tc.assert_empty [1] end end def test_assert_equal @tc.assert_equal 1, 1 end def test_assert_equal_different_collection_array_hex_invisible object1 = Object.new object2 = Object.new msg = "No visible difference in the Array#inspect output. You should look at the implementation of #== on Array or its members. [#]".gsub(/^ +/, "") assert_triggered msg do @tc.assert_equal [object1], [object2] end end def test_assert_equal_different_collection_hash_hex_invisible h1, h2 = {}, {} h1[1] = Object.new h2[1] = Object.new msg = "No visible difference in the Hash#inspect output. You should look at the implementation of #== on Hash or its members. {1=>#}".gsub(/^ +/, "") assert_triggered msg do @tc.assert_equal h1, h2 end end def test_assert_equal_different_diff_deactivated without_diff do assert_triggered util_msg("haha" * 10, "blah" * 10) do o1 = "haha" * 10 o2 = "blah" * 10 @tc.assert_equal o1, o2 end end end def test_assert_equal_different_message assert_triggered "whoops.\nExpected: 1\n Actual: 2" do @tc.assert_equal 1, 2, message { "whoops" } end end def test_assert_equal_different_lambda assert_triggered "whoops.\nExpected: 1\n Actual: 2" do @tc.assert_equal 1, 2, lambda { "whoops" } end end def test_assert_equal_different_hex c = Class.new do def initialize s; @name = s; end end o1 = c.new "a" o2 = c.new "b" msg = clean <<-EOS --- expected +++ actual @@ -1 +1 @@ -#<#:0xXXXXXX @name=\"a\"> +#<#:0xXXXXXX @name=\"b\"> EOS assert_triggered msg do @tc.assert_equal o1, o2 end end def test_assert_equal_different_hex_invisible o1 = Object.new o2 = Object.new msg = "No visible difference in the Object#inspect output. You should look at the implementation of #== on Object or its members. #".gsub(/^ +/, "") assert_triggered msg do @tc.assert_equal o1, o2 end end def test_assert_equal_different_long msg = "--- expected +++ actual @@ -1 +1 @@ -\"hahahahahahahahahahahahahahahahahahahaha\" +\"blahblahblahblahblahblahblahblahblahblah\" ".gsub(/^ +/, "") assert_triggered msg do o1 = "haha" * 10 o2 = "blah" * 10 @tc.assert_equal o1, o2 end end def test_assert_equal_different_long_invisible msg = "No visible difference in the String#inspect output. You should look at the implementation of #== on String or its members. \"blahblahblahblahblahblahblahblahblahblah\"".gsub(/^ +/, "") assert_triggered msg do o1 = "blah" * 10 o2 = "blah" * 10 def o1.== _ false end @tc.assert_equal o1, o2 end end def test_assert_equal_different_long_msg msg = "message. --- expected +++ actual @@ -1 +1 @@ -\"hahahahahahahahahahahahahahahahahahahaha\" +\"blahblahblahblahblahblahblahblahblahblah\" ".gsub(/^ +/, "") assert_triggered msg do o1 = "haha" * 10 o2 = "blah" * 10 @tc.assert_equal o1, o2, "message" end end def test_assert_equal_different_short assert_triggered util_msg(1, 2) do @tc.assert_equal 1, 2 end end def test_assert_equal_different_short_msg assert_triggered util_msg(1, 2, "message") do @tc.assert_equal 1, 2, "message" end end def test_assert_equal_different_short_multiline msg = "--- expected\n+++ actual\n@@ -1,2 +1,2 @@\n \"a\n-b\"\n+c\"\n" assert_triggered msg do @tc.assert_equal "a\nb", "a\nc" end end def test_assert_equal_does_not_allow_lhs_nil if Minitest::VERSION =~ /^6/ then warn "Time to strip the MT5 test" @assertion_count += 1 assert_triggered(/Use assert_nil if expecting nil/) do @tc.assert_equal nil, nil end else err_re = /Use assert_nil if expecting nil from .*test_minitest_\w+.rb/ err_re = "" if $-w.nil? assert_output "", err_re do @tc.assert_equal nil, nil end end end def test_assert_equal_does_not_allow_lhs_nil_triggered assert_triggered "Expected: nil\n Actual: false" do @tc.assert_equal nil, false end end def test_assert_equal_string_bug791 exp = <<-'EOF'.gsub(/^ {10}/, "") # note single quotes --- expected +++ actual @@ -1,2 +1 @@ -"\\n -" +"\\\" EOF exp = "Expected: \"\\\\n\"\n Actual: \"\\\\\"" assert_triggered exp do @tc.assert_equal "\\n", "\\" end end def test_assert_equal_string_both_escaped_unescaped_newlines msg = <<-EOM.gsub(/^ {10}/, "") --- expected +++ actual @@ -1,2 +1 @@ -\"A\\n -B\" +\"A\\n\\\\nB\" EOM assert_triggered msg do exp = "A\\nB" act = "A\n\\nB" @tc.assert_equal exp, act end end def test_assert_equal_string_encodings msg = <<-EOM.gsub(/^ {10}/, "") --- expected +++ actual @@ -1,3 +1,3 @@ -# encoding: UTF-8 -# valid: false +# encoding: #{Encoding::BINARY.name} +# valid: true "bad-utf8-\\xF1.txt" EOM assert_triggered msg do x = "bad-utf8-\xF1.txt" y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped @tc.assert_equal x, y end end unless RUBY18 def test_assert_equal_string_encodings_both_different msg = <<-EOM.gsub(/^ {10}/, "") --- expected +++ actual @@ -1,3 +1,3 @@ -# encoding: US-ASCII -# valid: false +# encoding: #{Encoding::BINARY.name} +# valid: true "bad-utf8-\\xF1.txt" EOM assert_triggered msg do x = "bad-utf8-\xF1.txt".force_encoding "ASCII" y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped @tc.assert_equal x, y end end unless RUBY18 def test_assert_equal_unescape_newlines msg = <<-'EOM'.gsub(/^ {10}/, "") # NOTE single quotes on heredoc --- expected +++ actual @@ -1,2 +1,2 @@ -"hello +"hello\n world" EOM assert_triggered msg do exp = "hello\nworld" act = 'hello\nworld' # notice single quotes @tc.assert_equal exp, act end end def test_assert_in_delta @tc.assert_in_delta 0.0, 1.0 / 1000, 0.1 end def test_assert_in_delta_triggered x = "1.0e-06" assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= #{x}." do @tc.assert_in_delta 0.0, 1.0 / 1000, 0.000001 end end def test_assert_in_epsilon @assertion_count = 10 @tc.assert_in_epsilon 10_000, 9991 @tc.assert_in_epsilon 9991, 10_000 @tc.assert_in_epsilon 1.0, 1.001 @tc.assert_in_epsilon 1.001, 1.0 @tc.assert_in_epsilon 10_000, 9999.1, 0.0001 @tc.assert_in_epsilon 9999.1, 10_000, 0.0001 @tc.assert_in_epsilon 1.0, 1.0001, 0.0001 @tc.assert_in_epsilon 1.0001, 1.0, 0.0001 @tc.assert_in_epsilon(-1, -1) @tc.assert_in_epsilon(-10_000, -9991) end def test_assert_in_epsilon_triggered assert_triggered "Expected |10000 - 9990| (10) to be <= 9.99." do @tc.assert_in_epsilon 10_000, 9990 end end def test_assert_in_epsilon_triggered_negative_case x = (RUBY18 and not maglev?) ? "0.1" : "0.100000xxx" y = "0.1" assert_triggered "Expected |-1.1 - -1| (#{x}) to be <= #{y}." do @tc.assert_in_epsilon(-1.1, -1, 0.1) end end def test_assert_includes @assertion_count = 2 @tc.assert_includes [true], true end def test_assert_includes_triggered @assertion_count = 3 e = @tc.assert_raises Minitest::Assertion do @tc.assert_includes [true], false end expected = "Expected [true] to include false." assert_equal expected, e.message end def test_assert_instance_of @tc.assert_instance_of String, "blah" end def test_assert_instance_of_triggered assert_triggered 'Expected "blah" to be an instance of Array, not String.' do @tc.assert_instance_of Array, "blah" end end def test_assert_kind_of @tc.assert_kind_of String, "blah" end def test_assert_kind_of_triggered assert_triggered 'Expected "blah" to be a kind of Array, not String.' do @tc.assert_kind_of Array, "blah" end end def test_assert_match @assertion_count = 2 m = @tc.assert_match(/\w+/, "blah blah blah") assert_kind_of MatchData, m assert_equal "blah", m[0] end def test_assert_match_matchee_to_str @assertion_count = 2 obj = Object.new def obj.to_str; "blah" end @tc.assert_match "blah", obj end def test_assert_match_matcher_object @assertion_count = 2 pattern = Object.new def pattern.=~ _; true end @tc.assert_match pattern, 5 end def test_assert_match_object_triggered @assertion_count = 2 pattern = Object.new def pattern.=~ _; false end def pattern.inspect; "[Object]" end assert_triggered "Expected [Object] to match 5." do @tc.assert_match pattern, 5 end end def test_assert_match_triggered @assertion_count = 2 assert_triggered 'Expected /\d+/ to match "blah blah blah".' do @tc.assert_match(/\d+/, "blah blah blah") end end def test_assert_nil @tc.assert_nil nil end def test_assert_nil_triggered assert_triggered "Expected 42 to be nil." do @tc.assert_nil 42 end end def test_assert_operator @tc.assert_operator 2, :>, 1 end def test_assert_operator_bad_object bad = Object.new def bad.== _; true end @tc.assert_operator bad, :equal?, bad end def test_assert_operator_triggered assert_triggered "Expected 2 to be < 1." do @tc.assert_operator 2, :<, 1 end end def test_assert_output_both @assertion_count = 2 @tc.assert_output "yay", "blah" do print "yay" $stderr.print "blah" end end def test_assert_output_both_regexps @assertion_count = 4 @tc.assert_output(/y.y/, /bl.h/) do print "yay" $stderr.print "blah" end end def test_assert_output_err @tc.assert_output nil, "blah" do $stderr.print "blah" end end def test_assert_output_neither @assertion_count = 0 @tc.assert_output do # do nothing end end def test_assert_output_out @tc.assert_output "blah" do print "blah" end end def test_assert_output_triggered_both assert_triggered util_msg("blah", "blah blah", "In stderr") do @tc.assert_output "yay", "blah" do print "boo" $stderr.print "blah blah" end end end def test_assert_output_triggered_err assert_triggered util_msg("blah", "blah blah", "In stderr") do @tc.assert_output nil, "blah" do $stderr.print "blah blah" end end end def test_assert_output_triggered_out assert_triggered util_msg("blah", "blah blah", "In stdout") do @tc.assert_output "blah" do print "blah blah" end end end def test_assert_output_no_block assert_triggered "assert_output requires a block to capture output." do @tc.assert_output "blah" end end def test_assert_output_nested_assert_uncaught @assertion_count = 1 assert_triggered "Epic Fail!" do @tc.assert_output "blah\n" do puts "blah" @tc.flunk end end end def test_assert_output_nested_raise @assertion_count = 2 @tc.assert_output "blah\n" do @tc.assert_raises RuntimeError do puts "blah" raise "boom!" end end end def test_assert_output_nested_raise_bad @assertion_count = 0 assert_unexpected "boom!" do @tc.assert_raises do # 2) bypassed via UnexpectedError @tc.assert_output "blah\n" do # 1) captures and raises UnexpectedError puts "not_blah" raise "boom!" end end end end def test_assert_output_nested_raise_mismatch # this test is redundant, but illustrative @assertion_count = 0 assert_unexpected "boom!" do @tc.assert_raises RuntimeError do # 2) bypassed via UnexpectedError @tc.assert_output "blah\n" do # 1) captures and raises UnexpectedError puts "not_blah" raise ArgumentError, "boom!" end end end end def test_assert_output_nested_throw_caught @assertion_count = 2 @tc.assert_output "blah\n" do @tc.assert_throws :boom! do puts "blah" throw :boom! end end end def test_assert_output_nested_throw_caught_bad @assertion_count = 1 # want 0; can't prevent throw from escaping :( @tc.assert_throws :boom! do # 2) captured via catch @tc.assert_output "blah\n" do # 1) bypassed via throw puts "not_blah" throw :boom! end end end def test_assert_output_nested_throw_mismatch @assertion_count = 0 assert_unexpected "uncaught throw :boom!" do @tc.assert_throws :not_boom! do # 2) captured via assert_throws+rescue @tc.assert_output "blah\n" do # 1) bypassed via throw puts "not_blah" throw :boom! end end end end def test_assert_output_uncaught_raise @assertion_count = 0 assert_unexpected "RuntimeError: boom!" do @tc.assert_output "blah\n" do puts "not_blah" raise "boom!" end end end def test_assert_output_uncaught_throw @assertion_count = 0 assert_unexpected "uncaught throw :boom!" do @tc.assert_output "blah\n" do puts "not_blah" throw :boom! end end end def test_assert_predicate @tc.assert_predicate "", :empty? end def test_assert_predicate_triggered assert_triggered 'Expected "blah" to be empty?.' do @tc.assert_predicate "blah", :empty? end end def test_assert_raises @tc.assert_raises RuntimeError do raise "blah" end end def test_assert_raises_default @tc.assert_raises do raise StandardError, "blah" end end def test_assert_raises_default_triggered e = assert_raises Minitest::Assertion do @tc.assert_raises do raise SomeError, "blah" end end expected = clean <<-EOM.chomp [StandardError] exception expected, not Class: Message: <\"blah\"> ---Backtrace--- FILE:LINE:in \`block in test_assert_raises_default_triggered\' --------------- EOM actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") actual.gsub!(RE_LEVELS, "") unless jruby? assert_equal expected, actual end def test_assert_raises_exit @tc.assert_raises SystemExit do exit 1 end end def test_assert_raises_module @tc.assert_raises MyModule do raise AnError end end def test_assert_raises_signals @tc.assert_raises SignalException do raise SignalException, :INT end end def test_assert_raises_throw_nested_bad @assertion_count = 0 assert_unexpected "RuntimeError: boom!" do @tc.assert_raises do @tc.assert_throws :blah do raise "boom!" throw :not_blah end end end end ## # *sigh* This is quite an odd scenario, but it is from real (albeit # ugly) test code in ruby-core: # https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29259 def test_assert_raises_skip @assertion_count = 0 assert_triggered "skipped", Minitest::Skip do @tc.assert_raises ArgumentError do begin raise "blah" rescue skip "skipped" end end end end def test_assert_raises_subclass @tc.assert_raises StandardError do raise AnError end end def test_assert_raises_subclass_triggered e = assert_raises Minitest::Assertion do @tc.assert_raises SomeError do raise AnError, "some message" end end expected = clean <<-EOM [SomeError] exception expected, not Class: Message: <\"some message\"> ---Backtrace--- FILE:LINE:in \`block in test_assert_raises_subclass_triggered\' --------------- EOM actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") actual.gsub!(RE_LEVELS, "") unless jruby? assert_equal expected.chomp, actual end def test_assert_raises_triggered_different e = assert_raises Minitest::Assertion do @tc.assert_raises RuntimeError do raise SyntaxError, "icky" end end expected = clean <<-EOM.chomp [RuntimeError] exception expected, not Class: Message: <\"icky\"> ---Backtrace--- FILE:LINE:in \`block in test_assert_raises_triggered_different\' --------------- EOM actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") actual.gsub!(RE_LEVELS, "") unless jruby? assert_equal expected, actual end def test_assert_raises_triggered_different_msg e = assert_raises Minitest::Assertion do @tc.assert_raises RuntimeError, "XXX" do raise SyntaxError, "icky" end end expected = clean <<-EOM XXX. [RuntimeError] exception expected, not Class: Message: <\"icky\"> ---Backtrace--- FILE:LINE:in \`block in test_assert_raises_triggered_different_msg\' --------------- EOM actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") actual.gsub!(RE_LEVELS, "") unless jruby? assert_equal expected.chomp, actual end def test_assert_raises_triggered_none e = assert_raises Minitest::Assertion do @tc.assert_raises Minitest::Assertion do # do nothing end end expected = "Minitest::Assertion expected but nothing was raised." assert_equal expected, e.message end def test_assert_raises_triggered_none_msg e = assert_raises Minitest::Assertion do @tc.assert_raises Minitest::Assertion, "XXX" do # do nothing end end expected = "XXX.\nMinitest::Assertion expected but nothing was raised." assert_equal expected, e.message end def test_assert_raises_without_block assert_triggered "assert_raises requires a block to capture errors." do @tc.assert_raises StandardError end end def test_assert_respond_to @tc.assert_respond_to "blah", :empty? end def test_assert_respond_to_triggered assert_triggered 'Expected "blah" (String) to respond to #rawr!.' do @tc.assert_respond_to "blah", :rawr! end end def test_assert_same @assertion_count = 3 o = "blah" @tc.assert_same 1, 1 @tc.assert_same :blah, :blah @tc.assert_same o, o end def test_assert_same_triggered @assertion_count = 2 assert_triggered "Expected 2 (oid=N) to be the same as 1 (oid=N)." do @tc.assert_same 1, 2 end s1 = "blah" s2 = "blah" assert_triggered 'Expected "blah" (oid=N) to be the same as "blah" (oid=N).' do @tc.assert_same s1, s2 end end def test_assert_send assert_deprecated :assert_send do @tc.assert_send [1, :<, 2] end end def test_assert_send_bad assert_deprecated :assert_send do assert_triggered "Expected 1.>(*[2]) to return true." do @tc.assert_send [1, :>, 2] end end end def test_assert_silent @assertion_count = 2 @tc.assert_silent do # do nothing end end def test_assert_silent_triggered_err assert_triggered util_msg("", "blah blah", "In stderr") do @tc.assert_silent do $stderr.print "blah blah" end end end def test_assert_silent_triggered_out @assertion_count = 2 assert_triggered util_msg("", "blah blah", "In stdout") do @tc.assert_silent do print "blah blah" end end end def test_assert_throws v = @tc.assert_throws :blah do throw :blah end assert_nil v end def test_assert_throws_value v = @tc.assert_throws :blah do throw :blah, 42 end assert_equal 42, v end def test_assert_throws_argument_exception @assertion_count = 0 assert_unexpected "ArgumentError" do @tc.assert_throws :blah do raise ArgumentError end end end def test_assert_throws_different assert_triggered "Expected :blah to have been thrown, not :not_blah." do @tc.assert_throws :blah do throw :not_blah end end end def test_assert_throws_name_error @assertion_count = 0 assert_unexpected "NameError" do @tc.assert_throws :blah do raise NameError end end end def test_assert_throws_unthrown assert_triggered "Expected :blah to have been thrown." do @tc.assert_throws :blah do # do nothing end end end def test_assert_path_exists @tc.assert_path_exists __FILE__ end def test_assert_path_exists_triggered assert_triggered "Expected path 'blah' to exist." do @tc.assert_path_exists "blah" end end def test_assert_pattern if RUBY_VERSION > "3" then @tc.assert_pattern do exp = if RUBY_VERSION.start_with? "3.0" "(eval):1: warning: One-line pattern matching is experimental, and the behavior may change in future versions of Ruby!\n" else "" end assert_output nil, exp do eval "[1,2,3] => [Integer, Integer, Integer]" # eval to escape parser for ruby<3 end end else @assertion_count = 0 assert_raises NotImplementedError do @tc.assert_pattern do # do nothing end end end end def test_assert_pattern_traps_nomatchingpatternerror skip unless RUBY_VERSION > "3" exp = if RUBY_VERSION.start_with? "3.0" then "[1, 2, 3]" # terrible error message! else /length mismatch/ end assert_triggered exp do @tc.assert_pattern do capture_io do # 3.0 is noisy eval "[1,2,3] => [Integer, Integer]" # eval to escape parser for ruby<3 end end end end def test_assert_pattern_raises_other_exceptions skip unless RUBY_VERSION >= "3.0" @assertion_count = 0 assert_raises RuntimeError do @tc.assert_pattern do raise "boom" end end end def test_assert_pattern_with_no_block skip unless RUBY_VERSION >= "3.0" assert_triggered "assert_pattern requires a block to capture errors." do @tc.assert_pattern end end def test_capture_io @assertion_count = 0 non_verbose do out, err = capture_io do puts "hi" $stderr.puts "bye!" end assert_equal "hi\n", out assert_equal "bye!\n", err end end def test_capture_subprocess_io @assertion_count = 0 non_verbose do out, err = capture_subprocess_io do system("echo hi") system("echo bye! 1>&2") end assert_equal "hi\n", out assert_equal "bye!", err.strip end end def test_class_asserts_match_refutes @assertion_count = 0 methods = Minitest::Assertions.public_instance_methods methods.map!(&:to_s) if Symbol === methods.first # These don't have corresponding refutes _on purpose_. They're # useless and will never be added, so don't bother. ignores = %w[assert_output assert_raises assert_send assert_silent assert_throws assert_mock] # These are test/unit methods. I'm not actually sure why they're still here ignores += %w[assert_no_match assert_not_equal assert_not_nil assert_not_same assert_nothing_raised assert_nothing_thrown assert_raise] asserts = methods.grep(/^assert/).sort - ignores refutes = methods.grep(/^refute/).sort - ignores assert_empty refutes.map { |n| n.sub(/^refute/, "assert") } - asserts assert_empty asserts.map { |n| n.sub(/^assert/, "refute") } - refutes end def test_delta_consistency @assertion_count = 2 @tc.assert_in_delta 0, 1, 1 assert_triggered "Expected |0 - 1| (1) to not be <= 1." do @tc.refute_in_delta 0, 1, 1 end end def test_epsilon_consistency @assertion_count = 2 @tc.assert_in_epsilon 1.0, 1.001 msg = "Expected |1.0 - 1.001| (0.000999xxx) to not be <= 0.001." assert_triggered msg do @tc.refute_in_epsilon 1.0, 1.001 end end def assert_fail_after t @tc.fail_after t.year, t.month, t.day, "remove the deprecations" end def test_fail_after d0 = Time.now d1 = d0 + 86_400 # I am an idiot assert_silent do assert_fail_after d1 end assert_triggered "remove the deprecations" do assert_fail_after d0 end end def test_flunk assert_triggered "Epic Fail!" do @tc.flunk end end def test_flunk_message assert_triggered @zomg do @tc.flunk @zomg end end def test_pass @tc.pass end def test_refute @assertion_count = 2 @tc.assert_equal true, @tc.refute(false), "returns true on success" end def test_refute_empty @assertion_count = 2 @tc.refute_empty [1] end def test_refute_empty_triggered @assertion_count = 2 assert_triggered "Expected [] to not be empty." do @tc.refute_empty [] end end def test_refute_equal @tc.refute_equal "blah", "yay" end def test_refute_equal_triggered assert_triggered 'Expected "blah" to not be equal to "blah".' do @tc.refute_equal "blah", "blah" end end def test_refute_in_delta @tc.refute_in_delta 0.0, 1.0 / 1000, 0.000001 end def test_refute_in_delta_triggered x = "0.1" assert_triggered "Expected |0.0 - 0.001| (0.001) to not be <= #{x}." do @tc.refute_in_delta 0.0, 1.0 / 1000, 0.1 end end def test_refute_in_epsilon @tc.refute_in_epsilon 10_000, 9990-1 end def test_refute_in_epsilon_triggered assert_triggered "Expected |10000 - 9990| (10) to not be <= 10.0." do @tc.refute_in_epsilon 10_000, 9990 flunk end end def test_refute_includes @assertion_count = 2 @tc.refute_includes [true], false end def test_refute_includes_triggered @assertion_count = 3 e = @tc.assert_raises Minitest::Assertion do @tc.refute_includes [true], true end expected = "Expected [true] to not include true." assert_equal expected, e.message end def test_refute_instance_of @tc.refute_instance_of Array, "blah" end def test_refute_instance_of_triggered assert_triggered 'Expected "blah" to not be an instance of String.' do @tc.refute_instance_of String, "blah" end end def test_refute_kind_of @tc.refute_kind_of Array, "blah" end def test_refute_kind_of_triggered assert_triggered 'Expected "blah" to not be a kind of String.' do @tc.refute_kind_of String, "blah" end end def test_refute_match @assertion_count = 2 @tc.refute_match(/\d+/, "blah blah blah") end def test_refute_match_matcher_object @assertion_count = 2 pattern = Object.new def pattern.=~ _; false end @tc.refute_match pattern, 5 end def test_refute_match_object_triggered @assertion_count = 2 pattern = Object.new def pattern.=~ _; true end def pattern.inspect; "[Object]" end assert_triggered "Expected [Object] to not match 5." do @tc.refute_match pattern, 5 end end def test_refute_match_triggered @assertion_count = 2 assert_triggered 'Expected /\w+/ to not match "blah blah blah".' do @tc.refute_match(/\w+/, "blah blah blah") end end def test_refute_nil @tc.refute_nil 42 end def test_refute_nil_triggered assert_triggered "Expected nil to not be nil." do @tc.refute_nil nil end end def test_refute_operator @tc.refute_operator 2, :<, 1 end def test_refute_operator_bad_object bad = Object.new def bad.== _; true end @tc.refute_operator true, :equal?, bad end def test_refute_operator_triggered assert_triggered "Expected 2 to not be > 1." do @tc.refute_operator 2, :>, 1 end end def test_refute_pattern if RUBY_VERSION >= "3.0" @tc.refute_pattern do capture_io do # 3.0 is noisy eval "[1,2,3] => [Integer, Integer, String]" end end else @assertion_count = 0 assert_raises NotImplementedError do @tc.refute_pattern do eval "[1,2,3] => [Integer, Integer, String]" end end end end def test_refute_pattern_expects_nomatchingpatternerror skip unless RUBY_VERSION > "3" assert_triggered(/NoMatchingPatternError expected, but nothing was raised./) do @tc.refute_pattern do capture_io do # 3.0 is noisy eval "[1,2,3] => [Integer, Integer, Integer]" end end end end def test_refute_pattern_raises_other_exceptions skip unless RUBY_VERSION >= "3.0" @assertion_count = 0 assert_raises RuntimeError do @tc.refute_pattern do raise "boom" end end end def test_refute_pattern_with_no_block skip unless RUBY_VERSION >= "3.0" assert_triggered "refute_pattern requires a block to capture errors." do @tc.refute_pattern end end def test_refute_predicate @tc.refute_predicate "42", :empty? end def test_refute_predicate_triggered assert_triggered 'Expected "" to not be empty?.' do @tc.refute_predicate "", :empty? end end def test_refute_respond_to @tc.refute_respond_to "blah", :rawr! end def test_refute_respond_to_triggered assert_triggered 'Expected "blah" to not respond to empty?.' do @tc.refute_respond_to "blah", :empty? end end def test_refute_same @tc.refute_same 1, 2 end def test_refute_same_triggered assert_triggered "Expected 1 (oid=N) to not be the same as 1 (oid=N)." do @tc.refute_same 1, 1 end end def test_refute_path_exists @tc.refute_path_exists "blah" end def test_refute_path_exists_triggered assert_triggered "Expected path '#{__FILE__}' to not exist." do @tc.refute_path_exists __FILE__ end end def test_skip @assertion_count = 0 assert_triggered "haha!", Minitest::Skip do @tc.skip "haha!" end end def assert_skip_until t, msg @tc.skip_until t.year, t.month, t.day, msg end def test_skip_until @assertion_count = 0 d0 = Time.now d1 = d0 + 86_400 # I am an idiot assert_output "", /Stale skip_until \"not yet\" at .*?:\d+$/ do assert_skip_until d0, "not yet" end assert_triggered "not ready yet", Minitest::Skip do assert_skip_until d1, "not ready yet" end end def util_msg exp, act, msg = nil s = "Expected: #{exp.inspect}\n Actual: #{act.inspect}" s = "#{msg}.\n#{s}" if msg s end def without_diff old_diff = Minitest::Assertions.diff Minitest::Assertions.diff = nil yield ensure Minitest::Assertions.diff = old_diff end end class TestMinitestAssertionHelpers < Minitest::Test def assert_mu_pp exp, input, raw = false act = mu_pp input if String === input && !raw then assert_equal "\"#{exp}\"", act else assert_equal exp, act end end def assert_mu_pp_for_diff exp, input, raw = false act = mu_pp_for_diff input if String === input && !raw then assert_equal "\"#{exp}\"", act else assert_equal exp, act end end def test_diff_equal msg = "No visible difference in the String#inspect output. You should look at the implementation of #== on String or its members. \"blahblahblahblahblahblahblahblahblahblah\"".gsub(/^ +/, "") o1 = "blah" * 10 o2 = "blah" * 10 def o1.== _ false end assert_equal msg, diff(o1, o2) end def test_diff_str_mixed msg = <<-'EOM'.gsub(/^ {10}/, "") # NOTE single quotes on heredoc --- expected +++ actual @@ -1 +1 @@ -"A\\n\nB" +"A\n\\nB" EOM exp = "A\\n\nB" act = "A\n\\nB" assert_equal msg, diff(exp, act) end def test_diff_str_multiline msg = <<-'EOM'.gsub(/^ {10}/, "") # NOTE single quotes on heredoc --- expected +++ actual @@ -1,2 +1,2 @@ "A -B" +C" EOM exp = "A\nB" act = "A\nC" assert_equal msg, diff(exp, act) end def test_diff_str_simple msg = <<-'EOM'.gsub(/^ {10}/, "").chomp # NOTE single quotes on heredoc Expected: "A" Actual: "B" EOM exp = "A" act = "B" assert_equal msg, diff(exp, act) end def test_message assert_equal "blah2.", message { "blah2" }.call assert_equal "blah2.", message("") { "blah2" }.call assert_equal "blah1.\nblah2.", message(:blah1) { "blah2" }.call assert_equal "blah1.\nblah2.", message("blah1") { "blah2" }.call message = proc { "blah1" } assert_equal "blah1.\nblah2.", message(message) { "blah2" }.call message = message { "blah1" } assert_equal "blah1.\nblah2.", message(message) { "blah2" }.call end def test_message_deferred var = nil msg = message { var = "blah" } assert_nil var msg.call assert_equal "blah", var end def test_mu_pp assert_mu_pp 42.inspect, 42 assert_mu_pp %w[a b c].inspect, %w[a b c] assert_mu_pp "A B", "A B" assert_mu_pp "A\\nB", "A\nB" assert_mu_pp "A\\\\nB", 'A\nB' # notice single quotes end def test_mu_pp_for_diff assert_mu_pp_for_diff "#", Object.new assert_mu_pp_for_diff "A B", "A B" assert_mu_pp_for_diff [1, 2, 3].inspect, [1, 2, 3] assert_mu_pp_for_diff "A\nB", "A\nB" end def test_mu_pp_for_diff_str_bad_encoding str = "\666".force_encoding Encoding::UTF_8 exp = "# encoding: UTF-8\n# valid: false\n\"\\xB6\"" assert_mu_pp_for_diff exp, str, :raw end def test_mu_pp_for_diff_str_bad_encoding_both str = "\666A\\n\nB".force_encoding Encoding::UTF_8 exp = "# encoding: UTF-8\n# valid: false\n\"\\xB6A\\\\n\\nB\"" assert_mu_pp_for_diff exp, str, :raw end def test_mu_pp_for_diff_str_encoding str = "A\nB".b exp = "# encoding: #{Encoding::BINARY.name}\n# valid: true\n\"A\nB\"" assert_mu_pp_for_diff exp, str, :raw end def test_mu_pp_for_diff_str_encoding_both str = "A\\n\nB".b exp = "# encoding: #{Encoding::BINARY.name}\n# valid: true\n\"A\\\\n\\nB\"" assert_mu_pp_for_diff exp, str, :raw end def test_mu_pp_for_diff_str_nerd assert_mu_pp_for_diff "A\\nB\\\\nC", "A\nB\\nC" assert_mu_pp_for_diff "\\nB\\\\nC", "\nB\\nC" assert_mu_pp_for_diff "\\nB\\\\n", "\nB\\n" assert_mu_pp_for_diff "\\n\\\\n", "\n\\n" assert_mu_pp_for_diff "\\\\n\\n", "\\n\n" assert_mu_pp_for_diff "\\\\nB\\n", "\\nB\n" assert_mu_pp_for_diff "\\\\nB\\nC", "\\nB\nC" assert_mu_pp_for_diff "A\\\\n\\nB", "A\\n\nB" assert_mu_pp_for_diff "A\\n\\\\nB", "A\n\\nB" assert_mu_pp_for_diff "\\\\n\\n", "\\n\n" assert_mu_pp_for_diff "\\n\\\\n", "\n\\n" end def test_mu_pp_for_diff_str_normal assert_mu_pp_for_diff "", "" assert_mu_pp_for_diff "A\\n\n", "A\\n" assert_mu_pp_for_diff "A\\n\nB", "A\\nB" assert_mu_pp_for_diff "A\n", "A\n" assert_mu_pp_for_diff "A\nB", "A\nB" assert_mu_pp_for_diff "\\n\n", "\\n" assert_mu_pp_for_diff "\n", "\n" assert_mu_pp_for_diff "\\n\nA", "\\nA" assert_mu_pp_for_diff "\nA", "\nA" end def test_mu_pp_str_bad_encoding str = "\666".force_encoding Encoding::UTF_8 exp = "# encoding: UTF-8\n# valid: false\n\"\\xB6\"" assert_mu_pp exp, str, :raw end def test_mu_pp_str_encoding str = "A\nB".b exp = "# encoding: #{Encoding::BINARY.name}\n# valid: true\n\"A\\nB\"" assert_mu_pp exp, str, :raw end def test_mu_pp_str_immutable printer = Class.new { extend Minitest::Assertions } str = "test".freeze assert_equal '"test"', printer.mu_pp(str) end end test_minitest_benchmark.rb000066400000000000000000000066011446701454400410370ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitestrequire "minitest/autorun" require "minitest/benchmark" ## # Used to verify data: # https://www.wolframalpha.com/examples/RegressionAnalysis.html class TestMinitestBenchmark < Minitest::Test def test_cls_bench_exp assert_equal [2, 4, 8, 16, 32], Minitest::Benchmark.bench_exp(2, 32, 2) end def test_cls_bench_linear assert_equal [2, 4, 6, 8, 10], Minitest::Benchmark.bench_linear(2, 10, 2) end def test_cls_runnable_methods assert_equal [], Minitest::Benchmark.runnable_methods c = Class.new(Minitest::Benchmark) do def bench_blah end end assert_equal ["bench_blah"], c.runnable_methods end def test_cls_bench_range assert_equal [1, 10, 100, 1_000, 10_000], Minitest::Benchmark.bench_range end def test_fit_exponential_clean x = [1.0, 2.0, 3.0, 4.0, 5.0] y = x.map { |n| 1.1 * Math.exp(2.1 * n) } assert_fit :exponential, x, y, 1.0, 1.1, 2.1 end def test_fit_exponential_noisy x = [1.0, 1.9, 2.6, 3.4, 5.0] y = [12, 10, 8.2, 6.9, 5.9] # verified with Numbers and R assert_fit :exponential, x, y, 0.95, 13.81148, -0.1820 end def test_fit_logarithmic_clean x = [1.0, 2.0, 3.0, 4.0, 5.0] y = x.map { |n| 1.1 + 2.1 * Math.log(n) } assert_fit :logarithmic, x, y, 1.0, 1.1, 2.1 end def test_fit_logarithmic_noisy x = [1.0, 2.0, 3.0, 4.0, 5.0] # Generated with # y = x.map { |n| jitter = 0.999 + 0.002 * rand; (Math.log(n) ) * jitter } y = [0.0, 0.6935, 1.0995, 1.3873, 1.6097] assert_fit :logarithmic, x, y, 0.95, 0, 1 end def test_fit_constant_clean x = (1..5).to_a y = [5.0, 5.0, 5.0, 5.0, 5.0] assert_fit :linear, x, y, nil, 5.0, 0 end def test_fit_constant_noisy x = (1..5).to_a y = [1.0, 1.2, 1.0, 0.8, 1.0] # verified in numbers and R assert_fit :linear, x, y, nil, 1.12, -0.04 end def test_fit_linear_clean # y = m * x + b where m = 2.2, b = 3.1 x = (1..5).to_a y = x.map { |n| 2.2 * n + 3.1 } assert_fit :linear, x, y, 1.0, 3.1, 2.2 end def test_fit_linear_noisy x = [ 60, 61, 62, 63, 65] y = [3.1, 3.6, 3.8, 4.0, 4.1] # verified in numbers and R assert_fit :linear, x, y, 0.8315, -7.9635, 0.1878 end def test_fit_power_clean # y = A x ** B, where B = b and A = e ** a # if, A = 1, B = 2, then x = [1.0, 2.0, 3.0, 4.0, 5.0] y = [1.0, 4.0, 9.0, 16.0, 25.0] assert_fit :power, x, y, 1.0, 1.0, 2.0 end def test_fit_power_noisy # from www.engr.uidaho.edu/thompson/courses/ME330/lecture/least_squares.html x = [10, 12, 15, 17, 20, 22, 25, 27, 30, 32, 35] y = [95, 105, 125, 141, 173, 200, 253, 298, 385, 459, 602] # verified in numbers assert_fit :power, x, y, 0.90, 2.6217, 1.4556 # income to % of households below income amount # https://library.wolfram.com/infocenter/Conferences/6461/PowerLaws.nb x = [15_000, 25_000, 35_000, 50_000, 75_000, 100_000] y = [0.154, 0.283, 0.402, 0.55, 0.733, 0.843] # verified in numbers assert_fit :power, x, y, 0.96, 3.119e-5, 0.8959 end def assert_fit msg, x, y, fit, exp_a, exp_b bench = Minitest::Benchmark.new :blah a, b, rr = bench.send "fit_#{msg}", x, y assert_operator rr, :>=, fit if fit assert_in_delta exp_a, a assert_in_delta exp_b, b end end describe "my class Bench" do klass = self it "should provide bench methods" do klass.must_respond_to :bench end end test_minitest_mock.rb000066400000000000000000000636101446701454400400410ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitestrequire "minitest/autorun" def with_kwargs_env ENV["MT_KWARGS_HAC\K"] = "1" yield ensure ENV.delete "MT_KWARGS_HAC\K" end class TestMinitestMock < Minitest::Test def setup @mock = Minitest::Mock.new.expect(:foo, nil) @mock.expect(:meaning_of_life, 42) end def test_create_stub_method assert_nil @mock.foo end def test_allow_return_value_specification assert_equal 42, @mock.meaning_of_life end def test_blow_up_if_not_called @mock.foo util_verify_bad "expected meaning_of_life() => 42" end def test_not_blow_up_if_everything_called @mock.foo @mock.meaning_of_life assert_mock @mock end def test_allow_expectations_to_be_added_after_creation @mock.expect(:bar, true) assert @mock.bar end def test_not_verify_if_new_expected_method_is_not_called @mock.foo @mock.meaning_of_life @mock.expect(:bar, true) util_verify_bad "expected bar() => true" end def test_blow_up_on_wrong_number_of_arguments @mock.foo @mock.meaning_of_life @mock.expect(:sum, 3, [1, 2]) e = assert_raises ArgumentError do @mock.sum end assert_equal "mocked method :sum expects 2 arguments, got []", e.message end def test_return_mock_does_not_raise retval = Minitest::Mock.new mock = Minitest::Mock.new mock.expect(:foo, retval) mock.foo assert_mock mock end def test_mock_args_does_not_raise arg = Minitest::Mock.new mock = Minitest::Mock.new mock.expect(:foo, nil, [arg]) mock.foo(arg) assert_mock mock end def test_set_expectation_on_special_methods mock = Minitest::Mock.new mock.expect :object_id, "received object_id" assert_equal "received object_id", mock.object_id mock.expect :respond_to_missing?, "received respond_to_missing?" assert_equal "received respond_to_missing?", mock.respond_to_missing? mock.expect :===, "received ===" assert_equal "received ===", mock.=== mock.expect :inspect, "received inspect" assert_equal "received inspect", mock.inspect mock.expect :to_s, "received to_s" assert_equal "received to_s", mock.to_s mock.expect :public_send, "received public_send" assert_equal "received public_send", mock.public_send mock.expect :send, "received send" assert_equal "received send", mock.send assert_mock mock end def test_expectations_can_be_satisfied_via_send @mock.send :foo @mock.send :meaning_of_life assert_mock @mock end def test_expectations_can_be_satisfied_via_public_send skip "Doesn't run on 1.8" if RUBY_VERSION < "1.9" @mock.public_send :foo @mock.public_send :meaning_of_life assert_mock @mock end def test_blow_up_on_wrong_arguments @mock.foo @mock.meaning_of_life @mock.expect(:sum, 3, [1, 2]) e = assert_raises MockExpectationError do @mock.sum(2, 4) end exp = "mocked method :sum called with unexpected arguments [2, 4]" assert_equal exp, e.message end def test_expect_with_non_array_args e = assert_raises ArgumentError do @mock.expect :blah, 3, false end assert_match "args must be an array", e.message end def test_respond_appropriately assert @mock.respond_to?(:foo) assert @mock.respond_to?(:foo, true) assert @mock.respond_to?("foo") assert !@mock.respond_to?(:bar) end def test_no_method_error_on_unexpected_methods e = assert_raises NoMethodError do @mock.bar end expected = "unmocked method :bar, expected one of [:foo, :meaning_of_life]" assert_match expected, e.message end def test_assign_per_mock_return_values a = Minitest::Mock.new b = Minitest::Mock.new a.expect(:foo, :a) b.expect(:foo, :b) assert_equal :a, a.foo assert_equal :b, b.foo end def test_do_not_create_stub_method_on_new_mocks a = Minitest::Mock.new a.expect(:foo, :a) assert !Minitest::Mock.new.respond_to?(:foo) end def test_mock_is_a_blank_slate @mock.expect :kind_of?, true, [String] @mock.expect :==, true, [1] assert @mock.kind_of?(String), "didn't mock :kind_of\?" assert @mock == 1, "didn't mock :==" end def test_verify_allows_called_args_to_be_loosely_specified mock = Minitest::Mock.new mock.expect :loose_expectation, true, [Integer] mock.loose_expectation 1 assert_mock mock end def test_verify_raises_with_strict_args mock = Minitest::Mock.new mock.expect :strict_expectation, true, [2] e = assert_raises MockExpectationError do mock.strict_expectation 1 end exp = "mocked method :strict_expectation called with unexpected arguments [1]" assert_equal exp, e.message end def test_method_missing_empty mock = Minitest::Mock.new mock.expect :a, nil mock.a e = assert_raises MockExpectationError do mock.a end assert_equal "No more expects available for :a: [] {}", e.message end def test_same_method_expects_are_verified_when_all_called mock = Minitest::Mock.new mock.expect :foo, nil, [:bar] mock.expect :foo, nil, [:baz] mock.foo :bar mock.foo :baz assert_mock mock end def test_same_method_expects_blow_up_when_not_all_called mock = Minitest::Mock.new mock.expect :foo, nil, [:bar] mock.expect :foo, nil, [:baz] mock.foo :bar e = assert_raises(MockExpectationError) { mock.verify } exp = "expected foo(:baz) => nil, got [foo(:bar) => nil]" assert_equal exp, e.message end def test_same_method_expects_with_same_args_blow_up_when_not_all_called mock = Minitest::Mock.new mock.expect :foo, nil, [:bar] mock.expect :foo, nil, [:bar] mock.foo :bar e = assert_raises(MockExpectationError) { mock.verify } exp = "expected foo(:bar) => nil, got [foo(:bar) => nil]" assert_equal exp, e.message end def test_delegator_calls_are_propagated delegator = Object.new mock = Minitest::Mock.new delegator refute delegator.nil? refute mock.nil? assert_mock mock end def test_handles_kwargs_in_error_message mock = Minitest::Mock.new mock.expect :foo, nil, [], kw: true mock.expect :foo, nil, [], kw: false mock.foo kw: true e = assert_raises(MockExpectationError) { mock.verify } exp = "expected foo(:kw=>false) => nil, got [foo(:kw=>true) => nil]" assert_equal exp, e.message end def test_verify_passes_when_mock_block_returns_true mock = Minitest::Mock.new mock.expect :foo, nil do true end mock.foo assert_mock mock end def test_mock_block_is_passed_function_params arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil do |a1, a2, a3| a1 == arg1 && a2 == arg2 && a3 == arg3 end assert_silent do if RUBY_VERSION > "3" then mock.foo arg1, arg2, arg3 else mock.foo arg1, arg2, **arg3 # oddity just for ruby 2.7 end end assert_mock mock end def test_mock_block_is_passed_keyword_args__block arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil do |k1:, k2:, k3:| k1 == arg1 && k2 == arg2 && k3 == arg3 end mock.foo(k1: arg1, k2: arg2, k3: arg3) assert_mock mock end def test_mock_block_is_passed_keyword_args__block_bad_missing arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil do |k1:, k2:, k3:| k1 == arg1 && k2 == arg2 && k3 == arg3 end e = assert_raises ArgumentError do mock.foo(k1: arg1, k2: arg2) end # basically testing ruby ... need ? for ruby < 2.7 :( assert_match(/missing keyword: :?k3/, e.message) end def test_mock_block_is_passed_keyword_args__block_bad_extra arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil do |k1:, k2:| k1 == arg1 && k2 == arg2 && k3 == arg3 end e = assert_raises ArgumentError do mock.foo(k1: arg1, k2: arg2, k3: arg3) end # basically testing ruby ... need ? for ruby < 2.7 :( assert_match(/unknown keyword: :?k3/, e.message) end def test_mock_block_is_passed_keyword_args__block_bad_value arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil do |k1:, k2:, k3:| k1 == arg1 && k2 == arg2 && k3 == arg3 end e = assert_raises MockExpectationError do mock.foo(k1: arg1, k2: arg2, k3: :BAD!) end exp = "mocked method :foo failed block w/ [] {:k1=>:bar, :k2=>[1, 2, 3], :k3=>:BAD!}" assert_equal exp, e.message end def test_mock_block_is_passed_keyword_args__args arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil, k1: arg1, k2: arg2, k3: arg3 mock.foo(k1: arg1, k2: arg2, k3: arg3) assert_mock mock end def test_mock_allow_all_kwargs__old_style_env with_kwargs_env do mock = Minitest::Mock.new mock.expect :foo, true, [Hash] assert_equal true, mock.foo(bar: 42) end end def test_mock_allow_all_kwargs__old_style_env__rewrite with_kwargs_env do mock = Minitest::Mock.new mock.expect :foo, true, [], bar: Integer assert_equal true, mock.foo(bar: 42) end end def test_mock_block_is_passed_keyword_args__args__old_style_bad arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil, [{k1: arg1, k2: arg2, k3: arg3}] e = assert_raises ArgumentError do mock.foo(k1: arg1, k2: arg2, k3: arg3) end assert_equal "mocked method :foo expects 1 arguments, got []", e.message end def test_mock_block_is_passed_keyword_args__args__old_style_env with_kwargs_env do arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil, [{k1: arg1, k2: arg2, k3: arg3}] mock.foo(k1: arg1, k2: arg2, k3: arg3) assert_mock mock end end def test_mock_block_is_passed_keyword_args__args__old_style_both with_kwargs_env do arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new assert_output nil, /Using MT_KWARGS_HAC. yet passing kwargs/ do mock.expect :foo, nil, [{}], k1: arg1, k2: arg2, k3: arg3 end mock.foo({}, k1: arg1, k2: arg2, k3: arg3) assert_mock mock end end def test_mock_block_is_passed_keyword_args__args_bad_missing arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil, k1: arg1, k2: arg2, k3: arg3 e = assert_raises ArgumentError do mock.foo(k1: arg1, k2: arg2) end assert_equal "mocked method :foo expects 3 keyword arguments, got %p" % {k1: arg1, k2: arg2}, e.message end def test_mock_block_is_passed_keyword_args__args_bad_extra arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil, k1: arg1, k2: arg2 e = assert_raises ArgumentError do mock.foo(k1: arg1, k2: arg2, k3: arg3) end assert_equal "mocked method :foo expects 2 keyword arguments, got %p" % {k1: arg1, k2: arg2, k3: arg3}, e.message end def test_mock_block_is_passed_keyword_args__args_bad_key arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil, k1: arg1, k2: arg2, k3: arg3 e = assert_raises MockExpectationError do mock.foo(k1: arg1, k2: arg2, BAD: arg3) end assert_includes e.message, "unexpected keywords [:k1, :k2, :k3]" assert_includes e.message, "vs [:k1, :k2, :BAD]" end def test_mock_block_is_passed_keyword_args__args_bad_val arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } mock = Minitest::Mock.new mock.expect :foo, nil, k1: arg1, k2: arg2, k3: arg3 e = assert_raises MockExpectationError do mock.foo(k1: arg1, k2: :BAD!, k3: arg3) end assert_match(/unexpected keyword arguments.* vs .*:k2=>:BAD!/, e.message) end def test_mock_block_is_passed_function_block mock = Minitest::Mock.new block = proc { "bar" } mock.expect :foo, nil do |arg, &blk| arg == "foo" && blk == block end mock.foo "foo", &block assert_mock mock end def test_mock_forward_keyword_arguments mock = Minitest::Mock.new mock.expect(:foo, nil) { |bar:| bar == 'bar' } mock.foo(bar: 'bar') assert_mock mock end def test_verify_fails_when_mock_block_returns_false mock = Minitest::Mock.new mock.expect :foo, nil do false end e = assert_raises(MockExpectationError) { mock.foo } exp = "mocked method :foo failed block w/ [] {}" assert_equal exp, e.message end def test_mock_block_raises_if_args_passed mock = Minitest::Mock.new e = assert_raises(ArgumentError) do mock.expect :foo, nil, [:a, :b, :c] do true end end exp = "args ignored when block given" assert_match exp, e.message end def test_mock_block_raises_if_kwargs_passed mock = Minitest::Mock.new e = assert_raises(ArgumentError) do mock.expect :foo, nil, kwargs:1 do true end end exp = "kwargs ignored when block given" assert_match exp, e.message end def test_mock_returns_retval_when_called_with_block mock = Minitest::Mock.new mock.expect(:foo, 32) do true end rs = mock.foo assert_equal rs, 32 end def util_verify_bad exp e = assert_raises MockExpectationError do @mock.verify end assert_equal exp, e.message end def test_mock_called_via_send mock = Minitest::Mock.new mock.expect(:foo, true) mock.send :foo assert_mock mock end def test_mock_called_via___send__ mock = Minitest::Mock.new mock.expect(:foo, true) mock.__send__ :foo assert_mock mock end def test_mock_called_via_send_with_args mock = Minitest::Mock.new mock.expect(:foo, true, [1, 2, 3]) mock.send(:foo, 1, 2, 3) assert_mock mock end end require "minitest/metametameta" class TestMinitestStub < Minitest::Test # Do not parallelize since we're calling stub on class methods def setup super Minitest::Test.reset @tc = Minitest::Test.new "fake tc" @assertion_count = 1 end def teardown super assert_equal @assertion_count, @tc.assertions if self.passed? end class Time def self.now 24 end end def assert_stub val_or_callable @assertion_count += 1 t = Time.now.to_i Time.stub :now, val_or_callable do @tc.assert_equal 42, Time.now end @tc.assert_operator Time.now.to_i, :>=, t end def test_stub_private_module_method @assertion_count += 1 t0 = Time.now self.stub :sleep, nil do @tc.assert_nil sleep(10) end @tc.assert_operator Time.now - t0, :<=, 1 end def test_stub_private_module_method_indirect @assertion_count += 1 fail_clapper = Class.new do def fail_clap raise :clap end end.new fail_clapper.stub :raise, nil do |safe_clapper| @tc.assert_equal :clap, safe_clapper.fail_clap # either form works @tc.assert_equal :clap, fail_clapper.fail_clap # yay closures end end def test_stub_public_module_method Math.stub :log10, :stubbed do @tc.assert_equal :stubbed, Math.log10(1000) end end def test_stub_value assert_stub 42 end def test_stub_block assert_stub lambda { 42 } end def test_stub_block_args @assertion_count += 1 t = Time.now.to_i Time.stub :now, lambda { |n| n * 2 } do @tc.assert_equal 42, Time.now(21) end @tc.assert_operator Time.now.to_i, :>=, t end def test_stub_callable obj = Object.new def obj.call 42 end assert_stub obj end def test_stub_yield_self obj = "foo" val = obj.stub :to_s, "bar" do |s| s.to_s end @tc.assert_equal "bar", val end def test_dynamic_method @assertion_count = 2 dynamic = Class.new do def self.respond_to? meth meth == :found end def self.method_missing meth, *args, &block if meth == :found false else super end end end val = dynamic.stub(:found, true) do |s| s.found end @tc.assert_equal true, val @tc.assert_equal false, dynamic.found end def test_stub_NameError e = @tc.assert_raises NameError do Time.stub :nope_nope_nope, 42 do # do nothing end end exp = jruby? ? /Undefined method nope_nope_nope for '#{self.class}::Time'/ : /undefined method `nope_nope_nope' for( class)? `#{self.class}::Time'/ assert_match exp, e.message end def test_mock_with_yield mock = Minitest::Mock.new mock.expect(:write, true) do true end rs = nil File.stub :open, true, mock do File.open "foo.txt", "r" do |f| rs = f.write end end @tc.assert_equal true, rs end def test_mock_with_yield_kwargs mock = Minitest::Mock.new rs = nil File.stub :open, true, mock, kw:42 do File.open "foo.txt", "r" do |f, kw:| rs = kw end end @tc.assert_equal 42, rs end alias test_stub_value__old test_stub_value # TODO: remove/rename ## Permutation Sets: # [:value, :lambda] # [:*, :block, :block_call] # [:**, :block_args] # # Where: # # :value = a normal value # :lambda = callable or lambda # :* = no block # :block = normal block # :block_call = :lambda invokes the block (N/A for :value) # :** = no args # :args = args passed to stub ## Permutations # [:call, :*, :**] =>5 callable+block FIX: CALL BOTH (bug) # [:call, :*, :**] =>6 callable # [:lambda, :*, :**] => lambda result # [:lambda, :*, :args] => lambda result NO ARGS # [:lambda, :block, :**] =>5 lambda result FIX: CALL BOTH (bug) # [:lambda, :block, :**] =>6 lambda result # [:lambda, :block, :args] =>5 lambda result FIX: CALL BOTH (bug) # [:lambda, :block, :args] =>6 lambda result # [:lambda, :block, :args] =>7 raise ArgumentError # [:lambda, :block_call, :**] =>5 lambda FIX: BUG!-not passed block to lambda # [:lambda, :block_call, :**] =>6 lambda+block result # [:lambda, :block_call, :args] =>5 lambda FIX: BUG!-not passed block to lambda # [:lambda, :block_call, :args] =>6 lambda+block result # [:value, :*, :**] => value # [:value, :*, :args] => value, ignore args # [:value, :block, :**] =>5 value, call block # [:value, :block, :**] =>6 value # [:value, :block, :args] =>5 value, call block w/ args # [:value, :block, :args] =>6 value, call block w/ args, deprecated # [:value, :block, :args] =>7 raise ArgumentError # [:value, :block_call, :**] => N/A # [:value, :block_call, :args] => N/A class Bar def call puts "hi" end end class Foo def self.blocking yield end end class Thingy def self.identity arg arg end end class Keywords def self.args req, kw1:, kw2:24 [req, kw1, kw2] end end def test_stub_callable_keyword_args Keywords.stub :args, ->(*args, **kws) { [args, kws] } do @tc.assert_equal [["woot"], { kw1: 42 }], Keywords.args("woot", kw1: 42) end end def test_stub__hash_as_last_real_arg with_kwargs_env do token = Object.new def token.create_with_retry u, p; raise "shouldn't see this"; end controller = Object.new controller.define_singleton_method :create do |u, p| token.create_with_retry u, p end params = Object.new def params.to_hash; raise "nah"; end token.stub(:create_with_retry, ->(u, p) { 42 }) do act = controller.create :u, params @tc.assert_equal 42, act end end end def test_stub_callable_block_5 # from tenderlove @assertion_count += 1 Foo.stub5 :blocking, Bar.new do @tc.assert_output "hi\n", "" do Foo.blocking do @tc.flunk "shouldn't ever hit this" end end end end def test_stub_callable_block_6 # from tenderlove skip_stub6 @assertion_count += 1 Foo.stub6 :blocking, Bar.new do @tc.assert_output "hi\n", "" do Foo.blocking do @tc.flunk "shouldn't ever hit this" end end end end def test_stub_lambda Thread.stub :new, lambda { 21+21 } do @tc.assert_equal 42, Thread.new end end def test_stub_lambda_args Thread.stub :new, lambda { 21+21 }, :wtf do @tc.assert_equal 42, Thread.new end end def test_stub_lambda_block_5 Thread.stub5 :new, lambda { 21+21 } do result = Thread.new do @tc.flunk "shouldn't ever hit this" end @tc.assert_equal 42, result end end def test_stub_lambda_block_6 skip_stub6 Thread.stub6 :new, lambda { 21+21 } do result = Thread.new do @tc.flunk "shouldn't ever hit this" end @tc.assert_equal 42, result end end def test_stub_lambda_block_args_5 @assertion_count += 1 Thingy.stub5 :identity, lambda { |y| @tc.assert_equal :nope, y; 21+21 }, :WTF? do result = Thingy.identity :nope do |x| @tc.flunk "shouldn't reach this" end @tc.assert_equal 42, result end end def test_stub_lambda_block_args_6 skip_stub6 @assertion_count += 1 Thingy.stub6 :identity, lambda { |y| @tc.assert_equal :nope, y; 21+21 }, :WTF? do result = Thingy.identity :nope do |x| @tc.flunk "shouldn't reach this" end @tc.assert_equal 42, result end end def test_stub_lambda_block_args_6_2 skip_stub6 @tc.assert_raises ArgumentError do Thingy.stub6_2 :identity, lambda { |y| :__not_run__ }, :WTF? do # doesn't matter end end end def test_stub_lambda_block_call_5 @assertion_count += 1 rs = nil io = StringIO.new "", "w" File.stub5 :open, lambda { |p, m, &blk| blk and blk.call io } do File.open "foo.txt", "r" do |f| rs = f && f.write("woot") end end @tc.assert_equal 4, rs @tc.assert_equal "woot", io.string end def test_stub_lambda_block_call_6 skip_stub6 @assertion_count += 1 rs = nil io = StringIO.new "", "w" File.stub6 :open, lambda { |p, m, &blk| blk.call io } do File.open "foo.txt", "r" do |f| rs = f.write("woot") end end @tc.assert_equal 4, rs @tc.assert_equal "woot", io.string end def test_stub_lambda_block_call_args_5 @assertion_count += 1 rs = nil io = StringIO.new "", "w" File.stub5(:open, lambda { |p, m, &blk| blk and blk.call io }, :WTF?) do File.open "foo.txt", "r" do |f| rs = f.write("woot") end end @tc.assert_equal 4, rs @tc.assert_equal "woot", io.string end def test_stub_lambda_block_call_args_6 skip_stub6 @assertion_count += 1 rs = nil io = StringIO.new "", "w" File.stub6(:open, lambda { |p, m, &blk| blk.call io }, :WTF?) do File.open "foo.txt", "r" do |f| rs = f.write("woot") end end @tc.assert_equal 4, rs @tc.assert_equal "woot", io.string end def test_stub_lambda_block_call_args_6_2 skip_stub6 @assertion_count += 2 rs = nil io = StringIO.new "", "w" @tc.assert_raises ArgumentError do File.stub6_2(:open, lambda { |p, m, &blk| blk.call io }, :WTF?) do File.open "foo.txt", "r" do |f| rs = f.write("woot") end end end @tc.assert_nil rs @tc.assert_equal "", io.string end def test_stub_value Thread.stub :new, 42 do result = Thread.new @tc.assert_equal 42, result end end def test_stub_value_args Thread.stub :new, 42, :WTF? do result = Thread.new @tc.assert_equal 42, result end end def test_stub_value_block_5 @assertion_count += 1 Thread.stub5 :new, 42 do result = Thread.new do @tc.assert true end @tc.assert_equal 42, result end end def test_stub_value_block_6 skip_stub6 Thread.stub6 :new, 42 do result = Thread.new do @tc.flunk "shouldn't hit this" end @tc.assert_equal 42, result end end def test_stub_value_block_args_5 @assertion_count += 2 rs = nil io = StringIO.new "", "w" File.stub5 :open, :value, io do result = File.open "foo.txt", "r" do |f| rs = f.write("woot") end @tc.assert_equal :value, result end @tc.assert_equal 4, rs @tc.assert_equal "woot", io.string end def test_stub_value_block_args_5__break_if_not_passed e = @tc.assert_raises NoMethodError do File.stub5 :open, :return_value do # intentionally bad setup w/ no args File.open "foo.txt", "r" do |f| f.write "woot" end end end exp = /undefined method `write' for nil/ assert_match exp, e.message end def test_stub_value_block_args_6 skip_stub6 @assertion_count += 2 rs = nil io = StringIO.new "", "w" assert_deprecated do File.stub6 :open, :value, io do result = File.open "foo.txt", "r" do |f| rs = f.write("woot") end @tc.assert_equal :value, result end end @tc.assert_equal 4, rs @tc.assert_equal "woot", io.string end def test_stub_value_block_args_6_2 skip_stub6 @assertion_count += 2 rs = nil io = StringIO.new "", "w" @tc.assert_raises ArgumentError do File.stub6_2 :open, :value, io do result = File.open "foo.txt", "r" do |f| @tc.flunk "shouldn't hit this" end @tc.assert_equal :value, result end end @tc.assert_nil rs @tc.assert_equal "", io.string end def assert_deprecated re = /deprecated/ assert_output "", re do yield end end def skip_stub6 skip "not yet" unless STUB6 end end STUB6 = ENV["STUB6"] if STUB6 then require "minitest/mock6" if STUB6 else class Object alias stub5 stub alias stub6 stub end end test_minitest_reporter.rb000066400000000000000000000135521446701454400407520ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitestrequire "minitest/autorun" require "minitest/metametameta" require "forwardable" class Runnable def woot assert true end end class TestMinitestReporter < MetaMetaMetaTestCase attr_accessor :r, :io def new_composite_reporter # Ruby bug in older versions of 2.2 & 2.3 on all platforms # Latest Windows builds were 2.2.6 and 2.3.3. Latest Ruby releases were # 2.2.10 and 2.3.8. skip if windows? && RUBY_VERSION < '2.4' reporter = Minitest::CompositeReporter.new reporter << Minitest::SummaryReporter.new(self.io) reporter << Minitest::ProgressReporter.new(self.io) # eg reporter.results -> reporters.first.results reporter.extend Forwardable reporter.delegate :first => :reporters reporter.delegate %i[results count assertions options to_s] => :first reporter end def setup super self.io = StringIO.new("") self.r = new_composite_reporter end def error_test unless defined? @et then @et = Minitest::Test.new(:woot) @et.failures << Minitest::UnexpectedError.new(begin raise "no" rescue => e e end) @et = Minitest::Result.from @et end @et end def fail_test unless defined? @ft then @ft = Minitest::Test.new(:woot) @ft.failures << begin raise Minitest::Assertion, "boo" rescue Minitest::Assertion => e e end @ft = Minitest::Result.from @ft end @ft end def passing_test @pt ||= Minitest::Result.from Minitest::Test.new(:woot) end def skip_test unless defined? @st then @st = Minitest::Test.new(:woot) @st.failures << begin raise Minitest::Skip rescue Minitest::Assertion => e e end @st = Minitest::Result.from @st end @st end def test_to_s r.record passing_test r.record fail_test assert_match "woot", r.to_s end def test_options_skip_F r.options[:skip] = "F" r.record passing_test r.record fail_test refute_match "woot", r.to_s end def test_options_skip_E r.options[:skip] = "E" r.record passing_test r.record error_test refute_match "RuntimeError: no", r.to_s end def test_passed_eh_empty assert_predicate r, :passed? end def test_passed_eh_failure r.results << fail_test refute_predicate r, :passed? end SKIP_MSG = "\n\nYou have skipped tests. Run with --verbose for details." def test_passed_eh_error r.start r.results << error_test refute_predicate r, :passed? r.report refute_match SKIP_MSG, io.string end def test_passed_eh_skipped r.start r.results << skip_test assert r.passed? restore_env do r.report end assert_match SKIP_MSG, io.string end def test_passed_eh_skipped_verbose r.options[:verbose] = true r.start r.results << skip_test assert r.passed? r.report refute_match SKIP_MSG, io.string end def test_start r.start exp = "Run options: \n\n# Running:\n\n" assert_equal exp, io.string end def test_record_pass r.record passing_test assert_equal ".", io.string assert_empty r.results assert_equal 1, r.count assert_equal 0, r.assertions end def test_record_fail fail_test = self.fail_test r.record fail_test assert_equal "F", io.string assert_equal [fail_test], r.results assert_equal 1, r.count assert_equal 0, r.assertions end def test_record_error error_test = self.error_test r.record error_test assert_equal "E", io.string assert_equal [error_test], r.results assert_equal 1, r.count assert_equal 0, r.assertions end def test_record_skip skip_test = self.skip_test r.record skip_test assert_equal "S", io.string assert_equal [skip_test], r.results assert_equal 1, r.count assert_equal 0, r.assertions end def test_report_empty r.start r.report exp = clean <<-EOM Run options: # Running: Finished in 0.00 0 runs, 0 assertions, 0 failures, 0 errors, 0 skips EOM assert_equal exp, normalize_output(io.string) end def test_report_passing r.start r.record passing_test r.report exp = clean <<-EOM Run options: # Running: . Finished in 0.00 1 runs, 0 assertions, 0 failures, 0 errors, 0 skips EOM assert_equal exp, normalize_output(io.string) end def test_report_failure r.start r.record fail_test r.report exp = clean <<-EOM Run options: # Running: F Finished in 0.00 1) Failure: Minitest::Test#woot [FILE:LINE]: boo 1 runs, 0 assertions, 1 failures, 0 errors, 0 skips EOM assert_equal exp, normalize_output(io.string) end def test_report_error r.start r.record error_test r.report exp = clean <<-EOM Run options: # Running: E Finished in 0.00 1) Error: Minitest::Test#woot: RuntimeError: no FILE:LINE:in `error_test' FILE:LINE:in `test_report_error' 1 runs, 0 assertions, 0 failures, 1 errors, 0 skips EOM assert_equal exp, normalize_output(io.string) end def test_report_skipped r.start r.record skip_test restore_env do r.report end exp = clean <<-EOM Run options: # Running: S Finished in 0.00 1 runs, 0 assertions, 0 failures, 0 errors, 1 skips You have skipped tests. Run with --verbose for details. EOM assert_equal exp, normalize_output(io.string) end end test_minitest_spec.rb000066400000000000000000000716651446701454400400530ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitest# encoding: utf-8 require "minitest/metametameta" require "stringio" class MiniSpecA < Minitest::Spec; end class MiniSpecB < Minitest::Test; extend Minitest::Spec::DSL; end class MiniSpecC < MiniSpecB; end class NamedExampleA < MiniSpecA; end class NamedExampleB < MiniSpecB; end class NamedExampleC < MiniSpecC; end class ExampleA; end class ExampleB < ExampleA; end describe Minitest::Spec do # helps to deal with 2.4 deprecation of Fixnum for Integer Int = 1.class # do not parallelize this suite... it just can"t handle it. def assert_triggered expected = "blah", klass = Minitest::Assertion @assertion_count += 1 e = assert_raises(klass) do yield end msg = e.message.sub(/(---Backtrace---).*/m, '\1') msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)") msg.gsub!(/(\d\.\d{6})\d+/, '\1xxx') # normalize: ruby version, impl, platform msg.gsub!(/:0x[Xa-fA-F0-9]{4,}[ @].+?>/, ":0xXXXXXX@PATH>") if expected @assertion_count += 1 case expected when String then assert_equal expected, msg when Regexp then @assertion_count += 1 assert_match expected, msg else flunk "Unknown: #{expected.inspect}" end end end def assert_success spec assert_equal true, spec end before do @assertion_count = 4 end after do _(self.assertions).must_equal @assertion_count if passed? and not skipped? end it "needs to be able to catch a Minitest::Assertion exception" do @assertion_count = 1 assert_triggered "Expected 1 to not be equal to 1." do _(1).wont_equal 1 end end it "needs to check for file existence" do @assertion_count = 3 assert_success _(__FILE__).path_must_exist assert_triggered "Expected path 'blah' to exist." do _("blah").path_must_exist end end it "needs to check for file non-existence" do @assertion_count = 3 assert_success _("blah").path_wont_exist assert_triggered "Expected path '#{__FILE__}' to not exist." do _(__FILE__).path_wont_exist end end it "needs to be sensible about must_include order" do @assertion_count += 3 # must_include is 2 assertions assert_success _([1, 2, 3]).must_include(2) assert_triggered "Expected [1, 2, 3] to include 5." do _([1, 2, 3]).must_include 5 end assert_triggered "msg.\nExpected [1, 2, 3] to include 5." do _([1, 2, 3]).must_include 5, "msg" end end it "needs to be sensible about wont_include order" do @assertion_count += 3 # wont_include is 2 assertions assert_success _([1, 2, 3]).wont_include(5) assert_triggered "Expected [1, 2, 3] to not include 2." do _([1, 2, 3]).wont_include 2 end assert_triggered "msg.\nExpected [1, 2, 3] to not include 2." do _([1, 2, 3]).wont_include 2, "msg" end end it "needs to catch an expected exception" do @assertion_count = 2 expect { raise "blah" }.must_raise RuntimeError expect { raise Minitest::Assertion }.must_raise Minitest::Assertion end it "needs to catch an unexpected exception" do @assertion_count -= 2 # no positive msg = <<-EOM.gsub(/^ {6}/, "").chomp [RuntimeError] exception expected, not Class: Message: <"woot"> ---Backtrace--- EOM assert_triggered msg do expect { raise StandardError, "woot" }.must_raise RuntimeError end assert_triggered "msg.\n#{msg}" do expect { raise StandardError, "woot" }.must_raise RuntimeError, "msg" end end def good_pattern capture_io do # 3.0 is noisy eval "[1,2,3] => [Integer, Integer, Integer]" # eval to escape parser for ruby<3 end end def bad_pattern capture_io do # 3.0 is noisy eval "[1,2,3] => [Integer, Integer]" # eval to escape parser for ruby<3 end end it "needs to pattern match" do @assertion_count = 1 if RUBY_VERSION > "3" then expect { good_pattern }.must_pattern_match else assert_raises NotImplementedError do expect {}.must_pattern_match end end end it "needs to error on bad pattern match" do skip unless RUBY_VERSION > "3" @assertion_count = 1 exp = if RUBY_VERSION.start_with? "3.0" "[1, 2, 3]" # terrible error message! else /length mismatch/ end assert_triggered exp do expect { bad_pattern }.must_pattern_match end end it "needs to ensure silence" do @assertion_count -= 1 # no msg @assertion_count += 2 # assert_output is 2 assertions assert_success expect {}.must_be_silent assert_triggered "In stdout.\nExpected: \"\"\n Actual: \"xxx\"" do expect { print "xxx" }.must_be_silent end end it "needs to have all methods named well" do skip "N/A" if ENV["MT_NO_EXPECTATIONS"] @assertion_count = 2 methods = Minitest::Expectations.public_instance_methods.grep(/must|wont/) methods.map!(&:to_s) if Symbol === methods.first musts, wonts = methods.sort.partition { |m| m =~ /must/ } expected_musts = %w[must_be must_be_close_to must_be_empty must_be_instance_of must_be_kind_of must_be_nil must_be_same_as must_be_silent must_be_within_delta must_be_within_epsilon must_equal must_include must_match must_output must_pattern_match must_raise must_respond_to must_throw path_must_exist] bad = %w[not raise throw send output be_silent] expected_wonts = expected_musts.map { |m| m.sub(/must/, "wont") }.sort expected_wonts.reject! { |m| m =~ /wont_#{Regexp.union(*bad)}/ } _(musts).must_equal expected_musts _(wonts).must_equal expected_wonts end it "needs to raise if an expected exception is not raised" do @assertion_count -= 2 # no positive test assert_triggered "RuntimeError expected but nothing was raised." do expect { 42 }.must_raise RuntimeError end assert_triggered "msg.\nRuntimeError expected but nothing was raised." do expect { 42 }.must_raise RuntimeError, "msg" end end it "needs to verify binary messages" do assert_success _(42).wont_be(:<, 24) assert_triggered "Expected 24 to not be < 42." do _(24).wont_be :<, 42 end assert_triggered "msg.\nExpected 24 to not be < 42." do _(24).wont_be :<, 42, "msg" end end it "needs to verify emptyness" do @assertion_count += 3 # empty is 2 assertions assert_success _([]).must_be_empty assert_triggered "Expected [42] to be empty." do _([42]).must_be_empty end assert_triggered "msg.\nExpected [42] to be empty." do _([42]).must_be_empty "msg" end end it "needs to verify equality" do @assertion_count += 1 assert_success _(6 * 7).must_equal(42) assert_triggered "Expected: 42\n Actual: 54" do _(6 * 9).must_equal 42 end assert_triggered "msg.\nExpected: 42\n Actual: 54" do _(6 * 9).must_equal 42, "msg" end assert_triggered(/^-42\n\+#\n/) do _(proc { 42 }).must_equal 42 # proc isn't called, so expectation fails end end it "needs to warn on equality with nil" do @assertion_count += 1 # extra test out, err = capture_io do assert_success _(nil).must_equal(nil) end exp = "DEPRECATED: Use assert_nil if expecting nil from #{__FILE__}:#{__LINE__-3}. " \ "This will fail in Minitest 6.\n" exp = "" if $-w.nil? assert_empty out assert_equal exp, err end it "needs to verify floats outside a delta" do @assertion_count += 1 # extra test assert_success _(24).wont_be_close_to(42) assert_triggered "Expected |42 - 42.0| (0.0) to not be <= 0.001." do _(6 * 7.0).wont_be_close_to 42 end x = "1.0e-05" assert_triggered "Expected |42 - 42.0| (0.0) to not be <= #{x}." do _(6 * 7.0).wont_be_close_to 42, 0.00001 end assert_triggered "msg.\nExpected |42 - 42.0| (0.0) to not be <= #{x}." do _(6 * 7.0).wont_be_close_to 42, 0.00001, "msg" end end it "needs to verify floats outside an epsilon" do @assertion_count += 1 # extra test assert_success _(24).wont_be_within_epsilon(42) x = "0.042" assert_triggered "Expected |42 - 42.0| (0.0) to not be <= #{x}." do _(6 * 7.0).wont_be_within_epsilon 42 end x = "0.00042" assert_triggered "Expected |42 - 42.0| (0.0) to not be <= #{x}." do _(6 * 7.0).wont_be_within_epsilon 42, 0.00001 end assert_triggered "msg.\nExpected |42 - 42.0| (0.0) to not be <= #{x}." do _(6 * 7.0).wont_be_within_epsilon 42, 0.00001, "msg" end end it "needs to verify floats within a delta" do @assertion_count += 1 # extra test assert_success _(6.0 * 7).must_be_close_to(42.0) assert_triggered "Expected |0.0 - 0.01| (0.01) to be <= 0.001." do _(1.0 / 100).must_be_close_to 0.0 end x = "1.0e-06" assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= #{x}." do _(1.0 / 1000).must_be_close_to 0.0, 0.000001 end assert_triggered "msg.\nExpected |0.0 - 0.001| (0.001) to be <= #{x}." do _(1.0 / 1000).must_be_close_to 0.0, 0.000001, "msg" end end it "needs to verify floats within an epsilon" do @assertion_count += 1 # extra test assert_success _(6.0 * 7).must_be_within_epsilon(42.0) assert_triggered "Expected |0.0 - 0.01| (0.01) to be <= 0.0." do _(1.0 / 100).must_be_within_epsilon 0.0 end assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= 0.0." do _(1.0 / 1000).must_be_within_epsilon 0.0, 0.000001 end assert_triggered "msg.\nExpected |0.0 - 0.001| (0.001) to be <= 0.0." do _(1.0 / 1000).must_be_within_epsilon 0.0, 0.000001, "msg" end end it "needs to verify identity" do assert_success _(1).must_be_same_as(1) assert_triggered "Expected 1 (oid=N) to be the same as 2 (oid=N)." do _(1).must_be_same_as 2 end assert_triggered "msg.\nExpected 1 (oid=N) to be the same as 2 (oid=N)." do _(1).must_be_same_as 2, "msg" end end it "needs to verify inequality" do @assertion_count += 2 assert_success _(42).wont_equal(6 * 9) assert_success _(proc {}).wont_equal(42) assert_triggered "Expected 1 to not be equal to 1." do _(1).wont_equal 1 end assert_triggered "msg.\nExpected 1 to not be equal to 1." do _(1).wont_equal 1, "msg" end end it "needs to verify instances of a class" do assert_success _(42).wont_be_instance_of(String) assert_triggered "Expected 42 to not be a kind of #{Int.name}." do _(42).wont_be_kind_of Int end assert_triggered "msg.\nExpected 42 to not be an instance of #{Int.name}." do _(42).wont_be_instance_of Int, "msg" end end it "needs to verify kinds of a class" do @assertion_count += 2 assert_success _(42).wont_be_kind_of(String) assert_success _(proc {}).wont_be_kind_of(String) assert_triggered "Expected 42 to not be a kind of #{Int.name}." do _(42).wont_be_kind_of Int end assert_triggered "msg.\nExpected 42 to not be a kind of #{Int.name}." do _(42).wont_be_kind_of Int, "msg" end end it "needs to verify kinds of objects" do @assertion_count += 3 # extra test assert_success _(6 * 7).must_be_kind_of(Int) assert_success _(6 * 7).must_be_kind_of(Numeric) assert_triggered "Expected 42 to be a kind of String, not #{Int.name}." do _(6 * 7).must_be_kind_of String end assert_triggered "msg.\nExpected 42 to be a kind of String, not #{Int.name}." do _(6 * 7).must_be_kind_of String, "msg" end exp = "Expected # to be a kind of String, not Proc." assert_triggered exp do _(proc {}).must_be_kind_of String end end it "needs to verify mismatch" do @assertion_count += 3 # match is 2 assert_success _("blah").wont_match(/\d+/) assert_triggered "Expected /\\w+/ to not match \"blah\"." do _("blah").wont_match(/\w+/) end assert_triggered "msg.\nExpected /\\w+/ to not match \"blah\"." do _("blah").wont_match(/\w+/, "msg") end end it "needs to verify nil" do assert_success _(nil).must_be_nil assert_triggered "Expected 42 to be nil." do _(42).must_be_nil end assert_triggered "msg.\nExpected 42 to be nil." do _(42).must_be_nil "msg" end end it "needs to verify non-emptyness" do @assertion_count += 3 # empty is 2 assertions assert_success _(["some item"]).wont_be_empty assert_triggered "Expected [] to not be empty." do _([]).wont_be_empty end assert_triggered "msg.\nExpected [] to not be empty." do _([]).wont_be_empty "msg" end end it "needs to verify non-identity" do assert_success _(1).wont_be_same_as(2) assert_triggered "Expected 1 (oid=N) to not be the same as 1 (oid=N)." do _(1).wont_be_same_as 1 end assert_triggered "msg.\nExpected 1 (oid=N) to not be the same as 1 (oid=N)." do _(1).wont_be_same_as 1, "msg" end end it "needs to verify non-nil" do assert_success _(42).wont_be_nil assert_triggered "Expected nil to not be nil." do _(nil).wont_be_nil end assert_triggered "msg.\nExpected nil to not be nil." do _(nil).wont_be_nil "msg" end end it "needs to verify objects not responding to a message" do assert_success _("").wont_respond_to(:woot!) assert_triggered "Expected \"\" to not respond to to_s." do _("").wont_respond_to :to_s end assert_triggered "msg.\nExpected \"\" to not respond to to_s." do _("").wont_respond_to :to_s, "msg" end end it "needs to verify output in stderr" do @assertion_count -= 1 # no msg assert_success expect { $stderr.print "blah" }.must_output(nil, "blah") assert_triggered "In stderr.\nExpected: \"blah\"\n Actual: \"xxx\"" do expect { $stderr.print "xxx" }.must_output(nil, "blah") end end it "needs to verify output in stdout" do @assertion_count -= 1 # no msg assert_success expect { print "blah" }.must_output("blah") assert_triggered "In stdout.\nExpected: \"blah\"\n Actual: \"xxx\"" do expect { print "xxx" }.must_output("blah") end end it "needs to verify regexp matches" do @assertion_count += 3 # must_match is 2 assertions assert_kind_of MatchData, _("blah").must_match(/\w+/) assert_triggered "Expected /\\d+/ to match \"blah\"." do _("blah").must_match(/\d+/) end assert_triggered "msg.\nExpected /\\d+/ to match \"blah\"." do _("blah").must_match(/\d+/, "msg") end end describe "expect" do before do @assertion_count -= 3 end it "can use expect" do _(1 + 1).must_equal 2 end it "can use expect with a lambda" do _ { raise "blah" }.must_raise RuntimeError end it "can use expect in a thread" do Thread.new { _(1 + 1).must_equal 2 }.join end it "can NOT use must_equal in a thread. It must use expect in a thread" do skip "N/A" if ENV["MT_NO_EXPECTATIONS"] assert_raises RuntimeError do capture_io do Thread.new { (1 + 1).must_equal 2 }.join end end end it "fails gracefully when expectation used outside of `it`" do skip "N/A" if ENV["MT_NO_EXPECTATIONS"] @assertion_count += 1 e = assert_raises RuntimeError do capture_io do Thread.new { # forces ctx to be nil describe("woot") do (1 + 1).must_equal 2 end }.join end end assert_equal "Calling #must_equal outside of test.", e.message end it "deprecates expectation used without _" do skip "N/A" if ENV["MT_NO_EXPECTATIONS"] @assertion_count += 3 exp = /DEPRECATED: global use of must_equal from/ assert_output "", exp do (1 + 1).must_equal 2 end end # https://github.com/seattlerb/minitest/issues/837 # https://github.com/rails/rails/pull/39304 it "deprecates expectation used without _ with empty backtrace_filter" do skip "N/A" if ENV["MT_NO_EXPECTATIONS"] @assertion_count += 3 exp = /DEPRECATED: global use of must_equal from/ with_empty_backtrace_filter do assert_output "", exp do (1 + 1).must_equal 2 end end end end it "needs to verify throw" do @assertion_count += 4 # 2 extra tests assert_nil expect { throw :blah }.must_throw(:blah) assert_equal 42, expect { throw :blah, 42 }.must_throw(:blah) assert_triggered "Expected :blah to have been thrown." do expect {}.must_throw :blah end assert_triggered "Expected :blah to have been thrown, not :xxx." do expect { throw :xxx }.must_throw :blah end assert_triggered "msg.\nExpected :blah to have been thrown." do expect {}.must_throw :blah, "msg" end assert_triggered "msg.\nExpected :blah to have been thrown, not :xxx." do expect { throw :xxx }.must_throw :blah, "msg" end end it "needs to verify types of objects" do assert_success _(6 * 7).must_be_instance_of(Int) exp = "Expected 42 to be an instance of String, not #{Int.name}." assert_triggered exp do _(6 * 7).must_be_instance_of String end assert_triggered "msg.\n#{exp}" do _(6 * 7).must_be_instance_of String, "msg" end end it "needs to verify using any (negative) predicate" do @assertion_count -= 1 # doesn"t take a message assert_success _("blah").wont_be(:empty?) assert_triggered "Expected \"\" to not be empty?." do _("").wont_be :empty? end end it "needs to verify using any binary operator" do @assertion_count -= 1 # no msg assert_success _(41).must_be(:<, 42) assert_triggered "Expected 42 to be < 41." do _(42).must_be(:<, 41) end end it "needs to verify using any predicate" do @assertion_count -= 1 # no msg assert_success _("").must_be(:empty?) assert_triggered "Expected \"blah\" to be empty?." do _("blah").must_be :empty? end end it "needs to verify using respond_to" do assert_success _(42).must_respond_to(:+) assert_triggered "Expected 42 (#{Int.name}) to respond to #clear." do _(42).must_respond_to :clear end assert_triggered "msg.\nExpected 42 (#{Int.name}) to respond to #clear." do _(42).must_respond_to :clear, "msg" end end end describe Minitest::Spec, :let do i_suck_and_my_tests_are_order_dependent! def _count $let_count ||= 0 end let :count do $let_count += 1 $let_count end it "is evaluated once per example" do _(_count).must_equal 0 _(count).must_equal 1 _(count).must_equal 1 _(_count).must_equal 1 end it "is REALLY evaluated once per example" do _(_count).must_equal 1 _(count).must_equal 2 _(count).must_equal 2 _(_count).must_equal 2 end it 'raises an error if the name begins with "test"' do expect { self.class.let(:test_value) { true } }.must_raise ArgumentError end it "raises an error if the name shadows a normal instance method" do expect { self.class.let(:message) { true } }.must_raise ArgumentError end it "doesn't raise an error if it is just another let" do v = proc do describe :outer do let(:bar) describe :inner do let(:bar) end end :good end.call _(v).must_equal :good end it "procs come after dont_flip" do p = proc {} assert_respond_to p, :call _(p).must_respond_to :call end end describe Minitest::Spec, :subject do attr_reader :subject_evaluation_count subject do @subject_evaluation_count ||= 0 @subject_evaluation_count += 1 @subject_evaluation_count end it "is evaluated once per example" do _(subject).must_equal 1 _(subject).must_equal 1 _(subject_evaluation_count).must_equal 1 end end class TestMetaStatic < Minitest::Test def assert_method_count expected, klass assert_equal expected, klass.public_instance_methods.grep(/^test_/).count end def test_children Minitest::Spec.children.clear # prevents parallel run y = z = nil x = describe "top-level thingy" do y = describe "first thingy" do end it "top-level-it" do end z = describe "second thingy" do end end assert_equal [x], Minitest::Spec.children assert_equal [y, z], x.children assert_equal [], y.children assert_equal [], z.children end def test_it_wont_remove_existing_child_test_methods Minitest::Spec.children.clear # prevents parallel run inner = nil outer = describe "outer" do inner = describe "inner" do it do assert true end end it do assert true end end assert_method_count 1, outer assert_method_count 1, inner end def test_it_wont_add_test_methods_to_children Minitest::Spec.children.clear # prevents parallel run inner = nil outer = describe "outer" do inner = describe "inner" do end it do assert true end end assert_method_count 1, outer assert_method_count 0, inner end end class TestMeta < MetaMetaMetaTestCase # do not call parallelize_me! here because specs use register_spec_type globally def assert_defined_methods expected, klass assert_equal expected, klass.instance_methods(false).sort.map(&:to_s) end def util_structure y = z = nil before_list = [] after_list = [] x = describe "top-level thingy" do before { before_list << 1 } after { after_list << 1 } it "top-level-it" do end y = describe "inner thingy" do before { before_list << 2 } after { after_list << 2 } it "inner-it" do end z = describe "very inner thingy" do before { before_list << 3 } after { after_list << 3 } it "inner-it" do end it { } # ignore me specify { } # anonymous it end end end return x, y, z, before_list, after_list end def test_register_spec_type original_types = Minitest::Spec::TYPES.dup assert_includes Minitest::Spec::TYPES, [//, Minitest::Spec] Minitest::Spec.register_spec_type(/woot/, TestMeta) p = lambda do |_| true end Minitest::Spec.register_spec_type TestMeta, &p keys = Minitest::Spec::TYPES.map(&:first) assert_includes keys, /woot/ assert_includes keys, p ensure Minitest::Spec::TYPES.replace original_types end def test_spec_type original_types = Minitest::Spec::TYPES.dup Minitest::Spec.register_spec_type(/A$/, MiniSpecA) Minitest::Spec.register_spec_type MiniSpecB do |desc| desc.superclass == ExampleA end Minitest::Spec.register_spec_type MiniSpecC do |_desc, *addl| addl.include? :woot end assert_equal MiniSpecA, Minitest::Spec.spec_type(ExampleA) assert_equal MiniSpecB, Minitest::Spec.spec_type(ExampleB) assert_equal MiniSpecC, Minitest::Spec.spec_type(ExampleB, :woot) ensure Minitest::Spec::TYPES.replace original_types end def test_bug_dsl_expectations spec_class = Class.new MiniSpecB do it "should work" do _(0).must_equal 0 end end test_name = spec_class.instance_methods.sort.grep(/test_/).first spec = spec_class.new test_name result = spec.run assert spec.passed? assert result.passed? assert_equal 1, result.assertions end def test_name spec_a = describe ExampleA do; end spec_b = describe ExampleB, :random_method do; end spec_c = describe ExampleB, :random_method, :addl_context do; end assert_equal "ExampleA", spec_a.name assert_equal "ExampleB::random_method", spec_b.name assert_equal "ExampleB::random_method::addl_context", spec_c.name end def test_name2 assert_equal "NamedExampleA", NamedExampleA.name assert_equal "NamedExampleB", NamedExampleB.name assert_equal "NamedExampleC", NamedExampleC.name spec_a = describe ExampleA do; end spec_b = describe ExampleB, :random_method do; end assert_equal "ExampleA", spec_a.name assert_equal "ExampleB::random_method", spec_b.name end def test_structure x, y, z, * = util_structure assert_equal "top-level thingy", x.to_s assert_equal "top-level thingy::inner thingy", y.to_s assert_equal "top-level thingy::inner thingy::very inner thingy", z.to_s assert_equal "top-level thingy", x.desc assert_equal "inner thingy", y.desc assert_equal "very inner thingy", z.desc top_methods = %w[setup teardown test_0001_top-level-it] inner_methods1 = %w[setup teardown test_0001_inner-it] inner_methods2 = inner_methods1 + %w[test_0002_anonymous test_0003_anonymous] assert_defined_methods top_methods, x assert_defined_methods inner_methods1, y assert_defined_methods inner_methods2, z end def test_structure_postfix_it z = nil y = describe "outer" do # NOT here, below the inner-describe! # it "inner-it" do end z = describe "inner" do it "inner-it" do end end # defined AFTER inner describe means we'll try to wipe out the inner-it it "inner-it" do end end assert_defined_methods %w[test_0001_inner-it], y assert_defined_methods %w[test_0001_inner-it], z end def test_setup_teardown_behavior _, _, z, before_list, after_list = util_structure @tu = z run_tu_with_fresh_reporter size = z.runnable_methods.size assert_equal [1, 2, 3] * size, before_list assert_equal [3, 2, 1] * size, after_list end def test_describe_first_structure x1 = x2 = y = z = nil x = describe "top-level thingy" do y = describe "first thingy" do end x1 = it "top level it" do end x2 = it "не латинские &いった α, β, γ, δ, ε hello!!! world" do end z = describe "second thingy" do end end test_methods = ["test_0001_top level it", "test_0002_не латинские &いった α, β, γ, δ, ε hello!!! world", ].sort assert_equal test_methods, [x1, x2] assert_defined_methods test_methods, x assert_defined_methods [], y assert_defined_methods [], z end def test_structure_subclasses z = nil x = Class.new Minitest::Spec do def xyz; end end y = Class.new x do z = describe("inner") { } end assert_respond_to x.new(nil), "xyz" assert_respond_to y.new(nil), "xyz" assert_respond_to z.new(nil), "xyz" end end class TestSpecInTestCase < MetaMetaMetaTestCase def setup super Thread.current[:current_spec] = self @tc = self @assertion_count = 2 end def assert_triggered expected, klass = Minitest::Assertion @assertion_count += 1 e = assert_raises klass do yield end msg = e.message.sub(/(---Backtrace---).*/m, "\1") msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)") assert_equal expected, msg end def teardown msg = "expected #{@assertion_count} assertions, not #{@tc.assertions}" assert_equal @assertion_count, @tc.assertions, msg end def test_expectation @tc.assert_equal true, _(1).must_equal(1) end def test_expectation_triggered assert_triggered "Expected: 2\n Actual: 1" do _(1).must_equal 2 end end include Minitest::Spec::DSL::InstanceMethods def test_expectation_with_a_message assert_triggered "woot.\nExpected: 2\n Actual: 1" do _(1).must_equal 2, "woot" end end end class ValueMonadTest < Minitest::Test attr_accessor :struct def setup @struct = { :_ => "a", :value => "b", :expect => "c" } def @struct.method_missing k # think openstruct self[k] end end def test_value_monad_method assert_equal "a", struct._ end def test_value_monad_value_alias assert_equal "b", struct.value end def test_value_monad_expect_alias assert_equal "c", struct.expect end end describe Minitest::Spec, :infect_an_assertion do class << self attr_accessor :infect_mock end def assert_infects exp, act, msg = nil, foo: nil, bar: nil self.class.infect_mock.assert_infects exp, act, msg, foo: foo, bar: bar end infect_an_assertion :assert_infects, :must_infect infect_an_assertion :assert_infects, :must_infect_without_flipping, :dont_flip it "infects assertions with kwargs" do mock = Minitest::Mock.new mock.expect :assert_infects, true, [:exp, :act, nil], foo: :foo, bar: :bar self.class.infect_mock = mock _(:act).must_infect :exp, foo: :foo, bar: :bar assert_mock mock end it "infects assertions with kwargs (dont_flip)" do mock = Minitest::Mock.new mock.expect :assert_infects, true, [:act, :exp, nil], foo: :foo, bar: :bar self.class.infect_mock = mock _(:act).must_infect_without_flipping :exp, foo: :foo, bar: :bar assert_mock mock end end test_minitest_test.rb000066400000000000000000000706221446701454400400700ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitest# encoding: UTF-8 require "pathname" require "minitest/metametameta" if defined? Encoding then e = Encoding.default_external if e != Encoding::UTF_8 then warn "" warn "" warn "NOTE: External encoding #{e} is not UTF-8. Tests WILL fail." warn " Run tests with `RUBYOPT=-Eutf-8 rake` to avoid errors." warn "" warn "" end end class Minitest::Runnable def whatever # faked for testing assert true end end class TestMinitestUnit < MetaMetaMetaTestCase parallelize_me! pwd = Pathname.new File.expand_path Dir.pwd basedir = Pathname.new(File.expand_path "lib/minitest") + "mini" basedir = basedir.relative_path_from(pwd).to_s MINITEST_BASE_DIR = basedir[/\A\./] ? basedir : "./#{basedir}" BT_MIDDLE = ["#{MINITEST_BASE_DIR}/test.rb:161:in `each'", "#{MINITEST_BASE_DIR}/test.rb:158:in `each'", "#{MINITEST_BASE_DIR}/test.rb:139:in `run'", "#{MINITEST_BASE_DIR}/test.rb:106:in `run'"] def test_filter_backtrace # this is a semi-lame mix of relative paths. # I cheated by making the autotest parts not have ./ bt = (["lib/autotest.rb:571:in `add_exception'", "test/test_autotest.rb:62:in `test_add_exception'", "#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] + BT_MIDDLE + ["#{MINITEST_BASE_DIR}/test.rb:29", "test/test_autotest.rb:422"]) bt = util_expand_bt bt ex = ["lib/autotest.rb:571:in `add_exception'", "test/test_autotest.rb:62:in `test_add_exception'"] ex = util_expand_bt ex Minitest::Test.io_lock.synchronize do # try not to trounce in parallel fu = Minitest.filter_backtrace(bt) assert_equal ex, fu end end def test_filter_backtrace_all_unit bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] + BT_MIDDLE + ["#{MINITEST_BASE_DIR}/test.rb:29"]) ex = bt.clone fu = Minitest.filter_backtrace(bt) assert_equal ex, fu end def test_filter_backtrace_unit_starts bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] + BT_MIDDLE + ["#{MINITEST_BASE_DIR}/mini/test.rb:29", "-e:1"]) bt = util_expand_bt bt ex = ["-e:1"] Minitest::Test.io_lock.synchronize do # try not to trounce in parallel fu = Minitest.filter_backtrace bt assert_equal ex, fu end end def test_filter_backtrace__empty with_empty_backtrace_filter do bt = %w[first second third] fu = Minitest.filter_backtrace bt.dup assert_equal bt, fu end end def test_infectious_binary_encoding @tu = Class.new FakeNamedTest do def test_this_is_not_ascii_assertion assert_equal "ЁЁЁ", "ёёё" end def test_this_is_non_ascii_failure_message fail 'ЁЁЁ'.force_encoding('ASCII-8BIT') end end expected = clean <<-EOM FE Finished in 0.00 1) Failure: FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]: Expected: \"ЁЁЁ\" Actual: \"ёёё\" 2) Error: FakeNamedTestXX#test_this_is_non_ascii_failure_message: RuntimeError: ЁЁЁ FILE:LINE:in `test_this_is_non_ascii_failure_message' 2 runs, 1 assertions, 1 failures, 1 errors, 0 skips EOM Minitest::Test.io_lock.synchronize do # try not to trounce in parallel assert_report expected end end def test_passed_eh_teardown_good test_class = Class.new FakeNamedTest do def teardown; assert true; end def test_omg; assert true; end end test = test_class.new :test_omg test.run refute_predicate test, :error? assert_predicate test, :passed? refute_predicate test, :skipped? end def test_passed_eh_teardown_skipped test_class = Class.new FakeNamedTest do def teardown; assert true; end def test_omg; skip "bork"; end end test = test_class.new :test_omg test.run refute_predicate test, :error? refute_predicate test, :passed? assert_predicate test, :skipped? end def test_passed_eh_teardown_flunked test_class = Class.new FakeNamedTest do def teardown; flunk; end def test_omg; assert true; end end test = test_class.new :test_omg test.run refute_predicate test, :error? refute_predicate test, :passed? refute_predicate test, :skipped? end def util_expand_bt bt bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f } end end class TestMinitestUnitInherited < MetaMetaMetaTestCase def with_overridden_include Class.class_eval do def inherited_with_hacks _klass throw :inherited_hook end alias inherited_without_hacks inherited alias inherited inherited_with_hacks alias IGNORE_ME! inherited # 1.8 bug. god I love venture bros end yield ensure Class.class_eval do alias inherited inherited_without_hacks undef_method :inherited_with_hacks undef_method :inherited_without_hacks end refute_respond_to Class, :inherited_with_hacks refute_respond_to Class, :inherited_without_hacks end def test_inherited_hook_plays_nice_with_others with_overridden_include do assert_throws :inherited_hook do Class.new FakeNamedTest end end end end class TestMinitestRunner < MetaMetaMetaTestCase # do not parallelize this suite... it just can't handle it. def test_class_runnables @assertion_count = 0 tc = Class.new(Minitest::Test) assert_equal 1, Minitest::Test.runnables.size assert_equal [tc], Minitest::Test.runnables end def test_run_test @tu = Class.new FakeNamedTest do attr_reader :foo def run @foo = "hi mom!" r = super @foo = "okay" r end def test_something assert_equal "hi mom!", foo end end expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_report expected end def test_run_error @tu = Class.new FakeNamedTest do def test_something assert true end def test_error raise "unhandled exception" end end expected = clean <<-EOM .E Finished in 0.00 1) Error: FakeNamedTestXX#test_error: RuntimeError: unhandled exception FILE:LINE:in \`test_error\' 2 runs, 1 assertions, 0 failures, 1 errors, 0 skips EOM assert_report expected end def test_run_error_teardown @tu = Class.new FakeNamedTest do def test_something assert true end def teardown raise "unhandled exception" end end expected = clean <<-EOM E Finished in 0.00 1) Error: FakeNamedTestXX#test_something: RuntimeError: unhandled exception FILE:LINE:in \`teardown\' 1 runs, 1 assertions, 0 failures, 1 errors, 0 skips EOM assert_report expected end def test_run_failing setup_basic_tu expected = clean <<-EOM .F Finished in 0.00 1) Failure: FakeNamedTestXX#test_failure [FILE:LINE]: Expected false to be truthy. 2 runs, 2 assertions, 1 failures, 0 errors, 0 skips EOM assert_report expected end def setup_basic_tu @tu = Class.new FakeNamedTest do def test_something assert true end def test_failure assert false end end end def test_seed # this is set for THIS run, so I'm not testing it's actual value assert_instance_of Integer, Minitest.seed end def test_run_failing_filtered setup_basic_tu expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_report expected, %w[--name /some|thing/ --seed 42] end def assert_filtering filter, name, expected, a = false args = %W[--#{filter} #{name} --seed 42] alpha = Class.new FakeNamedTest do define_method :test_something do assert a end end Object.const_set(:Alpha, alpha) beta = Class.new FakeNamedTest do define_method :test_something do assert true end end Object.const_set(:Beta, beta) @tus = [alpha, beta] assert_report expected, args ensure Object.send :remove_const, :Alpha Object.send :remove_const, :Beta end def test_run_filtered_including_suite_name expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_filtering "name", "/Beta#test_something/", expected end def test_run_filtered_including_suite_name_string expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_filtering "name", "Beta#test_something", expected end def test_run_filtered_string_method_only expected = clean <<-EOM .. Finished in 0.00 2 runs, 2 assertions, 0 failures, 0 errors, 0 skips EOM assert_filtering "name", "test_something", expected, :pass end def test_run_failing_excluded setup_basic_tu expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_report expected, %w[--exclude /failure/ --seed 42] end def test_run_filtered_excluding_suite_name expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_filtering "exclude", "/Alpha#test_something/", expected end def test_run_filtered_excluding_suite_name_string expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_filtering "exclude", "Alpha#test_something", expected end def test_run_filtered_excluding_string_method_only expected = clean <<-EOM Finished in 0.00 0 runs, 0 assertions, 0 failures, 0 errors, 0 skips EOM assert_filtering "exclude", "test_something", expected, :pass end def test_run_passing @tu = Class.new FakeNamedTest do def test_something assert true end end expected = clean <<-EOM . Finished in 0.00 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips EOM assert_report expected end def test_run_skip @tu = Class.new FakeNamedTest do def test_something assert true end def test_skip skip "not yet" end end expected = clean <<-EOM .S Finished in 0.00 2 runs, 1 assertions, 0 failures, 0 errors, 1 skips You have skipped tests. Run with --verbose for details. EOM restore_env do assert_report expected end end def test_run_skip_verbose @tu = Class.new FakeNamedTest do def test_something assert true end def test_skip skip "not yet" end end expected = clean <<-EOM FakeNamedTestXX#test_something = 0.00 s = . FakeNamedTestXX#test_skip = 0.00 s = S Finished in 0.00 1) Skipped: FakeNamedTestXX#test_skip [FILE:LINE]: not yet 2 runs, 1 assertions, 0 failures, 0 errors, 1 skips EOM assert_report expected, %w[--seed 42 --verbose] end def test_run_skip_show_skips @tu = Class.new FakeNamedTest do def test_something assert true end def test_skip skip "not yet" end end expected = clean <<-EOM .S Finished in 0.00 1) Skipped: FakeNamedTestXX#test_skip [FILE:LINE]: not yet 2 runs, 1 assertions, 0 failures, 0 errors, 1 skips EOM assert_report expected, %w[--seed 42 --show-skips] end def test_run_with_other_runner @tu = Class.new FakeNamedTest do def self.run reporter, options = {} @reporter = reporter before_my_suite super end def self.name; "wacky!" end def self.before_my_suite @reporter.io.puts "Running #{self.name} tests" @@foo = 1 end def test_something assert_equal 1, @@foo end def test_something_else assert_equal 1, @@foo end end expected = clean <<-EOM Running wacky! tests .. Finished in 0.00 2 runs, 2 assertions, 0 failures, 0 errors, 0 skips EOM assert_report expected end require "monitor" class Latch def initialize count = 1 @count = count @lock = Monitor.new @cv = @lock.new_cond end def release @lock.synchronize do @count -= 1 if @count > 0 @cv.broadcast if @count == 0 end end def await @lock.synchronize { @cv.wait_while { @count > 0 } } end end def test_run_parallel test_count = 2 test_latch = Latch.new test_count wait_latch = Latch.new test_count main_latch = Latch.new thread = Thread.new { Thread.current.abort_on_exception = true # This latch waits until both test latches have been released. Both # latches can't be released unless done in separate threads because # `main_latch` keeps the test method from finishing. test_latch.await main_latch.release } @tu = Class.new FakeNamedTest do parallelize_me! test_count.times do |i| define_method :"test_wait_on_main_thread_#{i}" do test_latch.release # This latch blocks until the "main thread" releases it. The main # thread can't release this latch until both test latches have # been released. This forces the latches to be released in separate # threads. main_latch.await assert true end end end expected = clean <<-EOM .. Finished in 0.00 2 runs, 2 assertions, 0 failures, 0 errors, 0 skips EOM skip if Minitest.parallel_executor.size < 2 # locks up test runner if 1 CPU assert_report(expected) do |reporter| reporter.extend(Module.new { define_method("record") do |result| super(result) wait_latch.release end define_method("report") do wait_latch.await super() end }) end assert thread.join end end class TestMinitestUnitOrder < MetaMetaMetaTestCase # do not parallelize this suite... it just can't handle it. def test_before_setup call_order = [] @tu = Class.new FakeNamedTest do define_method :setup do super() call_order << :setup end define_method :before_setup do call_order << :before_setup end def test_omg; assert true; end end run_tu_with_fresh_reporter expected = [:before_setup, :setup] assert_equal expected, call_order end def test_after_teardown call_order = [] @tu = Class.new FakeNamedTest do define_method :teardown do super() call_order << :teardown end define_method :after_teardown do call_order << :after_teardown end def test_omg; assert true; end end run_tu_with_fresh_reporter expected = [:teardown, :after_teardown] assert_equal expected, call_order end def test_all_teardowns_are_guaranteed_to_run call_order = [] @tu = Class.new FakeNamedTest do define_method :after_teardown do super() call_order << :after_teardown raise end define_method :teardown do super() call_order << :teardown raise end define_method :before_teardown do super() call_order << :before_teardown raise end def test_omg; assert true; end end run_tu_with_fresh_reporter expected = [:before_teardown, :teardown, :after_teardown] assert_equal expected, call_order end def test_setup_and_teardown_survive_inheritance call_order = [] @tu = Class.new FakeNamedTest do define_method :setup do call_order << :setup_method end define_method :teardown do call_order << :teardown_method end define_method :test_something do call_order << :test end end run_tu_with_fresh_reporter @tu = Class.new @tu run_tu_with_fresh_reporter # Once for the parent class, once for the child expected = [:setup_method, :test, :teardown_method] * 2 assert_equal expected, call_order end end class BetterError < RuntimeError # like better_error w/o infecting RuntimeError def set_backtrace bt super @bad_ivar = binding end end class TestMinitestRunnable < Minitest::Test def setup_marshal klass tc = klass.new "whatever" tc.assertions = 42 tc.failures << "a failure" yield tc if block_given? def tc.setup @blah = "blah" end tc.setup @tc = Minitest::Result.from tc end def assert_marshal expected_ivars new_tc = Marshal.load Marshal.dump @tc ivars = new_tc.instance_variables.map(&:to_s).sort assert_equal expected_ivars, ivars assert_equal "whatever", new_tc.name assert_equal 42, new_tc.assertions assert_equal ["a failure"], new_tc.failures yield new_tc if block_given? end def test_marshal setup_marshal Minitest::Runnable assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] end def test_spec_marshal klass = describe("whatever") { it("passes") { assert true } } rm = klass.runnable_methods.first # Run the test @tc = klass.new(rm).run assert_kind_of Minitest::Result, @tc # Pass it over the wire over_the_wire = Marshal.load Marshal.dump @tc assert_equal @tc.time, over_the_wire.time assert_equal @tc.name, over_the_wire.name assert_equal @tc.assertions, over_the_wire.assertions assert_equal @tc.failures, over_the_wire.failures assert_equal @tc.klass, over_the_wire.klass end def test_spec_marshal_with_exception klass = describe("whatever") { it("raises, badly") { raise Class.new(StandardError), "this is bad!" } } rm = klass.runnable_methods.first # Run the test @tc = klass.new(rm).run assert_kind_of Minitest::Result, @tc assert_instance_of Minitest::UnexpectedError, @tc.failure msg = @tc.failure.error.message assert_includes msg, "Neutered Exception #: boom", msg # Pass it over the wire over_the_wire = Marshal.load Marshal.dump @tc assert_equal @tc.time, over_the_wire.time assert_equal @tc.name, over_the_wire.name assert_equal @tc.assertions, over_the_wire.assertions assert_equal @tc.failures, over_the_wire.failures assert_equal @tc.klass, over_the_wire.klass end end class TestMinitestTest < TestMinitestRunnable def test_dup setup_marshal Minitest::Test do |tc| tc.time = 3.14 end assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] do |new_tc| assert_in_epsilon 3.14, new_tc.time end end end class TestMinitestUnitTestCase < Minitest::Test # do not call parallelize_me! - teardown accesses @tc._assertions # which is not threadsafe. Nearly every method in here is an # assertion test so it isn't worth splitting it out further. RUBY18 = !defined? Encoding def setup super Minitest::Test.reset @tc = Minitest::Test.new "fake tc" @zomg = "zomg ponies!" @assertion_count = 1 end def teardown assert_equal(@assertion_count, @tc.assertions, "expected #{@assertion_count} assertions to be fired during the test, not #{@tc.assertions}") if @tc.passed? end def non_verbose orig_verbose = $VERBOSE $VERBOSE = false yield ensure $VERBOSE = orig_verbose end def sample_test_case(rand) srand rand Class.new FakeNamedTest do 100.times do |i| define_method("test_#{i}") { assert true } end end.runnable_methods end # srand varies with OS def test_runnable_methods_random @assertion_count = 0 random_tests_1 = sample_test_case 42 random_tests_2 = sample_test_case 42 random_tests_3 = sample_test_case 1_000 assert_equal random_tests_1, random_tests_2 assert_equal random_tests_1, random_tests_3 end def test_runnable_methods_sorted @assertion_count = 0 sample_test_case = Class.new FakeNamedTest do def self.test_order; :sorted end def test_test3; assert "does not matter" end def test_test2; assert "does not matter" end def test_test1; assert "does not matter" end end expected = %w[test_test1 test_test2 test_test3] assert_equal expected, sample_test_case.runnable_methods end def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha @assertion_count = 0 shitty_test_case = Class.new FakeNamedTest shitty_test_case.i_suck_and_my_tests_are_order_dependent! assert_equal :alpha, shitty_test_case.test_order end def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn @assertion_count = 0 shitty_test_case = Class.new FakeNamedTest def shitty_test_case.test_order; :lol end assert_silent do shitty_test_case.i_suck_and_my_tests_are_order_dependent! end end def test_autorun_does_not_affect_fork_success_status @assertion_count = 0 skip "windows doesn't have skip" unless Process.respond_to?(:fork) Process.waitpid(fork {}) assert_equal true, $?.success? end def test_autorun_does_not_affect_fork_exit_status @assertion_count = 0 skip "windows doesn't have skip" unless Process.respond_to?(:fork) Process.waitpid(fork { exit 42 }) assert_equal 42, $?.exitstatus end end class TestMinitestGuard < Minitest::Test parallelize_me! def test_mri_eh assert self.class.mri? "ruby blah" assert self.mri? "ruby blah" end def test_jruby_eh assert self.class.jruby? "java" assert self.jruby? "java" end def test_rubinius_eh assert_output "", /DEPRECATED/ do assert self.class.rubinius? "rbx" end assert_output "", /DEPRECATED/ do assert self.rubinius? "rbx" end end def test_maglev_eh assert_output "", /DEPRECATED/ do assert self.class.maglev? "maglev" end assert_output "", /DEPRECATED/ do assert self.maglev? "maglev" end end def test_osx_eh assert self.class.osx? "darwin" assert self.osx? "darwin" end def test_windows_eh assert self.class.windows? "mswin" assert self.windows? "mswin" end end class TestMinitestUnitRecording < MetaMetaMetaTestCase # do not parallelize this suite... it just can't handle it. def assert_run_record *expected, &block @tu = Class.new FakeNamedTest, &block run_tu_with_fresh_reporter recorded = first_reporter.results.map(&:failures).flatten.map { |f| f.error.class } assert_equal expected, recorded end def test_run_with_bogus_reporter # https://github.com/seattlerb/minitest/issues/659 # TODO: remove test for minitest 6 @tu = Class.new FakeNamedTest do def test_method assert true end end bogus_reporter = Class.new do # doesn't subclass AbstractReporter def start; @success = false; end # def prerecord klass, name; end # doesn't define full API def record result; @success = true; end def report; end def passed?; end def results; end def success?; @success; end end.new self.reporter = Minitest::CompositeReporter.new reporter << bogus_reporter Minitest::Runnable.runnables.delete @tu @tu.run reporter, {} assert_predicate bogus_reporter, :success? end def test_record_passing assert_run_record do def test_method assert true end end end def test_record_failing assert_run_record Minitest::Assertion do def test_method assert false end end end def test_record_error assert_run_record RuntimeError do def test_method raise "unhandled exception" end end end def test_record_error_teardown assert_run_record RuntimeError do def test_method assert true end def teardown raise "unhandled exception" end end end def test_record_error_in_test_and_teardown assert_run_record AnError, RuntimeError do def test_method raise AnError end def teardown raise "unhandled exception" end end end def test_to_s_error_in_test_and_teardown @tu = Class.new FakeNamedTest do def test_method raise AnError end def teardown raise "unhandled exception" end end run_tu_with_fresh_reporter exp = clean " Error: FakeNamedTestXX#test_method: AnError: AnError FILE:LINE:in `test_method' Error: FakeNamedTestXX#test_method: RuntimeError: unhandled exception FILE:LINE:in `teardown' " assert_equal exp.strip, normalize_output(first_reporter.results.first.to_s).strip end def test_record_skip assert_run_record Minitest::Skip do def test_method skip "not yet" end end end end test_minitest_test_task.rb000066400000000000000000000022321446701454400411020ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/minitest-5.18.1/test/minitestrequire "minitest/autorun" require "hoe" require "minitest/test_task" Hoe.load_plugins # make sure Hoe::Test is loaded class TestHoeTest < Minitest::Test PATH = "test/minitest/test_minitest_test_task.rb" mt_path = %w[lib test .].join File::PATH_SEPARATOR MT_EXPECTED = %W[-I#{mt_path} -w -e '%srequire "#{PATH}"' --].join(" ") + " " def test_make_test_cmd_for_minitest skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"] require "minitest/test_task" framework = %(require "minitest/autorun"; ) @tester = Minitest::TestTask.create :test do |t| t.test_globs = [PATH] end assert_equal MT_EXPECTED % [framework].join("; "), @tester.make_test_cmd end def test_make_test_cmd_for_minitest_prelude skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"] require "minitest/test_task" prelude = %(require "other/file") framework = %(require "minitest/autorun"; ) @tester = Minitest::TestTask.create :test do |t| t.test_prelude = prelude t.test_globs = [PATH] end assert_equal MT_EXPECTED % [prelude, framework].join("; "), @tester.make_test_cmd end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/000077500000000000000000000000001446701454400302565ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/MIT-LICENSE000066400000000000000000000020421446701454400317100ustar00rootroot00000000000000Copyright (c) 2009, Nick Quaranto Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/Rakefile000066400000000000000000000003011446701454400317150ustar00rootroot00000000000000require 'rake' require 'rake/testtask' task :default => [:test] Rake::TestTask.new(:test) do |t| t.libs << "test" t.test_files = FileList['test/*_command_test.rb'] t.verbose = true end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/bin/000077500000000000000000000000001446701454400310265ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/bin/nbundle000066400000000000000000000001561446701454400324020ustar00rootroot00000000000000#!/usr/bin/env ruby require 'rubygems' require 'bundler/monkey_patch' load Gem.bin_path('bundler', 'bundle') mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/lib/000077500000000000000000000000001446701454400310245ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/lib/bundler/000077500000000000000000000000001446701454400324575ustar00rootroot00000000000000monkey_patch.rb000066400000000000000000000011651446701454400354110ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/lib/bundlerrequire 'bundler/fetcher' require 'bundler/rubygems_integration' require 'bundler/rubygems_mirror' module Bundler class RubygemsIntegration def download_gem(spec, uri, path) uri = RubygemsMirror.to_uri(uri) Gem::RemoteFetcher.fetcher.download(spec, uri, path) end end end module Bundler # Handles all the fetching with the rubygems server class Fetcher def initialize(remote_uri) @remote_uri = RubygemsMirror.to_uri(remote_uri) @has_api = true # will be set to false if the rubygems index is ever fetched @@connection ||= Net::HTTP::Persistent.new nil, :ENV end end end rubygems_mirror.rb000066400000000000000000000007501446701454400361560ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/lib/bundlermodule Bundler class RubygemsMirror private def self.mirrors @mirrors ||= Bundler.settings.all.inject({}) do |h, k| if k =~ /^mirror./ uri = add_slash(k.sub(/^mirror./, '')) h[uri] = URI.parse(Bundler.settings[k]) end h end end def self.add_slash(uri) uri = uri.to_s uri =~ /\/$/ ? uri : uri + '/' end public def self.to_uri(uri) mirrors[add_slash(uri)] || uri end end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/lib/commands/000077500000000000000000000000001446701454400326255ustar00rootroot00000000000000abstract_command.rb000066400000000000000000000062001446701454400363720ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/lib/commandsrequire 'rubygems/local_remote_options' begin require 'always_verify_ssl_certificates' rescue LoadError warn 'skip "always_verify_ssl_certificates"' end require 'base64' class Gem::AbstractCommand < Gem::Command include Gem::LocalRemoteOptions def initialize( name, summary ) super add_option('-c', '--nexus-clear', 'Clears the nexus config') do |value, options| options[:nexus_clear] = value end add_option('--nexus-config FILE', 'File location of nexus config') do |value, options| p value options[:nexus_config] = File.expand_path( value ) if value end end def url unless options[:nexus_clear] url = config[:url] # no leadng slash url.sub!(/\/$/,'') if url url end end def configure_url say "Enter the URL of the rubygems repository on a Nexus server" url = ask("URL: ") store_config(:url, url) say "The Nexus URL has been stored in ~/.gem/nexus" end def setup use_proxy! if http_proxy configure_url unless url sign_in unless authorization end def sign_in say "Enter your Nexus credentials" username = ask("Username: ") password = ask_for_password("Password: ") store_config(:authorization, "Basic #{Base64.encode64(username + ':' + password).strip}") say "Your Nexus credentials has been stored in ~/.gem/nexus" end def config_path options[:nexus_config] || File.join( Gem.user_home, '.gem', 'nexus' ) end def config @config ||= Gem.configuration.load_file(config_path) end def authorization config[:authorization] unless options[:nexus_clear] end def store_config(key, value) config.merge!(key => value) dirname = File.dirname(config_path) Dir.mkdir(dirname) unless File.exists?(dirname) File.open(config_path, 'w') do |f| f.write config.to_yaml end end def make_request(method, path) require 'net/http' require 'net/https' url = URI.parse( "#{self.url}/#{path}" ) http = proxy_class.new( url.host, url.port ) if url.scheme == 'https' http.use_ssl = true end request_method = case method when :get proxy_class::Get when :post proxy_class::Post when :put proxy_class::Put when :delete proxy_class::Delete else raise ArgumentError end request = request_method.new( url.path ) request.add_field "User-Agent", "Nexus Gem Command" yield request if block_given? http.request(request) end def use_proxy! proxy_uri = http_proxy @proxy_class = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password) end def proxy_class @proxy_class || Net::HTTP end # @return [URI, nil] the HTTP-proxy as a URI if set; +nil+ otherwise def http_proxy proxy = Gem.configuration[:http_proxy] || ENV['http_proxy'] || ENV['HTTP_PROXY'] return nil if proxy.nil? || proxy == :no_proxy URI.parse(proxy) end def ask_for_password(message) system "stty -echo" password = ask(message) system "stty echo" ui.say("\n") password end end nexus.rb000066400000000000000000000017471446701454400342460ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/lib/commandsclass Gem::Commands::NexusCommand < Gem::AbstractCommand def description 'Upload a gem up to Nexus server' end def arguments "GEM built gem to upload" end def usage "#{program_name} GEM" end def initialize super 'nexus', description add_proxy_option end def execute setup send_gem end def send_gem say "Uploading gem to Nexus..." path = get_one_gem_name response = make_request(:post, "gems/#{File.basename(path)}") do |request| request.body = Gem.read_binary(path) request.add_field("Content-Length", request.body.size) request.add_field("Content-Type", "application/octet-stream") request.add_field("Authorization", authorization.strip) end case response.code when "401" say "Unauthorized" when "400" say "something went wrong - maybe (re)deployment is not allowed" when "500" say "something went wrong" else say response.message end end end rubygems_plugin.rb000066400000000000000000000002271446701454400345060ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/nexus-0.1.0/librequire 'rubygems/command_manager' require 'commands/abstract_command' require "commands/nexus" Gem::CommandManager.instance.register_command :nexus mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/000077500000000000000000000000001446701454400277215ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/ChangeLog.txt000066400000000000000000000716331446701454400323230ustar00rootroot000000000000002006-07-01 10:04 thomas * Rakefile: Don't autorequire zip/zip - autorequire is deprecated. 2006-06-30 09:28 thomas * Rakefile: [no log message] * NEWS, lib/zip/zip.rb: Bumped version number and reformatted NEWS a bit. 2006-06-29 22:49 technorama * lib/zip/zip.rb, NEWS: documentation additions 2006-04-30 06:25 technorama * TODO, lib/zip/zip.rb, test/ziptest.rb: add documentation and test for new ZipFile::extract * lib/zip/zip.rb: add some of the API suggestions from sf.net #1281314 * lib/zip/zip.rb: apply patch for bug #1446926 * lib/zip/zip.rb: apply patch for bug #1459902 2006-04-26 17:17 technorama * lib/zip/zip.rb: add ZipFile @restore_*, documentation update 2006-04-07 21:13 technorama * test/: gentestfiles.rb, zipfilesystemtest.rb, ziptest.rb: additional tests 2006-03-28 04:11 technorama * lib/zip/zip.rb: start of unix_uid, unix_gid, restore_* support * lib/zip/zip.rb: follow_symlinks is now optional * lib/zip/zip.rb: add eof? methods * test/ziptest.rb: eof? tests 2006-02-26 09:57 technorama * README: add to authors * TODO: [no log message] 2006-02-25 12:04 thomas * lib/zip/zip.rb, test/ziptest.rb: Did away with ZipStreamableFile. 2006-02-23 08:03 technorama * lib/zip/zip.rb: unix file permissions. symlink support. rework ZipEntry and delegate classes. reduce memory usage during decompression. 2006-02-22 23:44 technorama * lib/zip/zipfilesystem.rb: update permissionInt for mkdir 2006-02-04 10:42 thomas * lib/zip/: ioextras.rb, zip.rb: Merged patch from oss-ruby. 2005-11-19 16:17 thomas * lib/zip/zip.rb: [no log message] 2005-11-08 08:23 thomas * lib/zip/ioextras.rb: Accepted patch from oss-ruby 2005-10-07 09:54 thomas * TODO: [no log message] 2005-09-06 21:19 thomas * lib/zip/zip.rb: [no log message] * NEWS: [no log message] * lib/zip/zip.rb, test/gentestfiles.rb, test/ziptest.rb: Fixed problem on windows - tempfile has to be set to binmode again when it is reopened 2005-09-04 16:45 thomas * Rakefile: [no log message] * TODO: [no log message] * test/ziptest.rb: [no log message] 2005-09-03 10:27 thomas * NEWS: [no log message] * TODO, lib/zip/zip.rb: [no log message] * lib/zip/ioextras.rb, lib/zip/zip.rb, test/ziptest.rb: Merged patch from oss-ruby at technorama.net * test/ziptest.rb: Added failing test that shows that read and gets don't mix currently 2005-08-29 08:50 thomas * lib/zip/: ioextras.rb, zip.rb: [no log message] * NEWS, lib/zip/zip.rb: [no log message] * lib/zip/zip.rb: [no log message] * lib/zip/zip.rb: [no log message] 2005-08-07 14:27 thomas * lib/zip/zip.rb, NEWS: [no log message] 2005-08-06 11:12 thomas * lib/zip/: ioextras.rb, zip.rb: [no log message] 2005-08-03 18:54 thomas * lib/zip/zip.rb: Read/write in chunks to preserve memory 2005-07-02 15:08 thomas * lib/zip/zip.rb: Applied received patch concerning FreeBSD 4.5 issue 2005-04-03 16:52 thomas * samples/.cvsignore: [no log message] * samples/: qtzip.rb, zipdialogui.ui: Added a qt example 2005-03-31 21:58 thomas * lib/zip/zip.rb, test/ziptest.rb: [no log message] * test/zipfilesystemtest.rb: [no log message] 2005-03-17 18:17 thomas * Rakefile: [no log message] * NEWS, README, lib/zip/zip.rb: [no log message] * install.rb: Fixed install.rb 2005-03-03 18:38 thomas * Rakefile: [no log message] 2005-02-27 16:23 thomas * lib/zip/ziprequire.rb: Added documentation to ziprequire * README, TODO, lib/zip/ziprequire.rb: Added documentation to ziprequire * Rakefile, test/ziptest.rb: [no log message] 2005-02-19 21:30 thomas * lib/zip/ioextras.rb, lib/zip/stdrubyext.rb, lib/zip/tempfile_bugfixed.rb, lib/zip/zip.rb, lib/zip/ziprequire.rb, test/ioextrastest.rb, test/stdrubyexttest.rb, test/zipfilesystemtest.rb, test/ziprequiretest.rb, test/ziptest.rb: Added more rdoc and changed the remaining tests to Test::Unit * lib/zip/: ioextras.rb, zip.rb: Added documentation to ZipInputStream and ZipOutputStream 2005-02-18 10:27 thomas * README: [no log message] 2005-02-17 23:21 thomas * README, Rakefile: Added ppackage (publish package) task to Rakefile * README, Rakefile, TODO: Added pdoc (publish doc) task to Rakefile * README, Rakefile, TODO, lib/zip/stdrubyext.rb, lib/zip/zip.rb, lib/zip/zipfilesystem.rb: Added a bunch of documentation * test/ziptest.rb: [no log message] 2005-02-16 20:04 thomas * NEWS, README, Rakefile: Improved documentation and added rdoc task to Rakefile * NEWS, Rakefile, lib/zip/zip.rb: [no log message] * Rakefile, samples/example.rb, samples/example_filesystem.rb, samples/gtkRubyzip.rb, samples/write_simple.rb, samples/zipfind.rb, test/.cvsignore, test/gentestfiles.rb: Improvements to Rakefile 2005-02-15 23:35 thomas * NEWS, TODO: [no log message] * Rakefile, rubyzip.gemspec: Now uses Rake to build gem * Rakefile: [no log message] * lib/zip/zip.rb, test/.cvsignore, test/ziptest.rb, NEWS: Fixed compatibility issue with ruby 1.8.2. Migrated test suite to Test::Unit * NEWS, lib/zip/ioextras.rb, lib/zip/stdrubyext.rb, lib/zip/tempfile_bugfixed.rb, lib/zip/zip.rb, lib/zip/zipfilesystem.rb, lib/zip/ziprequire.rb, test/.cvsignore, test/file1.txt, test/file1.txt.deflatedData, test/file2.txt, test/gentestfiles.rb, test/ioextrastest.rb, test/notzippedruby.rb, test/rubycode.zip, test/rubycode2.zip, test/stdrubyexttest.rb, test/testDirectory.bin, test/zipWithDirs.zip, test/zipfilesystemtest.rb, test/ziprequiretest.rb, test/ziptest.rb, test/data/.cvsignore, test/data/file1.txt, test/data/file1.txt.deflatedData, test/data/file2.txt, test/data/notzippedruby.rb, test/data/rubycode.zip, test/data/rubycode2.zip, test/data/testDirectory.bin, test/data/zipWithDirs.zip: Changed directory structure 2005-02-13 22:44 thomas * Rakefile, TODO: [no log message] * rubyzip.gemspec: [no log message] * install.rb: Made install.rb independent of the current path (fixes bug reported by Drew Robinson) 2004-12-12 11:22 thomas * NEWS, TODO, samples/write_simple.rb: Fixed 'version needed to extract'-field wrong in local headers 2004-05-02 15:17 thomas * rubyzip.gemspec: Added gemspec contributed by Chad Fowler 2004-04-02 07:25 thomas * NEWS: Fix for FreeBSD 4.9 2004-03-29 00:28 thomas * NEWS: [no log message] 2004-03-28 17:59 thomas * NEWS: [no log message] 2004-03-27 16:09 thomas * test/stdrubyexttest.rb: Patch for stdrubyext.rb from Nobu Nakada * test/: ioextrastest.rb, stdrubyexttest.rb: converted some files to unix line-endings 2004-03-25 16:34 thomas * NEWS, install.rb: Significantly reduced memory footprint when modifying zip files 2004-03-16 18:20 thomas * install.rb, test/alltests.rb, test/ioextrastest.rb, test/stdrubyexttest.rb, test/ziptest.rb: IO utility classes moved to new file ioextras.rb. Tests moved to new file ioextrastest.rb 2004-02-27 13:21 thomas * NEWS: Optimization to avoid decompression and recompression 2004-01-30 16:17 thomas * NEWS: [no log message] * README, test/zipfilesystemtest.rb, test/ziptest.rb: Applied extra-field patch 2003-12-13 16:57 thomas * TODO: [no log message] 2003-12-10 00:25 thomas * test/ziptest.rb: (Temporary) fix to bug reported by Takashi Sano 2003-08-23 09:42 thomas * test/ziptest.rb, NEWS: Fixed ZipFile.get_ouput_stream bug - data was never written to zip 2003-08-21 16:05 thomas * install.rb: [no log message] * alltests.rb, stdrubyexttest.rb, zipfilesystemtest.rb, ziprequiretest.rb, ziptest.rb, test/alltests.rb, test/stdrubyexttest.rb, test/zipfilesystemtest.rb, test/ziprequiretest.rb, test/ziptest.rb: Moved all test ruby files to test/ * NEWS, install.rb, stdrubyext.rb, stdrubyexttest.rb, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb, ziprequire.rb, ziprequiretest.rb, ziptest.rb, samples/example.rb, samples/example_filesystem.rb, samples/gtkRubyzip.rb, samples/zipfind.rb: Moved all production source files to zip/ so they are in the same dir as when they are installed * NEWS, TODO, alltests.rb: [no log message] * filearchive.rb, filearchivetest.rb, fileutils.rb: Removed filearchive.rb, filearchivetest.rb and fileutils.rb * samples/.cvsignore, samples/example_filesystem.rb, zip.rb, samples/example_filesystem.rb: Added samples/example_filesystem.rb. Fixed Tempfile creation for entries created with get_output_stream where entries were in a subdirectory * zip.rb, ziptest.rb: Fixed mkdir bug. ZipFile.mkdir didn't work if the zipfile doesn't exist already * ziptest.rb: [no log message] * TODO, zipfilesystemtest.rb: Globbing test placeholder commented out * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsDir.new and open * zipfilesystem.rb, zipfilesystemtest.rb: Implemented DirFsIterator and tests 2003-08-20 22:50 thomas * NEWS, TODO: [no log message] * zipfilesystemtest.rb: [no log message] * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsDir.foreach, ZipFsDir.entries now reimplemented in terms of it * README: [no log message] * zipfilesystem.rb, zipfilesystemtest.rb: [no log message] * zipfilesystem.rb: All access from ZipFsFile and ZipFsDir to ZipFile is now routed through ZipFileNameMapper which has the single responsibility of mapping entry/filenames * alltests.rb, stdrubyext.rb, stdrubyexttest.rb: Added stdrubyexttest.rb and added test test_select_map * zipfilesystem.rb: ZipFsDir was in the wrong module. ZipFileSystem now has a ctor that creates ZipFsDir and ZipFsFile instances, instead of creating them lazily. It then passes the dir instance to the file instance and vice versa * zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: ZipFsFile.open honours chdir * stdrubyext.rb, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb, ziptest.rb: Fixed ZipEntry::parent_as_string. Implemented ZipFsDir.chdir, pwd and entries including test 2003-08-19 15:44 thomas * zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsDir.mkdir * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsDir.delete (and aliases rmdir and unlink) * zipfilesystem.rb, zipfilesystemtest.rb: Another dummy implementation and commented out a test for select() which can be added later 2003-08-18 20:40 thomas * ziptest.rb: Honoured 1.8.0 Object.to_a deprecation warning * zip.rb, ziptest.rb, samples/example.rb, samples/zipfind.rb: Converted a few more names to ruby underscore style that I missed with the automated processing the first time around * zip.rb, zipfilesystem.rb, zipfilesystemtest.rb, ziptest.rb: Implemented Zip::ZipFile.get_output_stream 2003-08-17 18:28 thomas * README, install.rb, stdrubyext.rb, zipfilesystem.rb, zipfilesystemtest.rb: Updated README with Documentation section. Updated install.rb. Fixed three tests that failed on 1.8.0. 2003-08-14 05:40 thomas * zipfilesystem.rb, zipfilesystemtest.rb: Added empty implementations of atime and ctime 2003-08-13 17:08 thomas * simpledist.rb: Moved simpledist to a separate repository called 'misc' * NEWS: [no log message] * stdrubyext.rb, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb, ziprequire.rb, ziprequiretest.rb, ziptest.rb, samples/example.rb, samples/gtkRubyzip.rb, samples/zipfind.rb: Changed all method names to the ruby convention underscore style * alltests.rb, zipfilesystem.rb, zipfilesystemtest.rb: Implemented a lot more of the stat methods. Mostly with dummy implementations that return values that indicate that these features aren't supported * zipfilesystem.rb, zipfilesystemtest.rb: Implemented more methods and tests in zipfilesystem. Mostly empty methods as permissions and file types other than files and directories are not supported * install.rb, stdrubyext.rb, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: Addd file stdrubyext.rb and moved the modifications to std ruby classes to it. Refactored the ZipFsStat tests and ZipFsStat. Added Module.forwardMessages and used it to implement the forwarding of calls in ZipFsStat * zipfilesystem.rb, zipfilesystemtest.rb: Added Zip::ZipFsFile::ZipFsStat and started implementing it and its methods * zipfilesystem.rb, zipfilesystemtest.rb, ziptest.rb: Updated and added missing copyright notices * zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: zipfilesystem.rb is becoming big and not everyone will want to use that code. Therefore zip.rb no longer requires it. Instead you must require zipfilesystem.rb itself if you want to use it * zipfilesystem.rb, zipfilesystemtest.rb: Implemented dummy permission test methods * TODO, zip.rb, ziptest.rb: Merged from patch from Kristoffer Lunden. Fixed more 1.8.0 incompatibilites - tests run on 1.8.0 now 2003-08-12 19:18 thomas * zip.rb: Get rid of 1.8.0 warning * ziptest.rb: ruby 1.8.0 compatibility fix * NEWS, zip.rb: ruby-zlib 0.6.0 compatibility fix 2002-12-22 20:12 thomas * zip.rb: [no log message] 2002-09-16 22:11 thomas * NEWS: [no log message] 2002-09-15 17:16 thomas * samples/zipfind.rb: [no log message] * samples/zipfind.rb: [no log message] 2002-09-14 22:59 thomas * samples/zipfind.rb: Added simple zipfind script 2002-09-13 23:53 thomas * TODO: Added TODO about openmode for zip entries binary/ascii * NEWS: ziptest now runs without errors with ruby-1.7.2-4 (Andy's latest build) * zip.rb, ziprequiretest.rb, ziptest.rb: ziptest now runs without errors with ruby-1.7.2-4 (Andy's latest build) 2002-09-12 00:20 thomas * zipfilesystemtest.rb: Improved ZipFsFile.delete/unlink test * test/.cvsignore: [no log message] * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.delete/unlink 2002-09-11 22:22 thomas * alltests.rb: [no log message] * NEWS, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: Fixed AbstractInputStream.each_line ignored its aSeparator argument. Implemented more ZipFsFile methods * zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: ZipFileSystem is now a module instead of a class, and is mixed into ZipFile, instead of being made available as a property fileSystem 2002-09-10 23:45 thomas * NEWS: Updated NEWS file * zip.rb: [no log message] * NEWS, zip.rb, ziptest.rb: Fix bug: rewind should reset lineno. Fix bug: Deflater.read uses separate buffer from produceInput (feeding gets/readline etc) 2002-09-09 23:48 thomas * .cvsignore: [no log message] 2002-09-09 22:55 uid26649 * zip.rb, ziptest.rb: Implemented ZipInputStream.rewind and AbstractInputStream.lineno. Tests for both 2002-09-09 20:31 thomas * zip.rb, ziptest.rb: ZipInputStream and ZipOutstream (thru their AbstractInputStream and AbstractOutputStream now lie about being kind_of?(IO) 2002-09-08 16:38 thomas * zipfilesystemtest.rb: [no log message] * filearchive.rb, filearchivetest.rb, zip.rb, ziptest.rb: Moved String additions from filearchive.rb to zip.rb (and moved tests along too to ziptest.rb). Added ZipEntry.parentAsString and ZipEntrySet.parent * ziptest.rb: Implemented ZipEntrySetTest.testDup and testCompound * TODO, zip.rb, ziptest.rb: Replaced Array with EntrySet for keeping entries in a zip file. Tagged repository before this commit, so this change can be rolled back, if it stinks 2002-09-07 20:21 thomas * zip.rb, ziptest.rb: Implemented ZipEntry.<=> * ziptest.rb: Removed unused code 2002-08-11 15:14 thomas * zip.rb, ziptest.rb: Made some changes to accomodate ruby 1.7.2 2002-07-27 15:25 thomas * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.new * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.pipe * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.link * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.symlink * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.readlink, wrapped ZipFileSystem class in Zip module * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.zero? * zipfilesystem.rb, zipfilesystemtest.rb: Implemented test for ZipFsFile.directory? 2002-07-26 23:56 thomas * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.socket? * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.join * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.ftype * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.blockdev? * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.size? (slightly different from size) * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.split * zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.symlink? * alltests.rb, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: Implemented ZipFsFile.mtime * zipfilesystem.rb, zipfilesystemtest.rb: Implement ZipFsFile.file? * zip.rb, ziptest.rb: Implemented ZipEntry.file? * alltests.rb, filearchive.rb, filearchivetest.rb, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb, ziprequire.rb, ziptest.rb: Implemented ZipFileSystem::ZipFsFile.size * zipfilesystem.rb, zipfilesystemtest.rb: [no log message] * test/zipWithDirs.zip: Changed zipWithDirs.zip so all the entries in it have unix file endings * alltests.rb, zip.rb, zipfilesystem.rb, zipfilesystemtest.rb: Started implementing ZipFileSystem * test/zipWithDirs.zip: Added a zip file for testing with a directory structure 2002-07-22 21:40 thomas * TODO: [no log message] * TODO: [no log message] 2002-07-21 18:20 thomas * NEWS: [no log message] * TODO: Updated TODO with a refactoring idea for FileArchive * filearchive.rb, filearchivetest.rb: Added some FileArchiveAdd tests and cleaned up some of the FileArchive tests. extract and add now have individual test fixtures. * filearchive.rb, filearchivetest.rb: Added tests for extract called with regex src arg and Enumerable src arg * filearchivetest.rb: Added test for continueOnExistsProc when extracting from a file archive 2002-07-20 17:13 thomas * TODO, filearchivetest.rb, fileutils.rb, ziptest.rb, test/.cvsignore: Added (failing) tests for FileArchive.add, added code for creating test files for FileArchive.add tests. Added fileutils.rb, which is borrowed from ruby 1.7.2 * filearchive.rb, filearchivetest.rb: [no log message] * filearchivetest.rb: Added tests for String extensions * alltests.rb, ziprequiretest.rb, ziptest.rb: [no log message] * install.rb: [no log message] * TODO: Updated TODO * filearchive.rb, filearchivetest.rb: All FileArchive.extract tests run 2002-07-19 23:11 thomas * filearchive.rb, filearchivetest.rb: [no log message] * filearchivetest.rb: [no log message] * filearchive.rb, filearchivetest.rb: [no log message] * filearchive.rb, filearchivetest.rb, zip.rb: [no log message] 2002-07-08 13:41 thomas * TODO: [no log message] 2002-06-11 19:47 thomas * filearchive.rb, filearchivetest.rb, zip.rb, ziptest.rb: [no log message] 2002-05-25 00:41 thomas * simpledist.rb: Added hackish script for creating dist files 2002-04-30 21:22 thomas * TODO: [no log message] * filearchive.rb, filearchivetest.rb: [no log message] * filearchive.rb, filearchivetest.rb: Improved testing and wrote some of the skeleton of extract. Still to do: Fix glob, so it returns a hashmap instead of a list. The map will need to map the full entry name to the last part of the name (which is only really interesting for recursively extracted entries, otherwise it is just the name). Glob.expandPathList should also output directories with a trailing slash, which is doesn't right now. * filearchive.rb, filearchivetest.rb: Implemented the first few tests for FileArchive 2002-04-24 22:06 thomas * ziprequire.rb, ziprequiretest.rb: Appended copyright message to ziprequire.rb and ziprequiretest.rb * zip.rb: Made ZipEntry tolerate invalid dates 2002-04-21 00:57 thomas * NEWS, TODO, zip.rb, ziptest.rb: Read and write entry modification date/time correctly 2002-04-20 02:44 thomas * ziprequiretest.rb, test/rubycode2.zip: improved ZipRequireTest * ziprequire.rb: Made a warning go away * ziprequire.rb, ziprequiretest.rb, test/notzippedruby.rb, test/rubycode.zip: Fixed a bug in ziprequire. Added ziprequiretest.rb and test data files 2002-04-19 22:43 thomas * zip.rb, ziptest.rb: Added recursion support to Glob module 2002-04-18 21:37 thomas * NEWS, TODO, zip.rb, ziptest.rb: Added Glob module and GlobTest unit test suite. This module provides the functionality to expand a 'glob pattern' given a list of files - Next step is to use this module in ZipFile 2002-04-01 22:55 thomas * NEWS: [no log message] * TODO, zip.rb, ziprequire.rb: Added ziprequire.rb which contains a proof-of-concept implementation of a require implementation that can load ruby modules from a zip file. Needs unit tests and polish. 2002-03-31 01:13 thomas * README: [no log message] 2002-03-30 16:14 thomas * TODO: [no log message] * .cvsignore, README, zip.rb: Added rdoc markup (only #:nodoc:all modifiers) to zip.rb. Made README 'RDoc compliant' 2002-03-29 23:29 thomas * TODO: [no log message] * example.rb, samples/.cvsignore, samples/example.rb, samples/gtkRubyzip.rb: Moved example.rb to samples/. Added another sample gtkRubyzip.rb * NEWS, TODO, TODO: [no log message] * .cvsignore, file1.txt, file1.txt.deflatedData, testDirectory.bin, ziptest.rb, test/.cvsignore, test/file1.txt, test/file1.txt.deflatedData, test/file2.txt, test/testDirectory.bin: Added test/ directory and moved the manually created test data files into it. Changed ziptest.rb so it runs in test/ directory * TODO: [no log message] * NEWS, zip.rb, ziptest.rb: Don't decompress and recompress zip entries when changing zip file * zip.rb: Performance optimization: Only write new ZipFile, if it has been changed. The test suite runs in half the time now. 2002-03-28 22:12 thomas * TODO: [no log message] 2002-03-23 17:31 thomas * TODO: [no log message] 2002-03-22 22:47 thomas * NEWS: [no log message] * NEWS, TODO: [no log message] * ziptest.rb: Found the tests that didn't use blocks to make sure input streams are closed as soon as they arent used anymore and got rid of the GC.start * ziptest.rb: All tests run on windows ruby 1.6.6 * zip.rb, ziptest.rb: Windows fixes: Fixed ZipFile.initialize which needed to open zipfile file in binary mode. Added another workaround for the return value from File.open(name) where name is the name of a directory - ruby returns different exceptions in linux, win/cygwin and windows. A number of tests failed because in windows you cant delete a file that is open. Fixed by changing ziptest.rb to use ZipInputStream.getInputStream with blocks a few places. There is a hack in CommanZipFileFixture.setup where the GC is explicitly invoked. Should be fixed with blocks instead. The only currently failing test fails because the test data creation fails to add a comment to 4entry.zip, because echo eats the remainder of the line including the pipe character and the following zip -z 4 entry.zip command 2002-03-21 22:18 thomas * NEWS: [no log message] * NEWS, README, TODO, install.rb: Added install.rb * ziptest.rb: [no log message] * NEWS, TODO: [no log message] * .cvsignore, TODO, zip.rb, ziptest.rb: Added test_extractDirectoryExistsAsFileOverwrite and fixed to pass * zip.rb, ziptest.rb: Extraction of directory entries is now supported 2002-03-20 21:59 thomas * NEWS: [no log message] * COPYING, README, README.txt: Removed COPYING, renamed README.txt to README. Updated README * example.rb: Fixed example.rb added example that shows zip file manipulation with Zip::ZipFile * .cvsignore: [no log message] * TODO, zip.rb, ziptest.rb: Directories can now be added (not recursively, the directory entry itself. Directories are recognized by a empty entries with a trailing /. The purpose of storing them explicitly in the zip file is to be able to store permission and ownership information * TODO, zip.rb, ziptest.rb: zip.rb depended on ftools but it was only included in ziptest.rb * zip.rb, ziptest.rb: ZipError is now a subclass of StandardError instead of RuntimeError. ZipError now has several subclasses. 2002-03-19 22:26 thomas * TODO: [no log message] * TODO, ziptest.rb: Unit test ZipFile.getInputStream with block * TODO, zip.rb, ziptest.rb: Unit test for adding new entry with name that already exists in archive, and fixed to pass test * TODO, zip.rb, ziptest.rb: Added unit tests for rename to existing entry * TODO: [no log message] * TODO, zip.rb, ziptest.rb: Unit test calling ZipFile.extract with block 2002-03-18 21:06 thomas * TODO: [no log message] * zip.rb, ziptest.rb: ZipFile#commit now reinitializes ZipFile. * TODO, zip.rb, ziptest.rb: Refactoring: Collapsed ZipEntry and ZipStreamableZipEntry into ZipEntry. Collapsed BasicZipFile and ZipFile into ZipFile. * zip.rb: Removed method that was never called 2002-03-17 22:33 thomas * TODO: [no log message] * ziptest.rb: Run tests with =true as default * NEWS, TODO, zip.rb, ziptest.rb: Now runs with -w switch without warnings * .cvsignore: [no log message] * zip.rb, ziptest.rb: Down to one failing test * zip.rb, ziptest.rb: [no log message] * TODO, zip.rb, ziptest.rb: [no log message] 2002-02-25 19:42 thomas * TODO: Added more todos 2002-02-23 15:51 thomas * zip.rb: [no log message] * zip.rb, ziptest.rb: [no log message] * zip.rb, ziptest.rb: [no log message] 2002-02-03 18:47 thomas * ziptest.rb: [no log message] 2002-02-02 15:58 thomas * example.rb, zip.rb, ziptest.rb: [no log message] * .cvsignore: [no log message] * example.rb, zip.rb, ziptest.rb: Renamed SimpleZipFile to BasicZipFile * TODO: [no log message] * ziptest.rb: More test cases - all of them failing, so now there are 18 failing test cases. Three more test cases to implement, then it is time for the production code 2002-02-01 21:49 thomas * ziptest.rb: [no log message] * ziptest.rb: Also run SimpleZipFile tests for ZipFile. * example.rb, zip.rb, ziptest.rb: ZipFile renamed to SimpleZipFile. The new ZipFile will have many more methods that are useful for managing archives. 2002-01-29 20:30 thomas * TODO: [no log message] 2002-01-26 00:18 thomas * NEWS: [no log message] * ziptest.rb: In unit test: work around ruby/cygwin weirdness. You get an Errno::EEXISTS instead of an Errno::EISDIR if you try to open a file for writing that is a directory. * ziptest.rb: Fixed test that failed on windows because of CRLF line ending 2002-01-25 23:58 thomas * ziptest.rb: [no log message] * .cvsignore, example.rb, zip.rb: Fixed bug reading from empty deflated entry in zip file * .cvsignore: [no log message] * ziptest.rb: [no log message] * NEWS, README.txt, zip.rb, ziptest.rb: Zip write support is now fully functional in the form of ZipOutputStream. * zip.rb, ziptest.rb: [no log message] * zip.rb, ziptest.rb: [no log message] 2002-01-20 16:00 thomas * zip.rb, ziptest.rb: Added Deflater and DeflaterTest. * .cvsignore: [no log message] * .cvsignore: Added .cvsignore file * zip.rb, ziptest.rb: Added ZipEntry.writeCDirEntry and misc minor fixes 2002-01-19 23:28 thomas * example.rb, zip.rb, ziptest.rb: NOTICE: Not all tests run!! ZipOutputStream in progress Wrapped rubyzip in namespace module Zip. 2002-01-17 18:52 thomas * ziptest.rb: Fail nicely if the user doesn't have info-zip compatible zip in the path 2002-01-10 18:02 thomas * zip.rb: Adjusted chunk size to 32k after a few perf measurements 2002-01-09 22:10 thomas * README.txt: License now same as rubys, not just GPL 2002-01-06 00:19 thomas * README.txt: [no log message] 2002-01-05 23:09 thomas * NEWS, README.txt, NEWS: Updated NEWS file * README.txt, zip.rb, ziptest.rb, zlib.c.diff: Added tests for decompressors and a tests for ZipLocalEntry, ZipCentralDirectoryEntry and ZipCentralDirectory for handling of corrupt data * file1.txt.deflatedData: deflated data extracted from a zip file. contains file1.txt * zip.rb: Changed references to Inflate to Zlib::inflate for compatibility with ruby-zlib-0.5 * README.txt, zip.rb, ziptest.rb: [no log message] * example.rb, NEWS: [no log message] * COPYING, README.txt: [no log message] * ziptest.rb: Fixed problem with test file creation * README.txt: Updated README.txt * zip.rb, ziptest.rb: ZipFile now works 2002-01-04 21:51 thomas * testDirectory.bin, zip.rb, ziptest.rb: ZipCentralDirectoryEntryTest now runs * ziptest.rb: Changed ZIpLocalNEtryTest::test_ReadLocalEntryHeaderOfFirstTestZipEntry so it works on both unix too. It only worked on windows because the test made assumptions about the compressed size and crc of an entry, but that differs depending on the OS because of the CRLF thing. * README.txt: Added note about zlib.c patch 2002-01-02 18:48 thomas * README.txt, example.rb, file1.txt, zip.rb, ziptest.rb, zlib.c.diff: initial * README.txt, example.rb, file1.txt, zip.rb, ziptest.rb, zlib.c.diff: Initial revision mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/NEWS.txt000066400000000000000000000101341446701454400312350ustar00rootroot00000000000000= Version 2.0.2 Change project name to just "zip". samlown. Added support for StringIO. edsono (August 2008) = Version 2.0.1 Support for Ruby 1.9.1, postmodern = Version 0.9.1 Added symlink support and support for unix file permissions. Reduced memory usage during decompression. New methods ZipFile::[follow_symlinks, restore_times, restore_permissions, restore_ownership]. New methods ZipEntry::unix_perms, ZipInputStream::eof?. Added documentation and test for new ZipFile::extract. Added some of the API suggestions from sf.net #1281314. Applied patch for sf.net bug #1446926. Applied patch for sf.net bug #1459902. Rework ZipEntry and delegate classes. = Version 0.5.12 Fixed problem with writing binary content to a ZipFile in MS Windows. = Version 0.5.11 Fixed name clash file method copy_stream from fileutils.rb. Fixed problem with references to constant CHUNK_SIZE. ZipInputStream/AbstractInputStream read is now buffered like ruby IO's read method, which means that read and gets etc can be mixed. The unbuffered read method has been renamed to sysread. = Version 0.5.10 Fixed method name resolution problem with FileUtils::copy_stream and IOExtras::copy_stream. = Version 0.5.9 Fixed serious memory consumption issue = Version 0.5.8 Fixed install script. = Version 0.5.7 install.rb no longer assumes it is being run from the toplevel source dir. Directory structure changed to reflect common ruby library project structure. Migrated from RubyUnit to Test::Unit format. Now uses Rake to build source packages and gems and run unit tests. = Version 0.5.6 Fix for FreeBSD 4.9 which returns Errno::EFBIG instead of Errno::EINVAL for some invalid seeks. Fixed 'version needed to extract'-field incorrect in local headers. = Version 0.5.5 Fix for a problem with writing zip files that concerns only ruby 1.8.1. = Version 0.5.4 Significantly reduced memory footprint when modifying zip files. = Version 0.5.3 Added optimization to avoid decompressing and recompressing individual entries when modifying a zip archive. = Version 0.5.2 Fixed ZipFile corruption bug in ZipFile class. Added basic unix extra-field support. = Version 0.5.1 Fixed ZipFile.get_output_stream bug. = Version 0.5.0 List of changes: * Ruby 1.8.0 and ruby-zlib 0.6.0 compatibility * Changed method names from camelCase to rubys underscore style. * Installs to zip/ subdir instead of directly to site_ruby * Added ZipFile.directory and ZipFile.file - each method return an object that can be used like Dir and File only for the contents of the zip file. * Added sample application zipfind which works like Find.find, only Zip::ZipFind.find traverses into zip archives too. Bug fixes: * AbstractInputStream.each_line with non-default separator = Version 0.5.0a Source reorganized. Added ziprequire, which can be used to load ruby modules from a zip file, in a fashion similar to jar files in Java. Added gtkRubyzip, another sample application. Implemented ZipInputStream.lineno and ZipInputStream.rewind Bug fixes: * Read and write date and time information correctly for zip entries. * Fixed read() using separate buffer, causing mix of gets/readline/read to cause problems. = Version 0.4.2 Performance optimizations. Test suite runs in half the time. = Version 0.4.1 Windows compatibility fixes. = Version 0.4.0 Zip::ZipFile is now mutable and provides a more convenient way of modifying zip archives than Zip::ZipOutputStream. Operations for adding, extracting, renaming, replacing and removing entries to zip archives are now available. Runs without warnings with -w switch. Install script install.rb added. = Version 0.3.1 Rudimentary support for writing zip archives. = Version 0.2.2 Fixed and extended unit test suite. Updated to work with ruby/zlib 0.5. It doesn't work with earlier versions of ruby/zlib. = Version 0.2.0 Class ZipFile added. Where ZipInputStream is used to read the individual entries in a zip file, ZipFile reads the central directory in the zip archive, so you can get to any entry in the zip archive without having to skipping through all the preceeding entries. = Version 0.1.0 First working version of ZipInputStream. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/README000066400000000000000000000042661446701454400306110ustar00rootroot00000000000000= rubyzip rubyzip is a ruby library for reading and writing zip files. = Install If you have rubygems you can install rubyzip directly from the gem repository gem install rubyzip Otherwise obtain the source (see below) and run ruby install.rb To run the unit tests you need to have test::unit installed rake test = Documentation There is more than one way to access or create a zip archive with rubyzip. The basic API is modeled after the classes in java.util.zip from the Java SDK. This means there are classes such as Zip::ZipInputStream, Zip::ZipOutputStream and Zip::ZipFile. Zip::ZipInputStream provides a basic interface for iterating through the entries in a zip archive and reading from the entries in the same way as from a regular File or IO object. ZipOutputStream is the corresponding basic output facility. Zip::ZipFile provides a mean for accessing the archives central directory and provides means for accessing any entry without having to iterate through the archive. Unlike Java's java.util.zip.ZipFile rubyzip's Zip::ZipFile is mutable, which means it can be used to change zip files as well. Another way to access a zip archive with rubyzip is to use rubyzip's Zip::ZipFileSystem API. Using this API files can be read from and written to the archive in much the same manner as ruby's builtin classes allows files to be read from and written to the file system. rubyzip also features the zip/ziprequire.rb[link:files/lib/zip/ziprequire_rb.html] module which allows ruby to load ruby modules from zip archives. For details about the specific behaviour of classes and methods refer to the test suite. Finally you can generate the rdoc documentation or visit http://rubyzip.sourceforge.net. = License rubyzip is distributed under the same license as ruby. See http://www.ruby-lang.org/en/LICENSE.txt = Website and Project Home http://rubyzip.sourceforge.net http://sourceforge.net/projects/rubyzip == Download (tarballs and gems) http://sourceforge.net/project/showfiles.php?group_id=43107&package_id=35377 = Authors Thomas Sondergaard (thomas at sondergaard.cc) Technorama Ltd. (oss-ruby-zip at technorama.net) extra-field support contributed by Tatsuki Sugiura (sugi at nemui.org) mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/Rakefile000066400000000000000000000035431446701454400313730ustar00rootroot00000000000000# Rakefile for RubyGems -*- ruby -*- require 'rubygems' require 'rake' require './lib/zip/version.rb' begin require 'jeweler' Jeweler::Tasks.new do |gem| gem.name = 'zip' gem.version = Zip::VERSION gem.summary = 'zip is a Ruby library for reading and writing Zip files' gem.description = 'zip is a Ruby library for reading and writing Zip files. Unlike the official rubyzip, zip is compatible with Ruby 1.9.1.' gem.email = ['me@samlown.com', 'postmodern.mod3@gmail.com'] gem.homepage = 'http://github.com/postmodern/rubyzip2' gem.authors = ['Postmodern', 'Thomas Sondergaard', 'Sam Lown'] gem.files = FileList[ 'README.txt', 'NEWS.txt', 'TODO.txt', 'ChangeLog.txt', 'Rakefile', 'lib/zip.rb', 'lib/zip/ioextras.rb', 'lib/zip/stdrubyext.rb', 'lib/zip/tempfile_bugfixed.rb', 'lib/zip/zip.rb', 'lib/zip/zipfilesystem.rb', 'lib/zip/ziprequire.rb', 'lib/zip/version.rb', 'samples/example.rb', 'samples/example_filesystem.rb', 'samples/gtk_zip.rb', 'samples/qt_zip.rb', 'samples/write_simple.rb', 'samples/zipfind.rb', 'test/alltests.rb', 'test/data/file1.txt', 'test/data/file1.txt.deflatedData', 'test/data/file2.txt', 'test/data/notzippedruby.rb', 'test/data/rubycode.zip', 'test/data/rubycode2.zip', 'test/data/testDirectory.bin', 'test/data/zipWithDirs.zip', ] # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings end rescue LoadError puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler" end require 'rake/testtask' Rake::TestTask.new(:test) do |test| test.libs << 'lib' << 'test' test.pattern = 'test/**/test_*.rb' test.verbose = true end task :test => :check_dependencies mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/TODO.txt000066400000000000000000000016361446701454400312350ustar00rootroot00000000000000 * ZipInputStream: Support zip-files with trailing data descriptors * Adjust rdoc stylesheet to advertise inherited methods if possible * Suggestion: Add ZipFile/ZipInputStream example that demonstrates extracting all entries. * Suggestion: ZipFile#extract destination should default to "." * Suggestion: ZipEntry should have extract(), get_input_stream() methods etc * SUggestion: ZipInputStream/ZipOutputStream should accept an IO object in addition to a filename. * (is buffering used anywhere with write?) * Inflater.sysread should pass the buffer to produce_input. * Implement ZipFsDir.glob * ZipFile.checkIntegrity method * non-MSDOS permission attributes ** See mail from Ned Konz to ruby-talk subj. "Re: SV: [ANN] Archive 0.2" * Packager version, required unpacker version in zip headers ** See mail from Ned Konz to ruby-talk subj. "Re: SV: [ANN] Archive 0.2" * implement storing attributes and ownership information mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/000077500000000000000000000000001446701454400304675ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zip.rb000066400000000000000000000000221446701454400316100ustar00rootroot00000000000000require 'zip/zip' mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zip/000077500000000000000000000000001446701454400312715ustar00rootroot00000000000000ioextras.rb000066400000000000000000000064121446701454400334000ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zipmodule IOExtras #:nodoc: CHUNK_SIZE = 32768 RANGE_ALL = 0..-1 def self.copy_stream(ostream, istream) s = '' ostream.write(istream.read(CHUNK_SIZE, s)) until istream.eof? end # Implements kind_of? in order to pretend to be an IO object module FakeIO def kind_of?(object) object == IO || super end end # Implements many of the convenience methods of IO # such as gets, getc, readline and readlines # depends on: input_finished?, produce_input and read module AbstractInputStream include Enumerable include FakeIO def initialize super @lineno = 0 @outputBuffer = "" end attr_accessor :lineno def read(numberOfBytes = nil, buf = nil) tbuf = nil if @outputBuffer.length > 0 if numberOfBytes <= @outputBuffer.length tbuf = @outputBuffer.slice!(0, numberOfBytes) else numberOfBytes -= @outputBuffer.length if (numberOfBytes) rbuf = sysread(numberOfBytes, buf) tbuf = @outputBuffer tbuf << rbuf if (rbuf) @outputBuffer = "" end else tbuf = sysread(numberOfBytes, buf) end return nil unless (tbuf) if buf buf.replace(tbuf) else buf = tbuf end buf end def readlines(aSepString = $/) retVal = [] each_line(aSepString) { |line| retVal << line } return retVal end def gets(aSepString=$/) @lineno = @lineno.next return read if aSepString == nil aSepString="#{$/}#{$/}" if aSepString == "" bufferIndex=0 while ((matchIndex = @outputBuffer.index(aSepString, bufferIndex)) == nil) bufferIndex=@outputBuffer.length if input_finished? return @outputBuffer.empty? ? nil : flush end @outputBuffer << produce_input end sepIndex=matchIndex + aSepString.length return @outputBuffer.slice!(0...sepIndex) end def flush retVal=@outputBuffer @outputBuffer="" return retVal end def readline(aSepString = $/) retVal = gets(aSepString) raise EOFError if retVal == nil return retVal end def each_line(aSepString = $/) while true yield readline(aSepString) end rescue EOFError end alias_method :each, :each_line end # Implements many of the output convenience methods of IO. # relies on << module AbstractOutputStream include FakeIO def write(data) self << data data.to_s.length end def print(*params) self << params.join << $\.to_s end def printf(aFormatString, *params) self << sprintf(aFormatString, *params) end def putc(anObject) self << case anObject when Fixnum then anObject.chr when String then anObject else raise TypeError, "putc: Only Fixnum and String supported" end anObject end def puts(*params) params << "\n" if params.empty? params.flatten.each { |element| val = element.to_s self << val self << "\n" unless val[-1,1] == "\n" } end end end # IOExtras namespace module # Copyright (C) 2002-2004 Thomas Sondergaard # rubyzip is free software; you can redistribute it and/or # modify it under the terms of the ruby license. stdrubyext.rb000066400000000000000000000050471446701454400337620ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zipunless Enumerable.method_defined?(:inject) module Enumerable #:nodoc:all def inject(n = 0) each { |value| n = yield(n, value) } n end end end module Enumerable #:nodoc:all # returns a new array of all the return values not equal to nil # This implementation could be faster def select_map(&aProc) map(&aProc).reject { |e| e.nil? } end end unless Object.method_defined?(:object_id) class Object #:nodoc:all # Using object_id which is the new thing, so we need # to make that work in versions prior to 1.8.0 alias object_id id end end unless File.respond_to?(:read) class File # :nodoc:all # singleton method read does not exist in 1.6.x def self.read(fileName) open(fileName) { |f| f.read } end end end class String #:nodoc:all def starts_with(aString) rindex(aString, 0) == 0 end def ends_with(aString) index(aString, -aString.size) end def ensure_end(aString) ends_with(aString) ? self : self + aString end def lchop slice(1, length) end end class Time #:nodoc:all #MS-DOS File Date and Time format as used in Interrupt 21H Function 57H: # # Register CX, the Time: # Bits 0-4 2 second increments (0-29) # Bits 5-10 minutes (0-59) # bits 11-15 hours (0-24) # # Register DX, the Date: # Bits 0-4 day (1-31) # bits 5-8 month (1-12) # bits 9-15 year (four digit year minus 1980) def to_binary_dos_time (sec/2) + (min << 5) + (hour << 11) end def to_binary_dos_date (day) + (month << 5) + ((year - 1980) << 9) end # Dos time is only stored with two seconds accuracy def dos_equals(other) to_i/2 == other.to_i/2 end def self.parse_binary_dos_format(binaryDosDate, binaryDosTime) second = 2 * ( 0b11111 & binaryDosTime) minute = ( 0b11111100000 & binaryDosTime) >> 5 hour = (0b1111100000000000 & binaryDosTime) >> 11 day = ( 0b11111 & binaryDosDate) month = ( 0b111100000 & binaryDosDate) >> 5 year = ((0b1111111000000000 & binaryDosDate) >> 9) + 1980 begin return Time.local(year, month, day, hour, minute, second) end end end class Module #:nodoc:all def forward_message(forwarder, *messagesToForward) methodDefs = messagesToForward.map { |msg| "def #{msg}; #{forwarder}(:#{msg}); end" } module_eval(methodDefs.join("\n")) end end # Copyright (C) 2002, 2003 Thomas Sondergaard # rubyzip is free software; you can redistribute it and/or # modify it under the terms of the ruby license. tempfile_bugfixed.rb000066400000000000000000000104211446701454400352170ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zip# # tempfile - manipulates temporary files # # $Id: tempfile_bugfixed.rb,v 1.2 2005/02/19 20:30:33 thomas Exp $ # require 'delegate' require 'tmpdir' module BugFix #:nodoc:all # A class for managing temporary files. This library is written to be # thread safe. class Tempfile < DelegateClass(File) MAX_TRY = 10 @@cleanlist = [] # Creates a temporary file of mode 0600 in the temporary directory # whose name is basename.pid.n and opens with mode "w+". A Tempfile # object works just like a File object. # # If tmpdir is omitted, the temporary directory is determined by # Dir::tmpdir provided by 'tmpdir.rb'. # When $SAFE > 0 and the given tmpdir is tainted, it uses # /tmp. (Note that ENV values are tainted by default) def initialize(basename, tmpdir=Dir::tmpdir) if $SAFE > 0 and tmpdir.tainted? tmpdir = '/tmp' end lock = nil n = failure = 0 begin Thread.critical = true begin tmpname = sprintf('%s/%s%d.%d', tmpdir, basename, $$, n) lock = tmpname + '.lock' n += 1 end while @@cleanlist.include?(tmpname) or File.exist?(lock) or File.exist?(tmpname) Dir.mkdir(lock) rescue failure += 1 retry if failure < MAX_TRY raise "cannot generate tempfile `%s'" % tmpname ensure Thread.critical = false end @data = [tmpname] @clean_proc = Tempfile.callback(@data) ObjectSpace.define_finalizer(self, @clean_proc) @tmpfile = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL, 0600) @tmpname = tmpname @@cleanlist << @tmpname @data[1] = @tmpfile @data[2] = @@cleanlist super(@tmpfile) # Now we have all the File/IO methods defined, you must not # carelessly put bare puts(), etc. after this. Dir.rmdir(lock) end # Opens or reopens the file with mode "r+". def open @tmpfile.close if @tmpfile @tmpfile = File.open(@tmpname, 'r+') @data[1] = @tmpfile __setobj__(@tmpfile) end def _close # :nodoc: @tmpfile.close if @tmpfile @data[1] = @tmpfile = nil end protected :_close # Closes the file. If the optional flag is true, unlinks the file # after closing. # # If you don't explicitly unlink the temporary file, the removal # will be delayed until the object is finalized. def close(unlink_now=false) if unlink_now close! else _close end end # Closes and unlinks the file. def close! _close @clean_proc.call ObjectSpace.undefine_finalizer(self) end # Unlinks the file. On UNIX-like systems, it is often a good idea # to unlink a temporary file immediately after creating and opening # it, because it leaves other programs zero chance to access the # file. def unlink # keep this order for thread safeness File.unlink(@tmpname) if File.exist?(@tmpname) @@cleanlist.delete(@tmpname) if @@cleanlist end alias delete unlink if RUBY_VERSION > '1.8.0' def __setobj__(obj) @_dc_obj = obj end else def __setobj__(obj) @obj = obj end end # Returns the full path name of the temporary file. def path @tmpname end # Returns the size of the temporary file. As a side effect, the IO # buffer is flushed before determining the size. def size if @tmpfile @tmpfile.flush @tmpfile.stat.size else 0 end end alias length size class << self def callback(data) # :nodoc: pid = $$ lambda{ if pid == $$ path, tmpfile, cleanlist = *data print "removing ", path, "..." if $DEBUG tmpfile.close if tmpfile # keep this order for thread safeness File.unlink(path) if File.exist?(path) cleanlist.delete(path) if cleanlist print "done\n" if $DEBUG end } end # If no block is given, this is a synonym for new(). # # If a block is given, it will be passed tempfile as an argument, # and the tempfile will automatically be closed when the block # terminates. In this case, open() returns nil. def open(*args) tempfile = new(*args) if block_given? begin yield(tempfile) ensure tempfile.close end nil else tempfile end end end end end # module BugFix if __FILE__ == $0 # $DEBUG = true f = Tempfile.new("foo") f.print("foo\n") f.close f.open p f.gets # => "foo\n" f.close! end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zip/version.rb000066400000000000000000000000431446701454400333000ustar00rootroot00000000000000module Zip VERSION = '2.0.2' end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zip/zip.rb000066400000000000000000001462741446701454400324360ustar00rootroot00000000000000require 'delegate' require 'singleton' require 'tempfile' require 'fileutils' require 'stringio' require 'zlib' require 'zip/stdrubyext' require 'zip/ioextras' require 'zip/version' if Tempfile.superclass == SimpleDelegator require 'zip/tempfile_bugfixed' Tempfile = BugFix::Tempfile end module Zlib #:nodoc:all if ! const_defined? :MAX_WBITS MAX_WBITS = Zlib::Deflate.MAX_WBITS end end module Zip RUBY_MINOR_VERSION = RUBY_VERSION.split(".")[1].to_i RUNNING_ON_WINDOWS = /mswin32|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM # Ruby 1.7.x compatibility # In ruby 1.6.x and 1.8.0 reading from an empty stream returns # an empty string the first time and then nil. # not so in 1.7.x EMPTY_FILE_RETURNS_EMPTY_STRING_FIRST = RUBY_MINOR_VERSION != 7 # ZipInputStream is the basic class for reading zip entries in a # zip file. It is possible to create a ZipInputStream object directly, # passing the zip file name to the constructor, but more often than not # the ZipInputStream will be obtained from a ZipFile (perhaps using the # ZipFileSystem interface) object for a particular entry in the zip # archive. # # A ZipInputStream inherits IOExtras::AbstractInputStream in order # to provide an IO-like interface for reading from a single zip # entry. Beyond methods for mimicking an IO-object it contains # the method get_next_entry for iterating through the entries of # an archive. get_next_entry returns a ZipEntry object that describes # the zip entry the ZipInputStream is currently reading from. # # Example that creates a zip archive with ZipOutputStream and reads it # back again with a ZipInputStream. # # require 'zip/zip' # # Zip::ZipOutputStream::open("my.zip") { # |io| # # io.put_next_entry("first_entry.txt") # io.write "Hello world!" # # io.put_next_entry("adir/first_entry.txt") # io.write "Hello again!" # } # # # Zip::ZipInputStream::open("my.zip") { # |io| # # while (entry = io.get_next_entry) # puts "Contents of #{entry.name}: '#{io.read}'" # end # } # # java.util.zip.ZipInputStream is the original inspiration for this # class. class ZipInputStream include IOExtras::AbstractInputStream # Opens the indicated zip file. An exception is thrown # if the specified offset in the specified filename is # not a local zip entry header. def initialize(filename, offset = 0) super() @archiveIO = filename.class == StringIO ? filename : File.open(filename, "rb") # @archiveIO = File.open(filename, "rb") @archiveIO.seek(offset, IO::SEEK_SET) @decompressor = NullDecompressor.instance @currentEntry = nil end def close @archiveIO.close end # Same as #initialize but if a block is passed the opened # stream is passed to the block and closed when the block # returns. def ZipInputStream.open(filename) return new(filename) unless block_given? zio = new(filename) yield zio ensure zio.close if zio end # Returns a ZipEntry object. It is necessary to call this # method on a newly created ZipInputStream before reading from # the first entry in the archive. Returns nil when there are # no more entries. def get_next_entry @archiveIO.seek(@currentEntry.next_header_offset, IO::SEEK_SET) if @currentEntry open_entry end # Rewinds the stream to the beginning of the current entry def rewind return if @currentEntry.nil? @lineno = 0 @archiveIO.seek(@currentEntry.localHeaderOffset, IO::SEEK_SET) open_entry end # Modeled after IO.sysread def sysread(numberOfBytes = nil, buf = nil) @decompressor.sysread(numberOfBytes, buf) end def eof @outputBuffer.empty? && @decompressor.eof end alias :eof? :eof protected def open_entry @currentEntry = ZipEntry.read_local_entry(@archiveIO) if (@currentEntry == nil) @decompressor = NullDecompressor.instance elsif @currentEntry.compression_method == ZipEntry::STORED @decompressor = PassThruDecompressor.new(@archiveIO, @currentEntry.size) elsif @currentEntry.compression_method == ZipEntry::DEFLATED @decompressor = Inflater.new(@archiveIO) else raise ZipCompressionMethodError, "Unsupported compression method #{@currentEntry.compression_method}" end flush return @currentEntry end def produce_input @decompressor.produce_input end def input_finished? @decompressor.input_finished? end end class Decompressor #:nodoc:all CHUNK_SIZE=32768 def initialize(inputStream) super() @inputStream=inputStream end end class Inflater < Decompressor #:nodoc:all def initialize(inputStream) super @zlibInflater = Zlib::Inflate.new(-Zlib::MAX_WBITS) @outputBuffer="" @hasReturnedEmptyString = ! EMPTY_FILE_RETURNS_EMPTY_STRING_FIRST end def sysread(numberOfBytes = nil, buf = nil) readEverything = (numberOfBytes == nil) while (readEverything || @outputBuffer.length < numberOfBytes) break if internal_input_finished? @outputBuffer << internal_produce_input(buf) end return value_when_finished if @outputBuffer.length==0 && input_finished? endIndex= numberOfBytes==nil ? @outputBuffer.length : numberOfBytes return @outputBuffer.slice!(0...endIndex) end def produce_input if (@outputBuffer.empty?) return internal_produce_input else return @outputBuffer.slice!(0...(@outputBuffer.length)) end end # to be used with produce_input, not read (as read may still have more data cached) # is data cached anywhere other than @outputBuffer? the comment above may be wrong def input_finished? @outputBuffer.empty? && internal_input_finished? end alias :eof :input_finished? alias :eof? :input_finished? private def internal_produce_input(buf = nil) retried = 0 begin s = buf ? @inputStream.read(Decompressor::CHUNK_SIZE, buf) : @inputStream.read(Decompressor::CHUNK_SIZE) @zlibInflater.inflate(s) rescue Zlib::BufError raise if (retried >= 5) # how many times should we retry? retried += 1 retry end end def internal_input_finished? @zlibInflater.finished? end # TODO: Specialize to handle different behaviour in ruby > 1.7.0 ? def value_when_finished # mimic behaviour of ruby File object. return nil if @hasReturnedEmptyString @hasReturnedEmptyString=true return "" end end class PassThruDecompressor < Decompressor #:nodoc:all def initialize(inputStream, charsToRead) super inputStream @charsToRead = charsToRead @readSoFar = 0 @hasReturnedEmptyString = ! EMPTY_FILE_RETURNS_EMPTY_STRING_FIRST end # TODO: Specialize to handle different behaviour in ruby > 1.7.0 ? def sysread(numberOfBytes = nil, buf = nil) if input_finished? hasReturnedEmptyStringVal=@hasReturnedEmptyString @hasReturnedEmptyString=true return "" unless hasReturnedEmptyStringVal return nil end if (numberOfBytes == nil || @readSoFar+numberOfBytes > @charsToRead) numberOfBytes = @charsToRead-@readSoFar end @readSoFar += numberOfBytes if buf @inputStream.read(numberOfBytes, buf) else @inputStream.read(numberOfBytes) end end def produce_input sysread(Decompressor::CHUNK_SIZE) end def input_finished? (@readSoFar >= @charsToRead) end alias :eof :input_finished? alias :eof? :input_finished? end class NullDecompressor #:nodoc:all include Singleton def sysread(numberOfBytes = nil, buf = nil) nil end def produce_input nil end def input_finished? true end def eof true end alias :eof? :eof end class NullInputStream < NullDecompressor #:nodoc:all include IOExtras::AbstractInputStream end class ZipEntry STORED = 0 DEFLATED = 8 FSTYPE_FAT = 0 FSTYPE_AMIGA = 1 FSTYPE_VMS = 2 FSTYPE_UNIX = 3 FSTYPE_VM_CMS = 4 FSTYPE_ATARI = 5 FSTYPE_HPFS = 6 FSTYPE_MAC = 7 FSTYPE_Z_SYSTEM = 8 FSTYPE_CPM = 9 FSTYPE_TOPS20 = 10 FSTYPE_NTFS = 11 FSTYPE_QDOS = 12 FSTYPE_ACORN = 13 FSTYPE_VFAT = 14 FSTYPE_MVS = 15 FSTYPE_BEOS = 16 FSTYPE_TANDEM = 17 FSTYPE_THEOS = 18 FSTYPE_MAC_OSX = 19 FSTYPE_ATHEOS = 30 FSTYPES = { FSTYPE_FAT => 'FAT'.freeze, FSTYPE_AMIGA => 'Amiga'.freeze, FSTYPE_VMS => 'VMS (Vax or Alpha AXP)'.freeze, FSTYPE_UNIX => 'Unix'.freeze, FSTYPE_VM_CMS => 'VM/CMS'.freeze, FSTYPE_ATARI => 'Atari ST'.freeze, FSTYPE_HPFS => 'OS/2 or NT HPFS'.freeze, FSTYPE_MAC => 'Macintosh'.freeze, FSTYPE_Z_SYSTEM => 'Z-System'.freeze, FSTYPE_CPM => 'CP/M'.freeze, FSTYPE_TOPS20 => 'TOPS-20'.freeze, FSTYPE_NTFS => 'NTFS'.freeze, FSTYPE_QDOS => 'SMS/QDOS'.freeze, FSTYPE_ACORN => 'Acorn RISC OS'.freeze, FSTYPE_VFAT => 'Win32 VFAT'.freeze, FSTYPE_MVS => 'MVS'.freeze, FSTYPE_BEOS => 'BeOS'.freeze, FSTYPE_TANDEM => 'Tandem NSK'.freeze, FSTYPE_THEOS => 'Theos'.freeze, FSTYPE_MAC_OSX => 'Mac OS/X (Darwin)'.freeze, FSTYPE_ATHEOS => 'AtheOS'.freeze, }.freeze attr_accessor :comment, :compressed_size, :crc, :extra, :compression_method, :name, :size, :localHeaderOffset, :zipfile, :fstype, :externalFileAttributes, :gp_flags, :header_signature attr_accessor :follow_symlinks attr_accessor :restore_times, :restore_permissions, :restore_ownership attr_accessor :unix_uid, :unix_gid, :unix_perms attr_reader :ftype, :filepath # :nodoc: def initialize(zipfile = "", name = "", comment = "", extra = "", compressed_size = 0, crc = 0, compression_method = ZipEntry::DEFLATED, size = 0, time = Time.now) super() if name.starts_with("/") raise ZipEntryNameError, "Illegal ZipEntry name '#{name}', name must not start with /" end @localHeaderOffset = 0 @internalFileAttributes = 1 @externalFileAttributes = 0 @version = 52 # this library's version @ftype = nil # unspecified or unknown @filepath = nil if Zip::RUNNING_ON_WINDOWS @fstype = FSTYPE_FAT else @fstype = FSTYPE_UNIX end @zipfile, @comment, @compressed_size, @crc, @extra, @compression_method, @name, @size = zipfile, comment, compressed_size, crc, extra, compression_method, name, size @time = time @follow_symlinks = false @restore_times = true @restore_permissions = false @restore_ownership = false # BUG: need an extra field to support uid/gid's @unix_uid = nil @unix_gid = nil @unix_perms = nil # @posix_acl = nil # @ntfs_acl = nil if name_is_directory? @ftype = :directory else @ftype = :file end unless ZipExtraField === @extra @extra = ZipExtraField.new(@extra.to_s) end end def time if @extra["UniversalTime"] @extra["UniversalTime"].mtime else # Atandard time field in central directory has local time # under archive creator. Then, we can't get timezone. @time end end alias :mtime :time def time=(aTime) unless @extra.member?("UniversalTime") @extra.create("UniversalTime") end @extra["UniversalTime"].mtime = aTime @time = aTime end # Returns +true+ if the entry is a directory. def directory? raise ZipInternalError, "current filetype is unknown: #{self.inspect}" unless @ftype @ftype == :directory end alias :is_directory :directory? # Returns +true+ if the entry is a file. def file? raise ZipInternalError, "current filetype is unknown: #{self.inspect}" unless @ftype @ftype == :file end # Returns +true+ if the entry is a symlink. def symlink? raise ZipInternalError, "current filetype is unknown: #{self.inspect}" unless @ftype @ftype == :link end def name_is_directory? #:nodoc:all (%r{\/$} =~ @name) != nil end def local_entry_offset #:nodoc:all localHeaderOffset + local_header_size end def local_header_size #:nodoc:all LOCAL_ENTRY_STATIC_HEADER_LENGTH + (@name ? @name.size : 0) + (@extra ? @extra.local_size : 0) end def cdir_header_size #:nodoc:all CDIR_ENTRY_STATIC_HEADER_LENGTH + (@name ? @name.size : 0) + (@extra ? @extra.c_dir_size : 0) + (@comment ? @comment.size : 0) end def next_header_offset #:nodoc:all local_entry_offset + self.compressed_size end # Extracts entry to file destPath (defaults to @name). def extract(destPath = @name, &onExistsProc) onExistsProc ||= proc { false } if directory? create_directory(destPath, &onExistsProc) elsif file? write_file(destPath, &onExistsProc) elsif symlink? create_symlink(destPath, &onExistsProc) else raise RuntimeError, "unknown file type #{self.inspect}" end self end def to_s @name end protected def ZipEntry.read_zip_short(io) # :nodoc: io.read(2).unpack('v')[0] end def ZipEntry.read_zip_long(io) # :nodoc: io.read(4).unpack('V')[0] end public LOCAL_ENTRY_SIGNATURE = 0x04034b50 LOCAL_ENTRY_STATIC_HEADER_LENGTH = 30 LOCAL_ENTRY_TRAILING_DESCRIPTOR_LENGTH = 4+4+4 def read_local_entry(io) #:nodoc:all @localHeaderOffset = io.tell staticSizedFieldsBuf = io.read(LOCAL_ENTRY_STATIC_HEADER_LENGTH) unless (staticSizedFieldsBuf.size==LOCAL_ENTRY_STATIC_HEADER_LENGTH) raise ZipError, "Premature end of file. Not enough data for zip entry local header" end @header_signature , @version , @fstype , @gp_flags , @compression_method, lastModTime , lastModDate , @crc , @compressed_size , @size , nameLength , extraLength = staticSizedFieldsBuf.unpack('VCCvvvvVVVvv') unless (@header_signature == LOCAL_ENTRY_SIGNATURE) raise ZipError, "Zip local header magic not found at location '#{localHeaderOffset}'" end set_time(lastModDate, lastModTime) @name = io.read(nameLength) extra = io.read(extraLength) if (extra && extra.length != extraLength) raise ZipError, "Truncated local zip entry header" else if ZipExtraField === @extra @extra.merge(extra) else @extra = ZipExtraField.new(extra) end end end def ZipEntry.read_local_entry(io) entry = new(io.path) entry.read_local_entry(io) return entry rescue ZipError return nil end def write_local_entry(io) #:nodoc:all @localHeaderOffset = io.tell io << [LOCAL_ENTRY_SIGNATURE , 0 , 0 , # @gp_flags , @compression_method , @time.to_binary_dos_time , # @lastModTime , @time.to_binary_dos_date , # @lastModDate , @crc , @compressed_size , @size , @name ? @name.length : 0, @extra? @extra.local_length : 0 ].pack('VvvvvvVVVvv') io << @name io << (@extra ? @extra.to_local_bin : "") end CENTRAL_DIRECTORY_ENTRY_SIGNATURE = 0x02014b50 CDIR_ENTRY_STATIC_HEADER_LENGTH = 46 def read_c_dir_entry(io) #:nodoc:all staticSizedFieldsBuf = io.read(CDIR_ENTRY_STATIC_HEADER_LENGTH) unless (staticSizedFieldsBuf.size == CDIR_ENTRY_STATIC_HEADER_LENGTH) raise ZipError, "Premature end of file. Not enough data for zip cdir entry header" end @header_signature , @version , # version of encoding software @fstype , # filesystem type @versionNeededToExtract, @gp_flags , @compression_method , lastModTime , lastModDate , @crc , @compressed_size , @size , nameLength , extraLength , commentLength , diskNumberStart , @internalFileAttributes, @externalFileAttributes, @localHeaderOffset , @name , @extra , @comment = staticSizedFieldsBuf.unpack('VCCvvvvvVVVvvvvvVV') unless (@header_signature == CENTRAL_DIRECTORY_ENTRY_SIGNATURE) raise ZipError, "Zip local header magic not found at location '#{localHeaderOffset}'" end set_time(lastModDate, lastModTime) @name = io.read(nameLength) if ZipExtraField === @extra @extra.merge(io.read(extraLength)) else @extra = ZipExtraField.new(io.read(extraLength)) end @comment = io.read(commentLength) unless (@comment && @comment.length == commentLength) raise ZipError, "Truncated cdir zip entry header" end case @fstype when FSTYPE_UNIX @unix_perms = (@externalFileAttributes >> 16) & 07777 case (@externalFileAttributes >> 28) when 04 @ftype = :directory when 010 @ftype = :file when 012 @ftype = :link else raise ZipInternalError, "unknown file type #{'0%o' % (@externalFileAttributes >> 28)}" end else if name_is_directory? @ftype = :directory else @ftype = :file end end end def ZipEntry.read_c_dir_entry(io) #:nodoc:all entry = new(io.path) entry.read_c_dir_entry(io) return entry rescue ZipError return nil end def file_stat(path) # :nodoc: if @follow_symlinks return File::stat(path) else return File::lstat(path) end end def get_extra_attributes_from_path(path) # :nodoc: unless Zip::RUNNING_ON_WINDOWS stat = file_stat(path) @unix_uid = stat.uid @unix_gid = stat.gid @unix_perms = stat.mode & 07777 end end def set_extra_attributes_on_path(destPath) # :nodoc: return unless (file? or directory?) case @fstype when FSTYPE_UNIX # BUG: does not update timestamps into account # ignore setuid/setgid bits by default. honor if @restore_ownership unix_perms_mask = 01777 unix_perms_mask = 07777 if (@restore_ownership) File::chmod(@unix_perms & unix_perms_mask, destPath) if (@restore_permissions && @unix_perms) File::chown(@unix_uid, @unix_gid, destPath) if (@restore_ownership && @unix_uid && @unix_gid && Process::egid == 0) # File::utimes() end end def write_c_dir_entry(io) #:nodoc:all case @fstype when FSTYPE_UNIX ft = nil case @ftype when :file ft = 010 @unix_perms ||= 0644 when :directory ft = 004 @unix_perms ||= 0755 when :symlink ft = 012 @unix_perms ||= 0755 else raise ZipInternalError, "unknown file type #{self.inspect}" end @externalFileAttributes = (ft << 12 | (@unix_perms & 07777)) << 16 end io << [CENTRAL_DIRECTORY_ENTRY_SIGNATURE, @version , # version of encoding software @fstype , # filesystem type 0 , # @versionNeededToExtract , 0 , # @gp_flags , @compression_method , @time.to_binary_dos_time , # @lastModTime , @time.to_binary_dos_date , # @lastModDate , @crc , @compressed_size , @size , @name ? @name.length : 0 , @extra ? @extra.c_dir_length : 0 , @comment ? comment.length : 0 , 0 , # disk number start @internalFileAttributes , # file type (binary=0, text=1) @externalFileAttributes , # native filesystem attributes @localHeaderOffset , @name , @extra , @comment ].pack('VCCvvvvvVVVvvvvvVV') io << @name io << (@extra ? @extra.to_c_dir_bin : "") io << @comment end def == (other) return false unless other.class == self.class # Compares contents of local entry and exposed fields (@compression_method == other.compression_method && @crc == other.crc && @compressed_size == other.compressed_size && @size == other.size && @name == other.name && @extra == other.extra && @filepath == other.filepath && self.time.dos_equals(other.time)) end def <=> (other) return to_s <=> other.to_s end # Returns an IO like object for the given ZipEntry. # Warning: may behave weird with symlinks. def get_input_stream(&aProc) if @ftype == :directory return yield(NullInputStream.instance) if block_given? return NullInputStream.instance elsif @filepath case @ftype when :file return File.open(@filepath, "rb", &aProc) when :symlink linkpath = File::readlink(@filepath) stringio = StringIO.new(linkpath) return yield(stringio) if block_given? return stringio else raise "unknown @ftype #{@ftype}" end else zis = ZipInputStream.new(@zipfile, localHeaderOffset) zis.get_next_entry if block_given? begin return yield(zis) ensure zis.close end else return zis end end end def gather_fileinfo_from_srcpath(srcPath) # :nodoc: stat = file_stat(srcPath) case stat.ftype when 'file' if name_is_directory? raise ArgumentError, "entry name '#{newEntry}' indicates directory entry, but "+ "'#{srcPath}' is not a directory" end @ftype = :file when 'directory' if ! name_is_directory? @name += "/" end @ftype = :directory when 'link' if name_is_directory? raise ArgumentError, "entry name '#{newEntry}' indicates directory entry, but "+ "'#{srcPath}' is not a directory" end @ftype = :symlink else raise RuntimeError, "unknown file type: #{srcPath.inspect} #{stat.inspect}" end @filepath = srcPath get_extra_attributes_from_path(@filepath) end def write_to_zip_output_stream(aZipOutputStream) #:nodoc:all if @ftype == :directory aZipOutputStream.put_next_entry(self) elsif @filepath aZipOutputStream.put_next_entry(self) get_input_stream { |is| IOExtras.copy_stream(aZipOutputStream, is) } else aZipOutputStream.copy_raw_entry(self) end end def parent_as_string entry_name = name.chomp("/") slash_index = entry_name.rindex("/") slash_index ? entry_name.slice(0, slash_index+1) : nil end def get_raw_input_stream(&aProc) File.open(@zipfile, "rb", &aProc) end private def set_time(binaryDosDate, binaryDosTime) @time = Time.parse_binary_dos_format(binaryDosDate, binaryDosTime) rescue ArgumentError puts "Invalid date/time in zip entry" end def write_file(destPath, continueOnExistsProc = proc { false }) if File.exists?(destPath) && ! yield(self, destPath) raise ZipDestinationFileExistsError, "Destination '#{destPath}' already exists" end File.open(destPath, "wb") do |os| get_input_stream do |is| set_extra_attributes_on_path(destPath) buf = '' while buf = is.sysread(Decompressor::CHUNK_SIZE, buf) os << buf end end end end def create_directory(destPath) if File.directory? destPath return elsif File.exists? destPath if block_given? && yield(self, destPath) FileUtils.rm(destPath) else raise ZipDestinationFileExistsError, "Cannot create directory '#{destPath}'. "+ "A file already exists with that name" end end Dir.mkdir destPath set_extra_attributes_on_path(destPath) end # BUG: create_symlink() does not use &onExistsProc def create_symlink(destPath) stat = nil begin stat = File::lstat(destPath) rescue Errno::ENOENT end io = get_input_stream linkto = io.read if stat if stat.symlink? if File::readlink(destPath) == linkto return else raise ZipDestinationFileExistsError, "Cannot create symlink '#{destPath}'. "+ "A symlink already exists with that name" end else raise ZipDestinationFileExistsError, "Cannot create symlink '#{destPath}'. "+ "A file already exists with that name" end end File::symlink(linkto, destPath) end end # ZipOutputStream is the basic class for writing zip files. It is # possible to create a ZipOutputStream object directly, passing # the zip file name to the constructor, but more often than not # the ZipOutputStream will be obtained from a ZipFile (perhaps using the # ZipFileSystem interface) object for a particular entry in the zip # archive. # # A ZipOutputStream inherits IOExtras::AbstractOutputStream in order # to provide an IO-like interface for writing to a single zip # entry. Beyond methods for mimicking an IO-object it contains # the method put_next_entry that closes the current entry # and creates a new. # # Please refer to ZipInputStream for example code. # # java.util.zip.ZipOutputStream is the original inspiration for this # class. class ZipOutputStream include IOExtras::AbstractOutputStream attr_accessor :comment # Opens the indicated zip file. If a file with that name already # exists it will be overwritten. def initialize(fileName) super() @fileName = fileName @outputStream = File.new(@fileName, "wb") @entrySet = ZipEntrySet.new @compressor = NullCompressor.instance @closed = false @currentEntry = nil @comment = nil end # Same as #initialize but if a block is passed the opened # stream is passed to the block and closed when the block # returns. def ZipOutputStream.open(fileName) return new(fileName) unless block_given? zos = new(fileName) yield zos ensure zos.close if zos end # Closes the stream and writes the central directory to the zip file def close return if @closed finalize_current_entry update_local_headers write_central_directory @outputStream.close @closed = true end # Closes the current entry and opens a new for writing. # +entry+ can be a ZipEntry object or a string. def put_next_entry(entry, level = Zlib::DEFAULT_COMPRESSION) raise ZipError, "zip stream is closed" if @closed newEntry = entry.kind_of?(ZipEntry) ? entry : ZipEntry.new(@fileName, entry.to_s) init_next_entry(newEntry, level) @currentEntry=newEntry end def copy_raw_entry(entry) entry = entry.dup raise ZipError, "zip stream is closed" if @closed raise ZipError, "entry is not a ZipEntry" if !entry.kind_of?(ZipEntry) finalize_current_entry @entrySet << entry src_pos = entry.local_entry_offset entry.write_local_entry(@outputStream) @compressor = NullCompressor.instance @outputStream << entry.get_raw_input_stream { |is| is.seek(src_pos, IO::SEEK_SET) is.read(entry.compressed_size) } @compressor = NullCompressor.instance @currentEntry = nil end private def finalize_current_entry return unless @currentEntry finish @currentEntry.compressed_size = @outputStream.tell - @currentEntry.localHeaderOffset - @currentEntry.local_header_size @currentEntry.size = @compressor.size @currentEntry.crc = @compressor.crc @currentEntry = nil @compressor = NullCompressor.instance end def init_next_entry(entry, level = Zlib::DEFAULT_COMPRESSION) finalize_current_entry @entrySet << entry entry.write_local_entry(@outputStream) @compressor = get_compressor(entry, level) end def get_compressor(entry, level) case entry.compression_method when ZipEntry::DEFLATED then Deflater.new(@outputStream, level) when ZipEntry::STORED then PassThruCompressor.new(@outputStream) else raise ZipCompressionMethodError, "Invalid compression method: '#{entry.compression_method}'" end end def update_local_headers pos = @outputStream.tell @entrySet.each { |entry| @outputStream.pos = entry.localHeaderOffset entry.write_local_entry(@outputStream) } @outputStream.pos = pos end def write_central_directory cdir = ZipCentralDirectory.new(@entrySet, @comment) cdir.write_to_stream(@outputStream) end protected def finish @compressor.finish end public # Modeled after IO.<< def << (data) @compressor << data end end class Compressor #:nodoc:all def finish end end class PassThruCompressor < Compressor #:nodoc:all def initialize(outputStream) super() @outputStream = outputStream @crc = Zlib::crc32 @size = 0 end def << (data) val = data.to_s @crc = Zlib::crc32(val, @crc) @size += val.size @outputStream << val end attr_reader :size, :crc end class NullCompressor < Compressor #:nodoc:all include Singleton def << (data) raise IOError, "closed stream" end attr_reader :size, :compressed_size end class Deflater < Compressor #:nodoc:all def initialize(outputStream, level = Zlib::DEFAULT_COMPRESSION) super() @outputStream = outputStream @zlibDeflater = Zlib::Deflate.new(level, -Zlib::MAX_WBITS) @size = 0 @crc = Zlib::crc32 end def << (data) val = data.to_s @crc = Zlib::crc32(val, @crc) @size += val.size @outputStream << @zlibDeflater.deflate(data) end def finish until @zlibDeflater.finished? @outputStream << @zlibDeflater.finish end end attr_reader :size, :crc end class ZipEntrySet #:nodoc:all include Enumerable def initialize(anEnumerable = []) super() @entrySet = {} anEnumerable.each { |o| push(o) } end def include?(entry) @entrySet.include?(entry.to_s) end def <<(entry) @entrySet[entry.to_s] = entry end alias :push :<< def size @entrySet.size end alias :length :size def delete(entry) @entrySet.delete(entry.to_s) ? entry : nil end def each(&aProc) @entrySet.values.each(&aProc) end def entries @entrySet.values end # deep clone def dup newZipEntrySet = ZipEntrySet.new(@entrySet.values.map { |e| e.dup }) end def == (other) return false unless other.kind_of?(ZipEntrySet) return @entrySet == other.entrySet end def parent(entry) @entrySet[entry.parent_as_string] end def glob(pattern, flags = File::FNM_PATHNAME|File::FNM_DOTMATCH) entries.select { |entry| File.fnmatch(pattern, entry.name.chomp('/'), flags) } end #TODO attr_accessor :auto_create_directories protected attr_accessor :entrySet end class ZipCentralDirectory include Enumerable END_OF_CENTRAL_DIRECTORY_SIGNATURE = 0x06054b50 MAX_END_OF_CENTRAL_DIRECTORY_STRUCTURE_SIZE = 65536 + 18 STATIC_EOCD_SIZE = 22 attr_reader :comment # Returns an Enumerable containing the entries. def entries @entrySet.entries end def initialize(entries = ZipEntrySet.new, comment = "") #:nodoc: super() @entrySet = entries.kind_of?(ZipEntrySet) ? entries : ZipEntrySet.new(entries) @comment = comment end def write_to_stream(io) #:nodoc: offset = io.tell @entrySet.each { |entry| entry.write_c_dir_entry(io) } write_e_o_c_d(io, offset) end def write_e_o_c_d(io, offset) #:nodoc: io << [END_OF_CENTRAL_DIRECTORY_SIGNATURE, 0 , # @numberOfThisDisk 0 , # @numberOfDiskWithStartOfCDir @entrySet? @entrySet.size : 0 , @entrySet? @entrySet.size : 0 , cdir_size , offset , @comment ? @comment.length : 0 ].pack('VvvvvVVv') io << @comment end private :write_e_o_c_d def cdir_size #:nodoc: # does not include eocd @entrySet.inject(0) { |value, entry| entry.cdir_header_size + value } end private :cdir_size def read_e_o_c_d(io) #:nodoc: buf = get_e_o_c_d(io) @numberOfThisDisk = ZipEntry::read_zip_short(buf) @numberOfDiskWithStartOfCDir = ZipEntry::read_zip_short(buf) @totalNumberOfEntriesInCDirOnThisDisk = ZipEntry::read_zip_short(buf) @size = ZipEntry::read_zip_short(buf) @sizeInBytes = ZipEntry::read_zip_long(buf) @cdirOffset = ZipEntry::read_zip_long(buf) commentLength = ZipEntry::read_zip_short(buf) @comment = buf.read(commentLength) raise ZipError, "Zip consistency problem while reading eocd structure" unless buf.size == 0 end def read_central_directory_entries(io) #:nodoc: begin io.seek(@cdirOffset, IO::SEEK_SET) rescue Errno::EINVAL raise ZipError, "Zip consistency problem while reading central directory entry" end @entrySet = ZipEntrySet.new @size.times { @entrySet << ZipEntry.read_c_dir_entry(io) } end def read_from_stream(io) #:nodoc: read_e_o_c_d(io) read_central_directory_entries(io) end def get_e_o_c_d(io) #:nodoc: begin io.seek(-MAX_END_OF_CENTRAL_DIRECTORY_STRUCTURE_SIZE, IO::SEEK_END) rescue Errno::EINVAL io.seek(0, IO::SEEK_SET) rescue Errno::EFBIG # FreeBSD 4.9 raise Errno::EFBIG instead of Errno::EINVAL io.seek(0, IO::SEEK_SET) end # 'buf = io.read' substituted with lump of code to work around FreeBSD 4.5 issue retried = false buf = nil begin buf = io.read rescue Errno::EFBIG # FreeBSD 4.5 may raise Errno::EFBIG raise if (retried) retried = true io.seek(0, IO::SEEK_SET) retry end sigIndex = buf.rindex([END_OF_CENTRAL_DIRECTORY_SIGNATURE].pack('V')) raise ZipError, "Zip end of central directory signature not found" unless sigIndex buf=buf.slice!((sigIndex+4)...(buf.size)) def buf.read(count) slice!(0, count) end return buf end # For iterating over the entries. def each(&proc) @entrySet.each(&proc) end # Returns the number of entries in the central directory (and # consequently in the zip archive). def size @entrySet.size end def ZipCentralDirectory.read_from_stream(io) #:nodoc: cdir = new cdir.read_from_stream(io) return cdir rescue ZipError return nil end def == (other) #:nodoc: return false unless other.kind_of?(ZipCentralDirectory) @entrySet.entries.sort == other.entries.sort && comment == other.comment end end class ZipError < StandardError ; end class ZipEntryExistsError < ZipError; end class ZipDestinationFileExistsError < ZipError; end class ZipCompressionMethodError < ZipError; end class ZipEntryNameError < ZipError; end class ZipInternalError < ZipError; end # ZipFile is modeled after java.util.zip.ZipFile from the Java SDK. # The most important methods are those inherited from # ZipCentralDirectory for accessing information about the entries in # the archive and methods such as get_input_stream and # get_output_stream for reading from and writing entries to the # archive. The class includes a few convenience methods such as # #extract for extracting entries to the filesystem, and #remove, # #replace, #rename and #mkdir for making simple modifications to # the archive. # # Modifications to a zip archive are not committed until #commit or # #close is called. The method #open accepts a block following # the pattern from File.open offering a simple way to # automatically close the archive when the block returns. # # The following example opens zip archive my.zip # (creating it if it doesn't exist) and adds an entry # first.txt and a directory entry a_dir # to it. # # require 'zip/zip' # # Zip::ZipFile.open("my.zip", Zip::ZipFile::CREATE) { # |zipfile| # zipfile.get_output_stream("first.txt") { |f| f.puts "Hello from ZipFile" } # zipfile.mkdir("a_dir") # } # # The next example reopens my.zip writes the contents of # first.txt to standard out and deletes the entry from # the archive. # # require 'zip/zip' # # Zip::ZipFile.open("my.zip", Zip::ZipFile::CREATE) { # |zipfile| # puts zipfile.read("first.txt") # zipfile.remove("first.txt") # } # # ZipFileSystem offers an alternative API that emulates ruby's # interface for accessing the filesystem, ie. the File and Dir classes. class ZipFile < ZipCentralDirectory CREATE = 1 attr_reader :name # default -> false attr_accessor :restore_ownership # default -> false attr_accessor :restore_permissions # default -> true attr_accessor :restore_times # Opens a zip archive. Pass true as the second parameter to create # a new archive if it doesn't exist already. def initialize(fileName, create = nil) super() @name = fileName @comment = "" if (File.exists?(fileName)) File.open(name, "rb") { |f| read_from_stream(f) } elsif (create) @entrySet = ZipEntrySet.new else raise ZipError, "File #{fileName} not found" end @create = create @storedEntries = @entrySet.dup @restore_ownership = false @restore_permissions = false @restore_times = true end # Same as #new. If a block is passed the ZipFile object is passed # to the block and is automatically closed afterwards just as with # ruby's builtin File.open method. def ZipFile.open(fileName, create = nil) zf = ZipFile.new(fileName, create) if block_given? begin yield zf ensure zf.close end else zf end end # Returns the zip files comment, if it has one attr_accessor :comment # Iterates over the contents of the ZipFile. This is more efficient # than using a ZipInputStream since this methods simply iterates # through the entries in the central directory structure in the archive # whereas ZipInputStream jumps through the entire archive accessing the # local entry headers (which contain the same information as the # central directory). def ZipFile.foreach(aZipFileName, &block) ZipFile.open(aZipFileName) { |zipFile| zipFile.each(&block) } end # Returns an input stream to the specified entry. If a block is passed # the stream object is passed to the block and the stream is automatically # closed afterwards just as with ruby's builtin File.open method. def get_input_stream(entry, &aProc) get_entry(entry).get_input_stream(&aProc) end # Returns an output stream to the specified entry. If a block is passed # the stream object is passed to the block and the stream is automatically # closed afterwards just as with ruby's builtin File.open method. def get_output_stream(entry, &aProc) newEntry = entry.kind_of?(ZipEntry) ? entry : ZipEntry.new(@name, entry.to_s) if newEntry.directory? raise ArgumentError, "cannot open stream to directory entry - '#{newEntry}'" end zipStreamableEntry = ZipStreamableStream.new(newEntry) @entrySet << zipStreamableEntry zipStreamableEntry.get_output_stream(&aProc) end # Returns the name of the zip archive def to_s @name end # Returns a string containing the contents of the specified entry def read(entry) get_input_stream(entry) { |is| is.read } end # Convenience method for adding the contents of a file to the archive def add(entry, srcPath, &continueOnExistsProc) continueOnExistsProc ||= proc { false } check_entry_exists(entry, continueOnExistsProc, "add") newEntry = entry.kind_of?(ZipEntry) ? entry : ZipEntry.new(@name, entry.to_s) newEntry.gather_fileinfo_from_srcpath(srcPath) @entrySet << newEntry end # Removes the specified entry. def remove(entry) @entrySet.delete(get_entry(entry)) end # Renames the specified entry. def rename(entry, newName, &continueOnExistsProc) foundEntry = get_entry(entry) check_entry_exists(newName, continueOnExistsProc, "rename") get_output_stream(newName) { |os| os.write(read(foundEntry)) } remove(foundEntry) end # Replaces the specified entry with the contents of srcPath (from # the file system). def replace(entry, srcPath) check_file(srcPath) add(remove(entry), srcPath) end # Extracts entry to file destPath. def extract(entry, destPath, &onExistsProc) onExistsProc ||= proc { false } foundEntry = get_entry(entry) foundEntry.extract(destPath, &onExistsProc) end # Commits changes that has been made since the previous commit to # the zip archive. def commit return if ! commit_required? on_success_replace(name) { |tmpFile| ZipOutputStream.open(tmpFile) { |zos| @entrySet.each { |e| e.write_to_zip_output_stream(zos) } zos.comment = comment } true } initialize(name) end # Closes the zip file committing any changes that has been made. def close commit end # Returns true if any changes has been made to this archive since # the previous commit def commit_required? return @entrySet != @storedEntries || @create == ZipFile::CREATE end # Searches for entry with the specified name. Returns nil if # no entry is found. See also get_entry def find_entry(entry) @entrySet.detect { |e| e.name.sub(/\/$/, "") == entry.to_s.sub(/\/$/, "") } end # Searches for an entry just as find_entry, but throws Errno::ENOENT # if no entry is found. def get_entry(entry) selectedEntry = find_entry(entry) unless selectedEntry raise Errno::ENOENT, entry end selectedEntry.restore_ownership = @restore_ownership selectedEntry.restore_permissions = @restore_permissions selectedEntry.restore_times = @restore_times return selectedEntry end # Creates a directory def mkdir(entryName, permissionInt = 0755) if find_entry(entryName) raise Errno::EEXIST, "File exists - #{entryName}" end @entrySet << ZipStreamableDirectory.new(@name, entryName.to_s.ensure_end("/"), nil, permissionInt) end private def is_directory(newEntry, srcPath) srcPathIsDirectory = File.directory?(srcPath) if newEntry.is_directory && ! srcPathIsDirectory raise ArgumentError, "entry name '#{newEntry}' indicates directory entry, but "+ "'#{srcPath}' is not a directory" elsif ! newEntry.is_directory && srcPathIsDirectory newEntry.name += "/" end return newEntry.is_directory && srcPathIsDirectory end def check_entry_exists(entryName, continueOnExistsProc, procedureName) continueOnExistsProc ||= proc { false } if @entrySet.detect { |e| e.name == entryName } if continueOnExistsProc.call remove get_entry(entryName) else raise ZipEntryExistsError, procedureName+" failed. Entry #{entryName} already exists" end end end def check_file(path) unless File.readable? path raise Errno::ENOENT, path end end def on_success_replace(aFilename) tmpfile = get_tempfile tmpFilename = tmpfile.path tmpfile.close if yield tmpFilename FileUtils.mv(tmpFilename, name) end end def get_tempfile tempFile = Tempfile.new(File.basename(name), File.dirname(name)) tempFile.binmode tempFile end end class ZipStreamableDirectory < ZipEntry def initialize(zipfile, entry, srcPath = nil, permissionInt = nil) super(zipfile, entry) @ftype = :directory entry.get_extra_attributes_from_path(srcPath) if (srcPath) @unix_perms = permissionInt if (permissionInt) end end class ZipStreamableStream < DelegateClass(ZipEntry) #nodoc:all def initialize(entry) super(entry) @tempFile = Tempfile.new(File.basename(name), File.dirname(zipfile)) @tempFile.binmode end def get_output_stream if block_given? begin yield(@tempFile) ensure @tempFile.close end else @tempFile end end def get_input_stream if ! @tempFile.closed? raise StandardError, "cannot open entry for reading while its open for writing - #{name}" end @tempFile.open # reopens tempfile from top @tempFile.binmode if block_given? begin yield(@tempFile) ensure @tempFile.close end else @tempFile end end def write_to_zip_output_stream(aZipOutputStream) aZipOutputStream.put_next_entry(self) get_input_stream { |is| IOExtras.copy_stream(aZipOutputStream, is) } end end class ZipExtraField < Hash ID_MAP = {} # Meta class for extra fields class Generic def self.register_map if self.const_defined?(:HEADER_ID) ID_MAP[self.const_get(:HEADER_ID)] = self end end def self.name self.to_s.split("::")[-1] end # return field [size, content] or false def initial_parse(binstr) if ! binstr # If nil, start with empty. return false elsif binstr[0,2] != self.class.const_get(:HEADER_ID) $stderr.puts "Warning: weired extra feild header ID. skip parsing" return false end [binstr[2,2].unpack("v")[0], binstr[4..-1]] end def ==(other) self.class != other.class and return false each { |k, v| v != other[k] and return false } true end def to_local_bin s = pack_for_local self.class.const_get(:HEADER_ID) + [s.length].pack("v") + s end def to_c_dir_bin s = pack_for_c_dir self.class.const_get(:HEADER_ID) + [s.length].pack("v") + s end end # Info-ZIP Additional timestamp field class UniversalTime < Generic HEADER_ID = "UT" register_map def initialize(binstr = nil) @ctime = nil @mtime = nil @atime = nil @flag = nil binstr and merge(binstr) end attr_accessor :atime, :ctime, :mtime, :flag def merge(binstr) binstr == "" and return size, content = initial_parse(binstr) size or return @flag, mtime, atime, ctime = content.unpack("CVVV") mtime and @mtime ||= Time.at(mtime) atime and @atime ||= Time.at(atime) ctime and @ctime ||= Time.at(ctime) end def ==(other) @mtime == other.mtime && @atime == other.atime && @ctime == other.ctime end def pack_for_local s = [@flag].pack("C") @flag & 1 != 0 and s << [@mtime.to_i].pack("V") @flag & 2 != 0 and s << [@atime.to_i].pack("V") @flag & 4 != 0 and s << [@ctime.to_i].pack("V") s end def pack_for_c_dir s = [@flag].pack("C") @flag & 1 == 1 and s << [@mtime.to_i].pack("V") s end end # Info-ZIP Extra for UNIX uid/gid class IUnix < Generic HEADER_ID = "Ux" register_map def initialize(binstr = nil) @uid = 0 @gid = 0 binstr and merge(binstr) end attr_accessor :uid, :gid def merge(binstr) binstr == "" and return size, content = initial_parse(binstr) # size: 0 for central direcotry. 4 for local header return if(! size || size == 0) uid, gid = content.unpack("vv") @uid ||= uid @gid ||= gid end def ==(other) @uid == other.uid && @gid == other.gid end def pack_for_local [@uid, @gid].pack("vv") end def pack_for_c_dir "" end end ## start main of ZipExtraField < Hash def initialize(binstr = nil) binstr and merge(binstr) end def merge(binstr) binstr == "" and return i = 0 while i < binstr.length id = binstr[i,2] len = binstr[i+2,2].to_s.unpack("v")[0] if id && ID_MAP.member?(id) field_name = ID_MAP[id].name if self.member?(field_name) self[field_name].mergea(binstr[i, len+4]) else field_obj = ID_MAP[id].new(binstr[i, len+4]) self[field_name] = field_obj end elsif id unless self["Unknown"] s = "" class << s alias_method :to_c_dir_bin, :to_s alias_method :to_local_bin, :to_s end self["Unknown"] = s end if ! len || len+4 > binstr[i..-1].length self["Unknown"] << binstr[i..-1] break; end self["Unknown"] << binstr[i, len+4] end i += len+4 end end def create(name) field_class = nil ID_MAP.each { |id, klass| if klass.name == name field_class = klass break end } if ! field_class raise ZipError, "Unknown extra field '#{name}'" end self[name] = field_class.new() end def to_local_bin s = "" each { |k, v| s << v.to_local_bin } s end alias :to_s :to_local_bin def to_c_dir_bin s = "" each { |k, v| s << v.to_c_dir_bin } s end def c_dir_length to_c_dir_bin.length end def local_length to_local_bin.length end alias :c_dir_size :c_dir_length alias :local_size :local_length alias :length :local_length alias :size :local_length end # end ZipExtraField end # Zip namespace module # Copyright (C) 2002, 2003 Thomas Sondergaard # rubyzip is free software; you can redistribute it and/or # modify it under the terms of the ruby license. zipfilesystem.rb000066400000000000000000000361511446701454400344540ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/ziprequire 'zip/zip' module Zip # The ZipFileSystem API provides an API for accessing entries in # a zip archive that is similar to ruby's builtin File and Dir # classes. # # Requiring 'zip/zipfilesystem' includes this module in ZipFile # making the methods in this module available on ZipFile objects. # # Using this API the following example creates a new zip file # my.zip containing a normal entry with the name # first.txt, a directory entry named mydir # and finally another normal entry named second.txt # # require 'zip/zipfilesystem' # # Zip::ZipFile.open("my.zip", Zip::ZipFile::CREATE) { # |zipfile| # zipfile.file.open("first.txt", "w") { |f| f.puts "Hello world" } # zipfile.dir.mkdir("mydir") # zipfile.file.open("mydir/second.txt", "w") { |f| f.puts "Hello again" } # } # # Reading is as easy as writing, as the following example shows. The # example writes the contents of first.txt from zip archive # my.zip to standard out. # # require 'zip/zipfilesystem' # # Zip::ZipFile.open("my.zip") { # |zipfile| # puts zipfile.file.read("first.txt") # } module ZipFileSystem def initialize # :nodoc: mappedZip = ZipFileNameMapper.new(self) @zipFsDir = ZipFsDir.new(mappedZip) @zipFsFile = ZipFsFile.new(mappedZip) @zipFsDir.file = @zipFsFile @zipFsFile.dir = @zipFsDir end # Returns a ZipFsDir which is much like ruby's builtin Dir (class) # object, except it works on the ZipFile on which this method is # invoked def dir @zipFsDir end # Returns a ZipFsFile which is much like ruby's builtin File (class) # object, except it works on the ZipFile on which this method is # invoked def file @zipFsFile end # Instances of this class are normally accessed via the accessor # ZipFile::file. An instance of ZipFsFile behaves like ruby's # builtin File (class) object, except it works on ZipFile entries. # # The individual methods are not documented due to their # similarity with the methods in File class ZipFsFile attr_writer :dir # protected :dir class ZipFsStat def initialize(zipFsFile, entryName) @zipFsFile = zipFsFile @entryName = entryName end def forward_invoke(msg) @zipFsFile.send(msg, @entryName) end def kind_of?(t) super || t == ::File::Stat end forward_message :forward_invoke, :file?, :directory?, :pipe?, :chardev? forward_message :forward_invoke, :symlink?, :socket?, :blockdev? forward_message :forward_invoke, :readable?, :readable_real? forward_message :forward_invoke, :writable?, :writable_real? forward_message :forward_invoke, :executable?, :executable_real? forward_message :forward_invoke, :sticky?, :owned?, :grpowned? forward_message :forward_invoke, :setuid?, :setgid? forward_message :forward_invoke, :zero? forward_message :forward_invoke, :size, :size? forward_message :forward_invoke, :mtime, :atime, :ctime def blocks; nil; end def get_entry @zipFsFile.__send__(:get_entry, @entryName) end private :get_entry def gid e = get_entry if e.extra.member? "IUnix" e.extra["IUnix"].gid || 0 else 0 end end def uid e = get_entry if e.extra.member? "IUnix" e.extra["IUnix"].uid || 0 else 0 end end def ino; 0; end def dev; 0; end def rdev; 0; end def rdev_major; 0; end def rdev_minor; 0; end def ftype if file? return "file" elsif directory? return "directory" else raise StandardError, "Unknown file type" end end def nlink; 1; end def blksize; nil; end def mode e = get_entry if e.fstype == 3 e.externalFileAttributes >> 16 else 33206 # 33206 is equivalent to -rw-rw-rw- end end end def initialize(mappedZip) @mappedZip = mappedZip end def get_entry(fileName) if ! exists?(fileName) raise Errno::ENOENT, "No such file or directory - #{fileName}" end @mappedZip.find_entry(fileName) end private :get_entry def unix_mode_cmp(fileName, mode) begin e = get_entry(fileName) e.fstype == 3 && ((e.externalFileAttributes >> 16) & mode ) != 0 rescue Errno::ENOENT false end end private :unix_mode_cmp def exists?(fileName) expand_path(fileName) == "/" || @mappedZip.find_entry(fileName) != nil end alias :exist? :exists? # Permissions not implemented, so if the file exists it is accessible alias owned? exists? alias grpowned? exists? def readable?(fileName) unix_mode_cmp(fileName, 0444) end alias readable_real? readable? def writable?(fileName) unix_mode_cmp(fileName, 0222) end alias writable_real? writable? def executable?(fileName) unix_mode_cmp(fileName, 0111) end alias executable_real? executable? def setuid?(fileName) unix_mode_cmp(fileName, 04000) end def setgid?(fileName) unix_mode_cmp(fileName, 02000) end def sticky?(fileName) unix_mode_cmp(fileName, 01000) end def umask(*args) ::File.umask(*args) end def truncate(fileName, len) raise StandardError, "truncate not supported" end def directory?(fileName) entry = @mappedZip.find_entry(fileName) expand_path(fileName) == "/" || (entry != nil && entry.directory?) end def open(fileName, openMode = "r", &block) case openMode when "r" @mappedZip.get_input_stream(fileName, &block) when "w" @mappedZip.get_output_stream(fileName, &block) else raise StandardError, "openmode '#{openMode} not supported" unless openMode == "r" end end def new(fileName, openMode = "r") open(fileName, openMode) end def size(fileName) @mappedZip.get_entry(fileName).size end # Returns nil for not found and nil for directories def size?(fileName) entry = @mappedZip.find_entry(fileName) return (entry == nil || entry.directory?) ? nil : entry.size end def chown(ownerInt, groupInt, *filenames) filenames.each { |fileName| e = get_entry(fileName) unless e.extra.member?("IUnix") e.extra.create("IUnix") end e.extra["IUnix"].uid = ownerInt e.extra["IUnix"].gid = groupInt } filenames.size end def chmod (modeInt, *filenames) filenames.each { |fileName| e = get_entry(fileName) e.fstype = 3 # force convertion filesystem type to unix e.externalFileAttributes = modeInt << 16 } filenames.size end def zero?(fileName) sz = size(fileName) sz == nil || sz == 0 rescue Errno::ENOENT false end def file?(fileName) entry = @mappedZip.find_entry(fileName) entry != nil && entry.file? end def dirname(fileName) ::File.dirname(fileName) end def basename(fileName) ::File.basename(fileName) end def split(fileName) ::File.split(fileName) end def join(*fragments) ::File.join(*fragments) end def utime(modifiedTime, *fileNames) fileNames.each { |fileName| get_entry(fileName).time = modifiedTime } end def mtime(fileName) @mappedZip.get_entry(fileName).mtime end def atime(fileName) e = get_entry(fileName) if e.extra.member? "UniversalTime" e.extra["UniversalTime"].atime else nil end end def ctime(fileName) e = get_entry(fileName) if e.extra.member? "UniversalTime" e.extra["UniversalTime"].ctime else nil end end def pipe?(filename) false end def blockdev?(filename) false end def chardev?(filename) false end def symlink?(fileName) false end def socket?(fileName) false end def ftype(fileName) @mappedZip.get_entry(fileName).directory? ? "directory" : "file" end def readlink(fileName) raise NotImplementedError, "The readlink() function is not implemented" end def symlink(fileName, symlinkName) raise NotImplementedError, "The symlink() function is not implemented" end def link(fileName, symlinkName) raise NotImplementedError, "The link() function is not implemented" end def pipe raise NotImplementedError, "The pipe() function is not implemented" end def stat(fileName) if ! exists?(fileName) raise Errno::ENOENT, fileName end ZipFsStat.new(self, fileName) end alias lstat stat def readlines(fileName) open(fileName) { |is| is.readlines } end def read(fileName) @mappedZip.read(fileName) end def popen(*args, &aProc) File.popen(*args, &aProc) end def foreach(fileName, aSep = $/, &aProc) open(fileName) { |is| is.each_line(aSep, &aProc) } end def delete(*args) args.each { |fileName| if directory?(fileName) raise Errno::EISDIR, "Is a directory - \"#{fileName}\"" end @mappedZip.remove(fileName) } end def rename(fileToRename, newName) @mappedZip.rename(fileToRename, newName) { true } end alias :unlink :delete def expand_path(aPath) @mappedZip.expand_path(aPath) end end # Instances of this class are normally accessed via the accessor # ZipFile::dir. An instance of ZipFsDir behaves like ruby's # builtin Dir (class) object, except it works on ZipFile entries. # # The individual methods are not documented due to their # similarity with the methods in Dir class ZipFsDir def initialize(mappedZip) @mappedZip = mappedZip end attr_writer :file def new(aDirectoryName) ZipFsDirIterator.new(entries(aDirectoryName)) end def open(aDirectoryName) dirIt = new(aDirectoryName) if block_given? begin yield(dirIt) return nil ensure dirIt.close end end dirIt end def pwd; @mappedZip.pwd; end alias getwd pwd def chdir(aDirectoryName) unless @file.stat(aDirectoryName).directory? raise Errno::EINVAL, "Invalid argument - #{aDirectoryName}" end @mappedZip.pwd = @file.expand_path(aDirectoryName) end def entries(aDirectoryName) entries = [] foreach(aDirectoryName) { |e| entries << e } entries end def foreach(aDirectoryName) unless @file.stat(aDirectoryName).directory? raise Errno::ENOTDIR, aDirectoryName end path = @file.expand_path(aDirectoryName).ensure_end("/") subDirEntriesRegex = Regexp.new("^#{path}([^/]+)$") @mappedZip.each { |fileName| match = subDirEntriesRegex.match(fileName) yield(match[1]) unless match == nil } end def delete(entryName) unless @file.stat(entryName).directory? raise Errno::EINVAL, "Invalid argument - #{entryName}" end @mappedZip.remove(entryName) end alias rmdir delete alias unlink delete def mkdir(entryName, permissionInt = 0755) @mappedZip.mkdir(entryName, permissionInt) end def chroot(*args) raise NotImplementedError, "The chroot() function is not implemented" end end class ZipFsDirIterator # :nodoc:all include Enumerable def initialize(arrayOfFileNames) @fileNames = arrayOfFileNames @index = 0 end def close @fileNames = nil end def each(&aProc) raise IOError, "closed directory" if @fileNames == nil @fileNames.each(&aProc) end def read raise IOError, "closed directory" if @fileNames == nil @fileNames[(@index+=1)-1] end def rewind raise IOError, "closed directory" if @fileNames == nil @index = 0 end def seek(anIntegerPosition) raise IOError, "closed directory" if @fileNames == nil @index = anIntegerPosition end def tell raise IOError, "closed directory" if @fileNames == nil @index end end # All access to ZipFile from ZipFsFile and ZipFsDir goes through a # ZipFileNameMapper, which has one responsibility: ensure class ZipFileNameMapper # :nodoc:all include Enumerable def initialize(zipFile) @zipFile = zipFile @pwd = "/" end attr_accessor :pwd def find_entry(fileName) @zipFile.find_entry(expand_to_entry(fileName)) end def get_entry(fileName) @zipFile.get_entry(expand_to_entry(fileName)) end def get_input_stream(fileName, &aProc) @zipFile.get_input_stream(expand_to_entry(fileName), &aProc) end def get_output_stream(fileName, &aProc) @zipFile.get_output_stream(expand_to_entry(fileName), &aProc) end def read(fileName) @zipFile.read(expand_to_entry(fileName)) end def remove(fileName) @zipFile.remove(expand_to_entry(fileName)) end def rename(fileName, newName, &continueOnExistsProc) @zipFile.rename(expand_to_entry(fileName), expand_to_entry(newName), &continueOnExistsProc) end def mkdir(fileName, permissionInt = 0755) @zipFile.mkdir(expand_to_entry(fileName), permissionInt) end # Turns entries into strings and adds leading / # and removes trailing slash on directories def each @zipFile.each { |e| yield("/"+e.to_s.chomp("/")) } end def expand_path(aPath) expanded = aPath.starts_with("/") ? aPath : @pwd.ensure_end("/") + aPath expanded.gsub!(/\/\.(\/|$)/, "") expanded.gsub!(/[^\/]+\/\.\.(\/|$)/, "") expanded.empty? ? "/" : expanded end private def expand_to_entry(aPath) expand_path(aPath).lchop end end end class ZipFile include ZipFileSystem end end # Copyright (C) 2002, 2003 Thomas Sondergaard # rubyzip is free software; you can redistribute it and/or # modify it under the terms of the ruby license. ziprequire.rb000066400000000000000000000043721446701454400337440ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/gems/zip-2.0.2/lib/zip# With ziprequire you can load ruby modules from a zip file. This means # ruby's module include path can include zip-files. # # The following example creates a zip file with a single entry # log/simplelog.rb that contains a single function # simpleLog: # # require 'zip/zipfilesystem' # # Zip::ZipFile.open("my.zip", true) { # |zf| # zf.file.open("log/simplelog.rb", "w") { # |f| # f.puts "def simpleLog(v)" # f.puts ' Kernel.puts "INFO: #{v}"' # f.puts "end" # } # } # # To use the ruby module stored in the zip archive simply require # zip/ziprequire and include the my.zip zip # file in the module search path. The following command shows one # way to do this: # # ruby -rzip/ziprequire -Imy.zip -e " require 'log/simplelog'; simpleLog 'Hello world' " #$: << 'data/rubycode.zip' << 'data/rubycode2.zip' require 'zip/zip' class ZipList #:nodoc:all def initialize(zipFileList) @zipFileList = zipFileList end def get_input_stream(entry, &aProc) @zipFileList.each { |zfName| Zip::ZipFile.open(zfName) { |zf| begin return zf.get_input_stream(entry, &aProc) rescue Errno::ENOENT end } } raise Errno::ENOENT, "No matching entry found in zip files '#{@zipFileList.join(', ')}' "+ " for '#{entry}'" end end module Kernel #:nodoc:all alias :oldRequire :require def require(moduleName) zip_require(moduleName) || oldRequire(moduleName) end def zip_require(moduleName) return false if already_loaded?(moduleName) get_resource(ensure_rb_extension(moduleName)) { |zis| eval(zis.read); $" << moduleName } return true rescue Errno::ENOENT => ex return false end def get_resource(resourceName, &aProc) zl = ZipList.new($:.grep(/\.zip$/)) zl.get_input_stream(resourceName, &aProc) end def already_loaded?(moduleName) moduleRE = Regexp.new("^"+moduleName+"(\.rb|\.so|\.dll|\.o)?$") $".detect { |e| e =~ moduleRE } != nil end def ensure_rb_extension(aString) aString.sub(/(\.rb)?$/i, ".rb") end end # Copyright (C) 2002 Thomas Sondergaard # rubyzip is free software; you can redistribute it and/or # modify it under the terms of the ruby license. mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/specifications/000077500000000000000000000000001446701454400305325ustar00rootroot00000000000000always_verify_ssl_certificates-0.3.0.gemspec000066400000000000000000000023351446701454400407510ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/specifications# -*- encoding: utf-8 -*- Gem::Specification.new do |s| s.name = "always_verify_ssl_certificates" s.version = "0.3.0" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["James Golick"] s.date = "2011-03-17" s.description = "Ruby\342\200\231s net/http is setup to never verify SSL certificates by default. Most ruby libraries do the same. That means that you\342\200\231re not verifying the identity of the server you\342\200\231re communicating with and are therefore exposed to man in the middle attacks. This gem monkey-patches net/http to force certificate verification and make turning it off impossible." s.email = "jamesgolick@gmail.com" s.extra_rdoc_files = ["LICENSE", "README.rdoc"] s.files = ["LICENSE", "README.rdoc"] s.homepage = "http://github.com/jamesgolick/always_verify_ssl_certificates" s.rdoc_options = ["--charset=UTF-8"] s.require_paths = ["lib"] s.rubygems_version = "1.8.21" s.summary = "Force net/http to always verify SSL certificates." if s.respond_to? :specification_version then s.specification_version = 3 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then else end else end end bundler-1.5.2.gemspec000066400000000000000000000024341446701454400341170ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/specifications# -*- encoding: utf-8 -*- Gem::Specification.new do |s| s.name = "bundler" s.version = "1.5.2" s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version= s.authors = ["Andr\u{e9} Arko", "Terence Lee", "Carl Lerche", "Yehuda Katz"] s.date = "2014-01-11" s.description = "Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably" s.email = ["andre@arko.net"] s.executables = ["bundle", "bundler"] s.files = ["bin/bundle", "bin/bundler"] s.homepage = "http://bundler.io" s.licenses = ["MIT"] s.require_paths = ["lib"] s.required_ruby_version = Gem::Requirement.new(">= 1.8.7") s.rubygems_version = "2.0.3" s.summary = "The best way to manage your application's dependencies" if s.respond_to? :specification_version then s.specification_version = 3 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then s.add_development_dependency(%q, ["~> 0.7.3"]) s.add_development_dependency(%q, ["~> 2.11"]) else s.add_dependency(%q, ["~> 0.7.3"]) s.add_dependency(%q, ["~> 2.11"]) end else s.add_dependency(%q, ["~> 0.7.3"]) s.add_dependency(%q, ["~> 2.11"]) end end minitest-5.18.1.gemspec000066400000000000000000000115021446701454400344030ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/specifications# -*- encoding: utf-8 -*- # stub: minitest 5.18.1 ruby lib Gem::Specification.new do |s| s.name = "minitest".freeze s.version = "5.18.1" s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= s.metadata = { "bug_tracker_uri" => "https://github.com/minitest/minitest/issues", "homepage_uri" => "https://github.com/minitest/minitest" } if s.respond_to? :metadata= s.require_paths = ["lib".freeze] s.authors = ["Ryan Davis".freeze] s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDPjCCAiagAwIBAgIBBzANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu\nZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB\nGRYDY29tMB4XDTIzMDEwMTA3NTExN1oXDTI0MDEwMTA3NTExN1owRTETMBEGA1UE\nAwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS\nJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda\nb9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx\ntaCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT\noOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh\nGiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt\nqhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV\ngBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw\nHQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB\nAQAkg3y+PBnBAPWdxxITm5sPHqdWQgSyCpRA20o4LTuWr8BWhSXBkfQNa7cY6fOn\nxyM34VPzBFbExv6XOGDfOMFBVaYTHuN9peC/5/umL7kLl+nflXzL2QA7K6LYj5Bg\nsM574Onr0dZDM6Vn69bzQ7rBIFDfK/OhlPzqKZad4nsdcsVH8ODCiT+ATMIZyz5K\nWCnNtqlyiWXI8tdTpahDgcUwfcN/oN7v4K8iU5IbLJX6HQ5DKgmKjfb6XyMth16k\nROfWo9Uyp8ba/j9eVG14KkYRaLydAY1MNQk2yd3R5CGfeOpD1kttxjoypoUJ2dOG\nnsNBRuQJ1UfiCG97a6DNm+Fr\n-----END CERTIFICATE-----\n".freeze] s.date = "2023-06-16" s.description = "minitest provides a complete suite of testing facilities supporting\nTDD, BDD, mocking, and benchmarking.\n\n \"I had a class with Jim Weirich on testing last week and we were\n allowed to choose our testing frameworks. Kirk Haines and I were\n paired up and we cracked open the code for a few test\n frameworks...\n\n I MUST say that minitest is *very* readable / understandable\n compared to the 'other two' options we looked at. Nicely done and\n thank you for helping us keep our mental sanity.\"\n\n -- Wayne E. Seguin\n\nminitest/test is a small and incredibly fast unit testing framework.\nIt provides a rich set of assertions to make your tests clean and\nreadable.\n\nminitest/spec is a functionally complete spec engine. It hooks onto\nminitest/test and seamlessly bridges test assertions over to spec\nexpectations.\n\nminitest/benchmark is an awesome way to assert the performance of your\nalgorithms in a repeatable manner. Now you can assert that your newb\nco-worker doesn't replace your linear algorithm with an exponential\none!\n\nminitest/mock by Steven Baker, is a beautifully tiny mock (and stub)\nobject framework.\n\nminitest/pride shows pride in testing and adds coloring to your test\noutput. I guess it is an example of how to write IO pipes too. :P\n\nminitest/test is meant to have a clean implementation for language\nimplementors that need a minimal set of methods to bootstrap a working\ntest suite. For example, there is no magic involved for test-case\ndiscovery.\n\n \"Again, I can't praise enough the idea of a testing/specing\n framework that I can actually read in full in one sitting!\"\n\n -- Piotr Szotkowski\n\nComparing to rspec:\n\n rspec is a testing DSL. minitest is ruby.\n\n -- Adam Hawkins, \"Bow Before MiniTest\"\n\nminitest doesn't reinvent anything that ruby already provides, like:\nclasses, modules, inheritance, methods. This means you only have to\nlearn ruby to use minitest and all of your regular OO practices like\nextract-method refactorings still apply.".freeze s.email = ["ryand-ruby@zenspider.com".freeze] s.extra_rdoc_files = ["History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze] s.files = ["History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze] s.homepage = "https://github.com/minitest/minitest".freeze s.licenses = ["MIT".freeze] s.rdoc_options = ["--main".freeze, "README.rdoc".freeze] s.required_ruby_version = Gem::Requirement.new([">= 2.6".freeze, "< 4.0".freeze]) s.rubygems_version = "3.3.26".freeze s.summary = "minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking".freeze s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version if s.respond_to? :specification_version then s.specification_version = 4 end if s.respond_to? :add_runtime_dependency then s.add_development_dependency(%q.freeze, [">= 4.0", "< 7"]) s.add_development_dependency(%q.freeze, ["~> 4.0"]) else s.add_dependency(%q.freeze, [">= 4.0", "< 7"]) s.add_dependency(%q.freeze, ["~> 4.0"]) end end nexus-0.1.0.gemspec000066400000000000000000000043121446701454400336140ustar00rootroot00000000000000mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/specifications# -*- encoding: utf-8 -*- Gem::Specification.new do |s| s.name = "nexus" s.version = "0.1.0" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Nick Quaranto"] s.date = "2012-09-05" s.description = "Adds a command to RubyGems for uploading gems to a nexus server." s.email = ["nick@quaran.to"] s.executables = ["nbundle"] s.files = ["bin/nbundle"] s.homepage = "https://github.com/sonatype/nexus-ruby-support/tree/master/nexus-gem" s.post_install_message = "\n========================================================================\n\n Thanks for installing Nexus gem! You can now run:\n\n gem nexus publish your gems onto Nexus server\n\n nbundle a bundler fork with mirror support. \n just add a mirror with:\n\n bundle config mirror.http://rubygems.org http://localhost:8081/nexus/content/repositories/rubygems.org\n\n and use 'nbundle' instead of 'bundle'\n\n========================================================================\n\n" s.require_paths = ["lib"] s.rubygems_version = "1.8.21" s.summary = "Commands to interact with nexus server" if s.respond_to? :specification_version then s.specification_version = 3 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then s.add_runtime_dependency(%q, ["~> 0.3.0"]) s.add_development_dependency(%q, ["= 0.9.2.2"]) s.add_development_dependency(%q, ["~> 3.1.1"]) s.add_development_dependency(%q, ["~> 1.8.8"]) s.add_development_dependency(%q, [">= 0"]) else s.add_dependency(%q, ["~> 0.3.0"]) s.add_dependency(%q, ["= 0.9.2.2"]) s.add_dependency(%q, ["~> 3.1.1"]) s.add_dependency(%q, ["~> 1.8.8"]) s.add_dependency(%q, [">= 0"]) end else s.add_dependency(%q, ["~> 0.3.0"]) s.add_dependency(%q, ["= 0.9.2.2"]) s.add_dependency(%q, ["~> 3.1.1"]) s.add_dependency(%q, ["~> 1.8.8"]) s.add_dependency(%q, [">= 0"]) end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/rubygems/specifications/zip-2.0.2.gemspec000066400000000000000000000017431446701454400333430ustar00rootroot00000000000000# -*- encoding: utf-8 -*- Gem::Specification.new do |s| s.name = "zip" s.version = "2.0.2" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Postmodern", "Thomas Sondergaard", "Sam Lown"] s.date = "2010-05-26" s.description = "zip is a Ruby library for reading and writing Zip files. Unlike the official rubyzip, zip is compatible with Ruby 1.9.1." s.email = ["me@samlown.com", "postmodern.mod3@gmail.com"] s.extra_rdoc_files = ["ChangeLog.txt", "README"] s.files = ["ChangeLog.txt", "README"] s.homepage = "http://github.com/postmodern/rubyzip2" s.rdoc_options = ["--charset=UTF-8"] s.require_paths = ["lib"] s.rubygems_version = "1.8.21" s.summary = "zip is a Ruby library for reading and writing Zip files" if s.respond_to? :specification_version then s.specification_version = 3 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then else end else end end mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/second.pom000066400000000000000000000037231446701454400256670ustar00rootroot00000000000000 4.0.0 rubygems second 2 gem Commands to interact with nexus server Adds a command to RubyGems for uploading gems to a nexus server. Christian Meier m.kristian@web.de utf-8 1.0.4 org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} second-2.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/some_specs000066400000000000000000047772221446701454400260020ustar00rootroot00000000000000[[I"_:ETU:Gem::Version[I"1.2;TI" ruby;T[I"-;TU;[I"1;T@ [I" 0xffffff;TU;[I" 0.1.0;T@ [I"10xengineer-node;TU;[I" 0.0.10;T@ [I"1234567890_;TU;[I"1.0;T@ [I"12_hour_time;TU;[I" 0.0.4;T@ [I" 189seg;TU;[I" 0.0.1;T@ [I" 24games;TU;[I" 0.2.4;T@ [I" 2DArray;TU;[I" 0.1.6;T@ [I"2Performant;TU;[I" 0.1.3;T@ [I"360_services;TU;[I" 1.1.3;T@ [I"3d-ribbon;TU;[I" 0.1.2;T@ [I"3months_staff_schedule;TU;[I" 0.0.2;T@ [I"3scale_client;TU;[I" 2.3.2;T@ [I" 4info;TU;[I" 2.0.0;T@ [I" 7digital;T@@@ [I"%80ae2fe5c929b7d0a00bdee2d710fa9e;TU;[I" 0.0.8;T@ [I" 80legs;TU;[I" 0.2.5;T@ [I"a;TU;[I" 0.1.1;T@ [I"a2_printer;T@@ [I" a2ws;TU;[I" 0.1.9;T@ [I"a2z;T@`@ [I"a9n;TU;[I" 0.0.7;T@ [I"aa;TU;[I"1.1;T@ [I"aaalex-off_github;TU;[I" 1.1.2;T@ [I"aa_associations;T@`@ [I"aai10-mechanize;TU;[I" 2.0.1.0;T@ [I"aalib-ruby;TU;[I" 0.7.1;T@ [I"aamax.amazing_game;T@'@ [I" a_a_n;TU;[I" 0.2.6;T@ [I" aargvark;TU;[I" 0.0.15;T@ [I"aaronh-chronic;TU;[I" 0.3.9;T@ [I" aarrr;T@'@ [I" aasm;TU;[I" 3.0.15;T@ [I"aasm-bang;T@@ [I"aavkontakte;T@6@ [I"aavkontakte-rails3;TU;[I" 0.1.7;T@ [I"a_b;T@`@ [I" abaci;TU;[I" 0.2.0;T@ [I" abacus;T@'@ [I"abacus_count;T@'@ [I" abaddon;TU;[I" 0.0.3;T@ [I"abak-flow;TU;[I" 0.3.2;T@ [I"abanalyzer;TU;[I" 0.0.6;T@ [I"abb;T@'@ [I" abbey;T@6@ [I" abcd;TU;[I" 0.0.0;T@ [I"abcjs-rails;TU;[I"1.5;T@ [I" abcrunch;TU;[I" 0.0.5;T@ [I"abebooks4r;T@@ [I" abel;TU;[I" 10.0.0.1;T@ [I"abgabenrechner;TU;[I" 0.3.3;T@ [I"abhi-contacts;TU;[I" 1.0.0;T@ [I" abide;T@E@ [I"ability_engine;T@E@ [I" abingo;TU;[I" 2.0.2;T@ [I"abingo_port;T@@ [I" abiquo;T@@@ [I"abiquo-chef-agent;TU;[I" 1.0.11;T@ [I"abiquo-etk;TU;[I" 0.6.4;T@ [I"abiquo-installer-tests;TU;[I"20121026.1;T@ [I" ablerc;T@@ [I"abn;T@O@ [I" abnormal;T@@ [I"abn_search;T@@ [I"ABO;T@E@ [I"aboisvert_aws;TU;[I" 3.0.1;T@ [I" abongo;TU;[I" 1.0.8;T@ [I"about_page;T@"@ [I"a_b_plugin;T@@ [I" abrio;T@@ [I"abr_lookup;T@`@ [I" abrt;T@@ [I" absa-esd;T@@ [I" absa-h2h;T@1@ [I"absa-notify-me;T@n@ [I" abscss;T@'@ [I" absee;T@@ [I"absentee_camper;T@n@ [I" absolute;T@@ [I"AbsoluteRenamer;T@x@ [I"AbsoluteRenamer-date;T@@ [I"AbsoluteRenamer-system;T@@ [I"absolute_time;T@@ [I"absolutize;TU;[I" 0.0.12;T@ [I" abst;T@@ [I" abstats;T@'@ [I" abstract;T@@ [I"abstract_analyzer;T@@@ [I"abstract_auth;T@6@ [I"abstract_class;T@E@ [I"abstract_feature_branch;T@@ [I"abstract_graph;T@@ [I"abstract_interface;T@@ [I"abstract-interface;T@@ [I"abstraction;T@"@ [I"abstract_method;TU;[I" 1.2.0;T@ [I"abstract-sql;T@"@ [I"abstractstack;T@@ [I"abstract-tables;TU;[I" 1.0.5;T@ [I"abstract_type;T@E@ [I"absurdity;TU;[I" 0.2.8;T@ [I"abt;T@"@ [I"abtain_billing;TU;[I" 1.03;T@ [I"ab_tester;T@'@ [I"abuiles-geokit;TU;[I" 1.6.1;T@ [I"abundance;TU;[I" 1.3.5;T@ [I"Abundance;T@@ [I" abyss;TU;[I" 0.4.0;T@ [I" acacia;T@'@ [I"acamargo-geoip_city;T@s@ [I" acapela;TU;[I" 0.8.1;T@ [I"accelerator;T@`@ [I"accentless;T@`@ [I"acceptable;TU;[I" 0.2.3;T@ [I"acceptable_api;T@"@ [I"accepts-flattened-values;T@@ [I"accept_values_for;TU;[I" 0.4.3;T@ [I"access_control;T@'@ [I"AccessControl;T@@ [I"accessibility_bridge;T@`@ [I"accessibility_core;TU;[I" 0.4.1;T@ [I"!accessible_attribute_matcher;T@@ [I"accessible_attributes;T@n@ [I"accessible_for;T@x@ [I"access_kit;TU;[I" 0.04;T@ [I"access_loggable;T@@ [I"access_logging;T@@ [I" accessor;TU;[I" 1.0.2;T@ [I"accessorize;T@'@ [I"accessor_utilities;TU;[I" 1.0.1;T@ [I"accessor-utilities;TU;[I" 1.0.4;T@ [I"accessrange;T@@ [I"access_rules;T@@ [I"access_schema;TU;[I" 0.6.1;T@ [I" acclaim;TU;[I" 0.5.1;T@ [I"accordion_view;T@'@ [I"accountable;T@E@ [I"accountancy;T@'@ [I" accounts;T@'@ [I"accounts_client;TU;[I" 0.0.9;T@ [I"account_scopper;T@@ [I"accoutrement;T@"@ [I"accumulators;T@@ [I" acdc;TU;[I" 0.7.7;T@ [I"ace;TU;[I" 0.4.5;T@ [I""ace-debugger-ruby_core_source;TU;[I" 1.1.5;T@ [I"aced_rails;T@`@ [I"ace-editor;TU;[I"0.2.0.1422;T@ [I"ace_editor-rails;T@'@ [I"ace-rails;T@E@ [I"ace-rails-ap;T@@ [I" acgt;T@E@ [I"ach;T@@ [I"ach_builder;T@E@ [I"achdirect-activemerchant;TU;[I" 1.5.1;T@ [I"achievable;T@E@ [I"achievements;T@@ [I" achiever;T@@ [I"achirkunov-spatial_adapter;T@@ [I" achoo;T@@ [I"achoo-plugin-homescreen;TU;[I"0.1;T@ [I" achtung;TU;[I" 0.2.1;T@ [I" ackbar;T@`@ [I"acl;TU;[I"0.2;T@ [I" acl9;TU;[I" 0.12.0;T@ [I" aclatraz;TU;[I" 0.1.4;T@ [I"a_clockwork_ruby;T@@ [I"acl_plugin;T@'@ [I" acme;T@E@ [I"acme_japanese_av_actress;T@@ [I"acnfp-trans-counter;T@@ [I" acorn;T@@ [I" acouchi;T@@ [I"acpc_dealer;T@E@ [I"acpc_dealer_data;T@@ [I"acpc_poker_basic_proxy;T@@ [I"acpc_poker_match_state;T@E@ [I"acpc_poker_player_proxy;T@'@ [I"acpc_poker_types;T@n@ [I" acread;TU;[I" 0.5.3;T@ [I" acronym;T@@ [I"acropolis;T@'@ [I"acrosslite;T@x@ [I"ac-summarization-utils;TU;[I" 0.0.47;T@ [I"act_as_dirty;T@@ [I"act_as_releasable;T@@ [I"act-fluent-logger-rails;T@@ [I" actic;TU;[I" 0.0.5.1;T@ [I"action_annotation;T@@ [I"action_args;T@@ [I"action_auditor;T@@ [I"action_context;T@6@ [I"action_controller_observer;T@@ [I"&actioncontroller-parameter_filter;T@E@ [I"action_event;T@@ [I"action_flow;T@@ [I"action-guard;TU;[I" 1.2.1;T@ [I"actionio-inifile;TU;[I" 2.0.4;T@ [I"action-jackson;T@'@ [I"action_kit_api;TU;[I" 0.4.8;T@ [I"action_links;T@@ [I"action_logger;T@@@ [I"actionmailer;TU;[I" 3.2.11;T@ [I"7ActionMailer-Base-to-use-an-absolute-path-template;T@@ [I"!action_mailer_cache_delivery;T@@ [I"actionmailer-callbacks;TU;[I" 1.1.0;T@ [I" action_mailer_deliver_later;T@@@ [I"actionmailer_extensions;T@x@ [I"actionmailer_host_autoset;TU;[I" 0.3.0;T@ [I"actionmailer_inline_css;TU;[I" 1.5.2;T@ [I"actionmailer-instyle;T@J@ [I"actionmailer-ironruby;T@@ [I"actionmailer-javamail;T@`@ [I"actionmailer-maildir;T@'@ [I"actionmailer-rack-upgrade;TU;[I" 2.3.17;T@ [I" actionmailer-rack-upgrade-2;TU;[I" 2.3.16;T@ [I"action_mailer_test_mailing;T@@ [I" action_mailer_test_via_smtp;T@@ [I"action_mailer_tls;T@;@ [I"action_mailer_verp;T@@ [I"actionmailer-with-request;T@x@ [I"actionmailer_x509;T@x@ [I"action_messager;T@E@ [I"action_not_found;T@@ [I"actionpack;T@@ [I"actionpack-rack-upgrade;T@@ [I"actionpack-rack-upgrade-2;T@@ [I"actionpool;T@@ [I"ActionPool;T@@ [I"action_presenter;TU;[I" 1.1.6;T@ [I"action-presenter;T@@ [I"action_profiler;T@@ [I"action_pusher;T@'@ [I"action_requires;T@@ [I"actionservice;T@@ [I"action_sms;T@`@ [I"action_smser;T@u@ [I"action_sms_gateways;T@n@ [I"ActionText;TU;[I" 1.2.3;T@ [I"action_throttler;T@@ [I"actiontimer;T@@ [I"ActionTimer;T@@ [I"action_tree;T@@ [I" actionverb_s3_direct_upload;T@n@ [I"actionview-data;T@ @ [I"actionview-encoded_mail_to;T@@ [I"$actionview_template_inheritance;T@'@ [I"actionwebservice;TU;[I" 1.2.6;T@ [I"action_widget;TU;[I" 0.5.0;T@ [I" activa;TU;[I" 0.0.14;T@ [I" Active;T@@ [I"active_access;T@@ [I"active_acl;T@@ [I"activeaclplus;TU;[I" 0.4.2;T@ [I"activeadmin;T@@ [I"active_admin-acts_as_list;T@@ [I"*active_admin_acts_as_list_integration;T@@ [I"activeadmin_async_export;T@'@ [I"$active_admin-awesome_nested_set;T@@ [I"activeadmin-axlsx;T@O@ [I"activeadmin-blog;TU;[I" 0.4.4;T@ [I"activeadmin-cancan;T@+@ [I"activeadmin-cms;T@'@ [I"active_admin_editor;T@W@ [I"activeadmin-generator;T@n@ [I""ActiveAdmin-Globalize3-inputs;T@'@ [I"&activeadmin-globalize3-unofficial;T@E@ [I"active_admin_importable;T@@ [I"activeadmin-mongoid;T@'@ [I"activeadmin-mongoid-blog;T@@ [I" activeadmin-mongoid-reorder;T@@ [I"activeadmin-mongoidv3;T@E@ [I"activeadmin-mongomapper;T@'@ [I"&active_admin_relationship_filters;T@@ [I"activeadmin-selleo-cms;T@@ [I"activeadmin-settings;T@x@ [I"active_admin_sidebar;T@@ [I"activeadmin-sortable;T@'@ [I"activeadmin-translate;TU;[I" 0.2.2;T@ [I"active_admin_usertasks;T@@ [I"active_api;T@@ [I"active_application;T@'@ [I"active_assets;T@;@ [I"activeasync;T@@ [I"active_attr;TU;[I" 0.7.0;T@ [I"active_attributes;T@'@ [I"active-behavior;T@@ [I"active_blog;T@X@ [I"active_blur;T@@ [I"active_bomb;TU;[I" 0.9.1;T@ [I"active_breadcrumbs;T@@ [I"active_cache;T@'@ [I"activecalendar;T@'@ [I"active_cart;TU;[I" 0.0.18;T@ [I"active-cart;T@'@ [I"active_cmis;T@@ [I"active_collab;T@E@ [I"active_collection;T@@ [I"active_column;T@!@ [I"active_component;T@@@ [I"active_conductor;T@I@ [I"activeconfig;TU;[I" 0.6.2;T@ [I"active_configuration;T@@ [I"activecontext;T@@ [I"active_control;T@'@ [I"activecouch;T@@ [I"active_crudify;T@`@ [I"active_csv;T@`@ [I"active_data;T@@ [I"active_data_migrations;T@@ [I"activedebugger;T@E@ [I"active_debugger;T@E@ [I"active_decorator;T@@ [I"active_device;T@N@ [I"active_diigo;T@"@ [I"activedirectory;T@@ [I"active_directory;TU;[I" 1.5.5;T@ [I"ActiveDirectoryForRuby;TU;[I" 0.1.8;T@ [I"active_doc;T@@ [I"activedocument;T@@ [I"active_document;T@@@ [I"active_documentum;TU;[I" 0.3.1;T@ [@@I" java;T[I"active_dynamodb;T@'@ [I"active_enum;TU;[I" 0.9.12;T@ [I"ActiveExcel;T@'@ [I"active_exchange;T@@ [I"active_export;T@x@ [I"active_factory;T@@ [I"activefacts;TU;[I" 0.8.16;T@ [I"activefacts-api;TU;[I" 0.9.3;T@ [I"active-fedora;TU;[I" 5.4.0;T@ [I"active_fedora_finders;T@6@ [I"active_fedora_relsint;T@`@ [I"active_fedora_streamable;T@@ [I"active_filter;T@@ [I"active_finite;T@@ [I"activeforce;TU;[I" 1.7.1;T@ [I"activeforecast;T@@ [I"activeform;T@'@ [I"active_form;T@V@ [I"active_forms;TU;[I" 0.3.2.1;T@ [I"active_fulfillment;T@O@ [I"activefuzzer;T@E@ [I"active_fuzzer;T@E@ [I"active_geo_db;T@E@ [I"activegist;T@@ [I"active_git;T@@ [I"active_graph;T@@ [I"activegrid;T@@ [I"activegroonga;TU;[I" 2.1.3;T@ [I"activegroonga-fabrication;T@@ [I"active_guards;T@'@ [I"active_guid;T@"@ [I"active_harmony;T@@ [I"active_hash;T@@ [I"active_helper;T@I@ [I"active_illusion;T@'@ [I"active_import;T@+@ [I"active_index;T@@ [I"activejson;T@+@ [I"active-keso;T@`@ [I"active_lastfm;T@@ [I"active_layer;T@@ [I"activeldap;TU;[I" 3.2.2;T@ [I"activeldap3;T@@ [I"activeldap-fabrication;T@@ [I"active_leonardo;T@@ [I"active_link_to;T@@ [I"active-list;TU;[I" 4.1.8;T@ [I"activelogger;T@'@ [I"active_lucene;TU;[I"0.6;T@ [I"active_mac;T@'@ [I"active_mailbox;T@'@ [I"activemdb;T@I@ [I"activemerchant;TU;[I" 1.29.3;T@ [I"activemerchant_alipay;T@E@ [I"activemerchant-anz-gateway;T@@ [I"activemerchant_banklink;T@@ [I"activemerchant-bpoint;T@@ [I"active_merchant_card_flex;T@"@ [I"active_merchant_ccavenue;T@@ [I"activemerchant-clickandbuy;T@@ [I"/active_merchant_cyber_source_subscriptions;T@@ [I"activemerchant-est;TU;[I" 1.4.2.6;T@ [I"ActiveMerchant-FatZebra;T@@ [I"active_merchant_first_data;T@@ [I"active_merchant_ideal;T@@ [I"$active_merchant_ideal_multicert;T@`@ [I"active_merchant_mollie;T@`@ [I" activemerchant_moneybookers;T@E@ [I"activemerchant-nsp;TU;[I" 1.27.0;T@ [I"active_merchant_ogone;T@@ [I"#activemerchant_patch_for_china;T@1@ [I"active_merchant_payline;T@@ [I"&activemerchant-paymentech-orbital;T@,@ [I"active_merchant_payu_in;T@'@ [I"activemerchant-payway;T@E@ [I"active_merchant_sermepa;T@`@ [I"active_merchant_tranzila;T@'@ [I"active_merchant_webpay;T@@ [I"activemessaging;TU;[I" 0.12.1;T@ [I"$activemessaging-kestrel-adapter;TU;[I" 1.0.3;T@ [I"active_metadata;TU;[I" 0.8.4;T@ [I"activemodel;T@@ [I"active_model_archive;T@u@ [I"&active_model_association_adapters;T@@ [I"%activemodel_association_adapters;T@'@ [I"0activemodel-attribute_changed_specification;T@@@ [I"!active-model-email-validator;T@@ [I"activemodel-error;T@'@ [I"activemodel-form;T@E@ [I"active_model_listener;T@[@ [I"active_model_pusher;T@'@ [I"%active_model_serializer-matchers;T@@ [I"active_model_serializers;TU;[I" 0.6.0;T@ [I"&active_model_serializers-matchers;T@`@ [I"%active_model_version_serializers;T@@ [I"activemodel-warnings;T@@ [I"active_mongo;T@@ [I" activemq;T@'@ [I"active_navigation;T@`@ [I"active_nomad;T@@ [I"active_nutrition;T@@ [I"activeobject;T@"@ [I"active_olap;T@@ [I"activepage;T@'@ [I"activepayment;T@[@ [I"#active_paypal_adaptive_payment;TU;[I" 0.3.16;T@ [I"activepesel;T@`@ [I"active_presenter;T@"@ [I"active_presenter_generator;T@@ [I"active_presenters;TU;[I" 1.1.7;T@ [I"active_press;T@@ [I"active-profiling;T@E@ [I"activequeue;T@@ [I"activerdf;TU;[I" 1.6.11;T@ [I"activerdf_jena;T@@ [I"activerdf_net7;TU;[I" 1.7.2;T@ [I"activerdf_rdflite;TU;[I" 1.4.1;T@ [I"activerdf_redland;TU;[I" 1.2.2;T@ [I"activerdf_rules;T@E@ [I"activerdf_sesame;T@I@ [I"activerdf_sparql;TU;[I" 1.3.6;T@ [I"active_reaper;T@E@ [I"activerecord;T@@ [I"activerecord2-hstore;T@W@ [I"*activerecord-activesalesforce-adapter;T@O@ [I""activerecord-adonet-sqlserver;TU;[I" 0.3.4;T@ [I"#activerecord-advantage-adapter;T@`@ [I"#activerecord-alt-mongo-adapter;T@@ [I"$activerecord-amalgalite-adapter;TU;[I" 0.8.0;T@ [I"$activerecord-attribute_override;T@E@ [I"activerecord-attributes;T@@ [I"&active_record_attributes_equality;T@@ [I"activerecord_authorails;T@@ [I"*active_record_auto_build_associations;T@@ [I"activerecord-auto_defaults;T@'@ [I"%active_record_base_without_table;T@@@ [I"activerecord-be_readonly;T@E@ [I"activerecord-bq-adapter;T@'@ [I"active_record_cache;T@@ [I"activerecord_cache;T@@ [I"activerecord_cache_store;T@@ [I"active_record_calculator;T@@ [I"'activerecord-callback_notification;T@@ [I"#activerecord-cassandra-adapter;T@@ [I"'activerecord_chronological_records;T@@ [I"activerecord_clone;T@6@ [I" activerecord_column_comment;T@"@ [I"activerecord-column-reader;T@@ [I"$activerecord-committed_observer;T@E@ [I""activerecord_composed_of_enum;T@"@ [I"active_record_composition;T@@ [I""activerecord-concurrent-index;T@'@ [I"activerecord-confirmable;T@@ [I"!active_record_connectionless;T@@ [I"activerecord-connections;T@@ [I"activerecord_constraints;T@`@ [I"activerecord-conversion;T@'@ [I"active_record_csv;T@@@ [I"#activerecord-custom_timestamps;T@`@ [I"#activerecord-datastore-adapter;T@"@ [I""activerecord-dbslayer-adapter;T@@ [I"active_record_defaults;T@@ [I"activerecord-define_nils;T@E@ [I"activerecord-denormalize;T@@ [I"$activerecord-deprecated_finders;T@'@ [I"activerecord-diff;T@E@ [I"activerecord-draft_records;T@@ [I"activerecord-duplicate;T@@ [I"activerecord-embedding;T@'@ [I"active_record_encoding;TU;[I" 0.10.1;T@ [I"activerecord_enum;T@@ [I""activerecord-enumerated_model;T@@@ [I"activerecord-enumerations;T@E@ [I"activerecord_execute_raw;T@@@ [I"activerecord-extensions;T@'@ [I"activerecord-fast-import;T@@ [I"activerecord-fast-import2;T@@ [I"activerecord-fb-adapter;TU;[I" 0.7.3;T@ [I"active_record_foreign_keys;T@@ [I"activerecord-fusion;T@@ [I"active_record_helpers;T@@ [I"active_record_host_pool;TU;[I" 0.6.3;T@ [I"$active_record_hstore_serializer;T@"@ [I"%active_record_ignored_attributes;T@"@ [I"activerecord-import;TU;[I" 0.2.11;T@ [I"activerecord-importer;T@@ [I""activerecord-informix-adapter;TU;[I" 1.1.1;T@ [I" active_record_inherit_assoc;T@@ [I" active_record_inline_schema;T@@ [I"!active-record-instance-count;T@'@ [I"#activerecord-interbase-adapter;T@@ [I"ActiveRecord-JDBC;TU;[I"0.5;T@ [I"activerecord-jdbc-adapter;T@@[@U;[I" 1.2.5;T@ [I"%activerecord-jdbc-adapter-onsite;T@@ [I"!activerecord-jdbcdbf-adapter;TU;[I" 0.9.7.2;T@[I"#activerecord-jdbcderby-adapter;T@@[@@@ [I" activerecord-jdbch2-adapter;T@@[@@@ [I"$activerecord-jdbchsqldb-adapter;T@@[@@@ [I"#activerecord-jdbcmssql-adapter;T@@[@@@ [I"#activerecord-jdbcmysql-adapter;T@@[@@@ [I"(activerecord-jdbcpostgresql-adapter;T@@[@@@ [I")activerecord-jdbcsqlanywhere-adapter;T@@ [I"%activerecord-jdbcsqlite3-adapter;T@@[@@@ [I"activerecord_lax_includes;T@`@ [I"activerecord-lazy;T@E@ [I"!activerecord-lazy-attributes;T@@ [I""activerecord-locking-symbolic;T@'@ [I"activerecord-mimer;T@"@ [I"!activerecord-multiconditions;T@@ [I"active_record_mutex;T@@ [I" activerecord-mysql2-adapter;T@@ [I"(activerecord-mysql2legacydb-adapter;T@@ [I""activerecord-mysql2-retry-ext;T@@ [I"'activerecord-mysql2spatial-adapter;T@@ [I"activerecord-mysql-adapter;T@'@ [I"%activerecord-mysql-adapter-flags;T@@ [I"&activerecord-mysqlspatial-adapter;T@@ [I"*activerecord-native_db_types_override;T@@ [I"!activerecord-netezza-adapter;T@`@[I"active_record_no_table;T@'@ [I" activerecord-nulldb-adapter;T@@ [I"activerecord_null_object;T@@ [I"activerecord-nuodb-adapter;T@@ [I"activerecord-odbc-adapter;TU;[I"2.0;T@ [I"active_record_openid_store;T@+@ [I"active_record_or;T@@ [I")activerecord-oracle_enhanced-adapter;T@@ [I"activerecord-pita;T@'@ [I"activerecord_plurals;T@'@ [I"!activerecord-postgis-adapter;T@@ [I" activerecord-postgres-array;T@V@ [I"activerecord-postgres-copy;TU;[I" 0.3.6;T@ [I"(activerecord-postgres-earthdistance;T@@ [I"!activerecord-postgres-hstore;TU;[I" 0.5.2;T@ [I"&activerecord-postgres-hstore-core;T@@ [I"$activerecord-postgresql-adapter;T@'@ [I"$activerecord-postgresql-cursors;T@E@ [I"'activerecord-postgresql-extensions;T@I@ [I"activerecord-postgres-uuid;T@'@ [I"active_record_query;T@@ [I"active_record_query_trace;T@s@ [I"active-record-query-trace;T@@ [I"activerecord_random;T@@ [I"activerecord-raw-data;T@@ [I" activerecord-readonly_model;T@E@ [I"activerecord-refinements;T@@ [I"#activerecord-reputation-system;T@@ [I"#activerecord-reset-pk-sequence;T@@ [I"activerecord-retry;T@@ [I"$activerecord-ruby_mysql-adapter;T@@ [I"activerecord_save_many;T@@ [I"active_record_schema;TU;[I" 0.5.13;T@ [I"!active_record_serialize_json;T@+@ [I"active_record_shards;TU;[I" 2.6.5;T@ [I""activerecord-simpledb-adapter;TU;[I" 0.4.12;T@ [I"active_record_slave;T@@ [I"activerecord_snapshot_view;TU;[I" 0.11.8;T@ [I"$activerecord-spatialite-adapter;T@@ [I"%activerecord-sqlanywhere-adapter;T@@ [I"#activerecord-sqlserver-adapter;TU;[I" 3.2.10;T@ [I"(activerecord-sqlserver-adapter-2000;T@@ [I"-activerecord-sqlserver-adapter-mirroring;T@@@ [I"+activerecord-sqlserver-adapter-schemas;T@@ [I"+activerecord-sqlserver-adapter-vailsys;TU;[I" 3.0.20;T@ [I"active_record_stash;T@6@ [I"activerecord-tableless;T@@ [I""active_record-tableless_model;T@'@ [I"activerecord-table_version;T@E@ [I"activerecord-time;T@'@ [I"active_record_to_csv;T@@ [I"active_record_to_excel;T@@ [I"active_record_to_simpledb;T@@ [I"activerecord_translatable;T@'@ [I"activerecord-turntable;T@@ [I"%activerecord_unload_all_fixtures;T@+@ [I"!activerecord_url_connections;T@n@ [I"active_record_uuid;T@@ [I"activerecord_uuid;T@'@ [I"activerecord-uuid;T@e@ [I"!activerecord_vertica_adapter;T@@@ [I"!activerecord-vertica-adapter;T@`@[I"active_record_voyeur;T@@ [I"activerecord_worm_table;T@@ [I"&activerecord-wrap-with-connection;T@E@ [I"activerecord-zabbix;TU;[I" 0.1.5;T@ [I"activeredis;T@@ [I"active-redis;T@@ [I"active_reload;T@@ [I"active_remote;TU;[I" 1.3.0;T@ [I"active_repo;T@'@ [I"active_repository;T@@ [I"activeresource;T@@ [I")activeresource_bearer_authentication;T@'@ [I"#activeresource-conditional-get;T@'@ [I"activeresource_connections;T@@ [I"active_resource_extensions;T@"@ [I"activeresource_headers;T@'@ [I"activeresource_json_patch;T@'@ [I"active_resource_pagination;T@@ [I"active-resource-pagination;T@E@ [I"activeresource-persistent;T@@ [I"activeresource-response;T@@ [I"active_resource_simulator;T@E@ [I" active_resource_test_helper;T@@ [I"active_resource_throttle;T@@ [I"active_restrictors;T@@ [I"activerubic;TU;[I" 0.8.2;T@ [I"activesalesforce;T@@ [I"activesambaldap;T@@ [I"ActiveSambaLdap;T@n@ [I"active_sanity;T@@ [I"active_scaffold;TU;[I" 3.2.17;T@ [I"active_scaffold_batch;TU;[I" 3.2.0;T@ [I"active_scaffold_batch_vho;TU;[I" 3.1.1;T@ [I"active_scaffold_clarity;TU;[I" 3.0.24.2;T@ [I"$active_scaffold_config_list_vho;T@@ [I"active_scaffold_duplicate;T@@ [I"active_scaffold_export;TU;[I" 3.3.0;T@ [I"active_scaffold_export_vho;TU;[I" 3.1.2;T@ [I"active_scaffold_generator;T@`@ [I""active_scaffold_generator_gem;T@@@ [I"active_scaffold_san;TU;[I" 3.0.18;T@ [I"active_scaffold-sequel;T@@ [I"active_scaffold_sortable;T@@ [I"!active_scaffold_sortable_vho;T@ @ [I"active_scaffold_vho;TU;[I" 3.1.5;T@ [I"active_schema;T@@ [I"active_scope;T@@ [I"activesearch;TU;[I" 0.0.11;T@ [I"active_seed;T@W@ [I"active_service;T@'@ [I"activesesame;T@`@ [I"active_session;T@@ [I"active_set;T@@ [I"active_shard;T@[@ [I"active_shipping;TU;[I" 0.9.14;T@ [I"activeslave;T@'@ [I"activesms;T@@ [I"active_smsgate;T@@ [I" activesp;T@@ [I"activespec;T@@ [I"active_sql;TU;[I" 2.0.1;T@ [I"active_store;T@@ [I"activesupport;T@@ [I"active_support;TU;[I" 3.0.0;T@ [I"&active_support_alias_class_method;T@N@ [I"activesupport-cascadestore;T@E@ [I"&active_support-dependencies_patch;T@"@ [I"activesupport-jcache;T@@ [I")activesupport_notifications_backport;T@"@ [I"activesupport-refinements;T@'@ [I"activesupport-slices;T@E@ [I"active_table;T@1@ [I"active_tax;T@@ [I"active_tenant;T@@ [I"active_text;T@|@ [I"activetiger;T@`@ [I"activetokyocabinet;T@@ [I"active_triple;T@@ [I"active_tunes;T@'@ [I"active_unimod_generator;T@@ [I"active_url;T@+@ [I"active_utils;T@W@ [I"activeuuid;T@@ [I"activeuuid-ps;T@@@ [I"activevalidators;T@@ [I"activewarehouse;T@@ [I"activewarehouse-etl;T@@ [I" activewarehouse-etl-sgonyea;TU;[I" 0.9.6;T@ [I"active_window_x;T@@@ [I"active_workbench;T@'@ [I"activeworlds_ffi;TU;[I" 4.2.77.3;T@ [I"active_wrapper;TU;[I" 0.4.6;T@ [I"active_wrapper-ar2;T@_@ [I"active_wrapper-solo;T@_@ [I"active_youtube;T@@ [I"active_zuora;T@@ [I" activist;T@V@ [I"activities;T@`@ [I"activiti-ruby;T@E@ [I" activity;T@'@ [I"activity_feed;TU;[I" 2.2.2;T@ [I"activity-logger;T@+@ [I"activity_mapper;T@@ [I"activity_stream;T@@ [I"activity_stream_client;T@@ [I"activitystreams;T@"@ [I"activity_streams;T@I@ [I"activoate;T@@ [I"activo-rails;T@@ [I"acts_as_abusable;T@E@ [I"acts_as_account;T@@ [I"acts_as_activitable;T@@ [I"acts_as_acts_as;T@@ [I"acts_as_aggregate_root;T@@ [I"acts-as-aggregate-root;T@`@ [I"acts_as_aliased;T@n@ [I"acts_as_amazon_product;TU;[I"1.3;T@ [I"acts_as_amico;T@^@ [I"acts_as_api;T@@ [I"acts_as_approvable;T@X@ [I"acts-as-approvable;TU;[I" 0.6.9.1;T@ [I"acts_as_archival;T@@ [I"acts_as_archive;T@@ [I"acts_as_arter_flow_object;T@@ [I"acts-as-assetable;TU;[I" 0.0.2.1;T@ [I"acts_as_assets;TU;[I" 0.4.0.3;T@ [I"acts_as_async;T@@ [I"acts-as-atdw;T@@ [I"acts_as_audited;TU;[I" 2.1.0;T@ [I"acts_as_audited_collection;T@@ [I"acts_as_audited_customized;TU;[I" 1.3.2;T@ [I" acts_as_audited_on_steroids;T@`@ [I"acts_as_audited_rails3;T@x@ [I"acts_as_authoritah;TU;[I" 2.0.5;T@ [I"acts_as_awardable;T@@ [I"acts_as_background_solr;T@@ [I"acts_as_better_tree;TU;[I" 0.9.5;T@ [I"acts_as_bits;T@I@ [I"acts_as_blamable;T@@ [I"acts_as_cachable;T@@@ [I"acts_as_cached;T@@@ [I"acts_as_caesar;T@6@ [I"acts_as_callbackable;T@@ [I"acts_as_chain;T@@ [I"acts_as_cleo;TU;[I" 3.0.2;T@ [I"acts_as_commentable;TU;[I" 4.0.0;T@ [I"%acts_as_commentable_with_replies;T@@ [I"'acts_as_commentable_with_threading;T@x@ [I"acts_as_comparable;T@@ [I"acts_as_concatenation;T@@ [I"acts_as_configurable;T@V@ [I"acts_as_configuration;T@E@ [I"acts_as_connectable;T@E@ [I"acts_as_constant;T@W@ [I"acts_as_contactable;T@E@ [I"acts_as_content_node;TU;[I" 0.1.13;T@ [I"acts_as_controller_for;T@@ [I"acts_as_crafter;T@@ [I"acts_as_current;T@@ [I"acts_as_dag;T@W@ [I"acts-as-dag;TU;[I" 2.5.7;T@ [I"acts_as_dashboard;T@@ [I"acts_as_data_owner;T@n@ [I"acts_as_dated_detail;T@E@ [I"acts_as_debatable;T@@ [I"acts_as_decimal;T@@ [I"acts_as_decryptable;T@`@ [I"acts_as_defaultable;T@"@ [I"acts_as_diffable;T@'@ [I"acts_as_digested_on;T@@ [I"acts_as_discontinued;T@'@ [I"acts_as_draper_decorated;T@@ [I"acts_as_dropdown;TU;[I" 2.0.3;T@ [I"acts_as_duck;T@'@ [I"acts_as_dynamic;T@"@ [I"acts_as_eav_model;T@E@ [I"acts_as_ecv;T@@ [I"acts_as_elibri_product;TU;[I" 0.2.3.1;T@ [I"acts_as_elo;T@@ [I"acts_as_encrypted;T@@ [I"acts_as_enum;T@@ [I"acts_as_enumable;T@@ [I"ActsAsEscaped;T@E@ [I"acts_as_estraier_doc;T@'@ [I"acts_as_eventable;T@`@ [I"acts_as_event_owner;T@;@ [I"acts_as_exportable;T@'@ [I"acts_as_extjs;T@@ [I"ActsAsFastNestedSet;T@|@ [I"acts_as_favable;T@@ [I"acts_as_favorite;T@@@ [I"acts_as_featured;T@@@ [I"acts_as_ferret;TU;[I" 0.5.4;T@ [I"acts_as_filterable;T@@ [I"acts_as_finder;T@@ [I"acts_as_flags;T@@ [I"acts_as_flashcard;T@@ [I"acts_as_flexigrid;T@@ [I"acts_as_flux_capacitor;TU;[I" 0.6.7;T@ [I"acts_as_flying_saucer;T@@ [I"acts_as_followable;T@g@ [I"acts_as_follower;T@`@ [I"acts_as_formatted;T@@ [I"acts_as_fu;T@V@ [I"acts_as_fu_rails3;T@'@ [I"acts_as_fuzzy_search;T@'@ [I"acts_as_geocodable;T@+@ [I"acts_as_graph_object;T@@ [I"acts_as_happy_tree;T@@ [I"acts_as_hashed;T@@ [I"acts_as_historical;T@|@ [I"acts_as_human;T@+@ [I"acts_as_human_name;T@E@ [I"acts_as_icontact;T@@ [I"acts_as_importable;T@@ [I"acts_as_indexed;T@@ [I"acts_as_inheritance_root;T@@ [I"acts_as_inquirable;T@'@ [I"acts_as_interface;T@|@ [I"acts_as_isdoc;T@'@ [I"acts_as_itemized;T@6@ [I"acts-as-joinable;T@@ [I"acts_as_kaltura;T@@ [I"acts_as_keyed;T@6@ [I"acts_as_king;T@E@ [I"acts_as_label;T@@ [I"acts-as-layoutable;TU;[I" 0.0.1.7;T@ [I"acts_as_likeable;T@'@ [I"acts_as_link;T@@ [I"acts_as_linkable;T@@ [I"acts-as-linkable;TU;[I" 0.0.1.5;T@ [I"acts_as_list;T@g@ [I"acts-as-list;T@@@ [I"acts_as_list_ar;T@@ [I"acts_as_list_mongoid;TU;[I" 0.2.5.1;T@ [I"acts_as_list-rails3;T@"@ [I""acts_as_list_with_sti_support;T@@ [I"acts_as_localizable;TU;[I" 0.3.5;T@ [I"acts_as_lockable;T@'@ [I"acts_as_loggable;T@'@ [I"acts_as_lookup;T@@ [I"acts_as_magic_model;T@@ [I"acts_as_markdown;T@@@ [I"acts_as_markup;TU;[I" 1.4.2;T@ [I"acts_as_markup_extended;T@@ [I"acts_as_meritocracy;T@!@ [I"acts-as-messageable;TU;[I" 0.4.7;T@ [I"acts_as_messenger;T@@ [I"acts_as_metadata;TU;[I" 0.3.8;T@ [I"acts-as-mobile;T@E@ [I"acts_as_money;T@[@ [I"acts_as_mongo_rateable;T@@ [I"acts_as_mongo_taggable;T@I@ [I"acts_as_monitor;T@@ [I"acts_as_mt_object;T@'@ [I"acts_as_multipart_form;T@@ [I"acts_as_muschable;T@@ [I"acts_as_nested_by;T@+@ [I"acts_as_nested_interval;T@@ [I"acts_as_network;T@@ [I"acts_as_nice_url;T@@ [I"acts_as_node;T@@ [I"acts_as_notifiable;T@@ [I"acts_as_oauth_accessible;T@@ [I"acts_as_opengraph;T@@ [I"acts-as-optionable;T@@ [I"acts_as_oqgraph;T@@ [I"acts_as_orderable;T@6@ [I"acts_as_ordered_tree;T@x@ [I"acts_as_ordinalized;T@[@ [I"acts_as_organizable;T@@ [I"acts_as_owner;T@@ [I"acts_as_pack_rat;TU;[I" 1.0.7;T@ [I"acts_as_paginable;T@x@ [I"acts_as_param;T@@ [I"acts_as_paranoid;T@@ [I"acts_as_paranoid_dag;T@'@ [I"acts_as_partitionable;T@@ [I"acts_as_percentage;T@@@ [I"acts_as_permalink;T@@ [I"acts_as_permission;T@@ [I"acts_as_pickable;T@@ [I"#acts_as_polymorphic_controller;T@@ [I"acts_as_preferenced;TU;[I" 0.9.0;T@ [I"acts_as_presentable;T@'@ [I"acts_as_previous_next;T@"@ [I"acts_as_price;T@@ [I"acts_as_priceable;T@@ [I"acts_as_privilege;T@@ [I"acts_as_protocolable;T@6@ [I"acts_as_publicable;T@"@ [I"acts_as_publishable;T@@ [I"acts_as_qa;T@@ [I"acts_as_queue;T@6@ [I"acts_as_rails3_generator;T@'@ [I"acts_as_random;T@+@ [I"acts_as_random_id;T@@ [I"acts_as_rateable;T@@ [I"acts_as_rateable_by_ip;T@'@ [I"acts_as_rated;T@@ [I"acts-as-rated;TU;[I"0.4;T@ [I"acts_as_rdf;T@1@ [I"acts_as_readonlyable;T@@ [I"acts_as_recaptcha;T@E@ [I"acts_as_recommended;T@@ [I"acts_as_relatable;T@@ [I"acts_as_relation;T@@@ [I"acts_as_reportable;T@@ [I"acts_as_restful_list;T@6@ [I"acts_as_revisable;T@@ [I"acts_as_revisionable;T@@ [I"acts_as_role;T@@ [I"acts_as_runnable_code;T@@ [I"acts_as_sane_tree;T@@ [I"acts_as_sanitiled;T@@ [I"acts-as-savable;T@'@ [I"acts_as_scaffold;T@+@ [I"acts_as_scribe;T@@ [I"acts_as_sdata;T@@ [I"acts_as_searchable;T@@ [I"acts_as_secure;T@@ [I""acts_as_securely_transferable;T@'@ [I"acts_as_sequence;T@E@ [I"acts_as_serializable;T@@ [I"acts_as_service;T@@ [I"acts_as_shopping_cart;T@|@ [I"acts_as_silent_list;T@N@ [I"acts_as_singleton;T@V@ [I"acts_as_sluggable;T@@ [I"acts_as_sluggy;T@'@ [I"acts_as_social;T@'@ [I"!acts_as_soft_delete_by_field;T@@ [I"acts_as_solr;TU;[I" 1.3.3;T@ [I"acts_as_solr_reloaded;TU;[I" 1.6.0;T@ [I"acts_as_sourceable;TU;[I" 1.0.6;T@ [I"acts_as_span;T@@ [I"acts_as_stampable;T@@ [I"acts_as_state_machine;TU;[I" 2.2.0;T@ [I"acts_as_static_controller;T@@ [I"acts_as_status;T@@ [I"acts_as_statused;T@@ [I"acts_as_status_for;TU;[I" 3.0.6;T@ [I"acts_as_strip;T@@ [I"acts_as_stripped;T@@ [I"acts_as_subscribable;T@@ [I"acts_as_subscription;T@E@ [I"acts_as_sweepable;T@I@ [I"acts_as_tableless;T@@ [I"acts_as_taggable;T@@ [I"acts-as-taggable-hstore;T@@ [I"acts-as-taggable-on;TU;[I" 2.3.3;T@ [I"$acts-as-taggable-on-for-domains;T@`@ [I" acts-as-taggable-on-padrino;T@@@ [I"!acts_as_taggable_on_steroids;T@@ [I"acts_as_taggable_simple;T@@ [I"acts_as_teenager;T@@ [I"acts_as_temporary;T@`@ [I"acts_as_tenant;TU;[I" 0.2.9;T@ [I"acts_as_textcaptcha;TU;[I" 3.0.5;T@ [I"acts_as_time_frame;T@'@ [I"acts_as_tokenizable;T@X@ [I"acts_as_translatable;T@@ [I"acts_as_translatebox;T@'@ [I"acts_as_trashable;T@ @ [I"acts_as_tree;T@N@ [I"acts_as_tree_rails3;T@@ [I"!acts-as-tree-with-dotted-ids;T@@ [I"acts_as_tumblr;T@@ [I"acts_as_unvlogable;T@@ [I"acts_as_uuid;T@@ [I"acts_as_versionable;T@@ [I"acts_as_versioned;T@@ [I"acts_as_versioned-decisiv;T@@ [I"acts_as_versioned_rails3;T@@ [I"!acts_as_versioned_rails3.1.3;T@@ [I"acts_as_video;T@+@ [I"acts_as_video_fu;T@@ [I"acts_as_viewable;T@@ [I"acts_as_votable;T@x@ [I"acts_as_wild_searchable;T@@ [I"acts_as_working_days;T@@ [I"acts_as_wrapped_class;T@@ [I"acts_as_xapian;T@6@ [I"acts_as_xls;T@@ [I"acts_as_xlsx;T@ @ [I"acts_has_many;T@@ [I"acts_less_rateable;T@'@ [I"acts_more_seo;T@@ [I"acts_permissive;T@@ [I"acts_presentably;T@@ [I"act_with_bag;T@x@ [I" acuforce;T@@ [I"ac_uniquify;T@@ [I"acunote-ruby-prof;TU;[I" 0.9.2;T@ [I"ad_agency;T@@@ [I" adam;T@ @ [I"adamantium;T@"@ [I"ada_matcher;T@+@ [I"adam_gemtest;T@@ [I"'adamhunter-client_side_validations;TU;[I" 2.9.10;T@ [I"adamhunter-contacts;TU;[I" 1.1.22;T@ [I"adams_studio_game;T@@ [I"adamtanner;T@E@ [I" adapi;T@6@ [I" adapt;T@'@ [I"adaptable_tests_for_rails;T@@ [I"adaptation;T@@ [I" adapter;T@X@ [I"adapter-cassanity;T@@ [I"adapter-couch;T@@@ [I"adapter-elasticsearch;T@"@ [I"adapter_extensions;T@@ [I"adapter-file;T@'@ [I"adapter-git;T@@ [I"adapter-leveldb;T@@ [I"adapter-memcached;T@@ [I"adapter-mongo;T@@ [I"adapter-postgres;T@`@ [I"adapter-redis;T@@ [I"adapter-riak;T@@ [I"adapter-simpledb;T@`@ [I"adaptive_pay;T@`@ [I"adaptive_payments;T@'@ [I"adaptly-cube;T@'@ [I" adaptrex;TU;[I" 0.9.34;T@ [I" adauth;T@u@ [I"ADB;TU;[I" 0.5.5;T@ [I" adbsync;T@@ [I"adcenter_api;T@"@ [I"adcenter-client;TU;[I" 8.0.3;T@ [I"adcenter-client-r19;TU;[I" 8.0.6;T@ [I" adck;T@@ [I" adcloud;TU;[I" 0.7.5.2;T@ [I"adconnect;T@'@ [I" adcopy;T@@ [I"add_another;T@@ [I" addax;TU;[I" 0.10.0;T@ [I"added_methods;T@`@ [I" add_gem;T@'@ [I"add_http_header;T@@ [I" addmegem;T@'@ [I"addons-client;T@@ [I" address;T@' @ [I"addressable;T@J@ [I"addressabler;T@@ [I"addressable_record;T@@ [I"addressable-rest;T@@ [I"address_book;T@`@ [I"AddressBookImporter;TU;[I" 0.0.13;T@ [I"address_by_cep;T@@ [I"address_engine;T@@ [I"address_extractor;T@+@ [I"addresslogic;T@u@ [I"addresslogic_rails;T@@ [I"address_me;T@'@ [I"address_picker-rails;T@@ [I"address_standardization;T@@ [I" add_this;T@@ [I"add-to-homescreen-rails;T@z@ [I" addy;T@@ [I"adena_google_merchant;T@'@ [I" adeona;T@E@ [I"adept_dynamoid;T@@ [I"adept_geoip;T@;@ [I"adesklets-ruby;T@@ [I"ad-framework;T@@ [I"ad_gear_client;T@@ [I"adg-whenever;T@I@ [I" adhd;T@6@ [I"adhearsion;TU;[I" 2.2.1;T@ [I"adhearsion-activerecord;T@@ [I"adhearsion-asterisk;TU;[I" 1.3.1;T@ [I"adhearsion-cw;TU;[I" 1.0.2.3;T@ [I"adhearsion-drb;T@@ [I"adhearsion-ims;T@E@ [I"adhearsion-ldap;T@@ [I"adhearsion-loquacious;TU;[I" 1.9.3;T@ [I"adhearsion-rails;T@@ [I"adhearsion-reporter;T@O@ [I"adhearsion_sequel;T@'@ [I"adhearsion-xmpp;T@@ [I"adhearsion-xmpp-api;T@'@ [I"adherence;T@@ [I" adhoc;T@`@ [I" adify;T@@ [I" adility;T@@ [I"adit-paste;T@'@ [I"adium2gmail;T@6@ [I"adjectifier;T@E@ [I"adjustable_mime_type;T@@ [I" adjustn;T@E@ [I" ad-ldap;T@`@ [I" adlint;TU;[I" 2.6.14;T@ [I"adlint-benchmark;T@@ [I"adlint-exam-c_staging;T@@ [I"adlint-goodies;T@u@ [I"adlint-postfilter;T@@ [I" adman;T@`@ [I" ad_man;T@ @ [I" admapper;T@@ [I" admin;T@'@ [I"admin_assistant;TU;[I" 2.2.8;T@ [I"admin_control_tower;T@E@ [I"admin_data;T@u@ [I"admin_engine;T@@ [I" admin_fu;T@@ [I"admin_interface;TU;[I" 2.2.3;T@ [I" administ;T@E@ [I"administer;T@@ [I"administrated_scaffold;T@'@ [I"AdministratedScaffold;T@'@ [I"%administrated_scaffold_generator;T@'@ [I"administrator;T@'@ [I"!adminpage_scaffold_generator;T@E@ [I"admin_scaffold;T@@ [I"AdminSpace;T@@ [I"admin_template;T@@ [I"admin-theme;T@@ [I"admin_tools_ennder;TU;[I" 1.2.12;T@ [I"admin_view;T@@ [I"admin_views;TU;[I"0.3;T@ [I"admin-vmc-plugin;T@@ [I"admin_widgets;T@@ [I"admit_one;T@I@ [I" admob;T@x@ [I" admob19;T@@ [I"adn;T@@ [I" adn-cli;T@@ [I" adnruby;T@@ [I"adobe_crx;T@"@ [I"adobeshare;T@"@ [I"AdoccaMemcache;TU;[I" 0.1.12;T@ [I"adrenaline;T@'@ [I" adrian;T@ @ [I" adrift;T@'@ [I"adscaptcha;TU;[I" 0.0.41;T@ [I" adsense_crawler_for_private;T@@ [I"adsense_for_search;T@`@ [I"adsense-info;T@@ [I" adsf;T@@ [I"adt;T@n@ [I"adva-blog;T@@ [I"adva-cache;T@@ [I"adva-categories;T@@ [I"adv_accessor;T@@ [I"adva-cms2;T@@ [I"adva-core;T@@ [I"adva-markup;T@@ [I"advanced_colours;T@@ [I"advanced_errors;T@@ [I"advanced-fileutils;T@@ [I"advanced_math;T@V@ [I"advanced_scaffold;T@'@ [I"advancement;T@E@ [I"advantage;T@`I"x86-linux;T[@ @`I"x86-mingw32;T[I"adva-static;T@@ [I"adva-user;T@@ [I"adventure;T@'@ [I"advertnet;T@@ [I"advert_selector;T@@ [I" adviser;T@'@ [I"adwords4r;TU;[I" 19.4.0;T@ [I"adwords_scraper;T@E@ [I" adyen;T@ @ [I"adyen-admin;TU;[I" 0.0.16;T@ [I"adyen-skinbuilder;T@@ [I"adzap-ar_mailer;TU;[I" 2.1.10;T@ [I" adzerk;T@!@ [I"ae;TU;[I" 1.8.1;T@ [I" aead;T@l@ [I" aebus;T@@ [I" aegis;TU;[I" 2.5.3;T@ [I"aeolus-image;T@X@ [I" aeon;T@'@ [I" aeonic;T@@ [I" aequitas;T@E@ [I" aerial;TU;[I" 0.1.2.2;T@ [I"aerpe_auth;T@@ [I"aes;T@@ [I" aescrypt;T@@ [I"aesctr-ruby;T@@ [I" aether;T@@ [I"aetherical_utils;T@@ [I" aethon;T@'@ [I" ae_users;T@@ [I"ae_users_legacy;TU;[I" 0.6.12;T@ [I"ae_users_migrator;T@W@ [I"af;TU;[I"0.3.18.11;T@ [I"af-addon-tester;T@n@ [I"af-cache-money;TU;[I" 0.2.10;T@ [I"af-devise;TU;[I" 2.1.2;T@ [I"afeld-opencv;T@V@ [I"affairs_of_state;T@@ [I"affected_by_destroy;T@@ [I"affected_on_destroy;T@E@ [I"affilimator;T@@ [I" affine;T@@ [I" affinity;T@'@ [I""affinitylabs-subdomain_routes;T@@ [I" affirmit;TU;[I"&3.1.4.1.5.9.2.6.5.3.5.8.9.7.9.3.2;T@ [I" afipws;T@@ [I"aflatter-vote_fu;T@@ [I"afm;T@@ [I"af_minion;TU;[I" 0.1.16;T@ [I" afmotion;T@R @ [I" af-oauth;TU;[I" 0.3.4.1;T@ [I"aforward-actionwebservice;TU;[I"2.3.8.100;T@ [I"af_solr_generator;T@E@ [I" after;T@@ [I"afterburn;T@'@ [I"afterburner;T@E@ [I"after_commit;TU;[I" 1.0.10;T@ [I"after_commit_action;T@6@ [I"after_commit_queue;T@@ [I"after_response;T@@ [I"after_timestamps;T@@ [I" again;TU;[I" 1.1.4;T@ [I" agama;T@Y@ [I" agatha;TU;[I" 1.2.0.0;T@ [I" agcaldav;TU;[I" 0.2.5.2;T@ [I" agcod;T@@ [I" a-gem;T@E@ [I" agenda;T@+@ [I" agent;T@- @ [I"agent_client;T@`@ [I"agent_cooper;T@V@ [I"agentdispatcher;T@X@ [I"agent_orange;T@|@ [I" agent-q;T@'@ [I"agent_user;T@@ [I"agent_xmpp;T@6@ [I" agery;T@O@ [I"ageweke-rspec;TU;[I" 1.2.9;T@ [I"age_wizard;T@' @ [I"aggravatar;T@@ [I"aggregate;T@I@ [I"aggregate_afurmanov;T@@ [I"aggregate_columns;TU;[I" 0.9.8;T@ [I"aggregator-gem;T@g@ [I"agibralter-jammit;T@@ [I"agideo-pinyin;T@`@ [I"agideo-tablesorter;T@'@ [I" agig;T@@ [I"agilebuddy-comma;T@@ [I"agile_check_in;T@@ [I"agilelamp-driver;T@|@ [I"agile_serializer;T@n@ [I"agiley-faraday_middleware;T@- @ [I"agiley-feedzirra;TU;[I" 0.0.24;T@ [I"agiley-youtube-g;T@y@ [I" agilezen;T@@ [I"agilitic-liquid;T@@ [I" agio;T@@ [I" agnostic;T@`@ [I"agnostic-frontend;T@'@ [I"agnostic_presenters;T@@ [I"agnostic-will_paginate;T@@ [I"ago;T@|@ [I" agora;T@@ [I" agraph;T@|@ [I" agree2;T@@ [I"agri-controller;T@@ [I"agridonrails;T@@ [I"ahamid-postgres-pr;T@@ [I"ahamid-soloist;T@@ [I"aharrison24-git-external;T@@ [I"ahn_hoptoad;T@@ [I"ahn-rails;T@@ [I"ahn-restful-rpc;T@`@ [I" ahnsay;T@'@ [I"aho_corasick;T@E@ [I" ahoj;T@'@ [I" ahora;T@E@ [I" ahoy;T@+@ [I"ahp;T@@ [I"ahp-linalg;T@@ [I" ai4r;TU;[I" 1.12;T@ [I" ai4ruby;TU;[I" 1.14;T@ [I" aidmock;T@x@ [I"aids_info;T@@ [I"aim;T@`@ [I" aims;T@@ [I"air;T@!@ [I" air18n;TU;[I" 0.1.49;T@ [I"air18n_ui;T@@ [I" airake;T@@ [I" airbed;T@'@ [I" airblade-acts-as-importable;T@@ [I"airblade-mysql_s3_backup;T@"@ [I"airblade-sitemap_generator;T@@ [I" airbrake;TU;[I" 3.1.6;T@ [I"airbrake-api;TU;[I" 4.2.2;T@ [I"airbrake_cleanup;T@N@ [I"airbrake-faraday_sender;T@`@ [I"airbrake-graylog2;T@'@ [I"airbrake_handler;T@x@ [I"airbrake-resque;T@@ [I"airbrake-sinatra;T@E@ [I"airbrake_stats;T@'@ [I"airbrake-statsd;T@@ [I"airbrake_symbolicate;T@@ [I"airbrake_tools;T@@ [I"airbrake_user_attributes;T@1@ [I" airbrush;T@"@ [I" aircraft;T@'@ [I" airdata;T@!@ [I"airesis_metis_graph;T@@ [I" airlock;T@'@ [I" airplay;T@ @ [I"airplayer;T@@ [I" airport;T@'@ [I"airport_mac_changer;T@@ [I"airport_scraper;T@'@ [I"airsprite;T@@ [I"airstream;T@@ [I" airvideo;T@V@ [I"airvideo-ng;TU;[I" 0.0.9.1;T@ [I"aislefinder;TU;[I" 0.0.02;T@ [I"ait_connect;T@= @ [I" aizuchi;T@@ [I" ajaila;T@'@ [I" ajar;T@@ [I" ajax;T@@ [I"ajaxboxlogin;T@3@ [I" ajax-cat;T@@ [I"ajax-chosen-rails;T@@ [I" ajaxcrud;T@@ [I"ajax-datatables-rails;T@'@ [I"ajaxful_rating;TU;[I" 2.2.9.1;T@ [I"ajaxful_rating_jquery;TU;[I" 2.2.9;T@ [I"ajax_grid_generator;T@@ [I"ajaxify_rails;T@@ [I" ajaxlibs;T@t @ [I"ajaxmanager-rails;TU;[I" 3.12;T@ [I"ajax_nested_form;T@@ [I"ajax_pagination;T@y@ [I"ajax_scaffold;T@@ [I"ajax_scaffold_generator;TU;[I" 3.1.11;T@ [I"ajax-scaffold-generator;T@@ [I"ajax_scaffold_plugin;TU;[I" 3.2.4;T@ [I" ajaxspin;T@@ [I"ajmurmann_right_aws;TU;[I" 2.1.1;T@ [I"$ajmurmann_right_http_connection;T@@ [I"ajp-rails;T@@ [I"ajsharp-sinatra-respond_to;T@@ [I"ak2196-forem;T@E@ [I" ak47;T@[@ [I"aka_angka;T@@ [I" akaer;TU;[I" 1.5.8;T@ [I" akamai;T@!@ [I"akamai_api;T@E@ [I"akamai_bookmarklet;T@@@ [I"akamai-pavlos;T@@ [I"akamaized;T@`@ [I" akami;T@N@ [I" aka_time;T@@ [I" Akeel;T@E@ [I"akeel_sir;T@@ [I"akephalos;T@[@ [@ @[@[I"akephalos2;T@@ [@ @@[I"akephalos-2s;T@,@ [I"akephalos2-stable;TU;[I" 2.1.1.1;T@ [I"akephalos-nerian;T@,@[@ @,@ [I" aker;TU;[I" 3.0.4;T@ [I"aker-cas_cli;T@@ [I"aker-confident;T@`@ [I"aker-rails;T@@ [I" akismet;T@@ [I"akismetor;T@@ [I" akitaonrails-shift_subtitle;T@@ [I"akitaonrails-utility_belt;TU;[I" 1.0.13;T@ [I"aki-testrocket;T@@ [I" akka;T@@ [I"akka-actor-jars;T@@[I"akka-remote-jars;TU;[I" 1.2.0.2;T@[I" akki;TU;[I" 0.0.62;T@ [I"akkordarbeit;T@@ [I" akpurge;T@|@ [I"akqa-jenkins;TU;[I" 0.6.4.1;T@ [I"aktion_cap;T@6@ [I"aktion_test;T@@@ [I"aktion_test_rails;T@@ [I"akubra_llstore_migrate;T@'@[I"akzhan-premailer;T@@ [I" alacarte;T@V@ [I"a_la_chart;TU;[I" 0.1.10;T@ [I" alacit;T@@ [I"alacrity_client;T@'@ [I" aladdin;T@V@ [I"aladin-books;T@@ [I"alain_toolbox;T@@ [I"alancse-aws-s3;T@@ [I"alancse-friendly_id;T@@ [I" alarm_it;T@@ [I" alatesta;T@@ [I" albacore;T@@ [I"albacore-deployment;T@@ [I" albeano;T@@ [I" albino;T@ @ [I" albizia;T@'@ [I"album_credits;T@"@ [I"alc;T@'@ [I" alcapon;T@@ [I" alcatraz;T@'@ [I" alc-cmd;T@@ [I"alchemist;T@6@ [I"alchemist-core;T@"@ [I"alchemist-server;T@E@ [I" alchemy;T@@ [I"alchemy_api;T@@@ [I"alchemy-api-rb;T@@ [I"alchemy_cms;TU;[I" 2.4.0;T@ [I"alchemy_crm;T@@ [I"alchemy-demo_kit;T@'@ [I"alchemy_domains;T@`@ [I"alchemy-richmedia-essences;T@'@ [I"alchemy_spree;T@|@ [I"aldebaran;T@@ [I"ale;T@@ [I" alea;T@`@ [I" alego;T@x@ [I"alego_functions;T@V@ [I"alego_report;T@@ [I"alegscogs-asset_library;T@@ [I"alegscogs_helpers;T@`@ [I"alegscogs_jammit;T@y@ [I"aleksi-after_commit;T@@ [I"aleksi-hassle;T@@ [I"#aleksi-rack-perftools_profiler;T@"@ [I"aleksi-rush;T@h@ [I" aleph;T@'@ [I"alert_grid;T@'@ [I"alertify-rails;T@@ [I"alert_machine;T@'@ [I" alertpay;T@@ [I" alerts;T@E@ [I"alert_tweeter;T@@ [I" alexa;T@@ [I"alexander;T@@ [I"alexandria;T@'@ [I" alexpass;T@6@ [I" alex_r;T@@ [I"alexrevin-aasm_numerical;TU;[I" 2.3.1;T@ [I"alex-rkelly;T@ @ [I"alex-sinatra_warden;TU;[I" 0.3.0.2;T@ [I"$alexspeller-acts-as-taggable-on;T@@ [I"%alexspeller-calendar_date_select;TU;[I" 1.17;T@ [I"alexspeller-is_taggable;T@@ [I"alf;TU;[I" 0.12.2;T@ [I" alfred;T@@ [I"alg-backup;TU;[I" 3.0.10;T@ [I" algerb;T@@ [I" alglib;T@@ [I" algoplot;T@'@ [I"algorithm-diff;T@@ [I"algorithms;T@I" jruby;T[@@@ [I"algorithms-aunderwo;T@@ [I"alg-paperclip;TU;[I" 2.3.1.2;T@ [I" alias;T@@ [I"alias_helper;T@@@ [I"alias_metrics;T@@@ [I" alib;T@@ [I" alice;T@6@ [I"alice_invoice;T@@ [I" alicorn;T@@ [I" align;T@E@ [I"alignment;T@@ [I" alis;T@'@ [I" alisha;T@@ [I"aliyun-oss;TU;[I"0.7.0.1349333720;T@ [I"alkesh-gemedit;T@@ [I"alkesh-ghost;T@^@ [I"allegro4r;T@'I"x86-mswin32-60;T[@@'@ [I" allejest;T@E@ [I" allen;T@+@ [I"allenwei-railroad;TU;[I" 0.7.8;T@ [I" allgems;T@'@ [I" allgravy;T@1@ [I"all_green;T@E@ [I"allhomes_xml;T@@@ [I"allinoneruby;T@@ [I" allison;T@+@ [I"allkiri-client;T@E@ [I" alloc8;T@@ [I" allocine;T@@ [I"allocine_api;TU;[I" 1.5.0;T@ [I"allocine_parser;T@ @ [I" allora;T@@ [I"allorails;T@@ [I" allow;T@'@ [I"allowance;T@@ [I" allows;T@@ [I" allowy;T@@ [I" alloy;T@E@ [I"allpurpose;T@'@ [I"all_seeing_eye;T@`@ [I"all_sorts;T@@ [I"allsum-client;T@@ [I" alltasks;T@6@ [I"allthumbs;T@'@ [I"all-up-in-your-elo;T@E@ [I"allyourbase;T@E@ [I"all-your-base;T@@ [I" almanac;T@@ [I" almaz;T@@ [I"almaz-revelation;T@@ [I"almodovar;T@X@ [I" almond;T@'@ [I"almost-happy;T@@ [I"alm-recaptcha;TU;[I" 0.2.2.1;T@ [I"alm-rest-api;T@E@ [I"aloha_rails;T@|@ [I"aloha-rails;T@E@ [I" aloharb;T@'@ [I"aloha-ruby-conf;TU;[I" 2012.7;T@ [I" alondra;T@`@ [I"alovak-network;T@@ [I"alpaca_complete;T@+@ [I" al_papi;T@@ [I" alpha;TU;[I"1.7;T@ [I" alphabar;T@@ [I"alphabetize;T@@@ [I"alphadecimal;T@x@ [I"alphamail;T@ @ [I"alpha_omega;TU;[I" 1.5.15;T@ [I"alpha_pag;T@@ [I"alphasights-business_time;T@@ [I"alphasights-prawn;TU;[I" 0.10.4;T@ [I""alphasights-sinatra-sprockets;T@`@ [I"alphasign;T@@ [I"alpha-simprini-engine;T@"@ [I"alphmeric;T@'@ [I"alsa-backup;TU;[I" 0.10;T@ [I"alsa-rawmidi;TU;[I" 0.2.14;T@ [I"also_migrate;T@@ [I"also_migrate_nj;T@@ [I"also_validates;T@E@ [I"als_typograf;T@@ [I"alt159-rails;T@@ [I" alter;T@E@ [I"altered_views;T@ @ [I" alterego;T@"@ [I"alter-ego;T@@ [I"alter-ego-activerecord;T@@@ [I"alter-ego-mongoid;T@6@ [I"alternate-folder;T@@ [I"alternator;T@E@ [I"altflights;T@@ [I"alt-foreman;T@'@ [I"4althor880-activerecord-activesalesforce-adapter;TU;[I" 2.3.7;T@ [I"altimeter;T@@ [I"altly-jammit;T@@ [I"altly-jammit-s3;TU;[I" 0.6.0.3;T@ [I"al-to_xls;T@@ [I" altpass;T@@ [I" altum;T@@ [I"alu4103_expregulares;T@'@ [I"alu4103_tictactoe;T@'@ [I"alu4216tictactoe;T@E@ [I" alula;TU;[I" 0.4.27;T@ [I"alula-plugins;T@@ [I"alula-themes;T@@ [I" alumina;T@'@ [I"alvalaxia;T@@ [I"always_execute;T@@ [I"#always_verify_ssl_certificates;T@@ [I"alx;T@'@ [I"amalgalite;T@ @[@@xI"x86-mswin32;T[@@x@ [@@x@ [I"amanzi-sld;T@'@ [I"amardaxini-ruby-gd;T@@ [I" amatch;T@[@[@@ @ [I"amaze-sms;T@E@ [I"amaze_sns;T@ @ [I" amazon;T@'@ [I"amazon-album-art;T@@ [I"amazon_associate;T@X@ [I"amazon_associate_report;T@E@ [I"amazon-associates;TU;[I" 0.7.2;T@ [I"amazon-awis;T@@ [I"amazon_dp;T@E@ [I"amazon-ec2;TU;[I" 0.9.17;T@ [I"amazon-ecs;TU;[I" 2.2.4;T@ [I"amazon_flex_pay;TU;[I" 0.9.13;T@ [I"amazon-fps-ruby;T@@ [I"amazon-hacks;T@@ [I"amazonian;T@@ [I"amazon-instance;T@@ [I"AmazonMarketplace;T@@ [I"amazon-mws;T@@ [I"amazon-pricing;T@+@ [I"amazon_product;T@ @ [I"#amazon-product-advertising-api;T@@ [I".amazon-product-advertising-api-prezjordan;T@I@ [I"amazon_product_api;T@@ [I"amazon_report;T@'@ [I"amazon-ruby;T@@ [I"amazon_sdb;T@h@ [I"amazon_seller_central;T@@ [I"amazon_ses;T@@ [I"amazon-ses;T@@ [I"amazon-ses-mailer;T@"@ [I"amb;T@@ [I"ambassador;T@E@ [I"amberbit-config;T@@ [I"AmberRack;T@@ [I"amber-rails;T@@ [I"ambert-simplekiss;T@@ [I" AmberVM;TU;[I" 0.0.20;T@ [I"ambethia-mousetrap;T@@ [I" ambience;T@O@ [I" ambient;T@@ [I" ambit;TU;[I" 0.12;T@ [I" ambition;T@Y@ [I"ambitious-activeldap;T@`@ [I"ambitious-activerecord;T@6@ [I"ambitious_seeder;T@@ [I"ambitious-sphinx;T@`@ [I" ambling;T@E@ [I" ambry;T@@ [I"amcharts-rails;TU;[I"2.7.7.1.0;T@ [I"am_credit_card;T@'@ [I"ame;T@`@ [I"ameblogazo;T@E@ [I" amee;TU;[I" 4.4.0;T@ [I"amee-analytics;T@ @ [I"amee-data-abstraction;T@o@ [I"amee-data-persistence;TU;[I" 2.3.0;T@ [I"amee_rails_layer;T@@ [I"amee-ruby;TU;[I" 2.6.0;T@ [I"american_date;T@@ [I"american_idol;T@E@ [I" amex;T@@ [I"amf;T@'@ [I"amfetamine;T@@ [I" amfora;T@E@ [I"amfranz-ci_reporter;TU;[I" 1.6.2;T@ [I"amf_socket;T@@ [I" amiando;T@@ [I" amiba;T@@ [I" amico;T@J@ [I" amida;T@"@ [I" amigo;T@+@ [I"amikula-sprite;T@@ [I" amiok;T@@ [I"amione-fakes3;TU;[I" 0.1.5.1;T@ [I" amiral;T@t @ [I" amistad;T@' @ [I"amistad-actions;T@@ [I" amkhmer;T@@ [I"amk_string;T@'@ [I" ammeter;T@^@ [I" amnesia;T@@ [I" amoeba;T@O@ [I"amoeba-js-rails;T@@ [I"amoeba_merge_query;T@'@ [I" amon;T@&@ [I" _amon;T@'@ [I" Amortize;T@'@ [I" amos;T@"@ [I"amount_field;TU;[I" 1.4.3;T@ [I"amount_field_rails3;T@ @ [I"amount_inflector;T@@ [I"amp;T@J@ [I" amp-core;T@@ [I" ampere;T@@ [I" ampersat;T@'@ [I" ampex;T@@ [I"amp-front;T@@ [I" amp-git;T@@ [I"amphibian;T@E@ [I"ample_assets;T@@ [I" amplify;T@@ [I" amp-pure;T@@ [I" ampt;T@I@ [I"amq-client;TU;[I" 0.9.10;T@ [I" amqp;T@ @ [I"amqp-boilerplate;T@N@ [I" amqpcat;T@'@ [I"amqp-daemon-kit;T@@ [I"amqp_directory_broadcaster;T@W@ [I"amqp-events;T@@ [I"amqp-failover;T@@ [I"amqp-hermes;T@@ [I"amqp_logging;T@u @ [I"amqp_notifier;T@n@ [I" amqpop;T@E@ [I"amqp-processing;T@E@ [I"amq-protocol;T@@ [I"amqp-spec;T@@ [I"amqp-subscribe-many;T@I@ [I"amqp-utils;T@@ [I"amr_google_calendar;T@@ [I" amrita2;T@@ [I"am-sendgrid;T@@ [I" amulet;T@E@ [I" amzwish;T@@ [I"an;T@E@ [I"anachronism;T@@ [I"anaf_habtm;TU;[I" 0.0.98;T@ [I" anagram;T@E@ [I" anagrams;T@'@ [I"analdiffist;T@x@ [I"analizaruptor;T@@ [I"analogger;T@@ [I"analtester;T@'@ [I"analysand;T@O@ [I"analytica;TU;[I" 0.0.21;T@ [I"analytical;TU;[I" 3.0.12;T@ [I"analytico;T@@ [I"analytics;T@@ [I"analytics_goo;T@x@ [I"analytics-logger;TU;[I" 0.3.7;T@ [I" ananke;T@@ [I" anaphora;T@@@ [I"anaphoric_case;T@"@ [I" an-app;T@@ [I"anbt-sql-formatter;T@'@ [I"ancestree;T@1@ [I" ancestry;T@@ [I" anchor;T@@@ [I"anchor_for;T@'@ [I" andand;T@ @ [I" andand2;T@'@ [I"andbilling;T@@ [I"andparcel;T@@ [I" andrake;T@@ [I"andrewroth_activeadmin;TU;[I" 0.3.4.4;T@ [I"andrewroth_jammit;T@y@ [I"!andrewtimberlake-delayed_job;TU;[I" 1.8.4.2;T@ [I"(andrewtimberlake-interactive_editor;TU;[I" 0.0.5.2;T@ [I"andrew-whenever;T@@ [I" andrey;T@E@ [I"andrey_san_juan;T@@ [I" android;T@@ [I"android-adb;T@@ [I"android_apk;T@@ [I"android_img_resizer;T@e@ [I"android_market_api;T@@ [I"android-sdk;T@@ [I"android-services;T@@ [I"android_workstation;T@@ [I"andromeda;T@|@ [I" and-son;T@`@ [I" andy;T@'@ [I"andy_admin;T@@ [I" andycli;T@E@ [I"andyjeffries-journey;TU;[I"1.0.0.20111022124133;T@ [I"andyjeffries-rubyrep;T@u@ [I"andys-mason;TU;[I" 0.1.0.3;T@ [I"andyverprauskus-scrubyt;T@@ [I"andyw8-itunes-library;T@6@ [I"anecdotally-api;T@[ @ [I" anemoi;T@@@ [I" anemone;T@@ [I"ang;T@@ [I" angael;T@6@ [I"angelf-thinking-sphinx;TU;[I" 1.3.18;T@ [I"angel_list;T@V@ [I"angellist_api;T@@ [I" angels;T@@ [I"ang_first_gem;T@E@ [I"angry_hash;T@@ [I"angry_mob;T@@ [I"angry_mob_common_targets;T@@ [I"angry-pickle;T@@ [I"angryrock;T@'@ [I"angry_shell;T@E@ [I" angstrom;T@@ [I"ang_ttt_gem;T@@ [I"angularjs-rails;T@@ [I"angularjs-rails-resource;T@E@ [I"angularjs_scaffold;TU;[I" 0.0.22;T@ [I"angular-rails;T@3@ [I"angular-rails-engine;T@e@ [I"angular-ui-rails;T@@ [I"anideo-authlogic-connect;T@@ [I"anideo-embedly;T@@ [I" anima;T@@ [I"animalcracker;T@E@ [I" animate;T@@ [I"animate-rails;T@'@ [I"animate-sass;T@`@ [I"animate.sass-rails;T@'@ [I"Animotion;T@E@ [I" animoto;TU;[I" 1.5.3;T@ [I"animoto_gmail;T@E@ [I" anise;T@X@ [I"anisoptera;T@E@ [I"anixe_csv;T@@ [I"anjlab-backbone-on-rails;TU;[I" 0.9.2.0;T@ [I"anjlab-bootstrap-rails;TU;[I" 2.2.2.1;T@ [I"$anjlab-devise-oauth2-providable;T@;@ [I"anjlab-ruby-smpp;T@y@ [I"anjlab-tesseract;T@`@ [I"anjlab-widgets;T@@ [I" ankh;T@@ [I"anki-importer;T@@ [I" ankit;T@V@ [I" ankoder;T@@ [I" ankusa;T@ @ [I" anmo;TU;[I" 0.0.28;T@ [I" annals;T@@ [I"anniversary;T@@ [I" annotate;TU;[I" 2.5.0;T@ [I"annotated_models;T@@ [I"annotated-rails;T@E@ [I"annotation;T@@@ [I"annotations;T@@@ [I"annotation_security;T@ @ [I"annotator;TU;[I" 0.0.8.1;T@ [I"announcements;T@@ [I" annoy;TU;[I" 0.5.6;T@ [I"annoying_crc_16;T@`@ [I" annyong;T@[ @ [I" anodator;T@@ [I" anomaly;T@@ [I"anonymizer;T@`@ [I" another;T@@ [I"another_brick;T@'@ [I"anotherinbox;T@x@ [I"another_uploader;T@'@ [I"anotifier;T@E@ [I"ansel_iconv;T@@ [I" anserine;T@@ [I" ansi;T@@ [I"ansi2html;TU;[I" 5.3.4;T@ [I" ansi_art;T@'@ [I" ansible;T@@ [I"ansible4ozw;T@n@ [I"ansi_chameleon;T@`@ [I"ansi_colors;T@6@ [I"ansi_colours;T@@ [I" ansify;T@E@ [I" ansirc;T@@ [I"ansi-showcase;T@'@ [I" ansi-sys;TU;[I" 0.8.3;T@ [I" ansitags;T@@@ [I"ansi_utils;T@`@ [I"anstaendig;T@+@ [I"answer-factory;TU;[I" 0.1.3.9;T@ [I"antagonist;T@'@ [I"AntBuilder;T@@ [I"ant-client;T@@ [I" antetype;TU;[I" 0.0.3.1;T@ [I" antfarm;T@x@ [I" anthill;T@@ [I"anthill_smpp;T@@ [I"anthonygarcia-mailfactory;T@@ [I"anticipate;T@E@ [I" antigate;T@E@ [I"antikythera;T@@ [I" antilles;T@+@ [I" antipodr;T@'@ [I"anti_rest;T@'@ [I" antisamy;T@@ [I"antismoker;T@'@ [I"antismoker-memcache;T@'@ [I"antismoker-msgpack-rpc;T@'@ [I"antiwordr;T@@ [I" antlr3;TU;[I" 1.8.12;T@ [I"antlr-net;TU;[I"3.1.3.42154;T@ [I"antlypls-authlogic;TU;[I" 3.0.3;T@ [I"ant-mapper;T@E@ [I" antonio;T@@ [I" anttrap;TU;[I" 0.03;T@ [I" Antwrap;T@X@[@v@X@ [I"anveo-ec2ssh;T@@ [I" anvil;T@'@ [I"anvil-cli;TU;[I" 0.15.0;T@ [I"anvisa-bot;T@@ [I" anvl;T@@ [I"any;T@E@ [I" any2html;T@@ [I" anybase;T@@ [I"anychart_helpers;T@@ [I"any_chart_proxy;T@`@ [I"anychart_xml_builder;T@3@ [I" any_data;T@@@ [I" Anyhub;T@@ [I"anyplayer;T@'@ [I" any-spec;T@@ [I"anystyle-parser;T@@ [I" anything;T@'@ [I"anything_slider_rails;T@E@ [I"anything_slider-rails;T@@ [I" anytime;T@@@ [I"anytime-js-rails;T@@ [I" any_view;T@@ [I" aoandon;T@@ [I"ao_crudify;T@@ [I" a_okay;T@@ [I"aozora4reader;T@@ [I"aozoragen;T@@ [I"ap;T@`@ [I" ap4r;T@@ [I"apacheconf;T@@ [I"apache_config;T@`@ [I"apache-config-generator;TU;[I" 0.2.7;T@ [I"apachecrunch;T@6@ [I"apache_image_resizer;T@V@ [I"apache-loggen;T@"@ [I"apache_log_parser;T@@ [I"apachelogregex;T@@ [I"apache_log_tail;T@@ [I"apache_secure_download;T@@ [I"apache_upload_merger;T@E@ [I"ap_active_merchant;T@@ [I"apartment;TU;[I" 0.19.0;T@ [I" apc4r;T@@ [I"ap_command;T@"@ [I"apc-report-parser;T@'@ [I" ap_dates;T@E@ [I" apdex;T@@ [I"ape;TU;[I" 1.7.0;T@ [I" aperture;T@@ [I" apetag;T@T @ [I" apexgen;T@'@ [I" apfel;T@"@ [I" Apfel;T@'@ [I" aphro;T@'@ [I"api;T@'@ [I" apiary;T@@ [I" apiaryio;T@E@ [I" api_auth;TU;[I" 0.0.2.4;T@ [I" api-auth;T@@ [I" api_bee;T@@ [I"api-bucket;T@@@ [I"api_builder;T@@ [I"api_cache;T@@ [I" apical;T@+@ [I"api_client;T@@ [I"api-client;TU;[I" 1.9.1;T@ [I"api_controller;T@@ [I" apidoc;T@6@ [I" api_doc;T@@ [I" api_docs;T@@ [I"apidone-client;T@@ [I"api-fairy;T@@ [I"api_fixtures;T@`@ [I" apify;T@Y@ [I"apigee-oauth;T@x@ [I"api_guides;T@`@ [I"api_key_maker;T@E@ [I"api_logic;T@E@ [I"apimaster;T@@ [I"api_matchers;T@`@ [I" aping;T@'@ [I"api_object;T@@ [I"apipie-rails;T@ @ [I"api-query-provider;T@'@ [I"api_resource;T@@ [I"apirocket;T@@ [I"apirunner;T@u @ [I" apis;T@@ [I"api_smash;T@@ [I"api_smith;T@N@ [I" apispec;T@"@ [I" api_spec;TU;[I"0.9;T@ [I" apispree;T@@ [I"apispree_api;T@@ [I"apispree_auth;T@@ [I"apispree_core;T@@ [I"apispree_dash;T@@ [I"apispree_promo;T@@ [I"apispree_sample;T@@ [I" apit;TU;[I" 0.0.39;T@ [I"api_taster;T@@ [I" api_test;T@E@ [I"api_test_gem;T@[@ [I"api-testing;T@'@ [I"api-twister;T@'@ [I"api_versioning;T@"@ [I"api-versions;T@@ [I"apj;T@E@ [I" apjson;T@`@ [I"apk;T@6@ [I" apktools;T@@ [I" Aplo;T@@ [I"apminsight;T@@ [I"apn_client;T@"@ [I" apnd;T@@ [I"apnmachine;T@`@ [I"apn_on_rails;T@@ [I" apns;T@@ [I"apns_dispatch;T@@ [I"apn_sender;T@W@ [I"apnserver;T@I@ [I"apns_polite;T@e@ [I"apns-pressplane;T@@ [I"apocalypse-client;T@@ [I" apod;T@6@ [I" apollo;T@@ [I"apoptosis;T@@ [I" apotomo;T@@ [I"apotomo-animate;T@'@ [I"app;T@@ [I"app2engine;T@@ [I" apparat;T@E@ [I" appatra;T@'@ [I"app_attributes;T@@ [I" appboard;TU;[I" 1.0.9;T@ [I" appborg;T@E@ [I" app_box;T@,@ [I"appcache-manifest;T@'@ [I" appcast;T@@ [I"appcelerator;T@@ [I" appcfg;T@@ [I" app-cli;T@'@ [I" app_conf;T@x@ [I"appconfig;T@`@ [I"app_config;T@@ [I"app-config;T@@@ [I"app_constants;T@@ [I" app-ctx;T@1@ [I" app_data;T@@ [I"app-deploy;T@@ [I" appdoc;T@6@ [I"app_driver;T@@ [I"app_drone;T@~@ [I"appengine-apis;TU;[I" 0.0.35;T@ [I"appengine-jruby-jars;T@n@ [I"appengine-mapreduce;T@"@ [I"appengine-paginator;T@I@ [I"appengine-rack;T@ @ [I"appengine-sdk;TU;[I" 1.6.2.1;T@ [I"appengine-tools;TU;[I" 0.0.17;T@ [I"appengine-utils;T@@ [I" appenv;T@'@ [I" app_env;T@'@ [I" appetite;T@@ [I"appetizer;T@@ [I"appetizer-activerecord;T@@ [I"appetizer-ui;T@- @ [I"appfactory;T@@ [I"appfigures;T@`@ [I"AppFormBuilder;T@`@ [I" app_glue;T@'@ [I"apphoshies-ruby-client;T@@ [I"app_hosts;T@@ [I" apphtml;T@'@ [I" apphunk;T@@ [I" apphunkd;TU;[I" 0.13.0;T@ [I" appify;T@@ [I"appinstaller;T@'@ [I" appjam;TU;[I" 0.1.8.6;T@ [I" appjob;T@@ [I" Appjob;T@'@ [I"appkernel;T@@ [I"apple_cart;T@E@ [I"apple_push;T@@@ [I"apple-push;T@@ [I"apple_push_notification;T@@ [I"apple_receipt_verifier;T@'@ [I"applescript;T@@ [I"appleseed;T@@ [I"apple_store_search;T@@ [I"apple-tv-converter;T@@ [I" appli;T@+@ [I"application;T@E@ [I"application_config;T@E@ [I"application_configuration;T@@ [I"applicious_utils;TU;[I" 0.1.95;T@ [I"applied_css;T@E@ [I" applix;TU;[I" 0.4.10;T@ [I"app_maint;T@E@ [I" appmath;T@'@ [I" app-mgr;T@,@ [I"appMobiBuild;T@E@ [I"appMobiPush;T@E@ [I" app_mode;T@@ [I"appmospheres_audit;T@@@ [I"appnexusapi;T@@ [I" app-oil;T@@ [I"appointments;T@ @ [I"appoxy_api;T@3@ [I"appoxy-nettica;T@@ [I"appoxy_rails;TU;[I" 0.0.34;T@ [I"appoxy_sessions;T@@ [I"appoxy_ui;T@E@ [I"app_profiler;T@E@ [I"app-racket;T@@ [I"appraisal;T@@ [I"appraiser;T@@ [I" apprank;T@'@ [I"app_reset;T@V@ [I"app-reviews;T@E@ [I" apprise;T@@ [I"apprise-me;T@"@ [I"apprise-rails;T@@ [I"app-routes;T@@ [I"approval_hub;T@@ [I"approvals;T@@ [I"approval_tests;T@V@ [I" approve;T@'@ [I"approximate_date;T@E@ [I"approximately;T@@ [I"apprunway;T@@ [I" appscake;T@@ [I"appscale-tools;T@Q@ [I"appscrolls;T@- @ [I" appsendr;T@@ [I" appsent;T@"@ [I"appserver;T@E@ [I" appshot;T@V@ [I"appsignal;T@@ [I"appsignal-mongo;T@@ [I" appsta;T@@ [I" appstats;TU;[I" 0.25.1;T@ [I"app_store;T@@@ [I"app-store-emigrant;T@V@ [I"app_store_pricing_matrix;T@@ [I"appstorm_concatenator;T@'@ [I" appswarm;T@'@ [I" apptap;T@E@ [I"app-tester;TU;[I" 0.1.2.1;T@ [I"app-themer;T@_@ [I"appush_client;T@6@ [I"app-version-git;T@"@ [I"appyantra_admin;T@'@ [I" appygram;T@@ [I"appygram-rails;T@ @ [I"app-yml-rails;T@@@ [I"apricoteatsgorilla;T@(@ [I" april;T@@ [I"aprilfool;T@'@ [I" apriori;T@I@ [I"aprova_facil;TU;[I" 1.4.0;T@ [I"aproxacs-s3sync;T@@ [I" aprs;T@'@ [I" apsis;T@'@ [I"apsoto-sitemap_generator;T@@ [I"AptDownloader;T@@ [I" aptools;T@@ [I"apt-repair-sources;T@'@ [I"aq1018-rforce;T@@ [I"aq1018-searchlogic;TU;[I" 2.4.17;T@ [I"aq1018-sunspot_mongoid;T@@ [I"aql_sms_api;T@@ [I" aq.rb;T@@ [I" aqtk;T@|I" mswin32;T[I" aqua;T@@ [I" aquarium;T@@ [I"aquaticprime;T@@ [I" aqueduct;T@@ [I"aqueduct-elastic;T@@ [I"aqueduct-ftp;T@@ [I"aqueduct-i2b2;T@@ [I"aqueduct-mounted;T@@ [I"aqueduct-mssql2008;T@@ [I"aqueduct-mysql;T@@ [I"ara;T@@ [I"Arabic-Prawn;T@'@ [I" arachni;TU;[I" 0.4.1.3;T@ [I" arachnid;T@I@ [I"arachni-rpc;T@6@ [I"arachni-rpc-em;T@@@ [I"arachni-rpc-pure;T@`@ [I"arachni-typhoeus;TU;[I" 0.2.0.2;T@ [I"ar_after_timestamps;T@@ [I"ar_after_transaction;T@@ [I" arake;T@E@ [I"arangodb-odm;T@@ [I" arara;T@E@ [I"ar-async-counter-cache;T@@@ [I"aratak_date_validator;T@@ [I"aratak-routing-filter;T@,@ [I"ar_attribute_serializer;T@@ [I"ar_attr_lazy;T@@ [I"ar-audit-tracer;T@@ [I" arbdrone;T@'@ [I" arbi;TU;[I" 1.0.8.4;T@ [I"ar_binary_flag_attributes;T@'@ [I"arbor-atlas;T@`@ [I" arboreal;T@@ [I"arbor-rails;T@"@ [I" arbre;T@@ [I" arbs;T@@ [I"arc;T@<@ [I" arcade;T@@ [I" arcadia;T@~@ [I"archipelago;T@@ [I"archipelago_rbtree;T@@ [I"architect4r;TU;[I" 0.4.3.1;T@ [I"architecture-js;T@@ [I"archive_2s;T@@ [I"archive-gem;T@'@ [I" archiver;T@@ [I" archives;T@'@ [I"archive-tar;T@- @ [I"archive-tar2;T@@ [I"archive-tar-external;T@ @ [I"archive-tar-minitar;T@@ [I"archive-tarsimple;T@@ [I"archive_tree;T@@ [I"archive-zip;T@@ [I"archivist;T@@ [I"ar-column-as;T@@ [I"ar_condition;T@E@ [I"ar-configurator;T@@ [I"ar_connection_pool;T@@ [I"ar_counter;T@'@ [I"arcserver.rb;T@+@ [I"&arctica-autorization-rails-plugin;T@@ [I" arcus;T@n@ [I"ar_dbcopy;T@@ [I"ar_default_values;T@@ [I"ar-deltas;T@6@ [I"ar_diagram;T@@ [I"ardour_git;T@'@ [I"ardtweeno;T@E@ [I" arduino;T@R @ [I"arduino_build_notifier;T@@ [I"arduino_firmata;T@@ [I"arduino_mega;T@|@ [I" ardumper;TU;[I" 1.0.1.1;T@ [I" area;T@@ [I" area_51;T@@ [I" area_cn;T@@ [I" arel;T@@ [I"arelastic;T@@ [I"arel-compat;T@x@ [I"arel_date_scopes;T@E@ [I"arel_operators;T@@ [I" arel_or;T@"@ [I"arel_ruby;T@@ [I" arena;T@@ [I"arena_barby;T@@ [I"arena-i18n-active_record;TU;[I" 0.0.333;T@ [I" ar-enums;T@@ [I" ares_cz;T@@ [I" ares-ext;T@@ [I"ares-focus-extensions;T@@ [I"are_we_there_yet;T@@ [I"ar-extensions;T@@ [I"ar_finder_form;T@@ [I"ar_fixtures;T@"@ [I" arfy;T@@ [I" argh;T@@ [I" argible;T@`@ [I" argonaut;T@E@ [I"args_parser;T@6@ [I"ArgsParser;T@@ [I"arguments;T@6@ [I" argus;T@@ [I"arh;T@@ [I"ar_http_wrapper;T@@ [I"ari;T@@ [I" aria_api;T@@ [I" ariadna;T@@ [I" ariane;T@@ [I"arid_cache;TU;[I" 1.4.4;T@ [I" ariel;T@@ [I"arielvalentin-paperclip;TU;[I" 2.3.6;T@ [I" ariete;T@@ [I" arin-rws;T@@ [I"arin-whois;T@N@ [I"aritcaptcha;T@@ [I"arithmetic;T@@ [I"ark;T@'@ [I"arkayne_rails;T@@ [I" arldap;T@'@ [I"ar_loader;TU;[I" 9.9.9;T@ [I" ar_lock;T@@ [I"arm;T@'@ [I" armada;T@`@ [I"ar_mailer;T@@ [I"ar_mailer_generator;T@@ [I"ar_mailer_rails3;TU;[I" 2.1.12;T@ [I"ar_mailer_service;T@`@ [I" armchair;T@E@ [I" ar_merge;T@@ [I"ar-model-generator;T@[ @ [I"armoredcode-misc;T@ @ [I" armory;T@@ [I"armory_api;T@`@ [I" armot;T@x@ [I"armstrong;T@@ [I"ar-multidb;T@1@ [I"army-negative;TU;[I" 3.1.0;T@ [I"ar_mysql_flexmaster;T@@ [I"ar-octopus;T@x@ [I"ar_oo_select;T@@ [I"ar_openid_store;T@'@ [I"ar_orderable;T@@ [I"ar-orderable;T@@ [I" around;T@'@ [I"ar_outer_joins;T@@ [I" arow;T@'@ [I"arperftoolkit_base;T@'@ [I"ar_pg_array;TU;[I" 0.11.2;T@ [I" arpie;T@@ [I" arpoon;T@'@ [I"ar_properties;T@E@ [I" arproxy;T@@@ [I"ar_publish_control;T@@ [I" ar_query;T@'@ [I"arrabiata;T@x@ [I" array;T@@ [I" array_2d;T@`@ [I"array_2d_simple;T@@ [I" array3d;T@'@ [I"array_bit_mask;T@@ [I"arraybooster;T@E@ [I"arrayclass;T@`@ [I"array-compositing;T@@ [I"array_enumerator;T@@ [I"array_extend;T@@ [I"arrayextension;T@@ [I"arrayfields;TU;[I" 4.7.4;T@ [I"array_floe;T@;@ [I"array-frequency;T@@ [I" arrayfu;T@n@ [I"array_groupings;T@E@ [I"array-hooked;T@T @ [I" arrayio;T@@ [I"array_logic;T@`@ [I"array_metrics;T@E@ [I"array_pair;T@@ [I"array_partition;T@@ [I"array_proc;T@'@ [I" arrayr;T@E@ [I"array_require;T@'@ [I"array-sorted;T@x@ [I"array-sorted-compositing;T@W@ [I"array-sorted-unique;T@@ [I"$array-sorted-unique-compositing;T@@ [I"array_statistics;T@@ [I"array-statistics;T@`@ [I"array_stats;T@@ [I"arraysugar;T@@ [I"array-to-csv;T@@ [I"array-unique;T@@ [I"array-unique-compositing;T@ @ [I"array-window;T@'@ [I"array_with_priority;T@@ [I"array-xml_serialization;T@@ [I"ar-resque-counter-cache;T@@ [I" arrest;TU;[I" 0.0.91;T@ [I"ar_result_calculations;T@@ [I"arr-force;T@@ [I"arrogance;T@E@ [I"ar_rollout;T@@ [I" arrow;T@@ [I" arroz;T@"@ [I" arr-pm;T@n@ [I"arsecurity;T@6@ [I" arsenal;T@'@ [I"ar_serialize;T@@ [I"ar_serialized_array;T@@ [I"ar-serialize-helpers;T@u@ [I"arsettings;T@x@ [I" arsh;TU;[I" 1.1.8;T@ [I"ar-simple-idmap;T@@ [I" arson;T@E@ [I"ars-permalink;T@+@ [I" arspy;T@V@ [I"ar_strip_commas;T@@ [I"ar-sybase-jdbc-adapter;T@I@ [I" artaius;T@@ [I" artanis;T@@ [I" artdeco;T@ @ [I"art-decomp;T@x@ [I"artemk-cache-money;T@V@ [I"artemk-ckeditor;TU;[I" 3.5.5;T@ [I"artemk-migration_fu;T@`@ [I" artex;T@ @ [I"artforge-rtranslate;TU;[I" 1.3.4;T@ [I"artifact_logger;T@u@ [I"artifacts;T@ @ [I" artifice;T@6@ [I"artifice-excon;T@+@ [I"artifice-passthru;T@`@ [I" artii;T@+@ [I" artimis;T@@ [I" artisan;T@J@ [I"artisan-ar-repository;T@@ [I"artisan-core;T@@ [I"artisan-memory-repository;T@@ [I"artisan-repository;T@@ [I"ar_to_chart;T@E@ [I"#artofmission-action_mailer_tls;T@;@ [I"artofmission-heroku;TU;[I" 1.6.3;T@ [I"ar_to_html_table;T@@ [I"ar-tokens;T@"@ [I"ar_transaction_changes;T@'@ [I"ar_truncator;T@@ [I"ar-tsvectors;T@E@ [I"art_typograf;T@'@ [I"art_typograph;T@`@ [I" arturo;T@@ [I"arturop-autocomplete_for;T@@ [I"arturop-chronic_duration;TU;[I" 0.9.7;T@ [I"arturop-hydra;TU;[I" 0.25.0;T@ [I"artworker;T@I@ [I" aruba;T@@ [I"aruba-doubles;T@u@ [I"aruba-jbb;TU;[I" 0.2.7.01;T@ [I"arun_first_gem;T@'@ [I"arun_second_gem;T@'@ [I"arunthampi-friendly;T@@ [I"arunthampi-memcached;TU;[I" 0.17.4;T@ [I"ar-validations;T@@ [I"ar-validations-json;T@'@ [I" arver;T@1@ [I"arvicco-amqp;TU;[I" 0.6.13;T@ [I"arvo-font-rails;T@E@ [I" arxiv;T@@ [I" arxiv-h;T@E@ [I"as;T@@ [I"as3-autocompile;T@@ [I"as3corelib;TU;[I" 0.93.0.1;T@ [I"as3gettext;T@'@ [I"as3gettext-oneup;T@"@ [I"as3signals;T@@ [I" asana;T@"@ [I"asana-cli;T@E@ [I"asana-client;T@E@ [I"asana-ruby;T@E@ [I" asap;T@@ [I"asap-font-rails;T@'@ [I" asari;T@X@ [I"asautotest;T@@ [I" asc_desc;T@@ [I" Ascii85;T@@ [I"ascii_charts;T@e@ [I"ascii_data;T@@@ [I"ascii-data-tools;T@B@ [I" asciidoc;T@E@ [I"asciidoc-bib;T@N@ [I"asciidoctor;T@n@ [I"ascii_doc_web;T@E@ [I" asciify;T@@ [I"ascii_heart;T@'@ [I"ascii-image;T@@@ [I"asciimeme;T@'@ [I" asciimo;T@@ [I"ascii-passport;T@'@ [I"asciiptcha;T@@@ [I"ascii-table;T@@ [I" ascribe;T@@ [I" asdf;T@@ [I"as_dialed_from;T@,@ [I" asdrubal;T@@ [I" asearch;T@'@ [I"as-extensions;T@+@ [I"asf-rest-adapter;T@_@ [I"asf_scaffold_generator;T@@@ [I"asf-soap-adapter;T@ @ [I"ashikawa-ar;T@@@ [I"ashikawa-core;T@@ [I"asiasearch;T@@ [I" asin;T@@ [I" asir;T@@ [I"asir_activerecord;T@@ [I"asir_beanstalk;T@N@ [I"asir_json;TU;[I" 1.1.11;T@ [I"asir_resque;T@N@ [I" asir_xml;T@@ [I" asir_zmq;T@N@ [I"as_jsonable;T@@ [I"ask;T@@ [I" aska;T@@ [I" ask_geo;T@@ [I"ask_stack;T@"@ [I"aslakhellesoy-bcat;TU;[I" 0.6.0.1;T@ [I"aslakjo-comatose;TU;[I" 2.0.5.12;T@ [I"aslon_jquery_ui_css;T@'@ [I"aslon_settings;T@`@ [I"aslon_superfish;T@'@ [I"aslon_table_name;T@@ [I" asmodai;TU;[I" 0.1.20;T@ [I" as_mongo;T@'@ [I"asoules-aasm;TU;[I" 2.0.5.4;T@ [I"aspartame;T@@@ [I"aspartame-refinery;T@@@ [I" aspec;T@@ [I" aspect4r;T@ @ [I" aspecta;T@E@ [I" aspector;T@@ [I"aspectory;T@@ [I" aspectr;T@@ [I" aspekt;T@@ [I"aspell_edit_dist;T@@ [I" aspirin;T@'@ [I"aspmarketplace;T@@ [I"asp_marketplace;T@@ [I"asp-marketplace;T@@ [I"asproject;TU;[I" 0.1.118;T@ [I" aspsms;TU;[I" 0.98;T@ [I" asrake;TU;[I" 0.14.1;T@ [I"as_readonly;T@@ [I"ass;T@ @ [I"ASS;T@@ [I" assay;T@@ [I"assaydepot;T@E@ [I"assay-minitest;T@@ [I"assay-testunit;T@@ [I" assembla;T@@ [I"assembla_cli;T@E@ [I"assembly_line;T@@ [I"assembly_pipe;T@@ [I" assert;T@@ [I" assert2;T@u @ [I"assertalot;T@`@ [I"assert_db_rejects;T@@ [I"assert_difference;T@@ [I"assert_efficient_sql;T@@ [I"assertions;T@@ [I"assertions-eb;TU;[I" 1.7.3;T@ [I"assert_json;T@`@ [I"assert-mocha;T@@ [I" assertor;T@@ [I"assert-rack-test;T@@ [I"assert-rails;T@@ [I"assert-random;T@x@ [I"assert_repeated;T@@ [I"assert-response;T@;@ [I"assert_same;T@[ @ [I"assert_statistically;T@@ [I"assert_valid_html;T@@ [I"assert_valid_markup;T@@ [I"assert_valid_markup_nu;T@@ [I"assert-view;T@@ [I"assert_xpath;T@_@ [I"asset_access_control;T@E@ [I"assetbuild;T@@ [I"assetbundler;T@@ [I"asset_bundler;T@@ [I"asset_compiler;T@!@ [I"asset_copier_generator;T@@ [I"asset_fingerprinter;T@@ [I"asset_hash;T@@ [I"asset_hat;T@@ [I" asset_id;T@,@ [I" assetify;T@@ [I"asset_library;T@Y@ [I"asset_manager;T@@ [I"asset_oss;TU;[I"0.3.1349530724;T@ [I"asset_packager;T@@ [I"asset-packager;T@1@ [I"asset_pipeline_i18n;TU;[I" 3.2.8;T@ [I"asset_pipeline_routes;T@@ [I"asset-pocket;T@@ [I" asset_precompilation_finder;T@@ [I"asset-resource;T@@ [I" assets;T@'@ [I" asset_s3;T@@ [I"assets_booster;T@3@ [I"assets-compiler;T@[ @ [I" assetsio;T@E@ [I"assetsio-rails;T@@ [I"assets_js;T@`@ [I"assets_offline;T@@ [I"assets_on_heroku;T@@ [I"assets_packager;T@E@ [I"assets_precompile_enforcer;T@@ [I"asset_stub;T@@ [I"asset_sweeper;T@@ [I"asset_sync;T@J@ [I"asset_tags;T@@ [I"asset_tasks;T@E@ [I" assette;T@@ [I"asset_timestamps_cache;T@`@ [I"asset-trip;T@`@ [I"asset_uploader;T@@ [I"asset_watcher;T@@ [I" assh;T@E@ [I"assignable_values;T@@ [I"assign_by_parts;T@@ [I"assignment_ext;T@'@ [I"assimilate;T@@ [I" Assist;T@"@ [I"assistance;T@|@ [I" assistly;T@@ [I" assit;T@@@ [I" assoc;T@'@ [I"associate_by;T@`@ [I"association_callbacks;T@E@ [I"!association_collection_tools;T@E@ [I"association_observers;T@@ [I"association_validator;T@@ [I"associative_memory;T@@ [I"associator;T@@ [I"assplecake-RedCloth;TU;[I" 4.2.9;T@ [I" astaire;T@@ [I" astar;T@E@ [I" ast_ast;T@@ [I" astdb;T@'@ [I"AsteriskRuby;T@@ [I"astrails-paypal_adaptive;T@1@ [I"astrails-safe;T@@ [I"astrails-user-agent;T@@ [I"astro-algo;T@'@ [I"astroboa-cli;T@@ [I"astroboa-rb;T@x@ [I"astrochimp;T@@ [I"astro-em-http-request;T@ @ [I"astro_moon;T@!@ [I"astrotrain;T@X@ [I" astruct;TU;[I" 2.11.0;T@ [I" asuka;T@J@ [I" as_user;T@@ [I" asynchro;T@x@ [I"async-http-client-jars;TU;[I" 1.7.6.1;T@[I"async_job;T@'@ [I"async_methods;T@@ [I"async_observer;T@@ [I"asyncomni;T@'@ [I"async_partial;T@@ [I"async-proxy;T@`@ [I"async-rack;T@@ [I"async_rack_test;T@E@ [I"async_record;T@E@ [I"async_service;T@|@ [I"async_sinatra;T@@ [I"at;T@+@ [I" ataulfo;T@@ [I" atco;T@E@ [I"atd-ancestry;T@@ [I"atd-asset_bundler;T@@ [I" atech;TU;[I" 1.0.25;T@ [I"atech-billy;TU;[I" 1.0.14;T@ [I"atech-charlie;T@[@ [I"atech_cloud;T@@ [I"atech_docs;T@@ [I"atech_foreign_currency;T@@ [I"atech-network-log-io;T@@ [I"atechtools;T@@ [I" atesta;T@@ [I" athena;T@@ [I"athenaeum;T@@ [I"athena_resource;T@'@ [I" athergin;T@'@ [I"athlite-actionwebservice;TU;[I" 2.3.8;T@ [I"athlite_open-uri;T@'@ [I" atig;T@@ [I"atk;TU;[I" 1.1.9;T@ [@8@9@ [I"atk-ducksboard;T@+@ [I"atk_icons;T@@@ [I" atlas;T@'@ [I"atlas_client;T@E@ [I"atlas_middleware;T@V@ [I"atlas_on_rails;T@@ [I"atlassian-stash;T@1@ [I" atlast;T@E@ [I" at-let;T@'@ [I"atm;T@E@ [I"atmos-ruby;TU;[I" 1.4.0.7;T@ [I" atnd4r;T@@ [I" atndr;T@E@ [I"atok-twitter;T@@[I" atom;T@[ @ [I" atom-doc;T@@ [I" atomic;T@@[@a@@ [I"atomic_mem_cache_store;T@E@ [I"atomics_resource;T@E@ [I" AtomicTV;T@@ [I" atomizer;T@E@ [I" atomlog;T@@ [I" atoms;T@E@ [I"atomsmasher;T@'@ [I"atom-tools;T@@ [I" atomutil;T@6@ [I" atomy;T@`@ [I"atoulme-Antwrap;TU;[I" 0.7.4;T@ [@x@y@[I"atoulme-Saikuro;T@u@ [I" atpay;T@@ [I"at-random;T@@ [I" atreides;T@@ [I" atrium;T@`@ [I"attachable;T@@ [I"attacheable;TU;[I"1.4;T@ [I" attached;T@@ [I"attachinary;T@u@ [I"attachment_magic;T@@ [I"attachment_magick;T@@ [I"attachment_on_the_fly;T@@@ [I"attachments;T@@ [I"attachment-san;T@E@ [I"attachmerb_fu;T@'@ [I" attachr;T@@ [I" attempt;T@@ [I"attempt_to;T@[ @ [I" attest;T@@ [I"at-the-movies;T@@ [I" attic;T@J@ [I"attic-cleanup;T@@ [I"attic-path;T@@ [I"atti_service;TU;[I" 1.19.0;T@ [I" attlib;T@E@ [I" atto;T@' @ [I" attr;T@@ [I"attr_accessible_block;T@@ [I"attr_boolean;T@'@ [I"attr_bucket;T@@ [I"attr_callback;T@@ [I"attr-chain;T@@@ [I"attr_cleaner;T@`@ [I"attr_configurable;T@@ [I"attr_default;T@Y@ [I"attr_encodable;T@6@ [I"attr_encrypted;T@u@ [I"attr_encryptor;T@@ [I"attr_enum;T@@ [I"attr_enumerator;T@@ [I" attr_ex;T@@ [I"attr_extras;T@@ [I"attr_hash_accessor;T@@ [I""attribute_access_controllable;T@;@ [I"attribute_cartographer;T@@ [I"attribute_choices;T@@ [I"attribute_defaults;T@[ @ [I"attribute-defaults;T@@ [I"attribute_delegator;T@E@ [I"attribute-driven;T@@ [I"attribute_enums;T@@ [I"attribute_ext;T@@ [I"attribute_extensions;T@E@ [I"attribute-filters;T@@ [I"attribute_imagifiable;T@n@ [I"attribute_inheritance;T@'@ [I"attribute-kit;T@@ [I"attribute_localizer;T@"@ [I"attribute_mapper;T@ @ [I"attribute_normalizer;T@@ [I"attribute-permissions;T@@ [I"attribute_predicates;T@@ [I""attribute_queryable_encrypted;T@@ [I"attributes;TU;[I" 5.0.1;T@ [I"attributes1;TU;[I" 5.0.3;T@ [I"attribute_sanitizer;T@@ [I"attribute_serializer;T@@ [I"attributes_sort;T@@ [I"attribute_translator;T@@ [I"attribute-views;T@@ [I"attr_immutable;T@@ [I"attr_inherited;T@@ [I"attr_memoizer;T@'@ [I"attr_plus;T@@ [I"attr_readwrite;T@@ [I"attr_remote;T@n@ [I"attr_required;T@@ [I"attr_symbol;T@"@ [I"attrtastic;T@@ [I"attr-translatable;T@+@ [I"attr_unit;T@'@ [I"att_speech;T@@ [I"at-validations;T@@ [I"au3;T@'@ [@0@'@[@0@@@ [I"aua;T@I@ [I" aua-mite;T@@ [I"aub-graticule;T@@ [I"auctionhouse;T@@ [I"auction_inc;T@I@ [I" audioboo;T@'@ [I"audiofile;T@'@ [I" audiojs;T@@ [I"audioscrobbler;T@`@ [I"audiosocket;T@@ [I" audit;T@n@ [I"auditable;T@6@ [I" audited;T@@ [I"audited-activerecord;T@@ [I"audited_change_set;T@@ [I"audited_logfile;T@@ [I"audited-mongo_mapper;T@@ [I" auditing;T@@ [I"audit_log;T@V@ [I" auditor;T@J@ [I"auditor_tenancy;T@.@ [I"auditrail;T@"@ [I"audit_rails;T@6@ [I"audit_record;T@|@ [I"audit_trail;T@@ [I" audrey2;T@@ [I" auger;T@@ [I" augment;T@@ [I"augmented_array;T@'@ [I"aukan-bitmask;T@@ [I"aunderwo-gcal4ruby;T@@ [I"aunderwo-gdata4ruby;T@1@ [I"aunderwo-roo;T@x@ [I" auom;T@"@ [I"aupairmeter;T@@ [I" aural;T@'@ [I" aurb;T@@ [I" aureus;T@@ [I"aurita-gui;TU;[I" 0.5.9;T@ [I" aurora;T@@ [I" aurum;T@@ [I" ausburbs;T@@ [I" auspost;TU;[I" 0.8.6;T@ [I"auspost-drc;T@`@ [I"aussiesms;T@@ [I"auswalk-uniquify;T@@ [I" auteur;T@@ [I" auth;T@n@ [I" authable;T@`@ [I"auth-assistant;T@x@ [I"authbuttons-rails;T@@@ [I"authcan_easyroller;T@+@ [I" authem;T@E@ [I" auth_eng;T@E@ [I"authengine;T@E@ [I"authentasaurus;TU;[I" 0.8.9;T@ [I"authenticates_rpi;T@"@ [I"authentication;T@'@ [I"authentication-needed-san;T@x@ [I"authentic_jobs;T@I@ [I"authentifyd;T@@ [I" authgasm;TU;[I" 0.10.3;T@ [I" authgen;T@'@ [I"auth-hmac;T@@ [I" authhub;T@'@ [I"authic_client;T@3@ [I"authlogic;T@@ [I"authlogic_bushido;T@' @ [I"authlogic_cloudfuji;TU;[I" 0.9.4;T@ [I"authlogic-connect;T@@ [I""authlogic-connect-andrewacove;TU;[I" 0.5.7;T@ [I"authlogic-connect-mailru;T@@ [I"authlogic_crowd;T@@ [I"authlogic_crowd_rest;T@@ [I"authlogic_drc;T@@ [I"authlogic_facebook;T@u@ [I"authlogic_facebook_koala;T@@ [I"authlogic_facebook_shim;T@@ [I"authlogic_haapi;T@@ [I"authlogic_motp;T@@ [I"authlogic-oauth;T@@ [I"authlogic_oauth2;T@x@ [I"authlogic-oid;T@@ [I"authlogic_pam;T@@ [I"authlogic_radius;T@@ [I"authlogic-rails3;TU;[I"2.2;T@ [I"authlogic_rpx;T@N@ [I"#auth_logic_user_session_helper;T@@ [I"authlogic_vkontakte;T@`@ [I"authlogic_wind;T@x@ [I" authmonk;T@@ [I" authn;TU;[I" 3.7.4;T@ [I"authn-activation;TU;[I" 1.8.2;T@ [I"authn-rails;T@@ [I"authorails;T@@ [I"authoritah;T@@@ [I"authoritarian;T@@ [I"authority;T@J@ [I"authority_engine;T@|@ [I"authorization;TU;[I" 1.0.12;T@ [I"authorization-rails;T@@ [I"authorization-san;T@ @ [I"authorize;T@@ [I"authorize_cim;T@@@ [I"authorized_keys;T@@ [I"authorize_me;T@@ [I"authorize-net;T@@ [I"authorize_net_reporting;T@@ [I"authorizer;T@@ [I"authorize_when;T@@ [I"authorizme;T@@ [I"Authorizr;T@@ [I" authpds;T@,@ [I"authpds-nyu;T@[@ [I"authpwn_rails;TU;[I" 0.13.3;T@ [I"auth-slice;T@@ [I"auth_time_client;T@ @ [I"authtools;T@x@ [I"auth-transis-client;T@@ [I" authy;T@n@ [I" autility;T@"@ [I" auto;T@+@ [I"auto_annotate;T@@ [I" auto_ar;T@E@ [I"auto-assignment;T@E@ [I" autoattr;T@'@ [I"auto_auth_spec;T@@ [I" autobahn;T@[ @ [I"auto-bidder;T@@ [I"autobuild;TU;[I" 1.6.5;T@ [I"auto_build;T@@ [I"auto_click;T@@ [I" autocode;T@@ [I"autocolors;T@n@ [I"autocomplete;T@@ [I"autocomplete_for;T@,@ [I"autocomplete-off;T@@ [I"autocompletion;T@@ [I"autoconfig;T@@ [I"autocorrect;T@'@ [I"auto_cron;T@. @ [I" autocuke;T@`@ [I"autodata-acts_as_versioned;T@@ [I"autodiscover;T@@ [I" autodrop;T@@ [I" auto-emo;T@@ [I"auto_emote;T@@ [I"auto_excerpt;T@@ [I"autoexec_bat;T@E@ [I" autofac;TU;[I"2.2.4.900;T@ [I"auto_form;T@E@ [I"auto-gemsets;T@@ [I" autogg;T@[@ [I"autograph;T@@ [I" autogrid;T@'@ [I"auto_hash;T@@ [I"auto_html;T@ @ [I"auto-hyde;T@`@ [I"auto_increment;T@!@ [I" autolang;T@@ [I" autolink;T@@ [I" autoload;T@@ [I"autoloader;T@E@ [I"autoload_for;T@E@ [I"auto_locale;T@@ [I" autolog;T@@ [I"automagical_validations;T@@ [I"automaker;T@@@ [I"automapper;TU;[I"1.1.0.188.20100804;T@ [I" automata;T@@ [I"automate-em;T@"@ [I"automateit;TU;[I" 0.80624;T@ [I"automatic;TU;[I" 13.1.0;T@ [I"automatic_foreign_key;T@@ [I"automation;T@@ [I"automaton;T@'@ [I" automaze;T@"@ [I"automerge;T@@ [I"autometal-geoip;T@@ [I"autometal-growl;T@@ [I"autometal-piwik;T@@ [I"autometric;T@'@ [I"automigration;T@;@ [I"auto_migrations;T@@ [I"automobile;T@|@ [I"automobile-ruby19;T@ @ [I"automobile_trip;T@@ [I"auto_mock;T@@ [I" autonzb;T@u @ [I" AutoNZB;T@Y@ [I" autopage;T@3@ [I"autopagerize;T@@ [I"autoparse;T@@ [I" autopen;T@@ [I"autopilot;T@"@ [I" autoproj;TU;[I" 1.8.5;T@ [I"auto-question;T@'@ [I"auto_rake;T@'@ [I"autorefresh;T@@ [I"autoreload;T@@ [I"auto_reload;T@@ [I"autorequire;T@@ [I"auto_response;T@|@ [I"autoscaler;T@@ [I"autosel_http_proxy;T@@ [I"auto-session-timeout;T@@ [I"autosiege;T@E@ [I"autospec.watchr;T@@ [I"auto_sprite;T@;@ [I"autostats;T@@ [I"auto_strip_attributes;T@@ [I" autosub;T@@ [I"autosuggest-rb;T@1@ [I"auto_tagger;T@^@ [I" autotask;T@`@ [I"autotaskcrm;T@6@ [I"auto-terminal;T@'@ [I" autotest;TU;[I" 4.4.6;T@ [I"auto_test;T@@ [I"autotest-aniki;T@@ [I"autotest-clear;T@@ [I"#autotest-cucumber-notification;T@@ [I"autotest-doom;T@'@ [I"autotest-emacs;T@@ [I"autotestforphp;T@@ [I"autotest-fsevent;T@^@ [I"autotest-gem;T@@@ [I"autotest-git;T@'@ [I"autotest-growl;TU;[I" 0.2.16;T@ [I"autotest-images;T@n@ [I"autotest-inotify;T@@ [I"autotest-java;T@E@ [I"autotest-mac;T@6@ [I"autotest-notification;TU;[I" 2.3.4;T@ [I"autotest-notifyosd;T@@ [I"autotest-notify-osd;T@@ [I"autotest-rails;TU;[I" 4.1.2;T@ [I"autotest-rails-pure;T@I@ [I"autotest-run_dependencies;T@@ [I"autotest_screen;TU;[I" 4.0.3;T@ [I"autotest-screen;TU;[I" 0.1.0.1;T@ [I"autotest-snarl;T@"@ [I"autotest-standalone;TU;[I" 4.5.11;T@ [I"autotest-stumpwm;T@@ [I"autotest-tmux;T@@ [I"auto_truncated_logger;T@E@ [I"autotvnzb;T@`@ [I"auto_uuid;T@@ [I"auto_validate;T@"@ [I"auto_validations;T@"@ [I"autowatchr;T@|@ [I" autoweb;T@E@ [I"autowebreplay;T@@ [I" AutoZest;T@E@ [I" autumn;T@v @ [I"aux_codes;T@ @ [I"auxesis-RubyRRDtool;T@@ [I"auxiliary_addons;T@u @ [I" avalara;T@E@ [I" avalon;T@@ [I"avante_rails;T@"@ [I"AvantiConveniences;T@ @ [I"ava_rails_generator;T@@ [I"ava_scaffold_generator;T@@ [I" avatar;T@@ [I" avataree;T@y@ [I"avatars_for_rails;T@ @ [I"avatars.io;T@|@ [I" avaticon;T@n@ [I" avburn;T@@ [I" AVClub;T@+@ [I" avdata;T@x@ [I"avdi-faraday;T@@ [I"avdt_ldap;T@@ [I"avdt_ldap_legacy;T@@ [I" aveceine;T@@ [I" averager;T@@ [I"#averell-exception_notification;TU;[I"1.0.20110124;T@ [I" aversion;T@'@ [I"avgrund_to;T@E@ [I" aviary;T@@ [I"aviglitch;T@6@ [I"avira_update_mirrors;T@@ [I" avl_tree;T@;@ [I"avo-setup;TU;[I" 0.0.33;T@ [I" avro;T@@ [I"avrubykit;T@!@ [I"av_search;T@@ [I" avvo_api;T@@ [I" await;T@@ [I"awallis-ri_cal;TU;[I" 0.8.8;T@ [I"awardflair;T@"@ [I" awat;T@'@ [I"awe;T@@ [I" aweber;T@ @ [I"awe-rails;T@@ [I" awesm;T@g@ [I" awesome;T@@ [I"awesome_animal;T@@ [I"awesome_bot_factory;T@'@ [I"awesome-cli;T@@ [I"awesome_conf;T@@ [I"awesomecrawler;T@6@ [I"awesome_dump;T@'@ [I"awesome_engine;T@@@ [I"awesome_flags;T@ @ [I"awesome_gem;T@@ [I"awesome_imports;T@"@ [I"awesome_logger;T@'@ [I"awesomemailer;T@@ [I"awesome_nested_fields;T@@ [I"awesome_nested_set;TU;[I" 2.1.5;T@ [I"awesome_nested_set_jrmurad;T@@ [I"awesome_nested_set-tools;T@'@ [I"awesome_print;T@@ [I"awesome_print_colors;T@'@ [I"awesome_print_motion;T@@ [I" awesomer;T@@ [I"!awesome_rails_flash_messages;T@E@ [I"awesomesauce;T@@ [I"awesome_search;T@@ [I"awesome_tables;T@@ [I"awesome_usps;T@- @ [I"awestruct;T@@ [I"awestructx;T@@ [I"awetestlib;TU;[I" 0.1.27;T@ [@@@ [I"awis4ruby;T@- @ [I" awkward;T@@ [I"awkward_turtle;T@"@ [I"aws;T@@@ [I"aws-alert-monitor;T@"@ [I" aws-auth;T@e@ [I" awsborn;T@@ [I"aws_cf_signer;T@`@ [I"aws-cloudfront;T@"@ [I"aws_cloud_map;T@@ [I"aws_cloud_search;T@E@ [I"aws-controller;T@"@ [I"aws_credentials;T@X@ [I"aws_csshx;T@+@ [I" aws-ext;T@@@ [I" awshucks;T@'@ [I" aws-ie;T@@ [I"aws_imageshack;T@x@ [I"aws_keychain;T@E@ [I" awsnap;T@E@ [I" awsome;T@@ [I"aws_onchange;T@@ [I"aws_pipes;T@@ [I"aws-pricing;T@X@ [I" awsquery;T@@ [I" awsraw;T@`@ [I" aws-s3;T@y@ [I"aws-s3-akhtaboot;TU;[I"0.6.2.1288082910;T@ [I"aws-s3-cse;T@`@ [I"aws_s3_export;T@@ [I"aws-s3-instructure;TU;[I"0.6.2.1352914936;T@ [I"aws-s3-multi-region;T@y@ [I" aws-sdb;T@@ [I"aws_sdb_bare;T@@ [I" aws_sdk;T@@ [I" aws-sdk;TU;[I" 1.8.0;T@ [I"aws-sdk-cloudwatch;T@@ [I"aws-security-group-state;T@E@ [I" aws-ses;T@"@ [I"aws-ses-rails31;T@"@ [I"aws_sns_publisher;T@@ [I" awstools;T@'@ [I"aws_tools;T@E@ [I"aws_tracker;T@"@ [I" awsum;T@Y@ [I" aws-url;T@@ [I"axe;T@E@ [I"axebomber;T@@@[I"AXElements;T@@ [I" axeman;T@'@ [I" axeml;T@n@ [I"axial_notifier;T@@ [I"axiom_of_choice;T@@ [I" axis;T@@ [I"axis-netcam;T@@ [I"axle-producer_consumer;T@'@ [I" axlsx;T@@ [I"axlsx_rails;T@6@ [I" axml;T@n@ [I" axon;T@@ [I"axtro-actionwebservice;TU;[I"2.3.5.1.20101118142125;T@ [I"axtro-acts-as-taggable-on;TU;[I" 2.0.6;T@ [I"axtro-ar_mailer;T@ @ [I"axtro-aws-ses;T@"@ [I"axtro-roart;TU;[I" 0.1.9.2;T@ [I"axtro-rubber;TU;[I" 1.5.7.1;T@ [I"axtro-rvideo;T@Q@ [I" AXTyper;T@@ [I"ayah_integration;T@y@ [I"ayanko-watir-webdriver;TU;[I" 0.1.1.1;T@ [I"ayi;T@E@ [I"ayl;T@@ [I"ayl-beanstalk;T@@ [I"ayl-rails;T@6@ [I" ayril;T@@@ [I"ayrton-rvideo;T@'@ [I" azebiki;T@V@ [I"azkaban-rb;T@n@ [I" azul;T@'@ [I" azure;T@`@ [I"b;T@@ [I" b001e;T@'@ [I" babalu;T@@ [I" babble;T@@ [I" babbler;T@'@ [I" babel;T@+@ [I"babel_bridge;T@@ [I"babelfish;T@'@ [I"Babelfish;T@'@ [I"babelphish;T@@ [I"babelyoda;TU;[I" 2.1.16;T@ [I" babilu;T@I@ [I"babney-hominid;T@@ [I" babosa;T@@ [I" babushka;T@E@ [I"baby_bots;T@n@ [I" baby-bro;T@@ [I"babygitter;T@@ [I" babylon;T@`@ [I"babynames;T@6@ [I" babypool;T@@ [I"baby_tooth;T@E@ [I"bacchanalytics;T@g@ [I" bacchus;T@@ [I" bach;T@n@ [I" back;T@'@ [I"backboneAX;T@p@ [I"backboneAXSwitch;T@'@ [I"backbone_editable-rails;TU;[I" 0.0.1.1;T@ [I"backbone_eventbinder_rails;TU;[I" 1.0.2.2;T@ [I"backbone_extensions;T@V@ [I"backbone-fetch-event;T@'@ [I"backbone_form_helper;T@E@ [I"backbone-forms-rails;T@'@ [I"backbone-generators;TU;[I" 0.01;T@ [I"backbone-handlebars;T@'@ [I"backbone-jasmine;T@'@ [I"backbonejs-rails;T@@ [I"backbone-on-rails;TU;[I" 0.9.9.0;T@ [I"backboner;T@'@ [I"backbone_rails;T@E@ [I"backbone-rails;T@' @ [I"backbone-source;T@@ [I"backbone-support;T@@ [I"backbone_sync-rails;T@V@ [I"backbone-validation-rails;TU;[I" 0.6.2.1;T@ [I"backbonify;T@@ [I"backbrace;T@@ [I"backburner;T@@ [I"backchannel;T@`@ [I"backchat-client;T@!@ [I" backdat;T@'@ [I"backendfu;T@'@ [I" backflip;T@@@ [I" backgem;T@@ [I"background_cache;T@ @ [I"backgrounded;T@O@ [I"backgrounded_mail;T@@ [I"backgrounded_mailer;T@@ [I"background_lite;T@@ [I"backgroundmodule;T@@@ [I"background_module;T@@ [I"background_process;T@@ [I"background_queue;T@@ [I"backgroundrb-rails3;T@@ [I" backhead;T@@ [I" backitup;T@@ [I" backload;T@@ [I" backlog;TU;[I" 0.37.2;T@ [I"backlog-api;T@@ [I"back_mark;T@@ [I" backnob;T@@ [I" backofen;T@'@ [I" backpack;T@@ [I"backpack_journal;T@E@ [I"backpack-journal;T@@ [I"!backported_strong_parameters;T@I@ [I"backports;T@/@ [I" backrack;T@E@ [I" backs3;T@@ [I"backscatter;T@'@ [I"backstack;T@@ [I"backstop-deploys;T@@ [I" backstop-simple_xlsx_writer;T@Y@ [I"backstretch-rails;T@+@ [I"backtastic;T@x@ [I"back_to_referer_after_form;T@@ [I"Backtrace_Array;T@@ [I"backtracer;T@@ [I"backtrace_shortener;T@@ [I"backtrack;T@@ [I"backtrack-xpath;T@@ [I" backtype;T@@@ [I"backtyper;T@`@ [I" backup;TU;[I" 3.0.27;T@ [I"backup2everbox;T@@ [I"backup2qiniu;T@@ [I"backup2s3;T@@ [I"backup2sndacs;T@@ [I"backup_checksum;TU;[I" 3.0.23;T@ [I"backup_cleaner;T@@ [I"backup_data;T@@ [I" backuper;T@@ [I"backupgem;T@@ [I"Backup_GEM_2;T@@@ [I"backupgemsteven;T@@@ [I"backup-github;T@O@ [I"backup-gundua;T@@ [I"backupify-rsolr-nokogiri;TU;[I" 0.12.1.1;T@ [I" backupit;T@@ [I"backup_jenkins;T@ @ [I"BackupMan;T@|@ [I"backup_management;T@@ [I"backup_organizer;T@'@ [I"backup-pants;T@!@ [I"backup_rails;T@@ [I"backup-restorer;T@@ [I"backup-task;T@@ [I"backup_tasks;T@@ [I"backup_utility;T@@ [I"backup-wakiki;TU;[I" 2.4.1;T@ [I" backyard;T@@ [I"backzilla;T@E@ [I" bacon;T@N@ [I"bacon-bits;T@@ [I"Bacon_Colored;T@@ [I"bacon-colored_output;T@@ [I" Bacon_FS;T@@ [I"Bacon_FS_Matchers;T@@ [I"baconmocha;T@E@ [I"Bacon_Rack;T@I@ [I" bacon-rr;T@@ [I" bacuview;T@@ [I"bacuwatch;T@@ [I"bad_ass_extensions;T@@ [I" badb;T@@ [I" badbill;T@'@ [I" bad_bot;T@B@ [I"bad_browser;T@@ [I"bad_encodings-ruby19;T@@ [I" badfruit;T@x@ [I"badgeable;T@@ [I"badgeable_active_record;T@`@ [I" badger;T@@ [I"badger-rails;T@@ [I"badges_engine_test;T@'@ [I"badgeville;T@`@ [I"badgeville_berlin;T@@ [I"badnaam-geokit;T@@ [I"bad_words;T@@ [I" baffle;T@@ [I"bag;T@@ [I"bag42_geocoder;T@'@ [I" bagger;T@@ [I" bagit;T@@ [I" bagman;T@@ [I" bagotrix;T@`@ [I" bahia;T@@ [I" bahn;T@@ [I" baidu;T@@ [I"baidu_crawler;T@'@ [I"baidu_web;T@[@ [I" bailiff;T@@ [I"bailitheoir;T@'@ [I" bake;T@@@ [I" bake.clj;T@@ [I" baker;T@@@ [I"bakery-core;T@@ [I"bakery-theme;T@@ [I"bake-toolkit;T@@ [I" bakeware;T@@ [I" bakker;T@@ [I" bakman;T@@ [I" balance;T@`@ [I" balanced;T@Y@ [I"balanced-ach;T@!@ [I" baldrick;T@E@ [I" baldwin;T@@ [I"#balepc-zombie_passenger_killer;T@@ [I"#balinterdi-activewarehouse-etl;T@' @ [I" baller;T@'@ [I" ball_gag;T@@ [I" balloons;T@@ [I"ballot_box;T@g@ [I"ballou_sms_gateway;T@O@ [I" balls;T@'@ [I" baloo;T@`@ [I"bam;T@n@ [I"bamboo-cli;T@@ [I"bamboo-client;T@6@ [I"bamboo_rails;T@ @ [I" bamfcsv;T@@ [I"bamnet-paperclip;TU;[I" 2.3.1.1;T@ [I" banana;T@@ [I" Banana;T@'@ [I"bananajour;TU;[I" 2.6.9;T@ [I"banana_phone;T@'@ [I"banana_split;T@@ [I"bancomer36;T@'@ [I"bancomer-active_merchant;T@"@ [I" bandcamp;T@@ [I"bandcamp-rb;T@`@ [I"bandicoot;T@@ [I" bandido;T@V@ [I" bandit;T@@ [I"bandsintown;T@@ [I"bandwidth;T@"@ [I" bane;T@@ [I" bang;T@@ [I"bang-bang;T@@ [I"bangers_and_hash;T@E@ [I" bangkok;T@@@ [I" Bangkok;T@@ [I"banisterfiend;T@@ [I"bank_audi;T@@ [I"bank_card;T@`@ [I" banker;T@n@ [I"banker-ofx;T@@ [I"bankgiro_inbetalningar;T@N@ [I"bankholidays;T@@ [I"banking_date_tools;T@@ [I" bankjob;T@@ [I"banklink_lv;T@@ [I"bank_lookup;T@@ [I" bankserv;T@y@ [I"banktools-se;T@@ [I"BankValInt;T@E@ [I"BankValUK;T@E@ [I"banned_words;T@`@ [I"bannermodule;T@+@ [I"banner_module;T@@@ [I"bannister;T@@ [I"banorte_payworks;T@' @ [I"bantic-pastie;T@`@ [I"bantik-user-agent;T@@ [I" banzai;T@@ [I"bao-karakuri;T@@@ [I" baptist;T@u@ [I" baracus;T@[ @ [I" barber;T@6@ [I" barby;T@@ [I"barby-chunky_png;T@@ [I"barclays_bikes;T@'@ [I" barcode;T@!@ [I"barcode1dtools;TU;[I" 1.0.2.0;T@ [I" barcoder;T@@ [I" barcodes;T@@ [I"barcodeservice;T@ @ [I" bard;TU;[I" 0.15.5;T@ [I"bard-rake;T@@ [I"bard_static;T@@ [I"bare_coffee;T@+@ [I"barely_searchable;T@@ [I" baren;T@I@ [I"bare-ruby-aws;T@@ [I" baretest;T@@ [I"baretest-vows;T@@ [I" barfs;T@@ [I" barista;T@@ [I"barista_growl;T@@ [I" barjillo;T@@ [I" barkeep;T@I@ [I"barkeep-client;T@@ [I"barmstrong-daemon-spawn;T@@ [I" barney;TU;[I" 0.16.0;T@ [I" barnie;T@@ [I"barnyard_aws;T@@ [I"barnyard_ccfeeder;T@@ [I"barnyard_dns;T@'@ [I"barnyard_harvester;T@ @ [I"barnyard_logger;T@n@ [I"barnyard_market;T@V@ [I"barometer;T@n@ [I"barracuda;T@@ [I"barricade;T@@@ [I" barrier;T@@ [I"barristan;T@@ [I"barrister;T@`@ [I" barron;T@@@ [I" bars;T@@ [I" bart;T@'@ [I"bartender;T@@ [I" barton;T@@ [I"bartt-ssl_requirement;T@@ [I"bartzon-httparty;T@@ [I"bartzon-osdb;T@@ [I" bartzon-validates_blacklist;T@"@ [I" barx;T@@ [I" base;T@E@ [I"base2_cms;TU;[I" 0.7.25;T@ [I"base2_metrics;T@@ [I" base31;T@'@ [I"base31_encoder;T@@ [I"base31_guid;T@@ [I" base32;T@@ [I"base32-crockford;T@@ [I"base32_pure;T@@ [I" base58;T@@ [I"base58_gmp;T@n@ [I" base62;T@+@ [I"base64_compatible;T@'@ [I"base64url;T@@ [I" base_app;T@W@ [I"base_auth;T@I@ [I"baseball_scorecard;T@"@ [I" basecamp;T@@ [I"basecamper;T@@ [I"basecampnext;T@@ [I"basecamp_wrapper;T@@ [I"basecampx;T@"@ [I" basechip;T@"@ [I"base_convert;T@'@ [I"base_css-rails;T@@ [I"basecustom;T@+@ [I"base-generators;T@I@ [I" baseirc;T@@ [I" baseline;T@@ [I" basement;T@'@ [I" basepath;T@@ [I"base_rails_app;T@'@ [I" bashcov;T@"@ [I" bashir;T@'@ [I"bashparser;T@@ [I"bash-visual;T@@ [I" bashy;T@@@ [I" Bashy;T@@ [I"basic_active_model;T@@ [I"basic_assumption;T@@ [I"basic_auth_credentials;T@@ [I"basic_config;T@@ [I"basic_daemon;T@@ [I"basic_decorator;T@@ [I"basic_model;T@@ [I"basic_named_scopes;T@@ [I"basic_object;T@'@ [I" basics;T@@ [I" basicssl;T@@ [I"basic_ssl;T@@ [I"basic_support;T@'@ [I"basic_tree;T@@ [I"basic_youtube;T@@ [I" basil;T@6@ [I" Basil;T@@ [I" basilico;T@'@ [I" basilisk;T@[@ [I" basis;T@@ [I"basis-processing;T@@ [I"basiszwo-reflection;T@@ [I"basketcase;T@@ [I" basset;T@@ [I"bassnode-discogs;T@@ [I"bassnode-ruby-echonest;T@6@ [I" bastard;T@"@ [I" bastet;T@@@ [I" basuco;T@V@ [I"bat;T@@ [I" batcave;T@@ [I" batch;T@@ [I"batch_api;T@@ [I"batchbase;T@@ [I"batchbook;T@W@ [I"batchelor;T@@ [I" batcher;T@'@ [I"batch_factory;T@E@ [I"batch_insert;T@[ @ [I" batchr;T@@ [I"batch-rails;T@@ [I"batch_translations;T@6@ [I" batchy;T@[@ [I" bath;T@@ [I" bathtub;T@@ [I"bathyscaphe;T@|@ [I"batik-rasterizer;T@@ [I"batik-rasterizer-windows;T@@ [I"batik-rasterizer-windows7;T@`@ [I" batlog;T@' @ [I"batman-rails;T@@ [I" baton;T@1@ [I" bats;T@@@ [I" batsd;T@@ [I"batsd-dash;T@@ [I"batsignal;T@[ @ [I" batsir;T@@ [I" battery;T@@ [I"battery-staple;T@'@ [I"battlecry;T@!@ [I"battlenet;T@@ [I"battlenet_info;T@@@ [I"battleship_tournament;T@s@ [I"battlestation;T@@ [I" Bauble;T@@ [I" baya;T@@@ [I"bayesball;T@`@ [I"bayescraft;T@@ [I"bayes_motel;T@@ [I"bayes_on_redis;T@I@ [I"bayes_on_redis_internal;T@'@ [I" Bayeux;T@@ [I"bayeux-rack;T@@ [I" bayon;T@+@ [@!!@+@[I"bayuploader;T@@ [I"bazaar_sources;T@[@ [I" baze;T@"@ [I" bazza;T@'@ [I"bb;TU;[I"0;T@ [I"bbc;T@E@ [I"bbc-capybara;T@x@ [I"bbc-capybara-mechanize;T@@ [I"&bbc-capybara-mechanize-with-proxy;T@@ [I"bbc_data_service;TU;[I" 1.9.4;T@ [I" bbcloud;T@@ [I"bbc_mobile_standards;T@E@ [I" bbcode;T@@ [I"bbcodeizer;T@@ [I"bbcodelib;T@@ [I" bbcoder;T@@ [I"bbcoder-l;T@|@ [I"bbc-programmes;T@`@ [I"bbc-selenium-webdriver;TU;[I" 1.17.0;T@ [I"bbc_standards;T@+@ [I""bbenezech-acts-as-taggable-on;T@"@ [I"bbenezech-nested_form;T@@ [I"BBenezech-papermill;T@u @ [I" bberg;T@@ [I" bbgcli;T@"@ [I" bbgun;T@@ [I" bbmb;T@O@ [I"bborn-acts-as-taggable-on;T@ @ [I"'bborn-acts_as_taggable_on_steroids;TU;[I"2.1;T@ [I"bborn-desert;T@J@ [I"bborn-simplepay;T@@ [I" bbpush;T@@ [I"bbq;T@@ [I"bbq-widget;T@E@ [I"BBRedCloth;TU;[I" 0.8.7;T@ [I" bbrowning-deltacloud-client;TU;[I" 0.0.9.7;T@ [@y!@z!@[I"bbrowning-deltacloud-core;T@@ [@!U;[I" 0.0.6.1;T@[I"bbrowning-ponder;T@@ [I" bb-ruby;T@ @ [I" bbs2ch;T@@ [I" bbsexp;T@@ [I"bb_tag_closer;T@@ [I"bbvcommon;TU;[I"6.268.0.20100803;T@ [I"bc;T@I@ [I"bc3;T@@ [I"bcalloway-slicehost;TU;[I" 0.7.5;T@ [I"bcalloway-wysihat-engine;TU;[I" 0.1.11;T@ [I" bcat;T@@ [I" bcbiff;T@@ [I"bc-cap-recipes;T@@ [I"bcdatabase;T@u@ [I"bc-htmlful;T@@ [I"bcl;T@|@ [I" bcm2835;T@'@ [I"bc-middleware;T@@ [I"bcms_ancestry;T@@ [I"bcms_awss3;T@@ [I"bcms_aws_s3;T@@ [I"bcms_bitly;T@@ [I"bcms_blog;T@ @ [I"bcms_bmedia_feeds;T@@ [I" bcms_cas;T@@ [I"bcms_contact_us;T@@ [I"bcms_contact_us_module;T@T @ [I"bcms_content_rotator;T@@ [I"bcms_content_syncing;T@@ [I"bcms_event;T@N@ [I"bcms_event_registration;T@@ [I"bcms_event-with_location;T@@ [I"bcms_fckeditor;T@N@ [I"bcms_feedback_form;T@@ [I"bcms_feeds;T@@ [I"bcms_google_mini_search;T@@ [I"bcms_intensedebate;T@@ [I"bcms_kcfinder;T@@ [I"bcms_mobile;T@@ [I"bcms_news;T@@ [I"bcms_page_comments;T@O@ [I"bcms_person;T@@ [I"bcms_polling;T@@ [I"bcms_pubcookie;T@@ [I"bcms_rankings;T@O@ [I" bcms_s3;T@@ [I"bcms_seo_sitemap;T@N@ [I"bcms_settings;T@@ [I"bcms_sitemap;T@ @ [I"bcms_slideshow;T@@ [I"bcms_support;T@"@ [I"bcms_thumbnail;T@W@ [I"bcms_tools;T@@ [I"bcms_twitter_module;T@;@ [I"bcms_webdav;T@O@ [I" bcodec;T@@ [I" bconv;T@'I" linux;T[@!@@ [I" bcp47;T@@ [I" bcpm;TU;[I" 0.11;T@ [I"bc-rspec-matchers;T@@ [I"bcrypt-ruby;T@ @[@ "@ @[@ "@ @ [@ "@ @ [I"bcrypt-ruby-maglev-;T@ @ [I"bc-to_xls;T@@ [I"bdb;TU;[I" 0.2.6.5;T@ [I" bdb1;T@[@ [I"bdd_elements;T@`@ [I" bddgen;T@@ [I"bdd-legacy;T@@ [I" bd_money;T@@ [I" bdoc;T@@ [I"bdz;T@E@ [I"be;T@@ [I"be9-awesome_nested_set;T@@ [I"be9-context;T@u @ [I"be9-dataset;T@ @ [I"be9-rubbr;TU;[I" 1.1.5.1;T@ [I"be9-viewtastic;T@@ [I" beacon;T@- @ [I"beaconpush;T@@ [I" beagle;T@@@ [I" bean;T@E@ [I" beanbag;T@`@ [I"beaneater;T@I@ [I"bean-kramdown;TU;[I" 0.13.5;T@ [I"bean_machine;T@'@ [I"beanpicker;T@@ [I"beanqueue;T@@@ [I"beans-middleman;T@@ [I"beans_rails;T@`@ [I"beans-rakismet;T@@ [I"beanstalk-admin;T@'@ [I"beanstalkapp;T@l@ [I"beanstalkappjeroenb;T@.@ [I"beanstalk-client;T@@ [I"beanstalk-client-rspec;T@@ [I"beanstalkd_view;T@@ [I"beanstalker;TU;[I" 0.5.12;T@ [I"beanstalk_farmer;T@@ [I"beanstreamy;T@I@ [I"beanworker;T@@ [I" bear;T@"@ [I" beard;T@'@ [I"bearded-octo-hipster;T@x@ [I" beatport;T@@ [I" beatrobo;T@E@ [I" beats;TU;[I" 1.2.4;T@ [I"beats-adapter-discogs;T@@ [I"beats-client;T@@ [I"beats-rack;T@@ [I"beautiful-css;TU;[I" 0.1.01;T@ [I"beautiful_scaffold;T@[@ [I"beautifulsoup;T@@ [I"beautiful_url;T@ @ [I" beaver;T@@ [I" bebop;T@6@ [I" because;T@'@ [I" become;T@'@ [I"be-data-api;T@'@ [I" bedrock;T@"@ [I" beds;T@@ [I"bee;TU;[I" 0.11.4;T@ [I" beef;TU;[I"0.4.2.10.2;T@ [I"beef-active_form;T@N@ [I"beef-admin_area;T@@ [I"beef-articles;T@J@ [I" beefcake;T@@ [I"beefcake-spanx;T@5 @ [I" beefdump;T@'@ [I"beef-has_assets;TU;[I" 0.7.12;T@ [I"beef-layout;T@,@ [I"beef-pages;TU;[I" 0.3.26;T@ [I"beef-slides;T@@ [I"beef-text_elements;T@@ [I" beehive;T@6@ [I" bee_java;T@@ [I"beeminder;T@[@ [I"beenverified;T@@ [I" beep;T@'@ [I" beeper;T@E@ [I"bee_python;T@@@ [I" beer;T@'@ [I" beerdb;T@'@ [I"beer_in_the_evening;T@@ [I"beer_mapping;T@'@ [I" beerxml;T@@ [I" beet;TU;[I" 0.6.9;T@ [I" beeta;T@@ [I" beetle;TU;[I" 0.2.13;T@ [I" beetle_joevandyk_extensions;T@@ [I" beezwax;T@@ [I" befog;T@J@ [I"before_render;T@@ [I"before_test;T@@ [I"beg;T@@ [I" beget;T@@@ [I" beggar;T@@ [I"beginning_of_fortnight;T@@ [I" behance;T@@ [I" behave;T@@ [I" behavior;T@@ [I"behaviors;TU;[I" 1.99.99;T@ [I"behaviortree;T@@ [I" beholder;T@@ [I"beid_parser;T@@ [I" beintoo;T@E@ [I" bell;T@@ [I" bellhop;T@@ [I" bellite;T@V@ [I"bellmyer-hydra;TU;[I" 0.20.12;T@ [I" bellows;T@N@ [I" bells;T@"@ [I" belly;T@@ [I"belongs_to_city;T@@ [I"belongs_to_enum;T@@ [I"belongs_to_versioned;T@I@ [I"belorussian;T@@ [I"belphanior-2412n-servant;T@E@ [I"(belphanior-calendar-watcher-servant;T@'@ [I"belphanior-servant;T@@ [I"belphanior-speech-servant;T@E@ [I"belphanior-time-servant;T@'@ [I" beluga;T@'@ [I"bemurphy-cinch-last_seen;T@@ [I"bemurphy-google_plus;T@E@ [I"ben;T@'@ [I"benaldred-clearance;T@@ [I"benburkert-gpgme;T@|@ [I" bench;T@@ [I"benchmarkable;T@@ [I"benchmarker;T@@ [I"benchmark_ext;T@@ [I"benchmark_for_rails;T@@ [I"benchmark_harness;T@6@ [I"benchmark-ips;T@N@ [I"benchmark_sort;T@'@ [I"benchmark_suite;T@@ [I"benchmark-timed_each;T@@ [I"benchmark_unit;T@@ [I"benchmarkx;TU;[I"001;T@ [I"benchmeth;T@@ [I"bench_press;T@@ [I" benchrb;T@@ [I"benchtool;T@@@ [I"benchwarmer;T@"@ [I" benchy;T@@ [I" bencode;T@X@ [I"bencode_blatyo;T@@ [I"bencode_ext;T@@ [I"bencoding;T@'@ [I" bencodr;T@@ [I" bencview;T@E@ [I" benelux;T@@ [I" benetton;T@@ [I" benford;T@'@ [I"benhamill-gherkin;TU;[I" 2.3.5;T@ [I"benhoskings-ambition;TU;[I" 0.5.4.4;T@ [I"'benhoskings-ambitious-activerecord;TU;[I" 0.1.3.8;T@ [I"benhutton-active_shipping;T@@ [I"$benhutton-cloudfront_asset_host;T@@ [I"benhutton-facebooker;TU;[I" 1.0.69.2;T@ [I"!benhutton-libmemcached_store;T@@ [I""benjaminjackson-sinatra-cache;T@@ [I"benji_node;T@E@ [I"benlangfeld-lighthouse-api;T@@ [I"benmanns-atreides;T@z@ [I"benny_cache;T@'@ [I"benofsky-bolt;T@@ [I"benofsky-yajl-ruby;T@@ [I"benotified;T@'@ [I"ben_string;T@N@ [I" bently;T@@ [I" bento;T@@ [I"bento_search;T@- @ [I" benzo;T@O@ [I" bercow;T@@ [I"berkeley-db-java-jars;TU;[I" 5.0.58.1;T@[I"berkshelf;T@x@ [I"berks_to_rightscale;T@@ [I" berlin;T@@ [I"berlin-ai;T@@ [I"berlusconi;T@'@ [I" bermuda;T@"@ [I"bernoulli;T@R @ [I"bernsno-shopify;T@@ [I" berry;T@`@ [I" bert;T@x@[@#@@ [I"bertclient;T@@ [I"bertclient_new;T@@ [I" bertha;T@@ [I" bertrem;T@@ [I" bertrpc;T@ @ [I" berty;T@@ [I" beso;T@@ [I" best;T@E@ [I" best3;T@@ [I" best_boy;T@@ [I"bestbuy-aws;T@'@ [I" bestgem;T@'@ [I" bestgo;T@@ [I"best_image;T@@ [I"best_in_place;T@@ [I"best_in_placeish;T@[@ [I"best_in_place_mongoid;T@@ [I" beta;T@@ [I"betabrite;T@W@ [I"betabuilder;TU;[I" 0.7.4.1;T@ [I"betapond-gattica;T@@ [I"beta_tools;T@@ [I"betauseraccess;T@`@ [I"betavites;T@`@ [I"betelgeuse-googlecharts;T@@ [I" betfair;T@ @ [I" betlinks;T@3@ [I"be_truthy;T@"@ [I" bets;T@@ [I"betsmart-grid;T@E@ [I" better;T@@ [I"better_ar;T@@ [I"better_bart;TU;[I" 0.0.32;T@ [I"better-benchmark;T@&@ [I"better_caller;T@'@ [I"better_counters;T@@ [I"better_date_to_s;T@'@ [@ $@EI"x86_64-darwin-11;T[I"better_delegation;T@@ [I"better_error_message;T@@ [I"better_errors;T@@ [I"better_exception_app;T@"@ [I"better_form;T@@ [I"better_jira;T@E@ [I"better-logger;T@"@ [I"better_logging;T@@ [I"better-logging;T@E@ [I"betterlorem;T@@@ [I"better_matchers;T@@ [I"better_migrations;T@@ [I"better_nested_set;T@`@ [I"#better_newrelic_sql_obfuscator;T@@ [I"better_opener;T@@ [I"better_open_struct;T@'@ [I"better_partials;T@@ [I"better_plist;T@@ [I"better_prime;T@'@ [I"better_receive;T@@ [I"better-riak-client;T@ @ [I"better-ripple;T@@ [I"better_robots;T@'@ [I"betterroutes;T@@ [I"better_select;T@@ [I"better_states_select;T@@ [I"bettertabs;T@@ [I"bettertemplate;T@@ [I"be_valid_asset;T@@ [I" beway;T@@ [I" bewildr;TU;[I" 0.1.14;T@ [I"bezebe-cvs;T@'@ [I" bezel;T@@ [I"bf3;T@'@ [I" bf3stats;T@E@ [I"bf4-bcms_news;T@@ [I"bf4-browsercms;T@@ [I"bf4-metrical;T@`@ [I"bf4-metric_fu;TU;[I" 2.1.3.4;T@ [I"BFD;T@@ [I"bfec_generator;T@E@ [I"bfg-redis-lock;T@'@ [I" bfire;T@@ [I" bfrb;T@|@ [I" bfts;T@@ [I" bfunj;T@@ [I" bgp4r;T@@ [I"bhf;TU;[I" 0.4.25;T@ [I"bhm-admin;T@@ [I"bhm-google-maps;T@@ [I"bhousel-ruby-poker;T@x@ [I" bibkeys;T@'@ [I" bible;T@@ [I"bible_gateway;T@E@ [I"bible_reference_parser;T@+@ [I"bible_robot;T@@ [I"bibtex_parser;T@@ [I"bibtex-ruby;T@ @ [I"bibtowiki;T@'@ [I"bic;T@E@ [I" biceps;T@@ [I" bicho;T@@ [I" bickle;T@'@ [I" bicrypt;T@N@ [I" bicycle;T@`@ [I"bierdopje;T@'@ [I" biffbot;T@E@ [I" bifrost;T@@ [I" bigamy;T@I@ [I"big_apple;T@@ [I"bigbackup;T@@ [I"bigbananajour;T@6@ [I" big_band;T@@ [I" bigbang;T@n@ [I" bigbench;T@@ [I"bigbluebutton;T@@ [I"bigbluebutton-api-ruby;T@@ [I"bigbluebutton_rails;T@N@ [I" bigbro;T@e@ [I"bigbrother;T@@ [I"big_brother;TU;[I" 0.6.6;T@ [I"big_bucks_no_whammies;T@@ [I"big_cache;T@@ [I"bigcartel;T@@ [I" bigcat;T@@ [I" BigCat;T@@ [I"bigcharger;T@@ [I"bigcommerce;T@@ [I"bigcomplex;T@@ [I"bigdecimal;T@@ [I"bigdecimal_places;T@`@ [I"big_decimal_price;T@@@ [I"bigdecimal-segfault-fix;T@@ [I" big_door;T@@ [I" big-door;T@`@ [I"big-door-fork;T@'@ [I" bigfoot;T@'@ [I" biggs;T@@ [I" bigindex;T@`@ [I"bigindex-solr;T@@ [I"big_machine;T@@ [I" big_ml;T@@@ [I"big_money;T@@ [I" big-o;T@`@ [I"big-phoney;T@+@ [I"bigpipe-rails;T@`@ [I" bigquery;T@ @ [I"bigrecord;T@`@ [I"bigrecord-driver;T@n@ [I"big_sitemap;T@@ [I"big_spoon;T@@ [I"bigtinker;T@@ [I" bigwig;T@@ [I"bijection;T@@ [I" bijou;T@@ [I" biju;T@E@ [I" bike;T@@ [I"bikepoa-tools;T@@ [I"billboard;T@@ [I"billboard-rb;T@@ [I" billd;T@@ [I"billfloat_api_client;TU;[I" 0.1.31;T@ [I" billfold;T@@ [I"billingbadger_api;T@'@ [I"billingly;T@N$@ [I"billingsystem-remote;T@@ [I" billingsystem-remote-client;T@@ [I"billomat-rb;T@E@ [I" bills;T@@ [I"billwise4r;T@@ [I" billy;T@'@ [I"billymeltdown-choctop;TU;[I" 0.11.0.8;T@ [I"billysbilling-rails;T@x@ [I"billy_the_tool;T@@ [I"bimyou_segmenter;T@N@ [I"bin;T@@ [I" bin2hex;T@E@ [I"binary_finery;T@E@ [I" binaryio;T@@ [I"binaryparse;T@x@ [I"binary_plist;T@@ [I"binary_puzzle_solver;T@'@ [I"binarysearch;T@E@ [I"binary_search;T@@ [I"binary_search_tree;T@@ [I" bincache;T@+@ [I" bind;T@^@ [I" bind9mgr;TU;[I" 0.3.12;T@ [I"bindable_block;T@`@ [I" bindata;TU;[I" 1.4.5;T@ [I" binder;T@@ [I" bindery;T@@ [I" bindi;T@n@ [I"binding_of_caller;T@yI"universal-rubinius;T[@[%U;[I" 0.6.8;T@ [I" bind-it;T@@ [@b%@@[I"bind_log_analyzer;T@@ [I"bind-zone-parser;T@@ [I" binflip;T@@ [I" binfuse;T@'@ [I" bing;T@@ [I"bing_ads_api;T@@ [I" binged;T@@ [I"bing-helper;T@`@ [I"bing_images;T@E@ [I"bingodisk;T@E@ [I" bingoint;T@@ [I"bing_translate_yaml;T@@ [I"bing_translator;T@@ [I" bini;T@@ [I" binman;T@@ [I" binomial;T@@@ [I" binpack;T@"@ [I" binpress;T@@ [I"bin_script;T@@ [I"bin_search;T@@ [I"binstruct;T@@ [I"bin_utils;T@@ [I"bio;T@@ [I" bio-affy;T@@ [I"bio-alignment;T@n@ [I"bio-aliphatic_index;T@'@ [I"bio-assembly;T@@ [I" bio-bgzf;T@@ [I"bio-bigbio;T@+@ [I"bio-biolinux;T@@ [I"bio-blastxmlparser;T@@ [I" bio-bwa;T@I@ [I"bio-cd-hit-report;T@@ [I"bio-chembl;T@6@ [I"bio-cnls_screenscraper;T@@ [I" bio-core;T@'@ [I"bio-core-ext;T@'@ [I" bio-data-restriction_enzyme;TU;[I" 1.109.0;T@ [I"bio-dbla-classifier;T@@ [I"bio-dbsnp;T@`@ [I"biodiversity;T@G @ [I"biodiversity19;T@;@ [I".bio-emboss_six_frame_nucleotide_sequences;T@@ [I"bio-ensembl;T@@ [I"bio-exportpred;T@'@ [I"bio-faster;T@@ [I" bio-foo;T@@ [I"bio-gadget;T@I@ [I" bio-gag;T@@ [I" bio-gem;T@@ [I"bio-genomic-interval;T@@@ [I" bio-gff3;T@e@ [I"bio-gff3-pltools;T@@ [I" bio-gngm;T@@ [I"bio-graphics;T@@ [I" bio-grid;T@@ [I"bio-hello;T@@ [I"bio-hmmer3_report;T@'@ [I"bio-hmmer_model;T@E@ [I"bio-hydropathy;T@'@ [I"bio-incanter;T@@ [I"bioinform;T@g@ [I"biointerchange;T@6@ [I"bio-ipcress;T@'@ [I"bio-isoelectric_point;T@6@ [I"bio-kb-illumina;T@@ [I"bio-kmer_counter;T@@ [I"bio-krona;T@'@ [I"bio-lazyblastxml;T@x@ [I"bio-logger;T@@ [I" bio-maf;T@@[@%@@ [I" biomart;T@@ [I"biomodel_client;T@@ [I"bio-nexml;T@@ [I" bio-ngs;T@@ [I"bio-octopus;T@`@ [I"bio-phyloxml;T@- @ [I"bio-phyta;T@@ [I"bio-pileup_iterator;T@"@ [I"bio-plasmoap;T@E@ [I"bio-protparam;T@@ [I" bio-rdf;T@E@ [I"bio-restriction_enzyme;T@@ [I" bioroebe;T@E@ [I" bios;T@'@ [I"bio-sambamba;T@@ [I"bio-samtools;T@@ [I" bio-sge;T@@ [I"bio-signalp;T@@ [I"bio-svgenes;T@@ [I"bio-synreport;T@@ [I"bio-tabix;T@6@ [I"bio-table;T@@ [I"bio-tm_hmm;T@I@ [I"bio-ucsc-api;T@@ [I"bio-ucsc-util;T@@@ [I"bio-wolf_psort_wrapper;T@@ [I" bipolar;T@@ [I" birb;T@@ [I" birch;T@n@ [@/&@n@[I" birdbath;T@q@ [I" birddog;T@@@ [I"birdgrinder;T@|@ [I" birdy;T@@ [I" birling;T@@@ [I" birthday;T@@ [I" bisac;T@e@ [I" biscuit;T@@ [I"biscuit-monitor;T@"@ [I" bise;T@'@ [I" bisectly;T@@ [I" bishl;T@@ [I" bishop;T@@ [I" bisque;T@`@ [I" bisques;T@@ [I" bistip;T@"@ [I"bistro_car;T@I@ [I" bitarray;T@'@ [I" bitbank;T@@@ [I"bitbucket;T@'@ [I"bit_bucket_api;T@'@ [I"bitbucket_api;T@'@ [I"bitbucket-backup;T@I@ [I"bitbucket_rest_api;T@`@ [I" bitcache;T@'@ [I" bitcask;T@I@ [I"bitclient;T@@@ [I"bitclust-core;T@Y@ [I"bitclust-dev;T@Y@ [I" bitcoin;T@@@ [I"bitcoin-3rd-party-apis;T@@ [I"bitcoin-client;T@'@ [I" bitcoind;T@'@ [I"bitcoiner;T@'@ [I"bitcoinica;T@@ [I"bitcoin-otc;T@@ [I"bitcoin-ruby;T@'@ [I" bite;T@'@ [I"bitescript;T@@ [I" bitfield;T@@ [I"bitfields;T@@ [I"bitfluent-activemerchant;TU;[I" 1.15.1;T@ [I"bitfluent-database_cleaner;T@@ [I"bitfluent-vestal_versions;T@@ [I"bitgain-mockdata;T@@ [I"bitgirder-platform;T@. @ [I" bit_hash;T@`@ [I" bitindex;T@@ [I"bitlove-resque_mailer;T@z@ [I"bitlove-rollout_ui;T@@ [I"bitlove-ruby_bosh;T@@ [I"bitlove-tlsmail;T@E@ [I" bitly;T@@ [I" bitly4r;T@@ [I"bitly-api;T@`@ [I"bitly-oauth;T@@ [I" bitlyr;T@@ [I"bitlys_r_us;T@@ [I" bitmap;TU;[I" 0.0.4.2;T@ [I"bitmap-counter;T@@ [I"bitmapper;T@6@ [I" bitmask;T@@ [I" bit_mask;T@@ [I"bitmask-attribute;T@@ [I"bitmask_attributes;T@x@ [I"bitmasker;T@@ [I" bitpack;T@@ [I"bit-packer;T@@@ [I" bitpay;T@'@ [I"bitrix_on_rails;T@@ [I" bitroles;T@I@ [I" bits;T@`@[I" bitsa;TU;[I" 0.20;T@ [I" bitset;T@@ [I"bitsontherun;T@@@ [I"bitstream;T@`@ [I"bitstring;T@@ [I"bit-struct;TU;[I" 0.13.6;T@ [I"BitStructEx;T@@ [I"bitswitch;T@W@ [I"bittorious;T@'@ [I" bitty;T@`@ [I" bitwise;T@@ [I" bivouac;T@x@ [I" bivy;T@@ [I"bix;T@@ [I" bixbite;T@6@ [I"bixby_common;T@@ [I" bizhours;T@@ [I"bizhub-tool;T@@ [I" Bizo;T@@ [I" bizratr;T@`@ [I"bj;T@@ [I"bjeanes-capybara;T@@ [I"bjeanes-geokit;T@@ [I"bjeanes-holidays;T@@ [I"bjeanes-livedate;T@@ [I"bjeanes-ultraviolet;T@@ [I"bjf;T@X@ [I"bj_fixed_for_rails3;T@@ [I"bjj;T@@ [I"$bjornblomqvist-breadcrumb_trail;T@@ [I"bk;T@@ [I"bkp;T@'@ [I" bktree;T@'@ [I"bkwld-paper_trail;T@ @ [I"blackbook;T@@ [I" blackdog;T@E@ [I"blackfoundry-pcap;T@@ [I"blackhole-store;T@@ [I"blackjack;T@'@ [I"blacklight;TU;[I" 4.0.1;T@ [I"blacklight_advanced_search;T@O@ [I"blacklight_browse_nearby;T@'@ [I"blacklight_cql;T@N@ [I"blacklight_facet_extras;T@E@ [I"blacklight-hierarchy;T@@ [I"blacklight_highlight;T@@ [I"blacklight_more_like_this;T@"@ [I"blacklight_oai_provider;T@@ [I"blacklight_oembed;T@@ [I"blacklight_range_limit;T@O@ [I"blacklight-sitemap;T@@ [I"blacklight_unapi;T@@ [I"&blacklight_user_generated_content;T@V@ [I"blacklist;T@@ [I"blacklist_validator;T@"@ [I"blackmagicvoodoo;T@@@ [I"blackrat_yaml_config;T@@ [I"black-screen;T@'@ [I"blacksmith;T@@ [I"blacksmith-js;T@E@ [I"&blackwinter-autotest-notification;T@ @ [I"blackwinter-fastthread;T@ @ [I"blackwinter-git;TU;[I" 1.2.7;T@ [I"blackwinter-gnuplot;TU;[I" 2.3.5.1;T@ [I"blackwinter-ipaddress;TU;[I" 0.8.0.1;T@ [I"blackwinter-jekyll;T@@ [I"blackwinter-libxslt-ruby;T@@ [I"blackwinter-pru;T@+@ [I"blackwinter-wirble;TU;[I" 0.1.3.3;T@ [I" blahbber;T@'@ [I"blahblahblah;T@'@ [I"blakechambers-dry_scaffold;T@@ [I"blakstar_like;T@@ [I"blam_and_woot;T@@ [I" blame;T@@ [I"blamestamp;T@e@ [I" blaml;T@@ [I" blammo;T@@ [I"blankblank;T@@ [I" blanket;T@@ [I"blankplate-rails;T@u@ [I"blankslate;T@@ [I"blasphemy;T@@ [I"blastbeat;T@E@ [I"blast_furnace;T@@ [I"blast_mavens_multiplayer;T@+@ [I" blastr;T@@ [I"blastramp;T@3@ [I" blather;T@@ [I"blavoshost;T@[@ [I"blavosync;T@@ [I"blawzoo-plutus;T@J@ [I"blaxter-delayed_job;TU;[I" 2.1.9;T@ [I"blaxter-duration;T@+@ [I" blaze;T@'@ [I" blazing;T@V@ [I"blazing-foreman;T@@ [I"blazing-jammit;T@@ [I"blazing-passenger;T@,@ [I"blazing-rails;T@+@ [I"blazing-whenever;T@@ [I" blazy;T@6@ [I" b-lazy;T@6@ [I" bldr;T@@ [I"bleacher_api;T@@@ [I"bleak_house;TU;[I"7.2;T@ [I"bleeding_edge;T@@ [I" bleetz;T@@ [I" blekko;T@@ [I"blekko-search;T@"@ [I" blender;TU;[I" 0.24;T@ [I" blendris;T@@ [I" blerg;T@@ [I" blertr;T@@ [I" blessing;T@@ [I" blesta;T@'@ [I" blight;T@'@ [I" blimpy;T@$@ [I"blimpy-cucumber;T@@ [I"blind_date;T@@ [I"blindfold;T@"@ [I" bling;T@@@ [I" blingee;T@'@ [I" blink1;T@@ [I"blink1-formatter;T@"@ [I" blinkee;T@x@ [I"blinkenlights;T@@ [I"blinksale;T@@ [I"blinkshot;T@'@ [I" blinky;T@@ [I"blinky_billd;T@@ [I"blinky_monitor;T@@@ [I" blip;T@@ [I" blipfm;T@@ [I" bliptv;T@`@ [I" blirb;T@@ [I" bliss;T@@ [I" b-list;T@@ [I" blister;T@@ [I" blitline;T@@ [I" blitz;TU;[I" 0.1.29;T@ [I"blitz_smtp;T@'@ [I"blizzard-community-api;T@@ [I"blm;T@@ [I"bloat_check;T@@ [I" bloatpng;T@@ [I" blobject;T@@ [I"blobstore_client;T@@ [I" bloc;T@@@ [I" block64;T@+@ [I"blockcache;T@[ @ [I"block_cache;T@@ [I"block-chainable;T@`@ [I"blockenspiel;T@@[@(@@ [I"block_explorer;T@@ [I"block_hash;T@'@ [I"block_helpers;T@@ [I"block-html;T@"@ [I" block_js;T@E@ [I"blocklist;T@+@ [I"blockpile;T@@ [I" blocks;T@@ [I"block-tea;T@@ [I"blodsband;T@E@ [I" blog;T@'@ [I"blog_basic;T@N$@ [I"blog_converter;T@@@ [I" blogeen;T@'@ [I" blogfun;T@'@ [I" blogger;T@@ [I" bloggit;T@ @ [I" bloggy;T@`@ [I"bloggybak;T@@@ [I"blog_helper;T@@ [I" blogical;T@E@ [I" blogit;T@@ [I"Bloglines4R;T@@ [I"blog_logic;TU;[I" 1.4.15;T@ [I"blogmarks;T@@ [I"blogmodule;T@@ [I"blog-pinging-service;T@@@ [I" blogrpc;T@@ [I" blogsoso;T@'@ [I" blombo;T@R @ [I"bloodchalice;T@@ [I"bloodhound;T@@ [I"bloodymines;T@@ [I"bloomberg_quote;T@E@ [I"bloombroom;T@@ [I" bloomer;T@@ [I"bloomfilter;T@`@ [I"bloom_filter;T@$@ [I"bloom-filter;T@@ [I"bloomfilter-rb;T@ @ [I" bloomrb;T@@ [I" blooper;T@@ [I"bloopsaphone;T@R @ [I" blossom;T@I@ [I"bloveless_grackle;T@ @ [I" blown;T@'@ [I" blox;T@@ [I"blti_omniauth;T@@@ [I" bludgeon;T@E@ [I"BlueAdmiral;T@@ [I"blue_button_parser;T@@ [I" bluecap;T@'@ [I"bluecloth;T@@ [@(@@[@(@ @ [I"BlueCloth;T@@ [I" bluecoat;T@"@ [I"blue_colr;T@1@ [I"blue_conductor;T@'@ [I" blue_csv;T@'@ [I"bluefeather;TU;[I" 0.40;T@ [I"bluegreen;T@'@ [I"blue_light_special;T@@ [I"#blue_light_special_heroku_fork;TU;[I" 0.2.0.1;T@ [I"blueline_services;T@1@ [I"blue_pages;T@@ [I" bluepay;T@@ [I" bluepill;TU;[I" 0.0.60;T@ [I"bluepill-nagios;T@E@ [I"blueprintr;T@@ [I"blueprint-rails;T@@ [I"blueprints;T@@ [I"blue_shell;T@@ [I"blue_shoes;T@'I"x86_64-darwin-10;T[@(@E@ [I"blue_sparks;T@+@ [I"blue_tree;T@'@ [I"blue_velvet;TU;[I" 1.0.3.1;T@ [I" bluevia;T@@ [I"bluevia_engine;T@`@ [I" bluff;T@@ [I" blunder;T@'@ [I"blundersaur;T@E@ [I" bluplate;T@`@ [I" blur;T@@ [I" bluth;T@@ [I" Blux;T@@ [I"blz;T@@@ [I"bmabey-vagrant;T@@ [I"bmaland-aegis;T@@ [I" bmaland-has_many_polymorphs;T@@ [I"bme;T@`@ [I"bmedia-casserver;T@;@ [I"bmf-dialog;T@'@ [I"bmi;T@@ [I"bmizerany-sinatra-mongo;T@@ [I"bmmlexporter;T@'@ [I"#bmpercy-exception_notification;T@@ [I" bn4r;T@- @ [I" b_named;T@E@ [I"bnb_exchange_rate;T@'@ [I"bnet_scraper;T@@ [I"bnicovideo;T@`@ [I"bnr_generator;T@@ [I"board-client;TU;[I" 0.99.1;T@ [I"boardgame;T@@ [I"board_game_geek;T@'@ [I"board-linuxfr;T@@ [I" boat;T@,@ [I" boatman;T@6@ [I"bob;T@@ [I" bobbit;T@@ [I" bobble;T@V@ [I" bobby;T@"@ [I" bobette;T@@ [I" bobik;T@@ [I"bobmcwtest;T@@ [I" bobtest;T@'@ [I" bob_test;T@@ [I" bob-test;T@E@ [I"bobthebot;T@'@ [I"bob_the_builder;T@ @ [I"bob-the-builder;T@`@ [I"boc;T@@[@$)@@[@$)@@ [I"boca-golf;T@@ [I"boconnect_theme;T@@ [I" bocuse;T@I@ [I" bodega;T@@ [I" bodhi;T@`@ [I"BodyBuilder;T@@ [I"bodyparts;T@N@ [I"boe_parser;T@'@ [I" boffin;T@@ [I"bofh-excuse;TU;[I" 9001;T@ [I" boggle;T@E@ [I"boggle_solver;T@@ [I" bogie;T@@ [I" bogus;T@E@ [I" boil;T@n@ [I"boilerpipe;T@"@ [I"boilerplate;T@'@ [I"boilerplate_engine;T@'@ [I"boilerplate_generator;T@E@ [I"boilerplater;T@!@ [I" boleto;T@@ [I"bolide_client;T@"@ [I" bolt;TU;[I" 0.2.15;T@ [I" boltons;T@E@ [I"bomb_defuser;T@"@ [I"bombshell;T@1@ [I" bond;T@@ [@b)@@[I" bondage;T@@@ [I"bond-yard;T@@ [I" bone;T@@ [I" boned;T@@ [I" boneidle;T@'@ [I" boner;T@6@ [I" bones;TU;[I" 3.8.0;T@ [I"bones-compiler;T@@ [I"bones-extras;T@@ [I"bones-git;T@@ [I"bones-rcov;T@@ [I"bones-rspec;T@@ [I"bones-rubyforge;T@@ [I"bones-yard;T@@ [I"bones-zentest;T@@ [I"bone_tree;T@@ [I" bonfire;T@`@ [I" bong;T@'@ [I" bongabdo;T@@ [I"bonjourgem_results;T@'@ [I" bonk;T@'@ [I" bonobo;T@E@ [I" bonsai;TU;[I" 1.4.7;T@ [I"boo;T@E@ [I" boogaloo;T@@ [I" book;T@@ [I"book_finder_api;T@@ [I" bookie;T@@ [I"bookingstudio-ruby;T@@ [I"bookingsync;T@@ [I"bookis-paperclip;TU;[I" 2.3.3.1;T@ [I" bookit;T@I@ [I" bookland;T@O@ [I" bookle;T@@ [I"book_publisher;T@@ [I" bookscan;T@`"@ [I" bookshop;T@@ [I"book_utils;T@@ [I" bookworm;T@@@ [I"book_worm;T@@ [I" booky;T@@ [I" bookyt;T@'@ [I"bookyt_pos;T@@ [I"bookyt_projects;T@@ [I"bookyt_salary;TU;[I" 0.20.1;T@ [I"bookyt_stock;T@@ [I" boolean;T@@ [I"boolean_attributes;T@@ [I"boolean_datepicker;T@E@ [I"boolean-expression;T@@ [I"booleanize;T@@ [I"boole_time;T@@ [I" boom;T@@ [I" boombera;T@@ [I" boomboom;T@@ [I"boomerang;T@@ [I"boomerang-mocksmtpd;T@@ [I"boomerang-rails;T@E@ [I"boomerang-trample;T@`@ [I" booru;T@'@ [I" boost;T@'@ [I" booster;T@'@ [I"boost_lambda_style_proc;T@@ [I" boot;T@'@ [I"bootbox-rails;T@'@ [I" bootcamp;T@+@ [I" booter;T@@ [I" bootlace;T@I@ [I" bootleg;T@@ [I" boots;T@@ [I"bootstrap;T@'@ [I"bootstrap2_form_builder;T@E@ [I"bootstrap2-rails;T@n@ [I"bootstrap_active_nav;T@'@ [I"bootstrap-addons-rails;T@`@ [I"bootstrap-assets;T@@ [I"bootstrap_builder;T@x@ [I" bootstrap-colorpicker-rails;T@@ [I"bootstrap-confirm-rails;T@'@ [I"bootstrap_datepicker;T@6@ [I"bootstrap-datepicker-rails;TU;[I" 0.6.35;T@ [I"$bootstrap-daterangepicker-rails;T@@ [I"bootstrap_devise_base;T@'@ [I"bootstrap-editable-rails;T@@ [I"bootstrap_flash_messages;T@@ [I"bootstrap_form;T@,@ [I"bootstrap-form;T@V@ [I"bootstrap_form_builder;T@'@ [I"bootstrap_form_builder_new;T@"@ [I"bootstrap_form_helper;TU;[I" 2.0.2.0;T@ [I"bootstrap_forms;TU;[I" 2.0.8;T@ [I"bootstrap-forms;T@"@ [I"bootstrap-generators;T@ @ [I"bootstrap-haml-rails;T@@ [I"bootstrap_helper;TU;[I" 2.1.2.1;T@ [I"bootstrap_helpers;T@@ [I"bootstrap-helpers;T@@ [I"bootstrap_kaminari;T@@ [I"bootstrap-kaminari-views;T@E@ [I"bootstrap_modal_rails;T@+@ [I"bootstrap-modal-rails;T@@ [I"bootstrap-on;T@n@ [I"bootstrap-pdf;T@@ [I"bootstrapped;T@z@ [I"bootstrapped-rails;TU;[I" 2.0.8.5;T@ [I"bootstrapper;T@@ [I"bootstrappers;T@@ [I"bootstrap-rails;T@n@ [I"bootstrap-rails-engine;T@@ [I"bootstrap_rails_helpers;T@@ [I"bootstrap-sass;TU;[I" 2.2.2.0;T@ [I"bootstrap-sass-keppy;T@@ [I"bootstrap-sass-rails;T@]*@ [I"bootstrap-sass-rails-rtl;TU;[I" 2.0.4.12;T@ [I"bootstraps_bootstraps;T@+@ [I"bootstrap-shoehorn;T@@ [I"bootstrap-timepicker-rails;T@@@ [I"bootstrap-toolkit-rails;T@"@ [I"bootstrap-tooltip-rails;T@@ [I"bootstrap-will_paginate;T@@ [I"bootstrap-wysihtml5-rails;TU;[I" 0.3.1.15;T@ [I"bootstrap-x-editable-rails;T@@ [I"bootstripe;TU;[I" 0.2.18;T@ [I"bootstripe-rails;T@I@ [I"bootswatch-rails;T@@ [I" bootsy;T@@ [I"bootsy-mongoid;T@@ [I"bootsy-simple_form;T@`@ [I" bootup;TU;[I" 0.0.4.1;T@ [I" booty;T@`@ [I"booty-call;T@@ [I"boourns-memcached;TU;[I" 1.4.6;T@ [I"boourns-unicorn;TU;[I" 4.4.8;T@ [I" booyah;TU;[I" 0.1.02;T@ [I"bop;T@'@ [I" boqwij;T@@ [I" borda;T@ @ [I" border;T@@ [I"border_patrol;T@@@ [I" borel;T@@ [I" borg;T@V@ [I" bork;T@@ [I" bort;T@'@ [I" bosdk;T@I"universal-java-1.6;T[@*@u@[I"bosdk_designer;T@@ [I" bosh;T@@ [I" bosh4r;T@@ [I"bosh_aws_cpi;T@@ [I"bosh_aws_registry;T@@ [I" bosh_cli;T@@ [I"bosh_client;T@'@ [I"bosh_common;T@Y@ [I" bosh_cpi;T@@ [I"bosh_deployer;T@@ [I" bosh-gen;TU;[I" 0.11.0;T@ [I"bosh_openstack_cpi;T@@ [I"bosh_openstack_registry;T@@ [I"bosh_vcloud_cpi;T@@ [I"bosh_vsphere_cpi;T@@ [I" boson;T@u"@ [I"boson-more;T@I@ [I" bosonson;TU;[I" 0.304.3;T@ [I" boss;T@R @ [I" bossan;T@+@ [I" boss-cms;T@E@ [I" bossman;T@@ [I"boss-protocol;T@@ [I"boston_marathon;T@'@ [I"boston-ruby;T@@ [I"boston-stitch;T@V@ [I"bot;T@"@ [I"botanicus-gemcutter;T@@ [I" bot-away;T@@ [I"bot_detector;T@'@ [I" botfly;T@@ [I"botherbother;T@"@ [I" bot_nyan;T@@@ [I" botstrap;T@`@ [I" botsy;T@@ [I" bottle;T@'@ [I"bottlerocket;T@@ [I" boucher;T@@ [I" bounce;T@@@ [I"bounce_email;T@I@ [I"bounce-email;T@'@ [I"bounce_fetcher;T@@ [I"bounce_fu;T@@ [I" bouncer;T@@ [I"bouncestudio;T@E@ [I"bouncy_bots;T@@ [I"bouncy-castle-java;TU;[I"1.5.0146.1;T@ [I" boundary;T@@ [I" boundio;T@@ [I"boundioV2;T@'@ [I"boundless-gdata;T@@ [I"bountydeps;TU;[I"2012.11.1913;T@ [I" bourbon;T@ @ [I"bourbon-compass;T@ @ [I" bourne;T@@ [I"boursorama;T@@ [I" boutique;T@@ [I" bouvier;T@'@ [I" bovem;T@@ [I" bovespa;T@@ [I"bovespa_ingestion;T@@ [I"bovespa-prices;T@@ [I"bower-rails;T@@@ [I" bowl;T@E@ [I" bowler;T@@ [I" bowline;T@@ [I"bowline-bundler;T@"@ [I" bowtie;TU;[I" 0.5.8;T@ [I"box;T@E@ [I" box2d;T@@[@S+@@ [I" Box2d;T@@[I"box2d-rails;T@'@ [I" box-api;T@I@ [I"box-api-ani;T@'@ [I" boxcar;TU;[I"0.10005.1;T@ [I"boxcar_api;T@N@ [I" box_cli;T@`@ [I"boxcutter;T@@ [I"boxed-geminabox;T@@[I" boxen;T@@ [I" boxer;T@@ [I" boxey;T@@ [I" boxfs;T@@ [I"boxgrinder-build;T@D@ [I"boxgrinder-core;TU;[I" 0.3.14;T@ [I"#boxgrinder-esx-delivery-plugin;T@`@ [I"*boxgrinder-ovfcatalog-delivery-plugin;T@`@ [I"boxgrinder-ubuntu-plugin;T@@ [I")boxgrinder-xenserver-platform-plugin;T@@ [I"box_layout;T@@ [I" boxnet;T@@ [I"box_of_tricks;T@@ [I"box-release;T@"@ [I"boxrubylib;T@E@ [I"bp;T@@ [I" bpardee-net-http-persistent;T@@ [I" bpci;T@'@ [I"bpl;T@E@ [I" bplot;T@@ [I"bpm;T@@ [I"bpmachine;T@@ [I"bpm-rails;T@'@ [I" bpruby;T@'@ [I" braai;T@@ [I"bracecomp;T@`@ [I" braces;T@@ [I" bracken;T@`@ [I"bracket_notation;T@@ [I"bracket_tree;T@@ [I"bradley_fizzbuzz;T@'@ [I"bradleypriest-mollom;T@,@ [I"bradleypriest-on_the_spot;T@n@ [I"bradphelan-sinatras-hat;T@@@ [I"brad-toto;T@@ [I"bragi-app;T@@ [I" braid;T@@ [I"braille_ueb;T@@ [I" brain;T@E@ [I"brainfuck;T@@ [I"brainfuckrb;T@E@ [I"brainfucktt;T@@@ [I"brain_love;T@@ [I"brainstorm;T@@ [I"braintree;TU;[I" 2.22.0;T@ [I"braintree_country_select;T@@ [I"braintree_query;T@@ [I"braintree-rails;T@x@ [I" brainz;T@6@ [I"brainz_releases;T@@ [I" brake;T@@ [I" brakeman;TU;[I" 1.9.0;T@ [I"brakeman-min;T@@ [I"bramipsum;T@E@ [I"bramipsum-caldeira-test;T@E@ [I" branches;T@'@ [I"branch_raker;T@E@ [I"brandeins;T@1@ [I"brandeins-dl;T@@ [I" brandy;T@'@ [I" brane;T@'@ [I" branston;T@$@ [I" brant;T@`@ [I"br_api_fantasy;T@|@ [I" brash;T@'@ [I" braspag;T@x@ [I" brass;T@u@ [I"brassbound-dci;T@Y@ [I"brasten-ci_reporter;T@X@ [I"brauchbar;T@@ [I" brauser;T@ @ [I" bravo;T@x@ [I"bravo-bootstrap-rails;T@@ [I"bravo_generators;T@'@ [I"bravo-generators;T@`@ [I"bravo_guard;T@"@ [I"bravo_lock;T@'@ [I"bravo_model;T@@ [I"bravo_presenter;T@n@ [I"bravo_support;T@'@ [I" brawl;T@@ [I" brawne;T@@ [I"brazenhead;T@@ [I"$brazilian-documents-validations;T@@ [I"brazilian_id;T@@ [I"brazilian-rails;T@@ [I"brb;T@@ [I" brbackup;T@`@ [I" brcep;T@@ [I" br-cnpj;T@@ [I"brcobranca;T@@ [I"brcobranca-documento;T@'@ [I"brcotacao;T@E@ [I" br-cpf;T@@ [I"brcpfcnpj;T@@ [I" brdata;T@@ [I"brdinheiro;T@@ [I"brdinheiro-lite;T@E@ [I"breadboard;T@@ [I"breadcrumble;T@@ [I"breadcrumbs;T@1@ [I"breadcrumbs_for;T@@ [I"breadcrumbs_on_rails;T@9@ [I"breadmachine;T@"@ [I"breakneck;T@@ [I" breakout;T@@ [I"breakout_parser;T@@ [@H,@@[@H,U;[I" 0.0.23;T@ [I"breakpoint;T@@ [I"breakverter;T@O@ [I" breeder;T@@ [I" breeze;T@@ [I" bremen;T@@ [I" brentano;T@@ [I"brentgreeff_akephalos;T@,@ [I"bresenham;T@E@ [I" bresson;T@@ [I"brevis-imap;T@`@ [I"brewbygems;T@x@ [I" brewdler;T@@ [I"brewerydb;T@"@ [I"brewery_db;T@'@ [I"brewerydb2;T@|@ [I"brew-launchd;T@@ [I"brewscribe;T@@ [I" brewser;T@I@ [I" brfaker;T@@ [I"brferiados;T@'@ [I" brhelper;T@@ [I"bri;T@@ [I" brI18n;T@@ [I" brian;T@@ [I"!brianjlandau-acts_as_archive;T@^@ [I""brianjlandau-chronic_duration;T@@ [I"brianjlandau-foreigner;T@@ [I""brianjlandau-resque-scheduler;TU;[I" 1.10.12;T@ [I"brianjlandau-sdoc-helpers;T@|@ [I"!brianjlandau-vestal_versions;T@@ [I"BrianTestGem;T@'@ [I" brice;T@@ [I" brick;T@@ [I"brick_house;T@- @ [I"brick_layer;TU;[I" 0.10.6;T@ [I" bricks;T@@ [I" brid;T@@ [I" bridge;T@+@ [I"bridge-ruby;T@@ [I"bridgeutopia-simple-rss;T@u"@ [I"brid-rails;T@E@ [I"briefcase;T@@ [I" briefing;T@@ [I"brief_mail;T@@ [I"brienw-linkedin;T@@ [I"brightbox;TU;[I" 2.3.9;T@ [I"!brightbox-boxgrinder-plugins;T@@ [I"brightbox-cli;TU;[I" 0.18.1;T@ [I"brightbox-server-tools;T@,@ [I"brightcontent;TU;[I" 2.0.12;T@ [I"brightcontent-assets;T@@ [I"brightcontent-attachments;T@,@ [I"brightcontent-core;T@,@ [I"brightcontent-pages;T@,@ [I"brightcove-api;T@@ [I"brighter_planet_deploy;T@@ [I"brighter_planet_layout;T@@ [I""brighter_planet_layout-ruby19;T@@ [I"brighter_planet_metadata;T@@ [I" brightly;T@6@ [I" brigit;T@@ [I"bring_back_snowman;T@@ [I" brio;T@@ [I" brir;T@@ [I"brisk-bills;T@X@ [I" bristle;T@@ [I" brita;T@@ [I" brite;T@X@ [I"brite_verify;T@'@ [I"brm_client;T@x@ [I"brm-ruby-logger;T@@ [I"br-nanite;T@@ [I"brnumeros;T@@ [I"bro;T@@ [I" broach;T@@ [I"broadband_map;T@'@ [I"broadcast;T@@ [I"broadcast_calendar;T@@ [I"broadcast-objects;T@6@ [I" broadway;T@@@ [I" brocade;T@@ [I" broccoli;T@@ [I" brochure;T@Y@ [I"brocktail;T@E@ [I"brodock-config-file-loader;T@`@ [I"brodock-validates_as_email;T@@ [I"brodock-work_queue;T@@ [I" broham;T@@ [I"bro_ids-dns-log;T@'@ [I"bro_ids-http-log;T@'@ [I"brontes3d-amqp;TU;[I" 0.6.7.1;T@ [I"&brontes3d-production_log_analyzer;TU;[I"2010072900;T@ [I"brontes3d-rubycas-server;TU;[I"0.8.0.20100111;T@ [I" bronto;T@@ [I" broom;T@@ [I"brownpapertickets;T@@ [I" browsah;T@@ [I" browscap;T@@ [I"browscapper;T@'@ [I" browser;T@|@ [I"browserchannel;T@'@ [I"browsercms;TU;[I" 3.5.4;T@ [I"browsercmsi;T@@ [I"browsercms_s3;T@ @ [I"browsercuke;T@+@ [I"browser_details;T@"@ [I"browser_detect;T@@ [I"browser_detector;T@@ [I"browserid-provider;T@u @ [I"browserid-rails;T@@ [I"browsermob-proxy;T@@ [I"browsernizer;T@@ [I"browser-prof;T@@ [I"browser-provider;T@E@ [I"browser_rules;T@'@ [I"browser_shooter;TU;[I" 0.3.13;T@ [I"browserstack;T@'@ [I"browser_tzone;T@@ [I" browshot;TU;[I" 1.10.0;T@ [I" browsql;T@'@ [I" brstring;T@@ [I"brTerminacoes;T@@ [I"brtraducao;TU;[I" 2.0.15;T@ [I" brush;T@E@ [I"brute-fuzzy;T@@ [@k-@O@[I" bruter;T@E@ [I"brute_squad;T@@ [I"brutetools;T@'@ [I"br_validator;T@@ [I" brwsr;T@@ [I"bryanl-gherkin;TU;[I" 2.11.1.1;T@ [@x-@y-@[I"bryanl-skype;T@ @ [I" bscan;T@@ [I"bscott-ec2ssh;T@@ [I" bsearch;T@@ [I"bsearch-ruby;T@`@ [I" bshell;T@E@ [I" bsl-thor;T@E@ [I"bsm-breadcrumbs;T@@ [I"bsm_models;T@@ [I"bsm-models;T@Y@ [I"bsm-openx;T@:!@ [I"bsm-sso-client;TU;[I" 0.7.11;T@ [I" bson;TU;[I" 1.6.4;T@[@-@ @ [@-@ @[I" bson_ext;T@ @ [I"bson_ext_ns;T@ @ [I"bson_object_id_validations;T@@ [I"btakita-jelly;TU;[I" 0.8.5;T@ [I"btakita-screw-unit-server;T@@ [I"btc;T@@ [I"bteitelb-paperclip;TU;[I" 2.3.1.16;T@ [I" btjunkie;T@@ [I"btk;T@@ [I"btparse-ruby;T@!@ [I" btree;T@@ [I" btstp;T@'@ [I"!btucker-google_visualization;T@J@ [I" bubble;T@@ [I"bubble-wrap;T@T @ [I" bubo;T@@ [I" buby;T@ @[I" bucaneer;T@`@ [I"buckaroo-ideal;T@E@ [I" bucket;T@'@ [I"bucket-based-rate-limiter;T@+@ [I"bucketeer;T@@ [I"bucketface;T@@ [I"bucket_list;T@x@ [I" buckets;T@'@ [I"buckknife;T@@ [I" bucks;T@@ [I" buckshot;T@@ [I"bud;T@@ [I" buddha;T@'@ [I" buddhy;T@@ [I"buddies_avatar;T@E@ [I" buddy;T@9@ [I" budurl;T@'@ [I" bueda;T@@ [I" bueller;T@@ [I" buffalo;T@'@ [I" buffer;T@'@ [I"bufferaffects;T@@ [I"buffered_io;T@'@ [I"buffered_job;T@@ [I"buffered_logger;T@6@ [I"buffered-logger;T@@ [I"buffered_proxy;T@@ [I"buffered_syslogger;T@`@ [I" buffet;T@E@ [I"buffet-gem;T@@ [I" buffy;T@E@ [I" buftok;T@@ [I"bug;T@@ [I" bugger;T@@ [I" buggie;T@@ [I" buggy;T@R @ [I" bugherd;T@E@ [I"bugherd-api;T@@ [I"bug_hunter;T@`@ [I" bugly;T@@ [I"bugs_bunny;T@@ [I" bugsnag;T@} @ [I"bugs_on_hub;T@`@ [I" bugspots;T@@@ [I"bugzscout;T@@ [I" bugzyrb;T@x@ [I" build;T@@ [I"Build2Spec;T@@ [I" build_47;T@|@ [I"build_associated;T@;@ [I"buildboard;T@@@ [I" buildem;T@@ [I" builder;TU;[I" 3.1.4;T@ [I" buildgap;T@@ [I"buildhawk;T@@ [I"build_info;T@`@ [I"building-blocks;T@O@ [I"buildlights;T@"@ [I"BuildMaster;TU;[I" 1.1.12;T@ [I"buildmeister;T@z@ [I" buildr;TU;[I" 1.4.9;T@ [@F.@G.@[@F.@G.@[I" Buildr;TU;[I" 0.17.0;T@ [I"buildr4osgi;T@Q@ [I"buildr-ajc;T@@ [I"buildr-as3;TU;[I" 0.2.19;T@ [I"buildr-bnd;T@@ [I"buildrdeb;T@@ [I"!buildr-dependency-extensions;T@!@ [I"buildr-examples;T@E@ [I"buildr-findBugs;T@`@ [I"buildr-gemjar;T@@ [I"buildr-iidea;T@@ [I"buildr-ipojo;T@'@ [I"buildrizpack;T@@[@k.@@ [I"buildr-jaxb-xjc;T@'@ [I"buildr-mirah;T@@ [I"buildr-package-as-exe;T@@ [I"buildr-resolver;T@!@[@t.@@ [I"buildr-tomcat;T@E@ [I"build_script_generator;T@@ [I"build_status_server;TU;[I" 0.17;T@ [I"build-tool;T@h@ [I"build-ubuntu-ami;T@@ [I"build_watcher;T@+@ [I"buildybuild;T@@ [I"buildzilla;T@'@ [I"built_in_data;T@@@ [I"builtinextension;T@@ [I"bulgarianize;T@@@ [I" bulk_api;T@@ [I"bulk_data_methods;T@@ [I" bulkdom;T@@ [I" bulker;T@@ [I" bulkippt;T@"@ [I"bulkippt-cli;T@E@ [I" bulkmail;T@@ [I"bulk_record;T@'@ [I" bulksms;T@@ [I"bulk_time_entry_plugin;T@@ [I"bulk_update;T@@ [I" bulky;T@@ [I" bulldog;T@,@ [I"bulldog_physics;T@@ [I" bullet;TU;[I" 4.3.0;T@ [I" bulletin;T@@ [I" bullhorn;T@@ [I"bullhorn-rails;T@+@ [I"bullion_vault;T@@ [I" bullring;T@&@ [I" bullseye;T@V@ [I" bullshit;T@6@ [I" bully;T@'@ [I"bum;T@@ [I" bumble;T@@ [I" bumbler;T@+@ [I" bummer;T@E@ [I" bump;T@@ [I" bumper;T@@@ [I" bumps;T@`@ [I"bumpspark;T@@ [I" bumpy;T@@ [I" bunch;T@I@ [I" bunchr;T@6@ [I" bundle;T@'@ [I"bundle2rpm;T@@ [I"bundle_boss;T@'@ [I"bundle-gem-install;T@'@ [I"bundle_info;T@"@ [I"bundle_lock;T@"@ [I"bundle-locker;T@@ [I"bundlemate;T@`@ [I"bundle-milkode;T@@ [I"bundle_outdated;T@"@ [I" bundler;T@@ [I"bundler08;T@-@ [I"bundler-auto-update;T@@ [I"bundler_bash_completion;T@I@ [I"bundler-binstub;T@O@ [I"bundler-bootstrap;T@@ [I"bundler-bouncer;T@@@ [I"bundle_rc;T@E@ [I"bundler_cacher;T@"@ [I"bundler_ext;T@@ [I"bundler-fastupdate;T@@ [I"bundler_geminabox;T@@ [I"bundler-github;T@@ [I"bundler_local_development;T@@ [I"bundler-maglev-;TU;[I" 1.0.21;T@ [I"bundler_push_host;T@'@ [I"bundler-talks;T@"@ [I"bundler_timer;T@x@ [I"bundle-scraper;T@I@ [I" bungle;T@'@ [I" bungler;T@E@ [I"bunnicula;T@I@ [I" bunnish;T@@@ [I" bunny;T@@ [I"bunny-ext;T@$@ [I"bunny_hop;T@'@ [I" bunraku;T@@ [I" bunt;T@@ [I" bunyan;T@@ [I"buoy_data;T@@ [I" buratino;T@@ [I"bureaucrat;TU;[I" 0.10.2;T@ [I"burger_fixins;T@"@ [I" burke;T@@ [I" burlap;T@'@ [I"burlesque;T@'@ [I" burn_iso;T@@ [I" burnout;T@'@ [I" burnspam;T@`@ [I" burp;T@`@ [I" burstsms;T@@@ [I"burt-delay_queue;T@@ [I" busboy;T@'@ [I"buscalibre;T@@ [I"buscando_el_viento;T@'@ [I" buscape;T@'@ [I"buscape_api;T@u @ [I" buscar;T@@ [I"busdriver;T@[ @ [I" bushido;TU;[I" 0.0.36;T@ [I"_bushido-faye;T@@ [I"bushido-faye;T@@ [I"_bushido-faye-websocket;T@"@ [I"bushido_stub;T@@ [I"business_days;T@E@ [I"businessdotgov;T@'@ [I"business-hours;T@@ [I"business_rules;T@V@ [I"business_seconds;T@'@ [I"business_time;T@@ [I"business_time-de;T@@ [I" businka;T@E@ [I" busket;T@@ [I"busk-ruby-readability;T@@ [I"bus-scheme;TU;[I" 0.7.6;T@ [I" buster;T@6@ [I" bustle;T@@ [I"bus_tracker;T@@ [I"bust_rails_etags;T@@ [I" bus_trip;T@@ [I" busybody;T@'@ [I" butcher;T@"@ [I" butler;T@+@ [I"butler_static;T@@ [I" butter;T@@ [I"butterfly;T@E@ [I"butterfly_net;T@@ [I"butternut;T@@ [@/@I@[I"butterware-kashflow;T@@ [I" buttless;T@E@ [I"button_form;T@@ [I" buttons;T@@ [I" buxfer;T@@ [I" buzzard;T@+@ [I" buzzcore;T@y@ [I"buzzcorej;T@E@ [I" buzzdata;T@@ [I"buzz_feed;T@g@ [I" buzzoink;T@n@ [I" buzzr;T@!@ [I"buzz-rails;T@'@ [I"buzzsprout;T@@ [I"buzzville;T@+@ [I"bvh;T@@ [I"bvm;T@@ [I" bvwack;T@`@ [I"bwkfanboy;T@O@ [I" bwoken;T@@ [I" BxMS;T@@ [I"bxslider-rails;T@@ [I" byar;T@`@ [I" byline;T@@ [I"by_params;T@'@ [I"byr;T@@ [I""byron-dm-property-validations;T@@ [I" by_star;T@@ [I" bysykkel;T@@ [I" bytetool;T@E@ [I" byticus;T@V@ [I" byul;T@@ [I"bz2;T@I@ [I"bzip2-ruby;T@@ [I"bzproxies;T@@ [I"bzrwrapper;T@@ [I"bzsnippets;T@E@ [I"c12-commons;T@@ [I"c2;T@@ [I" c2dm;T@I@ [I"c2dm_batch;T@@ [I"c2dm_on_rails;T@@ [I"c2dm-rails;T@W@ [I" c2po;T@E@ [I"!c3-activerecord-jdbc-adapter;TU;[I" 1.1.3.1;T@ [I",c3-activerecord-oracle_enhanced-adapter;T@u"@ [I" c3-dci;T@`@ [I" c3po;T@`@ [I"c3s;TU;[I" 0.4.13;T@ [I"c64;T@@ [I"c7decrypt;T@+@ [I" cabalist;T@"@ [I" cabbage;T@@ [I" cabin;T@@ [I" cabinet;T@I@ [I"cabin-web;T@E@ [I" cabiri;T@n@ [I" cable;T@@ [I"cablegator;T@@ [I" cableguy;T@@ [I"cable_menu;T@"@ [I" caboodle;T@@ [I" cacert;T@'@ [I"cacertreq;T@'@ [I" cacha;T@@ [I"cachable_url;T@@ [I"cachafla-yard-sinatra;T@@ [I" cache;T@x@ [I"cache2base;T@@ [I"cacheability;T@@ [I"cacheable;T@@ [I"cacheable_attr;T@@@ [I"cacheable-csrf-token-rails;T@@ [I"cacheable_date_helper;T@@@ [I"cacheable_flash;T@@ [I"cache_advance;T@@ [I"cache_annotations;T@`@ [I" cacheAR;T@e@ [I"cache-aws-s3;T@@ [I"cache_back;T@@ [I" cachebag;T@'@ [I" cachebar;T@@ [I"cache_bar;T@E@ [I" CacheBar;T@@ [I"cachecataz;T@+@ [I"cache_column;T@+@ [I"cache-column;T@@ [I"cache_counters;T@`@ [I"cache_cow;T@'@ [I" cached;T@!@ [I"cached_attribute;T@'@ [I"cached_belongs_to;T@@ [I"cached_column;T@[ @ [I"cache_digests;T@@ [I" cachedis;T@@ [I"cached_logger;T@'@ [I"cached_mailer;T@|@ [I"cached_model;T@ @ [I"cached-models;T@@ [I"cached_names;T@6@ [I"cached_resource;T@ @ [I"CachedSupermodel;TU;[I" 0.1.2.12;T@ [I"cached_values;T@ @ [I"cache_flow;T@`@ [I" cache_fu;T@@ [I"CacheGorilla;T@E@ [I"cache_helper;T@@ [I" cacheify;T@@ [I" cache_it;T@E@ [I"cache_machine;T@'@ [I"cache-machine;T@@ [I"cache-machine-redis;T@'@ [I" cache_me;T@E@ [I"cachemere;T@@ [I"cache_method;T@[@ [I"cache-money;T@[@ [I"cache_proxy;T@`@ [I" cacher;T@@ [I"cacherite;T@x@ [I"cache-server-connector;T@'@ [I" cachesrb;T@@ [I"cache-store-api;T@6@ [I" cachet;T@'@ [I"cachetastic;TU;[I" 3.0.5.1;T@ [I"cachetastic-memcache-pool;T@`@ [I"cachetastic-three;T@@ [I"cache_the_ripper;T@'@ [I"cache_trasher;T@'@ [I"cache_tree;T@@ [I"cache_value;T@"@ [I"cache_version;T@@ [I"cache_wagon;T@@ [I"cache-with-yuicompressor;T@@@ [I" cachex;T@'@ [I" cachier;T@'@ [I" ca_ching;T@@ [I"caching_matcher;T@`@ [I"caching_with_tags;T@'@ [I" cacho;T@@ [I" cachy;T@@ [I"cacophony;T@"@ [I" cactus;T@@ [I" cadbury;T@@ [I" cadence;T@E@ [I" cadenza;T@@ [I" cadmus;T@@ [I" cadove;T@@ [I" cadun;T@y@ [I"cadun-client-ruby;TU;[I" 4.1.0;T@ [I" caesar;T@[ @ [I"Caesar.rb;T@@ [I" caesars;T@y@ [I"cafe24_sms;T@@ [I"cafepress-alpha;T@'@ [I"cafepress_api;T@@ [I"cafepress-search;T@@ [I"cafepress_wrapper;T@@ [I" caffeine;T@E@ [I" cage;T@@@ [I" cain;T@'@ [I" cairo;T@ @[@0U;[I" 1.12.3;T@ [@0@0@ [I" cake;T@y@ [I" cakedb;T@@ [I"cal;T@@ [I"calabash-android;T@@ [I"calabash-cucumber;TU;[I" 0.9.126;T@ [I" calais;T@ @ [I" calamity;T@@ [I"calatrava;T@y@ [I" calc;T@@ [I" calcexam;T@E@ [I" calcium;T@@ [I" calc-nik;T@@ [I"calculate;T@'@ [I"calculated;T@1@ [I"calculations_by_time_range;T@,@ [I"calculator;T@'@ [I" calculus;T@|@ [I" caldav;T@@ [I"caldecott;T@@ [I"caleb-chronic;T@@ [I" caleb-cloudfront_asset_host;T@ @ [I" calendar;TU;[I" 1.11.4;T@ [I"calendar_date_select;TU;[I" 1.16.4;T@ [I"calendar_helper;T@,@ [I"calendariffic;T@E@ [I"calendarize;T@@ [I"calendar_view;T@n@ [I"calendrier;T@e@ [I"calfilter;T@N@ [I" cali;T@@ [I" calico;T@+@ [I"caligrafo;T@@ [I"cal-jp-holiday;T@@ [I"callable_symbol;T@@ [I" callback;T@@ [I"callback-adapter;T@`@ [I"callback-batch;T@@ [I"callbacks;T@@ [I"callback_skipper;T@@ [I"callcache;T@@ [I"call_center;T@@ [I"called_from;T@@ [I"caller_id;T@'@ [I"callgrapher;T@E@ [I"callilol_gem_test;T@'@ [I" calliope;T@`@ [I" callisto;T@e@ [I" call-me;TU;[I" 0.0.2.3;T@ [I"callmeback;T@@ [I" callsign;T@ @ [I" callsite;T@@ [I"callstack;T@E@ [I"call_stack;TU;[I" 0.1.0.0;T@ [@^1@_1@[I" callwith;T@E@ [I" CalMon;T@@ [I" calorie;T@@ [I" caltrain;T@@ [I" calvin;T@'@ [I"cam;T@'@ [I"camaras_valencia_es;T@E@ [I" camayoc;T@@ [I" cambelt;T@`@ [I" cambio;T@@ [I" cambric;T@- @ [I"cambridge;T@'@ [I"camcapture;T@I"i686-linux;T[I" cameleon;T@@ [I" camellia;TU;[I" 2.5.10;TI"i486-linux;T[@1U;[I" 2.7.0;T@ [@1@1I"i386-mswin32;T[I"camellia-rb;T@@ [I" camelot;T@@ [I"camelpunch-markup_validity;T@@ [I"camelpunch-rest-client;T@@ [I" cameltoe;T@'@ [I"cameraman;T@E@ [I"cameraplus;T@E@ [I"cameroncox-mousetrap;T@@ [I"camo_image_tag;T@'@ [I" campagne;T@I@ [I"campaign_cash;TU;[I"2.5;T@ [I"campaigning;T@~@ [I"campaign_monitor;T@`@ [I"campaign_monitor_party;T@@ [I" campaign_monitor_subscriber;T@@ [I"campchair;T@`@ [I"camper_van;T@@ [I" campfire;T@@ [I"campfire_bot;T@@ [I"campfire-bot;T@@ [I"!campfire-bot-absentee-camper;T@@ [I"campfire-bot_alexchee;T@@ [I"campfire-bot-standup;T@@ [I"campfire_export;T@@ [I"campfire_handler;T@"@ [I"campfire_logic;TU;[I" 2.0.7;T@ [I"campfire-notifier;T@@@ [I"campfire-say;T@'@ [I"campgrounds;T@E@ [I" camping;TU;[I" 2.1.523;T@ [I"camping-abingo;T@@ [I"camping_generator;T@@ [I"camping-kirbybase;T@'@ [I"camping-oauth;T@@ [I"camping-omnibus;T@1@ [I" campline;T@@ [I" campo;T@e@ [I"camptweet;T@@ [I"campusbooks;T@@ [I" campy;T@6@ [I" canable;T@@ [I"canada_post;T@@@ [I" canard;T@@ [I" canary;T@V@ [I"canary_notifier;TU;[I" 0.0.31;T@ [I" canator;T@|@ [I" can_be;T@@ [I"can_be_flagged;T@@ [I"canberra_distance;T@@ [I" cancan;TU;[I" 1.6.8;T@ [I"cancan_config;T@"@ [I"cancan_edit;T@'@ [I"cancan_namespace;T@6@ [I"cancan-permits;T@J%@ [I"cancan-rest-links;T@@ [I"cancan_strong_parameters;T@@ [I"cancan-traffic;T@@ [I"candelabra;T@;@ [I" candies;T@@ [I" can_do;T@@@ [I" candy;T@ @ [I"candygram;T@@ [I"candywrapper;T@'@ [I" cane;T@@ [I" canery;T@+@ [I" can_flag;T@@ [I" canhas;T@@ [I"can_has_bots;T@@ [I"can_has_fixtures;T@+@ [I"can_has_flagz;T@@ [I"can-has-lolcat;T@@ [I"can_has_meta;T@@ [I"can-has-permission;T@,@ [I"can_has_support;T@@ [I"can_has_upc;T@@ [I" canivete;T@@ [I"canjs-rails;T@x@ [I" cannabis;T@@ [I" canned;T@|@ [I" cannery;T@`@ [I" cannibal;T@@ [I"canonical_dude;T@@ [I"canonical-email;T@@ [I"canonical-rails;T@'@ [I"canonical_url;T@+@ [I"canonical-url;T@+@ [I"canonicurl;T@V@ [I" canonix;T@|@ [I"can_opener;T@@ [I" cans;T@I@ [I" cant;T@I@ [I" cantango;TU;[I" 0.9.4.7;T@ [I"cantango-api;T@6@ [I"cantango-config;T@@ [I"cantango-core;TU;[I" 0.1.9.3;T@ [I"cantango_editor;T@@ [I"cantango-masquerade;TU;[I" 0.1.3.2;T@ [I"cantango-permits;T@`@ [I"cantango-roles;T@@ [I" cantor;T@N@ [I"cantor_carpets;T@@@ [I"can_write;T@R @ [I" cap2;T@I@ [I" capacity;T@@ [I" capazon;T@@ [I"cap_bootstrap;T@@ [I" capcake;T@+@ [I" capchef;T@@ [I" Capcode;T@@ [I"capcode-all-plugins;T@@ [I"capcode-base-activerecord;T@@ [I"capcode-base-couch_foo;T@@ [I"capcode-base-couchrest;T@@ [I"capcode-base-datamapper;T@@ [I"capcode-base-mongoid;T@@ [I"capcode-base-sequel;T@@ [I"capcode-render-binary;T@@ [I"!capcode-render-coffee-script;T@@ [I"capcode-render-erb;T@@ [I"capcode-render-haml;T@@ [I"capcode-render-json;T@@ [I"capcode-render-less;T@@ [I"capcode-render-mail;T@@ [I"capcode-render-markaby;T@@ [I"capcode-render-mustache;T@@ [I"capcode-render-none;T@@ [I"capcode-render-redirect;T@@ [I"capcode-render-sass;T@@ [I"capcode-render-static;T@x@ [I"capcode-render-webdav;T@@ [I"capcode-render-xml;T@@ [I"CapConsole;T@E@ [I"cap_db_dump;T@@ [I"cap-drupal;T@@ [I" cape;T@ @ [I" capedia;T@@ [I" cap-elb;T@@ [I" caper;T@@ [I"cap-ext-parallelize;T@@@ [I"cap-ext-webistrano;T@+@ [I" capfig;T@@ [I" capfire;T@@ [I" capgem;T@@ [I"cap-git-deploy;T@"@ [I"cap_git_tools;T@@ [I" capgun;T@'@ [I" cap_gun;T@,@ [I"cap_gun_reloaded;T@@ [I"cap-hacks;T@E@ [I" caphub;T@'@ [I" capi;T@`@ [I" capidiem;T@@ [I" capifig;T@E@ [I" capifony;TU;[I" 2.2.5;T@ [I"capify-ec2;T@@ [I"capify-php;T@@ [I" capigen;T@+@ [I"capigento;T@1@ [I"capillary;T@@ [I"capimeria;T@@ [I"capinatra;T@@ [I"capistrano;TU;[I" 2.14.0;T@ [I"capistrano-af83;T@@ [I"capistrano-alice;T@n@ [I"capistrano-ash;T@@ [I""capistrano_auto_multi_install;T@ @ [I"capistrano-autoscaling;T@@ [I"capistrano_banner;T@"@ [I"capistrano-basecamp;T@@ [I"capistrano-benchmark;T@'@ [I"capistrano-blaze;T@@ [I"capistrano-bootstrap;T@@ [I"capistrano-boss;T@'@ [I"capistrano-buildpack;T@n@ [I"capistrano-calendar;T@@@ [I"capistrano-campfire;T@@ [I"capistrano-campout;T@;@ [I"capistrano-chef;T@@ [I"capistrano_chef_solo;T@@ [I"capistrano-chef-solo;T@E@ [I"capistrano-cloudflare;T@E@ [I"capistrano-cloudfoundry;T@'@ [I"capistrano-cm;T@@ [I"capistrano_colors;T@u @ [I"capistrano-conditional;T@@ [I"capistrano-config;T@"@ [I"capistrano-configuration;T@@ [I"capistrano-confirm;T@@ [I"capistrano_confirm_branch;T@E@ [I"capistrano-contao;T@n@ [I"capistrano-content;T@@ [I"capistrano-copy-subdir;T@'@ [I"/capistrano_copy_with_remote_cache_strategy;T@@ [I"capistrano-cowboy;T@@@ [I""capistrano-custom-maintenance;T@E@ [I"capistrano-database;T@V@ [I"capistrano_database_yml;T@;@ [I"capistrano-db-rollback;T@6@ [I"capistrano-db-tasks;T@!@ [I"capistrano-deepmodules;T@!@ [I"capistrano-demonz;T@n@ [I"capistrano-deploy;T@@ [I"capistrano_deploy_lock;T@@ [I"!capistrano-deploy-management;TU;[I" 0.1.47;T@ [I"capistrano-deploy-tagger;T@+@ [I"capistrano-deploytags;T@X@ [I"!capistrano-detect-migrations;T@@ [I"capistrano-didi;T@"@ [I""capistrano-different-password;T@E@ [I"capistrano-drupal;T@g@ [I"capistrano-drush-make;T@`@ [I"capistrano-ec2elb;T@'@ [I"capistrano-ec2group;T@@ [I""capistrano-ec2-selfdeploy-tag;T@@ [I"capistrano-ec2tag;T@@ [I"capistrano-edge;TU;[I" 2.5.6;T@ [I"capistrano-elb;T@x@ [I"capistrano-elobuff;T@@ [I"capistrano_evrone_recipes;T@ @ [I"capistrano-ext;T@u@ [I"capistrano-extensions;T@g@ [I"capistrano-ext-params;T@@@ [I"capistrano-ext-projectdx;T@@ [I"capistrano-ext-rvm;T@E@ [I"capistrano-ext-rvm-bundler;T@E@ [I"capistrano-ext-rvm-unicorn;T@'@ [I"capistrano-exts;TU;[I" 1.14.1;T@ [I"capistrano-ext-set-helpers;T@@ [I"capistrano-fanfare;T@K,@ [I"capistrano-fast_deploy;T@'@ [I"!capistrano-fast_remote_cache;T@@ [I"capistrano-file_db;T@@ [I"capistrano-filter;T@[ @ [I"capistrano-foreman;T@@ [I"capistrano-getservers;T@@ [I"capistrano-git;T@E@ [I"capistrano-git-external;T@`@ [I"capistrano-gitflow;T@@ [I"capistrano-gitflow_version;T@<@ [I"capistrano-git-methods;T@"@ [I"capistrano-git-plugins;T@p@ [I"capistrano-git-tags;T@E@ [I"capistrano-gity;T@x@ [I"capistrano-grove;T@@ [I"capistrano-haproxy;T@'@ [I"capistrano-helpers;T@@ [I"capistrano-hex;T@'@ [I"capistrano-hivequeen;T@@ [I"capistrano-http-notify;T@@ [I"capistrano-info;T@@ [I"capistrano-java;T@E@ [I"capistrano-jdk-installer;T@"@ [I"capistrano-jenkins;T@`@ [I"capistrano-jukebox;T@E@ [I"capistrano_kvm_git;T@@ [I"capistrano-lazy-assets;T@n@ [I"capistrano-lemur;T@"@ [I"capistrano-lingr;T@"@ [I" capistrano-log_with_awesome;T@E@ [I"capistrano_mailer;T@'@ [I" capistrano_mailer_railsless;T@@ [I"capistrano-mailgun;T@N@ [I"capistrano-maintenance;T@E@ [I"capistrano-maven;T@@ [I"capistrano-mon;T@@ [I"capistrano_mongo;T@@ [I"capistrano-monit;T@@ [I"capistrano-mono-deploy;T@6@ [I"capistrano-mountaintop;T@;@ [I"capistrano-multiconfig;T@"@ [I"capistrano-multiproject;T@@ [I"capistrano-multistage;T@"@ [I"capistrano-mysqldump;TU;[I" 1.06;T@ [I"capistrano-nc;T@E@ [I"capistrano-nexus;T@'@ [I"capistrano-nginx;T@E@ [I"capistrano-nginx-unicorn;T@@ [I"capistrano-node;T@@ [I"capistrano-node-deploy;T@u@ [I"capistrano-notification;T@`@ [I"capistrano-notifier;T@@ [I"capistrano-notify;T@'@ [I"capistrano-novafabrica;T@W@ [I"capistrano-offroad;T@6@ [I"capistrano-patch;T@E@ [I"capistrano-payload;T@x@ [I"capistrano-pg;T@E@ [I"capistrano-php;T@@ [I"capistrano-play;T@@ [I"capistrano-progressbar;T@'@ [I"capistrano-provisioning;T@V@ [I"capistrano-puppet;T@E@ [I"capistrano-puppeteer;T@'@ [I"capistrano-pushover;T@6@ [I"capistrano-pyenv;T@V@ [I"capistrano_rails_console;T@@ [I"capistrano-rbenv;T@V@ [I"capistrano_recia;T@E@ [I"capistrano-recipes;T@@ [I"capistrano-redmine;T@@ [I"capistrano-relevance;T@'@ [I".capistrano-remote-cache-with-project-root;T@E@ [I"capistrano-resque;T@@ [I"capistrano-rightscale;T@@ [I"'capistrano_rsync_with_remote_cache;T@.@ [I"capistrano-runit;T@x@ [I"capistrano-runit-tasks;T@,@ [I"capistrano-rvm;T@'@ [I"capistrano_s3;T@@ [I"capistrano-s3-copy;T@"@ [I"capistrano-s3-mirror;T@'@ [I"capistrano-sanitizer;T@`@ [I"capistrano-sbt;T@@ [I"capistrano-scale;T@@ [I"capistrano-scalr;T@@ [I"capistrano-scm-bamboo;T@@ [I"capistrano-scm-jenkins;T@"@ [I"capistrano-scope;T@`@ [I"capistrano-sdb;T@@ [I"capistrano-selectra;T@@ [I"capistrano-server;T@E@ [I"capistrano-shared_file;T@`@ [I"capistrano-shared-helpers;T@@ [I"capistrano-slient_curl;T@@ [I"capistrano-spec;T@@ [I"capistrano_ssh;T@@ [I"capistrano-ssh-helpers;T@@ [I"%capistrano-strategy-copy-bundled;T@@ [I"%capistrano-strategy-copy-partial;T@'@ [I"#capistrano-strategy-copy-smart;T@@ [I"1capistrano-strategy-copy-with-bundle-package;T@@ [I")capistrano-strategy-copy-working-dir;T@@ [I"capistrano-strategy-sync;T@@ [I"-capistrano-strategy-vagrant-copy-bundled;T@@ [I"capistrano-supervisord;T@'@ [I"capistrano-sync;T@@ [I"capistrano-syntax-checking;T@@@ [I"capistrano-tagging;T@@ [I"capistrano-tags;T@@ [I"capistrano-tbg;T@'@ [I"capistrano-technogate;T@`@ [I"capistrano-templates;T@@ [I"capistrano-tomcat;T@@ [I"capistrano-toolbox;T@n@ [I"CapistranoTrac;T@@ [I"!capistrano-transfer_progress;T@'@ [I"capistrano_transmit;T@@ [I"capistrano-unicorn;T@1@ [I"capistrano-unicorn-methods;T@@ [I"capistrano-unicorn-pleary;T@@ [I"capistrano-unison;T@'@ [I"capistrano-upstart;T@E@ [I"capistrano-uptodate;T@E@ [I"capistrano-utils;T@@ [I"capistrano-vexxhost;T@@ [I"capistrano-virtualenv;T@@ [I"capistrano-webserver;T@+@ [I"capistrano-windows-server;T@X@ [I"capistrano_winrm;T@@ [I"capistrano-wordpress;T@n@ [I"capistrano-zen;T@E@ [I" capit;T@@ [I"capita_git;T@@ [I" capital;T@@ [I""capitalist-acts-as-importable;T@@ [I" capitate;T@@ [I" capium;T@@ [I" capiyii;T@@ [I" caplets;T@@ [I" caplock;T@@ [I" caploy;T@|@ [I"capmongrel;T@'@ [I" capo;T@' @ [I"capobvious;TU;[I" 0.2.95;T@ [I" capone;T@@ [I"capones_recipes;TU;[I" 1.15.5;T@ [I"cap_passenger_ping;T@- @ [I"cap_password_filter;T@@ [I" capper;T@N@ [I"cap_permission;T@@ [I" cappress;T@@ [I" cappruby;T@@ [I"cappy-monit;T@@ [I"cappy-taffy;T@@ [I"cap_recipes;T@@ [I"cap-recipes;TU;[I" 0.3.39;T@ [I"cap_reserve;T@@ [I"capricious;T@I@ [I"capricorn;TU;[I" 2.0.11;T@ [I"cap-rightscale;T@y@ [I"capsaicin;T@ @ [I"capserverext;T@@ [I" capsh;T@@ [I" cap-site;T@@ [I" capsize;T@@ [I"cap-ssh-key-man;T@@ [I" capstrap;T@@ [I"cap-strap;T@|@ [I" capsule;T@@ [I"capsulecrm;T@@ [I"capsulecrmii;T@@ [I" capsum;T@-@ [I"cap-swallow;T@@ [I" cap_sync;T@V@ [I"cap-taffy;T@@ [I" captain;T@x@ [I"captain_hook;T@`@ [I"captain_oveur;TU;[I" 0.8.15;T@ [I"captain_planet;T@@ [I"captainslog;T@@@ [I" captcha;T@@ [I" captcha3;T@@ [I"captchachacha;T@@ [I"captchator;T@@ [I"captchatrader;T@@ [I"captched_to_death;T@@ [I" captify;T@@ [I"captivate;T@'@ [I"captivity;T@'@ [I" captivus;T@@ [I"captivus-auth_hmac;T@E@ [I" captools;T@@ [I" capture;T@E@ [I"captureapi;T@'@ [I"capture_camera;T@E@ [I" captured;T@@ [I"capture_io;T@`@ [I"capturejs;T@'@ [I"capture-output;T@@ [I"capture_stdout;T@'@ [I" capucine;T@ @ [I"cap_unicorn;T@n@ [I" capushka;T@E@ [I" cap-util;T@@ [I"cap_vagrant;T@'@ [I" capy;T@ @ [I" capybara;T@@ [I"capybara-celerity;T@'@ [I"capybara-culerity;T@'@ [I"capybara-email;T@@ [I"capybara-envjs;T@x@ [I"capybara-envjs-fixes;T@@ [I"capybara-extensions;T@@ [I"capybara-facebook;T@@ [I"capybara-firebug;T@@ [I"capybara-grope;T@@ [I"capybara-iphone;T@@ [I"capybara-jasmine;T@"@ [I"capybara-java_script_lint;T@'@ [I"capybara-js_finders;T@@ [I"capybara-json;T@,@ [I"capybara-mechanize;T@@ [I"capybara_minitest_spec;T@@ [I"capybara-on-crack;T@'@ [I"capybara-pageobject;T@@@ [I"capybara-page-object;T@@ [I"capybara-puma;T@@ [I"#capybara-rack_test_with_server;T@@ [I"capybara_rails;T@@ [I"capybara-rails-2-2;TU;[I" 0.4.1.1;T@ [I"capybara-screenshot;T@@ [I"capybara-select2;T@@ [I"capybara-selenium-remote;T@'@ [I"capybara_sfdc;T@'@ [I"capybara-typhoeus;T@ @ [I"capybara-webkit;TU;[I" 0.14.0;T@ [I"capybara-webkit-remote;T@"@ [I" capykit;T@ @ [I" caramel;T@@ [I"caramelize;T@`@ [I" carapace;T@@ [I" carats;T@@ [I" carazel;T@@ [I" carb;T@V@ [I" carbios;T@@ [I" carbolic;T@6@ [I" carbon;T@ @ [I"carbonator;T@V@ [I"carbon-copy;T@`@ [I" carboy;T@@@ [I"cardboard;T@@ [I"cardboardfish;T@n@ [I" cardgame;T@'@ [I" cardia;T@@ [I" cardigan;T@`@ [I" cardinal;T@`@ [I"cardmagic-sumo;T@@ [I"card_play_21;T@E@ [I" cards;T@Q@ [I"cardshark;T@'@ [I"career_builder;T@I@ [I"careerjet;T@'@ [I"caren-api;T@ @ [I"care-shim;T@@ [I" cargo;T@@ [I"cargo_wiki;T@@ [I"cargowise;T@e@ [I" caribou;T@@ [I"caricature;T@@ [I" carl;T@`@ [I"carlosbrando-money;T@ @ [I" carmen;T@"@ [I" carmine;T@@ [I"CarmineContraption;T@@ [I" carnac;T@@ [I" carousel;T@@ [I" Carpark;TU;[I"26;T@ [I"carpenter;T@@ [I"carpentry;T@@ [I"carpodaster-unicase;T@@ [I" carpool;T@@ [I" carps;T@@ [I"car_query;T@@ [I" carrier;T@|@ [I"carriercouch;T@'@ [I"carrier_info;T@"@ [I"carrier-pigeon;T@@ [I"carrierwave;T@@ [I"carrierwave-aliyun;T@`@ [I"carrierwave_backgrounder;T@6@ [I"carrierwave-base64-storage;T@@ [I"carrierwave-datamapper;T@@ [I"carrierwave-dimensions;T@'@ [I"carrierwave_direct;T@V@ [I"carrierwave_direct_jquery;T@'@ [I"carrierwave_direct_mongoid;T@n@ [I"carrierwave-elastictastic;T@'@ [I"carrierwave_ext;T@'@ [I"carrierwave-filepickerio;T@E@ [I"carrierwave-ftp;T@@ [I"carrierwave-google_drive;T@E@ [I"carrierwave-grandcloud;T@`@ [I"carrierwave-imagesorcery;T@"@ [I"carrierwave_imagevoodoo;T@@[I"carrierwave-matte;T@'@ [I"carrierwave-meta;T@"@ [I"carrierwave-mongoid;T@@ [I"carrierwave-neo4j;T@@[I"carrierwave-orm-mongoo;T@@ [I"carrierwave-postgresql;T@@ [I"carrierwave-pressplane;TU;[I" 0.5.8.3;T@ [I"carrierwave-processing;T@'@ [I"carrierwave-qiniu;T@@ [I"carrierwave-rails3;T@@ [I"carrierwave_retina;T@E@ [I"carrierwave-riak;T@@@ [I"carrierwave-ripple;T@'@ [I"carrierwave_securefile;T@@ [I"carrierwave-sequel;T@@ [I"carrierwave-tfs;T@I@ [I"carrierwave-upyun;T@1@ [I"carrierwave-video;T@@ [I""carrierwave-video-thumbnailer;T@`@ [I"carrierwave-vips;T@@ [I"carrierwave-webdav;T@`@ [I"carrierwave-yandexfotki;T@'@ [I" carrot;T@N@ [I" carrot2;T@'@ [I"carrot-top;T@n@ [I" cart;T@"@ [I" carter;T@@ [I"cartera-jekyll;T@@ [I"cartera-toto;T@@ [I"cartesian;T@h@ [I"Cartesian;T@@ [I"cartesian-product;T@@ [I" cartier;T@E@ [I" cartman;T@@ [I"cartodb-importer;T@W.@ [I"cartodb-rb-client;T@@ [I" cartodb-rb-client-rails-322;T@@ [I"cartodb-tools;T@@ [I"cartographer;T@N@ [I"cartographie;T@E@ [I"cartography;T@E@ [I"carto_json;T@@ [I"cartolify;T@@ [I"cartoonist;T@ @ [I"cartoonist-announcements;T@ @ [I"cartoonist-blog;T@ @ [I"cartoonist-comics;T@ @ [I"cartoonist-default-theme;T@ @ [I"cartoonist-pages;T@ @ [I"cartoonist-suggestions;T@ @ [I"cartoonist-tags;T@ @ [I"cartoonist-twitter;T@ @ [I" cartoset;T@E@ [I"caruby-core;TU;[I" 2.1.4;T@ [I"caruby-scat;T@@ [I"caruby-small;T@;@ [I"caruby-tissue;TU;[I" 2.1.6;T@ [I" car_wash;T@'@ [I"casablanca;T@I@ [I" cascaad;T@'@ [I" cascade;T@3@ [I"cascading_classes;T@@ [I"cascading_configuration;T@ @ [I""cascading-configuration-array;T@@ [I")cascading-configuration-array-sorted;T@@ [I"0cascading-configuration-array-sorted-unique;T@@ [I")cascading-configuration-array-unique;T@@ [I"!cascading-configuration-hash;T@@ [I"$cascading-configuration-setting;T@@ [I"cascading.jruby;T@@ [I"cascading-resources;T@,@ [I"cascading_rubies;T@@ [I"casclient;T@E@ [I"cas_client;T@[@ [I" case;TU;[I" 0.5.2.1;T@ [I"caseblocks_api;T@@ [I"case_class;T@@ [I"caseconverter;T@`@ [I"casecumber;TU;[I" 1.0.2.1;T@ [I"casecumber-rails;T@6@ [I"case_form;T@@ [I" casein;T@v @ [I"case_insensitive_arel;T@@ [I"casey_jones;T@@@ [I"$casful_authentication_generator;T@@ [I" cash;T@`@ [I"cashboard;T@@ [I" cashier;T@@ [I"cashier_client;T@'@ [I"cashier_cotendo;T@'@ [I" cashish;T@@ [I" cashrb;T@ @ [I" cashstar;T@|@ [I" casings;T@@ [I" casino;T@'@ [I"casino_core;T@@ [I"#casino_core-authenticator-ldap;T@E@ [I" casket;T@+@ [I"cas_my_string_extend;T@E@ [I" casper;T@@ [I"casper-client;T@n@ [I" casperjs;T@@ [I"casper-proxy;T@@ [I"casperreports;T@`@ [I"casper_server;T@@@ [I"casrack_the_authenticator;T@ @ [I"cas_rest_client;T@@ [I" cass;T@@ [I"cassandra;T@N.@ [I"cassandra_backup;T@@ [I"cassandra_client;T@[ @ [I"cassandra_complex;T@@ [I"cassandra-cql;T@T @ [I"cassandra_integration;T@E@ [I"cassandra-jars;T@@[I"cassandra_mapper;T@'@ [I"cassandra-model;T@,@ [I"cassandra-queue;T@'@ [I"cassanity;T@@ [I" cassava;T@'@ [I" casseo;T@1@ [I" cassie;T@@ [I" cassilds;TU;[I" 0.12.6;T@ [I"cassilds-connection-pool;T@@ [I"cassilds-model;T@N$@ [I"cassiopee;T@ @ [I"cassiopeia;T@@ [I"cassowary;T@@ [I"cassowary-ruby;T@@ [I" cassy;T@T @ [I" cast;T@@ [I" cast19;T@`@ [I" castache;T@E@ [I"castanaut;T@x@ [I" castanet;T@@ [I" castar;T@'@ [I"cast_attribute;T@@ [I" caster;T@' @ [I" casting;T@@ [I"casting_attr_accessor;T@`@ [I"casting_attributes;T@E@ [I" castle;T@@ [I"castle.core;TU;[I"2.5.1.0.20100926;T@ [I"castle.dynamicproxy2;TU;[I" 2.2.0.0;T@ [I"castle.windsor;TU;[I" 2.5.1.0;T@ [I" cast_off;T@@ [I"castoro-client;T@@ [I"castoro-common;T@@ [I"castoro-gateway;T@@ [I"castoro-manipulator;T@`@ [I"castoro-peer;T@`@ [I" casty;T@@ [I" casual;T@@ [I"casual_helper;T@@ [I"casuistry;T@I@ [I"cat;T@@ [I"catalogchoice-ar_mailer;TU;[I" 2.1.7;T@ [I"catalogue;T@E@ [I" catalyst;T@n@ [I" catapult;T@"@ [I"catarse_dineromail;T@ @ [I"catarse_mailchimp;T@'@ [I"catarse_moip;T@`@ [I"catarse_paypal_express;T@@ [I" catbird;T@E@ [I" CatBox;T@'@ [I" catch;T@n@ [I" catche;T@[@ [I" catcher;T@- @ [I" catchex;T@@ [I"CatchNotes_api;T@|@ [I"categories;T@@ [I"categoryz3;T@@ [I"categoryz3_forms;T@!@ [I" caterer;T@@ [I"caterpillar;T@ @ [I"cat_facts;T@'@ [I"catfriend;TU;[I" 0.16;T@ [I" catgame;T@n@ [I" catori;T@@ [I" catprint;T@@ [I" catptcha;T@1@ [I"cat_router;T@@ [I" catspeak;T@@ [I" cattail;T@'@ [I" cattr;T@@@ [I" catwalk;T@'@ [I" caty;T@'@ [I" cauldron;T@6@ [I" caule;T@'@ [I"caulfield;T@@ [I"causes-hydra;TU;[I" 0.21.0;T@ [I"causes-sysloglogger;T@@ [I" cautious;T@'@ [I"cavalcade;T@W@ [I"caveman-crummy;T@`@ [I" caviidae;T@@ [I"caw;T@'@ [I" cawcaw;T@@ [I" cawer;T@@ [I"cawer-hello;T@`@ [I"cb;T@@ [I" cbac;TU;[I" 0.6.5;T@ [I"cbaclig-ar-extensions;TU;[I" 0.9.2.1;T@ [I"cbaclig-facebooker;TU;[I" 1.0.67.3;T@ [I"cbaclig-koala;TU;[I" 0.5.0.2;T@ [I"cbf;T@'@ [I"cb-ffi-proj4;T@V@ [I"cb_mongoid_auto_inc;T@@ [I"cb_mongoid_spacial;T@3@ [I"cbo;T@@ [I"cbot-bbcodeizer;T@@ [I" cbr2cbz;T@|@ [I" cbraspag;T@@ [I"cbrunnkvist-psd_logger;T@|@ [I" cbuffer;T@`@ [I" c_buffer;T@+@ [I" cbuilder;T@'@ [I" ccalc;T@'@ [I"ccbuilder;T@@@ [I" ccconv;T@@ [I" ccdk;T@@ [I"ccfulfillment;T@6@ [I" ccheck;T@@ [I"ccls-calnet_authenticated;T@@ [I"ccls-ccls_engine;TU;[I" 3.11.0;T@ [I"ccls-common_lib;T@@ [I"ccls-html_test;T@@ [I"ccls-simply_authorized;T@@ [I"ccls-surveyor;T@@ [I"ccls-use_db;T@@ [I"cc_manager;T@@ [I"ccollins-princely;T@@ [I" cconv;T@@ [I"ccp;T@@ [I" c_crypt;T@@ [I"ccs_core_gem;T@n@ [I"ccs_survey_gem;T@"@ [I" ccsv;T@@@ [I" ccsv-e;T@@ [I" ccup;T@'@ [I"cdamian-geoip_city;T@I@ [I" cdata;T@@ [I"cdb;T@E@ [I"cdb-crawlr;T@@ [I" cdb-full;T@6@ [I"cdd-metric_fu;T@ @ [I" cdexec;T@@ [I" cdfg;T@'@ [I"cdmon_updater;T@@ [I"cdmwebs-shoulda-addons;T@I@ [I"cdn;T@@ [I"cdnetworks;T@'@ [I" cdn_fu;T@y@ [I"cdn_helpers;T@B@ [I"cdnjs-command;T@@ [I"cdo;T@u@ [I"cdp;T@@ [I"cdr-fetcher;T@@ [I"cdyne-sms-notify;T@ @ [I"ceaser-easing;T@@ [I" cecelia;T@V@ [I" cedexis;T@'@ [I" ceedling;T@@ [I"cef;T@@ [I"ceiling_cat;T@@ [I"ceilingfish-toto;T@@ [I"celebrity;T@'@ [I" celerb;TU;[I" 0.3.17;T@ [I" celerity;T@' @ [I" cellact;T@@@ [I" cello;T@@ [I"cellophane;T@6@ [I"cellphone-address-checker;T@'@ [I" cells;TU;[I" 3.8.6;T@ [I"cells-assets;T@'@ [I"cells-dependencies;T@'@ [I" cell_set;T@@ [I"cells-filters;T@'@ [I"cellular_map;T@@ [I"celluloid;TU;[I" 0.12.4;T@ [I"celluloid-http;T@@ [I"celluloid-io;T@~@ [I"celluloid-zmq;T@&@ [I" celsius;T@'@ [I"celsius-core;T@'@ [I"celt-ruby;T@'@ [I"cemeng-paperclip;T@@ [I" cement;T@O@ [I" ceml;T@- @ [I"censorstrike;T@E@ [I" census;T@@ [I"census_api;T@@ [I"census_shapes;T@@ [I" centaur;T@E@ [I"center_html_elements;T@n@ [I"centipede;T@`@ [I"centostrano;T@!@ [I"central_authentication;T@@ [I"central_bank_of_russia;T@@ [I"central_logger;T@@ [I"central_notifications;T@@ [I"centro-client;T@"@ [I"centro-client-internal;T@'@ [I"centrum_faktur;T@@ [I" cenum;T@@ [I"cep_facil;T@@ [I" ceplivre;T@@ [I"cepmon-nagios;T@6@ [I" cequel;T@J@ [I"cequel-migrations-rails;T@@ [I" ceramic;T@E@ [I" cerbero;T@E@ [I" cerberus;T@@ [I" cereal;T@@ [I"cereal_box;T@E@ [I"cereal_eyes;T@'@ [I"cerealize;T@@ [I" cerebus;T@@ [I"certainty;T@@ [I"cert-auth;T@@ [I"certificate_authority;T@1@ [I"!certificate_authority_sonian;T@@ [I"certificate-depot;T@@ [I"certificate_generator;T@E@ [I"certified;T@`@ [I" certified-net-http-requests;T@E@ [I" certify;T@@ [I"certmaker;T@@ [I" cerubis;T@'@ [I" cetsp;T@`@ [I"c-exercises;TU;[I" 0.0.1.0;T@ [I"cf;T@|@ [I" cfaker;T@@ [I" cfbackup;T@@ [I" cfcm;T@n@ [I"cf_crypto;T@@ [I"cfg;T@@ [I" cfiber;T@E@ [I" cfndsl;T@@ [I" cf_oo;T@@ [I" cfoundry;TU;[I" 0.4.18;T@ [I"cfoundry-IronFoundry;TU;[I" 0.3.40;T@ [I"cfp;T@'@ [I"CFPropertyList;T@ @ [I"CFPropertyList-rails;T@@ [I" cfruby;TU;[I" 1.01;T@ [I"cf_ruby_gems;T@g@ [I"cf-runtime;T@`@ [I"cf-s3-invalidator;T@@ [I"cf-swearjar;T@@ [I"cft_smartcloud;T@@ [I"cf-twitter-bootstrap-rails;T@@ [I" cf-uaac;T@@ [I"cf-uaa-lib;T@@ [I"cg;T@n@ [I" cgen;TU;[I" 0.16.8;T@ [I" cgialib;T@@ [I" cgialt;T@@ [I"cgi-exception;T@@ [I"cgi_fast_escape;TU;[I"2009.06.24;T@ [I"cgi_multipart_eof_fix;T@@ [I" cgi-spa;T@@ [I" cgiup;T@'@ [I" cgraph;T@"@ [I" chagol;T@"@ [I"chai-backbone-rails;T@x@ [I"chai-jquery-rails;T@@ [I"chainable;T@@ [I"chain-boy;T@'@ [I"chaingang;T@@ [I"chain-reactor;T@@ [I" chainsaw;T@@ [I" chairs;TU;[I" 0.94;T@ [I" challah;T@- @ [I"challah-facebook;T@6@ [I"challah-rolls;T@@ [I"challengepost-postmark;T@n@ [I"challenger;T@@ [I"challonge-api;T@@ [I"chameleon;T@@ [I"champagne;T@'@ [I" champu;T@E@ [I" chance;T@@ [I"changa-curb-openuri;T@`@ [I" change;T@@@ [I"change_class;T@@ [I"change_class2;T@@ [I"changeling;T@@ [I"changelog;TU;[I"0.8;T@ [I"change_log;T@@ [I"change_logger;T@@ [I"changelog_memo-parser;T@'@ [I"changelog-notifier;T@'@ [I" changes;T@`@ [I"changesets;T@@ [I"change_watcher;T@`@ [I" changpil;T@'@ [I" chanko;T@ @ [I" channel;T@@ [I"channeladvisor;T@`@ [I"channel_advisor;T@@ [I"channelizer;T@'@ [I"chaocipher;T@'@ [I" chaos;T@@ [I"chaos_calendar;T@6@ [I"chaos_scenario;T@!@ [I" chapman;T@E@ [I" chapter;T@`@ [I"character;T@@ [I"character-encodings;T@@ [I"characterizable;T@@@ [I")charanya-devise_ldap_authenticatable;TU;[I" 0.4.6.1;T@ [I" charcoal;T@@@ [I" chardet;T@- @ [I" charesc;T@@ [I"chargebee;T@;@ [I" chargify;T@@ [I"chargify2;T@I@ [I"chargify_api;T@@@ [I"chargify_api_ares;T@@ [I"chargify-loops;T@@ [I"charguess;TU;[I"1.3.20111021164500;T@ [I" charisma;T@@ [I" charles;T@@ [I"charleston;T@@@ [I" charlie;T@@ [I"charlie-test-a;T@"@ [I"charlock_holmes;T@"@ [I" charm;T@'@ [I"charnames;T@@ [I" chars;T@I@ [I"char_sequencer;T@@ [I"charset_move;T@@ [I"chartbeat;T@I@ [I"chart-candy;T@@ [I"char_tree;T@@ [I"chart-topper;T@E@ [I"charwidth;T@`@ [I" chaser;T@@ [I"chatchart;T@@ [I" chatr;T@@ [I" chatroid;T@@@ [I"chatspire;T@'@ [I"chat_stew;T@'@ [I" chatter;T@@ [I"chatterbot;T@7@ [I"chatterbox;T@-@ [I"chatterbox-email;T@@ [I" chattr;T@e@ [I"chaves-rails;T@@ [I" chawan;T@"@ [I" chbs;T@V@ [I"cheap_advice;T@@ [I"cheap_imports;T@"@ [I"cheap_random;T@@ [I"cheap_skate;T@@ [I"cheaptoad;T@n@ [I"cheaptoad-silas;T@@ [I" cheat;T@ @ [I"cheatorious;T@@ [I" check;T@@ [I"check-age;T@'@ [I"checkboxes;T@'@ [I"checkcheckit;T@+@ [I"check-date;T@"@ [I" checkdin;T@ @ [I" Checked;TU;[I" 3.5.0;T@ [I" checker;T@@ [I"$checkers_game_engine_sgallagher;T@@ [I" check_es;T@E@ [I"checkforiceland;T@E@ [I"check_graphite;T@@ [I"check_http;T@`@ [I"check_http_response;T@E@ [I" checkin;T@@ [I" check_in;T@@ [I" check_js;T@`@ [I"check_late;T@@ [I"checklist;T@@ [I" checkm;T@`@ [I"checkmark;T@`@ [I"checkmate;T@@ [I"check_out;T@E@ [I"checkpoint;T@@ [I"checkpoint_knocker;T@E@ [I"check_resque;T@@ [I"check_slony;T@@ [I"checksummer;T@@ [I"check_tag;T@n@ [I"check-taskr;T@T @ [I" checkup;T@@ [I"check_writer;T@@ [I"check_zfs;T@@ [I"checkzilla;T@@@ [I" cheddar;T@@ [I"cheddargetter;T@`@ [I"cheddargetter_client_rails;TU;[I" 0.1.26;T@ [I"cheddargetter_client_ruby;T@@ [I" Chee;T@x@ [I" cheeba;T@@ [I"cheeky-dreams;T@@ [I" cheers;T@'@ [I" cheese;T@@ [I"cheesecloth;T@@ [I" cheetah;T@@ [I"cheetahmail;T@`@ [I"cheezburger;T@@ [I" cheezmiz;T@E@ [I" chef;TU;[I" 10.16.4;T@ [I" chef_cap;TU;[I" 0.3.23;T@ [I"chef-cooker;T@@ [I"chef-datadog;T@E@ [I"chef-deploy;T@[@ [I"chef-deploy-application;T@"@ [I"chef-expander;T@V:@ [I"chef-extensions;T@x@ [I"chef-failover;T@'@ [I"chef-gelf;T@@ [I"chef-groveio-handler;T@E@ [I"chef-handler-campfire;T@@ [I"chef-handler-datadog;T@`@ [I"chef-handler-elapsed-time;T@6@ [I"chef-handler-flowdock;T@@ [I"chef-handler-graphite;T@@ [I"chef-handler-growl;T@@ [I"chef-handler-librato;T@T @ [I"chef-handler-mail;T@@@ [I"chef-handler-mail-extended;T@|@ [I"chef-handler-profiler;T@E@ [I"chef-handler-s3;T@@@ [I"chef_handler_splunk;T@@ [I"chef-handler-splunk;T@@ [I"chef-handler-splunkstorm;T@N@ [I"chef-handler-twitter;T@[ @ [I"#chef-handler-updated-resources;T@@ [I"chef-handler-users;T@@ [I"chef_helper;T@"@ [I"chef-helpers;T@@ [I"chef-irc-snitch;T@@ [I"chef-jabber-snitch;T@"@ [I"chef-journalist;T@@@ [I"chefkitchen_cli;T@'@ [I"chef_knives;T@@ [I"chef-metrics;T@@ [I"chef-notifier;T@@ [I"chef-readbag;T@'@ [I"chef-recipe;T@E@ [I"chef-rewind;T@@ [I"chef-rundeck;T@@ [I"chef-sandwich;T@@ [I"chef-server;T@V:@ [I"chef-server-api;T@V:@ [I"chef-server-slice;TU;[I" 0.7.16;T@ [I"chef-server-webui;T@V:@ [I"Chef_Solo_Nodes;T@@ [I"chef-solo-wrapper;T@@ [I"chef-solr;T@V:@ [I" chefspec;T@- @ [I"chef-ssl-client;T@@ [I"chef_status_handler;T@@ [I"chef-sudo;T@,@ [I"chef-sync;T@"@ [I"chef-syslog-handler;T@@ [I"chef-vpc-toolkit;TU;[I" 2.8.2;T@ [I"chef-workflow;T@`@ [I"chef-workflow-tasklib;T@`@ [I"chef-workflow-testlib;T@`@ [I"chef-zero;T@' @ [I" chek;T@@ [I" chekku;T@@ [I"chemcaster;T@@ [I"chemicals;T@@@ [I"chemistry;T@@ [I"chemistry-element;T@@ [I"chemistrykit;T@'@ [I"chemistry-temperature;T@@ [I" chemruby;T@9@ [I"chemspider;T@@ [I" cheri;T@@ [I"cherimarie_test_gem;T@'@ [I"cherrybase;T@"@ [I"cherry_kit;T@@ [I"cherrypicker;T@x@ [I" chess;T@@ [I"chessmonger;T@'@ [I" chester;T@x@ [I" cheveret;T@@ [I"chewbacca;T@@ [I"chewbranca-twibot;TU;[I" 0.1.7.5;T@ [I"chh_moretext;T@6@ [I" chicago;T@x@ [I"chicagowarehouse;T@x@ [I"chicanery;T@V@ [I"chickenbox;T@@ [I"chicken_little;T@@ [I"chicken_soup;T@@ [I" chico;T@@ [I" ch_id;T@'@ [I"chida_fib;T@@ [I" chigusa;T@E@ [I"chikkenbukket;T@e@ [I"childlabor;T@@ [I"childprocess;T@@ [I"child-process-manager;T@@ [I"children-of-ie;T@E@ [I" chili;T@@ [I"chili_pdf;T@"@ [I"chili_presentations;T@@ [I"chiliproject_invoice;T@@ [I"(chiliproject_side_by_side_wiki_edit;T@@ [I"chili_videos;T@I@ [I" chill;TU;[I" 8.1.0;T@ [I"chillfile;T@@ [I" chimera;T@"@ [I" chimp;T@"@ [I"chimpactions;T@"@ [I"chimp_contact;T@"@ [I"chimp_light;T@@ [I"chimp_mailer;T@`@ [I" chimps;T@@ [I"chimps-cli;T@@ [I"chimpster;TU;[I" 0.1.21;T@ [I"chimpster-rails;T@6@ [I"chinacache;T@'@ [I"china-express;T@'@ [I"china_region_fu;T@"@ [I"chinchilla;T@I@ [I"chinese_cities;T@'@ [I"chinese_convt;T@@ [I"chinese_lunar;T@@ [I"chinese_permalink;T@ @ [I"chinese_pinyin;T@@ [I"chinese_vocab;T@' @ [I"chinese_zodiac;T@'@ [I" chingu;T@@ [I"chingu_vectors;T@@ [I" chinook;T@@ [I"chinstrap;T@'@ [I"chintala-strongbox;T@@ [I" chip;T@'@ [I" chipgps;T@@@ [I" chipmunk;TU;[I" 5.2.2;T@1[@t;@u;I"i386-mingw32;T[@t;U;[I" 5.3.4.0;T@[@t;U;[I" 5.3.4.5;T@ [@t;@;@ [I"chipmunk-ffi;T@@ [I" chipper;T@"@ [I" chippunk;T@@ [I"chiropractor;T@@ [I" chirp;T@[ @ [I"chirpstream;T@@ [I" chisel;T@E@ [I" chit;T@@ [I" chitin;T@@ [I" chiver;T@@ [I" chloe;T@"@ [I" chlorine;T@@ [I" chmimo;T@@ [I" chocbomb;T@@ [I"chockstone;T@@ [I" choco;T@6@ [I"chocolate_rain;T@"@ [I" choctop;T@@ [I" choice;T@1@ [I" choices;T@@ [I" choke;T@@ [I"chokepoint;T@@ [I" chomchom;T@@ [I" choosy;T@1@ [I"chopmo-ofx;T@@ [I" chopper;T@E@ [I"chopstick;T@@ [I" chords;T@@ [I" chordy;T@@ [I" chore;T@@ [I" chores;T@@ [I"chorn-warden-googleapps;T@@ [I"chosen_rails;T@@ [I"chosen-rails;TU;[I" 0.9.11.1;T@ [I"chosen-rails_ffcrm;T@@ [I"chosen.scss;T@@ [I" chowder;T@[@ [I" chozo;T@@ [I" chrest;T@'@*[I"chrisb-pony;T@'@ [I"chrisjm-paperclip-meta;T@@ [I"chrisle-gattica;T@y@ [I" chrisrec;T@@ [I"christmas-rails;T@'@ [I"chrome_debugger;T@@ [I"chromedriver-helper;T@@ [I"chrome_extension_scaffold;T@@ [I"chromembed_rails;T@@ [I"chrome_packager;T@n@ [I"chrome_remote_debug;T@@ [I" chromium;T@@ [I"chronatog-client;T@@ [I" chronic;T@- @ [I"chronic18n;T@"@ [I"chronic_2001;T@|@ [I"chronic_2011;T@@ [I"chronic_between;T@ @ [I"chronic_cron;T@@@ [I"chronic_distance;T@'@ [I"chronic_duration;T@Q@ [I"chronicle;T@@ [I"chronic-rails;T@E@ [I" chronik;T@@ [I"chronograph;T@'@ [I"chronological;T@@ [I"chronomize;T@@ [I"chrono_model;T@x@ [I" chronos;T@@ [I"chrono_trigger;T@@ [I" chronus;T@'@ [I"chronuscop_client;T@@ [I"chrysalis;T@`@ [I" chub;T@@ [I"chubasaweber;T@'@ [I" chuckdbacon-activedirectory;T@@ [I"chuck-norris;T@`@ [I"chuck-testar;T@'@ [I"ChuckTestar;T@"@ [I" chugalug;T@'@ [I" chuggle;T@E@ [I" chukan;T@`@ [I" chunk;T@'@ [I" chunker;T@@ [I" chunks;T@'@ [I"chunky_baconfile;T@@ [I"chunky_bits;T@'@ [I"chunky_css;T@@ [I"chunky_png;T@N'@ [I"chuparuby;T@@ [I"chupatext;T@@ [I" churn;TU;[I" 0.0.26;T@ [I" chute;T@E@ [I" chutki;T@@ [I" chuusha;T@@ [I"chuyeow-memcached;TU;[I" 0.17.7;T@ [I" ci-18n;T@'@ [I"cia;T@@ [I"ciao_adennis;T@E@ [I" ciat;T@1@ [I" cicero;T@'@ [I" ciclope;T@@ [I" cicphash;T@@ [I" cider;T@@ [I" cielo;T@`@ [I"cieloloja;T@@ [I"cielo-loja;T@`@ [I" cielox;T@@ [I" cigar;T@"@ [I"cigarette;TU;[I"2.3;T@ [I"ci-go-nfo;T@E@ [I" cijoe;T@' @ [I"cijoe-febuiles;T@@ [I"cijoe_passenger;T@@@ [I" cilite;T@@ [I"cim;T@@ [I"cim_attributes;T@@ [I" cimd;T@'@ [I" cinatra;T@@ [I" cinch;T@+@ [I"cinch-basic_ctcp;T@@ [I"cinch-bgg;T@n@ [I"cinch-cleverbot;T@@ [I"cinch-cyberscore;T@@ [I"cinch-dice;T@E@ [I"cinch-downforeveryone;T@@ [I"cinch-fortune;T@'@ [I"cinch-github;T@@ [I"cinch-haiku;T@'@ [I"cinch_hangman;T@@ [I"cinch-identify;T@@ [I"cinch-imap;T@@@ [I"cinch-imdb;T@E@ [I" cinchize;T@@ [I"cinch_joker;T@'@ [I"cinch-last_seen;T@E@ [I"cinch-lmgtfy;T@E@ [I"cinch-memo;T@@@ [I"cinch-quotes;T@"@ [I"cinch-reddit;T@x@ [I"cinch-spotify;T@@ [I"cinch-timebomb;T@E@ [I"cinch-title;T@@ [I"cinch-translate;T@'@ [I"cinch-twitter;T@Q-@ [I"cinch-urbandictionary;T@ @ [I"cinch-url-scraper;T@@ [I"cinch-weather;T@[ @ [I"cinch-yaml-keywords;T@@ [I"cinch-yaml-memo;T@@ [I"cinch-yaml-score;T@@ [I"cinderella;T@@ [I"cine-passion;T@-/@ [I" cinesync;T@@ [I"cineworld;T@@ [I" cinii;T@E@ [I" cinnamon;T@@ [I"c_interpreter;T@@ [I"cipango-jars;T@@ [I" cipher;T@`@ [I"ciphersurfer;T@@ [I" ci_power;TU;[I" 0.0.29;T@ [I" cipr;T@g@ [I"ciquantum;T@@ [I" circle;T@E@ [I"circonus-api;T@'@ [I"circonus-munin;T@@ [I" circuit;T@@ [I"circuit_b;T@s@ [I"circuit_breaker;T@@ [I"circular_list;T@"@ [I"circular_queue;T@@ [I" circus;T@@ [I"circus-deployment;T@!@ [I"ci_reporter;TU;[I" 1.8.3;T@ [I" ciridiri;T@@ [I"cirras-management;T@'@ [I"cirrocumulus;TU;[I" 0.9.9;T@ [I" cirrus;T@@ [I" cisco;T@'@ [I"cisco_decrypt;T@'@ [I"cisco-ise;T@@ [I"cis-language-translator;T@@ [I"ci_status;T@`@ [I" cistern;T@+@ [I" citadel;T@'@ [I" ci_tasks;T@@ [I" citeproc;T@@ [I"citeproc-js;T@V@ [I"citeproc-rb;T@'@ [I"citeproc-ruby;T@@ [I" citier;TU;[I" 0.1.15;T@ [I" cities;T@@ [I"CITIEsForRAILS;T@n@ [I" citizen;T@'@ [I" citrin;T@@ [I" citron;T@x@ [I" citrulu;T@@ [I" citrus;T@@ [I"citrus-compiler;T@&@ [I"citrus-mail;T@@ [I"citrus_test;T@@ [@,=@6@ [I" citygate;T@`@ [I" citygrid;T@@@ [I"city_grid;T@"@ [I"citygrid_api;T@@ [I" cityhash;T@X@ [I"city_hash;T@'@ [I"city_time_zone;T@@ [I"city_watch;T@@ [I" ciuchcia;T@n@ [I" ci_uy;T@'@ [I"civic_info;T@@ [I" ciyuan;T@@ [I"cjdns-lib;T@@ [I"cjdns-tool;T@)@ [I"cjk_converter;TU;[I" 0.0.19;T@ [I" ckan;T@@ [I" ckeditor;TU;[I" 3.7.3;T@ [I"ckeditor4ruby;T@'@ [I"ckeditor_assets;TU;[I" 3.6.2;T@ [I"ckeditor-jess;TU;[I" 3.4.3;T@ [I"ckeditor_rails;TU;[I"4.0;T@ [I"ckeditor-rails;T@@ [I"ckip_client;T@@ [I"ckp_gemcutter_test;T@E@ [I"ckuru-tools;T@3@ [I" clacks;T@@ [I"clafamatt;T@@ [I"clah-rails;T@@ [I" claide;T@@ [I"claire_client;T@"@ [I" clamav;T@@ [I" clamd;T@'@ [I" clamp;T@@ [I"clamshell;T@!@ [I" clamsy;T@@ [I" clan;T@'@ [I" clap;T@@ [I" clarence;TU;[I" 1987.0.0;T@ [I" clarify;T@@ [I" clarity;T@ @ [I"clarity_tracking_number;T@'@ [I" clarus;T@@ [I" clasrip;T@`@ [I"class_actress;T@'@ [I" classad;T@u@ [I"class_attr;T@6@ [I"class_dependencies;T@@ [I"class_factory;T@@ [I"classiccms;T@"@ [I"classicCMS;T@@ [I"classic_presenter;T@@ [I"classified;T@@ [I"classifier;T@ @ [I" classify;T@@ [I"classify_cluster;T@/@ [I"class_inheritable;T@E@ [I"!class_inheritable_attributes;T@E@ [I"classleaks_oauth;T@`@ [I"class_lister;T@@ [I"class_loader;TU;[I" 3.0.8;T@ [I"class-loader;T@@ [I"class_logger;T@s@ [I"classmeta;T@@ [I"classnamer;T@@ [I"class_options;T@'@ [I"classproxy;TU;[I" 0.7.14;T@ [I"classroom;T@E@ [I"class_source;T@E@ [I"class-table-inheritance;T@@ [I" classx;T@n@ [I"classx-pluggable;T@'@ [I" classy;T@N@ [I"classy-adornments;T@@ [I"classy_cas;T@@ [I"classy_enum;T@@ [I"classy_enum-mongoid;T@'@ [I"classyfier;T@1@ [I"classy-inheritance;T@X@ [I"Classy_Name;T@`@ [I"classy_resources;T@@ [I"classy_struct;T@@ [I"claudiob-lastfm;T@'@ [I" claus;T@@ [I"clause_extractor;T@+@ [I" claws;T@N@ [I" clay;TU;[I" 1.7.6;T@ [I"clbustos-rtf;T@@ [I"cl-console;T@@ [I"cld;T@@ [I" cldr;T@@ [I" clean;T@@ [I"clean-bitmask-attribute;T@+@ [I"clean_css;T@`@ [I" cleaner;T@n@ [I"cleanerupper;T@x@ [I"clean_model;T@@ [I"clean-my-vomit;T@"@ [I"clean_ripper;T@E@ [I"clean_room;T@I@ [I"clean_shaved;T@@ [I"clean_test;T@@ [I"clean_text_table;T@'@ [I"clean_thread;T@@ [I"cleanup_sessions;T@'@ [I"clearance;TU;[I" 0.16.3;T@ [I"clearance_crypto;T@`@ [I"clearance_http_auth;T@@ [I"clear_empty_attributes;T@@ [I"clear_eyes;T@|@ [I"clear_helper;T@'@ [I"clearsale;T@6@ [I"cleditor_rails;T@@ [I"cleditor-rails;T@"@ [I"clementine;T@@ [I" clerk;T@@ [I"cleverbot;T@`@ [I"clever_duration;T@`@ [I"clever_elements;T@"@ [I" cleverua_application_config;T@@ [I"cleverua-best_thumbnail;T@@ [I"'cleverua-client_timezone_detection;T@@ [I"cleverua-lockfile;T@@ [I"cleverua-ui_templates;T@'@ [I" clevic;TU;[I" 0.14.3;T@ [I"cli;T@ @ [I" cliaws;TU;[I" 1.7.7;T@ [I" cliblog;T@1@ [I"click2mail;T@@ [I"click_and_send;T@,@ [I"clickatell;T@@ [I"clickatell-ruby19;T@@ [I"clickclient;T@E@ [I"clickclient_scrap;T@t @ [I"ClickSpotter;T@`@ [I"clicktale;T@@ [I"clicky_me;T@'@ [I"cli-colorize;T@O@ [I"client_job_queue;T@@ [I"clientperf;T@1@ [I"client_proxy;T@`@ [I"client_side_autocomplete;T@'@ [I"client_side_validations;TU;[I" 3.2.1;T@ [I"'client_side_validations-formtastic;T@ @ [I"$client_side_validations-mongoid;T@ @ [I")client_side_validations-mongo_mapper;T@*@ [I"$client_side_validations-rails_2;T@W@ [I"(client_side_validations-simple_form;T@@ [I"'client_side_validations-turbolinks;T@@ [I"client_validations;T@@ [I"client-validations;T@@ [I" clieop;T@@ [I" clif;T@@ [I" cliff;T@@ [I" climagic;T@@ [I" climate;T@@ [I"climate_control;T@@ [I"climatempo;T@!@ [I" clindex;T@u@ [I" cline;T@@ [I" clinical;T@@ [I"clinical_trials;T@'@ [I" clink;T@'@ [I" clinode;T@@ [I" clint;T@@ [I" clio;T@@ [I"clio-chronic;T@@ [I"clio-gcal4ruby;T@@ [I"clio-search;T@E@ [I" clip;T@@ [I"clipboard;T@@ [I" clipper;TU;[I" 2.9.0;T@ [I" clippy;T@@ [I" clipster;T@@ [I" cli_rage;T@E@ [I" cliskip2;T@3@ [I" clispell;T@@ [I" clit;T@E@ [I" cli_test;T@@ [I"clitinyurl;T@@ [I" clitt;T@@ [I" clive;T@N@ [I"cli-yui-compressor;T@[ @ [I"clj;TU;[I" 0.0.8.2;T@ [I" cljdotrb;T@'@ [I"cl_linkedin;T@@ [I" cloak;T@'@ [I" cloby;T@@[I" cloc;T@- @ [I"c_location;T@!@ [I" clock;T@[@ [I"clockblock;T@@ [I"clockwork;T@@ [I"clockworkd;T@[@ [I"clockwork_mango;T@@ [I"clockworksms;T@@ [I" clog;T@@ [I" clogger;T@N@ [I"clogger_ext;T@n@ [I" clojure;T@@ [I" clop;T@'@ [I" clortho;T@@ [I"closecall;T@@ [I"closestfib;T@@ [I"closest_fib_gem;T@@ [I"closest_fibonacci;TU;[I" 1.2.13;T@ [I"closest-fibonacci;T@@@ [I"closest-fibonacci-gem;T@@ [I" closure;T@@ [I"closure-compiler;T@@ [I"closure-compilr;T@E@ [I"closure-sprockets;T@@ [I"closure-templates;T@`@ [I"closure_tree;TU;[I" 3.6.9;T@ [I" closync;T@@@ [I" ClothRed;T@@ [I" cloud;T@'@ [I" cloud66;T@@ [I"cloud66-backup;TU;[I" 3.0.25;T@ [I"cloudability;T@'@ [I"cloudalign-cli;T@@@ [I" cloudapp;T@O@ [I"cloudapp_api;T@@ [I"cloudassault;T@@ [I"cloud_assets;T@@ [I"cloud-backup;T@E@ [I"cloudbees;T@@ [I"cloudblocks;T@p@ [I"cloudboot;T@@ [I"cloudbridge;T@@ [I"cloudbuilder;T@1@ [I"cloud_cache;T@ @ [I" cloudcli;T@E@ [I"cloudclone;T@@@ [I"cloud_connect;T@O@ [I"cloud_cost_tracker;T@@@ [I"cloud-crowd;T@@ [I"cloudcrypt;T@@ [I" clouddb;T@'@ [I" clouddns;T@@ [I"cloudelete;T@@ [I"cloud_encrypted_sync;T@@ [I",cloud_encrypted_sync_filesystem_adapter;T@@ [I"$cloud_encrypted_sync_s3_adapter;T@@ [I" clouder;T@J@ [I"cloudfactory;T@n@ [I"cloudfiles;TU;[I" 1.5.0.1;T@ [I"cloudfiles_asset_sync;T@x@ [I"cloudfiles-container-sync;T@@ [I"cloudfiles-push;T@@ [I"cloudfiles-sagamore;T@P?@ [I"cloudfiles-sonian;TU;[I" 1.5.0.2;T@ [I"cloud_financial_officer;T@@@ [I"cloudflare;T@@ [I"cloudfoundry-client;T@@ [I"cloudfoundry-devise;T@@ [I"cloudfoundry-env;T@@ [I"cloudfoundry-graylog2;T@'@ [I"cloudfoundry-jquery-rails;TU;[I" 1.0.19.1;T@ [I"cloudfront;T@'@ [I"cloud_front;T@E@ [I"cloudfront_asset_host;T@@ [I"cloudfront-invalidator;T@@ [I"cloudfront-private;T@@ [I"cloudfront-signer;T@@ [I"cloudfuji;TU;[I" 0.0.46;T@ [I"cloudfuji_paperclip;T@i@ [I" cloudify;T@3@ [I"cloudinary;TU;[I" 1.0.43;T@ [I"cloud_info;T@1@ [I" cloudist;T@@ [I" cloudkey;T@@ [I"cloudkick;T@3@ [I"cloud_kicker;T@E@ [I" cloudkit;T@)@ [I"cloudkit-jruby;T@)@ [I" cloudlb;T@@ [I" cloudler;T@@ [I" cloudlib;TU;[I" 0.3.11;T@ [I"cloud-logger;T@E@ [I"cloudmade;T@@ [I"cloudmade-wu;T@ @ [I"cloud-maker;T@ @ [I"cloudmaster;T@@ [I"cloudmate;T@E@ [I" cloudmk;T@@ [I" cloudpi;T@`@ [I"cloudpi-appender;T@@ [I"cloudpi-appmetric;T@@ [I"cloudpi-runtime;T@@ [I"cloudpi-source;T@`@ [I"cloudprint;T@6@ [I" cloudq;T@V@ [I"cloudq_client;T@@ [I" cloudr;T@'@ [I"cloud_search;T@g@ [I"cloud_search_rails;T@E@ [I"cloudseed;T@@@ [I"cloudservers;T@@ [I"cloud_service;T@@ [I"cloudsheet;T@@ [I"cloudspace_chat_service;T@'@ [I"cloudsponge;T@<@ [I"cloud_stack_client;T@'@ [I"cloudstack_helper;T@@ [I"#cloudstack_rightimage_uploader;T@'@ [I"cloudster;TU;[I" 2.18.0;T@ [I"cloud_storage_sync;T@E@ [I"cloudstrg;T@@ [I"cloudswizzle;T@'@ [I"cloudsync;T@.@ [I"cloud_sync;T@@ [I"cloud-utils;T@@ [I"cloudwatch;T@'@ [I" cloudy;T@@ [I"CloudyScripts;TU;[I" 2.14.64;T@ [I" clouseau;T@E@ [I"clovercms-dashboard;T@@ [I" clown;T@V@ [I"clr;T@'@ [I"cls;T@@ [I" ClsRuby;T@@ [I"clucumber;T@@ [I" clusta;T@E@ [I" cluster;T@7@ [I"clusterable;T@'@ [I"cluster_chef;TU;[I" 3.0.14;T@ [I"cluster_chef-knife;T@@@ [I"clusterer;T@g@ [I"clusterfuck;T@6@ [I"clustering;T@@ [I"cluster_management;TU;[I" 0.7.10;T@ [I" clusto;T@@ [I" clutch;T@'@ [I" clutil;TU;[I"2011.138.0;T@ [I" cmac;T@@ [I"cmaggard-princely;T@@ [I" cmaitchison-bootstrap-rails;TU;[I" 2.0.1.1;T@ [I" cmake;TU;[I" 2.8.7;T@ [I"cmake-heroku;T@,@@ [I"cmassimo-friendly_id;TU;[I" 3.0.4.2;T@ [I"cmd;T@@ [I"cmd_creator;T@'@ [I" cmdeploy;T@@ [I" cmdline;T@E@ [I"cmdline-fu;T@+@ [I"Cmdline_Parser;T@`@ [I"cmd_line_test;T@1@ [I"cmd_matcher;T@"@ [I"cmd-matcher;T@@ [I" cmdopt;T@@ [I" cmdparse;T@@ [I" cmdr;T@@ [I"cmdrkeene-foursquare;T@"@ [I"cmd_tools;TU;[I" 6.0.1;T@ [I" cmecloud;T@'@ [I"cmeiklejohn-aws;TU;[I" 2.3.19;T@ [I" cmess;T@@ [I" cmigemo;T@@ [I"cml;T@@ [I" CModem;T@'@ [I"'cmoran92-activerecord-jdbc-adapter;TU;[I" 1.2.1.1;T@ [I",cmoran92-activerecord-jdbcmssql-adapter;T@u@ [I"cmpa_auth;T@ @ [I"cmpi-bindings;T@@ [I"cms;T@@ [I"cms_engine;T@@ [I"cms-inquiries;T@@ [I" cms-lite;T@@ [I" cmstyle;T@@ [I" cm_tag;T@'@ [I" cmtool;T@x@ [I"cmu_person;T@E@ [I"cmu-person;T@@ [I" cmus;TU;[I" 2.0.4.6;T@ [I" cnab240;T@ @ [I"cnab240santander;T@@ [I"cnb;T@@ [I" cnname;T@@ [I"cnpj_validator;T@@ [I" cn_sms;T@@ [I"cnuconfig;T@@ [I"cnuregexp;T@@ [I" cnvrtr;T@@ [I"co2;T@@ [I"co2_equivalents;T@'@ [I" coalesce;T@'@ [I" coalmine;T@J@ [I"coal-mine-canary;T@'@ [I" coaping;T@'@ [I" coast;T@Q@ [I" cobalt;T@@ [I" cobble;T@6@ [I" cobbler;T@O@ [I"cobot_client;T@@ [I"cobplexity;T@`@ [I" cobra;T@@ [I"cobranding;T@@ [I"cobravsmongoose;T@E@ [I"cobregratis;T@@ [I" cobweb;T@@ [I" cocaine;T@@ [I" cockatoo;T@@ [I" cockpit;TU;[I" 0.2.4.4;T@ [I"cockroach;T@@ [I"cocks_env;T@'@ [I" cocktail;T@@ [I" coco;T@6@ [I" cocoadex;TU;[I"1.6;T@ [I"cocoafish;T@@ [I"cocoapods;T@ @ [I"cocoa-xml;T@@ [I" coconut;T@`@ [I" cocoon;T@@ [I"cocoon_limiter;T@@ [I"coco-rails;T@@ [I" cocu;T@@ [I" cocupu;T@E@ [I"cod;T@@ [I" coda;T@E@ [I"codders-aws-s3;TU;[I"0.6.2.1331721623;T@ [I"codders-curb;T@@ [I"codders-dataset;TU;[I" 1.3.2.1;T@ [I"codders-SystemTimer;TU;[I" 1.2.3.1;T@ [I"codders-trie;T@"@ [I"code2gist;T@@ [I"code2html;T@'@ [I" code2pdf;T@@ [I"code2rubylearning;T@|@ [I"code_analyzer;T@@ [I" codebase;TU;[I" 4.0.12;T@ [I"codebase4;TU;[I" 1.0.16;T@ [I"codebase_api;T@@ [I"codebase-cli;T@@ [I"codebase_san;T@E@ [I" codebits;T@E@ [I" code-box;T@@ [I"code_broker;T@'@ [I"code_buddy;T@@@ [I"codebutler;T@@ [I"code-cleaner;T@@ [I"code_color;T@E@ [I"coded_attribute;T@"@ [I"coded_options;T@@ [I"code_filtered;T@`@ [I"codefumes;T@@ [I"codefumes_harvester;T@@ [I"codegraph;TU;[I" 0.7.21;T@ [I"codehog-google-checkout;T@@ [I"codeigniter-scaffold;T@@ [I"codeigniter_vender;T@@ [I" codeine;T@"@ [I" codejam;T@@ [I"codemerger;T@@ [I"codemirror-rails;TU;[I" 3.00;T@ [I" codename;T@@ [I"code_node;T@+@ [I"code_output;T@'@ [I" codepath;T@@ [I"codependency;T@@ [I"codeplane;T@+@ [I"codeprimate-cancan;T@X@ [I" coder;T@@ [I" coderay;T@@ [I"coderay_bash;T@@ [I"coderay-beta;T@e@ [I"code_rippa;T@n@ [I"coderjoe-sc2ranks;T@6@ [I"coderrr-bluepill;TU;[I" 0.0.44;T@ [I"codersdojo;T@;@ [I"coderunner;TU;[I" 0.11.22;T@ [I"coderwall;T@'@ [I"coderwall_api;T@@ [I"coderwall-api;T@'@ [I"coderwaller;T@@ [I"coderwall-ruby-api;T@"@ [I" codesake;TU;[I" 0.15.1;T@ [I"codeschool;T@@ [I"code_school_course;T@O7@ [I"code-snippets;T@@ [I"code-spec;T@x@ [I"code_spike;T@"@ [I"code_statistics;T@"@ [I"code-statistics;T@`@ [I"code_stats;T@'@ [I"code-stats;T@`@ [I"code_stats2;T@@ [I"codestock;T@+@ [I"code_timer;T@@ [I" codex;T@x@ [I"code_zauker;T@@ [I" codger;T@@ [I"codice_fiscale;T@!@ [I"codice-fiscale;T@n@ [I" codify;T@@ [I" codnar;TU;[I" 0.1.77;T@ [I"codon_table_parser;T@I@ [I" codshit;T@`@ [I" coerce;T@@ [I"coerced_attr_writer;T@@[I"coercible;T@'@ [I" coercion;T@"@ [I"coercionlogic;T@@ [I"coffee_bean;T@@ [I"coffeebeans;T@@ [I"coffeecake;T@'@ [I"coffee_compiler;T@@ [I"coffee_cup;T@"@ [I"coffee-cup;T@@ [I"coffeefile;T@@ [I"coffee-filter;T@`@ [I"coffeegrinder;T@@ [I"coffee-grounds;T@'@ [I"coffee-haml-filter;T@x@ [I"coffeekupper;T@E@ [I"coffeekup_rails;T@'@ [I"coffee_machine;T@@ [I"coffeemaker;T@`@ [I"coffeeplus;T@E@ [I"coffee-processing;T@@ [I"coffee-rails;T@"@ [I"coffee-script;T@ @ [I"coffee-script-pure;T@@ [I"coffee-script-redux;T@'@ [I"coffee-script-redux-source;T@'@ [I"coffeescript-router;T@'@ [I"coffee-script-source;T@@ [I"coffeeshop;T@@ [I"CoffeeTags;TU;[I" 0.0.2.6;T@ [I"coffee_trace;T@"@ [I"coffee-views;T@1@ [I"cofi_cost;T@"@ [I"cog;T@@ [I" coglius;T@E@ [I"cognizant;T@E@ [I" cogs;T@`@ [I"cogsworth;T@@ [I" coherent;TU;[I" 0.6.11;T@ [I" cohesion;T@E@ [I" cohi;T@'@ [I"cohort_analysis;T@@ [I" cohortly;TU;[I" 0.0.93;T@ [I"cohort_scope;T@@ [I" coiasira;T@@@ [I" coin;T@|@ [I" coinage;T@@ [I" coinflip;T@@ [I"coin_rack;T@@ [I"coinslider-rails;T@'@ [I"coinsort.rb;T@@ [I"col;T@@ [I" colander;T@@ [I"coldshoulder;T@@ [I"colectivero;T@E@ [I" coletivo;T@@ [I"coletivo-mongoid;T@"@ [I" colibri;T@@ [I"colissimo_zone;T@!@ [I" collada;T@'@ [I" collage;T@|@ [I"collapsed_routes;T@@ [I"collavoce;T@@ [I" collecta;T@6@ [I"collecta-rb;T@@ [I"collecta_ruby;T@6@ [I" collectd;T@@ [I"collectd2graphite;T@'@ [I"collectd-dsl;T@@ [I"collectd-formatter;T@'@ [I"collectd-interface;T@@ [I"collectd-ipmitool;T@@ [I"collectd-plot;T@'@ [I"collectd-rest-server;T@'@ [I"collection;T@'@ [I"collection_extensions;T@@ [I"collection_json;T@E@ [I"collection-json;T@1@ [I"collections;T@+@ [I"collective;T@@ [I"collective-data;T@@ [I"-collective-intelligence-framework-client;T@@ [I"collector;T@L=@ [I"CollegiateLink;T@E@ [I"collins_client;T@ @ [I"collins_shell;TU;[I" 0.2.17;T@ [I"collins_state;T@@ [I"collmex-ruby;T@@ [I"colloquy_log_to_text;T@u@ [I" colombus;T@`@ [I" colony;T@6@ [I" color;T@@ [I"colorable;T@@ [I" colorant;T@+@ [I"coloration;T@@ [I" colorb;T@V@ [I"colorblind;T@@ [I"colorbox-on-rails;T@E@ [I"colorbox-rails;T@@ [I"color-debug;T@@ [I"color_debug_messages;T@;@ [I" colored;T@@ [I" colorer;T@X@ [I" colorful;T@@ [I"colorful_inspect;T@@ [I"colorful_json;T@@ [I"colorful-logger;T@'@ [I"colorful_tables;T@@ [I"color_fun;T@@ [I"color-generator;T@E@ [I"color-hacker;T@@ [I"colorific;T@@ [I" coloring;T@@@ [I" colorist;T@E@ [I" colorit;T@@ [I" colorize;T@M+@ [I"colorized;T@@ [I"colorizer;T@E@ [I"color-japanese;T@@ [I" colorlog;T@"@ [I"color-logger;T@"@ [I"colormath;T@@@ [I" colorme;T@@@ [I"color_namer;T@@ [I"color_parser;T@E@ [I"color_percent;T@@ [I"colorpicker;T@E@ [I"color_routes;T@@ [I" colors;T@n@ [I"color-schemer;T@@ [I"colorscore;T@"@ [I"colortail;T@@ [I"color_text;T@@ [I"color-tools;T@@ [I" coloryze;T@O@ [I" colorz;T@'@ [I"coloss-rails;T@'@ [I" colour;T@x@ [I"colouringcode-passenger;T@!@ [I"colourlovers;T@'@ [I"columbia-printers;T@`@ [I" columbus;T@@@ [I"column_cryptor;T@@ [I"column_info_reset;T@'@ [I"columnize;T@@ [I"columnizer;T@@ [I"column_prefix;T@'@ [I"column_queries;T@'@ [I"columns_for;T@'@ [I"columns_matcher;T@@ [I"columns-matcher;T@@ [I"columns_on_demand;T@@ [I"column_sort;T@E@ [I"column_timestamps;T@`@ [I" colver;T@@ [I"com;T@x@ [I" comalisp;T@`@ [I" comana;T@@ [I" comatose;T@@ [I"comatose-rubyisbeautiful;T@ @ [I" comb;T@@ [I" combat;T@ @ [I"combination_generator;T@@@ [I"combination_hash;T@@ [I"combinatorics;T@@ [I"combined_time_select;T@@ [I"combo_box;T@3@ [I"combustion;T@@ [I"comcetera;T@@ [I" comedy;T@@@ [I"comfortable_mexican_sofa;TU;[I" 1.6.25;T@ [I"comfy-admin-constructor;T@T @ [I"comfy_blog;T@@ [I"comfy_carousel;T@@ [I"comfy_form_builder;T@@ [I"comfy_gallery;T@6@ [I"comic_vine;T@`@ [I"comix_scraper;T@@ [I" comma;T@ @ [I"comma-heaven;T@@ [I" command;T@'@ [I"commandable;T@@ [I"commandant;T@@ [I"command-builder;T@@ [I"commandeer;T@`@ [I"commander;TU;[I" 4.1.3;T@ [I"command_exec;T@@ [I"command_feedback;T@'@ [I"commandify;T@V@ [I"commandline;T@@@ [I"CommandLine;T@@ [I"commandline2;T@n@ [I"command_line_email;T@"@ [I"commandlineflunky;T@@ [I"command_line_helper;T@E@ [I"command_line_reporter;T@n>@ [I"command-line-utils;T@n@ [I"command_model;T@@ [I"command-monkey;T@@ [I" commando;T@E@ [I"command_recorder;T@'@ [I" commands;T@@ [I"command-set;T@D@ [I"command-t;T@@ [I"command_test;T@'@ [I"command_timer;T@@ [I"command-t-standalone;T@E@ [I"command_wrap;T@@ [I"CommandWrap;T@[ @ [I"Commatose;T@'@ [I" comment;T@@ [I"commentable;T@@ [I"commentatr;T@@ [I"commentem;T@@ [I"commenter_mongoid;T@@ [I"comment-ripper;T@@ [I"CommentUnit;T@'@ [I"commerce-bank-client;T@N@ [I"commission_junction;T@@ [I"commit2jira;T@@ [I"commit_hookr;T@@ [I"commit-msg-url-shortener;T@E@ [I"committed_changes;T@'@ [I"commit_tracker;T@@ [I" commode;T@@ [I"commodore_cox;T@@ [I"common-content;T@@ [I"common_core_parser;T@'@ [I"common-dialogs;T@E@ [I"common_interface;T@@@ [I"common-interface;T@@ [I" commonjs;T@@ [I"common.logging;TU;[I" 2.0.0.0;T@ [I"common_name;T@@ [I"common_numbers;T@|@ [I"common_numbers_rails;T@+@ [I"common-pool;T@@ [I"common_project_tasks;T@@ [I"common_repository_model;T@@ [I"common-ruby-difio;T@O@ [I"common-ruby-monupco;T@@ [I" commons;T@@ [I"commonservicelocator;TU;[I" 1.0.0.0;T@ [I"commons-io-jars;T@9@[I"common_styles;T@'@ [I"commontator;T@@ [I"commonthread-rails;T@@ [I"common_view_helpers;T@@ [I"commonwatir;T@@ [I"communicator;T@@ [I"communist;T@@ [I"community_engine;T@@ [I"commutateurs;T@E@ [I" commute;T@@@ [I" commuter;T@@ [I" compaa;T@@ [I"compactor;T@1@ [I" compages;T@x@ [I"companies-house;T@@ [I"companimation;T@!@ [I"compartbike_board;T@@ [I" compass;T@@ [I"compass-52-plugin;T@!@ [I"compass-960-plugin;T@D@ [I"!compass-adaptive-grid-plugin;T@`@ [I"compass_ae;T@@ [I"compass_ae_console;T@@ [I"compass_ae_starter_kit;T@@ [I"compass-aura;T@@ [I"compass-aurora;T@s@ [I"compass-banners;T@'@ [I"compass-baseline;T@@ [I"compass-blueprint;T@'@ [I"compass-boilerplate-plugin;T@@ [I"compass-bootstrap;T@6@ [I"compass-bootstrap-rails;TU;[I" 0.1.4.0;T@ [I"compass-borderbox;TU;[I" 0.1.2.0;T@ [I"compass-canvas;T@@ [I"compass-capucine;T@@ [I"compass-colors;T@- @ [I"compass-columnal-plugin;T@1@ [I"compass-cornell-plugin;T@@ [I"compass-css-arrow;T@@ [I"compass-cssfault;T@@@ [I"compass-csslint;T@'@ [I"compass-drupal-plugin;T@@ [I"compass-easel;T@E@ [I"compass-edge;TU;[I" 0.9.5.0;T@ [I"compass_extension;T@@ [I"compass-extension-mesh;T@ @ [I"compass-facebox-plugin;T@@@ [I"compass-fancybox-plugin;TU;[I" 1.3.1.1;T@ [I"compass_formalize;T@"@ [I"compass-foundation;T@`@ [I"compass-framelessgrid;T@E@ [I"compass-golden-grid-system;T@@ [I"compass-grid;T@@ [I"compass-griddle;T@@ [I"compass-grid-plugin;T@@ [I"compass-growl;T@`@ [I"compass-h5bp;T@@ [I"compass-holmes;T@`@ [I"compass-html5;T@E@ [I"compass-img-delivery;T@"@ [I"compass-inuit;TU;[I" 4.4.1;T@ [I"$compass-iphone-style-checkboxes;T@@ [I"!compass-jquery-mobile-plugin;T@`@ [I"compass-jquery-plugin;TU;[I" 0.3.3.1;T@ [I"compass-jquery-ui;T@@ [I"compassjs;T@@ [I"compass-jsbundle;T@`@ [I"compass-layouts;T@@ [I"compass-leacocks;T@E@ [I"compass-less-plugin;T@@ [I"compass-lucid-grid;T@@ [I"compass-magick;T@1@ [I"compass-normalize;T@@ [I"compass-normalize-plugin;T@x@ [I"compass-notify;T@'@ [I""compass-photoshop-drop-shadow;T@'@ [I"compass-primary-plugin;T@E@ [I"$compass-querystring_cachebuster;T@E@ [I"compass-rails;T@@ [I"compass-ratchet;T@@ [I"compass-recipes;T@@ [I"compass-respond;T@"@ [I"compass-respond-to;T@@ [I"compass-responsive;T@`@ [I"compass-responsive-embeds;T@"@ [I"compass-retina;T@@ [I"compass-rgbapng;T@`@ [I"compass-rmagick-engine;T@E@ [I"compass-scalablegs-plugin;T@@ [I"compass-slickmap;TU;[I" 0.5.1.1;T@ [I"compass-squaregrid-plugin;T@@ [I"compass-stems;T@'@ [I"compass-stitch;T@'@ [I"compass-susy-plugin;T@B@ [I"!compass.takitapart.framework;T@E@ [I"compass-text-effects;T@@ [I"compass-tfg-plugin;T@E@ [I"compass-theme;T@E@ [I"compass-themes;T@@ [I"compass-thesquaregrid;T@@ [I"compass-treesaver-plugin;T@@ [I")compass-treesaver-theme-basic-plugin;T@@ [I"compass_twitter_bootstrap;T@+@ [I"compass-ui;T@@ [I"compass-validator;T@ @ [I"compass-vgrid-plugin;T@@ [I"#compass-webfontspecimen-plugin;T@@ [I"compass-wordpress;T@+@ [I"compass-wp;T@6@ [I"compatriot;T@@ [I" compete;T@@ [I"Competition;T@E@ [I"complearn;T@@ [I"completecrap;T@@ [I"completeness-fu;T@@ [I"complexity;T@@ [I"components;T@@ [I"composable;T@@ [I" compose;TU;[I" 0.0.0.0;T@ [I" composer;T@n@ [I"composite;T@@ [I"composite_primary_keys;TU;[I" 5.0.10;T@ [I"composite_range;T@@ [I"compositing-array;T@ @ [I"compositing-array-sorted;T@G @ [I"$compositing-array-sorted-unique;T@@ [I"compositing-array-unique;T@G @ [I"compositing-hash;TU;[I" 1.0.15;T@ [I"composition_engine;T@@ [I"compositor_node;T@@ [I"compound_splitter;T@@ [I" compp;T@@ [I"CompraFacil;T@@ [I"comprende;T@@ [I"comprendo;T@'@ [I"compressed-cookie;T@@ [I"compressed-gzipped-assets;T@@ [I"compressible;T@@ [I"compressit;T@;@ [I" comprise;T@@ [I"!com.proofpoint.discovery.cli;T@s@ [I"com.proofpoint.galaxy.cli;TU;[I"0.7;T@ [I"comp_tree;T@;@ [I"computation;T@@ [I" compute;T@@ [I"computron;T@@ [I" comrade;T@@ [I"comradefy;T@`@ [I" comsat;T@V@ [I"comscore_ruby;T@@ [I"comufyrails;T@E@ [I" conan;T@1@ [I"concatenative;T@@ [I"concealer;T@@ [I" concen;T@ @ [I"concensus;T@@ [I" concern;T@I@ [I"concerned;T@+@ [I"concerned_states;T@|@ [I"concerned_with;T@@ [I"concert_calendar;T@@ [I"concerto_client;T@n@ [I"concierge;T@@ [I"concord_cacher;T@@ [I"concordion;TU;[I" 0.9.9.9;T@ [I" concrete;T@@ [I" concur;T@@ [I"concur_connect;T@'@ [I"concurrent;T@I@ [I"concurrent_downloader;T@'@ [I"concurrently;T@`@[I"concurrent-selectable;T@`@ [I"concurrent-sequential;T@!@ [I"concurrent-wrapper;T@'@ [I" cond;T@@ [I" condi;T@V@ [I"conditional_dcommit;T@6@ [I"conditional_delegate;T@'@ [I"Conditionator;T@@ [I"condition_builder;T@@ [I"conditioner;T@@ [I"conditions_fu;T@@ [I" condo;T@@ [I"condo_active_record;T@@ [I"condo_interface;T@@ [I" condom;T@@ [I"condo_mongoid;T@@ [I" condor;T@O@ [I"conductor;T@@ [I" conduit;T@@ [I"conduit4r;T@'@ [I" cone;T@"@ [I" coneco;T@@ [I" conf;T@@ [I"confabulator;T@@ [I"confection;T@@ [I"confed_scraper;T@E@ [I"conference_manager-ruby;T@@ [I" confetti;T@@ [I" confide;T@'@ [I"confidence;T@@ [I" config;T@'@ [I" configa;T@@ [I"configable;T@"@ [I"config_accessor;T@@ [I"configarrr;T@@@ [I"configatron;TU;[I" 2.9.1;T@ [I"configatron_plus;T@@ [I"config_context;T@@ [I"configdir;T@@ [I"configdsl;T@@ [I"config_file;T@@ [I"config-file-loader;T@@@ [I"configfiles;T@@ [I"config_fu;T@6@ [I"config_fun;T@x@ [I"configger;T@'@ [I"configgler;T@+@ [I" configgy;T@6@ [I"configict;T@'@ [I"configify;T@E@ [I" configit;T@6@ [I"config_leaf;T@E@ [I"configlet;T@ @ [I"configliere;T@8@ [I"configloader;T@@ [I"config_loader;T@@ [I"config_logic;T@`@ [I" configly;T@'@ [I"config_man;T@'@ [I"configmanager;T@@ [I"config-me;T@n@ [I"config_newton;T@`@ [I"config_object;T@@ [I"configoro;T@@ [I"configparser;T@@ [I"config_parser;T@u @ [I"config-parser;T@@ [I" configr;T@@ [I"config-rc;T@'@ [I"configreader;T@E@ [I"config_reader;T@@ [I" configru;T@@ [I" configs;T@`@ [I"config_set;T@+@ [I"config_spartan;T@@ [I"configster;T@@ [I"config-store;T@@ [I"configtoolkit;T@J@ [I"configulations;T@I@ [I"configura;T@`@ [I"configurability;T@N@ [I"configurable;T@@ [I"configurable_engine;T@ @ [I"configurate;T@'@ [I"configuration;T@@ [I"configuration-blocks;T@@ [I"configuration_dsl;T@@ [I"configuration_loader;T@@ [I"configurator;T@N@ [I"configurator2;T@@@ [I"configuratron;T@'@ [I"configure;T@@ [I"configured;T@W@ [I"configure_me;T@@ [I"configurer;T@@ [I"configure-s3-website;T@@ [I"configurize;T@E@ [I" configus;T@"@ [I"configusta;T@'@ [I"configutron;T@@ [I"configvars_rails;T@J@ [I" configy;T@;@ [I"confirmable;T@^@ [I"confirm_deploy;T@@ [I" confit;T@@ [I"confiture;T@+@ [I" confkit;T@@ [I" conflict;T@@ [I"conflict_detector;T@'@ [I"confluence-client;T@V@ [I"confluencer;T@@ [I" conform;TU;[I"1.0.0.0.530;T@ [I"conformist;T@@ [I"confparser;T@@ [I"confrider;T@@ [I"confstruct;T@[@ [I"confstruct-rails;T@@ [I" confu;T@'@ [I"confucious;T@E@ [I"confuddle;T@@ [I" confy;T@@ [I" congo;T@`@ [I" congress;T@@ [I"congress-scrapper;T@@ [I" conio;T@@ [I" conject;T@`@ [I"conjugate;TU;[I" 1.4.10;T@ [I" conjugue;T@`@ [I" conjur;TU;[I" 0.4.37;T@ [I" conker;T@&@ [I" conman;T@@@ [I" connect;T@@ [I"connect_four;T@@ [I"connection_manager;T@@ [I"connection_ninja;T@@ [I"connection_pool;T@@ [I"connections;T@@@ [I"connect_with;T@@ [I"connexionz;T@@ [I"connfu-client;T@1@ [I" connie;T@`@ [I" conquest;T@'@ [I"conquest-gtk;T@!@ [I"conrad_filer;T@E@ [I" conred;T@[@ [I"consadole_aggregator;T@@ [I"conscience;T@@ [I"consignment;T@@ [I"consistency_fail;T@I@ [I"consistent_company;T@n@ [I"consistent_hashing;T@`@ [I"consistent-hashing;T@@ [I"consistent_hashr;T@@ [I"consolation;T@E@ [I" console;T@@ [I"consoleappsupport;T@@ [I"console_command;T@E@ [I"console_editor;T@@ [I"consolefm;T@@ [I"console-mux;T@@ [I"console_renderer;T@"@ [I"console-text-formatter;T@E@ [I"console_tweet;T@|@ [I"console_update;T@1@ [I"console_util;T@@ [I"console-vmc-plugin;T@"@ [I"consolize;T@@ [I" const;T@@ [I"constable;T@@ [I"constable-reggie;T@@ [I"constance;T@@ [I"constant_cache;T@E@ [I"constant_contact;T@@ [I"constant-contact-ruby;T@[@ [I"constantine;T@'@ [I"constantinople;T@I@ [I"constantize;T@@ [I"constantrecord;T@@ [I"constant-redefinition;T@@ [I"constants;T@`@ [I"constant_table_saver;T@O@ [I"constellation;T@`@ [I"!constellation-authentication;T@E@ [I" constellation-authorization;T@@ [I"constellation-base;T@"@ [I"const_enum;T@@ [I"constrainable;T@@ [I"constraint;T@!@ [I"ConstraintSolver;T@@ [I"construct;T@@ [I"constructable;T@x@ [I"constructor;T@O@ [I" consul;T@@ [I" consular;T@@ [I"$consular-another-gnome-terminal;T@@ [I"consular-gnome-terminal;T@`@ [I"consular-iterm;T@@ [I"consular-osx;T@@ [I"consular-terminator;T@`@ [I"consulta_cep;T@"@ [I"consumer-broadband-test;T@@ [I" contact;T@@ [I"contactable;T@@ [I"contact_csv;T@@ [I"contact_form;T@E@ [I"contact_forms;T@V@ [I"contact-list;T@I@ [I"contactlist-client;T@@@ [I"contactology;T@@@ [I"contactology-mailer;T@"@ [I" contacts;T@u"@ [I"contacts19;T@u"@ [I"contacts_19;T@@ [I"contacts_client;T@@ [I"contacts_cn;TU;[I" 1.2.8;T@ [I"contacts_cn_19;T@@ [I"contacts-gdiggs;T@@@ [I"contacts-rscheepmaker;T@@ [I"contact_us;T@x@ [I" contador;T@O@ [I"containerize_me;T@6@ [I" contao;T@$@ [I"contemporary_words;T@E@ [I"contentable;T@@ [I"contentator;T@@ [I"content_blocks;T@@ [I"contentbofu;T@@ [I"content_data;T@@ [I"contentdm;T@@ [I"!content-editing-movie-player;TU;[I" 0.38.0;T@ [I"content_engine;T@`@ [I"contentflow;T@@ [I"content_focus;T@@ [I"content_for_in_controllers;T@E@ [I"contentkitty;T@'@ [I"contentment;T@@ [I"content-preview;T@`@ [I"content_scrapper;T@@ [I"content-security-policy;T@6@ [I"content_server;T@@ [I"content_skipper;T@V@ [I"content_spinning;T@E@ [I"content_type;T@ @ [I"content_urls;T@@ [I" contentz;T@@ [I" contest;T@6@ [I"contestify;T@@ [I" context;T@@ [I"context_aware_scope;T@`@ [I"context_help;T@@ [I"contextify;T@@ [I"contextio;T@@ [I"context-io;T@'@ [I" contextr;T@@ [I"contextsetup;T@@ [I"contextual;T@E@[I"contextuality;T@@ [I"contextualize;T@@ [I"contextually;T@@ [I"contextual_models;T@'@ [I"continents;T@"@ [I"continued_fractions;T@ @ [I"continuous4r;T@"@ [I"continuum;T@'@ [I" contour;T@x@ [I"contour-minimalist;T@+@ [I""contract_acceptance_framework;T@@ [I"contracted;T@'@ [I"contractor;T@@ [I"contracts;T@@@ [I"contracts.coffee-source;T@@ [I"contractual;T@E@ [I"contrails;T@@ [I" contrast;T@@ [I"contribulator;T@@ [I"contributions;T@@ [I"contributors;T@!@ [I" contrive;T@'@ [I" control;T@' @ [I"control_center;T@@ [I"control_group;T@"@ [I" controll;T@@ [I"controlled_quit;T@@ [I"controller_concerned;T@"@ [I"controller_filter_logging;T@V@ [I"controller_helpers;T@(@ [I"controller_observer;T@'@ [I"controller_support;T@@ [I"controller-usage;T@'@ [I"control_tower;T@@ [I"contxtlservice;T@`@ [I" conv;T@"@ [I"convenient-actionpack;T@'@ [I"convenient_scopes;T@-/@ [I"conventional_models;T@@ [I"conversational;T@@ [I"conversations;TU;[I" 0.0.2.2;T@ [I" converse;TU;[I" 1.0.26;T@ [I"conversio;T@@@ [I"conversion;T@`@ [I"conversions;T@*@ [I"convertable_values;T@@@ [I"Converter;TU;[I" 1.1.3.0;T@ [I"convert_global_env;T@@ [I"convertible;T@E@ [I" convertr;T@`@ [I"convert_theme;T@@ [I" convey;T@[ @ [I"convey_client;T@@ [I" conveyor;T@@ [I"convinius;T@@ [I" convore;T@'@ [I"convore-simple;T@@ [I" convoyer;T@E@ [I" conway;T@@ [I" conyard;T@1@ [I"cookbook-client;T@@ [I"COOKBOOKS;T@E@ [I"cookie_cutter;T@@ [I"cookie_extractor;T@@ [I"cookiejar;T@@ [I"cookieless;T@@ [I"cookiemonster;T@'@ [I"cookie-proxy;T@'@ [I"cookie_requirement;T@@ [I"cookies_manager;T@@ [I"cookie_tracker;T@N@ [I" cooking;T@`@ [I" cookler;T@@ [I"cool_debug;T@@ [I" cooler;T@@ [I"coolerator.vision;T@ @ [I"cool_extensions;T@E@ [I" cool.io;T@@ [I"cool.io-http;T@@ [I"cool.io-websocket;T@+@ [I" coolline;T@x@ [I"cooloptions;T@@ [I"coolstrap-generator;T@+@ [I" coop;T@@ [I" coop_cli;T@'@ [I"coop_to_ofx;T@@ [I" coopy;T@ @ [I"coordinate;T@'@ [I"coordinate-converter;T@@ [I" coordinates_transformations;T@'@ [I"cop;T@'@ [I" copa;T@'@ [I"copath_parser;T@'@ [I"copiagenda4omf;T@'@ [I" copian;T@ @ [I" copier;T@@ [I"copies_omniauth;T@@ [I"copious-fedex;T@@ [I" copland;T@@ [I"copperegg;T@@ [I" coppola;T@@ [I" cops;TU;[I" 0.2.0.7;T@ [I" copy;T@@ [I" copybar;T@'@ [I" copycat;T@@ [I"copycopter_client;T@@ [I"copycouch;T@@ [I" copydb;T@@ [I"copymachine;T@'@ [I"copy_machine;T@@ [I"copy_my_conf;T@'@ [I"copypaste;T@e@ [I" copyrb;T@@ [I"copyright;T@|@ [I"copyright_author;T@'@ [I"copyright_date_range;T@`@ [I"copyrighter;T@@ [I"copyright-header;T@ @ [I"copyright_helper;T@@ [I"copyscape;T@"@ [I" cora;T@"@ [I" cord;T@@ [I"cordawyn-iso8583;T@@@ [I" cordon;T@@ [I" core;T@@ [I"coreaudio;T@@ [I"core_data;T@"@ [I" core_ex;TU;[I" 0.6.6.3;T@ [I"core_extensions;T@"@ [I"corefoundation;T@@ [I"core-generators;T@E@ [I"core_image;TU;[I" 0.0.3.5;T@ [I"core-source;T@@ [I"core_utilities;T@6@ [I" corgi;T@@ [I"corkboard;T@@ [I"cornell_ldap;T@@ [I"cornell_netid;T@@ [I"cornerstone;T@@ [I"cornerstone-source;T@|@ [I" cornfig;T@@ [I"cornflakeomnisocial;TU;[I" 0.1.2.7;T@ [I" cornify;T@@ [I" corn_js;T@8@ [I"corntrace-cancan;T@X@ [I"corntrace-fakeweb;T@} @ [I"corntrace-nifty-generators;T@@ [I"corntrace-rack-contrib;T@ @ [I" coronet;T@E@ [I" corpus;T@E@ [I" corrails;T@@ [I"!correct-horse-battery-staple;T@@ [I"correct_link;T@'@ [I" correios;T@@ [I"correios-frete;T@e@ [I"correios-sro;T@z@ [I"correios-sro-xml;T@`@ [I"correios-ws;TU;[I"6.1;T@ [I"correlate;T@`@ [I"correlation;T@@ [I" corrency;T@@ [I"correspondence;T@'@ [I" corrupt;T@@ [I" cors;T@@ [I" corset;T@'@ [I"cortex-reaver;T@@ [I" corto;TU;[I" 0.99.0;T@ [I" corundum;TU;[I" 0.0.25;T@ [I" corus;T@@ [I" corx;T@@ [I"coryodaniel-milton;T@@ [I"coryodaniel-stories;T@+@ [I" cosell;T@E@ [I" cosm;T@@ [I" cosmo;T@@ [I" cosmos;T@@ [I"cosmos_authentication;T@@ [I" cosm-rb;TU;[I" 0.2.04;T@ [I"cossincalc;T@G @ [I"costagent;T@,@ [I" cotendo;T@"@ [I" cotta;T@@ [I" cotton;T@@[I"cottontail;T@|@ [I"cotweet-authlogic;T@r6@ [I"cotweet-bitly;T@@ [I"cotweet-fakeweb;T@@ [I"cotweet_koala;T@X'@ [I"cotweet-nestful;T@@ [I" couch;T@@ [I" couchapp;T@@ [I"couchbase;T@u@ [@H@u@ [I"couchbase-docstore;T@+@ [I"couchbase-documentstore;T@@ [I"couchbase-git-scribe;TU;[I" 0.1.1.2;T@ [I"couchbase-jruby;T@'@ [I"couchbase-memcached;T@} @ [I"couchbase-model;T@@ [I"couchbase_model_logging;T@n@ [I"couchbase-oauth2;T@'@ [I"couchbase-patterns;T@@ [I"couchbase-settings;T@@ [I"couchbase-structures;T@@ [I" couchc;T@@ [I"CouchCamping;T@@ [I"couchchanges;T@!@ [I"couch-client;T@@@ [I"couch_cloner;T@@@ [I"couch_crumbs;T@E@ [I" couchdb;T@I@ [I"couchdb_acts_as_list;TU;[I" 0.0.1.2;T@ [I"couchdb-client;T@@ [I"couchdb-ruby;T@@ [I"couchdb-utils;T@'@ [I"couchdiff;T@@ [I"couch_docs;T@ @ [I" couched;T@@ [I"couch_foo;T@u!@ [I"couch_i18n;T@@ [I" couchio;T@@ [I"couch_loafer;T@@ [I"couch-migrate;T@@ [I"couchmodel;T@|@ [I"couchobject;T@@ [I"couchpack;T@I@ [I"couch_photo;T@n@ [I" couchpop;T@`@ [I"couchpopulator;T@@ [I"couch_potato;T@@ [I"couch_potato-extensions;T@n@ [I"couch_potato-rails2;TU;[I" 0.5.10;T@ [I"couchproxy;T@@ [I"couch_publish;T@@ [I"couch-quilt;T@@ [I" couchr;T@@ [I"couch-replicate;T@@ [I"couch-replicate-helper;T@@ [I"couchrest;T@;@ [I"couchrest_casted;T@'@ [I"couchrest_casted_view;T@'@ [I" couchrest_extended_document;T@@ [I"#couchrest_localised_properties;T@`@ [I"couchrest_model;T@x@ [I"couchrest_model_config;T@I@ [I"couchrest_model-radiant;T@@ [I"couchrest_model_search;T@@ [I"couchrest_model_slug;T@@ [I"couchrest_session_store;T@E@ [I"$couchrest-uniqueness-validation;T@@ [I"couch_scheduler;T@@ [I"couch-shell;T@V@ [I"couchsphinx;T@!@ [I"couch_surfer;T@@ [I"couch_tomato;T@@ [I" couchup;T@@ [I"couch_view;T@`@ [I"couch_visible;T@@ [I"couch-warmer;T@O@ [I"couchwatcher;T@`@ [I" coulda;T@@ [I"coulda_web_steps;T@^%@ [I" coulis;T@@ [I"countdown;T@@ [I"countdowner;T@@ [I"countdownlatch;T@@ [I"countdownobj;T@@ [I"counted_each;T@"@ [I" counter;TU;[I" 0.5.31;T@ [I"counter_cachier;T@@ [I"counter_culture;T@g@ [I"counterfeit;T@@ [I" counters;T@ @ [I"counter_server;T@@ [I" countloc;T@x@ [I"countries;T@@ [I"countries_and_languages;T@@ [I" country;T@'@ [I"country_codes;T@@ [I"country_code_select;T@@ [I"country-code-select;T@!@ [I"country_select;T@;@ [I"country-select;T@@ [I"countryselect0r;T@'@ [I"country-select-engine;T@`@ [I"country-select-iso;T@@ [I"coupa-libxml-ruby;T@T @ [I" coupler;T@@[I" coupon;T@'@ [I" courbet;T@E@ [I" courier;T@,@ [I"coursera_downloader;T@@ [I"course_scraper;T@'@ [I" courtier;T@@ [I" covenant;T@@ [I" cover;T@@ [I" coverage;T@[ @ [I"coverage-printer;T@@ [I"coveralls;T@u @ [I" cover_me;T@N@ [I" cover-up;T@!@ [I" covetous;T@6@ [I" cowboy;T@E@ [I"cowboycoded;T@"@ [I" cowsay;T@@ [I"cowtech-extensions;TU;[I" 2.7.3;T@ [I"cowtech-js-rails;T@u"@ [I"cowtech-lib;T@@ [I"cowtech-rails;T@i@ [I" coyote;T@N@ [I" coypond;T@[@ [I" cozaepp;T@`@ [I" cozy;T@'@ [I"cp;T@@ [I"cpa;T@@ [I" cpanel;T@@@ [I"cpe;T@@ [I"cpf;T@@ [I" cpf_cnpj;T@@ [I"cpf_faker;T@@ [I"cpfgenerator;T@@ [I"cpf_validator;T@@ [I" cpgem;T@'@ [I"cpi-event-connector;T@@ [I"cplus2ruby;T@N@ [I"cplusplus;T@@ [I"cpp_engine;T@"@ [I" cppthor;T@'@ [I"cpr;T@`I" darwin;T[@I@`@![I"cpr_adressematch;T@@ [I"cpruntime;T@e@ [I"cps-client;T@V@ [I" cpsms;T@+@ [I" cpsn;T@@ [I" cpspec;T@'@ [I"cpu;T@"@ [I" cpuid;T@x@ [I"cpu-memory-stats;T@@ [I"cql;T@g@ [I" cql-ruby;T@e@ [I" crab;T@V@ [I" crabby;T@E@ [I" crack;T@@ [I" crackoid;T@@ [I" crackr;T@@ [I" crackup;T@@ [I" craft;T@@ [I" crafty;T@@ [I"crafty-rails;T@'@ [I" cra.ge;T@@ [I" crags;T@ @ [I" craigler;T@ @ [I"craigp-smartcall;T@E@ [I"craigslist;T@@ [I" cram_md5;T@@ [I" cramp;T@sA@ [I" crampy;TU;[I" 0.15.3;T@ [I" crane;T@I@ [I" crank;T@@ [I" crankin;T@@ [I"crankshaft;T@E@ [I" cranky;T@@ [I"crapapult;T@@ [I"crappycounter;T@@ [I"crappy_gem;T@`@ [I"crapsgame;T@@ [I"crapshoot;T@@ [I"crashdesk;T@[@ [I"crashdesk-rack;T@@ [I"crashdesk-rails;T@+@ [I" crasher;T@'@ [I"crashfeed;T@@ [I"crash_hook;T@@ [I" crashlog;T@ @ [I"crashlog-auth-hmac;T@@ [I"crash-watch;T@;@ [I" cratchit;T@@ [I" crate;T@@ [I"crate_api;T@@@ [I" crawdad;T@@ [I" crawl;T@@ [I"crawlable;TU;[I" 0.0.1.8;T@ [I" crawler;T@@ [I"crawler-engine;T@@ [I"crawlfish;T@@ [I"crawl_kit;T@@ [I" crayfish;T@[@ [I" crayon;T@@ [I"crazycode-cap-recipes;T@J@ [I"crazydoll;T@'@ [I"crazy_harry;T@@@ [I"crazy_hash_filter;T@@ [I"crazy_ivan;T@u"@ [I"crazylegs;T@@@ [I"crazy_validators;T@@ [I"crb;T@@ [I" crc32;T@@ [I" cream;T@' @ [I"cream-cheese;T@'@ [I"creatary-sdk;T@@ [I" create;T@6@ [I"created-and-updated-by;T@6@ [I"create-new;T@@ [I"create-rails-dev-db;T@@ [I"create_rails_mysql_db;T@@ [I"createsend;T@@ [I"create_table;T@@ [I"create_valid;T@@ [I"creation_report;T@@ [I" creator;T@@ [I" creators;TU;[I" 0.91;T@ [I" creature;T@@ [I"creature_feature;T@@ [I"credentials;TU;[I" 2.4.3;T@ [I"creditcard;T@@ [I"credit_card_field;T@B@ [I"credit_card_icons;T@`@ [I"credit_card_support;T@@ [I"credit_card_type_field;T@@ [I"credit_card_validator;T@@ [I"credit_officer;T@@ [I" credo;T@@ [I" creeper;T@@ [I" creepin;T@'@ [I" creepy;T@V@ [I" cregexp;T@@ [I" crender;T@E@ [I" creng;T@@ [I" creole;T@@ [I" crequire;T@'@ [I" crewait;T@@ [I" crfpp;T@"@ [I"cri;T@9@ [I" cricinfo;T@@ [I" crisp;T@@ [I"crispy-grid;T@@ [I"crispy-mobile;T@@ [I" criteria;T@@ [I" critique;T@@ [I"critsend_events;T@@ [I" crm114;T@@ [I"crnixon-jekyll;T@@ [I"cro;T@;@ [I" croc;T@@ [I" crock;T@@ [I" crocodoc;T@@ [I"crocodoc-ruby;T@'@ [I"crocoduck;T@@ [I" cromwell;T@x@ [I"crondonkulous;T@@ [I" cronedit;T@@ [I" cronic;T@@ [I" cronin;T@"@ [I"cronjobber;T@@ [I" cronos;T@x@ [I" cronque;T@'@ [I"cron-spec;T@@@ [I" crontab;T@E@ [I"crontab-parser;T@@ [I"crontabwrap;T@@ [I" crontest;T@@ [I"cron_validator;T@@ [I"cron_wrapper;T@3@ [I"cropimage_riffpad;T@`@ [I"cropped_paperclip;T@@ [I"croptoelie;T@@ [I" cross;TU;[I" 0.30.0;T@ [I"crosscase;T@'@ [I"crossfilter_rails;T@@ [I"crossfilter-rails;T@@ [I"crossing_guard;T@@ [I" crossref;T@"@ [I"crossroads;T@'@ [I"crossroads_capistrano;TU;[I" 1.4.43;T@ [I"crossroadsjs-rails;T@@ [I"cross-stub;T@,@ [I" crosstab;T@@@ [I"crosswords;T@@ [I" croudia;T@'@ [I" croupier;T@@ [I" crow;T@@@ [I" crowbot;T@@ [I" crowd;T@J@ [I"crowd-auth;T@"@ [I"crowdbase;T@`@ [I"crowdblog;T@@ [I"crowd_client;T@@ [I"crowd-client;T@|@ [I"crowdflower;T@^%@ [I"crowdflower-rtfm;T@@ [I"crowdin-api;T@@ [I"crowdin-cli;T@@ [I"!crowdint_acts-as-taggable-on;T@p#@ [I"crowdint_auth;T@@ [I"crowdint_omniauth-github;T@6@ [I" crowdmob;T@"@ [I"crowd_rails;TU;[I" 0.5.11;T@ [I"crowd_rest;T@E@ [I"crowd-stefanwille;T@VK@ [I"crowd_support;T@@ [I" crown;T@`@ [I" cruby;T@'@ [I"crucigrama;T@@ [I"crudcontroller;T@@@ [I" crud_for;T@@ [I" crudify;T@n@ [I" crudspec;T@@ [I" crudtree;T@@@ [I" CRUDtree;T@`@ [I" cruft;T@'@ [I"cruiseface;T@@ [I"cruisestatus;T@@ [I" crumble;T@6@ [I" crumby;T@x@ [I" crummy;T@ @ [I" crunch;T@@ [I"crunchbase;T@@ [I" crush;T@@ [I" crusher;TU;[I" 0.0.8.4;T@ [I"crusher-eventmachine;TU;[I" 0.12.11;T@ [I"crushserver;T@@ [I" crux;T@'@ [I" cruyff;T@@ [I" crxmake;T@1@ [I" cryml;T@'@ [I" cryo;T@'@ [I" crypt;T@T @ [I" crypt19;T@u@ [I" crypt3;T@T @ [I"crypt-fog;T@@ [I"crypt-isaac;T@e@ [I"cryptkeeper;T@^@ [I"crypt_keeper;T@@ [I"crypt_keeper_providers;T@@ [I" crypto;T@@ [I" crypto64;T@@ [I"crypto_laser;T@@ [I" cryptopp;T@"@ [I"cryptopro;T@`@ [I"cryptosphere;T@@ [I"crypt-rot13;T@W@ [I"crypt-tea;T@@ [I" crystal;T@ @ [I"crystalcell;T@@ [I"crystal_ext;T@@ [I"crystal-ext;T@@ [I"crystalizer;T@I@ [I"crystalmeta;T@' @ [I"cs210-gcal4ruby;T@@ [I"cs210-gdata4ruby;T@@ [I" cs50;T@6@ [I" CSApi;T@@ [I"csd;T@@ [I"csdn-tire;T@@ [I"cs-em-hiredis;T@@@ [I" cses;TU;[I" 0.3.0.0;T@ [I" cs_fix;T@`@ [@K@@@ [I"cshaml-sprockets;T@@ [I" cs-httpi;TU;[I" 0.9.5.2;T@ [I"csl-styles;T@@ [I"csp;T@'@ [I" csp_easy;T@@ [I"csp_easy_rails;T@@ [I"cspec-rails;T@`@ [I" csquare;T@@ [I"csquare-cast;T@I@ [I" csquares;T@@ [I"css;T@"@ [I"css2cocoa;T@@ [I" css2less;T@@ [I"css2stylus;T@"@ [I"css3buttons;T@@ [I"css3buttons-rails;T@@ [I"'css3-microsoft-metro-buttons-rails;T@'@ [I" css3-now;T@@@ [I"css3-progress-bar-rails;T@x@ [I"css3-ribbons;T@@ [I"css3slideshow;T@`@ [I"css-annotate;T@O@ [I"css-annotated;T@@ [I"css-bootstrap-rails;T@n@ [I"css_browser_selector;T@@ [I"css_builder;T@+@ [I"css_canon;T@@ [I"css_convertor;T@@ [I"cssdryer2;T@+@ [I"cssensible;T@@ [I" csses;T@@ [I" cssex;T@@ [I" css-get;T@@ [I"css_graphs;T@@ [I" css_grid;TU;[I" 2.7.12;T@ [I"css_image_embedder;T@@ [I"css_inliner;T@@ [I"css-lightbox;T@@ [I" css_lint;TU;[I" 0.9.9.1;T@ [I"csslint-source;TU;[I"2012.03.16;T@ [I"cs_sln_graph;T@@ [I" cssmenu;T@@ [I" cssmin;T@@ [I"cssmin-ebtd;T@@ [I"cssminify;T@@ [I"css_naked;T@@ [I"csso-rails;T@'@ [I"css_parser;T@@ [I"css_parser_1.1.0;T@@ [I"css_parser_master;T@u"@ [I" cssplop;T@`@ [I" csspool;T@@ [I"csspool-st;T@@ [I" csspress;T@"@ [I"css_press;T@@ [I"css_primer;T@!@ [I"css_selector;T@@ [I"css_shapes;T@@ [I"css-slideshow;T@@ [I"css-snippets;T@@ [I"css-social-buttons-rails;T@E@ [I"css_sortor;T@E@ [I"css_splitter;T@'@ [I"css_sprite;T@@ [I"css-spriter;T@@ [I"css_toolkit;T@@ [I" csstree;T@'@ [I" css_tt;T@@ [I"css_views;T@J@ [I" csswaxer;T@V@ [I" csteamer;T@@ [I"cstore_workplace;T@@ [I" cstruct;T@@ [I"$csun-student-affairs-supermodel;T@|@ [I" csv2json;T@@ [I"csv2plist;T@E@ [I" csv2qif;T@@ [I" csv2sql;TU;[I"0.3.070927135848;T@ [I" csvash;T@@ [I"csv-as-map;T@'@ [I"csv_builder;T@ @ [I"csv-check;T@'@ [I"csv_combine;T@@ [I"CSV-datagen;T@`@ [I" csv_db;T@@ [I"csv_export;T@'@ [I"csv_filter;T@@ [I"csv_from_table;T@@ [I" csvgen;T@@ [I" csvget;T@x@ [I" csv-hash;T@@@ [I" csvify;T@@ [I"csv_import;T@'@ [I"csv-import;T@'@ [I"csv_importer;T@"@ [I"csv_in_zip;T@@ [I" csvision;T@@ [I" csvkit;T@"@ [I" csv_lazy;T@E@ [I"csv_magic;T@@ [I"csvmapper;T@"@ [I"csv_mapper;T@E@ [I"csv-mapper;T@@ [I" csvobj;T@@ [I" csv-omg;T@@ [I"csvparser;T@`@ [I"csv_pirate;TU;[I" 5.0.7;T@ [I"csv_query;T@@ [I"csv_rails;T@@ [I"csv_reader;T@E@ [I"csv_record;T@+@ [I"csv_renderer;T@'@ [I"csv_report_generator;T@@ [I" csvscan;T@@ [I"csvscan-enphase;T@`@ [I"csv_schema;T@@ [I"csv_shaper;T@@ [I"csv_store;T@`@ [I"csv_streamer;T@@ [I"csv_to_object;T@@ [I"csv_to_sqlite;T@@ [I"csv_validator;T@@ [I"ctags-bundler;T@'@ [I"ctags_bundler_rails;T@'@ [I" ctags.rb;T@@ [I" ctapi;T@@ [I" ctioga;TU;[I" 1.11;T@ [I" ctioga2;T@R @ [I"CTM__T9_Studio_Game;T@@ [I" ctodo;T@`@ [I"2ctreatma-activerecord-oracle_enhanced-adapter;TU;[I" 1.4.1.2;T@ [I"ctreatma-rails_sql_views;T@e@ [I"ctx;T@ @ [I" ctype;T@@ [I"cub;T@"@ [I" cuba;T@@ [I" cuba-api;T@@ [I"cuba-contrib;T@@ [I"cuba-haml;T@@ [I"cuba-sugar;T@@ [I"cubbyhole;T@@ [I" cube;T@@ [I"cube-evaluator;T@'@ [I"cube-no-apes;T@@ [I"cube-ruby;T@E@ [I"cube-tapjoy;T@@ [I" cubicle;T@@ [I"cubism-rails;T@@ [I" cubrid;T@6@[@MU;[I" 0.61;T@ [@MU;[I" 0.64;T@ [I"cubus-settingslogic;T@ @ [I" cuby;T@|@ [I" cuca;TU;[I" 0.07;T@ [I" cucover;T@+@ [I" cucumba;T@@ [I" cucumber;T@u@ [I"cucumber2rspec;T@@ [I"cucumber-ajaxer;T@"@ [I"cucumber_analytics;T@@ [I"cucumber-api-steps;T@Q@ [I"cucumberator;T@@ [I"cucumber-chef;T@1@ [I"cucumber-cinema;T@@ [I"cucumber-console;T@@ [I"cucumber-debug;T@'@ [I"cucumber_factory;T@<@ [I"cucumber-farmer;T@@ [I"cucumber_fm-core;T@@ [I"cucumber_growlnotify;T@@ [I"cucumber-in-the-yard;TU;[I" 1.7.8;T@ [I"cucumber-java;T@E@ [I"cucumber-json;T@E@ [I"cucumber-jvm;T@@[I"cucumber-loggly;T@@ [I"cucumber-mingle;T@@ [I"cucumber_monitor;T@V@ [I"cucumber-nagios;T@' @ [I"cucumber-nc;T@'@ [I"cucumber-newrelic;T@E@ [I"cucumber-notify;T@@ [I"cucumber_off_rails;T@E@ [I"cucumber-openerpscenario;TU;[I" 0.1.9.1;T@ [I"cucumber-pride;T@E@ [I"cucumber-profiler;T@@ [I"cucumber-puppet;T@@ [I"cucumber-rails;T@@ [I"cucumber-rails2;T@@ [I"cucumber_rails3_gen;T@@@ [I"#cucumber-rails-training-wheels;T@@ [I"cucumber-relizy;T@E@ [I"cucumber_scaffold;T@|@ [I"cucumber-scout;T@E@ [I"cucumber-screenshot;T@I"universal-darwin;T[@M@@ [I"!cucumber-selenium-standalone;T@@ [I"cucumber-sinatra;T@@ [I"cucumber_spinner;T@[@ [I"cucumber-standalone;T@'@ [I"cucumber-step_writer;T@@@ [I"cucumber-the;T@@ [I"cucumber-timed_formatter;T@`@ [I"cucumber_timing_presenter;T@C@ [I"cucumber-to-rally;T@6@ [I"cucumber-usual_suspects;T@'@ [I"cucumber-value;T@'@ [I"cucumber-vimscript;T@@ [I"cucumber-voip;T@@ [I"cucumber-websteps;T@ @ [I"cucumber-wordpress;T@ @ [I" cudan;T@@ [I" cudd-rb;T@E@ [I" cuecat;T@@ [I"cuechapter;T@@ [I" cuesnap;T@@ [I"cui8tracks;T@@ [I" cuiabout;T@@ [I" cuid;T@@ [I" cuit;T@'@ [I" cukable;T@6@ [I"cuke4duke;T@@[@M@"@ [I"cuke4nuke;T@x@ [I"cuke4nuke-aslakjo;T@@ [I" cuke4php;T@@ [I" cukebase;T@'@ [I"cuke_ci_workers;T@@ [I"cukecooker;T@!@ [I"cuke_data;T@@ [I"cukeforker;T@@ [I"cukeforker-webdriver;T@'@ [I" cukehead;T@`@ [I"cuke-inspector;T@@ [I" cuke-irb;T@'@ [I"cuke_iterations;T@E@ [I" cukemin;T@@@ [I" cuken;TU;[I" 0.1.22;T@ [I"cukepages;T@"@ [I"cuke-patterns;T@1@ [I"cukeplusplus;T@@ [I"cuke_profiles;T@@ [I"cuke_puke;T@@ [I"cukeregator;T@6@ [I"cukesalad;T@@ [I"cuke-step-bm;T@@ [I"cuketagger;T@@ [I"cuke-test;T@'@ [I"cuke_writer;T@'@ [I" cuki;T@3@ [I" cukunity;T@`@ [I" culerity;T@X)@ [I"cul-fedora;T@@ [I"cul-fedora-arm;T@@ [I"cul-handles;T@@ [I"cul_image_props;T@@ [I" culler;T@'@ [I"cul_scv_hydra;T@@ [I"culturegrid;T@@@ [I" cumquat;T@'@ [I"cumulus_csv;T@@ [I" cunfug;T@E@ [I" cuoco;T@E@ [I"cup;T@V@ [I" cupcake;T@E@ [I"cupertino;T@@ [I" cupid;T@@ [I" cuporter;T@v+@ [I" cuprint;T@@ [I" cups;T@n@ [I" cupsffi;T@@ [I" curator;T@- @ [I" curb;TU;[I" 0.5.8.0;TI"x86-darwin-10;T[@!N@@ [@!N@&@ [I" curbala;T@'@ [I" curb-fu;T@@ [I" curbit;T@@ [I"curb-openuri;T@@ [I"curb_threadpool;T@@ [I" curdbee;T@@ [I"cure_acts_as_versioned;T@@ [I"!cure_rails3_acts_as_paranoid;T@`@ [I" curies;T@E@ [I" curl;T@@ [I" curl_ffi;T@V@ [I"curl-multi;T@!@ [I" curltube;T@'@ [I"curl_wrapper;T@@ [I" curly;T@@ [I"curly_mustache;T@@ [I"currencies;T@x@ [I" currency;TU;[I" 0.4.11;T@ [I"currency_converter_cis;T@@ [I"currency_converter_CIS;T@'@ [I"currency_exchange;T@@ [I"currency-in-words;T@6@ [I"currency_magic;T@I@ [I"currency_rates;T@@ [I"currency_select;T@@@ [I"currency_spy;T@"@ [I"CurrencyString;T@E@ [I"currency_switcher;T@E@ [I"currency_updater;T@@ [I" current;T@ @ [I"currentcost;T@@ [I"currentcostd;T@Q%@ [I"current_fu;T@n>@ [I"current_gem;T@@ [I"current_instance;T@E@ [I"current_instence;T@'@ [I"currently;T@E@ [I"current_me;T@@ [I"current_metar;T@@ [I"current_object;T@@ [I"current_user;T@@ [I"current_weather;T@"@ [I"currmap-sesame;T@`@ [I" curry;T@'@ [I"curry_for_ruby18;T@'@ [I"curry-plain;T@@ [I"curry-powder;T@@ [I"curses-pad;T@@ [I" cursesx;TU;[I"003;T@ [I"cursetank;T@"@ [I" cursor;T@B@ [I"curve_fit;T@`@ [I" cuse;T@@ [I" cushion;T@@ [I" custerd;T@|@ [I"custodian;T@E@ [I"custom_attributes;T@@ [I"custom-attributes;TU;[I" 0.2.27;T@ [I"custom_benchmarks;T@@ [I"custom_boolean;T@|@ [I"custom_captcha;T@@ [I"custom_change_messages;T@@ [I"custom_counter_cache;T@@ [I"customer_ext;T@'@ [I"customerio;T@@ [I"custom_error_message;T@@ [I"custom_error_messages;T@@ [I"custom_errors_handler;T@[@ [I"custom_field_error;T@@ [I"custom_fields;TU;[I" 0.0.0.1;T@ [I"customize;T@V@ [I"customize_admin;T@ @ [I""customized-mongomapper-search;T@@ [I"custom_layout;T@"@ [I"custom_nagios;T@@ [I"custom_rails_themes;T@E@ [I"custom-range;T@@ [I"custom_rspec_matchers;T@@ [I"custom-template;T@@ [I"#custom-twitter-bootstrap-rails;T@@ [I"custom_validators;T@@ [I"custos_notifier;T@@ [I" cutagem;T@n@ [I"cutaneous;T@6@ [I" cuted;T@@ [I" cutep;T@@ [I" cutest;T@N@ [I"cutest-report;T@'@ [I" cuts;T@@ [I" cutter;T@@ [I"cuttlebone;T@|@ [I"cuttlefish;T@E@ [I" cuuid;T@@ [@N@@[I" cuukie;T@@ [I"cv;T@n@ [I" CVEasy;T@@ [I" cvss;TU;[I" 0.50.0;T@ [I" cvstools;T@- @ [I"cv-user-agent;T@@ [I"cw_condition;TU;[I" 1.0.0.1;T@ [I"cw_condition_merge;T@@ [I"cwgem-eventpublisher;T@'@ [I"cwgem-selectserver;T@@ [I" cwiid;T@6@ [I" cwords;T@@[@ O@N$@ [I"cw_parser;T@@ [I"cw_sort_order;T@@ [I"cxx;T@=@ [I"cxxproject;TU;[I" 0.6.30;T@ [I"cxxproject_clanganalyzer;T@@ [I"cxxproject_clangtoolchain;T@g@ [I"cxxproject_console;T@1@ [I"cxxproject_diabtoolchain;T@@ [I"cxxproject_gcctoolchain;T@ @ [I"cxxproject_stats;T@V@ [I"cxxproject_valgrind;T@@ [I" cyaml;TU;[I" 0.0.45;T@ [I"cyberengine;T@E@ [I" cybermen;T@'@ [I"cyberplat_pki;T@@ [I"cyberplus;T@'@ [I" cyberweb;T@@ [I"cyc-console;T@n@ [I"cycle_chef_handler;T@u@ [I"cycle_hire;T@@ [I"cyclomagic;T@@ [I" cyclop;T@@ [I" cycr;T@I@ [I" cylon;T@E@ [I"cymbalize;T@@ [I"cymruwhois;T@@ [I"cynergy-webrat;T@@ [I" cynq;T@"@ [I" cyphrb;T@@ [I"cyprus-street-names;T@@ [I"cyrillizer;T@@ [I"Cyrillizer;T@`@ [I"cytogenetics;T@E@ [I"cytoplasm;T@|@ [I"czak-authlogic-oid;T@W@ [I"czech_declensions;T@@ [I"czech_exchange_rates;T@'@ [I"czj-paperclipftp;T@@@ [I"d;T@N@ [I"d2;T@@ [I"d3;T@'@ [I" d3api;T@E@ [I"d3js-rails;TU;[I" 3.0.0.1;T@ [I" d3_mpq;T@@@ [I" d3_rails;T@@ [I" d3-rails;T@@ [I" d3skills;T@'@ [I" d3status;T@'@ [I"d3_status;T@@ [I"d8a;T@'@ [I"daapclient;T@@ [I" Daarmaan;T@`@ [I" dabcup;T@@@ [I" da_beat;T@'@ [I" daberu;T@@ [I" dacs;T@x@ [I" dada;T@'@ [I" dadablog;T@"@ [I"daddys_girl;T@X@ [I" daedalus;T@@ [I"daeltar-clockwork;T@,@ [I"daeltar-enum_field;T@@ [I" daemon;T@@ [I"daemonchild;T@E@ [I"daemon_controller;T@@ [I"daemonize;T@'@ [I"daemonizer;T@8@ [I"daemonizr;T@@ [I"daemon-kit;T@@ [I" daemons;T@9@ [I"daemons-mikehale;T@@ [I"daemon-spawn;T@@ [I"daemon-spawn-tanin;T@@ [I"daemons-rails;T@@ [I"daemontor;T@@ [I" daemonz;T@@ [I" daengine;T@@ [I" daftos;T@@ [I" dagnabit;T@@ [I" dags;T@'@ [I"da-has_token;T@@ [I"Dahistory;T@@ [I" dahlia;T@'@ [I"da_huangs_ruby_extensions;T@H@ [I" daijisen;T@`@ [I"daikini-immortalize;T@@ [I" daikon;T@4@ [I" daily;T@@ [I"dailybooth-cache-money;T@"@ [I"dailycred;TU;[I" 0.1.461;T@ [I"dailydealr;T@@ [I"dailymile-ruby;T@@ [I"dailymotion;T@@ [I"dailyshare;T@@ [I" da-js;T@@ [I" dalek;T@'@ [I" dalli;T@@@ [I"dalliance;T@@ [I"dalli-delete-matched;T@@ [I"dalli-ext-spymemcached;T@@ [I" dallish;T@@ [I"dalli-store-extensions;T@E@ [I"dam;T@@ [I"damagecontrol;TU;[I"0.5.0.1404;T@ [I"damerau-levenshtein;T@Y@ [I" dam_lev;T@@ [I" dance;T@`@ [I"dancing-links;T@W@ [I"dandelion;T@@ [I" daneel;T@'@ [I" dango;T@@ [I"dango_generator;T@@ [I"danieldkim-evergreen;TU;[I" 0.4.0.6;T@ [I"danielharan-cijoe;T@@@ [I"danielharan-mongo_mapper;T@7@ [I"#danieljohnmorris-shadow_puppet;T@@ [I"daniel_test;T@`@ [I"danmayer-metric_fu;T@@ [I"danmayer-resume;T@"@ [I"dans_didactic_clock;T@'@ [I"dansguardian;T@6@ [I"danske_helligdage;T@@ [I"DanskeHelligdage;T@@ [I" dante;T@|@ [I" danthes;T@@ [I"dao;TU;[I" 4.4.4;T@ [I" dapper;T@"@ [I"dapper-dan;T@x@ [I" daps;T@E@ [I"darcs-ruby;T@'@ [I"dar_da_da;T@@ [I" darian;T@@ [I"dark-capistrano-recipes;T@@ [I"dark_domains;T@'@ [I" darkext;T@&@ [I"darkfish-rdoc;T@@ [I"darkhelmet-sanitize;TU;[I"1.2.0.20091104;T@ [I"darkhelmet-sinatra;T@[@ [I"darkhelmet-sinatra_more;TU;[I" 0.3.36;T@ [I"darkofabijan-astrails-safe;T@ @ [I"darkofabijan-webrat;T@@ [I"darkside_capistrano_colors;T@J@ [I" darksky;T@W@ [I" darky;T@N@ [I" darrell-activewarehouse-etl;TU;[I" 0.9.1.6;T@ [I"darrell-geokit;TU;[I" 1.5.0.4;T@ [I"darstellung;T@'@ [I"dartboard;T@`@ [I"darvin_functions;T@O@ [I" darwin;T@'@ [I"das_catalog;T@@ [I"dascitizen;T@'@ [I" dase;TU;[I" 3.2.5;T@ [I" dash;T@x@ [I"dash-bees;TU;[I" 0.32;T@ [I"dashboard;T@@ [I"dashboarder;T@"@ [I"dashcode-converter;T@@ [I" dash-fu;T@@ [I" dashing;T@@ [I"dashing-weather;T@'@ [I" dashku;T@'@ [I"dash-mario;T@|.@ [I"dasil003-sanitize;T@@ [I"$dasil003-tm_syntax_highlighting;T@O@ [I"da-suspenders;T@O@ [I"dat;T@'@ [I" data;T@'@ [I" data247;T@@ [I"data_active;T@"@ [I"data-anonymization;T@@ [I"data-attributes;T@!@ [I"data_bank;T@@ [I" database;T@@ [I"database_cleaner;T@e@ [I"databasedotcom;T@@ [I"databasedotcom_additions;T@@ [I"databasedotcom_cloudfuji;T@ @ [I"databasedotcom-convenience;T@@ [I"databasedotcom-ejholmes;T@q@ [I"databasedotcom_emp;T@ @ [I"databasedotcom-oauth2;T@@ [I"databasedotcom-rails;T@@ [I"databasedotcom-streaming;T@'@ [I"database_exporter;T@@ [I"databaseformalizer;T@@ [I"database_loader;T@`@ [I"database_operations;T@V@ [I"database_resetter;T@@ [I"database_sleuth;T@@ [I"database_specification;T@'@ [I"database_validation;T@@ [I"database_views;T@E@ [I"databasion;T@@ [I"data_bindings;T@E@ [I"databrick;T@,@ [I"databrowser;T@@ [I"data_calendar;T@6@ [I"data-calendar;T@@ [I"datacatalog;TU;[I" 0.4.22;T@ [I"datacatalog-importer;T@@ [I"data_cleaner;T@"@ [I"data-converter;T@1@ [I" data_doc;T@@ [I"datadoctorwrapper;T@E@ [I"data_dumper;T@@ [I"data_fabric;T@ @ [I" dataflow;T@@ [I"data_frame;T@@ [I" Datag;T@@ [I"datagraph;T@@ [I"data_graph;T@@ [I" datagrid;T@X@ [I"data-import;T@'@ [I"dataisland;T@ @ [I"datalab-generators;T@@ [I"datalink-socket;T@E@ [I"data_loader;T@,@ [I"dataloaderb;T@@ [I"datalogger;T@@ [I"datalogger-redis;T@E@ [I"data_magic;T@@ [I"datamapper;T@N@ [I"data_mapper;T@N@ [I"datamapper2;T@'@ [I"datamapper4rail;T@@ [I"datamapper4rails;T@@ [I"datamapper-money;T@E@ [I"DatamapperRackStreamer;T@@ [I"datamappify;T@I@ [I"data_migrate;T@@ [I"data_migrations;T@'@ [I"data_migrator;TU;[I"1.8;T@ [I"data_miner;T@@ [I"data_miner-ruby19;T@Y@ [I"datanoise-actionwebservice;T@p#@ [I"data_objects;TU;[I" 0.10.11;T@ [I" datapage;T@'@ [I"data_paths;T@@ [I"datapathy;T@@ [I"data_plan;T@@ [I" datapost;T@E@ [I"data_prep;T@'@ [I"data_resurrection;T@6@ [I"data_sampler;T@@ [I"data_sanity;T@,@ [I"data_science_theater_3000;T@@ [I" dataset;T@@ [I"datashift;T@@ [I"datashift_spree;T@@ [I" datasift;T@@ [I"datastax_rails;TU;[I" 1.0.17.3;T@ [I"data_store;T@'@ [I"datastore_decide;T@@ [I"datastore_mongo;T@E@ [I"datastore_redis;T@V@ [I"data_sync;T@@ [I"data_table;T@@ [I"data-table;T@@ [I"datatables;T@@ [I"data_tables;T@|@ [I"datatablesnet;T@@ [I"datatables_rails;T@|@ [I"data_tasks;T@@ [I"datatrans;T@o@ [I"data_transformation;T@z@ [I"data_translation;T@@ [I"data_transport;T@@ [I" data_uri;T@@ [I" data-uri;T@'@ [I"data_validator;T@@ [I" dataview;T@@ [I"data-writer;T@@ [I" date4;T@'@ [I" date_age;T@E@ [I"date-casually;T@@ [I"date_checkbox;T@'@ [I"date-constructor;T@'@ [I"dated_backup;T@@ [I"dated_version;TU;[I"2008.07.0;T@ [I"date_easter;T@'@ [I" date_ext;T@@@ [I"date_filter;T@@ [I"date_formatter;T@E@ [I"date-input-rails;T@E@ [I"datejs-rails;T@@ [I"date_molder;T@'@ [I"date_parity;T@@ [I"date-performance;T@@ [I"date_range;T@@ [I"dateranger;T@@ [I"date_ranger;T@@ [I"date_range_scopes;T@@ [I" dates;T@@ [I"date_scopable;T@@ [I"datescope;T@@ [I"date_scopes;T@|@ [I"DateSetter;T@@ [I"datesplit;T@"@ [I" datet;T@@ [I"date_time-duration;T@'@ [I"date_time_formats;T@`@ [I"datetimepicker;T@@ [I"date_time_picker;T@@ [I"date_time_precision;T@@ [I"date_time-smart;T@@ [I"datetimespan;T@@ [I"date_tools;T@E@ [I"date_utc_parser;T@@ [I"date_utils;T@@ [I"DateUtils;T@R @ [I"date_validation;T@'@ [I"date_validator;T@y@ [I" datify;T@N@ [I" datizzle;T@`@ [I"datomic-client;T@@ [I" dat-tcp;T@`@ [I"datts_right;T@$@ [I" datum;T@- @ [I"daud_coder;T@@ [I" daum;T@`@ [I"daum_oauth;T@@@ [I" dav4rack;T@@ [I"dav4rack_ext;T@@ [I"davber_couch_potato;T@x@ [I"'davber_couchrest_extended_document;T@@ [I"davclient;T@V@ [I" davegem;T@n@ [I" david;T@@ [I"david-capybara;TU;[I" 0.3.9.1;T@ [I"davidray-paperclip;T@ @ [I"davidtrogers-cucumber;T@@ [I"davidtrogers-htmldiff;T@'@ [I"davidtrogers-selenium-grid;T@'@ [I"davidtrogers-webrat;T@X@ [I"davidyang-resque-scheduler;TU;[I" 1.10.11;T@ [I" davinci;T@@ [I"dawanda_client;T@@ [I"dawanda-sqlite3;T@ @ [I"dawanda-ssl_requirement;T@@ [I"dawanda-statsd-client;T@1@ [I"dax;T@'@ [I"day;T@@ [I" daybreak;T@6@ [I" daylife;T@@ [I"daylite-models;T@`@ [I"day-of-the-week;T@'@ [I" days;T@@ [I"days_and_times;T@@ [I" dayset;T@'@ [I"days_picker;T@@ [I" dayvan;T@6@ [I"db;T@@ [I"db2;T@1@ [I" db2c;T@@ [I"db2dropbox;T@'@ [I" db2fog;T@@ [I" db2s3;T@@ [I" dbadmin;T@@ [I" dbag;T@@ [I" dbagile;T@E@ [I"dball-mail;TU;[I" 2.2.9.7;T@ [I"dbarison_curriculum;T@@ [I"db_backup;T@@ [I"db_backup_tool;T@E@ [I"dbc;T@O@ [I" DBcache;T@@@ [I"db_cache_store;T@E@ [I"db-charmer;T@ @ [I"dbcompile;T@@ [I"db-config-parse;T@E@ [I"db-copier;T@'@ [I" db_cull;T@@ [I" dbd4;T@ @ [I"dbd-adonet;T@@ [I"dbd-adonet-sqlserver;T@@ [I" db_debug;T@@ [I" dbdiff;T@@ [I"db_discovery_generator;T@`@ [I" dbd-jdbc;T@+@ [I"dbd-mysql;T@"@ [I" dbd-odbc;T@[@ [I" dbdom;T@'@ [I" dbd-pg;T@@ [I"dbd-sqlanywhere;T@@ [I"dbd-sqlite;T@@@ [I"dbd-sqlite3;T@@ [I"dbdump_command;T@@ [I"db-entropy;T@@ [I"dberkom-sinatra-prawn;TU;[I" 0.9.2.2;T@ [I" dbexpect;T@*@ [I"dbf;T@+@ [I" dbget;T@I@ [I"dbget_client;T@I@ [I" db_graph;T@1@ [I"dbhijacker;T@@ [I"db-hijacker;T@@ [I"dbi;T@@ [I" dbi-dbrc;T@@[@mR@@ [@mR@@ [I"db_leftovers;T@@ [I"db_logger;T@'@ [I" dblp;T@VK@ [I"dbm;T@@ [I"dbmanager;T@@ [I"db_migration_scaffolder;T@E@ [I"dbmigrator;T@J@ [I" db_mlp;T@V@ [I" dbmodel;T@@ [I" db_nazi;T@@ [I" dboard;T@@ [I"dbortz-simple_xlsx_writer;T@J@ [I" dbox;T@n@ [I"dboyles-restful_adhearsion;T@`@ [I"dbpedia_concept_search;T@@@ [I" dbplot;T@@ [I"db_populate;T@@ [I"db-populator;T@@ [I" db_purge;T@@ [I" DBrb;T@`@ [I"db_reference;T@@ [I"db_rocket;T@E@ [I" dbsh;T@'@ [I"db_structure;T@@ [I"db_structure_ext;T@E@ [I" dbsync;T@`@ [I" db_tasks;T@'@ [I" dbtop;T@`@ [I" dbuddy;T@@ [I" dbuilder;T@@ [I" dbupdate;T@@ [I" dbus;T@ @ [I"dbus-dump;T@@ [I"db_version_manager;T@'@ [I"dca;T@`@ [I" dcache;T@@ [I" dcal;T@'@ [I"dcas-ruby;T@x@ [I" dcell;T@ @ [I" DCGOV;T@'@ [I"dci;T@@ [I"dci-rails;T@+@ [I" dci-ruby;T@@ [I"dclext-anim;T@I@ [I"dclext-gtk;T@@ [I"dcm2nii-ruby;T@'@ [I"dcolthorp-bistro_car;T@!@ [I" dcov;T@I@ [I" dcss;T@[ @ [I" dctl;T@@ [I"dcuddeback-octopi;TU;[I" 0.2.12;T@ [I"dcu-devise;T@ @ [I"dcu-purple_ruby;T@X@ [I" dc-util;T@E@ [I"dcu-typhoeus;T@@ [I"dd;T@`@ [I"ddao-kwalify;T@@ [I" ddate;T@@ [I"D-D-Character-Generator;T@O@ [I"ddd;TU;[I"0.0;T@ [I"ddd-associations;T@E@ [I" dddr;T@+@ [I"dde;T@@ [I"ddi-parser;T@@ [I" ddis;T@@ [I" ddns;T@1@ [I"ddnsupdate;T@@ [I"ddollar-test-gem;T@@ [I" ddpi;T@@ [I"ddt;T@@ [I"de;T@ @ [I"deactivatable;T@`@ [I" deadbolt;T@@@ [I"dead_letter_office;T@'@ [I"deadlinez;T@@@ [I"deadlock_retry;T@N@ [I"deadlock_retry_insane;T@N@ [I"dead_mans_snitch;T@@ [I" deadpool;T@|@ [I"dead_simple_cms;T@*@ [I"dead_simple_conf;T@@ [I"dead_view_catcher;T@@ [I"deadweight;T@I@ [I" deadwood;T@@ [I" dealer;T@@ [I" dealmap;T@@ [I" deals;T@'@ [I"deals_with;T@@ [I"dealwithify;T@@ [I" deano;T@@ [I"dearchiver;T@'@ [I" deas;T@'@ [I" death;T@@ [I"death_and_taxes;T@@ [I"deathbycaptcha;T@(C@ [I"death_by_captcha;TU;[I" 0.4.2.1;T@ [I"deb_deploy;T@ @ [I" de_beers;T@@ [I"debianize;T@'@ [I"DebianPackageDownloader;T@@ [I" debitech;T@@ [I"debitech_soap;T@@ [I" deblank;T@'@ [I" debloy;T@ @ [I" debot;T@'@ [I"debprado-rvideo;T@Q@ [I" debra;T@@ [I"debsfromrepos;T@+@ [I" debstep;T@"@ [I" debugbar;T@'@ [I"debug-bar;T@@ [I"debugged-ruby;T@@ [I" debugger;T@@ [I"debugger-completion;T@@ [I"debugger-ide;T@E@ [I"debugger-linecache;T@x@ [I"debugger-pry;T@`@ [I"debugger-rails;T@'@ [I"debugger-ruby_core_source;T@@ [I" debuggie;T@@ [I" debugher;T@'@ [I" debuglog;T@@ [I"debug_log;T@@ [I"debugmotion;T@@ [I"debugprint;T@@ [I"debugserver;T@`@ [I"decaptcha;T@@ [I"decaptcher;T@@ [I"decaptcher-recaptcha;T@@ [I"decaying_bloomfilter;T@'@ [I"decc_2050_model;TU;[I" 3.4.1;TI"x86_64-linux;T[@~SU;[I" 3.4.5;T@ [I" december;T@@ [I"decent_decorate;T@'@ [I"decent_decoration;T@E@ [I"decent_exposure;T@@ [I"decent_exposure-draper;T@@ [I" decider;T@O@ [I" decimal;T@@ [I"decision_table;T@'@ [I"decisiontree;T@x@ [I"decision_tree;T@@ [I" deck;T@x@ [I" deckard;T@`"@ [I"deckchair;T@@ [I" deckify;T@@ [I"deck-of-cards;T@n@ [I" deckr;T@@ [I" deckrb;T@@ [I"deckshuffler;T@E@ [I"declarative_authorization;T@@ [I""declarative_authorization-dta;T@6@ [I"&declarative_authorization_padrino;T@6@ [I"declarative-find;T@@ [I"declarative_grid;T@`@ [I" declare;T@@ [I"dec_number;T@@ [I" decoct;T@`@ [I" decoder;T@- @ [I"decoder-ring;T@@ [I"decode_www_form_component;T@[ @ [I"decommission;T@E@ [I" decor;T@@ [I" decorate;T@@ [I"decorate_resource;T@@ [I"decorates_before_rendering;T@E@ [I"decoration_mail;T@,@ [I"decorative_buildr;T@|@ [I"decorator;T@'@ [I"decorators;T@@ [I" decoy;T@@ [I" dedent;T@E@ [I" dedupe;T@'@ [I" deeby;T@@ [I" deelay;T@@ [I"deep_attributes;T@@ [I"deepbeige;T@@ [I"deep_clonable;T@@ [I"deep_cloneable;T@@ [I"deep_cloning;T@O@ [I"DeepConnect;TU;[I"0.4.06.007;T@ [I"deep_copy;T@@ [I" deepdish;T@@ [I" deeper;T@'@ [I"deep_fetch;T@'@ [I"deep_freeze;T@'@ [I"deep_hash;T@E@ [I"deeply_valid;T@@ [I"deep_merge;T@@ [I"deepopenstruct;T@@@ [I"deepstruct;T@@ [I"deep_struct;T@@ [I"deep_test;T@@ [I"deep_test_pre;T@@ [I"def;T@E@ [I" deface;T@e@ [I"defaultable;T@@ [I"$default_classes_for_form_inputs;T@O@ [I"defaultinator;T@@ [I" defaults;T@`@ [I"defaults_for;T@E@ [I"$default-url-options-for-mailers;T@@ [I"default_value_for;T@@ [I"default_whitelist;T@'@ [I"defect-density-heatmap;T@"@ [I" defender;T@+@ [I" defensio;T@e@ [I"deferrable;T@@ [I"deferrable_actions;T@E@ [I"deferrable_gratification;T@@ [I" deferred;T@Y@ [I"deferred_associations;T@Y@ [I"deferred_enum;T@E@ [I"deferred_job;T@@ [I" defgen;T@E@ [I" define;T@@ [I"define_columns;T@@ [I" defined;T@E@ [I"defined-by;T@@ [I"defined_hash;T@@ [I"define_exception;T@@ [I"define_images;T@`@ [I"define_method_handler;T@@ [I"define-wn;T@'@ [I" definite;T@'@ [I" defly;T@@ [I" defmacro;T@E@ [I"defmacro-unicorn;T@E@ [I" defog;T@@ [I" deform;T@'@ [I" defstr;T@`@ [I" degect;T@'@ [I"degermatize;T@E@ [I" degrade;T@@ [I" degu;T@6@ [I"dehumanize;T@@ [I" deify;T@E@ [I"deil_sexpistol;T@V@ [I" dejavu;T@@ [I" deja-vu;T@@ [I" deja_vue;T@@@ [I"dejavu-fonts;T@!@ [I" deject;T@@ [I"dekart-paperclip;T@@ [I" dekiru;T@n@ [I"deklarativna;T@@ [I"delayable_km;T@'@ [I"delaycalc;T@@ [I"delayed_acts_as_geocodable;T@@ [I"delayed_form_observer;T@@ [I"delayed_job;T@ @ [I"delayed_job_active_record;T@@ [I"delayed_job_admin;T@@ [I"delayed-job-ajaycb;TU;[I" 2.0.10;T@ [I" delayed_job_couchrest_model;T@@ [I"delayed_job_dashboard;T@@ [I" delayed_job_data_mapper_ste;T@@ [I"delayed_job_extras;TU;[I" 0.13.4;T@ [I"delayed_job_groups;T@I@ [I"delayed_job_groups_mongoid;T@@ [I"delayed_job_hooked;T@@ [I"delayed_job_ironmq;T@+@ [I"delayed_job_loner;T@@ [I"delayed_job_mongoid;T@O@ [I"(delayed_job_mongoid_beta_compatible;T@@ [I"delayed_job_mongoid_web;T@T @ [I"delayed_job_mongo_mapper;T@@ [I"delayed_job_monitor;T@@ [I"delayed_job-monitor;T@@ [I"delayed_job_null;T@"@ [I"delayed_job_on_steroids;T@@ [I"delayed_job-rails_reloader;T@@ [I"delayed_job_sequel;T@'@ [I" delayed_job_shallow_mongoid;T@@ [I"delayed_job_tracer;T@ @ [I"delayed_job_unique_key;T@@ [I")delayed_job_unique_key_active_record;T@@ [I"delayed_job_web;T@x@ [I""delayed_job_with_named_queues;TU;[I" 2.0.7.14;T@ [I"delayed_job_with_server_id;TU;[I" 1.8.5.1;T@ [I"delayed_kiss;T@@ [I"delayed_km;T@@ [I"delayed_mailer;T@@ [I"delayed_mailhopper;T@n@ [I"delayed-method;T@@ [I"delayed_paperclip;TU;[I" 2.5.0.1;T@ [I"delayed_sunspot;T@@ [I"delayed_task;T@@ [I"delay_queue;T@@ [I"delegate_all_for;T@V@ [I"delegate_attributes;T@E@ [I"delegate-class;T@'@ [I"delegated_presenter;T@@ [I"delegate_presenter;T@E@ [I"delegation;T@@ [I"delegator;T@@ [I"delete_paranoid;T@@ [I"delete_soft;T@@ [I"delete_softly;T@@ [I" deli;T@@ [I"delicious_adder;T@@ [I"delicious-api-via-oauth;T@@ [I"delicious-cli;T@@ [I"delicious-console;T@@ [I"delicious-ext;T@@ [I"DeliciousRuby;T@@ [I"De.linque.nt;T@'@ [I" deliruby;T@@ [I" delish;T@@ [I"deliverer;T@@ [I"delivery_reroute;T@@ [I"delocalize;T@@ [I" delorean;T@@ [I" delphin;T@'@ [I" delsolr;T@1@ [I"delta_attack;T@+@ [I"delta_attributes;T@"@ [I"delta_cache;T@@ [I"delta-capistrano;T@@ [I"delta_changes;T@'@ [I"deltacloud-client;T@W@ [I"deltacloud-core;T@W@ [I" deltadsl;T@@ [I"delta_force;T@E@ [I" delta_t;T@@ [I""deltavista_crif_dva_interface;T@@ [I" deltoid;T@@ [I"deluxe_publisher;T@@ [I" demeter;T@+@ [I"demeters_revenge;T@!@ [I" demo_gem;T@'@ [I"demolisher;T@@ [I" demoman;T@@ [I"demo-reader;T@@ [I" demrec;T@`@ [I"den;T@@ [I" denali;T@@ [I"Dendrograms;T@'@ [I"deneuxa-contacts;TU;[I" 1.2.10;T@ [I" denglu;T@E@ [I"denki_guy;T@6@ [I"denormalize-field;T@6@ [I"denormalizer;T@@ [I" dentaku;T@ @ [I" de.oddb;T@@ [I"deordinalize;T@@ [I"dep;T@@ [I" depager;T@@ [I" depalma;T@`@ [I" departr;T@R @ [I"dependable;T@@ [I"dependancy;T@@ [I"dependence;TU;[I" 0.0.99;T@ [I"dependencies;T@@ [I"Dependency;T@@ [I"dependency_injector;T@'@ [I"dependency_revealer;T@@ [I"dependent_protect;T@@ [I"dependent_select;T@@ [I"dependent-select;T@E@ [I" dependo;T@@ [I" dependor;T@@ [I" depends;T@'@ [I"depends-client;T@@ [I"depends_update;T@"@ [I" depgraph;T@*@ [I" DepGraph;T@ @ [I" depict;T@@ [I" depix;T@ @ [I" deplate;T@-@ [I" deplay;T@@ [I" deploify;T@V@ [I" deplot;T@"@ [I" deploy;T@@ [I"deployable;T@@ [I"deployaml;T@@ [I"deploy_and_deliver;T@ @ [I"deploy_couch;T@"@ [I"deploy_docus;T@@ [I"deploydots;T@@ [I" deployer;T@@ [I"deployer_files;T@@ [I"deployflow;T@"@ [I" deployhq;T@@ [I"deploy_kit;T@@ [I"deployment_notifier;T@@ [I"deployment_pipeline;T@'@ [I"deployments;T@!@ [I"deployments-app;T@@ [I"deployment_test;T@@ [I" deployml;T@Y@ [I"deploy_mongo;T@E@ [I" deployr;T@@ [I"deploy-recipes;T@E@ [I"deploy_tasks;T@+@ [I" deployto;T@@ [I"deploytool;T@@ [I"deploy_tracker;T@"@ [I"deploytracking;T@@ [I"deploy_tracking;T@x@ [I"deploy_version;T@@ [I" depo;T@V@ [I" deposit;T@E@ [I" depot;T@@ [I" depq;T@6@ [I" deprec;T@9 @ [I"deprecatable;T@@ [I"deprecated;T@ @ [I"deprecation;T@@ [I"deprec-core;TU;[I" 3.1.15;T@ [I"depression;T@@ [I" deproll;T@'@ [I" deps;T@@ [I"dep_selector;T@V@ [I"dep_selector_over_http;T@= @ [I"depth-charge;T@E@ [I" deputy;TU;[I" 0.1.58;T@ [I"dep_walker;T@@ [I" depwhack;T@@ [I" derail;T@'@ [I" derailer;T@@ [I"derailleur;T@@ [I"derfarg_gem_test;T@'@ [I"DerGuteMoritz-rforce;T@@ [I"derickbailey-notamock;T@'@ [I" deris;T@|@ [I"derobo-imdb_og;T@@ [I" derp;T@@ [I"derpinderp;TU;[I" 6.6.6;T@ [I"derring-do;T@@ [I"descendants_tracker;T@'@ [I"desc_method;T@@ [I"described_routes;T@&@ [I"describe_time;T@"@ [I"descriptive_statistics;T@@ [I"descriptive-statistics;T@@ [I" desert;T@Y@ [I" desi;T@ @ [I"designate;T@E@ [I" desk;T@@ [I" desmos;T@I@ [I"despamilator;T@i6@ [I"despamilator_rails;T@s@ [I"despamilator_rails2;T@@ [I"despatchmaster_signature;T@@ [I"despeckle;T@'@ [I"desperado;T@'@ [I"desperados;T@@ [I"destroy_backgrounded;T@'@ [I"destroyer;T@@ [I"destroy_soon;T@@ [I" desutwo;T@@ [I"detabulator;T@@ [I" detagger;T@@ [I"detect_browser_os;T@@ [I"detect_email_settings;T@'@ [I"detective;T@@ [I"detect_language;T@@ [I"detect_timezone_rails;T@@ [I"determine;T@@@ [I" detest;TU;[I" 3.1.3;T@ [I"detfis-rails-parts;T@@ [I" detroit;T@@ [I"detroit-commons;T@@ [I"detroit-dnote;T@@ [I"detroit-email;T@@ [I"detroit-erbside;T@@ [I"detroit-extconf;T@@ [I"detroit-gem;T@@ [I"detroit-github;T@@ [I"detroit-grancher;T@@ [I"detroit-locat;T@@ [I"detroit-mast;T@@ [I"detroit-minitest;T@@ [I"detroit-qed;T@@ [I"detroit-rdoc;T@@ [I"detroit-ronn;T@@ [I"detroit-rspec;T@@ [I"detroit-rubyforge;T@@ [I"detroit-rubygems;T@@ [I"detroit-syntax;T@@ [I"detroit-turn;T@@ [I"detroit-vclog;T@@ [I"detroit-yard;T@@ [I"detroit-yardstick;T@@ [I"detrusion;T@`@ [I"dev;TU;[I" 1.0.77;T@ [I"devape_calendar;T@E@ [I"devape_cms;T@@ [I"devape_page;T@@ [I"devape_survey;T@@ [I" devball;T@W9@ [I" devconf;T@@ [I" devcreek;T@@ [I" devd;T@x@ [I" devdnsd;T@@ [I"developergarden_sdk;T@' @ [I"development;T@;@ [I"!development_mail_interceptor;T@@@ [I"development_ribbon;T@@ [I"developwithpassion_arrays;T@'@ [I" developwithpassion_expander;T@"@ [I"developwithpassion_fakes;T@`@ [I"#developwithpassion_fakes-rspec;T@V@ [I"devel-which;T@@ [I"deviantart-oauth2;TU;[I" 0.1.2.4;T@ [I"device_atlas;T@ @ [I"device_aware;T@@ [I"device_space_left;T@`@ [I" devil;T@kM@[@VU;[I" 0.1.9.5;T@y;[@V@V@ [@V@V@1[I" devinci;T@'@ [I"devino_sms;T@E@ [I"devinosmsclient;T@"@ [I"devisable;T@@ [I" devise;T@ @ [I"devise_account_expireable;T@'@ [I",devise_active_directory_authenticatable;T@@ [I"devise_aes_encryptable;T@@ [I"devise-archangel;T@'@ [I"devise-async;T@@ [I"devise_authenticator;T@@ [I"devise_autosigninable;T@@ [I"devise-basecamper;T@@ [I"devise-browserid;T@J@ [I"%devise_browserid_authenticatable;T@x@ [I"#devise_bushido_authenticatable;T@@ [I"devise_cas_authenticatable;T@x@ [I"devise_certifiable;T@@ [I"%devise_cloudfuji_authenticatable;T@W@ [I"devise_couch;T@@@ [I"devise_couch_potato;T@E@ [I"devise_couchrest_model;T@E@ [I"devise_custom_token;T@E@ [I"devise-encryptable;T@`@ [I"devise_ennder;TU;[I"1.4.1.0.9;T@ [I"devise_extensions;T@@ [I" devise_facebook_connectable;T@I@ [I"devise_facebook_open_graph;T@@ [I"devise-french;T@@ [I" devise_google_authenticator;T@@ [I"devise_groupable;T@@ [I"devise-guests;T@@ [I"devise_hack;T@'@ [I"devise_header_token;T@@ [I"devise-heroku;T@'@ [I"devise-i18n;T@`"@ [I"devise-i18n-views;T@[@ [I"devise_imapable;T@@ [I" devise_imap_authenticatable;T@- @ [I"devise_imprintable;T@E@ [I"devise_invitable;T@T @ [I"devise_koala_connectable;T@+@ [I"devise_lastseenable;T@"@ [I" devise_ldap_authenticatable;T@@ [I"devise-links;T@@ [I"devise-login-cookie;T@@@ [I"devise_loginza;T@E@ [I"devise_mailchimp;T@"@ [I"devise_masquerade;T@@ [I""devise_meetup_authenticatable;T@@ [I"devise-mongo_mapper;T@E@ [I"devise-neo4j;T@@ [I"devise_oam;T@@ [I"devise_oauth;T@@ [I""devise_oauth2_authenticatable;T@@ [I""devise_oauth2_canvas_facebook;T@@ [I"devise_oauth2_facebook;TU;[I" 0.1.51;T@ [I"#devise_oauth2_facebook_mongoid;T@@ [I"devise_oauth2_fb_canvas;T@'@ [I"devise_oauth2_providable;T@x@ [I"/devise_oauth2_token_bearer_authenticatable;T@'@ [I"'devise_oauth_token_authenticatable;T@E@ [I"devise_omniauth;T@E@ [I"devise-omniauth;T@'@ [I"devise_omniauth_fb;T@@ [I""devise_openid_authenticatable;T@x@ [I"devise_pam_authenticatable;T@@ [I"devise_password_changable;T@@ [I"&devise_password_sharing_extension;T@3@ [I"devise_paypal;T@'@ [I"devise_pg_authenticatable;T@@ [I"devise-proxy;T@+@ [I""devise-radius-authenticatable;T@@ [I"devise_rails3_ennder;T@W@ [I"devise_referable;T@@ [I"devise_restful_auth;T@6@ [I"devise_revokable;T@@ [I"devise_rpx_connectable;T@I@ [I"devise-russian;T@'@@ [I"devise-scrypt;T@@ [I"devise_security_extension;T@@ [I"devise_sequel;T@@ [I"&devise_shibboleth_authenticatable;T@@ [I"devise_simply_stored;T@@ [I"devise_sms_activable;T@@ [I"devise_social;T@'@ [I"devise-spec;T@6@ [I"devise-stormpath;T@`@ [I"devise_suspendable;T@@ [I"devise_ticketable;T@'@ [I"devise_touchpassable;T@@ [I"devise_traceable;T@@ [I"devise-twitter;T@`@ [I"devise_uid;T@'@ [I"devise_views_translated;T@x@ [I"devise_w3_authenticatable;T@@ [I"devise_webmoney;T@n@ [I"devise_wind;T@@ [I"devise_yauth_token;T@@ [I" devlin;T@@ [I"dev_log_in;T@"@ [I" devmail;T@@ [I" devnull;T@@ [I" dev-null;T@@ [I"devolute-actionwebservice;TU;[I" 2.3.11;T@ [I"dev_panel;T@@ [I" devry;T@@ [I"devserver;T@@ [I"devstructure;T@Y@ [I" dev_task;T@E@ [I" dev-time;T@'@ [I" devtools;T@'@ [I" devutils;T@'@ [I"dev-utils;T@@ [I"devutils-docs;T@'@ [I"devutils-guard;T@'@ [I"devutils-metrics;T@'@ [I"devver-metric_fu;T@ @ [I"devver-octopi;T@V@ [I"devver-rack-contrib;T@ @ [I"devver-right_aws;TU;[I" 1.10.99;T@ [I"!devver-right_http_connection;TU;[I" 1.2.99;T@ [I"devver-Saikuro;T@N@ [I"devver-ultraviolet;TU;[I" 0.10.5;T@ [I"dew;T@@ [I" dewey;T@ @ [I"Dex;T@"@ [I" dexquery;T@@ [I" Dex_Rack;T@@ [I" dexter;T@@ [I"dfc;T@@ [I" dfect;T@ @ [I" dfeojm;T@E@ [I"dfhcc_classifier;T@ @ [I" dflat;T@"@ [I"dfp_helper;T@@ [I"dgdosen-first-gem;T@'@ [I"dgh;T@+@ [I"dguerri-libarchive;T@@@ [I"dguerri-radiustar;T@@ [I" dhaka;T@ @ [I" dh_api;T@'@ [I" dhcp;T@'@ [I"dhill-sprinkle;T@4D@ [I"dhkeyexchange;T@@ [I"dhl-intraship;T@@ [I" dhun;T@@ [I"di;T@@ [I"dia;T@t@ [I" diablo;T@@ [I" diablo3;T@'@ [I"diablo3-simple;T@E@ [I"diacritics_fu;T@@ [I"di-acts-as-taggable;T@@ [I"diagnostics;T@"@ [I" diakonos;TU;[I" 0.8.11;T@ [I" dialable;T@@ [I" dialog;T@@@ [I" dialy;T@@ [I"diametric;T@"@ [I" diamond;T@@ [I"diamond-engine;T@@ [I"diamond_invoice;T@@ [I"diamond-mechanize;TU;[I"2.4;T@ [I" diana;T@"@ [I"diandian-oauth;T@`@ [I" dianxin;T@'@ [I" diarb;T@'@ [I"dia_rules;T@'@ [I" diary;T@I@ [I" diaspora;T@'@ [I"diaspora-cluster-creator;T@x@ [I" dibber;T@`@ [I" dibs;T@@ [I"dic;T@@ [I" dice;T@@ [I" dicebag;T@@ [I"dicechucker;T@@ [I"dice_game;T@@ [I"dice_roll;T@E@ [I"diceroller;T@@ [I"dice_roller;T@"@ [I" dicey;T@'@ [I" dickburt;T@@ [I" dickens;T@@ [I" dicks;T@r@ [I"dickstreamer;T@@ [I" dicom;T@@ [I" dict;T@@ [I"dictionary;T@@ [I"dictionary_map;T@'@ [I"dictionary_order_sort;T@@@ [I"did;TU;[I" 0.2.01;T@ [I"didactic_clock;T@E@ [I"didactic_clock_rm;T@'@ [I"did_active_model;T@'@ [I"did_clock_rm;T@E@ [I"did_craken;T@'@ [I" diddy;T@@ [I"did_token_generator;T@'@ [I"did_validates_presence_of;T@'@ [I"did_will_sign;T@'@ [I"did_workling;T@'@ [I"did-you-mean;T@`@ [I"die;T@@ [I" dieroll;T@@ [I" diesel;T@|@ [I" diet;T@p@ [I" dietrb;T@@ [I" difects;T@ @ [I" diff;T@@ [I" diff2xml;T@E@ [I" diff4all;T@'@ [I" diffall;T@'@ [I"diffbench;T@@ [I" diffbot;T@`@ [I"diff_dirs;T@@@ [I"diff-display;T@'@ [I" diffeq;T@'@ [I" differ;T@@@ [I"difference;T@@ [I"diff_from_delta;T@E@ [I" diffhub;T@'@ [I" difflcs;T@"@ [I" diff-lcs;T@;@ [I"diff_matcher;T@.@ [I"diff_match_patch;T@@ [I"diff_match_patch_native;T@@ [I" diffplex;TU;[I"1.1.0.0.2;T@ [I" diffr;T@'@ [I"diffrenderer;T@@ [I" diffrent;T@x@ [I" diffy;T@@ [I"difio-cloudcontrol-ruby;T@@ [I"difio-dotcloud-ruby;T@@ [I"difio-heroku-ruby;T@@ [I"difio-openshift-ruby;T@O@ [I"digarc-giternal;T@`@ [I"digest-bubblebabble;T@@ [I"digest-crc;T@@ [I"digest-ed2k;T@@ [I"digest_email;T@W@ [I"digest-email;T@'@ [I"digest_extensions;T@@ [I" digestif;T@W@ [I"digestion;T@u@ [I"digest-m4p;T@E@ [I"digest_notifier;T@@ [I"digest_perfect;T@'@ [I" digestr;T@E@ [I"digest-sha3;T@@ [I"digest-tiger;T@@ [I"digest-whirlpool;T@@ [I" diggr;T@@@ [I"digidoc_client;T@@ [I"digitalnz;T@`@ [I"digitalpardoe-rflickr;T@x@ [I"digital_trees_and_sets;T@x@ [I"digitsend;T@@ [I" digiusb;T@@ [I" digu;T@[ @ [I"dijit-rails;T@*@ [I" dike;T@@ [I" dikt;T@E@ [I" dilation;T@E@ [I" dillo;T@@@ [I"dim;T@@ [I"dima_app_logger;T@n@ [I"dimensional;T@@ [I"dimensions;T@N@ [I"dimensions-rails;T@W@ [I"diminutivity;T@@ [I"dimiro1-clickatell;T@X@ [I"dimkiriyenko-capone;TU;[I" 0.15;T@ [I"dimkiriyenko-ci_reporter;TU;[I" 1.6.6;T@ [I"dimkiriyenko-kaminari;T@6@ [I" diMLOrb;T@@ [I" dimma;T@@ [I" dimsum;T@"@ [I"dinabaztag;T@@ [I" dinbrief;T@- @ [I" dindi;T@J@ [I"dineromail;T@@ [I"dinero_mail;T@'@ [I"dinero_mail_checkout;T@@ [I"dinero_mail_ipn;T@@ [I" dink;T@@ [I" dino;T@e@ [I"dinosaurus;T@@ [I" dionysus;T@@ [I"dioxide_rails;T@@@ [I"dir;T@@@ [I" dirb;T@@ [I" dirby;T@!@ [I" dircat;T@@ [I"dir_checksum;T@@ [I" dirclass;T@E@ [I" dirdiff;T@E@ [I"direct_address;T@`@ [I"directed-edge;T@@ [I"direct_employers;T@@ [I"directions;T@'@ [I"directlytos3;T@@ [I" director;T@'@ [I"directories_interface;T@n@ [I"directory_template;T@@ [I"directory-traversal;T@@ [I"directory_watcher;T@@ [I"directwave;T@@ [I" dirge;T@@ [I" dirk;T@@ [I" dirndl;T@'@ [I"dir_size_renamer;T@"@ [I"dirs-ruby2lolz;T@@@ [I" dir_sync;T@@@ [I"DirTagger;T@@ [I"dir-to-xml;T@@ [I" dirty;T@n@ [I"dirty_after_save;T@'@ [I"dirty_callbacks;T@@ [I" dirtydan;T@@ [I"dirtyflash;T@'@ [I"dirty_hashy;T@@ [I"dirty_history;T@n@ [I"dirty-memoize;T@"@ [I"di-ruby-lvm;T@6@ [I"di-ruby-lvm-attrib;T@@ [I"dir_validator;TU;[I" 0.14.6;T@ [I"disable_asset_logging;T@@ [I"disable_assets_logger;T@@ [I" disabled;T@`@ [I"disable_rails_json;T@@ [I"disabler_middleware;T@E@ [I"disable_test_fixtures;T@@ [I" disbatch;T@@ [I"discipline;T@@ [I"disclaimer;T@'@ [I" disco;T@I@ [I"discoball;T@I@ [I"discodactyl;T@@ [I" discogs;T@@ [I"discogs-wrapper;T@;@ [I" discostu;T@"@ [I"discotech;T@@ [I"discotheque;T@E@ [I" discount;TU;[I" 1.2.6.1;T@ [I"discoverer;T@'@ [I"discover-unused-partials;T@@ [I"discovery-mission;T@'@ [I"discreet_proxy;T@@ [I"discrete_event;T@@ [I"discuz_robot;T@@ [I" disguise;T@@ [I"disiid_user;T@1.@ [I"di-simple_auth;T@@ [I"disk_cache;T@V@ [I"diskcached;T@@ [I" diskid;T@I@ [I" diskmon;T@@ [I"disk-stats;T@E@ [I" dismal;T@@ [I"dismissible_helpers;T@|@ [I" disp3D;T@@ [I"dispaaro-couch;T@@ [I" dispatch;T@'@ [I"dispatcher;T@'@ [I"dispatcher-rails;T@E@ [I"dispatch_queue;T@@ [I" display;T@@ [I"display_case;T@@ [I"display_for;T@ @ [I"display_name;T@`@ [I"display_words;T@'@ [I"disposable_db;T@V@ [I" disqus;T@@ [I"disqusable;T@@ [I"disqussion;T@@ [I"distance_measures;T@@ [I"DistelliClientFramework;T@@ [I""DistelliServiceFrameworkRails;T@@ [I"$DistelliServiceFrameworkSinatra;T@@ [I"DistelliServiceInterface;T@s@ [I"DistelliServiceMarshallers;T@@ [I" dister;T@+@ [I" distil;TU;[I" 0.14.4;T@ [I"distilled;T@@ [I"distillery;T@@ [I"distinguished_name;T@`@ [I" distlock;T@@ [I"distribunaut;T@@ [I"distribustream;T@@ [I"distributary;T@'@ [I"distributed_demo;T@@ [I"distributed_logreader;T@*@ [I"distributed_mutex;T@@ [I"distributed_rails;T@E@ [I"distributed-trie;T@@ [I"distributest;T@@ [I"distribution;T@X@ [I"distributor;T@@ [I"ditchdaddy;T@"@ [I" ditto;T@@ [I" ditz;T@@ [I" ditz-str;T@'@ [I" divan;T@6@ [I" dive;T@E@ [I" diverge;T@@ [I"divergence;T@@ [I" divine;T@@ [I"divining_rod;T@@ [I"divisible;T@`@ [I" divISOr;T@ @ [I" divshare;T@@ [I"divsufsort;T@@ [@Z@@[I"diy;T@x@ [I" diyanet;T@@ [I" DIY-pcap;T@@ [I"dj;T@@ [I"django-recipes;T@@ [I"django_signal;T@@ [I" djatoka;T@@ [I"djberg96-krb5-auth;T@- @ [I"djc;T@@ [I"dj_dashboard;TU;[I" 0.0.8.7;T@ [I" djinn;T@@ [I" djjour;T@'@ [I"dj_mailer;T@@ [I"djmaze-arid_cache;T@@ [I"djmaze-will_paginate;TU;[I" 2.3.13;T@ [I" dj_mon;T@@ [I" djnml;T@@ [I" djondb;TU;[I"0.120121106;T@ [I"djr;T@@ [I"dj_remixes;T@@ [I"dj_string_extend;T@'@ [I"djsun-mongomapper;TU;[I" 0.4.1.2;T@ [I"djsun-mongo_mapper;TU;[I" 0.5.8.2;T@ [I"djvu-tools;T@I@ [I"djwrapper;T@@ [I"dkastner-alchemist;T@@ [I"dkastner-httparty;T@- @ [I"dkastner-moneta;T@N@ [I"dkastner-rocco;T@W9@ [I"dkastner-taps;T@?@ [I"dkastner-tmuxinator;T@x@ [I" dk-bdb;TU;[I" 0.2.4.2;T@ [I" dkim;T@@ [I"dkowis-xmpp4r-simple;T@@ [I"dl;T@u"@ [I"dlc;T@;@ [I" dlog;T@@ [I" dlogger;T@@ [I"dl-rake-latex;TU;[I" 5.4.1;T@ [I"dlrow_olleh;T@@ [I"dl-tetris;T@E@ [I"dlundqvist-textmate;T@Q@ [I"!dm-accepts_nested_attributes;T@@ [I"%dm-accepts_nested_attributes_for;T@N@ [I"dm-actionstamps;T@E@ [I"dm-activemodel;T@@ [I"dm-active_model;T@u@ [I"dm-adapter-simpledb;T@@ [I"dm-adjust;T@N@ [I"dm-aggregates;T@N@ [I"dm-ambition;T@N@ [I" dmamp;T@@ [I" dmap;T@@ [I" dmap-ng;T@@ [I"dm-appengine;T@6@ [I" dmapper;T@!@ [I"dm-ar-finders;T@N@ [I"dmarkov-right_aws;T@Z-@ [I"dmarkow-raspell;T@@ [I"dmattes-railroad_xing;T@Y@ [I"dmattes-static-gmaps;T@"@ [I"dm-aux_codes;T@@ [I"dm-bugzilla-adapter;T@@@ [I"dm-cassandra;T@'@ [I"dm-cassandra-adapter;T@'@ [I"dm-checked-types;T@'@ [I"dm-chef-adapter;T@@ [I"dm-chunked_query;T@@ [I" dm-cli;T@N@ [I" dm_cloud;T@@ [I"dm-constant-cache;T@@ [I"dm-constraints;T@N@ [I" dm-core;T@N@ [I"dm-couchdb-adapter;T@-/@ [I"dm-counter-cache;T@ @ [I" dm-cutie;T@x@ [I"dm-cutie-extras;T@x@ [I"dm-cutie-ui;T@x@ [I"dm-datastore-adapter;T@,@ [I"dm-deep_cloning;T@@ [I"dm-delayed-job;T@`@ [I"dm-devise;T@@ [I"dm-dh_api-adapter;T@'@ [I"dm-do-adapter;T@N@ [I"dm-dragonfly;T@`@ [I"dm-drupal;T@+@ [I"dm-drupal2;T@@ [I" dme-api;T@@@ [I"dm-encrypted;T@@ [I" dmenu;T@E@ [I" dm-enum;T@@ [I" dm-extjs;T@1@ [I"dm-factory_girl;T@@ [I"dm-fasten-the-seat-belt;TU;[I" 0.9.11;T@ [I"dm-ferret-adapter;T@N@ [I"dm-fixtures;T@@ [I"dm-fluiddb-adapter;T@@ [I"dm-fql-adapter;T@@ [I"dm-freebase-adapter;T@@ [I"dm-frontbase-adapter;T@@ [I"dmg;T@"@ [I" dm-gen;T@@ [I"dm-geokit;T@@ [I"dm-googlebase;T@`@ [I"dm-haml-scaffold-generator;T@"@ [I"dm-hibernate-migrations;T@@ [I"dm-imap-adapter;T@E@ [I"dm_is_a_tree;T@@ [I"dm-is-audited;T@@@ [I"dm-is-authenticatable;T@@ [I"dm-is-awesome_set;T@@ [I"dm-is-checksumed;T@@ [I"dm-is-counter_cacheable;T@`@ [I"dm-is-friendly;TU;[I" 1.1.15;T@ [I"dm-is-indexed;T@`@ [I"dm-is-list;T@N@ [I"dm-is-localizable;T@@ [I"dm-is-nested_set;T@N@ [I"dm-is-pageable;T@@ [I"dm-is-page-by-page;T@E@ [I"dm-is-paginated;T@'@ [I"#dm-is-persistent_state_machine;T@@ [I"dm-is-predefined;T@x@ [I"dm-is-published;T@@ [I"dm-is-read_only;T@@ [I"dm-is-reflective;T@@ [I"dm-is-remixable;T@N@ [I"dm-is-revisioned;T@@ [I"dm-is-schemaless;T@-/@ [I"dm-is-searchable;T@N@ [I"dm-is-select;T@@ [I"dm-is-serialized;T@@ [I"dm-is-slug;T@@ [I"dm-is-sluggable;T@@ [I"dm-is-state_machine;T@N@ [I"dm-is-taggable;T@Z@ [I"dm-is-temporal;T@@ [I"dm-is-tree;T@N@ [I"dm-is-tsearchable;T@@ [I"dm-is-versioned;T@N@ [I"dm-is-voteable;T@"@ [I"dmitryv-backup;T@.@ [I"dm-json-search;T@@ [I"dm-keeper-adapter;T@"@ [I" dm-last;T@'@ [I"dm-ldap-adapter;T@@[@S[@@ [I" dm-lock;T@@ [I"dm-lucene-adapter;T@@@[I"dm-machinist;T@'@ [I" dm-maker;T@N@ [I"dm-mapping;T@X@ [I"dm-master-slave-adapter;T@"@ [I"dm-metamapper;T@@ [I"dm-migrations;T@N@ [I"dm-mnesia;T@ @ [I" dm-money;T@@ [I"dm-mongo-adapter;T@@ [I" dmm_util;T@@ [I"dm-mysql-adapter;T@N@ [I"dm-nested-transactions;T@"@ [I"dm-noisy-failures;T@@@ [I"dm-observer;T@N@ [I"dm-observers;T@'@ [I"dm-optlock;T@+@ [I"dm-oracle-adapter;T@N@ [I"dmorrill10-utils;T@u@ [I" dm-pager;T@@ [I"dm-pagination;T@x@ [I"dm-paginator;T@@ [I"dm-paperclip;T@@ [I"dm-paperclip-r3;TU;[I" 2.4.5;T@ [I" dm-parse;TU;[I" 0.3.20;T@ [I"dm-persevere-adapter;TU;[I" 0.72.0;T@ [I"dm-pg-types;T@@ [I"dm-polymorphic;T@-/@ [I"dm-postgis;T@u"@ [I"dm-postgres-adapter;T@N@ [I"dm-predefined;T@@ [I" dm-rails;T@u@ [I"dm-rails-gae;T@`@ [I"dm-redis-adapter;T@@ [I"dm-reflection;TU;[I" 0.11.1;T@ [I"dm-rest-adapter;T@N@ [I"dm-restful-adapter;T@n@ [I"dm-revisioned;T@@ [I"dm-riak-adapter;T@@ [I"dm-rinda-adapter;T@@@ [I" dm-rspec;T@@ [I"dm-rspec2;T@@ [I"dms;T@@ [I" dm-s3;T@|@ [I"dm-salesforce;T@@ [I"dm-salesforce-adapter;T@ @ [I"dm-sanitizer;T@@ [I"dm-searcher;T@6@ [I"dm-serializer;T@@ [I" dm-skype;T@E@ [I" dm-spec;T@@ [I"dm-sphinx-adapter;T@@ [I"dm-sprockets-rails;T@E@ [I"dm-sql-finders;T@@ [I"dm-sqlite-adapter;T@N@ [I"dm-sqlserver-adapter;T@N@ [I" dm-svn;T@,@ [I"dm-sweatshop;T@N@ [I"dm-taggings;T@@ [I" dm-tags;T@N@ [I"dm-timestamps;T@N@ [I"dm-tokyo-adapter;T@@ [I"dm-transactions;T@N@ [I"dm-translatable;T@@@ [I"dm-trimmer;T@@ [I"dm-twowaysql;T@@ [I" dm-types;T@@ [I"dm-types-legacy;T@`@ [I"dm-unlazy;TU;[I" 0.0.1.3;T@ [I"dm-userstamp;T@"@ [I"dm-validations;T@N@ [I"dm-validations-ext;T@E@ [I"dm-validations-i18n;TU;[I" 0.3.10;T@ [I"dm-visualizer;T@I@ [I"dm-waztables-adapter;T@@ [I"dm-xml-adapter;TU;[I" 0.587;T@ [I"dm-yaml-adapter;T@N@ [I"dm-zone-types;T@[ @ [I"dna;T@@ [I" dnapi;TU;[I" 1.1.98;T@ [I"dna_sequence_aligner;T@E@ [I"dnclabs-auth-hmac;TU;[I"1.1.1.2011051301;T@ [I"dnclabs-fakeweb-matcher;T@@ [I"dnclabs-httparty;TU;[I"0.6.1.2010090201;T@ [I" dnet-ffi;T@+@ [I" dnif;T@6@ [I" dnode;T@E@ [I" dnote;T@@ [I" dnotify;T@@ [I" dnrml;T@'@ [I" dnsapp;T@@ [I"dnsbl-client;T@x@ [I" dns_guru;T@+@ [I"dnsimple-pdns-provider;T@@ [I"dnsimple-ruby;T@@ [I"dnsmadeeasy;T@@ [I"dnsmadeeasy-api;T@@ [I"dnsomatic;T@@ [I"dnsresolver;T@'@ [I" dnsruby;TU;[I" 1.53;T@ [I" Dnsruby;T@@ [I" dnssd;T@@ [I" dnstools;T@@ [I"dnstraverse;T@N$@ [I"dns-zonefile;T@@ [I"dnz-client;T@+@ [I"do;T@+@ [I"Doa;T@6@ [I"dobedobedo;T@@ [I" dobexer;T@6@ [I" dobro;T@`@ [I"doc;T@@ [I" doc2html;T@@ [I" doc5;T@'@ [I" docapi;T@x@ [I"docbook_files;T@@ [I"docbook_status;T@@ [I" docdiff;T@@ [I" docent;T@E@ [I" docfu;T@@ [I"docgenerator;T@@ [I" docheck;T@@ [I" docify;T@ @ [I" docile;T@@ [I" docjs;T@@ [I" doc_juan;T@u@ [I"dock_driver;T@@ [I"docketeer;T@@ [I"docmago_client;T@@ [I" doco;T@@ [I"docomo_css;T@@ [I"docomo_web_mailer;T@'@ [I" docopt;T@@ [I"docpdftotext;T@@ [I"docrails_kindle;T@@ [I"doc_raptor;T@@ [I" docs;T@V@ [I" docscape;T@"@ [I"docsearch_api;T@'@ [I" docsplit;T@@ [I"docsplit_images;T@|@ [I"!docsplit-paperclip-processor;T@I@ [I" docster;T@E@ [I"docster-rails;T@n@ [I"doc_storage;T@@ [I" doct;T@6@ [I"doctag_json_schema;T@@ [I"doc_template;T@'@ [I" docter;T@;@ [I" doctest;T@'@ [I"doc-thumbnailer;T@@ [I"doc_to_dash;T@@ [I" doctopdf;T@@ [I" doctor;T@'@ [I"doctor_scrape;T@@ [I"doctor-swagger;T@@ [I" docu;T@@ [I" docubot;T@@ [I" doculab;T@@ [I"documatic;T@@ [I" document;T@@ [I"documentalist;T@+@ [I"documenter;T@@ [I"document_file;T@V@ [I"document_form;T@e@ [I"document_hydrator;T@`@ [I"documentify;T@`@ [I"documentinator;T@9@ [I"document_mapper;T@@ [I"document_tree;T@@ [I" docurium;T@@ [I" docushin;T@'@ [I" docusign;T@@ [I"docu_sign;T@@ [I"docusign_rest;T@@ [I"docusignsdk;T@|@ [I"docverter;T@n@ [I"docverter-server;T@@[I"doc_wrapper;T@@ [I" docx;T@@ [I" docxedit;T@@ [I"docx-html;T@@ [I"docx_manipulator;T@n@ [I"docx_templater;T@n@ [I" do_derby;T@Q@[I" dod_maps;T@I@ [I" dodo;T@E@ [I"doesfacebook;T@@ [I"doesfollow;T@x@ [I"doeskeyvalue;T@- @ [I"doesopengraph;T@@ [I"doesprettyurls;T@@ [I"dog;T@'@ [I" dogapi;T@@ [I" dog-bot;T@`@ [I"dogeventer;T@@ [I" dogknife;T@E@ [I" dogma;T@'@ [I" dogo;T@@ [I"dogstatsd-ruby;T@@ [I" do_h2;T@Q@[I" dohdata;T@|@ [I" dohkem;T@@ [I" dohlog;T@g@ [I" dohmysql;T@@ [I" dohroot;T@`@ [I" dohruby;T@@ [I"do_hsqldb;T@Q@[I" dohtest;T@@ [I" dohutil;T@@ [I" dohweb;T@ @ [I"doi;T@@ [I"doing_stream;T@@ [I" do_it;T@@ [I"doitian-tmuxinator;T@@ [I" dojan;T@'@ [I" do_jdbc;T@Q@[I"do-jdbc_sqlserver;T@u"@[I"dojo_generator;T@"@ [I"dojo_mobile_proto;T@'@ [I" dojo-pkg;TU;[I" 1.132.0;T@ [I"dojo-rails;T@*@ [I" dojo_src;T@@ [I"dojox-rails;T@&@ [I"dokan-ruby;T@'@[I" dokkit;T@@ [I" dokkit-model-simpledocument;T@@ [I"dokkit-slides;T@@ [I" doko;T@@ [I" doku;T@x@ [I" dokuen;T@ @ [I" dolarhoy;T@@ [I"dolla_dolla_bill;T@@ [I"dollhouse;T@I@ [I" dolmade;T@@@ [I"dolores_rpm;TU;[I" 3.3.4.8;T@ [I"dolphindeploy;T@'@ [@W]@I"universal-dotnet;T[I" dolt;T@- @ [I" dolzenko;TU;[I" 0.0.27;T@ [I"dolzenko-default_value_for;T@@ [I" domain;T@'@ [I"domainapi;T@E@ [I"domainatrix;T@@ [I"domainerator;T@`@ [I"domain_info;T@E@ [I"domain_name;T@@ [I"domain_prefix;T@I@ [I"domain-probe;T@O@ [I" domainr;T@@ [I" Domainr;T@s@ [I"domain_redirect;T@'@ [I"domain_routing;T@+@ [I"domain_switcher;T@g@ [I"domain_tools;T@E@ [I" dom_id;T@@ [I"dominance;T@'@ [I" dominion;T@'@ [I"#dominiquebrezinski-rack-openid;T@@ [I"$dominiquebrezinski-sinatra-rest;T@x@ [I"dominium_stuff;T@'@ [I" domino;T@@ [I" dominus;T@'@ [I" domo;T@@ [I" domodoro;T@@ [I" domo-rb;T@@ [I" domr;T@@ [I" do_mysql;T@Q@[@]@Q@ [@]@Q@[@]@Q@ [I"don;T@!@ [I" donald;T@@ [I" done;T@'@ [I"dongalyzer;T@'@ [I"donibuchanan-roo;TU;[I" 1.9.1.6;T@ [I" donkey;T@@ [I"donncha-validates_as_email;T@@ [I"donors_choose;T@@ [I"donors_choose2;T@E@ [I"donors_choose-data;T@@ [I"do_notation;T@@ [I"donottrack;T@@@ [I"do_not_want;T@'@ [I" donsgem;T@@ [I"dont-mess-with-my-js;T@E@ [I"doo;T@@ [I" dooby;T@@ [I" doo_dah;T@@ [I" doodle;T@@ [I"doo-extras;T@"@ [I"doohickey;T@I@ [I"do_openedge;T@Q@[I"do_oracle;T@Q@[@]@Q@ [@]@Q@ [@]@Q@[I"door_code;T@V@ [I"doorkeeper;T@$@ [I" doorman;T@@ [I" doorway;T@'@ [I" doozer;T@"@ [I" dope;T@@ [I"dopis_online_client;T@,@ [I"do_postgres;T@Q@[@]@Q@ [@]@Q@ [@]@Q@[I"doppelganger;T@@ [I" dopplr;T@@ [I" dork;T@'@ [I"do_sqlite3;T@Q@[@]@Q@[@]@Q@ [@]@Q@ [I"do_sqlserver;T@Q@[I" dostuff;T@'@ [I" do_stuff;T@x@ [I"dot;T@@ [I" dot11;T@@ [I" dotanuki;T@@ [I"dotanuki-ruby;T@@ [I"dotbackup;T@@ [I"dotblock-api;T@'@ [I" dotcloud;T@@ [I"dotconfig;T@@ [I" dotdot;T@@@ [I" dotenv;T@x@ [I" dotfile;T@I@ [I"dotfile_linker;T@@ [I" dotfiles;T@ @ [I"dotfiles-installer;T@@ [I" dotgems;T@'@ [I" dotify;T@$@ [I" dotime;T@@@ [I"dotimeout-rails;TU;[I"1.0.0.0.1.1;T@ [I" dotimes;T@@ [I" dotiw;T@@ [I" dotless;TU;[I" 1.1.0.5;T@ [I" dotlocal;T@E@ [I"dot_net_services;T@@ [I" dotplan;T@n@ [I" dotr;T@[ @ [I"dot_rake_tasks_in_rails;T@'@ [I" dots;T@E@ [I" dotstore;T@'@ [I" dotter;T@@@ [I" dottor;T@@ [I" dotty;T@@ [I" douban;T@@ [I"douban_api;T@+@ [I"douban_fm;T@E@ [I"douban-rails2.3;T@X@ [I"douban-ruby;T@@ [I" doubapi;T@6@ [I" double;T@`@ [I"double_agent;T@@ [I"double_auth_engine;T@@ [I"double-bag-ftps;T@@ [I"doublecheck;T@[ @ [I"double_doc;T@u@ [I"doubledrones-annotate;TU;[I" 2.4.0.2;T@ [I"doubledrones-i18n_routing;TU;[I" 0.3.6.1;T@ [I"doublehelix;T@@ [I"double_make_sure;T@E@ [I"double_rainbow;T@@ [I"doubleshot;T@ @[I"double_trouble;T@@ [I"doubleVision;T@'@ [I" douche;T@"@ [I"doug-chargify;T@[@ [I" dough;T@@ [I" doughboy;T@@ [I"douglas_peucker;T@'@ [I"dougmcbride-fleximage;T@@ [I"dougo_layout;T@"@ [I"dougui_users;T@E@ [I" dowl;T@!@ [I"downcaser;T@'@ [I" downcer;T@@ [I" downer;T@@ [I"downloader;T@@ [I" downlow;T@+@ [I" downpour;T@3@ [I"downrightnow;T@@ [I"downspout;T@ @ [I"downthemall;T@@ [I"downthetube;T@@ [I" dozens;T@E@ [I" dozuki;T@x@ [I"dozuki-mapper;T@@@ [I"dp;T@@ [I" dpkginv;T@6@ [I"dpkg-tools;T@@ [I" dploy;T@@ [I"dp_publico;T@@ [I"dp_test_gem;T@'@ [I" drab;T@@ [I" draft;T@@ [I"drafteable;T@'@ [I" drafter;T@@ [I"draft-manager;T@'@ [I" drafts;T@n@ [I"draggggable;T@@ [I"dragonfly;T@@ [I"dragonfly-cloudinary;T@@ [I"dragonfly_extensions;T@@ [I"dragonfly-ffmpeg;T@1@ [I"dragonfly-minimagick;T@'@ [I"dragonfly-mogilefs;T@@ [I"dragonfly-styles;T@@ [I"dragongoserver;T@@ [I"dragons_keep;T@@ [I" dragoon;T@@ [I"dragoon_system;T@@ [I"draiodoir;T@'@ [I" drake;TU;[I"0.9.2.0.3.1;T@ [I" dramatis;T@`@ [I" drank;T@@ [I" drano;T@@ [I"drap_adverts_client;T@@ [I" drapeer;T@'@ [I" draper;TU;[I" 0.18.0;T@ [I"draper-cancan;T@`@ [I" dr-apns;T@1@ [I" drawer;T@@ [I" drawr;T@@ [I" drbd;T@@ [I" drbirb;T@@ [I" drbproxy;T@@ [I" drbqs;T@L=@ [I" DRbServe;T@@@ [I"drbservice;T@@ [I" drbssh;T@@ [I"drc_client;T@@ [I" dr_dre;T@`@ [I"dreadlocks;T@'@ [I" dream;T@'@ [I"dreamback;T@@ [I"dreamcatch;T@'@ [I"dream_cheeky;T@'@ [I"dream_gens;T@y@ [I"dream_template;T@"@ [I" dreamy;T@J@ [I" drebs;T@'@ [I"drei_schichten_modell;T@@ [I" drep;T@@ [I" dress;T@E@ [I" dresser;T@@ [I"dressmaker;T@@ [I" dress_up;T@@ [I"drewda_delayed_job;T@i@ [I"%drewda_delayed_job_active_record;T@@ [I"drewda-railroad;T@J@ [I"drewda_rails_admin;T@'@ [I"drews_studio_game;T@@ [I"dr-ffi-proj4;T@'@ [I"drh_admin;T@"@ [I"dribbble-bucket-api;T@@ [I"dribbble-bucket-sync;T@E@ [I"dribbble_rap;T@E@ [I" dribble;T@6@ [I" dribbled;T@@ [I" drifter;T@@ [I"drifter-rails;T@6@ [I" drill;T@@ [I"drink-socially;T@@ [I" drip;T@E@ [I" dripdrop;T@*@ [@3_@*@[I" dripper;T@@@ [I" drivenow;T@@ [I" drizzle;T@@ [I" drjson;T@@ [I" drmap;T@@ [I"dr-merb_cucumber;T@6@ [I"drnic-contacts;T@ A@ [I"drnic-github;T@[@ [I"drnic-haml;T@o@ [I"drnic-liquid;T@@ [I"dr_nic_magic_models;T@' @ [I"drnic-pickler;T@6@ [I"drnic-princely;T@@ [I"drogus-authlogic;T@@ [I"drogus-blue-ridge;T@@ [I"drogus-deep_merge;T@`@ [I"drogus-gadgeteer;T@@ [I"drogus-mongo_mapper;TU;[I" 0.6.10;T@ [I"drogus-oauth;T@@ [I"drogus-opensocial;T@@ [I" droid;T@@ [I" droid19;T@@ [I" droll;T@@ [I" drone;T@@ [I"drone_collectd;T@@ [I"drone_json;T@@ [I"drone-rails;T@@ [I" droom;T@'@ [I" drop;T@@ [I" dropbox;T@@ [I"dropbox-aliix;T@@ [I"dropbox-api;T@@ [I"dropbox-folder-sync;T@V@ [I"dropbox-sdk;T@@ [I"dropbox_server_backup;T@@ [I"dropboxstrg;T@V@ [I"dropbox-sync;T@'@ [I"dropboxuploader;T@'@ [I"dropcaster;T@"@ [I" dropio;T@PM@ [I" dropkick;T@@@ [I" dropset;T@@ [I" dropsite;T@@ [I"dropwallet;T@@ [I"drp;T@@ [I"drpentode-scrivener;T@@ [I"DrQueueRubyBindings;T@@ [I" drudgery;T@@ [I" druid;T@@ [I"drujensen-browsercms;T@@ [I" drumbone;T@@ [I"drumherum;TU;[I" 0.1.34;T@ [I" drunit;T@@ [I" drupal83;T@@ [I"drupal-deploy;T@@ [I"drupal_fu;T@'@ [I"drupal.rb;T@ @ [I"DrupalScan;T@@ [I" drupid;T@@ [I"drupistrano;T@@ [I"drush-deploy;T@@ [I"drx;T@@ [I"dry;T@'@ [I" dry_crud;T@@ [I" drydock;T@"@ [I"dry_forms;T@I@ [I" dryft;T@'@ [I"dry_haml_handlebars;T@@ [I" dryink;T@@ [I" dryml;T@ @ [I"dryml-firemarker;T@3@ [I"dry-observer-rails;T@@ [I"dry_scaffold;T@@ [I" drysql;T@I@ [I"dry_views;T@E@ [I"dryzilla_game;T@@ [I"ds;T@@ [I"dsander-redis;T@ @ [I"dsander-redis-store;T@@ [I"dsander-reve;TU;[I" 0.0.139;T@ [I" dsass;T@@ [I"dsf_checker;T@@ [I" dsf-ruby;T@@ [I" dshelf;T@@ [I"ds-kitsune;T@[@ [I" dsktool;T@@ [I"dsl;T@@ [I"dsl_accessor;T@@ [I"dsl_accessors;T@'@ [I"dsl-block-engine;T@@ [I"dsl_helper;T@'@ [I" dslisprb;T@@ [I" dslize;T@@ [I" dslkit;T@R@ [I"dsl-latex-simple;T@'@ [I"dst;T@'@ [I"dsturnbull-carrierwave;TU;[I" 0.4.9;T@ [I" dsturnbull-database_cleaner;T@,@ [I"dsturnbull-mini_magick;T@@ [I" dtask;TU;[I"002;T@ [I" dtaus;T@@ [I" DTAUS;T@I@ [I"dtcrandom0;T@@ [I"dtefacil_xml_builder;T@@ [I" dtest;T@@ [I"dtf;T@@ [I" dtf-rvm;T@'@ [I"dtf-session;T@E@ [I" dti_nitf;T@[@ [I"dtr;T@@ [I"DTR;T@E@ [I" duality;T@@ [I"dub;T@@ [I"dubdubdub;T@@ [I" dubious;T@@[I" duby;T@'@ [@+`@@[I" duck;T@@ [I"duck_chain;T@@ [I"duck-duck-go;T@;@ [I"duckinator-fakefs;T@x@ [I" ducklink;T@@ [I"duck_proof;T@"@ [I"ducksauce;T@@ [I"ducksboard;T@6@ [I"duckstrings;T@@ [I" ducktape;T@@ [I"ducktator;T@'@ [I"duck_test;T@1@ [I"ducktypechecker;T@`@ [I"duct_tape;T@"@ [I"dudemeister-uuid4r;T@6@ [I"dude_weak;T@'@ [I"DUI;T@@ [I" duit;T@'@ [I" duke;T@1@ [I" dullard;T@@ [I"duly_noted;T@@ [I"dumb_delegator;T@@ [I"dumb_quotes;T@f!@ [I"dumbstats;T@E@ [I" dummier;T@@ [I" dummy;T@Q@ [I"dummy-cache;T@@ [I"dummy_data;T@Q@ [I"dummy_dropbox;T@@ [I"dummy_dropbox_sdk;T@@ [I"dummy_files;T@@ [I"dummy_gem;T@@ [I"dummy_gen-rails;T@@ [I"dummy_image;T@@ [I"dummy_performance_tests;T@' @ [I"dummy_tasks;T@'@ [I"dummy_test_pattern;T@V@ [I"dummy_text;T@E@ [I"dummy_urls;T@e@ [I" dump;T@@ [I" dumpdb;T@@ [I" dumper;T@@ [I"dump-parser;T@@ [I" dumpster;T@@ [I" dunder;T@@ [I"dungeon_master;T@@ [I"dunkstewart-blogbits;T@x@ [I"dunkstewart-webbits;T@@ [I"duns-lookup;T@@@ [I"duo;T@E@ [I"duoconsole;T@+@ [I" duo-rest;T@E@ [I"duo_security;T@'@ [I" duostack;T@@ [I" dupe;T@@ [I"dupe-magick;T@@ [I" dup_eval;T@+@ [I" duple;T@"@ [I"duplicate_it;T@@ [I"duplicati;T@@ [I"durable_hash;T@@ [I"duraflame;T@@ [I" duran;T@@ [I" duration;T@@ [I" durb;T@[ @ [I"durran-carrierwave;T@@ [I"durran-validatable;T@@ [I" dusel;T@@@ [I" dusen;T@@ [I" dust;T@1@ [I"dust_albums;T@E@ [I"dust_assets;T@@ [I"dust-ckeditor;T@9@ [I"dust-deploy;TU;[I" 0.16.4;T@ [I"dust-generators;T@@ [I"dustMason-right_aws;T@@ [I"dust-rails;T@x@ [I"dust-sinatra;T@@@ [I" dutchess;T@@ [I"dutchfaker;T@@ [I"dutws_foo;T@V@ [I"dutws_foo_rails3;T@@ [I" duvet;T@x@ [I"dvd-converter;T@@ [I"dvi;T@@ [I" dvrb;T@E@ [I" dwarf;T@@ [I"*dw-boxgrinder-tarball-platform-plugin;T@@ [I"dwc-archive;T@@ [I" dwemthy;T@@ [I"dwilkie-foreigner;T@@ [I" dwolla;T@@ [I"dwolla-ruby;T@@ [I"dws-registry;T@@ [I"dwt;T@`@ [I" dyci;T@@ [I"dyci-compiler;T@6@ [I" dydra;T@@ [I"dye;T@+@ [I"dygraphs-rails;T@'@ [I"dyi;T@@ [I"dyi_rails;T@@ [I"dylansm-wirble;T@c2@ [I"dylanvaughn-bluepill;TU;[I" 0.0.40;T@ [I" dynabix;T@@ [I" dynahash;T@@ [I" dynaload;T@@ [I"dynamic_assets;T@u/@ [I"dynamic_attr_accessible;T@E@ [I"dynamic_attributes;T@N@ [I"dynamic-body-class-and-id;T@@ [I"dynamic_configuration;T@@ [I"dynamic_controller;T@@ [I"dynamic_default_scoping;T@"@ [I"dynamic_errors;T@@ [I"dynamic_fields;T@@ [I"dynamic-fields;T@@ [I"dynamic_fieldsets;T@ @ [I"dynamic_finders_plus;T@@ [I"dynamic_form;T@T @ [I"dynamic_image;T@Q@ [I"dynamic_images;T@@ [I"dynamic_include;T@'@ [I"dynamicmatic;T@@ [I"dynamic_menu;T@O@ [I"dynamic_methods;T@'@ [I"dynamic_models;T@@ [I"dynamic-page-title;T@@ [I"dynamic_query;T@@ [I"dynamic_registrar;T@'@ [I"dynamic_reports;T@"@ [I" dynamics;T@@ [I"dynamic_session_exp;T@'@ [I"dynamic_sitemaps;T@@ [I"dynamic_tagged_logger;T@'@ [I"dynamic_variable;T@@ [I"dynamic_vars;T@@ [I" dynamite;T@@ [I" dynamo;T@E@ [I" dynamodb;T@E@ [I" dynamoid;T@@ [I" Dynamoid;T@'@ [I" dynapi;T@@ [I" dynarex;TU;[I" 1.2.14;T@ [I"dynarex-blog;T@n@ [I"dynarex-daily;T@6@ [I"dynarex-import;T@@ [I"dynarex-levenshtein;T@|@ [I"dynarex-parser;T@"@ [I"dynarex-password;T@+@ [I"dynarex-tags;T@@ [I"dynarex-usersblog;T@@ [I"dynarex-xslt;T@6@ [I"dynashard;T@@ [I"dynatree-rails;T@"@ [I"dyndyndong;T@&@ [I" dynect;T@E@ [I" dynect4r;T@,@ [I"dynectastic;T@@ [I"dynect_email;T@'@ [I"dynect_rest;T@@ [I"dynect_rest-mikehale;T@@ [I"dynect-utils;T@E@ [I" dyninc;T@'@ [I" dynmark;T@ @ [I" dyn_meta;T@@ [I" dyno;T@'@ [I"dynobattery;T@|@ [I"dyno-battery;T@@ [I" dynoid;T@@ [I"/dynport-capistrano_rsync_with_remote_cache;T@@ [I"dynport_tools;TU;[I" 0.2.22;T@ [I"dzema_dm-counter-cache;TU;[I" 0.9.12.1;T@ [I"dzen_widgets;T@'@ [I"dzl;T@@ [I"e;T@@ [I" E1337;T@E@ [I" e164;T@@ [I"e20_ops_middleware;T@ @ [I" e2sw;T@@ [I"e4u;T@@ [I"e4u-emoji;T@E@ [I"e4u-encode;T@'@ [I"e9_attributes;T@@ [I" e9_crm;T@_@ [I" e9_polls;T@@ [I" e9_rails;T@`@ [I"e9s;TU;[I" 2.2.7;T@ [I" e9_tags;T@@ [I"e9_vendors;T@@ [I" eaal;T@t @ [I" each;T@@ [I"each_batched;T@`@ [I"each_section;T@@ [I" each_sql;T@@ [I"each_with_context;T@@ [I"each-with-logging;T@`@ [I"each_with_progress;T@!@ [I" eac-rack;T@@ [I"eactionpack;T@ @ [I" eadcodec;T@6@ [I" e-admin;T@@ [I" eadsax;T@@ [I"+eager_loadable_polymorphic_association;T@'@ [I"eager_load_methods;T@@ [I"eager_record;T@6@ [I" eagle;T@@ [I"eagleclaw;T@@ [I"eagle_labels;T@'@ [I"eagleplatform;T@'@ [I"ealdent-resque-lock;T@@ [I"eallydumb;T@'@ [I"ean;T@@ [I" ean13;T@@ [I" ean3;T@V@ [I" ean8;T@@ [I" earl;T@@ [I"earl_post;T@'@ [I"earl-report;T@@@ [I"earnings_estimates;T@@ [I" earth;T@@ [I"earthquake;T@@ [I"earth-ruby19;T@@ [I"earthtools;T@'@ [I"earth_tools;T@'@ [I"earth-tools;T@@ [I" earworm;T@E@ [I"easel_helpers;T@@ [I"easel_helpers_lite;T@6@ [I"$easier-instance-variable-access;T@s@ [I" eassl;TU;[I" 0.1.1643;T@ [I" eassl2;T@O@ [I" eastwood;T@@ [I" easy;T@'@ [I"easy_admin;T@@ [I"easy_admin_ui;T@@ [I" easy-api;T@@ [I"easy_arel;T@@ [I"easy_as_pie;T@@@ [I"easy_attributes;T@6@ [I"easy_auth;T@@ [I"easy_auth-facebook;T@@ [I"easy_auth-github;T@@@ [I"easy_auth-google;T@@ [I"easy_auth-linked_in;T@@ [I"easy_auth-oauth;T@@ [I"easy_auth-oauth2;T@`@ [I"easy_auth-password;T@@ [I"easy_auth-twitter;T@@ [I"easy-automation;T@@ [I"easy_backup;T@V@ [I"easy_basecamp;T@@ [I"easybench;T@@ [I"easy_bench;T@@ [I"easy-button;T@@ [I"easy_captcha;T@@ [I"easy_class_constants;T@'@ [I"easy_config;T@@ [I"easyconf-rails;T@I@ [I"easycrumbs;T@O@ [I"easy_d3_charts_rails;T@'@ [I"easy_data;T@W@ [I"easy_data3;T@@ [I"easy_dates;T@`@ [I"easy-deployment;T@@ [I"easy_diff;T@E@ [I" easy_dl;T@"@ [I" easy-doc;T@@ [I"easy_downloader;T@`@ [I"easyeditor;T@@ [I"easy_enum;T@@ [I" easy_esi;T@@ [I"easy_flash;T@'@ [I"easy_form_for;T@'@ [I" easyfsf;T@'@ [I"easy_globalize3_accessors;T@N@ [I"easy-gtalk-bot;T@@ [I"easy_http;T@@@ [I"easy_http_cache;T@@ [I"easy_imap;T@"@ [I" easyio;T@x@ [I" easyjour;T@"@ [I"easy_jqgrid;T@E@ [I"easy_key_value;T@@@ [I"easylittleprinter;T@[@ [I" easyload;T@@ [I"easy_log4r;T@@ [I"EasyLogger;T@`@ [I"easymailer;T@@ [I"easy_mail_preview;T@`@ [I" easymap;T@E@ [I"easymarklet;T@V@ [I" easymin;T@@@ [I"easy_model;T@@ [I"easy_monads;T@x@ [I"easy_money;T@@ [I"easy_mplayer;T@u@ [I"easy_multipart;T@@@ [I"easy_nils;T@E@ [I"easyoperate;T@h@ [I"easypartials;T@E@ [I"easy_partials;T@@ [I" easypay;T@@ [I" easypost;T@@ [I"easy-prof;T@@ [I"easyprompt;T@6@ [I" easy_q;T@X@ [I"easy-rack-open-id;T@@ [I"easy_rails_authentication;T@V@ [I"easyredis;T@@ [I"easy_reference_data;T@@@ [I"easyregexp;T@`@ [I"easy_responders;T@@ [I"easy_roles;T@N@ [I"easy_routes;T@@ [I"easy_routing;T@'@ [I" easy_s3;T@@ [I"easy-screen;T@@ [I" easysft;T@@ [I" easysh;T@@@ [I"easy-sitemaps;T@E@ [I"easy_sparql;T@`@ [I"easystats;T@@ [I"easy_table;T@"@ [I"easy-table;T@@ [I"!easy-testmode-activemerchant;T@@ [I"easy_timer;T@@ [I"easy_time_zone;T@'@ [I"easytobookr;T@'@ [I"easy_translate;T@@ [I"easy_validatable;T@@ [I"easy-vimeo;T@@ [I"easyxdm-rails;T@@ [I"eat;T@@ [I"eatmysoul;T@@@ [I"eav_presenter;T@[ @ [I" ebabel;T@@ [I" ebay;T@s@ [I" ebayapi;T@&@ [I"ebayapi-awt;T@@ [I" ebayer;T@N@ [I"ebay_party;T@E@ [I" ebayr;T@"@ [I"ebb;T@@ [I"eb_capistrano_extensions;T@@ [I"ebcdic_converter;T@u@ [I"ebics-jruby;T@'@ [I"eb_nested_set;T@@ [I" ebps;T@@ [I"ebs_conductor;T@"@ [I"ebs_prune_snapshot;T@'@ [I"ebs_snapper;T@@ [I"ebs_snapshot_cleanup;T@@ [I"ebs-snapshoter;T@+@ [I" ebuilder;T@E@ [I"ec2-blackout;T@"@ [I"ec2-consistent-snapshot-rb;T@x@ [I"ec2-copy-snapshot;T@@ [I" ec2dream;TU;[I" 3.4.0;T@ [I"ec2-instance;T@@ [I"ec2-instance-manager;T@x@ [I"ec2launcher;T@-@ [I"ec2manage;T@@ [I" ec2meta;T@@ [I"ec2-metadata;T@I@ [I" ec2_name;T@`@ [I"ec2onrails;T@/L@ [I"ec2onrails-experimental;T@Z@ [I"ec2onrails-multiapp;T@Z@ [I"ec2onrails-xtreme-head;T@n@ [I" ec2-rotate-volume-snapshots;T@X@ [I"ec2select;T@@ [I"ec2_setup;T@`@ [I"ec2-signature;T@@ [I"ec2-snapshot;T@@ [I" ec2ssh;T@@ [I" EC2ssh;T@1@ [I"ec2-starter;T@@ [I"ec2_tools;T@@ [I"ec2_ultradns_updater;T@@ [I"ec2-usage-report;T@@ [I"ec2_userdata;T@@ [I" ecart;T@@ [I" ecc_cebu;T@@ [I" echelon;T@@ [I"echelon_chef;T@'@ [I"echi-converter;T@"@ [I"echinoidea;T@@ [I" echo;T@@ [I"echo_base;T@@ [I"echocas-client;T@@ [I"echo-connector;T@@ [I" echoe;TU;[I" 4.6.3;T@ [I" echonest;T@@ [I"echonest_resource;T@@ [I" echor;T@1@ [I" ecircle;T@@ [I"ecircle_soap_client;T@@ [I"ecm_cms_core;T@V@ [I"ecm_cms_navigation;T@ @ [I"ecm_downloads;T@"@ [I"ecm_pictures;T@@ [I"eco;T@@ [I" eco_apps;T@@ [I"eco_apps_master;T@@ [I" ecology;T@p@ [I" ecometry;T@E@ [I"ecommerce;T@@ [I" econe;T@@ [I"eco-rails;T@@@ [I"ec-pairing;T@@ [I"ecriso4217;T@@ [I"ecr_money;TU;[I" 3.6.8;T@ [I"ECS;T@@ [I" ECToken;T@E@ [I" ecutools;T@"@ [I" ecwid;T@'@ [I"ecwid_gateway;T@E@ [I"ed;T@@ [I" edamame;T@@ [I" edango;T@Y@ [I"edave-enumerated_attribute;T@~*@ [I"edave-gcal4ruby;T@X@ [I"edave-gdata4ruby;T@@ [I"edavis10-cerberus;T@@ [I"edavis10-object_daddy;T@@ [I"edavis10-redmine_s3;T@@ [I"edavis10-ruby-web-search;T@E@ [I" edboxra;T@'@ [I"edc1591-piwik;T@@ [I" eden;T@`@ [I" edeprec;T@'@ [I" edgar;T@@ [I"edgar-rack;T@u@ [I"edgar-twitter-search;T@'I@ [I" edge;T@@ [I"edge-auth;T@"@ [I"edge-captcha;T@E@ [I"edgecase-git-pair;T@I@ [I"edgecase-jasmine;T@~@ [I" edgecast;T@'@ [I"edge_cast;T@'@ [I"edgecast_api;T@'@ [I"edge-devise;T@@ [I"edge-grit;T@@ [I"edge-layouts;T@@ [I"edge-parsley-ruby;T@@ [I"edge_rack;T@@ [I"edge-state-machine;T@@ [I" edhd;T@@ [I" edi4r;TU;[I" 0.9.4.1;T@ [I"edi4r-tdid;T@@ [I" edifice;T@@ [I"edifice-forms;T@@ [I"edifice-widgets;T@@ [I"edis_client;T@@ [I" edit;T@`@ [I"editable_content;T@@ [I"editable-image;TU;[I" 0.25;T@ [I"editalign;T@@ [I" editeur;T@'@ [I"edit_mode;T@@ [I" editor;T@V@ [I"editor_base;T@'@ [I"editorial_logic;T@Q%@ [I"editorkicker;T@@ [I"editserver;T@1@ [I" editx;T@I@ [I"edl;T@6@ [I"edm;T@@ [I"edmodo-api;T@@ [I"edmunds_ruby;T@@ [I"edn;T@@ [I"edoors-ruby;T@n@ [I"edouard-clarity;T@<@ [I"edouard-htmldiff;T@"@ [I"edouard-metric_fu;T@u@ [I"edouard-mini_magick;T@@ [I"edouard-rchardet;TU;[I" 1.3.4.1;T@ [I"edouard-ya2yaml;TU;[I" 0.30.1;T@ [I" edploy;T@@ [I"edr;T@@ [I"edsinclair-git-pair;T@@ [I" eds-mom;T@'@ [I" edtf;T@@ [I"educandus_api;T@E@ [I" educator;T@'@ [I" edugem;T@'@ [I" edurails;T@'@ [I"!edwardsa-acts-as-taggable-on;T@@ [I" eedb;T@@ [I" eeepub;T@@ [I"eeepub-with-cover-support;T@u!@ [I"eel;T@E@ [I" eeml;TU;[I" 0.0.42;T@ [I"eeml-simple;T@@ [I"eeng-money;T@'@ [I"eenie_meenie;T@'@ [I"ee_recipes;T@'@ [I" eetee;T@"@ [I"eew_jp_notify;T@'@ [I"eew_parser;T@+@ [I" efax;T@@ [I"efficiency20-delayed_job;TU;[I" 1.8.51;T@ [I"efficient_translations;T@@ [I" effigy;T@x@ [I"effin_utf8;T@@ [I" effuse;T@@ [I"EFL;T@@ [I" efreesms;T@ @ [I" egauge;T@@ [I"egeneratr;T@'@ [I" egg2ofx;T@@@ [I" eggache;T@'@ [I"egg_carton;T@!@ [I" eggnog;T@E@ [I"egg-notifier;T@E@ [I" eggplant;T@I@ [I" eggroll;T@'@ [I" eggsh;T@@ [I"egi;T@"@ [I"eg_nijigazou_sokuhou;T@@ [I" egor;T@- @ [I"egregious;T@@ [I"ehrenmurdick-git-pair;T@@ [I"eid;T@'@ [I"eigenclass;T@@ [I"eightball;T@6@ [I" eimxml;T@<@ [I" eim_xml;T@"@ [I" einfug;T@'@ [I" einhorn;T@@ [I" einstein;T@@ [I"eio;T@@ [I"eisenhower;T@@ [I" ejemplo;T@@ [I"ejs;T@@ [I"ejs-rcompiler;T@@@ [I" ekey;T@@@ [I" ekuseru;T@[@ [I" el4r;T@@ [I"elabs_matchers;T@@ [I" elapse;T@@ [I"elasesino;T@E@ [I"elastic_attributes;T@@ [I"elasticity;TU;[I" 2.5.2;T@ [I"elastic-mapreduce;TU;[I"2011.11.23;T@ [I"elastic_models;TU;[I" 0.0.0.2;T@ [I"elastic_rails;T@@ [I"elastic_record;T@[@ [I"elasticsearch;T@@ [I"elastic_searchable;T@ @ [I"elasticsearch_autocomplete;T@E@ [I"elasticsearch-client;T@`@ [I"elasticsearch-node;T@y@ [I"elasticsearch-ruby;T@"@ [I"elasticshell;T@n@ [I"elasticss-rails;T@+@ [I"elastictastic;TU;[I" 0.10.9;T@ [I"elastic-textarea;T@@ [I" elbow;T@'@ [I" elcalc;T@'@ [I"elcamino-alexa;T@6@ [I" elcgeo;T@E@ [I" el_dap;T@"@ [I"eldarscrolls;T@X@ [I" eleanor;T@@ [I"elecnix-omnisocial;T@|@ [I" election;T@'@ [I" electron;T@@ [I" elekk;T@@ [I"elemental;T@@@ [I"elementaljs-rails;T@E@ [I"elementor;T@V@ [I" elements;T@@ [I" elephant;T@E@ [I"elephant-cache;T@@ [I"elephant-driver;T@@ [I" elephas;T@;@ [I" elesai;T@W@ [I" eletro;T@`@ [I"elevation_event_calendar;T@@ [I" eleven40;T@@ [I"eleven40_16;T@@ [I"elf;T@@ [I"el_finder;T@T @ [I"elf_manifesto;T@@ [I" elfproef;T@+@ [I"el_generators;T@@ [I" elhaweet;T@6@ [I" elia;T@@ [I"!eliasbaixas-sendgrid_toolkit;T@W@ [I"elibri_api_client;T@@.@ [I"elibri_connect;T@@@ [I"elibri_onix;T@@ [I"elibri_onix_dict;T@@ [I"elibri_onix_generator;T@@ [I"elibri_onix_mocks;T@@ [I"elibri_watermarking;T@- @ [I"elibri_xml_versions;T@1@ [I" elif;T@@ [I"eligo-rails;T@"@ [I" elise;T@@ [I"elisehuard-rsaml;T@@@ [I"EliteJournal;TU;[I" 1.9.492;T@ [I" elixir;T@'@ [I"elk;T@V@ [I" ellipsis;T@'@ [I" elmah;TU;[I"1.1.11517.0.20100822;T@ [I"elmer-padrino-warden;T@@ [I"elmer-will_paginate;T@@ [I"elo;T@@ [I"eload_select;T@'@ [I"elock-client;T@@ [I" eloqua;T@@ [I"eloqua_api;T@@ [I"elo-ratings;T@'@ [I" el_req;T@'@ [I" elrte;T@"@ [I"els_bootstrap;TU;[I" 0.0.3.4;T@ [I"elscripto;T@@ [I"elsewhere;T@6@ [I"elskwid-gem-test;T@@ [I"elskwid-munger;TU;[I" 0.1.4.5;T@ [I"elskwid-phone;TU;[I" 0.9.9.4;T@ [I" elster;T@V@ [I"els_token;T@u@ [I"elucid-adaptive_pay;T@I@ [I"elucidate;T@@ [I"elucid-rails_admin;T@'@ [I" eluka;T@`@ [I" elus;T@@ [I" elusive-iconfont-sass-rails;T@@ [I"elusive-icons-sass-rails;T@C@ [I"elvallenato;T@`@ [I" el_vfs;T@'@ [I"el_vfs_client;T@@ [I" elvis;T@'@ [I"elyalvarado-geoplanet;T@@ [I" elzar;T@@ [I"em;T@'@ [I" email;T@@ [I"email2face;T@6@ [I"email_address_validation;T@@ [I"email_address_validator;T@E@ [I"email_blacklist;T@`@ [I"email_center_api;T@'@ [I"email_detector;T@'@ [I"emaildirect;T@ @ [I"email_direct;T@'@ [I" emailer;T@'@ [I"email_format_validator;T@@ [I"email_form_generator;T@W@ [I"email_list;T@@ [I"email_manager;T@@ [I"email_nugget_rb;T@@ [I"email-opened;T@@ [I"email_override;T@6@ [I"email_pop_reader;T@'@ [I"email_preview;T@@ [I"email_recipient_guard;T@' @ [I"email_reply_parser;T@J@ [I"email_reply_parser_ffcrm;T@@ [I"email_sanitizer;T@'@ [I"email_sender;T@@ [I"email_spec;T@@ [I"email_spec-tricycle;T@y@ [I"email_spy;T@ @ [I"email-spy;T@"@ [I"email-test-helpers;T@@ [I"email_to_face;T@@ [I"email_tracker;T@@ [I"email_valid;T@'@ [I"email_validation;T@@ [I"email_validator;T@@ [I"email-validator;T@@ [I"email_veracity;T@@ [I"email_veracity_checker;T@E@ [I"email_verifier;T@"@ [I"emailvision;TU;[I" 2.1.14;T@ [I"email_vision;T@[@ [I"emailvision4rails;T@+@ [I"email_vision-neopoly;T@@ [I" emaily;T@[ @ [I" emailyak;T@n@ [I"em-amazon-sqs;T@@ [I" em-apn;T@@ [I" em-apns;T@`@ [I" em_aws;T@@ [I"embarista;T@T @ [I" em-batch;T@@ [I"em-beanstalk;T@@ [I" embed;T@"@ [I"embed-assets-rails;T@@ [I"embedded_localization;T@,@ [I"embedded_record;T@@ [I"embedded_url;T@"@ [I"embed_google;T@'@ [I"embed_html;T@@ [I" embedify;T@n@ [I"embedit_gem;T@E@ [I" embedly;TU;[I" 1.5.6;T@ [I"embedly-rb;T@'@ [I" ember;T@@ [I"ember-engine;T@'@ [I"ember-generators;T@E@ [I"emberjs-couchapp;T@n@ [I"emberjs-rails;TU;[I"2012.9.17;T@ [I"ember-layout;T@E@ [I"em-berp-protocol;T@@ [I"ember-rails;T@@ [I"ember-rails-flash;T@'@ [I"ember-resource;T@@ [I"ember-rest-rails;T@E@ [I"ember-routemanager;T@E@ [I"ember_script;T@@ [I"ember-script;T@'@ [I"ember_script-rails;T@E@ [I"ember-script-ruby;T@'@ [I"em-betfair;T@[ @ [I" embient;T@@ [I"embootstrap-rails;T@E@ [I" embratel;T@x@ [I"em-breakout;T@@ [I"em-campfire;T@@ [I"em-console;T@@ [I"em-convore;T@@ [I"em-couchbase;T@@ [I"em-couchdb-request;T@'@ [I"em-directory-watcher;T@'@ [I"em-dir-watcher;T@@ [I" em-dns;T@`@ [I" emdrb;T@@ [I" em-easy;T@@@ [I" emenu;T@@ [I"emerald-cms-base;T@'@ [I"emerald-rails;T@@ [I"emergent-core;T@*@ [I" emerson;T@@ [I"e-meter-gom-daemon;T@I@ [I"em-eventsource;T@@ [I"em-facebook;T@@ [I" em-files;T@I@ [I"em-file-utils;T@@ [I"em-flickraw;T@-@ [I" em-fs;T@@ [I"em-ftp-client;T@E@ [I" em-ftpd;T@'@ [I"em-ftpd-fsd;T@@ [I"em-handlersocket;T@@ [I"em-hiredis;T@`@ [I"em-http-metrics;T@'@ [I"em-http-monitor;T@'@ [I"em-http-oauth-request;T@@ [I"em-http-request;T@@ [I"em-http-request-webdav;T@'@ [I"em-http-server;T@|@ [I" em-idigi;T@'@ [I" emilio;T@`@ [I"emils_screen_scraper;T@@ [I" em-imap;T@I@ [I"emipair-delayed_job;TU;[I" 2.0.3.1;T@ [I"emipair-merb_global;T@3@ [I"emipair-webrat;T@J@ [I" em-irc;T@E@ [I" emissary;TU;[I" 1.3.22;T@ [I" emitter;T@@ [I"emitter-ruby19;T@+@ [I" em-jack;T@|@ [I"em_json_connection;T@"@ [I"em-jsonrpc;T@@ [I"emk-sinatra-url-for;T@@ [I"em-langrove;TU;[I" 0.0.4.6;T@ [I"em-logger;T@'@ [I" emma;T@@ [I"em-mailer;T@'@ [I" emmett;T@E@ [I"em-minitest-spec;T@@ [I"em-mixpanel;T@E@ [I" em-mongo;T@@ [I" em-mqtt;T@E@ [I" em-msn;T@D@ [I" em-mysql;T@@ [I"em_mysql2_connection_pool;T@@ [I"em-mysqlplus;T@|@ [I"em-net-http;T@@ [I"em-net-http-npn47;T@`@ [I"em-nordnet;T@'@ [I"emogilefs;T@@ [I" emoji;T@@ [I"emoji4rails;T@E@ [I" emojify;T@n@ [I"emoji-rspec;T@'@ [I" emory;T@@@ [I" emote;T@@ [I"emoticon_fontify;T@@ [I"emp;T@@ [I"Empact-activerecord-import;T@@ [I"Empact-ar-extensions;T@' @ [I"Empact-authlogic;T@@ [I"Empact-authlogic_rpx;T@O@ [I"Empact-hierclust;T@@ [I"Empact-mongo_session_store;T@@ [I"Empact-rpx_now;T@X@ [I"Empact-sexy_pg_constraints;T@x@ [I"Empact-trackless_triggers;T@`@ [I"Empact-will_paginate;TU;[I" 2.3.15;T@ [I"em_pessimistic;T@@@ [I" empezar;T@x@ [I"em-pg-client;T@@ [I"empipelines;T@[@ [I" emporium;T@@ [I"em-posixmq;T@@ [I"em-postgres;T@E@ [I"em_postgresql;T@@ [I"em-postgresql-sequel;T@@ [I"em-postman;T@@ [I"em-powerdns;T@'@ [I" empp;T@@ [I"empresaula-api;T@G@ [I"empresaula-assets;T@@ [I"em-priority-queue;T@x@ [I"em-process-buffer;T@E@ [I"em-promise;T@@ [I" em-proxy;T@@ [I"empty_eye;T@@ [I"em-pusher;T@@ [I"em-rack-mongrel2;T@I@ [I"em-redfinger;T@@ [I" em-redis;T@@ [I"em-redislite;T@I@ [I"em-redis-unified;T@@ [I"em_remote_call;T@@ [I"em-resolv-replace;T@;@ [I"em-resque;T@@ [I" em_retry;T@'@ [I" em-riak;T@^@ [I" emrpc;T@`@ [I"em-rserve;T@@@ [I" em-rspec;T@`@ [I" em-rtmp;T@@ [I"em-ruby-irc;T@@ [I"em-ruby-sockets;T@@ [I"em_rugged;T@@ [I"ems;T@t @ [I" em_s3;T@"@ [I"em-scenario;T@@ [I"em-sequel-async;T@6@ [I"em-sequence;T@`@ [I"em-serialport;T@E@ [I"em-service-now;T@@ [I" em-sflow;T@@ [I"em-simple_telnet;T@@ [I"em-smsified;T@@ [I"em-socksify;T@@ [I" em-sofa;T@`@ [I" em-spec;T@@ [I" em-ssh;T@@ [I"em-stathat;T@@ [I"em-statsd;T@'@ [I"em-stdout;T@'@ [I"ems_test_gem;T@E@ [I" em-swirl;T@`@ [I"em-synchrony;T@@ [I"em-syslog;T@E@ [I"em-syslog-logger;T@@ [I"em-systemcommand;TU;[I" 2.0.9;T@ [I" em-test;T@'@ [I"em-throttled_queue;T@@ [I"emtraceroute;T@E@ [I" em-tvdb;T@@ [I"em-twitter;T@@ [I"em-twitter-client;T@'@ [I"em-tycoon;T@- @ [I"em-ucengine;T@@ [I" em-udev;T@'@ [I" em-udns;T@@ [I"em-udp-proxy;T@@ [I"emusic-downloader;T@@ [I"em-ventually;T@6@ [I" emvoicer;T@`@ [I"em-websocket;T@@ [I"em-websocket-client;T@`@ [I"em-websocket-proxy;T@@@ [I"em-websocket-request;T@n@ [I"em-websocket-server;T@X@ [I" em-whois;T@@ [I" em-winrm;T@Y@ [I"em-work_queue;T@'@ [I"em-wrapper;T@@ [I"em-ws-client;T@@ [I"em-xmlrpc-client;T@@ [I" em-xmpp;T@V@ [I" em-xs;T@'@ [I"em-zeromq;T@@ [I" em-zmq;T@E@ [I"em-zmq-tp10;T@@ [I" enabled;T@`@ [I" enat;T@`@ [I" encbs;T@@ [I" encc;T@'@ [I" enchant;T@H@ [I"enchilada;T@'@ [I" enco;T@6@ [I" encoda;T@+@ [I"encoded_attachment;T@@ [I"encoded_polyline;T@'@ [I" encoder;T@E@ [I"encoder-rb;T@@ [I"encoder-tools;T@E@ [I"encode_with_alphabet;T@"@ [I"encoding_checker;T@"@ [I"encoding-codepage;T@@ [I"encodingdotcom;T@@ [I"encoding-dot-com;T@@ [I"encoding-kawai;T@[ @ [I"encoding_middleware;T@@ [I"encodingof;T@'@ [I"enconverter;T@@ [I" encosion;T@@ [I"encrypted_attributes;T@@ [I"encrypted-attributes;T@E@ [I"encrypted_cookie;T@"@ [I"encrypted-cookies;T@@ [I"encrypted_cookie_store;T@@ [I"encrypted-cookie-store;T@@ [I"'encrypted_cookie_store-instructure;T@@ [I"encrypted_env;T@'@ [I"encrypted_id;T@@ [I"encrypted_strings;T@@ [I"encrypted_text;T@@@ [I"encryption_accessor;T@E@ [I"encryptor;T@;@ [I"encryptor2;T@@ [I" endeca;T@@ [I"endeca_on_demand;T@@ [I"endeca_xml;T@- @ [I" endeco;T@"@ [I" endeve;T@@ [I" endicia;T@@ [I" endless;T@'@ [I"endlessruby;T@@ [I"endless_ruby;T@'@ [I"endorster;T@'@ [I" endpoint;T@@ [I" energon;T@@ [I" energy;T@'@ [I" enforcer;T@`@ [I"enforce_schema_rules;T@ @ [I"enforce-ssl;T@I@ [I" enform;T@'@ [I" engage;T@`@ [I"engagecsm;T@@ [I" engen;T@|@ [I"engine-assets;T@@ [I" engineer;T@@ [I"engineering;T@-!@ [I"engineering_calculator;T@O@ [I"engine_model;T@E@ [I"engine_of_war;T@O@ [I"engine-rea;T@@ [I"engine-rea-admin;T@@ [I"engine_room;T@@ [I"engine-tune;T@@ [I" enginex;T@@ [I"engineyard;T@~T@ [I"engineyard-cloud-client;T@ @ [I"engineyard-dns;T@@ [I"engineyard-dnsimple;T@@ [I"engineyard-hudson;T@@ [I"engineyard-jenkins;T@@ [I"engineyard-local;T@@ [I"engineyard-metadata;T@[@ [I"engineyard-migrate;T@@ [I"engineyard-recipes;T@@ [I"engineyard-serverside;T@z@ [I""engineyard-serverside-adapter;T@z@ [I"engineyard-theme;T@J@ [I"engineyard-visualvm;T@Y@ [@5h@Y@[I" englify;T@@ [I" english;T@y@ [I"english_county_select;T@`@ [I"englishext;T@@@ [I"english_key;T@@ [I"engorge-ostruct;T@!@ [I" engrave;T@@ [I" engrel;T@-/@ [I"engtagger;T@@@ [I" enhance;T@@ [I"enhanced_date_select;T@@ [I"enhanced_marc;T@@ [I"enhanced_migrations;T@u@ [I"(enhanced_request_forgery_protection;T@e@ [I"enhanced_select;T@ @ [I"enhancerepo;T@@ [I" enigma;T@'@ [I"enigmamachine;T@7@ [I"enigma_machine;T@E@ [I" enjin;T@'@ [I"enju_barcode;T@@ [I"enju_biblio;T@@ [I"enju_book_jacket;T@E@ [I"enju_bookmark;T@`@ [I"enju_circulation;TU;[I" 0.0.71;T@ [I"enju_core;T@@ [I"enju_event;T@. @ [I"enju_export;T@@ [I"enju_inter_library_loan;T@@ [I"enju_inventory;T@ @ [I"enju_library;T@E@ [I"enju_manifestation_viewer;T@'@ [I"enju_message;T@@ [I" enju_ndl;T@@ [I"enju_news;T@@ [I" enju_nii;T@"@ [I" enju_oai;T@"@ [I"enju_purchase_request;T@@ [I"enju_question;T@@ [I"enju_resource_merge;T@@ [I"enju_search_log;T@n@ [I"enju_standalone_interface;T@'@ [I"enju_subject;T@p@ [I"enki-engine;T@@ [I" enom;T@x@ [I" enom-api;T@@ [I"enough_fields;T@@ [I"enphase-arturo;T@ @ [I"enphase-carmen;T@V@ [I" enqueue;T@'@ [I" enrico;T@|@ [I" en_route;T@'@ [I" enrycher;T@@ [I" enscoped;T@@ [I" ensemble;T@'@ [I" ensenar;T@@@ [I"ensign_erratic;T@@ [I"enstratus;T@'@ [I"enstratus_helper;T@'@ [I"ensurable;T@E@ [I"ensure_connected;T@`@ [I"ensured_schema;T@1@ [I"ensure-encoding;T@@ [I"ensure_valid_encoding;T@J@ [I"ent;T@@ [I" entasis;T@@ [I"enterprise;T@@ [I"enterprise-ohai;T@@ [I"enterprise-scripts;T@@ [I"enterprise_time_extensions;T@@ [I"enterprisifier;T@E@ [I" entifier;T@@ [I" entitled;T@1@ [I"entitlement;T@@ [I" entity;T@E@ [I" entityjs;T@"@ [I"entity_logger;T@E@ [I"entitymap;T@E@ [I"entity_storage;T@@ [I"entity-storage;T@ @ [I"entity_store;T@1@ [I"entp-ruby-openid;T@@ [I" entrez;TU;[I" 0.5.8.1;T@ [I"entropi-bootstrap-rails;T@@ [I" entropy;T@@ [I"entypo-rails;T@@ [I" enum;T@@ [I" enumable;T@'@ [I"enum_accessor;T@@ [I" enumargs;T@O@ [I" enumattr;T@@ [I"enum_attr;T@@ [I"enumattr-ext;T@'@ [I"enum_attribute;T@E@ [I"enum_column;T@1@ [I"enum_column3;T@+@ [I"enumerable_constants;T@'@ [I"enumerable_deep_search;T@@ [I"enumerable-extra;T@@@ [I"enumerable_fu;T@`@ [I"enumerable_hashify;T@E@ [I"enumerable-lazy;T@'@ [I"enumerable_lz;T@+@ [I"enumerable_mapper;T@@ [I"enumerable-proxy;T@T @ [I"enumerabler;T@@ [I"enumerable_replace;T@'@ [I"enumeradical;T@- @ [I"enumerate_by;T@"@ [I"enumerated;T@@ [I"enumerated_attr;T@@ [I"enumerated_attribute;T@3@ [I"enumerated_field;T@@ [I"enumerated_state;T@n@ [I"enumerate_hash_values;T@@ [I"enumerate_it;T@@ [I"enumerate_words;T@@ [I"enumerating;T@@ [I"enumeration;T@ @ [I"enumerations;T@@ [I"enumerations_mixin;T@,@ [I"enumerative;T@@ [I"enumerator-memoizing;T@'@ [I"enumerize;T@@ [I"enum_field;T@@ [I" enum_id;T@@ [I" enumify;T@@ [I"enumitation;T@@ [I"enumlogic;T@@ [I"enum_plus;T@@ [I"enum_records;T@@@ [I"enum_simulator;T@;@ [I"enumstats;T@@ [I"enum_table;T@@ [I"enum_type;T@@ [I" enumz;T@@ [I"env;T@@ [I"envb-rails;T@@ [I" envcheck;T@@ [I"env_config;T@@ [I" enviable;T@'@ [I" envie;T@@ [I" envious;T@@ [I" enviro;T@@ [I"environment;T@@ [I"environmental;T@@ [I"environmentalist;T@,@ [I"environment_configurable;T@@ [I"environment_information;T@W@ [I" envisage;T@'@ [I" envjs;T@@ [I" envjs19;TU;[I"0.3.8.20101029121421;T@ [I" envoy;T@@ [I" env.rb;T@n@ [I" envs;T@'@ [I" envy;T@'@ [I" enzyme;T@+@ [I"eol_rackbox;T@@ [I"eol_scenarios;T@@ [I"eor;T@@ [I"eostrom-zvent;T@@ [I" eotb;TU;[I" 0.5.18;T@ [I"epa;T@'@ [I"EPA_envirofacts;T@'@ [I"epall-limelight;T@@[I" epas;T@@ [I" epath;T@x@ [I"epa_uv_index;T@@ [I" epay;T@@ [I"epc;T@ @ [I"ephemeral;T@N@ [I"ephemeral_response;T@x@ [I"epiabstractions;TU;[I"1.9.0.0.2;T@ [I" epic;T@"@ [I" epice;T@'@ [I"epiceditor-rails;T@@ [I"epilotto_curriculum;T@@@ [I"episodic-platform;T@B@ [I" epistle;T@'@ [I"epistle-manager;T@'@ [I"epistle-monger;T@'@ [I" epitools;TU;[I" 0.5.19;T@ [I" eployday;T@@ [I" epn-api;T@ @ [I"epo;T@@ [I" epoch;T@`@ [I" eport;T@@ [I" epowd;T@@ [I" epoxy;T@@ [I"epp;T@@ [I"epp_client;T@E@ [I"epp-client;T@@ [I"epp-client-afnic;T@*@ [I"epp-client-base;T@*@ [I"epp-client-hostmaster;T@I@ [I"epp-client-rgp;T@*@ [I"epp-client-secdns;T@*@ [I"epp-client-smallregistry;T@*@ [I" epp-eis;T@I@ [I" epp-fork;T@@ [I" eprayim;T@`@ [I" epsilon;T@'@ [I" epub;T@'@ [I" epubbery;T@@ [I"epubcheck;T@@ [I" epubinfo;T@x@ [I"'epublishing-rails-plugin-installer;TU;[I" 6.0.4;T@ [I"epub-parser;T@@@ [I"epub_validator;T@@ [I" epyce;TU;[I" 0.8.3.02;T@ [I" epzip;T@@ [I"eq;T@@ [I"equalizer;T@E@ [I"equal_rights_for_hash;T@"@ [I"equatable;T@@ [I"equation_builder;T@@ [I"equation_of_time;T@"@ [I"equipment;TU;[I" 1.5.104;T@ [I" equity;T@@ [I"equivalence;T@@ [I"equivalent-xml;T@@ [I" equote;T@'@ [I" er18ern;T@@ [I" erails;T@ @ [I" era_ja;T@`@ [I" erasmus;T@@ [I" erb2haml;T@@@ [I"erb2haml_cli;T@"@ [I"erb2haml-win;T@+@ [I" erb2slim;T@'@ [I" erbal;T@@ [I"erbeautifier;T@@ [I" erberize;T@'@ [I"erbextensions;T@@ [I" erb_form;T@@ [I"erbmicha-spreedly;T@'@ [I" erbook;TU;[I" 9.2.1;T@ [I"erb-process;T@@ [I" erbside;T@@ [I" erbt;T@E@ [I" erb-yaml;T@@ [I"erd;T@1@ [I" erector;T@- @ [I"erector_cache;T@@@ [I"erector-form_for;T@E@ [I" eric;T@E@ [I"erich-math;T@'@ [I"erichummel-sunspot;T@u@ [I"ericperko-acts_as_audited;T@x@ [I"erics_tic_tac_toe;T@@ [I" erie;T@@ [I" erikgem;T@!@ [I" eris;T@@ [I"erlang_c_calculator;T@`@ [I" erlapi;T@g@ [I" erlbox;T@@ [I"erlectricity;T@@ [I" erlgen;T@E@ [I" erl_term;T@@ [I" erl_test;T@[ @ [I"ermahgerd;T@'@ [I" ernicorn;T@@ [I" ernie;T@d@ [I"ero_getter;T@ @ [I" eroi;T@@ [I"erotte-validatable;T@@ [I"erp_agreements;T@i@ [I" erp_app;TU;[I" 3.0.13;T@ [I"erp_base_erp_svcs;T@ @ [I"erp_commerce;T@ @ [I"erp_communication_events;T@i@ [I"erp_dev_svcs;T@@ [I"erp_financial_accounting;T@i@ [I"erp_forms;T@@ [I"erp_inventory;T@ @ [I"erp_invoicing;T@ @ [I"erp_orders;T@ @ [I"erp_products;T@ @ [I"erp_rules;T@i@ [I"erp_search;T@i@ [I"erp_tech_svcs;T@@ [I"erp_txns_and_accts;T@ @ [I"erp_work_effort;T@i@ [I" errand;T@n@ [I" errata;T@@ [I"errata-ruby19;T@@ [I"errational;TU;[I" 0.12.04;T@ [I"errbit_cloudfuji;T@,@ [I"errbit_zmq_handler;T@`@[@j@@ [I" errdb;TU;[I"3.0;T@ [I"err_merchant;T@@ [I" errogant;T@n@ [I"erroneous;T@@ [I"erroneous-api;T@@ [I" error;T@@ [I"errorapp_notifier;TU;[I" 7.0.1;T@ [I"error-locator;T@@ [I"error_log;T@n@ [I"error_message_for_mobile;T@@ [I"error_messages;T@@ [I"error_messages_for;T@@ [I"error_messages_for_helper;T@@ [I"error_notifier;T@@ [I"errornot_notifier;T@@ [I"error_pages;T@@ [I"errors_for;T@'@ [I"errorstack;T@'@ [I"error_stalker;T@ @ [I" errplane;TU;[I" 0.5.25;T@ [I" errship;T@ @ [I" errship3;T@@ [I"errship3-bootstrap;T@ @ [I"err_supply;T@1@ [I" erubis;T@1@ [I"erubis_rails_helper;T@@ [I"es2;T@E@ [I"esank-rest-client;TU;[I" 1.6.7;T@ [I" ESBify;T@@@ [I" escape;T@"@ [I"escape_to_rubyconf;T@@ [I"escape_utils;T@,@ [I" escargot;T@@ [I"escodegen;T@N@ [I"escoffier;T@6@ [I" escort;T@'@ [I" escper;T@T @ [I" es-diag;T@@ [I"es_dump_restore;T@E@ [I" esearchy;T@@ [I" esendex;T@`@ [I"esendex4soap;T@@ [I" es-grep;T@"@ [I" esha;T@E@ [I" eshq;T@@ [I"esi_attribute_language;T@@ [I"esi-for-rack;T@"@ [I"esilverberg-classifier;T@@ [I" eslurper;T@@ [I" esme;T@'@ [I"es-mx-locale;T@6@ [I" esnek;T@@ [I"esod-client;T@@ [I" eson;T@X@ [I"eson-core;T@X@ [I" eson-dsl;T@X@ [I"eson-http;T@X@ [I"esortcode;T@e@ [I"esoterica;T@g@ [I"eSpace_soap4r;T@ @ [I"eSpace_soap4r-middleware;T@&@ [I"espalhe-firefly;T@@ [I" esp-auth;TU;[I" 1.4.0.1;T@ [I"esp-ckeditor;T@6@ [I"esp-commons;T@@ [I"espeak-ruby;T@x@ [I" esp-gems;T@E@ [I" espn;T@'@ [I"espn-fantasy-news;T@@ [I" espn_rb;T@@ [I"esp-permissions;T@@ [I" espresso;T@@ [I"espresso_framework;T@@ [I"espresso-framework;T@@ [I" esprima;T@@ [I"esp-views;T@E@ [I" esrl;T@@ [I" esscee;T@@ [I" es-scout;TU;[I" 5.3.0;T@ [I" essence;T@@ [I" essytas;T@'@ [I" estem;T@[@ [I" estimate;T@'@ [I" estrada;T@@ [I" estraier;T@#F@ [I"esv;T@6@ [I" esv_api;T@@ [I" esvbible;T@'@ [I" esvien;T@'@ [I"esx;T@@ [I"esxmagicwand;T@@@ [I"eta;T@'@ [I"etabliocms_actualities;T@@ [I"etabliocms_core;T@3@ [I"etabliocms_galleries;T@@ [I"etabliocms_pages;T@@ [I" etapi;T@`@ [I" etapper;T@@ [I" etaps;T@@ [I"etc;T@@ [I" etch;T@@ [I" Etch;T@6@[I" et_cms;T@E@ [I"eteos-client;T@@ [I" etest;T@y@ [I" ethernet;T@6@ [I"etherpad-lite;T@@ [I"ether_ping;T@@ [I"ether_shell;T@e@ [I"ethiopic_calendar;T@@ [I"ethiopic_date;T@@ [I" ethon;T@@ [I"e-threadpool;T@@ [I"ETL;T@'@ [I" etom;T@3@ [I" etsy;T@@ [I" etude;T@E@ [I"etvnet_seek;T@@ [I"etvnet-seek;T@@ [I"eu_central_bank;T@@ [I" euclid;T@'@ [I"eu_countries;T@'@ [I"eudict-translate;T@'@ [I"eugenebolshakov-geokit;T@@ [I"eukaliptus;T@- @ [I" euler;T@@ [I" eureka;T@'@ [I"european-date-text-field;T@!@ [I"europe_vat_number_check;T@`@ [I" eurovat;T@@ [I" eurydice;T@@[I"eusplazio;T@@ [I" euston;T@7U@ [@k@7U@[I"euston-daemons;TU;[I" 1.2.11;T@[@k@k@ [I"euston-eventstore;T@N'@ [@k@N'@[I"euston-projections;T@@ [@k@@[I"euston-rabbitmq;T@u"@[@k@u"@ [I"euston-websites;T@@ [@k@@[I" eutils;T@@ [I" eval;T@'@ [I" evalhook;T@@ [I" evalir;T@E@ [I"evalmimic;T@@ [I"evaluator;T@1@ [I" evax;T@@ [I"evdispatch;T@@ [I"eve;T@@ [I" eve-api;T@6@ [I"eveel-moneta;T@@ [I" eve_gate;T@'@ [I" evegem;T@@@ [I"evelpidon_core_ext;T@@ [I"evelpidon_test_helpers;T@@ [I"evelpidon_validators;T@@ [I"evenitron;T@@ [I" event;T@'@ [I"eventable;T@+@ [I"eventbright;T@@ [I"eventbrite;T@@ [I"eventbrite-client;T@+@ [I"EventbriteClient;T@E@ [I" eventbus;T@@ [I"event_calendar;T@E@ [I"event-calendar;T@ @ [I"event_calendar_engine;T@X)@ [I"event-crawler;T@@ [I"evented_bluepill;TU;[I" 0.0.52;T@ [I"evented-gearman-ruby;T@@ [I"evented_magick;T@`@ [I"evented-memcache-client;T@@ [I"evented-queue;T@@ [I"evented-spec;T@- @ [I"event_emitter;T@I@ [I" eventer;T@@ [I"event-expectr;T@`@ [I" eventful;T@@ [I"eventfulapi;T@ @ [I"event_hook;T@@ [I"event_horizon;T@@ [I"eventifier;T@@ [I"event_inventory;T@'@ [I" evently;T@@ [I" evently-omniauth-eventbrite;T@@ [I"eventmachine;T@&@1[@+l@@[@+l@@ [@+l@@ [@+l@@[I"event_machine;T@@ [I"*eventmachine-distributed-notification;T@|@ [I"event_machine_flush;T@@ [I"eventmachine_httpserver;T@@[@7l@@ [I"eventmachine-itunes;T@'@ [I"eventmachine-le;T@T @ [I"eventmachine-maglev-;TU;[I" 0.12.10;T@ [I"eventmachine-redis;T@6@ [I"eventmachine_snmpagent;T@'@ [I"eventmachine-tail;T@@ [I"eventmachine-vnc;TU;[I"0.2.20110104190744;T@ [I"eventmachine-websocket;T@@ [I"eventmachine-win32;T@@ [I"eventpublisher;T@@ [I" events;T@ @ [I"events_emitter;T@6@ [I"event_sender;T@'@ [I"event_spitter;T@@ [I"event_state;T@@ [I"event_tracker;T@@ [I" eventual;T@@ [I"eventually;T@`@ [I" eventus;T@@ [I"event_utils;T@@ [I"event_watcher;T@'@ [I"eve_online-api;T@'@ [I"everbox_client;T@3@ [I"evercookie;T@@ [I"evergreen;T@@ [I"evernicious;TU;[I" 0.9.0.1;T@ [I"evernotable;T@@ [I" evernote;T@u@ [I"evernote_oauth;T@+@ [I"evernote-thrift;TU;[I" 1.23.0;T@ [I" everoute;T@@ [I"everqueen;T@@ [I" everton;T@6@ [I" every;T@s@ [I"every_day_irb;T@@ [I"every_flavor;T@E@ [I"everything;T@@ [I"everywhere;T@O@ [I" everyx;T@@ [I" evil_pdf;T@@ [I" evilr;T@@ [@l@@[@l@@ [I"evil-ruby;T@@ [I"evma_xmlpushparser;T@'@ [I" evmm;T@W@ [I"evoke_client;T@@ [I" evoker;T@@ [I"evolution;T@'@ [I" evosynth;T@@ [I" evri;T@+M@ [I" evri_rpx;T@@ [I"evrium_styles;T@'@ [I"evrium_support;T@'@ [I" evry;T@'@ [I" evrythng;T@`@ [I"evs;T@u@ [I"ewah-bitset;T@@ [I" eway;T@@ [I" ews-api;T@@@ [I" exact4r;T@.@ [I"exactish_target;T@I@ [I" exactly;T@"@ [I" exacto;T@6@ [I"exacto_subscriber;T@I@ [I"exacttarget;T@6@ [I"exact_target;T@'@ [I"exact-target;T@@ [I"exact_target_sdk;T@@ [I"exalted_math;T@I@ [I" exam;T@'@ [I" example;T@@ [I"example123qwe;T@@ [I"example_group_timer;T@"@ [I"exc1_sum_squares;T@E@ [I"excavator;T@E@ [I"excel2csv;T@@ [I"excel_builder;T@@ [I"excelerate;T@'@ [I"excelinator;T@@ [I"excellent;T@ @ [I"excel_rails;T@@ [I"excel-rb-appscript;T@V@ [I"excelsior;T@@ [I"excelsior-formats;T@@ [I"excel_to_code;T@6@ [I"excelx_preview;T@'@ [I" excemel;T@'@ [@l@@[I"exception2db;T@'@ [I"exceptional;TU;[I" 2.0.33;T@ [I"exception-alarm;T@@ [I"Exceptional_Log;T@`@ [I"exceptioncatchable;T@'@ [I"exception-context;T@@ [I"exception_engine;T@@ [I"exceptioner;T@@ [I"exception-formatter;T@@ [I"exception-hashify;T@'@ [I"exception_hub;T@E@ [I"exceptionist;T@@ [I"exception-ketchup;T@@ [I"exception_logger;T@!@ [I"exception_notification;T@@ [I""exception_notification_rails3;T@N@ [I"exception_notifier;T@@ [I"exception-publisher;T@@ [I"exception_resource;T@+@ [I"exceptions_app;T@'@ [I"exceptions_begone_notifier;T@@ [I"exceptions_to_hipchat;T@E@ [I"exception_string;T@@@ [I"exception_utilities;T@@ [I"exceptio-ruby;T@|@ [I"exceptron;T@E@ [I" excerpt;T@'@ [I"excesselt;T@@ [I"excession;T@@ [I" exchange;T@&@ [I"exchanger;T@6@ [I"exchangerate;T@`@ [I"exchange_rate;T@'@ [I"exchange-rates-generator;T@+@ [I"exchequer;T@@ [I" excise;T@@ [I"exclameterize;T@E@ [I"excl_site_asset_scan;T@'@ [I" exclude;T@@ [I" excon;TU;[I" 0.16.10;T@ [I"excon-slides_instrumentor;T@@ [I" excuse;T@@ [I" exeach;T@'@ [I" exec;T@@ [I" execache;T@@ [I"execcsslint;TU;[I" 12.03.19;T@ [I" execjs;T@@ [I"execjs-async;T@E@ [I"execjslint;T@[@ [I"exec_remote;T@E@ [I"exec_sandbox;T@@ [I"executable;T@u@ [I" executer;T@`@ [I"execute_shell;T@@ [I"executioner;T@@ [I"executive;T@@ [I" executor;T@'@ [I"executors;T@@ [I" exegesis;T@"@ [I" exemplar;T@@ [I" exemplor;TU;[I" 3000.3.0;T@ [I"exemplor-chaser;T@E@ [I" exercise;T@@ [I" exetel;T@@ [I"exetel_sms;TU;[I" 1.05;T@ [I" exhibit;T@1@ [I"exhibitionist;T@'@ [I"exif-date-sorter;T@E@ [I" exifr;T@;@ [I"exiftoolr;T@n@ [I" exigo;T@@ [I" exip;T@@ [I" eXistAPI;T@@ [I" Exit_0;T@@ [I"Exit_Zero;T@@ [I" exiv2;T@V@ [I"exjournal;T@@ [I"exlibris-aleph;T@+@ [I"exlibris-primo;T@|@ [I" exner;T@@ [I"exo;T@'@ [I" exocora;T@`@ [I" exotel;T@`@ [I" exoteric;T@+@ [I"expand_cd_aliases;T@@ [I"expanded_date;T@@ [I" expander;T@E@ [I"expand_path;T@'@ [I"expansion;T@'@ [I"expansions;T@@ [I" expect4r;T@V@ [I"expectation;T@@ [I"expectations;T@O@ [I"expected_responses;T@@@ [I" expectr;T@@ [I"expects_chain;T@@ [I" expedia;T@'@ [I"experiment;T@@ [I"experiments;T@@ [I"expertiza-authlogic;TU;[I" 2.1.6.1;T@ [I"expetable;T@^@ [I" expgen;T@@ [I"expirable_locking;T@@ [I"expiration-date;T@@ [I"expire_me;T@"@ [I"expiring_memory_store;T@@@ [I"expiry_control;T@'@ [I" explain;T@'@ [I"!explainer_angularjs_scaffold;T@K,@ [I"explainification;T@'@ [I"exponential-backoff;T@E@ [I" export;T@@ [I" exportr;T@@ [I"export_to_cloud;T@'@ [I"export_to_spreadsheet;T@@ [I"exposable_attributes;T@E@ [I" expose;T@`@ [I"expose_association;T@E@ [I"expose_db;T@@ [I"expose_model;T@E@ [I" exposure;T@@ [I" exprc;T@@ [I" express;T@'@ [I"ExpressionInterpreter;T@'@ [I"expression_parser;T@- @ [I"expression_processor;T@'@ [I"expressive;T@@ [I"express_pigeon;T@@ [I" expri;T@@@ [I" expurrel;T@@ [I"ex_struct;T@E@ [I"ext;T@@ [I" extattr;T@`@ [@n@`@ [I" extcsv;T@@ [I"ext_direct;T@@ [I"extend_at;T@,@ [I"extended_attributes;T@@ [I"extended_date;T@E@ [I"extended_fragment_cache;T@'@ [I"!extended_inherited_resources;T@@ [I"extended_markdownizer;T@6@ [I"extended_nested_set;T@'@ [I"extended_string;T@@ [I"extendmatrix;T@@ [I"extendomatic;T@@ [I"extensional;T@ @ [I"extensions;T@@ [I" external;T@@ [I"external_resque_worker;T@"@ [I"externals;T@@ [I" extexif;T@@ [I" extjs;T@+@ [I"extjs4-rails;TU;[I" 4.1.0.3;T@ [I"extjs-direct;T@'@ [I"extjsizable;T@@ [I"extjs-mvc;T@[@ [I"extjs-rails;T@0@ [I"extjs_renderer;T@+@ [I"extjs_scaffold;T@@ [I"extjs-theme;T@@ [I"extjs-xtheme;T@@ [I" extlib;TU;[I" 0.9.16;T@ [I"extlib_lite;T@"@ [I"extlib-present;T@E@ [I" extmath;T@9@ [I" extr;T@@ [I" extra;T@@ [I"extra_assertions;T@@@ [I"extra_attributes;T@'@ [I"extractcontent;T@'@ [I"extract_curves;T@'@[@bn@'I"i586-linux;T[@bn@'@ [I"extract-curves;T@`@dn[@gn@`@[@gn@`@ [I"extracter;T@@ [I"extract_files;T@@ [I"extractify;T@'@ [I"extractor;T@@ [I"extractors;T@@ [I"extractsbmtags;T@@ [I"extractula;T@@ [I"extraextra;T@@ [I"extra_fields;T@I@ [I"extraloop;T@V@ [I"extraloop-redis-storage;T@3@ [I"extrarange;T@@ [I"extra_sanitize;T@@ [I"extra_validators;T@@ [I"extreme_aas;T@E@ [I"extremist_cache;T@@ [I" extruder;T@'@ [I"extruding-hash;T@e@ [I" ex_ua;T@E@ [I"exvo_auth;T@>@ [I"exvo-auth;T@@ [I"exvo_globalize;T@@ [I"exvo_helpers;T@J@ [I"exvo_notifications;T@@ [I"exvo_warez;T@@ [I"ey;T@V@ [I"ey_api_hmac;T@@ [I" ey_aws;T@' @ [I"ey-backup;T@"@ [I" ey-beta;T@"@ [I"ey-big-brother;T@@ [I" eycap;T@7@ [I" ey_cli;T@@ [I"ey_cloud_awareness;T@I@ [I"eycloud-helper-common;T@@ [I"eycloud-helper-cronjobs;T@@ [I"eycloud-helper-emerge;T@@ [I"eycloud-recipe-delayed_job;T@@ [I"eycloud-recipe-redis;T@@ [I"eycloud-recipe-resque;T@@ [I"eycloud-recipe-sidekiq;T@@ [I"ey_cloud_server;TU;[I" 1.4.41;T@ [I"ey_config;T@@ [I"ey_db_backup;T@N'@ [I"ey-deploy;T@;@ [I"ey_deployment;T@@ [I"eye;T@1@ [I"eyeballer;T@@@ [I" eyeballs;TU;[I" 0.5.17;T@ [I"eyeballs_rails;T@g@ [I"eyecon-colorpicker-rails;T@'@ [I"EyeEmConnector;T@@ [I" eyeliner;T@@ [I" eyemap;T@@ [I"ey_enzyme;TU;[I" 0.9.48;T@ [I"eyepaste-mail;T@E@ [I" eyepea;T@@@ [I" ey-flex;T@@ [I"ey-flex-test;T@@ [I"ey_gatekeeper;TU;[I" 0.1.35;T@ [I" ey_info;T@g@ [I"ey_instance_api_client;T@!@ [I"ey_instance_api_server;T@|@ [I"eymigrate;T@+@ [I" eymiha;T@@ [I"eymiha_math;T@@ [I"eymiha_math3;T@@ [I"eymiha_test;T@@ [I"eymiha_units;T@@ [I"eymiha_url;T@@ [I"eymiha_util;T@@ [I"ey_pairing;TU;[I" 0.4.15;T@ [I"ey_rails_wizard;T@@ [I"ey_recipes;T@Q@ [I"ey_resolver;T@@ [I" ey_ronin;TU;[I" 0.58.0;T@ [I"eyrubygems;T@E@ [I"ey_services_api;T@G8@ [I"ey_services_fake;T@G8@ [I"ey_services_setup;T@n@ [I"ey_snaplock;T@@ [I"ey_stonith;T@@ [I"ey-vendored-backup;T@@ [I" ezamar;TU;[I" 2009.06;T@ [I" ez_chaff;T@!@ [I" ezcomet;T@'@ [I"ez_config;T@@ [I" ezcript;T@'@ [I"ezcrypter;T@!@ [I" ezcrypto;T@@ [I" ez-email;T@6@ [I" ezgit;T@`@ [I"ez_healthcheck;T@@@ [I" ez_http;T@@ [I"ezmedium-controller-ext;T@E@ [I" ez_model;T@@ [I"ez-nginx-proxy;T@@ [I"ez_paypal;T@@ [I" ezprint;T@@ [I" ezproxy;T@'@ [I"eztexting;T@@ [I" eztime;T@@ [I" ez_video;T@@ [I"f;T@'@ [I" f1api;T@ @ [I"f1results;T@@ [I"f1sherman-domainatrix;T@@ [I"f2b;T@@ [I"faa;T@@ [I" faasm;T@ @ [I" fabes;T@E@ [I" fabric;T@"@ [I"fabrication;TU;[I" 2.5.4;T@ [I"fabrication-rails;T@'@ [I"fabricator;T@@ [I"fabric-rails;T@V@ [I" fabriq;T@@ [I"fabstring;T@6@ [I"fabulator;T@ @ [I"fabulator-exhibit;T@n@ [I"fabulator-grammar;T@@ [I"fabulator-xml;T@@ [I" facade;T@W@ [I" facades;T@@ [I" face;T@@ [I" faceb;T@`@ [I" facebook;T@'@ [I"facebook_api;T@6@ [I"facebook_app;T@N@ [I"facebookcl;T@@ [I"facebook_client;TU;[I" 0.0.5.3;T@ [I"facebook_dialog;T@V@ [I"facebookdp;T@@ [I"facebooked;T@`@ [I"facebooker;TU;[I" 1.0.75;T@ [I"facebooker2;T@@ [I"facebooker3;T@'@ [I"facebooker-fbg;TU;[I" 10.0.59;T@ [I"facebooker-fbg1;TU;[I" 1.0.61.1;T@ [I"facebooker-lite;TU;[I" 1.0.67.2;T@ [I"facebooker-micah;TU;[I" 1.0.74;T@ [I"facebooker-rails3;TU;[I" 1.0.64;T@ [I"facebook_events;T@@ [I"facebook_feed;T@@ [I"facebook_graph;T@@ [I"facebook-graph;T@@@ [I"facebook_graph_api;T@n@ [I"facebook-graphclient;T@[ @ [I"facebook_graphr;T@|@ [I"facebookie;T@'@ [I"facebook-login;T@@ [I"facebook_oauth;T@@ [I"facebook_page_parser;T@@@ [I"facebook_party;T@@ [I"facebook_photos;T@'@ [I"facebook_rails;T@@ [I"facebook-rails;T@@ [I"facebook-rails-starterkit;T@@ [I"facebookrb;T@`@ [I"facebook_registration;T@@ [I"facebook_sdk;T@E@ [I"facebook_session;T@@ [I"facebook_share;T@@ [I"facebook_share_link;T@@ [I"facebook-signed-request;T@@ [I"facebook_sig_validator;T@@ [I"facebook-social_plugins;T@I@ [I"facebookstatus;T@'@ [I"facebook-stub;TU;[I" 0.0.1.21;T@ [I"facebook_test_accounts;T@E@ [I"facebook_test_users;T@E@ [I"facebook_wall;T@@ [I"facebox-rails;T@@ [I"facebox-rails2;T@E@ [I"facebox-render;T@<@ [I"facehugger;T@`@ [I" faceoff;T@@ [I" facepalm;T@I@ [I" facer;T@n@ [I" faces;T@7@ [I" facet;T@n@ [I" faceted;T@@ [I"facet_for;T@1@ [I" facets;TU;[I" 2.9.3;T@ [I"facilbook;T@`@ [I" fackup;T@H@ [I" faclet;T@'@ [I" facon;T@@ [I" fact;T@!@ [I"fact_checker;T@@ [I" facter;TU;[I" 1.6.17;T@ [I" facteur;T@@ [I" factor;T@"@ [I"factorial;T@6@ [I"factory_boy;T@+@ [I"factory_data_preloader;T@@ [I"factoryform;T@@ [I"factory_girl;T@0@ [I"factory_girl-cache;T@@ [I"factory_girl_extensions;T@@ [I"factory_girl_generator;T@@ [I"factory_girl_json;T@'@ [I"factory_girl_mongo_syntax;T@'@ [I"!factory_girl_namespacing_fix;T@@ [I"factory_girl-preload;T@@ [I"factory_girl_rails;T@0@ [I"factory_girl_rspec;T@E@ [I"factory_girl_sequences;T@`@ [I"factory_girl_upgrader;T@+@ [I"factory_grabber;T@@ [I"factory_inspector;T@@ [I"$factorylabs-activewarehouse-etl;TU;[I" 0.9.1.8;T@ [I"#factorylabs-adapter_extensions;T@Y@ [I"factorylabs-auto_tagger;T@`@ [I"*factorylabs-casrack_the_authenticator;T@l@ [I"factorylabs-castronaut;T@!@ [I"factorylabs-newrelic_rpm;TU;[I" 2.10.2.2;T@ [I"factory_loader;T@@@ [I"factory_randomizer;T@@ [I"factory_scenarios;T@6@ [I"factory_seed;T@`@ [I"factory_toys;T@W@ [I" factual;T@6@ [I"factual-api;T@ @ [I"facturae_print;T@"@ [I" faded;T@@ [I" fadvise;T@@ [I" faetr;T@@ [I"fafactory;T@@ [I"fagiani-jekyll;T@[@ [I"fagiani_mongoid_taggable;T@@ [I"fail_bowl;TU;[I" 2012.4.5;T@ [I" faildns;T@'@ [I"fail_fast;T@@ [I"fail-fast;T@@ [I" failirc;T@'@ [I" failsafe;T@@ [I"failtale-reporter;T@@ [I"failtrain;T@@ [I"failurous-rails;T@@ [I"fair-gettext;T@1@ [I"fairtilizer-vpim;TU;[I" 0.695;T@ [I" fairy;T@7@ [I"fairytale;T@@ [I" fake;TU;[I"1.42.11.0;T@ [I"fake-ajax-server;T@E@ [I" fakeapi;T@'@ [I"fake_arel;T@@ [I"fake_braintree;T@@ [I"fake_chargify;T@@ [I" fakecmd;T@E@ [I"fake_droid;T@'@ [I"fake_dropbox;T@@ [I"fake_dynamo;T@`@ [I"fake_enum;T@E@ [I"fake_execution;T@@ [I" fakefs;T@@ [I"fakefs-require;T@I@ [I" fake_ftp;T@@ [I" fake_gem;TU;[I" 0.1.19;T@ [I" fake-gem;T@`@ [I"fake_gem_push;T@'@ [I"fakeiteasy;TU;[I" 1.0.0.5;T@ [I" fakeldap;T@'@ [I" fakemail;T@@ [I"fake_mechanize;T@E@ [I"fake_model;T@E@ [I"fake_name_generator;T@@ [I"fake_net_ldap;T@'@ [I" fakeout;T@E@ [I" faker;T@x@ [I" faker19;T@W@ [I" fakerama;T@@@ [I"faker_credit_card;T@E@ [I"fakeredis;T@@ [I"fake-resque;T@x@ [I" fakerest;T@"@ [I"faker_extension_fr;T@p@ [I"faker-fakeme;T@ @ [I" faker-fu;T@"@ [I"faker-japanese;T@'@ [I"faker-medical;T@@ [I"faker-obscenity;T@@ [I" fakes;T@@ [I" fakes3;T@|@ [I" fake_sqs;T@"@ [I"fakes-rspec;T@@ [I" fakessl;T@"@ [I" fakettp;T@@ [I"faketwitter;T@+@ [I" fakeweb;T@@ [I" FakeWeb;T@x@ [I"fakeweb_curb-fu;T@E@ [I"fakeweb-matcher;T@@ [I" fakext;T@E@ [I"fakutori-san;T@@ [I" falcon;T@6@ [I" falconer;T@@ [I" fallback;T@`@ [I" fallen;T@E@ [I"fallocate;T@`@ [I"falls_back_on;T@+@ [I" falluto;T@@ [I"falsework;T@@ [I"famfamfam;T@@ [I"famfamfam_flags_rails;T@@ [I"famfamfam_icons-silk;T@@ [I" famili;T@@ [I" familia;T@@ [I" family;T@E@ [I"familyjewels;T@'@ [I"family-reunion;T@,@ [I"fanart_tv;T@E@ [I" fancy;T@@ [I"fancybox2-rails;T@@ [I"fancybox-rails;T@+@ [I"fancy-buttons;T@N@ [I"fancydata;T@@ [I"fancy-gallery-rails;T@'@ [I"fancygrid;T@@ [I"fancy_irb;T@n@ [I"fancy_logger;T@`@ [I"fancypath;T@(@ [I"fancy-progress-bars;T@@ [I"fancy_require;T@@ [I"fancy_serializer;T@'@ [I"fancystruct;T@@ [I"fancyviews;T@@ [I" fandango;T@@ [I" fanfare;T@'@ [I" fanfeedr;T@@ [I"fanfeedrb;T@V@ [I" fanforce;T@@ [I" fanfou;T@@ [I"fanny_pack;T@6@ [I" fansi;T@@ [I"fantastic_currency;T@+@ [I"fantasy_football_nerd;T@- @ [I"fanuc-ekg;T@@@ [I"fap;T@@ [I"fa_princely;T@N'@ [I" faqml;T@@ [I" faraday;T@@ [I"faraday-auth-hmac;T@@ [I"faraday-cage;T@'@ [I"faraday_collection_json;T@'@ [I"faraday-http-cache;T@`@ [I"faraday_middleware;T@- @ [I""faraday_middleware-multi_json;T@@ [I" faraday_middleware-parse_oj;T@@ [I"faraday-panda;T@@ [I"faraday_simulation;T@E@ [I"faraday-stack;T@|@ [I"faraday_yaml;T@@ [I"farbtastic-rails;T@@ [I" fargo;T@x@ [I" farm;T@`@ [I" farmer;T@@ [I"farmer_otto;T@'@ [I"farmingengineers;T@|@ [I" faroo;T@@ [I" farsifu;T@I@ [I" FarsiFu;T@@ [I" fart;T@E@ [I" farva;T@@ [I"fassbinder;T@@ [I"fassets_core;T@x@ [I" fast;T@+@ [I" fast-aes;T@`@ [I"fast-aleck;T@@ [I"fastandand;T@@ [I"fasta_util;T@@ [I" fastbill;T@@ [I"fastcaptcha;T@@ [I"fast_change_table;T@ @ [I"fastcluster;T@@ [I"fast_context;T@@ [I"fastercsv;T@@ [I"fasterer-csv;T@@ [I"faster_gem_script;T@@ [I"faster_haversine;T@6@ [I"faster_html_escape;T@@ [I"faster_open_struct;T@@ [I"faster_require;T@@ [I"faster_rubygems;TU;[I" 0.12.8;T@ [I"faster_shoulda;TU;[I" 2.11.4;T@ [I"faster_xml_simple;T@@ [I"faster_xml_simple_reader;T@'@ [I" fastest;T@@ [I" fas_test;T@@ [I"fastest-csv;T@'@ [I"fastforward;T@'@ [I"fast_forward;T@@ [I"fastgeoip;T@@ [I"fast_gettext;T@X@ [I"fast_git_deploy;T@@ [I"fast_group_by;T@`@ [I"fast_hash_ring;T@`@ [I"fast_http;T@`@ [I"fastimage;T@>@ [I"fastimage_inline;T@@ [I"fastimage_resize;T@+@ [I"fast_innodb_import;T@E@ [I" fastlib;T@n@ [I" fastly;TU;[I" 0.99;T@ [I" fastlz;T@@ [@q@@[I"fast-mailer;T@@ [I"fast_nearest_latlng;T@E@ [I" fast-one;T@'@ [I" fastory;T@@ [I" fastout;T@@ [I"fastprowl;T@@ [I"fastq-factory;T@. @ [I" fastr;T@@ [I"fast_rake;T@@ [I"fast_random;T@'@ [I"fastr-compress;T@'@ [I"fastreader;T@@ [I"fast_require;T@x@ [I" fastri;TU;[I" 0.3.1.1;T@ [I" fastruby;T@@ [I"fast_seeder;T@E@ [I"fast_spork_runner;T@"@ [I"fast_spring;T@'@ [I"fastspring-saasy;T@Y@ [I"faststatus;T@@ [I"fast-stemmer;T@@ [I" faststep;T@@ [I"fast_submission_protection;T@@@ [I"fastthread;T@@1[@r@ @ [I"fast_timestamp;T@"@ [I"fast_trie;T@@ [I" fastui;T@'@ [I" fastxml;TU;[I" 0.1.92;T@ [I" fast_xor;T@@ [I" fast_xs;T@@ [I"fatalistic;T@'@ [I"fat_cache;T@@ [I" fate;T@X)@ [I"fat_free_crm;T@"@ [I"fat_free_wunderlist;T@'@ [I" fathom;T@@ [I" fatigue;T@"@ [I"fat_model_auth;T@@ [I"fatsecret;T@@ [I"fat_secret;T@@ [I"fatsecret-api;T@@ [I"fatsecret-models;T@@@ [I" fattr;T@ @ [I"faturando_api;T@@@ [I"fat_zebra;T@@ [I" faucet;T@@ [I"faultinjection;T@@ [I" fauna;T@@ [I"fauna-mysql;TU;[I" 2.8.1.3;T@ [I"faux_data;T@x@ [I" fauxhai;T@`@ [I"fauxmachine-cheddargetter;T@@@ [I" fauxsql;T@@ [I" favg;T@'@ [I"faviconduit;T@@ [I"favicon_maker;T@@ [I"favicon_maker_rails;T@'@ [I"favorite_it;T@'@ [I" fav_star;T@@ [I"fax_finder;T@x@ [I" faxijaxy;T@@ [I"fay;T@'@ [I" faye;T@@ [I"faye-client;T@I@ [I"faye-plugin;T@@@ [I"faye-rails;T@@ [I"faye-redis;T@@ [I"faye-server;T@@ [I"faye_shards;T@@@ [I"faye-websocket;T@_@ [@r@_@[I" fazscore;T@@ [I"fb;T@X@ [I"fb2;T@6@ [I"fb_adapter;T@@ [I" fbapp;T@E@ [I" fbauth;T@O@ [I" fBayes;T@X@ [I"fb-channel-file;T@'@ [I" fbcli;T@u@ [I"fbdialogs;T@@ [I"FBDistributedNotification;T@'@ [I"fbdoorman;T@@ [I" fbgraph;T@Z-@ [I" fb_graph;TU;[I" 2.6.1;T@ [I"fb_graph-mock;T@@ [I"fb_graph_rails;T@@ [I"fbgraph_rails;T@I@ [I" fb_joy;T@@@ [I"fblee-feedzirra;T@p@ [I"fblee-readability;T@'@ [I"fblee-typhoeus;T@%@ [I"fb-localizer;T@@ [I" fbmygem;T@'@ [I" fboauth2;T@+@ [I" Fboauth2;T@@ [I" fbomb;T@@ [I" fbooker;TU;[I" 1.0.53;T@ [I" fbrails;T@@ [I" fb_rails;T@u@ [I" fb_util;T@' @ [I" fb_utils;T@E@ [I"fb_video_url_converter;T@@ [I"fcc;T@@ [I"fcc-content-api;T@E@ [I"fcc_reboot;T@@ [I" fcgi;T@@ [I" fcgiwrap;T@1@ [I"fckeditor;T@@ [I"fcoury-aasm;T@@ [I"fcoury-fakeweb;T@N@ [I"fcoury-gmail;T@@ [I"fcoury-matchy;T@x@ [I"fcs;T@'@ [I" fcsh;T@x@ [I" fcshd;T@@ [I" fcsparse;T@@ [I"fd-bertrpc;T@ @ [I"fdc;T@@ [I" fdlcap;TU;[I" 0.4.17;T@ [I"fdl_delayed_job;TU;[I" 1.8.4;T@ [I"fdl_translator;T@@ [I" fdoc;T@@ [I" fdpass;T@@@ [I"fd-slider-rails;T@@ [I"fdv-actionwebservice;T@0@ [I"fear-of-callbacks;T@@ [I"feast_fast;T@@ [I" feather;T@@ [I"feather_cms;T@+@ [I"featherdust;T@@ [I" feature;T@@ [I"feature_box;T@@ [I"feature_creep;T@@ [I"feature_creep-redis;T@'@ [I""feature_creep-simple_strategy;T@E@ [I"featured_model;T@+@ [I"feature_flipper;T@@ [I"feature-rich;T@@ [I" features;T@@ [I"features2cards;T@x@ [I"feature_selection;T@@ [I"feature_set;T@"@ [I"features_report;T@@ [I"feature_switch;T@@@ [I"feature_toggle;T@@ [I" fech;T@ @ [I" fechell;T@@ [I" fe-cru;T@@ [I"federal_register;T@@ [I" fedex;T@t@ [I"fedex_web_service;T@E@ [I"fedex-web-services;TU;[I" 1.1.51;T@ [I" fedora;T@@ [I"fedora-fs;T@@ [I"fedora_generator;T@'@ [I" fedorash;T@@ [I"fed_spending;T@'@ [I"feed2mail;T@'@ [I" feedable;T@@ [I"feed-abstract;T@ @ [I"feedalizer;T@@@ [I"feedbackable;T@"@ [I"feedbackandscreencap;T@n@ [I"feedbacker;T@|@ [I"feedback_popup;T@'@ [I" feedbag;T@e@ [I"feedbagtoo;T@y@ [I" feedbase;T@E@ [I"feedbuilder;T@@ [I"feedbuilder-rails;T@`@ [I"feed_cache;T@@ [I"feed_detector;T@@ [I"feed_discover;T@@ [I" feedeng;T@@ [I" feedhub;T@@ [I" feedisco;T@6@ [I"feediscovery;T@@ [I" feedle;T@@ [I" feedme;T@-@ [I" feed_me;T@X@ [I"feed-normalizer;T@@ [I"feed_parser;T@@ [I"feed-processor;T@`@ [I"feedreader;T@@ [I" feeds;T@'@ [I"feed_satisfaction;T@@@ [I"feedtools;TU;[I" 0.2.29;T@ [I"feedtools-cache-memcached;T@'@ [I"feedtools-cache-yaml;T@E@ [I"feedtools_ram_cache;T@s@ [I"feedtosis;TU;[I" 0.0.3.6;T@ [I"feedupdater;T@[@ [I"feed_us_grabber;T@6@ [I"feedvalidator;T@@@ [I"feed_yamlizer;T@@ [I"feedzirra;T@6@ [I"feedzirra-etag-patch;T@@ [I"feedzirra-redis;T@`@ [I"feepogram;T@'@ [I" feide;T@@ [I"feldtruby;T@@ [I"felixclack-business_time;T@@ [I"felixclack-cijoe;T@e@ [I"feminizer;T@W@ [I"femme_fatale;T@@ [I"femto-sqlite3;TU;[I" 1.3.7;T@ [I" femtows;T@@ [I" fencer;T@@ [I" fennec;T@1@ [I" fenopy;T@E@ [I" fenris;T@@@ [I"fentonGem1;T@'@ [I"feralchimp;T@@ [I" ferb;T@@ [I" feriados;T@@ [I" fern;T@'@ [I" fernet;T@@@ [I"fernyb_davclient;T@@ [I" ferret;TU;[I" 0.11.8.5;T@ [I"fertilizer;T@+@ [I"festivaltts4r;T@@ [I" feta;T@'@ [I"fetchapp-api-ruby;T@O@ [I" fetcher;T@@ [I"fetcher-microdata;T@ @ [I"fetcher-microdata-facebook;T@@ [I"fetcher-microdata-twitter;T@@ [I"fetcher-mongoid-models;T@E@ [I" fetch_in;T@@ [I" fetch_it;T@@ [I"fetty-generators;T@z@ [I"few;T@"@ [I" fewer;T@@ [I"fex;T@@ [I"fey;T@'@ [I" fezzik;T@y@ [I"ff;T@'@ [I" ffaker;TU;[I" 1.15.0;T@ [I"ffaker-cpfcnpj;T@@ [I" ffakeron;T@@ [I"ffcrm_authlogic_api;T@@ [I"ffcrm_cloudfuji;T@@ [I"ffcrm_ldap;T@+@ [I" fffs;TU;[I" 0.0.12.2;T@ [I"ffi;T@y@[@t@@[@t@@ [@t@@ [I"ffi-aspell;T@@ [I" ffi-chm;T@@ [I"ffi-coremidi;T@@ [I" ffi_dry;T@t @ [I" ffi-efl;T@@ [I"ffi-expat;T@@ [I"ffi-extra;T@@ [I"ffi-extractor;T@`@ [I" ffi_ez;T@@ [I"ffi-fluidsynth;T@'@ [I" ffi_gen;T@@ [I" ffi-geos;T@`@ [I"ffi-hdhomerun;T@@ [I"ffi-http-parser;T@@ [I"ffi-hunspell;T@[@ [I" ffi-icu;T@@@ [I"ffi-inline;T@&@ [I"ffi-inliner;T@,@ [I"ffi-k8055;T@@ [I"ffi-kdtree;T@E@ [I"ffi-libarchive;T@6@ [I" ffi-libc;T@@ [I"ffi-libfreenect;T@`@ [I"ffi-locale;T@@ [I" ffi-lzma;T@[@ [I"ffi-magic;TU;[I"2011.04.22;T@ [I"ffi-msgpack;T@@ [I"ffi-mysql;T@T @ [I"ffi-ncurses;T@x@ [I"ffi-opencl;T@6@ [I"ffi-opengl;T@@ [I"ffi-packets;T@@ [I" ffi-pcap;T@@ [I"ffi-portaudio;T@@@ [I"ffi-procps;T@'@ [I" ffi-rxs;T@u@ [I" ffi-rzmq;T@ @ [I"ffi-ssdeep;T@`@ [I"ffi-swig-generator;T@@ [I"ffi-sybase;T@E@ [I"ffi-tellduscore;T@E@ [I" ffi-tk;TU;[I"2010.08.23;T@ [I"ffi-tracker;T@@ [I"ffi-udis86;T@6@ [I" ffi-uuid;T@6@ [I"ffi-wingui-core;T@@ [I"ffi-xattr;T@"@ [I" ffi-zlib;T@@ [I" ffmpeg;T@[@ [I"ffmpeg-ruby;T@6@ [I" ffnpdf;T@@ [I" ffprober;T@@@ [I" ffruby;T@I@ [I" fftw3;T@[ @ [I"ffxiv-lodestone;T@ @ [I"fgmapping;T@O@ [I"fg-quickgenerate;T@@ [I" fgraph;T@X@ [I" fhlow;TU;[I" 1.91.1;T@ [I"fhs-gruff;TU;[I" 0.3.6.2;T@ [I"fhwang-resque-throttle;T@@ [I" fiat;T@@ [I"fib;T@@ [I"fibber_mailman;T@@ [I" fiber18;T@@ [I"fiber-mon;T@@ [I"fiberpool;T@'@ [I"fiber_pool;T@@ [I" fibless;T@@ [I"fibo-galv;T@@ [I" fibo-gem;T@`@ [I"fibomatch;T@@ [I"fibonacci;T@@ [I"fibonacci-evs;T@@@ [I"fibonacho;T@@ [I" fibs;T@@ [I" fib_trib;T@@ [I" fibur;T@@ [I" fickle;T@'@ [I"ficonabses;T@@ [I" ficsr;T@'@ [I" fiddle;T@@ [I" fiddler;T@@ [I" fidelity;T@E@ [I"fidelius_client;T@@ [I" fidgit;T@,@ [I"fidius-common;T@@ [I"fidius-cvedb;T@n@ [I"fidius-evasiondb;T@E@ [I" fido;T@`@ [I"fieldmatter;T@@ [I"fields-addressable;TU;[I" 2.2.3.1;T@ [I"fields-wufoo;T@@ [I" fifo;T@@ [I"fifo-cache;T@@ [I"fifteen_puzzle;T@'@ [I"fifthcard;T@'@ [I"fiftyfifty;T@@ [I"fig;TU;[I" 0.1.24;TI"universal-darwin9.0;T[@t@ W@[@t@@ [I" fig18;TU;[I" 0.1.41;T@S[@tU;[I" 0.1.42;TI" mingw32;T[@t@t@[@t@ W@ [@t@ W@1[@t@ W@y;[I" figaro;T@@ [I" figgy;T@e@ [I"fight_csv;T@`@ [I"fight-for-net-neutrality;T@@ [I" figleaf;T@@ [I" fig_leaf;T@@ [I"fig_newton;T@D@ [I"figure_set;T@'@ [I" filament;T@x@ [I" filander;T@@ [I" filbert;T@'@ [I" filbunke;T@+@ [I"file_backup;T@@ [I" filebase;T@?@ [I" filebin;T@@ [I"file-birthtime;T@R @ [I"file_browser;T@+@ [I"filebydate;T@E@ [I"filecache;T@@ [I"file_cache;T@'@ [I"file_cache_refi;T@'@ [I"file_column;T@@ [I"file-column;T@@ [I"file_column_with_s3;T@`@ [I"file_copy;T@E@ [I"filecount;T@@ [I" filedesc;T@@ [I" filedots;T@'@ [I"file-find;T@I"universal-java-1.5;T[@&u@@ [I" filefm;T@@@ [I"file-formatter;T@I@ [I"file_generator;T@@ [I"filehelpers;TU;[I"2.0.0.0.20100812;T@ [I"file_indexing;T@@ [I"file_instance_move;T@@ [I" filelist;T@'@ [I"filemanager;T@@ [I"file_manager_engine;T@"@ [I"file_model;T@@ [I"filemonitor;T@"@ [I"file_monitor;T@@ [I"file-monitor;T@6@ [I"file_monitoring;T@@ [I"file_mutate;T@6@ [I" filename;T@@ [I"fileorganizer;T@@ [I" filepath;T@@ [I"filepicker;T@@ [I"filepickerio_rails;T@@ [I"filepicker-padrino;T@'@ [I"filepicker-rails;T@E@ [I"file_pool;T@@ [I"file_post_monster;T@@ [I"file-processing-job;T@@ [I"file_proxy;T@'@ [I" fileq;T@6@ [I"filequeue;T@E@ [I"file_record;T@@ [I"filerenamer;T@@ [I"file_resources_manager;T@@ [I" files;T@@ [I" filesafe;T@@ [I"file_sandbox;T@6@ [I" filescan;T@J@ [I"file_scheduler;T@E@ [I"file_series;T@@ [I" FileSet;T@@ [I"file_share;T@. @ [I"file_signature;T@N@ [I" filesize;T@E@ [I"filesortd;T@@ [I"file-spec;T@x@ [I"file_split;T@E@ [I"file-stash;T@'@ [I"filestojs;T@@ [I"file_storage;T@'@ [I"filestore;T@n@ [I"file_synced_queue;T@@ [I"filesystem;T@@ [I" filet;T@I@ [I"file-tail;T@@ [I"filet-capybara;T@@ [I" file_tee;T@E@ [I"file-temp;T@N@ [I"filetesthelper;T@@ [I"file_test_helper;T@@ [I"file_text_delimiter;T@E@ [I"file-timestamp;T@N@ [I"file_transfer;T@n@ [I"file_transfer_mixin;T@@ [I"file_tree_profiler;T@E@ [I" filetter;T@^@ [I" filetype;T@@ [I"fileupdatetasks;T@@ [I"file_upload_cache;T@@ [I"file_uploader;T@@ [I"fileuploader-rails;T@@ [I"fileupload-rails;T@'@ [I" fileutil;TU;[I" 0.0.85;T@ [I"fileutils;T@D@ [I"file_utils;T@ @ [I"file-utils;T@`@ [I"filewatch;T@@ [I"filewatcher;T@|@ [I"file-watcher;T@@ [I"file_with_bom;T@@ [I"file_worker;T@@ [I"file_wrapper;T@@ [I"filey-diff;T@@ [I" filezor;T@@ [I"filipegiusti-yajl-ruby;T@@ [I"filiptepper-leveldb-ruby;TU;[I" 0.14;T@ [I"filiptepper-oauth-plugin;T@J%@ [I" fill;T@@ [I" filler;T@@@ [I"fillerama;T@`@ [I"fillertext;T@`@ [I" fillet;T@@ [I" filltext;T@@ [I" filmbuff;T@1@ [I" filmot;T@'@ [I"filmtotaal;T@'@ [I" filt;T@"@ [I" filter;T@@ [I"filterable-models;T@E@ [I"filterable_table;T@@ [I"filter_assertions;T@@ [I"filtered_attributes;T@`@ [I"filtered_list;T@@ [I"filtered_relation;T@E@ [I"filter_fu;T@@ [I"filtering_camping;T@@ [I"filter_io;T@1@ [I"filterism;T@@ [I"filter_matcher;T@@ [I"filter_object;T@'@ [I"filterrific;T@@ [I" filters;T@@ [I"filters_spam;T@[ @ [I" filthy;T@O@ [I" filtr;T@@ [I" filtrate;T@'@ [I"filtration;T@n@ [I"fin;T@1@ [I"fina_files;T@V@ [I"finagle-thrift;T@N@ [I" final;T@@ [I"finalist-wkhtmltopdf;T@<@ [I"finalizer;T@E@ [I"final_routes;T@@ [I" finance;T@x@ [I"finance-fix;T@'@ [I"finance_sync;T@E@ [I"financial;T@E@ [I"FinancialCalc;T@'@ [I" finatra;T@@ [I" fincalc;T@'@ [I"findable_by;T@`@ [I"find_a_port;T@@ [I" findart;T@'@ [I"find_as_hashes;T@x@ [I"find_by_hash;T@'@ [I"find_by_param;T@@ [I"find_by_sql_file;T@<@ [I"find_cache;T@@ [I" finddup;T@@ [I" finder;T@x@ [I"findercolor;T@@ [I"finder_filter;T@@ [I" findex;T@@ [I" find_gem;T@u@ [I" findler;T@@ [I" findme;T@@ [I"find_method;T@`@ [I"findmyiphone;T@@ [I"find_or_create_on_scopes;T@N@ [I"find_or_redirect;T@@ [I" findr;T@@ [I"fine_uploader;T@@ [I"fineuploader-rails;T@j@ [I"finexclub;T@u @ [I" finfast;T@@ [I" finger;T@E@ [I"fingercap;T@@ [I"fingerjam;T@@ [I"fingerpoken;T@@ [I"fingerprint;T@ @ [I"fingerprintjs-rails;T@`@ [I"fingerprintless;T@'@ [I"fingerprintless-assets;T@@ [I"finger-puppet;T@@ [I"fingerrails;T@@@ [I"fingertips-adyen;TU;[I"0.3.8.20101015;T@ [I"finite_automata;T@'@ [I"finitefield;T@@ [I"finite_mdp;T@`@ [I" finity;T@`@ [I"finmodeling;T@@ [I"finnet_api;T@"@ [I"finnlabs-ci_reporter;T@X@ [I" fio_api;T@'@ [I" fiona;T@@ [I"fio_parser;T@@ [I"fir;T@+@ [I" fire;TU;[I" 1.8.6;T@ [I"fire_and_forget;T@@ [I" firebase;T@`@ [I"firebrigade_api;T@@ [I"firecracker;T@@ [I"fireeagle;T@X'@ [I" firefly;T@@ [I"firefly-client;T@x@ [I" firefox;T@@ [I" firehose;T@@ [I"fireinc-apn_on_rails;TU;[I" 0.4.2.13;T@ [I"fireinc-pdf-reader;T@*@ [I" firejab;T@'@ [I"firelinks;T@@ [I" fireman;T@@ [I"firenxis-god;T@*@ [I"firephruby;T@I@ [I"fire_poll;T@N@ [I" firering;T@@ [I" fireruby;T@I"powerpc-darwin;T[@v@@[@v@@dn[I"firestarter;T@'@ [I"firetower;T@`@ [I"firetruck;T@[ @ [I" fire_up;T@`@ [I"firewall-agent;T@@ [I"firewall_constraint;T@@ [I"firewatir;T@:!@ [I" firewool;T@@@ [I" firma;T@'@ [I" firmata;T@`@ [I"firstdirect;T@!@ [I"first-floor;T@@ [I" firstfm;T@@ [I" firstgem;T@'@ [I"first_gem;T@@ [I" firstGem;T@@ [I"first_github_commit;T@6@ [I" fiscali;T@@ [I" fishbowl;T@E@ [I"fisheye-crucible;T@E@ [I"fishman-activemerchant;TU;[I" 1.18.0;T@ [I"fishman-ar_mailer;T@@ [I"$fishman-eventmachine_httpserver;T@I@ [I"fishman-i18n_routing;T@`@ [I"fishman-postmark-rails;T@@ [I"fishman-uuid4r;T@`@ [I" fishnet;T@@ [I" fishwife;T@@[I" fission;T@x@ [I" fistface;T@@ [I"fit;T@@ [I" fitbit;T@@ [I" fitgem;T@@ [I"fitnesse-ruby;T@@ [I" fitnexus;T@'@ [I"fitnio_export;T@@ [I"fitter-happier;T@@ [I" fittext;T@@ [I"fityk-ruby;T@@ [I"five_leaves;T@@ [I" fivemat;T@@ [I"five_mobile_push;T@"@([@w@@ [I"fiverr_copy;T@@ [I"fiverr-vanity;T@@ [I"fiveruns_tuneup;TU;[I" 0.8.20;T@ [I"fiveruns_tuneup_core;T@J@ [I"fiveruns_tuneup_merb;T@J@ [I"fixbraces;T@ @ [I"fixedfixer;T@@ [I"fixed-layout-mapper;T@E@ [I"fixed_length_encoder;T@@ [I"fixed_point;T@@ [I"fixed_point_field;T@@ [I" FixedPt;T@'@ [I"fixedwidth;T@'@ [I"fixed_width;T@@ [I"FixedWidthFields;T@@ [I"fixed_width-multibyte;T@@ [I"fixed_width_parser;T@@ [I"fixed-width-structures;T@- @ [I" fixer;T@@ [I" fixi;T@@ [I"fix-ie-picasso;T@'@ [I"fixie-rails;T@@ [I" fixjour;T@J@ [I"fixjour-2;T@"@ [I""fix-lame-id3-generated-by-k3b;T@'@ [I"fix_microsoft_links;T@@@ [I" fixnames;T@@ [I"fix_parameters;T@`@ [I"fix_ranges;T@'@ [I"fixrbconfig;T@@ [I"fix_to_chix;T@@ [I"fixturease;T@@ [I"fixture_background;TU;[I" 0.9.10.1;T@ [I"fixture_builder;T@@ [I"fixture_dependencies;T@ @ [I"fixture_generator;T@E@ [I"fixture_replacement;T@ @ [I" fixtures;T@E@ [I"fixturized;T@x@ [I" fix-twitter-bootstrap-rails;T@+@ [I"fizx-chargify;T@@ [I"fizx-proxymachine;T@e@ [I" fizzbuzz;T@E@ [I"fizz-buzz;T@@ [I" fizzle;T@!@ [I" fjson;T@@@ [I" fk_str;T@E@ [I" flac2mp3;T@x@ [I"flacinfo-rb;T@R @ [I"flagpole_sitta;TU;[I" 0.9.7.1;T@ [I"flag_promotions;T@@ [I" flags;T@`@ [I"flag_shih_tzu;T@@ [I" flail;T@|@ [I" flair;T@'@ [I" flajax;T@'@ [I" flak;T@@ [I" flake;T@@ [I" flakey;T@"@ [I"flame_channel_parser;TU;[I" 4.0.2;T@ [I" flames;T@@ [I"flamethrower;T@@ [I"flame_timewarp_extractor;T@w@ [I" flamingo;T@x@ [I" flan;T@@ [I" flannel;T@V@ [I" flapcore;T@@ [I" flapjack;TU;[I" 0.6.60;T@ [I" flare;T@@ [I"flare-gun;T@@ [I"flareshow;T@@ [I"flare-tools;T@+@ [I" flarg;T@E@ [I"flashatron;T@@ [I"Flashatron;T@@ [I"flashback;T@'@ [I"flashcards;T@E@ [I"flash_cookie_session;T@;@ [I" flasher;T@@ [I"flash_hash_request_uuid;T@E@ [I"flash-header;T@@ [I"flash_helper;T@@ [I"flash-message-conductor;T@O@ [I"flash_messages_helper;T@@ [I"flashplayer;TU;[I" 9.115.0;T@ [I"flashplayer-task;T@@ [I"flash_policy_server;T@@ [I"flash_render;T@@ [I"flashsdk_sqe;T@@ [I"flash-stamp;T@@ [I"flashtoggle;T@@ [I"flash_tool;T@@ [I" flatbed;T@E@ [I"flat_filer;T@p@ [I" flatfish;T@@ [I"flat_hash;T@@ [I" flat_out;T@@ [I"flatpack_client;T@@ [I"flatpack_core;T@@ [I"flattendb;T@6@ [I"flattener;T@@ [I"flatten_migrations;T@'@ [I" flattr;T@@ [I"flatulent;T@"@ [I" flatware;T@"@ [I"flavoured_markdown;T@J@ [I"flavour_saver;T@@ [I" flay;T@@ [I" flea;T@@ [I" fleakr;T@@ [I" fled;T@@ [I" fleet;T@@ [I" flem;T@E@ [I" fletcher;T@@ [I"fletcherm-culerity;T@ @ [I"fletcherm-git-deploy;T@@ [I" flex;T@x@ [I" flex2sdk;T@@ [I"flexa_lib;T@@ [I"flex-compiler;T@@ [I" flexconf;T@@ [I"flex_egenial_scaffold;T@'@ [I"$flex_egenial_scaffold_generator;T@'@ [I"flex_fields;T@@ [I" flexible;T@@ [I"flexible_admin;T@@ [I"flexible_api;T@@ [I"flexible_api_server;T@@ [I"flexible_csv;T@@ [I"flexible_date;T@@ [I"flexible-nested-form;T@@ [I"flexi_generators;T@@ [I"fleximage;T@@ [I"flexi_model;T@@ [I"flexirecord;T@ @ [I"flexlayout-rails;TU;[I" 0.1.4.1;T@ [I"flexmls_api;T@!@ [I"flexmls_gems;T@ @ [I" flexmock;T@N@ [I"flexmock-minitest;T@@ [I"flexPartyPlayer;T@'@ [I" flexpay;T@@ [I" flexpmd;T@@ [I"flex_scaffold;T@`@ [I" flex-sdk;T@@ [I"flexsdk-tasks;T@@ [I"flexselect;T@@ [I"flexslider;T@@ [I"flex-source-inspector;T@@ [I"flextures;T@Sg@ [I"flexutils;T@@ [I"flexy-odf-report;T@6S@ [I" flickr;T@@ [I"flickr_airlift;T@@ [I" flickraw;T@Q@ [I"flickraw-cached;TU;[I" 20120701;T@ [I"flickr_badge_maker;T@'@ [I"flickrcaptionr;T@@ [I"flickr_cli;T@|@ [I"flickr_fakr;T@6@ [I"flickr-folder;T@`@ [I"flickr_fu;T@@ [I"flickr-fu;T@+@ [I" flickrie;T@ @ [I" flickrip;T@I@ [I"flickr-login;T@@ [I"flickrmocks;T@' @ [I"flickr_oauth;T@E@ [I"flickr-objects;T@@ [I"flickr_party;T@@ [I" flickrpu;T@@ [I" flickrrb;T@f!@ [I"flickr.rb;T@@ [I"flickr-rest;T@`@ [I"flickr_sync;T@'@ [I"flickr-tools;T@E@ [I" flickru;T@@ [I" flickrup;T@@ [I"flickr-wrapper;T@6@ [I" flicks;T@@ [I"flickvimeo;T@@ [I" fliewr;T@O@ [I" flight;T@!@ [I"flightcaster;T@@ [I"flightplan;T@i@ [I"FlightSearcher;T@@ [I"flightstats;T@@ [I" flint;T@'@ [I" flip;T@"@ [I" flipit;T@'@ [I" flipp;T@@ [I" flipper;T@@ [I" Flipper;T@s@ [I"flipper-mongo;T@I@ [I"flipper-redis;T@@ [I"flipstone-ar_mailer;T@ @ [I"flipstone-matchers;T@'@ [I" fliptop;T@'@ [I" flite4r;T@@ [I" flix;T@E@ [I" flix4r;T@@ [I" flixit;T@@ [I"float-formats;T@@ [I"floatstats;T@@ [I" flock;T@@ [I" flockdb;T@@ [I"flock_of_chefs;T@'@ [I"flockonus-nifty-generators;T@3@ [I" flog;T@n>@ [I" flogger;T@I@ [I" flojo;T@J@ [I" flombe;TU;[I" 0.1.0.12;T@ [I"flonkerton;T@E@ [I" flood;T@`@ [I" floom;T@'@ [I"flooose-gemedit;T@*@ [I"floormanager;T@@ [I"floor_manager;T@6@ [I"floorplanner-adyen;T@I@ [I" flote;T@B @ [I"flotilla-rails;T@'@ [I" flotr;TU;[I" 1.3.12;T@ [I"flot-rails;T@E@ [I" flott;T@@ [I"flotype-bridge;T@@ [I" flow;T@'@ [I" flowdock;T@I@ [I"flowdock-git-hook;T@@ [I"flowerbox;T@@ [I"flowheart;T@'@ [I"flow_pagination;T@u@ [I"flowplayer;T@@@ [I" flowtag;T@ @ [I" fl-rocco;T@@ [I"flt;T@@ [I"fl-thrift;T@'@ [I"fl-thrift_client;T@@ [I" fluby;T@y@ [I" flue;T@'@ [I"fluentassertions;TU;[I" 1.2.2.0;T@ [I"fluent_builder;T@`@ [I"fluent_command_builder;T@Q@ [I"fluent_conditions;T@@ [I" fluentd;TU;[I" 0.10.30;T@ [I"fluent-exec;T@@ [I"fluent-logger;T@"@ [I"fluentmetadata;TU;[I"0.5.1.2069;T@ [I"fluentmigrator;T@- @ [I"%fluent-mixin-config-placeholders;T@@ [I"$fluent-mixin-plaintextformatter;T@@ [I"fluentnhibernate;TU;[I"1.1.0.685;T@ [I"fluent-plugin-access;T@E@ [I"#fluent-plugin-amplifier-filter;T@`@ [I"fluent-plugin-amqp;T@@ [I"fluent-plugin-axlsx;T@'@ [I"fluent-plugin-boundio;T@`@ [I"fluent-plugin-cassandra;T@E@ [I" fluent-plugin-cassandra-cql;T@@ [I""fluent-plugin-config-expander;T@`@ [I"fluent-plugin-couch;T@@ [I"fluent-plugin-couchbase;T@E@ [I"!fluent-plugin-datacalculator;T@"@ [I"fluent-plugin-datacounter;T@x@ [I"fluent-plugin-delayed;T@'@ [I""fluent-plugin-delay-inspector;T@'@ [I"fluent-plugin-dstat;T@@ [I"fluent-plugin-dynamodb;T@@ [I"#fluent-plugin-file-alternative;T@6@ [I"fluent-plugin-filter;T@@ [I"fluent-plugin-flatten;T@@ [I"fluent-plugin-flowcounter;T@|@ [I"fluent-plugin-flume;T@`@ [I"fluent-plugin-fnordmetric;T@'@ [I"fluent-plugin-forest;T@@@ [I"fluent-plugin-gamobile;T@I@ [I"fluent-plugin-groonga;T@@ [I"fluent-plugin-growl;T@@ [I"!fluent-plugin-growthforecast;T@+@ [I"fluent-plugin-gstore;T@@ [I"fluent-plugin-hbase;T@@@ [I"fluent-plugin-hipchat;T@`@ [I"fluent-plugin-hoop;T@+@ [I"fluent-plugin-hostname;T@'@ [I" fluent-plugin-http-enhanced;T@"@ [I"fluent-plugin-http-status;T@@ [I"fluent-plugin-ikachan;T@@ [I"fluent-plugin-imkayac;T@'@ [I"fluent-plugin-irc;T@'@ [I"fluent-plugin-kafka;T@'@ [I"fluent-plugin-kanicounter;T@'@ [I"fluent-plugin-kestrel;T@I@ [I""fluent-plugin-librato-metrics;T@@ [I"fluent-plugin-loggly;T@'@ [I"fluent-plugin-mail;T@'@ [I"fluent-plugin-map;T@"@ [I"fluent-plugin-metricsense;T@@ [I"fluent-plugin-mongo;T@ @ [I"fluent-plugin-msgpack-rpc;T@@ [I"fluent-plugin-munin;T@@ [I"fluent-plugin-mysql;T@@ [I"fluent-plugin-mysql-query;T@I@ [I"!fluent-plugin-mysqlslowquery;T@E@ [I"$fluent-plugin-mysqlslowquerylog;T@'@ [I"fluent-plugin-nats;T@@ [I"fluent-plugin-notifier;T@@ [I""fluent-plugin-numeric-counter;T@@ [I""fluent-plugin-numeric-monitor;T@@@ [I"fluent-plugin-parser;T@@@ [I"fluent-plugin-pghstore;T@@ [I"fluent-plugin-pgjson;T@'@ [I"fluent-plugin-ping-message;T@@ [I"fluent-plugin-redis;T@@ [I" fluent-plugin-redis-counter;T@`@ [I"fluent-plugin-resque;T@@ [I"fluent-plugin-rewrite;T@V@ [I"%fluent-plugin-rewrite-tag-filter;T@@ [I"fluent-plugin-s3;T@[@ [I""fluent-plugin-sampling-filter;T@@@ [I"fluent-plugin-say;T@`@ [I"fluent-plugin-scribe;T@d@ [I"fluent-plugin-select;T@<@ [I"fluent-plugin-serialport;T@E@ [I"fluent-plugin-sndacs;T@@ [I"fluent-plugin-snmp;T@@ [I"fluent-plugin-sns;T@@ [I"fluent-plugin-solr;T@`@ [I"fluent-plugin-splunk;T@ @ [I"fluent-plugin-sqs;T@@ [I"fluent-plugin-suppress;T@E@ [I"fluent-plugin-tagfile;T@'@ [I"fluent-plugin-tail-ex;T@@ [I"fluent-plugin-td;TU;[I" 0.10.13;T@ [I"fluent-plugin-twitter;T@`@ [I"fluent-plugin-udp;T@'@ [I"fluent-plugin-weather;T@'@ [I"fluent-plugin-webhdfs;T@@ [I"fluent-plugin-woothee;T@'@ [I"fluent-plugin-zabbix;T@'@ [I"fluent-plugin-zmq;T@@ [I"fluent-query;T@@ [I"fluent-query-dbi;T@' @ [I"fluent-query-mysql;T@e@ [I"fluent-query-postgresql;T@e@ [I"fluent-query-sql;T@' @ [I"fluent-query-sqlite3;T@- @ [I"fluentxpath;T@@ [I" fluffer;T@'@ [I" fluffery;T@@ [I" fluffy;T@`@ [I"fluffy_barbarian;T@@ [I"fluffy-ruby-debug;T@E@ [I" fluid;T@@ [I" fluiddb;T@ @ [I"fluidfeatures;T@@ [I"fluidfeatures-rails;T@@ [I"fluidinfo;T@@ [I" fluidity;T@`@ [I"fluid_table;T@n>@ [I"fluid-time;T@I@ [I" fluke;T@@ [I" flukso4r;T@@ [I" flumify;T@E@ [I" flunk;T@'@ [I" fluq;T@@ [I"flushing_flash;T@6@ [I"flushing-flash;T@@ [I"flustered;T@`@ [I" fluther;T@@ [I" flutie;T@ @ [I" flutie2;T@@ [I" fluttrly;T@@ [I" flux;T@V@ [I" fluxapi;T@6@ [I" FluxTuna;T@@ [I" flv-dl;T@@ [I" flvedit;T@y@ [I" flvorflv;T@@ [I" flvtool2;T@ @ [I"flx-tools;T@@ [I"fly;T@'@ [I" flyapi;T@6@ [I"flycat_logic;T@'@ [I"flycat_record;T@'@ [I"flycat_util;T@'@ [I" flydata;T@s@ [I"flyerhzm-metric_fu;T@@ [I" flying;T@@ [I"flying_robot;T@"@ [I"flying_saucer;T@@[I"flying-sphinx;T@-@ [I" flyingv;T@@ [I" flynn;T@@ [I"flyweight;T@"@ [I"fmalamitsas-aws-s3;TU;[I"0.6.2.1254423625;T@ [I"fmalamitsas-cancan;T@@ [I"fmalamitsas-right_aws;T@@ [I" fmap;T@'@ [I"f-matchers;T@n@ [I"fml;T@[@ [I" fmod;T@E@ [I"fmod-ruby;T@@ [I"fmq;T@@ [I"fms-admin-api;T@[ @ [I" fm_store;T@!@ [I"fmt_alias;T@@ [I"fm_yaml_db;T@[@ [I" fmylife;T@@ [I"fnando-hello_world;T@@ [I"fn_document;T@@ [I" fned;T@@ [I"fnf;T@@ [I"fngtps-weblog;T@@ [I"fnm-recaptcha;T@,@ [I"fnm-statistics;T@+@ [I" fnord;T@'@ [I"fnord-client;T@'@ [I"fnordmetric;T@@ [I"fnordmetric-client;T@'@ [I"fnv;T@@ [I"foaf_stone;T@@ [I" foam;T@@ [I" foarum;T@@ [I" foauth;T@I@ [I" foauther;T@'@ [I"focal_point;T@@ [I"foco-contacts;TU;[I" 1.2.18;T@ [I"foco-simple_captcha;T@6@ [I" focus;T@@ [I"focused_controller;T@@ [I"focused-test;T@@ [I"focus-generator;T@'@ [I"focusinspector;T@'@ [I" fofof;T@@ [I"fog;T@e@ [I"fog4encbs;T@sl@ [I"fog-aws-dynamodb-locker;T@'@ [I"fog-bouncer;T@[@ [I" fogbugz;T@@ [I"fog-dragonfly;T@@ [I"fog-external;T@@ [I"fog-gridfs;T@'@ [I"foggy_bottom;T@V@ [I" fog-iwd;T@'@ [I" fogli;T@@ [I"fog-maestrodev;TU;[I"1.8.0.20130109172219;T@ [I"fog-sgonyea;T@ @ [I" fog_site;T@x@ [I"fog-tenderloin;T@E@ [I"fog_tracker;T@x@ [I"fog_tractical;T@T @ [I" fold;T@@ [I"folder_data_sampler;T@@ [I" foldscaf;T@ @ [I" folio;T@x@ [I"followable;T@'@ [I" follower;T@'@ [I"follow_http_redirects;T@E@ [I"follow_redirect;T@@ [I" foma;T@@ [I" fomu;T@ @ [I" fone;T@@ [I" fonetica;T@@ [I"font_assets;T@6@ [I"font_awesome;T@ @ [I"font-awesome-more;T@'@ [I"!font-awesome-more-sass-rails;T@f!@ [I"font_awesome_rails;T@"@ [I"font-awesome-rails;T@@ [I"font_awesome-sass-rails;T@t@ [I"font-awesome-sass-rails;T@jO@ [I"font_awesome_tag_helper;T@`@ [I"fontcustom;T@@@ [I"fontcustomtoadstool;T@c2@ [I" fonte;T@@ [I"fontello-rails;T@@ [I"font-kit-rails;T@@ [I"fontsquirrel-download;T@'@ [I"font-stack;T@@@ [I"font-stacks;T@+@ [I"foo;T@E@ [I" foobar;T@'@ [I"food_court;T@+@ [I"foodcritic;T@@ [I"foo-deploy;T@@ [I" foodie;T@'@ [I"food_info;T@@ [I" foofred;T@@ [I" foogem;T@@ [I" foo_gem;T@'@ [I"foolabs-acts_as_archive;T@R@ [I"foolabs-delocalize;T@@ [I"foolabs-rack-flash-session;T@@ [I" foolio;T@@ [I" fools;T@@ [I"football-manager;T@@ [I" footing;T@1@ [I" footman;T@'@ [I"footnotes;T@'@ [I"foot_stats;T@'@ [I" footstep;T@6@ [I" for_a;T@@ [I" forage;T@@ [I"force_bind;T@`@ [I"force_require;T@@ [I"force_schema;T@@ [I" ford;T@@ [I"for_each_row;T@@ [I"foreground;T@@ [I"foreign_actor;T@'@ [I"foreign_domain_routing;T@@ [I"foreigner;T@u@ [I"foreigner-matcher;T@@ [I"foreign-fqdn-routing;T@E@ [I"foreign_key_migrations;T@@ [I"foreign_keys;T@+@ [I"foreign_model;T@@ [I" forem;T@'@ [I" foreman;T@N@ [@]{@N@t[@]{@N@[@]{U;[I" 0.57.0;T@[@]{U;[I" 0.60.2;T@ [I"foreman_api;T@V@ [I"foreman-capistrano;TU;[I" 0.52.4;T@ [I"foremancli;T@@ [I"foreman_epel_release;T@E@ [I"foreman-export-custom;T@'@ [I"foreman-export-daemontools;T@@ [I"foreman-export-initscript;T@'@ [I"foreman-export-monit;T@E@ [I"foreman-export-nginx;T@@ [I"foreman_export_runitu;T@E@ [I" foreman-export-upstart_user;T@'@ [I"foreman_god;T@@ [I"foreman-kicker;T@@ [I"foreman_ovirt;T@@ [I"foreman_upstart_boot;T@'@ [I"foreman-upstart-daemon;T@'@ [I"foreman-upstart-scaling;T@@ [I"forem-gfm_formatter;T@@ [I"forem-kramdown;T@@ [I"forem-markdown_formatter;T@@ [I"forem-rdiscount;T@@ [I"forem-redcarpet;T@@ [I"forem-textile_formatter;T@@ [I" forest;T@`@ [I"foresth-ar_mailer;TU;[I" 2.1.8;T@ [I""foresth-cloudfront_asset_host;TU;[I" 1.0.6.3;T@ [I"forestify;T@@ [I" forever;T@+@ [I" foreverb;T@@ [I"foreverman-ar_mailer;T@'@ [I"!foreverman-authlogic-connect;T@@ [I"foreverman-dhaka;T@ @ [I"forex_date;T@@ [I"forforf-aws-sdb;T@J@ [I" forge;T@@ [I"forge-factories;T@@ [I"forgeos_blog;TU;[I" 1.9.2;T@ [I"forgeos_cms;T@:!@ [I"forgeos_cms_front;T@+@ [I"forgeos_commerce;T@+@ [I"forgeos_commerce_front;T@+@ [I"forgeos_core;T@:!@ [I" forgery;T@@ [I"forgery_ja;T@I@ [I"forgetful;T@@ [I"forgetful-clearance;T@W@ [I"forgetful-web;T@@ [I"forgiving_nil;T@E@ [I" fork;T@@ [I"forkandreturn;T@@ [I"fork_break;T@`@ [I"fork_buddy;T@@ [I"forkcms_3_deploy;T@N@ [I"forkcms_deploy;T@.@ [I"forkcms_new_deploy;T@@ [I" forker;T@@ [I" forkexec;T@'@ [I"forkhandle;T@'@ [I" forkify;T@@ [I" forking;T@@ [I" forkit;T@`@[I" forkjoin;T@@[I"fork_legacy_deploy;T@@ [I" forklift;T@!@ [I"forklifter;T@'@ [I"fork_manager;T@@ [I" forkme;T@n@ [I" forkoff;T@@ [I"forkomatic;T@E@ [I" forkpool;T@@ [I"forkreadme;T@@ [I" fork_run;T@'@ [I" form;T@@ [I" formal;T@@ [I"formality;T@E@ [I"formalize;T@"@ [I"formalize-rails;T@6@ [I"form_assistant;T@N@ [I" format;T@@ [I"formatador;T@,@ [I"format_alias;T@"@ [I"format_array;T@@ [I"format_data_converter;T@@ [I"format_for_extensions;T@+@ [I"formation;T@'@ [I"formative;T@E@ [I"formatize;T@@ [I"format_logs;T@@ [I" formatr;TU;[I" 1.10.1;T@ [I"formatted_attributes;T@@ [I"formatted_date;T@@ [I"formatted-dates;T@@ [I"formatted_form;T@+@ [I"formatted_length;T@n@ [I"formatted-money;T@'@ [I"formatted_phone_number;T@+@ [I"formatted_rails_logger;T@@ [I"formattedstring;T@`@ [I"formatted_url;T@"@ [I"format_validators;T@V@ [I"form-bootstrap;T@n@ [I"form_cutter;T@@ [I" forme;T@X@ [I" formeze;T@ @ [I"form_factor;T@W@ [I"form_forms;T@@ [I" formgen;T@@ [I"formhelper;T@@ [I"form_helper_css;T@'@ [I"form_helper-error_messages;T@'@ [I" formic;T@[@ [I"formidable;T@@@ [I" formie;T@@ [I" formize;T@@ [I"formkeeper;T@3@ [I"formkeeper-japanese;T@E@ [I"forml-rails;T@@ [I"form_object;T@`@ [I"form_object_model;T@@@ [I" formol;T@@ [I"formol-bbcode;T@@ [I"formol-markdown;T@@ [I"formol-theme-basic;T@'@ [I" formosa;T@@ [I"formotion;T@@ [I"formprocessor;T@@ [I"forms-spec;T@@@ [I"formstack;T@'@ [I"formtastic;T@ @ [I"formtastic-bootstrap;T@O@ [I"$formtastic_calendar_date_select;T@`@ [I"formtastic_currency_select;T@@ [I"formtastic_date_as_string;TU;[I" 0.0.5.4;T@ [I"!formtastic_datepicker_inputs;T@@ [I"formtastic-epiceditor;T@E@ [I"formtastic_extensions;T@n@ [I"formtastic-extensions;T@@ [I"formtastic_inputs;T@@ [I"formtastic_jquery_ui;T@"@ [I"formtastic_jquids;T@`@ [I"formtastic_masked_input;T@@ [I"formtastic-plus-bootstrap;T@T @ [I"formtastic-rails3;T@aw@ [I"formtastic_state_select;T@@ [I"'formtastic_validated_boolean_input;T@'@ [I"formtastic_validation;T@+@ [I" formula;T@@ [I"formula_dsl;T@x@ [I"formula_eval;T@@@ [I"formulaic;T@'@ [I" Formulan;T@@ [I"formulate;T@@ [I"formulator;T@@ [I"formvalidator;T@|@ [I"form_validator;T@'@ [I" formy;T@"@ [I" formz;T@@ [I" forrest;T@@@ [I" forrst;T@`@ [I" fort;T@@ [I" fortify;T@@ [I" fortmux;T@@@ [I"fortnight;T@@ [I" fortnox;T@@ [I" fortran;T@@ [I"fortune_gem;T@@ [I"fortune_teller;T@@ [I" fortyk;T@`@ [I" forum;T@'@ [I"forum_monster;T@@ [I"forum_post;T@[ @ [I"forum-rivsc;T@'@ [I" forward;T@@ [I"forwarder;T@`@ [I"forwarder19;T@`@ [I"forwardmachine;T@@ [I"forward-rbase;T@@ [I" foshow;T@@ [I" fosl;T@'@ [I" fossil;TU;[I" 0.5.50;T@ [I"fossilize;T@@ [I" fossyl;T@@ [I"fotki-export;T@"@ [I" foto;T@n@ [I" fotolia;T@'@ [I"fotolia_rest;T@@ [I"fotonauts-curb;T@@ [I"fotonauts-facebooker;TU;[I" 1.0.67;T@ [I"fotonauts-flickr_fu;T@@ [I"fotonauts-premailer;T@@ [I"fotoramajs;TU;[I" 3.0.7;T@ [I" found;T@E@ [I"foundation;TU;[I" 0.05;T@ [I"foundation-css;T@'@ [I"foundation-icons-rails;T@H@ [I" foundation-icons-sass-rails;T@O@ [I"foundation_rails_confirm;T@@ [I"foundation_rails_helper;T@[ @ [I"foundation-sass;T@ @ [I" foundry;T@'@ [I"foundry_wordpress_tool;T@@ [I"four_bites_aes;T@@ [I" fourcast;T@'@ [I" fourchan;T@'@ [I"four-chan;T@'@ [I" fourmer;T@@ [I"four_ruby;T@@ [I"foursquare;T@@ [I"foursquare2;T@ @ [I"foursquare-api;T@@ [I"foursquared;T@"@ [I"foursquare_document;T@@ [I"foursquare-oauth;T@,@ [I" foursquare_rails_generators;T@@ [I"foursquare_venues;T@`@ [I" foxbat;T@@ [I"foxy_factory;T@`@ [I" fozzie;T@@ [I"fozzie_rails;T@'@ [I"fpauser-rake-remote_task;T@+@ [I"fpauser-vlad;T@ @ [I" fpdf;T@=\@ [I"fp-growth;T@@ [I"fpm;TU;[I" 0.4.26;T@ [I"fpm-cookery;T@*@ [I"fql;T@I@ [I"fr;T@e@ [I" frac;T@@ [I"fracassandra;T@@ [I"frac-foreigner;T@@ [I"fractal-matchers;T@E@ [I"fractalpenguin-googlesso;T@'@ [I" fractals;T@@ [I" fraction;T@@ [I"fractional;T@@ [I"fraction_parser;T@@ [I" fracture;T@- @ [I" frag;T@I@ [I" fraggel;T@@ [I" fraggle;T@'@ [I"fraggle-block;T@@ [I"fraggle-block-spanx;T@@ [I"fraggle-spanx;TU;[I" 4.0.1.1;T@ [I"fraggle-synchrony;T@'@ [I"fraggle-synchrony-spanx;T@<@ [I" fragile;T@@ [I" fragment;T@E@ [I"fragmented_validation;T@@ [I"fragmenter;T@@ [I" fragrant;T@@ [I"frahugo-s3sync;TU;[I" 1.3.8;T@ [I" frakzio;T@'@ [I" frame;T@@@ [I"framecurve;T@ @ [I"framed-scss;T@"@ [I" frames;T@'@ [I"framework_fixture;T@I@ [I"framework_guesser;T@'@ [I"framework_identificator;T@O@ [I"frameworks-capybara;TU;[I" 0.2.20;T@ [I" framey;T@N'@ [I" framous;T@@ [I"framous-grid;T@@ [I" frank;T@@ [I"frank4712;T@'@ [I"frank-cucumber;T@;@ [I"frankel_weibo;T@@ [I"frankenstein-sinatra;T@E@ [I" frankie;T@@ [I" frankrb;T@'@ [I"frappuccino;T@'@ [I" frasm;T@@ [I"fraudpointer-client;T@@ [I" frazzle;T@6@ [I" frbr;T@@ [I"freakwincy_studio_game;T@@ [I" freckle;T@@ [I" freckly;T@V@ [I" fred;T@@ [I" freddie;T@E@ [I" fredit;T@ @ [I" fredo;T@ @ [I"fredwu-sequel-rails;T@@ [I" free;T@@y;[@}@@ [@}@@1[I"freeagent;T@@ [I"free_agent;T@@ [I"freeagent_api;T@@ [I"freeagent_api_ares;T@'@ [I" freebase;T@'@ [I"freeberry;T@@ [I" freec;T@@ [I"freegenie-em-spec;T@@ [I"freegenie-factory_girl;T@u"@ [I"freegenie-redgreen;T@@ [I"freegeoip;T@@ [I"free-image;T@@ [I"freelancer;T@`@ [I"freelancer4r;T@@ [I"freelancer-rails;T@@ [I" freely;T@I"x86_64-darwin-12;T[I"freemusicarchive;T@'@ [I" freerange_acts_as_versioned;T@@ [I"freerange-cli;T@@ [I"freerange_deploy;T@|@ [I"freerangestylin;T@1@ [I"freescrape;T@@ [I"free-scrape;T@@ [I"freeskimer;T@@ [I"freesound-ruby;T@'@ [I"freeswitcher;T@@ [I"FreeSWITCHeR;T@V@ [I"free_text;T@@ [I" freetts;T@I@ [I"freeze_gems;T@E@ [I" freezer;T@@ [I"freeze-ray;T@E@ [I"freeze_time;T@@ [I"freiden-contacts;TU;[I" 0.2.6.1;T@ [I" freight;T@@ [I"freighthopper;T@N$@ [I"freightrain;T@-@ [I"french_man;T@@ [I"french_rails;T@@ [I"frenchrevcal-ruby;T@@ [I" frenetic;T@@ [I"frenzy_bunnies;T@V@ [I" freq;T@@ [I"frequency;T@|@ [I"frequency_analyser;T@@ [I"frequency_distribution;T@@ [I"frequency-dsl;T@V@ [I"frequency_enumerator;T@@ [I" frequent;T@@ [I" fresh;T@@ [I"fresh-auth;T@'@ [I"freshbooks;T@ @ [I"freshbooks2;T@:V@ [I"freshbooks.rb;T@@ [I"fresh_connection;T@n@ [I"fresh_cookies;T@@ [I"freshdesk;T@@ [I"freshlime_deploy;T@@@ [I"freshmaker;T@@ [I"freshmeat;T@@ [I"fresh_redis;T@V@ [I"fresh_simplehttp;T@@ [I"freshtrack;T@X@ [I"freshy_filter_chain;T@@ [I" fresnel;T@h@ [I" fresno;T@@[I"fretboard_drawer;T@'@ [I"frete_correios;TU;[I" 0.2.7.3;T@ [I" frett;T@@ [I" freyr;T@@ [I" friday;T@E@ [I"fridaycms;T@E@ [I" friend;T@@ [I"friendable;T@@ [I"friend_collection;T@@ [I"friendfeed;T@N$@ [I"friend-feed;T@`@ [I" friendly;T@@ [I"friendly-attributes;TU;[I" 0.7.1.1;T@ [I"friendly_digest;T@s@ [I"friendly_errors;T@@ [I"(friendlyfashion-graylog2_exceptions;T@@ [I"friendlyfashion-thin;TU;[I" 1.4.1.1;T@ [I"$friendlyfashion-thinking-sphinx;TU;[I" 2.0.13.3;T@ [I"&friendlyfashion-ts-datetime-delta;T@@ [I"friendly_format;T@n@ [I"friendly_id;TU;[I" 4.0.9;T@ [I"friendly_id_datamapper;T@@ [I"friendly_id_globalize3;TU;[I" 3.2.1.6;T@ [I"friendly_id_sequel;T@@ [I"friendly_password;T@@ [I"friendly_postgres;T@@ [I"friendly_test_names;T@@ [I" friendz;T@`@ [I"friflaj_ri_cal;T@- @ [I" frill;T@=@ [I"frisky_mongo;T@@ [I" frivol;T@@ [I"frm;T@@ [I" frogger;T@@ [I"frogs-and-bugs;T@@ [I" fromage;T@@ [I"from_excel;T@@ [I"from-here;T@@ [I"front-compiler;T@@ [I" frontend;T@'@ [I"frontend-helpers;T@6@ [I"frontendloader;T@n@ [I"front_end_loader;T@@ [I"frontend_notifier;T@+@ [I" frontier;T@E@ [I" frontin;T@@ [I"frontkit-rails;T@@ [I" frontman;T@@ [I" fropy;T@'@ [I" frost;T@1@ [I" frostale;T@@ [I"frothybeer;T@'@ [I"frozen_gems_generator;T@@ [I"frozen-objects;T@@ [I"fruitloop;T@[ @ [I" fruity;T@@ [I" frulo;T@@ [I" frusdl;T@'@ [I"fs;T@@ [I" fsattr;T@E@ [I" fsck;T@@ [I" fsdb;T@@ [I"fselector;T@@ [I" fsevents;T@`@ [I" fsgrowl;T@@ [I" fshp;T@@ [I" fsl-ruby;T@'@ [I"fsm;T@@ [I" fspath;T@N@I[@~@z@ [I"fspath-mac;T@O@ [I"fspath-xattr;T@@ [I"fspsocket;T@@ [I" fssh;T@@ [I" fssm;T@ @ [I"fs-snapshot;T@@ [I" fstab;T@`@ [I" fstest;T@'@ [I" fswatch;T@@ [I" fs-watch;T@!@ [I"fsxtrader;T@@ [I"ft;T@@ [I" ft2-ruby;T@+@ [I" ftdi;T@E@ [I" ftdic;T@'@ [I"ftl;T@@ [I"fto;T@@ [I" ftools;T@@ [I"ftp;TU;[I" 0.069;T@ [I"ftp_deploy;T@E@ [I" ftpeter;T@'@ [I" ftp-ext;T@+@ [I" ftpfxp;T@"@ [I"ftp_paradise;T@@ [I" ftpproxy;T@N@ [I"ftp_service;T@@ [I" ftp_sync;T@@ [I" ftputils;T@@ [I" ftrio;T@"@ [I" fts_lite;T@@@ [I"ftt;T@V@ [I"ftw;T@<<@ [I"fu;T@+@ [I" fuck;T@E@ [I" fuckery;T@@ [I"fucking_fail;T@@ [I"fucking_goddamn_new;T@'@ [I"fucking-great-advice;T@@ [I" fucko;T@`@ [I" fuckyeah;T@@ [I"fuck_you_rubygems;T@@ [I" fudge;T@"@ [I"fuelprice;T@@@ [I"fuel_purchase;T@@ [I"fuelux-rails;T@ @ [I" fu-fu;T@@ [I" fugu;T@@ [I"fugue_icons_rails;T@S@ [I"!fugue_icons_shadowless_rails;T@S@ [I" fuji;T@E@ [I" fukung;T@@ [I" fulcrum;T@|@ [I"fulcrum_cloudfuji;T@I@ [I"fullcalendar-rails;TU;[I" 1.5.4.0;T@ [I"fullcontact;T@"@ [I"fullcontacter;T@@ [I"full_lengther_next;T@V@ [I" fullname;T@'@ [I"fullname_parser;T@E@ [I"full-name-splitter;T@@@ [I" fullscreen_lazy_high_charts;T@@ [I"fullstack;T@;:@ [I"fullstack-admin;T@"@ [I"fullstack-cms;TU;[I" 0.3.28;T@ [I"fullstack-rss;T@`@ [I"fum;T@@ [I" fumbler;T@'@ [I" fume;T@' @ [I"fume-cancan;T@'@ [I" fume_dev;T@@ [I" fume-dev;T@@ [I"fume-settable;T@E@ [I" fumetrap;T@ @ [I" fumoffu;T@@ [I"fun;T@'@ [I"funbox-deploy;T@n@ [I"functional;T@|@ [I"function_importer;T@E@ [I" functor;T@@ [I"funding_primer;T@@ [I" funfig;T@n@ [I" funfx;T@I@ [I" fu_nil;T@@ [I" funit;T@[@ [I" fUnit;T@6@ [I" funk;T@@ [I"funkenplate;T@`@ [I" funkr;T@@ [I"funktional;T@ @ [I"funky_accessor;T@'@ [I"funky_tabs;T@ W@ [I" funnel;T@@ [I" fun_sftp;T@n@ [I" funtimes;T@x@ [I" fu_queue;T@@ [I"furious-generators;T@E@ [I" furkan;T@'@ [I"furltility;T@'@ [I" furnace;T@@ [I"furnace-avm2;T@@ [I"furnace-swf;T@"@ [I"furoshiki;T@E@ [I" fury;T@@ [I" fusebox;T@I@ [I" fusefs;T@X@ [I"fusefs-osx;T@X@ [I" fuselage;T@"@ [I" fusion;T@@ [I"fusion_tables;T@@ [I" future;T@'@ [I"future_agent;T@@ [I"futurechimp-sanitize_email;T@@ [I"future_me;T@D@ [I"future-resource;T@@ [I" futures;T@'@ [I"futures_pipeline;T@@ [I" futurest;T@E@ [I"futurevalue;T@E@ [I" fuubar;T@@ [I"fuubar-cucumber;T@p@ [I"fuubar-legacy;T@@ [I"fuxed_lock;T@E@ [I" fuzed;T@@ [I" fuzzake;T@E@ [I"fuzz_ball;T@e@ [I" fuzzbert;T@@ [I" fuzzily;T@E@ [I" fuzzy;TU;[I" 9000.0.2;T@ [I"fuzzyclock;T@@ [I"fuzzy_date;T@&@ [I"fuzzy_file_finder;T@@ [I"fuzzyhash;T@@ [I"fuzzy_hash;T@@ [I"fuzzy_infer;T@E@ [I"fuzzy_match;T@@ [I"fuzzy_matcher;T@"@ [I"fuzzy_notes;T@+@ [I" fuzzyrb;T@@ [I"fuzzy-require;T@@ [I"fuzzy_search;T@R @ [I"fuzzy-string;T@@ [I"fuzzy-string-match;T@@ [I"fuzzy-string-match_pure;T@@ [I"fuzzy_strings;T@@ [I"fuzzytime;T@E@ [I"fuzzy_tools;T@@ [I" fuzzzy;T@E@ [I"fvm;T@@ [I" fwatch;T@'@ [I"fws-first-gem;T@@ [I"fwtoolkit;T@@ [I" fxirb;T@@ [I" fxri;T@@ [I" fxruby;TU;[I" 1.6.14;T@[@0U;[I" 1.6.19;T@[@0@5I"universal-darwin-9;T[@0U;[I" 1.6.20;T@ [@0@;I"universal-darwin-10;T[@0@C@ [@0@C@ [I"fxtwitter;T@@ [I"fyg;T@@ [I"fyi;T@@ [I" fynd;T@6@ [I"fysh-game;T@@ [I" fyuk;T@h@ [I" fzeet;T@$@ [I"g;T@@ [I" g11n;T@"@ [I"g1nn13-image_science;T@7U@ [I"g4s_client;T@@ [I" g5cap;T@@@ [I" g5gem;T@@ [I"g5k-graph;T@@ [I" gaapi;T@@ [I"gab;T@'@ [I" gabba;T@@ [I" gabbara;T@@ [I" gabbler;T@@ [I"gabetax-eycap;T@@ [I" gabriel;T@@ [I"gabrielg-vlad;T@N@ [I""gabrielhase-bitmask-attribute;T@@ [I"ga_cookie_parser;T@@ [I" gadafi;T@E@ [I"gadgeteer;T@@ [I" gadgeto;T@@ [I" gaff;T@@ [I" gaffel;T@@ [I" gaffer;T@@@ [I" gaga;T@@ [I"gah;T@'@ [I" gaigo;T@'@ [I"gaiottino-amazon-awis;T@I@ [I" galakei;T@sA@ [I"galapagos_mobile;T@V@ [I" galaxy;T@E@ [I" galena;T@E@ [I" galerab;T@E@ [I"galetahub-active_presenter;T@@ [I"galetahub-auto_html;T@@ [I"galetahub-enum_field;T@@ [I"galetahub-globalize3;T@@ [I"galetahub-salty_slugs;T@@ [I"galetahub-simple_captcha;T@6@ [I" galgen;T@6@ [I" gallerby;T@6@ [I"gallerize;T@!@ [I"galleruby;T@@ [I"gallery-generator;T@"@ [I"gallery-image;T@@ [I"gallery-remote;T@'@ [I"gallery_sync;T@'@ [I" gallio;TU;[I" 3.2.601;T@ [I" gallop;T@@ [I"g_already_grid;T@@ [I"galvinhsiu-active_cart;T@@ [I" gambas;T@@ [I" gambit;T@`@ [I" game;T@'@ [I"game_board;T@E@ [I" gamebox;T@@ [I" gameday;T@V@ [I"gameday_api;T@J@ [I"game_dice;T@@ [I" gameidea;T@@ [I" gamelan;T@[ @ [@ʀ@[ @[I"game_of_life;T@@ [I"game_of_thrones;T@`@ [I" gameplan;T@E@ [I"gameplan-subdomain-fu;T@Y@ [I"gamequery;T@@@ [I"game-queue;T@[@ [I"gamercard;T@'@ [I" gamertag;T@@ [I"game-server;T@@ [I"gamespy_query;T@|@ [I"games_radar;T@6@ [I"games_radar_api;T@@ [I" gametel;T@Y@ [I"game-tictactoe-alu3299;T@'@ [I"game-tictactoe-alu4078;T@E@ [I"game-tictactoe-esegredo;T@E@ [I" gamifier;T@@ [I" gamify;T@E@ [I"ganalytics;T@3@ [I"ganalytics-rails;T@@ [I" ganapati;T@n@ [I" gandalf;T@"@ [I" gandi;T@@ [I" gandirb;T@ @ [I"ganeti_client;T@@ [I"ganglia_js_charts;T@@ [I" ganymed;T@@ [I"ganymed-client;T@@ [I"gap;T@@ [I"gap_buffer;T@@ [I" gapi;T@'@ [I"gapps-provisioning;T@@ [I" gappster;T@'@ [I" gaptool;T@*@ [I"gaptool-api;T@I@ [I"gaptool-client;T@@ [I"gaptool-server;T@,@ [I" garails;T@@ [I" garaj;T@`@ [I" garb;T@e@ [I"garb-authsub;T@X@ [I"garb-no-activesupport;T@y@ [I"garb-reporter;T@"@ [I" garde;T@'@ [I"gardelea-awesome_print;T@@ [I"gardelea-email_spec;T@@ [I" garden;T@E@ [I" gardener;T@N@ [I" garelic;T@@ [I" garlenko;T@E@ [I" garlic;T@ @ [I"garlicjs-rails;T@x@ [I" garlic_rails3_compatibility;T@ @ [I"garmin_connectr;T@V@ [I" garner;T@6@ [I" garnish;T@@ [I"garota_da_fabrica;T@@ [I"!garrettlancaster-activetiger;T@6@ [I"garterbelt;T@`@ [I" garu;T@@ [I"gas;T@@ [I"gasciiart;T@'@ [I" gash;T@+@ [I" gasoline;T@E@ [I"gas_stats;T@@ [I" gassy;T@@ [I" gaston;T@@ [I"gat;T@V@ [I"gatekeeper;T@+@ [I"gatekeeper-rails;T@@ [I" gateway;T@I@ [I"gateway-cassandra-cql;T@`@ [I"gateway-http;T@@ [I"gateway-memcache;T@`@ [I" gather;T@V@ [I" gatherer;T@'@ [I"gatherer_set_parser;T@E@ [I" gatling;T@;@ [I"gatling_gun;T@@ [I" gatoroid;T@X)@ [I" gattica;T@@ [I" gauge;T@E@ [I" gaugeio;T@'@ [I"gaugejs-rails;T@'@ [I" gauges;T@@ [I"gauges-api;T@@ [I"gauges-rails;T@@ [I" gauntlet;T@@ [I" gauntlt;T@@@ [I" gave;T@@ [I"ga_verify;T@'@ [I"gazay-kyotocabinet-ruby;TU;[I" 1.29;T@ [I" gaze;T@!@ [I" gazette;T@@ [I" gazou;TU;[I" 1.5.7;T@ [I"gazou_active_record;T@@ [I"gazouillis;T@"@ [I"gazou_support;T@@ [I" gbarcode;TU;[I" 0.98.16;T@[I" gbip;T@&@ [I" gboom;T@V@ [I"gbs-signal-slot;T@@ [I"gbuesing-toadhopper;T@@ [I" gbwd;T@'@ [I"gcal4ruby;T@u @ [I"gcal4ruby-aunderwo;T@@ [I" gcalapi;T@@@ [I"gcal_button;T@@ [I"gcalevents;T@1@ [I"gcal_mapper;T@`@ [I"gcal-ruby;T@6@ [I"gcal-unit;T@@ [I"gccxml_gem;T@' @ [@@' I"x86-darwin-9;T[@@' I"x86-cygwin;T[@@' @?[@@@ [@@@S[@@@%N[@@@ [@@I"x86-darwin-11;T[I" gc_hacks;T@E@ [I" gchart;T@@ [I" gchartrb;T@W9@ [I"gci-class-extensions;T@u"@ [I"gcm;T@E@ [I" gcmapper;T@@ [I"gcm_helper;T@@@ [I"gcm_on_rails;T@6@ [I"gcm_rails_mongo_mapper;T@@ [I" gcoder;T@@ [I" gcountry;T@E@ [I" gcstats;T@@ [I"gd2;T@@ [I" gd2-ffij;T@@ [I" gdal;T@@ [I"gdal-helper;TU;[I" 0.0.1.4;T@ [I" gdash;T@@ [I" gdata;T@x@ [I" GData;T@"@ [I" gdata19;T@@ [I" gdata_19;T@@ [I" gdata-19;T@x@ [I" gdata2;T@@ [I"gdata4ruby;T@|@ [I"gdata-api;T@@ [I"gdata-c2dm;T@E@ [I"gdata-georgedrummond;T@@ [I"gdata-jruby-client;T@!@ [I"gdata_plus;T@@ [I"gdata-ruby19;T@x@ [I"gdata_spreadsheet;T@`@ [I" gdatum;T@@ [I" gdbm;T@@ [I" gdb.rb;T@@ [I" gdefine;T@'@ [I" gdiff;T@@ [I"gdirections;T@`@ [I"gdkpixbuf;T@)@ [I"gdk_pixbuf2;T@9@ [@@9@ [I"gdocs4ruby;T@@@ [I"gdocs_features;T@@ [I" gdouban;T@@ [I"gdrivestrg;T@@ [I"gds-api-adapters;T@(C@ [I" gds-sso;T@@ [I"gds-warmup-controller;T@@ [I" gearbox;TU;[I" 0.1.17;T@ [I"gearman-ruby;T@ @ [I" gears;T@'@ [I" gearup;T@@ [I" gecko;T@'@ [I"geckoboard-push;T@@ [I"gecko-pusher;T@@ [I" gecoder;T@@ [I"gecoder-with-gecode;T@&@[@6@@[@6@@ [I" gedcom;T@@ [I" geditor;T@"@ [I" geeklets;T@n@ [I"geeklets2;T@'@ [I" geekmail;T@@@ [I"geek_painter;T@@ [I"geek_typist;T@@ [I"geeo_code;T@"@ [I" geera;T@@ [I" geert;T@@ [I" geist;T@@ [I" gelf;T@@ [I" gelfd;T@@ [I" gem2deb;T@E@ [I" gem2pkg;T@+@ [I" gem2rpm;T@@ [I" gemafind;T@@ [I"gem-alias;T@@ [I" gem_all;T@'@ [I" gemaweek;T@@ [I" gem-ban;T@@ [I" gembank;T@'@ [I"gembank_client;T@@ [I"gem_best_practice;T@'@ [I"gembird-backend;T@'@ [I" gembox;T@@ [I" gem_box;T@`@ [I"gem-browse;T@@ [I"gembuilder;T@@ [I"gem_bundler;T@!@ [I"gem_butler;T@@ [I" gemcd;T@@ [I"gem-check-sources;T@@ [I"gem-compile;T@"@ [I"gem-compiler;T@`@ [I"gem_configurator;T@N@ [I"gem_constructor;T@n@ [I"gem-create;T@'@ [I"gem-ctags;T@W@ [I"gemcutter;T@@ [I"gemcutter-test;T@E@ [I"gemcutter-xss;T@'@ [I"gem-dandy;T@@ [I"gemdealer;T@@ [I"gem-depclean;T@[@ [I"gem-dependent;T@I@ [I"gem_dep_example;T@'@ [I"gem_dep_polish;T@'@ [I"gem_dep_shine;T@'@ [I" gemdev;T@6@ [I" gemdir;T@'@ [I" gem_dir;T@@ [I" gemedit;T@@ [I" gem-edit;T@O@ [I" gemenv;T@'@ [I"gemerator;T@@ [I" gemesis;T@"@ [I"gem-etags;T@@ [I"gem-exefy;T@@ [@@NI"universal-mingw32;T[I" gem-fast;TU;[I" 0.0.6.3;T@ [I" gemfeed;T@|@ [I"gemfile19;T@@ [I"gem_file_conflict_checker;T@@ [I" gemfiler;T@@@ [I" Gemfiler;T@'@ [I" gemfire;T@'@ [I"gemfire-jruby;T@@ [I" gemfresh;T@@ [I" gemfury;T@1@ [I"gemfury_helpers;T@@ [I" gemgate;T@'@ [I" gemgen;T@"@ [I" gem_git;T@`@ [I" gem-git;T@E@ [I"gem-github;T@@ [I"gem-github-stats;T@@ [I" gem_grep;T@@@ [I"gem_hadar;T@@ [I"gem-helper;T@'@ [I"gem-homepage;T@@ [I" gemhub;T@@ [I" gemi;T@`@ [I" gemical;T@@ [I" gemify;T@@ [I"gemify-tablesorter;T@@ [I"gemignore;T@x@ [I"gem_import_export;T@@ [I"geminabox;T@@ [I"geminabox_command;T@'@ [I"geminabox-secure;T@@ [I"gem-index-dumper;T@@ [I" gem_info;T@`@ [I" gemini;T@@ [I" gem_init;T@'@ [I" gem-init;T@@@ [I"geminstaller;T@@ [I"geminstaller_builder;T@`@ [I"geminstaller-exec;T@'@ [I" gemish;T@@ [I" gemist;T@@ [I" gemit;T@@ [I" gemk;T@ @ [I"gem_keychain;T@6@ [I"gem_leaves;T@@ [I"gem_lesson;T@@ [I"gemlicense;T@@ [I"gem-licenses;T@@@ [I" gemline;T@+@ [I" gem_lint;T@"@ [I"gem-loaded;T@@ [I"gem_loader;T@@ [I"gem_locate;T@@ [I" gemlock;T@^@ [I"gemlocker;T@'@ [I" gemma;T@@ [I"gem-maintenance;T@@@ [I" gem-man;T@@ [I"gem-manage-sources;T@@ [I" gemmate;T@'@ [I" gemmer;T@@ [I"gem-milkode;T@@ [I"gemmirrorping;T@@ [I" gemmy;T@@ [I"gemnasium-parser;T@g@ [I" gem-new;T@@ [I"gem-nice-install;T@@ [I"gem_of_thrones;T@@ [I" gemoji;T@ @ [I" gemology;T@@ [I" gem-open;T@1@ [I"gem-orphan;T@"@ [I"gem-outdated;T@@ [I"gem-patch;T@6@ [I"gem_patching;T@E@ [I"gem-patching;T@@ [I" gempath;T@`@ [I"gem_plugin;T@@ [I"gem-prune;T@ @ [I"gem_publisher;T@@ [I" gemqs;T@|@ [I" gemr;T@@ [I" gemrage;T@@ [I"gem_raker;T@6@ [I"gem_readme;T@@ [I"gem_recent-updates;T@`@ [I"gem-release;T@@ [I"gem_reloader;T@E@ [I"gem_repackager;T@@ [I" gemrepo;T@@ [I"gem_require;T@@ [I"gem-reset;T@@ [I" gems;T@X@ [I"gem_sample_ryopeko;T@@ [I"gem-sane-binary;T@`@ [I"gem-search;T@E@ [I" gemshit;T@"@[I"gemsitter;T@'@ [I"gem_skeleton;T@`@ [I" gemsmith;T@@ [I"gem_snapshot;T@"@ [I"gemsonrails;T@@ [I" gemspace;T@@@ [I"gemspec_deps_gen;T@W@ [I"gemsquatter;T@@ [I" gem-src;T@@ [I"gems-status;TU;[I" 0.32.0;T@ [I"gemstache;T@@ [I" gemstalk;T@E@ [I"gem_starter;T@@ [I" gemstats;T@'@ [I"gem_stats;T@E@ [I"gem-stats;T@ @ [I" gemstone;T@@ [I"gemstreamer;T@N@ [I" gemstub;T@@ [I" gem_stub;T@@ [I" gem_suit;T@6@ [I" gemsync;T@@ [I" gemtags;T@@ [I"gem_template;T@@ [I" gem_test;T@'@ [I" gem-this;T@@ [I" gem-tldr;T@@ [I"gem-toolbox;T@`@ [I"gem_tools;T@^@ [I"gemtronics;T@@ [I"gem_unused;T@'@ [I" gemusta;T@E@ [I"gem_version;T@@ [I"gem_version_check;T@@ [I"gem-versions;T@@ [I" gemviz;T@@@ [I"gem_watch;T@@@ [I" gemwhois;T@@ [I"gem-whois;T@[ @ [I"gem_with_extension_example;T@R1@ [I" gemy;T@@ [I"gen;TU;[I" 0.41.0;T@ [I"genability;T@@ [I" gendalf;T@e@ [I" gendarme;T@'@ [I"genderizr;T@+@ [I" genders;T@@ [I" gene;T@@ [I" genecon;T@'@ [I"gene_ontology;T@'@ [I"gene_pool;T@@ [I"general-hawk;T@@ [I" generate;T@'@ [I"generate_data_uri;T@@ [I"generate_from_diff;T@'@ [I"generate_vhosts;T@`@ [I"generator;T@'@ [I"generator_extensions;T@@ [I"generator_spec;T@u!@ [I"generator-spec;T@@ [I"generic_auth;T@+@ [I"generic_connection_pool;T@`@ [I"generic_form_builder;T@@ [I"generic_form_for;T@'@ [I"generic_visitor;T@'@ [I" genesis;T@@ [I"genetic_algorithm;T@@ [I"genetic_algorithms;T@@ [I"genetic_framework;T@@ [I" gen_eval;T@@1[@@@y;[@@x@ [I" genfrag;TU;[I" 0.0.0.4;T@ [I" gengen;T@@ [I" genghis;T@@ [I"genghisapp;T@r6@ [I" gengin;T@`@ [I"gengiscan;T@N@ [I" gengo;T@E@ [I"gen-hello;T@@ [I" geni;T@n@ [I" genie;T@@ [I" genit;T@@ [I"genki-flickraw;TU;[I" 0.8.4.1;T@ [I"genki-kyototycoon;T@@ [I"genki-newrelic_rpm;TU;[I" 2.10.1;T@ [I"genki-twitphoto;T@ @ [I"genmachine;T@,@ [I" genomer;T@n@ [I"genomer-plugin-summary;T@"@ [I"genomer-plugin-validate;T@E@ [I"genomer-plugin-view;T@@ [I"genosaurus;T@u"@ [I" genpass;T@@ [I" genseg;T@'@ [I" genspec;T@@ [I" gen-tj;T@E@ [I"gentle_brute;T@E@ [I" gentok;T@`@ [I"gen_token;T@@ [I"gentooboontoo-jspec;TU;[I" 4.3.3;T@ [I" genx4r;T@}@ [I"genx4r-fotopedia;T@D@ [I"geo;T@@ [I" geo2d;T@6@ [I" geoapi;T@@ [I"geocaching;T@@ [I" geo_calc;TU;[I" 0.7.7.1;T@ [I" geocerts;T@@ [I" geocoda;T@"@ [I"geocoda-ruby;T@@@ [I" geocode;T@@ [I" geocoder;T@@ [I"geo_coder;T@`@ [I"geocoder-head;T@x@ [I"geocoder_jp;T@'@ [I"geocoder_plus;T@x@ [I"geocoder-simplified;T@O@ [I"geocoder-us;T@@ [I" geocodr;T@@ [I" geoda;T@'@ [I" geodesic;T@@ [I"geodistance;T@'@ [I"geo-distance;T@@ [I"geodublincreate;T@"@ [I" geoff;T@@ [I"geoff-importer;T@E@ [I" geoffrey;T@;@ [I"geoffreywiseman-prune;T@N@ [I" geofips;T@@ [I" geo_foo;T@@ [I" geofsh;T@@@ [I" geogov;T@3@ [I"geographer;T@T @ [I" geohash;T@@ [I"geohashinator;T@'@ [I"geohashing;T@'@ [I" geohex;T@@ [I" geo_hex;T@:V@ [I" geoip;T@u@ [I" geo_ip;T@@ [I" geoip-c;T@@ [I"geoip_city;T@@ [I"geoip_client;T@E@ [I"geo_ip_curb;T@@ [I" geoipdb;T@@ [I"geoip-extensions;T@E@ [I"geoip-jars;T@@[I"geo-ip-json;T@'@ [I"geoip-rails;T@@@ [I" geo_ips;T@@@ [I"geoip-sar;T@@ [I"geoip_server;T@@ [I" geoiq;T@@ [I" geo_jolt;T@E@ [I" geojson;T@@ [I" geokit;T@X@ [I"geokit-cache;T@@ [I"geokit-geoip;T@@ [I"geokit-geoip-provider;T@@ [I"geokit-lite;T@'@ [I"geokit-nominatim;T@@ [I"geokit-premier;T@n@ [I"geokit-pretty_heading;T@@ [I"geokit-rails;T@T @ [I"geokit-rails3;T@|@ [I"geokit-rails31;T@6@ [I"geokit-with-google-premier;T@@ [I" geokit-with-premier-support;T@@ [I"GeolocateIP;T@@ [I"geolocater;T@@ [I"geo_location;T@@ [I"geolombia;T@@ [I" geoloqi;TU;[I" 0.9.44;T@ [I"geoloqi-simplegeo-import;T@E@ [I"geoloqi-sinatra-sprockets;T@@ [I" geom;T@@ [I" geom3d;T@`@ [I" geomagic;T@@ [I"geo_magic;TU;[I" 0.2.4.3;T@ [I" geomap;T@@ [I"geometrialab-abak-flow;T@@ [I" geometry;TU;[I"5;T@ [I"geomock-rails;T@@ [I"geo_mongo;T@@ [I"geomotion;T@@ [I" geonames;T@I@ [I"geonames_api;T@@ [I"geonames_client;T@@ [I"geonames_local;T@@ [I"geonames_patched;T@@ [I"geonames_rails;T@I@ [I"geonames-with-proxy;T@@ [I"geonozzle;T@'@ [I" geo_pack;T@@ [I"geoplanet;T@@ [I"geo_point;T@@ [I"geopoint_factory;T@@ [I"geopolitical;T@'@ [I"geo_position;T@@ [I" geoptima;TU;[I" 0.1.18;T@ [I" geordi;T@Y@ [I"geo_redirect;T@,@ [I"2georgedrummond-active_paypal_adaptive_payment;T@@ [I"georgedrummond-contacts;T@u"@ [I"#georgedrummond_sinatra_helpers;T@V@ [I"georss4rb;T@`@ [I" georuby;T@O@ [I" GeoRuby;T@@ [I"georuby_box;T@@ [I"georuby-ext;T@'@ [I"georuby_remake;T@@ [I" geosack;T@@ [I"geoscript;T@'@ [I"geos-extensions;T@I@ [I"geo-spider;T@@ [I" geostats;T@@ [I" geostock;T@@ [I"geo_tools;T@@ [I"geo-triangle;T@'@ [I"geo_units;T@r@ [I" geoutm;T@@ [I"geo_vectors;T@@ [I" geoweb;T@@ [I" gepetto;T@3@ [I"gephi_keeper;T@'@ [I" geppetto;T@ @ [I" gepub;TU;[I" 0.6.8.6;T@ [I" gerbil;T@@ [I"gerbilcharts;T@^%@ [I"gerbil-rails;T@@ [I"germinate;T@N@ [I"germinate-atompub;T@@ [I"germinate-gist;T@@ [I"gerrit-cli;T@'@ [I"gerrit_diff;T@E@ [I" gestalt;T@@ [I" gestopft;T@@ [I"getafreelancer;T@@ [I" get_args;T@@ [I" get_back;T@@[I"get_chute;T@@ [I"getclever-ruby;T@'@ [I"getclicky;T@6@ [I"getformidable;T@`@ [I"get_hired;TU;[I" 6.6.69;T@ [I"get_humanoid;T@'@ [I" geti;T@@ [I"get_invoice;T@@ [I" getopt;T@@ [I"getoptdeclare;TU;[I" 1.24;T@ [I"getopt-declare;T@@ [I"getoptions;T@[ @ [I"get_or_build;T@@ [I"GetOrBuild;T@'@ [I" get_out;T@@ [I" getpass;T@@ [I" get_pomo;T@@ [I"getresponse;T@@ [I"get_running_processes;T@@ [I" Get_Set;T@N@ [I"get_shorty;T@@ [I" getsid;T@@ [I"getsource;T@@ [I"getter_for;T@@ [I" gettext;T@Z-@[@@@ [I"gettext_activerecord;T@@ [I"gettext_column_mapping;T@@ [I"gettext_i18n_rails;T@@ [I"gettext_i18n_rails_js;T@@ [I"gettext_json;T@E@ [I"gettext-one_sky;T@'@ [I"gettext_rails;T@@ [I"gettext_test_log;T@@ [I"get_them_all;T@x@ [I"getting_dumped;T@R1@ [I"get-twitter-oauth-token;T@@ [I"getty_connect;T@"@ [I" gexf;T@"@ [I"g_fancybox;T@@ [I" gfdnavi;TU;[I" 1.3.0.0;T@ [I" gfid;T@E@ [I"g_flash_growler;T@@ [I"gflocator;T@'@ [I"gfm2confluence;T@@ [I"g_form_submit_protector;T@@ [I"gg;T@ @ [I" gga4r;T@' @ [I" gg_api;T@E@ [I" ggem;T@@ [I" g-gem;T@@ [I" ggenv;T@@ [I" ggeocode;T@@ [I" gglib;T@@ [I" gglog;T@E@ [I"ggs-rails;T@@ [I"gh;T@- @ [I"ghaki-account;TU;[I"2011.11.29.1;T@ [I"ghaki-app;T@@ [I"ghaki-bool;T@@ [I"ghaki-canned-input;TU;[I"2011.11.30.2;T@ [I"ghaki-env;T@@ [I"ghaki-ext-file;TU;[I"2011.12.03.1;T@ [I"ghaki-logger;T@@ [I"ghaki-match;TU;[I"2011.12.04.2;T@ [I"ghaki-meta;T@@ [I"ghaki-namer;TU;[I"2011.11.30.1;T@ [I"ghaki-net-ssh;TU;[I"2011.12.20.1;T@ [I"ghaki-registry;T@@ [I"ghaki-report;TU;[I"2011.12.06.1;T@ [I"ghaki-stats;T@@ [I" gharpay;T@'@ [I"gharpay_api;T@'@ [I"ghart_admin_scaffold;T@@ [I"$ghart-declarative_authorization;TU;[I" 0.3.2.4;T@ [I"ghart-nifty-generators;TU;[I" 0.3.0.1;T@ [I"ghazel-activemerchant;T@@ [I"ghazel-acts-as-taggable-on;TU;[I" 2.0.6.1;T@ [I"ghazel-ar-extensions;TU;[I" 0.9.3.2;T@ [I"ghazel-aws-s3;T@ @ [I"ghazel-closure-compiler;T@@ [I"ghazel-crondonkulous;T@@ [I"ghazel-curb;TU;[I" 0.7.15.1;T@ [I"ghazel-daemons;TU;[I" 1.0.13.1;T@ [I"ghazel-deadlock_retry;TU;[I" 1.1.1.2;T@ [I"ghazel-erubis;TU;[I" 2.7.0.1;T@ [I"ghazel-erubis_rails_helper;TU;[I" 0.9.5.1;T@ [I"ghazel-fiveruns_tuneup;TU;[I" 0.8.22;T@ [I"ghazel-geoip;T@%@ [I"ghazel-googlecharts;TU;[I" 1.4.0.5;T@ [I"ghazel-httpbl;TU;[I" 0.1.6.1;T@ [I"ghazel-jammit;TU;[I" 0.6.0.2;T@ [I"ghazel-kdtree;T@H@ [I"ghazel-mysql2;TU;[I" 0.2.6.3;T@ [I"ghazel-newrelic_rpm;T@2-@ [I"ghazel-pacecar;TU;[I" 1.2.0.4;T@ [I"ghazel-parslet;TU;[I" 1.4.0.2;T@ [I"ghazel-POpen4;T@f@[@@f@ [I"ghazel-rack-bug;TU;[I" 0.3.0.4;T@ [I"ghazel-rpm_contrib;TU;[I" 1.0.13.3;T@ [I"ghazel-slim-attributes;TU;[I" 0.7.6.1;T@ [I"ghazel-subdomain_routes;TU;[I" 0.3.1.2;T@ [I"ghazel-SystemTimer;T@f@@[@@f@@ [@@f@@y;[I"ghazel-truncate_html;TU;[I" 0.2.1.1;T@ [I"%ghazel-validates_email_format_of;TU;[I" 1.3.0.1;T@ [I"ghazel-yui-compressor;TU;[I" 0.9.4.2;T@ [I"ghbuttons-rails;T@E@ [I" ghee;T@ @ [I" gherkin;T@@'u[@@@y;[@@@1[@@/@Y][@U;[I" 2.11.5;T@[@@@[@@@ [@@@ [I"gherkin-ruby;T@@ [I"ghi;TU;[I"0.9.0.20121114;T@ [I"gh-issues;T@@@ [I" ghost;T@@@9[@͆@@ [I"ghost-admin;T@@ [I"ghost_attributes;T@@ [I"ghostbuster;T@?@ [I"ghost_google-api-client;TU;[I" 0.4.7.1;T@ [I"ghostplus;T@'@ [I"ghost_reader;T@@ [I"ghostwheel;T@E@ [I"ghost_writer;T@'@ [I" ghoul;T@I@ [I"ghoul_grack;T@'@ [I"ghoul_guides;T@E@ [I" ghours;T@'@ [I"ghpreview;T@@ [I" ghrunit;T@@ [I"ghs;T@@ [I"ghtorrent;T@6@ [I" ghup;T@'@ [I" giact;T@'@ [I"giantbomb;T@@ [I"giant_bomb;T@@ [I"giant_client;T@`@ [I"gibberish;T@N@ [I" gibbler;T@- @ [I" gibbon;T@@ [I"gicodewarrior-gattica;T@@ [I"gid;T@@ [I" giddyup;T@E@ [I" gidget;T@@ [I" giexp;T@`@ [I" gifbot;T@E@ [I" gifd;T@@ [I" giffer;T@E@ [I" gif-info;T@@ [I" gifme;T@V@ [I" gift;T@@ [I"gift-parser;T@@ [I"gigantron;T@6@ [I" giggly;T@@@ [I"gil;T@!@ [I" gilenson;T@@ [I" gill;T@@ [I" gilt;T@@ [I"gim;T@'@ [I" gimchi;T@g@ [I" gimdb;T@@ [I" gimli;T@@ [I" gimme;T@@ [I"gimme_a_break;T@@ [I"gimme_gimme;T@@ [I"gimme-octo-kitty-wiki;T@'@ [I"gina-conveyor;T@@ [I" ginatra;T@ @ [I" ginger;T@u@ [I"ging-opengraph;T@@ [I"ginjo-rfm;T@@ [I" ginkel-calendar_date_select;TU;[I" 1.16.1.2;T@ [I" ginst;TU;[I"2009.12.8;T@ [I" ginsu;T@@ [I" gio2;T@9@ [@M@9@ [I" gioco;T@@ [I"giovanigenerali-gemtest;T@@ [I"gip;T@@ [I" gipper;T@'@ [I" giraffe;T@'@ [I" giraffes;T@@ [I"giraffesoft-chef;T@:@ [I"giraffesoft-unicorn;TU;[I" 0.93.6;T@ [I" giraffi;T@+@ [I" girdle;T@+@ [I"girdle-podcast;T@n@ [I" gir_ffi;T@@ [I"gir_ffi-cairo;T@'@ [I"gir_ffi-gtk;T@@ [I"gir_ffi-pango;T@'@ [I"gir_ffi-tracker;T@@@ [I"girl_friday;T@)@ [I"girlfriend;T@@ [I"giropay_stalker;T@'@ [I" girror;T@@ [I"gis-distance;T@@ [I" gisele;T@@ [I"gisele-analysis;T@@ [I"gisele-language;T@@ [I"gisele-vm;T@@ [I" gist;T@@ [I" gista;T@@ [I" gister;T@E@ [I" gistgen;T@`@ [I"gist_pull;T@x@ [I" gistr;T@@ [I"gistribute;T@@ [I" gists;T@'@ [I" gistup;T@E@ [I"gist_worker;T@'@ [I" gisty;T@@ [I"git;T@@ [I" git2bit;T@@ [I" git2epub;T@@ [I" git2mite;T@E@ [I" git-2-s3;T@6@ [I" gita;T@'@ [I" gitable;T@@ [I"git-add-commit-push;T@@ [I" gitara;T@X@ [I"git-audio-commit;T@@ [I" gitauth;T@@ [I"git-authors;T@'@ [I"git-autobisect;T@I@ [I"git_autocomplete;T@@ [I"git_awesome_diff;T@E@ [I" gitback;T@+@ [I" gitbak;T@@ [I"git-blame-game;T@@ [I" gitbot;T@@ [I"git_branch_cleaner;T@'@ [I"git-branch-delete-orphans;T@@ [I" git-bro;T@@ [I"git-browse-remote;T@E@ [I"git-bundlecompare;T@@ [I"gitchangelog;T@`@ [I"git-changelog;T@' @ [I"git-changes;T@@ [I" gitchart;T@@ [I"git-check-ci;T@+@ [I"git_checker;T@@ [I"git_cleaner;T@@ [I"git-cleaner;T@@ [I"git-cleanup;T@@ [I"git_cloud;T@E@ [I"git-comitter;T@E@ [I"git-commit-notifier;TU;[I" 0.11.6;T@ [I"git-confident;T@V@ [I"gitconfig;T@'@ [I"gitconfig-highline;T@'@ [I"gitc-ruby_gpg;T@@ [I" gitcycle;TU;[I" 0.2.31;T@ [I" git-dag;T@@ [I"git-daily;T@'@ [I" git-db;T@@ [I"git-delta;T@`@ [I"git-deploy;T@Y@ [I"git_deployer;T@@ [I"git-deployer;T@E@ [I" git_dj;T@@ [I" gitdoc;TU;[I" 4.5.0;T@ [I" gitdocs;T@o@ [I" gitdown;T@E@ [I"git-dropbox;T@@ [I" git-ds;TU;[I"0.9.8.6.1;T@ [I" git-duet;T@`@ [I" gitdummy;T@'@ [I"git_editor;T@@ [I" gitenv;T@@ [I"git_er_done;T@@ [I" giternal;T@`@ [I"git-external;T@@ [I" git_fame;T@@ [I"git-fast-forward;T@@ [I"git-feats;T@@ [I" gitfeed;T@@ [I"git-find-branching-point;T@'@ [I"gitfinger;T@@ [I"git-flattr;T@@ [I" gitflow;T@'@ [I"git_flow_pivotal;T@@ [I"git-fogbugz;T@+@ [I"git-forks;T@"@ [I"git-friendly;T@@ [I"git_friendly_dumper;T@"@ [I"git-gc-cron;T@@ [I" git-ged;T@"@ [I" gitgo;T@@ [I" git_go;T@6@ [I" GitGo;T@'@ [I"git_goggles;T@@ [I" gitgolem;T@@@ [I" git-hack;T@@ [I"git_handler;T@@ [I"git_handsome;T@@ [I" githat;T@@ [I"git-history;T@@ [I" git_hook;T@'@ [I"git_hook-rspec;T@'@ [I" githooks;T@@ [I"git_hooks;T@@ [I"git-hooks-helper;T@@ [I" githu3;T@@ [I" github;T@@ [I" git_hub;T@@ [I" git-hub;T@ @ [I"github_api;T@@ [I"github-api;T@'@ [I"github-api-client;T@@ [I"github-api-rails;T@@ [I"github-backup;T@@ [I"github-backups;T@@ [I"github-badge;T@`@ [I"githubbish_assets;T@!@ [I"github_branch_list;T@y@ [I"githubbub;T@@ [I"github_cli;T@J@ [I"github-cli;TU;[I"3;T@ [I"github_cloner;T@x@ [I"github_concern;T@`@ [I"github-control;T@' @ [I"github-create;T@@ [I"github_deprecations;T@@ [I"github_downloads;T@6@ [I"github-downloads;T@6@ [I"github_employee_auth;T@l5@ [I"github_helper;T@@ [I"github_heroku_deployer;T@@ [I"github-hooker;T@@@ [I"github-issue-importer;T@'@ [I"github_issues;T@'@ [I"github-issues;T@'@ [I"githubissueswatcher;T@3@ [I"github-key-upload;T@@ [I"githublaunch;T@6@ [I"github-linguist;T@.@ [I"github-markdown;T@J@ [I"github_markup;T@`@ [I"github-markup;T@!@ [I"github-markup-preview;T@@ [I"github_metadata;T@@ [I"github-oauth;T@'@ [I"!github_organizations_scraper;T@@ [I"github_pulley;T@6@ [I"github-rails;T@'@ [I"githubreadme-to-html;T@@ [I"github_repo;T@@ [I"github_repo_deleter;T@@ [I"githubris;T@n@ [I"github-shush;T@@ [I"githubtip;T@'@ [I"github-trello;T@`@ [I"github-upload;T@E@ [I"github_uploader;T@@ [I"github-v3-api;T@@ [I"github-watched;T@'@ [I"githubwatcher;T@`@ [I"github-widget;T@@ [I" githug;T@@ [I" gitian;T@@ [I"gitignore;T@@ [I"git-inside-branch;T@'@ [I"git_install;T@@ [I" gitio;T@E@ [I" git_io;T@`@ [I" git.io;T@@ [I"git-issue;T@- @ [I" gitjour;TU;[I" 6.6.0;T@ [I" gitkeep;TU;[I" 0.2.40;T@ [I" gitki;T@@ [I"gitkit-ruby;T@'@ [I" gitlab;T@ @ [I"gitlab_ci_meta;T@@ [I"gitlab-fogbugz;T@@ [I"gitlab_meta;T@d=@ [I"gitlab_omniauth-ldap;T@@ [I"gitlab_yaml_db;T@@ [I"git_loc_tracker;T@@ [I" gitloop;T@@ [I" gitmaker;T@"@ [I"git_manager;T@@@ [I" gitme;T@'@ [I"git-media;T@+@ [I" git-meta;T@O@ [I"gitme_time;T@@@ [I" gitmine;T@@ [I" gitmodel;T@V@ [I"gitmodel-rails;T@1@ [I" gitnesse;T@6@ [I"gitnetworkitis;T@@ [I" gitnext;T@@@ [I"git-notifier;T@@ [I"gitofigure;T@+@ [I" gitolite;T@@ [I"gitolite-dtg;T@@ [I"gitorious-merge-request;T@@ [I"gitorious-munin-plugins;TU;[I" 0.9.22;T@ [I"gitorious_openid_auth;T@@ [I"gitosis_easy_conf;T@"@ [I"git-p4-sync;T@@ [I" git-pair;T@@ [I"gitpartyguest;T@@ [I"git-patch-patch;T@E@ [I" gitpic;T@@ [I"git-pivot;T@@ [I"git-pivotal;T@@ [I"git_pivotal_tracker;T@@ [I"git-pivotal-tracker;T@e@ [I"git_pivotal_tracker_x;T@`@ [I"git-plain;T@'@ [I" gitplate;T@@ [I" gitploy;T@I@ [I" git_pm;T@'@ [I" git-pp;T@E@ [I"git-precommit;T@@ [I"git-prepare-merge;T@@ [I"git_presenter;T@x@ [I"git-process;T@@ [I"git-publish;T@@ [I"git-pull-request;T@'@ [I"git-pulls;T@@ [I"git-pulls-updated;T@@ [I"gitpusher;T@@ [I"gitpusshuten;T@V@ [I" Gitr;T@'@ [I"git-rails;T@@ [I" gitrb;T@^@ [I"git-redmine-commit;T@@ [I"git_reflow;T@,@ [I"git_remote_branch;T@@ [I" Git_Repo;T@@ [I"gitreport;T@`@ [I"git-review;T@;@ [I"git-review-branch;T@'@ [I"git-review-notes;T@@ [I"git-revision;T@'@ [I"git-runner;T@@@ [I"git-runner-deploy;T@6@ [I" gitscape;T@@ [I"gitscraper;T@@ [I"gitscribe;T@E@ [I"git-scribe;T@`@ [I" gitscrub;T@V@ [I" gitset;T@@ [I"gitshapage;T@@ [I"git-smart;T@g@ [I"git_sniffer;T@'@ [I"git-ssh-wrapper;T@@ [I"gitstagram;T@@ [I"git_statistics;T@@ [I" gitstats;T@E@ [I"git_stats;T@@ [I"gitstats-ruby;T@@ [I"git_store;T@@ [I"git_story;T@I@ [I"git-story;T@`@ [I"git-storyid;T@@@ [I"gitstuff-preview;T@@ [I"git-style-binaries;T@@ [I"git-svn-mirror;T@@ [I"gitswitch;T@@ [I"git_switch_branch;T@@@ [I"git-switcher;T@E@ [I" gitsync;T@@ [I"git-tagger;T@'@ [I" gittest;T@+@ [I" git_test;T@ @ [I"git-ticket;T@@ [I"git_time_extractor;T@@ [I"git-topic;T@X~@ [I" git-trac;T@`@ [I"git_tracker;T@@ [I"git_tracking;T@6@ [I"git-trifle;T@'@ [I" git-trip;T@@ [I" gitty;T@@ [I"gittycent;T@@ [I" git-ui;T@'@ [I" gitup;T@@ [I" git-up;T@M+@ [I"git-up-decklin;TU;[I" 0.5.5.1;T@ [I"git-up-portertech;T@@ [I"git_utils;T@O@ [I"git_version;T@@ [I"git-version;T@E@ [I"git_versioner;T@@ [I"gitwalker;T@'@ [I"git-webby;T@@ [I"git-webhook;T@'@ [I"git-whistles;T@@ [I" git-work;T@`@ [I"git_workflow;T@@ [I"git_wrapper;T@@ [I" give;T@@ [I"give4each;T@@ [I" given;T@@ [I"given_when_then;T@E@ [I" gizmo;T@`@ [I" gizzmo;TU;[I" 0.13.1;T@ [I"gjastrab-evergreen;T@@ [I" gjman;T@@ [I"gkellogg-reddy;T@@ [I" glacier;T@'@ [I" glader;T@@ [I" glamazon;T@@ [I"glamorous_validation_jp;T@'@ [I" glamping;T@`@ [I"glance_base;T@'@ [I" glapp;T@@ [I" glark;T@Z-@ [I"glassfish;T@@@'u[@@I"universal-java;T[I"glebm-activemerchant;TU;[I" 1.7.2.1;T@ [I"glebm-geokit;T@@ [I"glebm-nokogiri;TU;[I" 1.4.2.1;T@ [I"glebm-sanitize;T@f@@ [I"glebpom-async_observer;T@@ [I"glebpom-db-charmer;T@@ [I"glebpom-prop;T@"@ [I" glebprop;T@"@ [I"glebtv-simple_captcha;T@@ [I"glengarry;T@"@ [I"glennfu-contacts;T@f@@ [I"glennfu-faster_csv;TU;[I" 1.5.5.1;T@ [I"glennr-cijoe;T@@ [I"glennr-devise;T@~@ [I"glennr-email_spec;T@@ [I"#glennr-flash-message-conductor;T@@ [I"glennr-heroku_san;T@`@ [I"glennr-pickler;T@6@ [I"glennr-posterous;T@@ [I"glennr-recaptcha;T@,@ [I"glennr-seer;T@@ [I" gless;T@@ [I" glew;T@'@ [I"gli;T@ @ [I" glib2;T@9@ [@L@9@ [I"glib-eventable;T@6@ [I" glicko2;T@@ [I" glide;T@@ [I" glimmer;T@6@ [I" glimr;T@`@ [I" glinda;T@@ [I" gliss;T@@ [I" glitch;T@@ [I"glitch_auth;T@@ [I"glitched_string;T@@ [I"glitch-ime;T@@ [I"glitch-time;T@@ [I"glitchy_gem;T@@ [I" glitter;T@@ [I" Glitz;T@@ [I"g_live_validator;T@@ [I"glm;T@E@ [I"global_2050_model;T@E@}[@q@E@S[@q@E@ [I"global_boolean;T@+@ [I"globalchat;T@@ [I"global_collect;T@@ [I"globalhotkeys;T@@ [I"globalize2;T@@ [I"globalize2_sugar;T@@ [I"globalize3;T@@ [I"globalize3_accessors;T@@ [I"globalize3_helpers;T@[@ [I" globalize3-inputs-bootstrap;T@`@ [I"globalize3_translator;T@@ [I"globally_unique_record;T@@ [I" globalog;T@+@ [I" globals;T@E@ [I"global_session;T@@ [I"global_uid;T@ @ [I"!globe-composite_primary_keys;T@ @ [I"globegit-postgresql-plruby;T@Y@ [I" glob_fu;T@"@ [I"globocom-auth;T@`@ [I" glog;T@@ [I" glomper;T@@ [I" glorify;T@@ [I" gloudapp;T@ @ [I" glow;T@3@ [I"glowing-archer;T@E@ [I"glowstone;T@@ [I" gltail;T@@ [I" glue;T@@ [I"gluemapping;T@@ [I" gluepro;T@'@ [I"glue-site;T@1@ [I"gluestick;T@@ [I" gluez;T@`@ [I"gluttonberg-core;T@ao@ [I"glutton_lastfm;T@6@ [I"glutton_ratelimit;T@@ [I" glymour;T@@ [I" glynn;T@@ [I" glyph;T@@ [I"glyph_imager;T@`@ [I" glyr;T@@ [I"gm;T@@ [I" gmail;T@x@ [I"gmail-afurmanov;T@@ [I"gmail-britta;T@|@ [I"gmail_contacts;T@@ [I"gmail-contacts;T@@ [I"gmail_contatos;T@6@ [I" gmailer;T@@ [I"gmail_extractor;T@'@ [I"gmail-imap;T@@ [I"gmail-mailer;T@@ [I"gmail_oauth;T@6@ [I"gmail-oauth;T@'@ [I"gmail-scraper;T@!@ [I"gmail_sender;T@@ [I"gmail_test;T@n@ [I"gmail_xoauth;T@@ [I"gmallard_test_hw01;T@"@ [I" gmapper;T@@ [I"gmap-rails;TU;[I" 3.3.2;T@ [I" gmaps;T@'@ [I"gmaps4rails;T@e@ [I"gmaps-autocomplete-rails;T@@@ [I"gmaps_directions;T@I@ [I"gmaps_gem;T@n@ [I" gmapsjs;TU;[I" 0.2.30.1;T@ [I"GMaps_Places;T@'@ [I"gmaps_proxy;T@@ [I" gmaps_v3;T@'@ [I" gmath3D;T@@ [I"gmd;T@ @ [I" gmdprev;T@@ [I"gme;T@`@ [I" gmetric;T@6@ [I" g-module;T@E@ [I" gmoney;T@"@ [I"gmp;T@@S[@U;[I" 0.5.41;T@ [@U;[I" 0.6.19;T@ [I" gmp_ecm;T@@ [I" gmpoint;T@@ [I" gmusic;T@I@ [I"gn;T@+@ [I"gn0m30-uuid;T@9 @ [I" gnag;T@`@ [I"g_named_scope_filters;T@@ [I" gnarly;T@@ [I"gnarus_activity;T@@ [I"gnarus_exercise;T@W@ [I" gn-dsl;T@'@ [I"gnetvibes;T@@ [I" gnib;T@@ [I" gnip;T@x@ [I"gnip_gnop;T@E@ [I"gnip-rule;T@@ [I"gnip-rules;T@x@ [I"gnip-stream;T@'@ [I"gnm-caplock;T@@ [I"gnm-cap_permission;T@@ [I"gnm-jenkins_cap;T@@ [I"gnn-rblibs;T@"@ [I"gnome-backlight;T@@ [I" gnome-tv;T@6@ [I"gnome-wallpaper-changer;T@E@ [I" gnote;T@'@ [I" gnouch;T@"@ [I"gns;T@E@ [I"gnubarcode;T@@ [I"gnucash2ledger;T@@ [I"gnucash-invoice;T@@ [I" gnu_mpc;T@@ [I" gnuplot;TU;[I" 2.6.2;T@ [I" gnuplotr;T@@ [I"go;T@'@ [I" go2dir;T@@ [I" goactive;T@@ [I" goalie;T@"@ [I"go_api_client;T@V@ [I" goat;TU;[I" 0.3.48;T@ [I" goatless;T@J;@ [I" goauth2;T@ @ [I"gobject-introspection;T@9@ [I" goblin;T@@ [I" go_card;T@@ [I"gocardless;T@l@ [I" gocarrot;T@@ [I" gocart;T@E@ [I"god;T@@ [I"godblogit;T@6@ [I" godhead;T@@ [I" godlike;T@@ [I" godo;T@@ [I" godot;T@@ [I"god-sns-contact;T@'@ [I"go_easy_btn;T@V@ [I" GoEC2;T@@ [I" gofer;T@@ [I"go_figure;T@@ [I" gogetter;T@@ [I"goggle-box;T@`@ [I" gogo;TU;[I"2;T@ [I"gogoodreads;T@n@ [I" go_gtp;T@"@ [I"going_postal;T@`@ [I"goiu_shorten;T@'@ [I"gojee-sunspot;T@@ [I"gojee-sunspot-rails;T@@ [I"gojee-sunspot-solr;T@@ [I" gojira;T@`@ [I" gokart;T@@ [I" gokdok;T@@ [I"gol;T@@ [I"golang-demo;T@'@ [I" gold;T@_@ [I" goldberg;T@'@ [I"goldberg_generator;T@I@ [I"golddigger;T@@ [I"golden_brindle;T@@ [I"golden_retriever;T@E@ [I"goldentype;T@@ [I" goldfish;T@'@ [I" goldie;T@E@ [I" goldmine;T@e@ [I"gold-record;T@I@ [I"goldshark_gem;T@@ [I"goldstar-activemerchant;TU;[I" 1.4.2.7;T@ [I"goldstar-ansi;T@~@ [I"goldstar-is_paranoid;TU;[I" 0.9.6.1;T@ [I"goldstar-metric_fu;TU;[I" 1.5.1.2;T@ [I"goldstar-sunspot_rails;TU;[I" 0.10.6.3;T@ [I" golem;T@E@ [I"golem_statemachine;T@@ [I" golf;TU;[I" 0.7.9;T@ [I"golf-coffee;T@s@ [I"golfscrape;T@@ [I" golia;T@@ [I" goliath;T@@ [I"goliath-reverse-proxy;T@@ [I" goling;T@@ [I" gollum;TU;[I" 2.4.11;T@ [I"gollum-bibanon;T@@ [I"gollum_editor;T@R @ [I"gollum-site;T@!@ [I"golly-utils;T@@ [I"gom;T@@ [I" go_maps;T@@ [I" gom-core;T@I@ [I"gom-couchdb-adapter;T@@ [I"gom-elasticsearch-adapter;T@@@ [I"gom-filesystem-adapter;T@@ [I"gomig_mail_delivery;T@'@ [I"gom-script;T@I@ [I"gom-sensor-ports;T@@@ [I"gon;T@w@ [I"goncalossilva-kaltura_fu;TU;[I" 0.2.0.9;T@ [I"goncalossilva_kaltura-ruby;TU;[I" 0.4.8.2;T@ [I"&goncalossilva_redis-session-store;TU;[I" 0.1.8.1;T@ [I"goncalossilva-showoff;T@@ [I"#goncalossilva-subdomain_routes;T@4D@ [I" gondola;TU;[I" 1.3.11;T@ [I"gondorlibrary;T@`@ [I" gongora;T@'@ [I" gongren;T@@@ [I"gongren-rails;T@`@ [I" GoNodes;T@'@ [I"gonow-activemerchant;T@s@ [I"gonow_braspag;T@@ [I"gonow-spree;TU;[I" 0.70.99;T@ [I"gon-sinatra;T@@ [I" gonzales;T@@ [I"gonzo_array_extensions;T@`@ [I" gonzui;T@@ [@S@@[I"gonzui-emacs;T@[ @ [I"goo;T@'@ [I"goobalize3;T@@ [I" gooby;T@O@ [I" Gooby;T@e@ [I"goocanvas;T@T @ [@`@9@ [I" goodbye;T@'@ [I" gooddata;T@@ [I"goodercode-zune;T@[ @ [I"goodguide-accounts;T@@ [I" goodies;T@E@ [I"GoodMorningBangladesh;T@@ [I"goodreads;T@@ [I"good_sort;T@,@ [I"good_times;T@'@ [I"good_touch;T@@ [I"goodwill-prawn-edge;T@ @ [I"goodwink-pickler;T@+@ [I" goog;T@@ [I" googl;T@@ [I"googl-api;T@@ [I" google;T@G @ [I" google4r;T@'@ [I"google4r-checkout;T@@ [I"google4r-maps;T@@ [I"google-ads-common;T@- @ [I"google-adwords-api;T@@ [I"google-adx-buyer-api;T@"@ [I"googleajax;T@@ [I"google_alerts;T@'@ [I"googleanalytics;T@E@ [I"google_analytics;T@@ [I"google-analytics;T@@ [I"google_analytics_feeds;T@@@ [I"google_analytics_on_rails;T@@@ [I"google-analytics-rails;T@@ [I"google_analytics_tools;T@[ @ [I" google-analytics-turbolinks;T@'@ [I"google_anymote;T@"@ [I"google_api;T@@ [I"google-api;T@@ [I"google-api-client;T@@ [I"googleapi_manager;T@'@ [I"google-api-omniauth;T@@ [I"google-appengine;T@@ [I"google_apps;T@@ [I"google_apps_api;T@@ [I"googleapps-auth;T@@ [I"google_auth;T@@ [I"google-auth;T@E@ [I"google_auth_bridge;T@@@ [I"google_authentication;T@@ [I"google_authenticator_auth;T@@ [I"google-authenticator-rails;T@@ [I"google-authsub;T@@ [I"google_banners;T@'@ [I"googlebase;T@@ [I"google-blogsearch-pings;T@@ [I"googlebook;T@|@ [I"google-book;T@x@ [I"googlebooks;T@@ [I"google_books;T@@ [I"google-buttons-sass;T@@@ [I"googlecalendar;T@@ [I"google_calendar;T@@ [I"google_calendar_api_v2;T@6@ [I"google_calendar_oauth2;T@"@ [I"googlecharts;T@1@ [I"google_charts;T@N@ [I"google_chart_ssl;T@"@ [I"google_chat;T@@ [I"google_checkout;T@6@ [I"google-checkout;T@@ [I"google-chrome-client;T@!@ [I"google-civic;T@'@ [I"google_client;T@@ [I"google_client_login;T@@ [I"google-client_login;T@T @ [I"googlecodejam;T@@ [I"google-code-prettify-rails;T@@ [I"googlecontacts;T@@ [I"google-contacts;T@'@ [I"google_contacts_api;T@@ [I"google-copy-link;T@'@ [I"google_cse;T@`@ [I"google_currency;T@@ [I"google_currency_calculator;T@@ [I"google_custom_search;T@@ [I"google-custom_search;T@"@ [I"google_custom_search_api;T@@ [I"google_data_source;T@u/@ [I"google-dfp-api;T@@ [I"google_directions;T@+@ [I"google_drive;T@@ [I"google_drive_companion;T@@ [I"&google_finance_currency_converter;T@`@ [I"google_fish;T@I@ [I"google_font_extractor;T@E@ [I"google-ft;T@"@ [I"google_fusion_tables;T@@ [I"google-geo;T@f<@ [I"google-geocode;T@u@ [I"google-geocoder;T@@ [I"google_geocoding;T@@ [I"google_hash;T@@ [I"google-id-token;T@@ [I"google_image_api;T@'@ [I"google_image_chart;T@@ [I"google-image-charts;T@@ [I"google-ime-skk;T@u@ [I"google-jwt;T@@ [I"googlekeywords;T@x@ [I"googlekeywordsgem;T@@ [I"google_language;T@@ [I"google_map;T@"@ [I"google_maps;T@@ [I"google_maps_geocoder;T@@ [I"google-map-stitch;T@6@ [I"google_movies;T@"@ [I"google_movies47;T@[@ [I"google_oauth;T@E@ [I"google-oauth;T@E@ [I"google_oauth_calendar;T@@ [I"google_otg;T@;@ [I"googlepagerank;T@@ [I"google-picasa;T@n@ [I"google_places;T@B@ [I"google_places_autocomplete;T@E@ [I"google-play;T@n@ [I"googleplay_scraper;T@@ [I"google_play_search;T@@ [I"googleplus;T@'@ [I"google_plus;T@I@ [I"GooglePlus;T@E@ [I"google_plus_archiver;T@'@ [I"google_plus_helper;T@@ [I"google_pr;T@@ [I"google_prediction;T@'@ [I"google-prediction;T@|@ [I"google-qr;T@I@ [I"google_query;T@'@ [I"googlereader;T@"@ [I"google_reader;T@N@ [I"GoogleReaderApi;T@x@ [I"GoogleReaderApiUniq;T@@ [I"google_refine;T@R @ [I"google-refine;T@'@ [I"google_refine_api;T@E@ [I"google_rest;T@@ [I"google-sa-auth;T@@ [I"google_safe_browsing;T@@ [I" google-safe-browsing-lookup;T@6@ [I"google_scholar;T@'@ [I"google_scraper;T@'@ [I"google_search;T@N@ [I"google-search;T@@ [I"google_search_api;T@'@ [I"google_search_cmdline;T@@ [I"google_set;T@@ [I"google_short_links;T@@@ [I"google-short-links;T@`@ [I"google_showtimes;T@@ [I"google-simple-client;T@@@ [I"google-site-search;T@n@ [I"google_spreadsheet2yml;T@1@ [I"google-spreadsheet-ruby;T@@ [I"google-sso;T@@ [I"GoogleSSO;T@@ [I"googlestaticmap;T@;@ [I"google_static_maps_helper;T@q@ [I"google_storage;T@@ [I"google-storage;T@@ [I"google_suggest;T@@ [I"google-tag-manager-rails;T@6@ [I"google_tasks;T@'@ [I"googletastic;T@+@ [I"google_terminal;T@E@ [I"google_text;T@"@ [I"googletranslate;T@!@ [I"google_translate;T@@ [I"google-translate;T@-@ [I"google_translate_scraper;T@@ [I" googlets;T@@ [I"GoogleURL;T@`@ [I"googleurlshortener;T@@ [I"google_url_shortener;T@V@ [I"google_url_shortner;T@@ [I"google_url_signatures;T@@ [I"google-v3-geocoder;T@@ [I"google-video;T@X@ [I"google_visualr;T@@ [I"google-voice;T@@ [I"googlevoice47;T@!@ [I"googlevoiceapi;T@@ [I"google-weather;T@@ [I"google-webfonts;T@@@ [I"googlon-scroll;T@E@ [I" googlus;T@'@ [I" goon;T@@ [I" goopr;T@N@ [I" gooru;T@E@ [I" goose;T@@ [I" goospell;T@E@ [I" goozee;T@@ [I" gopay;T@!@ [I" gopher;T@@ [I"gopher2000;T@x@ [I"go-picasa-go;T@'@ [I" goplan;T@"@ [I" gopollgo;T@@ [I" gopt;T@'@ [I" goqr;T@E@ [I" goran;T@6@ [I" go-rank;T@@ [I" gorb;T@@ [I" gorgeous;T@@@ [I"gorges_capistrano_ext;T@`@ [I" gorgon;T@@ [I"gorgyrella;T@E@ [I"gorilla-capistrano-recipes;T@I@ [I" gorillib;T@@ [I" gorm;T@n@ [I" gorp;TU;[I" 0.28.1;T@ [I" goruby;T@@ [I" gosen;T@@ [I" gosh;T@@ [I"goshortener;T@@ [I"goshrine_bot;T@@ [I"go_squared;T@@ [I" gossamer;T@@ [I" gossip;T@@ [I"go_static;T@`@ [I"gost_frames;T@_1@ [I" gosu;T@^@t[@,@^I"universal-darwin8.0;T[@,U;[I" 0.7.8.5;T@[@,U;[I" 0.7.9.1;TI"universal-darwin-8;T[@,@4@9[@,U;[I" 0.7.18;T@[@,U;[I" 0.7.38;T@y;[@,U;[I" 0.7.45;T@ [@,@B@M[@,@B@ [I"gosu_extensions;T@@ [I"gosu-keyboard;T@@ [I" gotaku;T@@ [I" gotasks;T@@ [I" gotcha;T@@ [I" gotempr;T@'@ [I"gothonweb;T@'@ [I"gotime_aws;T@@ [I"gotime-cassandra_object;TU;[I" 4.7.2;T@ [I"gotime-moneta;T@@ [I"gotime-postgis_adapter;T@-@ [I" goto;T@-!@ [I"goto_string;T@+@ [I"go_translate_yourself;T@@ [I" gouda;T@'@ [I" governor;T@@ [I"governor_atom;T@`@ [I"governor_background;T@@ [I"governor_blogger;T@@@ [I"governor_comments;T@@ [I"governor_formatters;T@@ [I"governor_livejournal;T@@ [I"governor_states;T@@ [I"governor_tags;T@I@ [I"governor_thinking_sphinx;T@+@ [I"governor_twitter;T@@@ [I" govfeed;T@E@ [I" govkit;T@y@ [I"govkit-ca;T@@ [I" govkit-h;TU;[I" 0.7.1.0;T@ [I"gov-repos;T@'@ [I" govspeak;T@@ [I" govtrack;T@'@ [I" go-waldo;T@@ [I" gowalla;T@M+@ [I"gowallacheckins;T@@ [I"gowalla-ruby;T@@ [I"goz;T@`@ [I"gozap_rss;T@n@ [I"gpa;T@@ [I"gpd-request;T@@ [I" gpgme;T@@ [I"gpgme-ffi;T@ @ [I" gpgr;T@"@ [I" gphone;T@@ [I"gphoto4ruby;T@@ [I" gphys;TU;[I" 1.2.2.1;T@ [I" gpio;T@@ [I" gploy;T@@ [I" gplus;T@@ [I" gplusr;T@@ [I"gpm;T@@ [I" gprov;T@V@ [I"gps;T@'@ [I" gpstool;T@@ [I" GpsTrail;T@[ @ [I"gpx;T@6@ [I" gpx2exif;T@6@ [I" gpxpose;T@@ [I" gqtp;T@@ [I"gr;T@'@ [I" graal;T@E@ [I" grab;T@@ [I" grabass;T@@ [I" grabber;T@@ [I" grabbio;T@@ [I" grabjs;T@@ [I" grabmoot;T@@ [I" graboid;T@x@ [I" grabzit;T@@ [I" grabz_it;T@"@ [I"graceful_rounding;T@'@ [I" grack;T@E@ [I" grackle;T@@ [I" gradekit;T@'@ [I" grader;T@@ [I"gradients;T@E@ [I"gradient-view;T@6@ [I" graff;T@@ [I" graffik;T@'@ [I" graffiti;T@f!@ [I"graffititracker_devise;T@@ [I" graffity;T@E@ [I" graffle;T@@ [I" grafico;T@[@ [I" graft;T@@ [I" graham;T@@ [I" grahamjroy_my_string_extend;T@'@ [I"grailbird_updater;T@@ [I" grails;T@'@ [I" gram;T@@ [I" grammar;T@@ [I"grammar_cop;T@`@ [I"grammar_police;T@`@ [I"grammoire;T@@ [I" granary;T@E@ [I" grancher;T@|@ [I"grandprix;T@"@ [I"grandstand;T@@ [I"granicus_migrate;T@@ [I"granicus-platform-api;T@@ [I" granite;T@@ [I" grant;T@@ [I"granular_permissions;T@@ [I" grape;T@,@ [I"grape_doc;T@E@ [I"grape_documenter;T@@ [I"grape-rabl;T@@ [I"grape_sinatra_helpers;T@E@ [I"grape-swagger;T@@ [I"grapevine;T@?@ [I" graph;TU;[I" 2.5.1;T@ [I"graphable;T@@ [I"g.raphael-radar-rails;T@@ [I"graphael-rails;T@+@ [I"graph-api;T@@ [I"graph_builder;T@@ [I" graphene;T@@ [I" grapher;T@@ [I"Graphiclious;T@|@ [I" graphite;T@@ [I"graphite-api;TU;[I" 0.0.2.0;T@ [I"graphite_builder;T@@ [I"graphite_client;T@@ [I"graphite_graph;T@n@ [I"graphite-metric;T@@ [I"graphite-notify;T@E@ [I"graphiterb;T@"@ [I"graphite-ruby;T@@ [I" graphiti;T@I@ [I" graphkit;T@@ [I"graphkit-vtk;T@@ [I" graphm;T@@ [I"graph_mediator;T@I@ [I"graph.njae;T@x@ [I"graphpaper;T@E@ [I" graphr;T@@ [I"graph-rails;T@'@ [I"graph-rank;T@@ [I" graphs;T@|@ [I"graphshaper;T@,@ [I"graphtunes;T@E@ [I"GraphvizR;T@@ [I" grapi;T@@ [I"grasshopper;T@@ [I" graster;T@n@ [I" grat;T@@ [I"grate-handle;T@`@ [I" grater;T@`@ [I"graticule;T@ @ [I" gratr;T@@ [I" gratr19;TU;[I" 0.4.4.1;T@ [I"gr_autolink;T@@ [I" gravatar;T@@ [I"gravatarify;T@@ [I"gravatar_image_tag;T@;@ [I"gravatar_profile;T@N@ [I"gravatar-ultimate;T@@ [I" grave;T@ @ [I"&gravelpup-rails3_acts_as_paranoid;T@@ [I"gravis-acts_as_archive;T@@ [I"gravis-searchlogic;TU;[I" 2.4.20;T@ [I"gravis-typhoeus;TU;[I" 0.1.36;T@ [I"gravitext-devtools;T@@ [I"gravitext-util;T@@[I"gravitext-xmlprod;T@@[I"gravitheque;T@@ [I" gravity;T@!@ [I"gravityframework;T@@ [I"gravtastic;TU;[I" 3.2.6;T@ [I" gravy;T@"@ [I"gravylicious;T@@ [I" gray;T@@ [I" graybook;T@x@ [I"graylog2-client;T@"@ [I"'graylog2-declarative_authorization;T@@ [I"graylog2_exceptions;T@@ [I"graylog2-rails;T@'@ [I"graylog2-resque;T@@ [I"gray_logger;TU;[I" 0.11.12;T@ [I"grayphash;TU;[I" 0.0.12.1;T@ [I"grayskull;T@g@ [I" graytoad;T@@ [I"grb;T@@ [I" grcode;T@@ [I" greader;T@@ [I"greater_less;T@`@ [I" greeb;T@E@ [I"greed_game;T@@ [I" greedy;T@@ [I"greek_easter;T@`@ [I"greek_string_utils;T@"@ [I" green;T@@ [I" greenbar;T@@ [I"green_by_phone;T@`@ [I"green_eggs;T@'@ [I"green_eggs_and_spam;T@@ [I"greengoose;T@E@ [I"greenletters;T@@ [I"green_light;T@|@ [I"green_midget;T@@@ [I"green_monkey;T@+@ [I"greenmonster;T@@ [I"green_onion;T@+@ [I"greenpepper-ruby;T@'@ [I"greenscreen;T@`@ [I"green_shoes;TU;[I" 1.1.367;T@ [I"greenstripes;T@6@ [I"green_syslogger;T@@ [I"greenwich;T@z@ [I" greet;T@'@ [I" greeter;T@'@ [I"gregwebs-oauth;T@W^@ [I" grem;T@@ [I" gren;T@@ [I"grendel-ruby;T@|@ [I" grep;T@'@ [I" grep-fu;T@@ [I" grepmate;T@@ [I" grepper;T@@ [I" greppy;T@'@ [I"grepresent;T@'@ [I"grep_routes;T@`@ [I" gretel;T@@ [I"greyhawkweather;T@@ [I" gribr;T@@ [I" gricer;T@@ [I" grid;T@@ [I"gridation;T@@ [I"grid_attachment;T@E@ [I" gridcli;T@|@ [I"grid-coordinates;T@N@ [I" gridder;T@V@ [I" griddle;T@6@ [I" griddler;T@@ [I"griddleware;T@`@ [I"griddy-rails;T@@ [I"gridfs-rackdav;T@@ [I" gridify;T@@@ [I"gridinit-jmeter;T@@ [I" gridion;T@^]@ [I"grid-layout;T@@ [I" gridless;T@'@ [I" grid-map;T@E@ [I"gridomatic;T@'@ [I"gridpaper;T@n@ [I"grid-plugin-echo;T@"@ [I"grid-plugin-growl;T@E@ [I"grid-plugin-osx-notifier;T@E@ [I"grid-plugin-updater;T@E@ [I"grid_rest;T@@ [I"grid_square;T@@ [I"gridstack;T@'@ [I"grid_tools;T@E@ [I" GridVid;T@'@ [I"griffordson-georuby-extras;T@X@ [I"grifizoid;T@"@ [I" grill;T@x@ [I" grim;T@@ [I"grimen-delayed_job_mailer;T@6@ [I"grimen-packr;T@@ [I" grimlock;T@@ [I"grimsock-ci_reporter;TU;[I" 1.6.4.1;T@ [I"grimsock-webrat;TU;[I" 0.7.1.2;T@ [I" grin;T@@ [I" grinc;T@@@ [I" grind;T@'@ [I" grip;T@n@ [I" grit;T@@ [I" gritano;T@J@ [I" grit_ext;T@@ [I"grit_service;T@@ [I" gritter;T@@ [I"gritter_notices;T@x@ [I" gritty;T@@ [I"grizzled-rails-logger;T@1@ [I"grizzled-ruby;T@+@ [I" grizzly;T@ @[I"grizzly-weibo;T@x@ [I"grn;T@@ [I" grntest;T@@ [I"groat-smtpd;T@`@ [I" grobi;T@@ [I" grocer;T@@ [I"grockit-resque;T@@ [I" groem;T@"@ [I"groesser3-gcal4ruby;TU;[I" 0.5.51;T@ [I" grog;T@@ [I" grok;T@@ [I"grok-itunes;T@@@ [I"GrokITunes;T@`@ [I" groonga;T@@ [I"groonga-command;T@@ [I"groonga-query-log;T@@ [I"groopbuyr;T@N@ [I" groove;T@g@ [I"grooveshark;T@@ [I"grooveshark-ruby;T@@@ [I" grope;T@I@ [I"groseillier;T@E@ [I"grosser-algorithms;T@@ [I"grosser-get_pomo;T@@ [I"grosser-ssl_requirement;T@@ [I"grotesque;T@E@ [I"groundcontrol;T@E@ [I"groundcrew;T@@ [I"groundhog;T@`@ [I"groundwork;T@@ [I"group_by_hash;T@@ [I"group_cache_key;T@@ [I"group_delegator;T@@@ [I"groupdocs;T@N@ [I"grouped_scope;T@n>@ [I"grouped_time_zones;T@@ [I"grouped_validations;T@@ [I"grouper-rest-client;T@@ [I" groupie;T@@ [I" groupify;T@@ [I" groupme;T@'@ [I"groupmeme;T@R@@ [I"groupme-paddock;T@@ [I"groupme-trails;T@0"@ [I" groupon;T@'@ [I" groupon2;T@'@ [I"groupon-kdtree;T@`@ [I"group_open_id;T@@@ [I" groupr;T@[@ [I" groupy;T@@ [I" groute;T@g@ [I" grove;T@@ [I" grove-rb;T@@ [I" growl;T@@ [I"growl-ampelmaennchen;T@@ [I"growl-amqp;T@@ [I"growl-atom;T@@9[@@@ [I"growl-down;T@'@ [I"growlfire;T@E@ [I"growl_formatter;T@"@ [I"growl-glue;T@ @ [I"growling_test;T@'@ [I"growl-logger;T@@ [I"growl_mailer;T@'@ [I"growlnotifier;T@@ [I"growl_notifier;T@u@ [I"growl_notify;T@@ [I"growl_notify_osascript;T@'@ [I"growl-rspec;T@'@ [I" growltdf;T@@ [I"growl-transfer;T@"@ [I"growthforecast;T@'@ [I"gr_string_escape;T@@ [I" grubber;T@'@ [I"grub-editenv-ruby;T@'@ [I" gruby;T@@ [I" grudge;T@@ [I"grueserve;T@'@ [I" gruesome;T@@ [I" gruff;T@@ [I" grumblr;TU;[I" 2.4.2;T@ [I"grumpy_herring;T@@ [I"grumpymapper;T@"@ [I"grumpy_old_man;T@6@ [I" grund;T@@ [I" grunk;T@'@ [I" grunt;T@@ [I"gryphon_sitemap;T@'@ [I"gs;T@+@ [I" gs2crmod;T@u @ [I" gs960;T@E@ [I"gsa-feeds;T@'@ [I" gsasl;T@@ [I" gsay;T@@ [I" gsbb;T@E@ [I" gscalzo-mongo_session_store;T@;@ [I" gscomp;T@@ [I" gscraper;T@x@ [I"gsearch-parser;T@@ [I"g_sectioned_shower;T@@ [I"gsh;T@+@ [I"gsiener-analytical;TU;[I" 2.10.2;T@ [I"gsl;TU;[I" 1.14.7;T@ [I" gsl4r;T@@ [I"gsl_extras;T@x@ [I"gsm_encoder;T@@ [I"gsmetrics;T@1@ [I"gsm_tools;T@E@ [I" gsolr;T@e8@ [I"gsolr_ext;TU;[I" 0.12.3;T@ [I" gson;T@@[I"gsoni-ar_mailer;TU;[I" 2.1.11;T@ [I"gsoni-ar_mailer_rails3;T@@ [I" gs_phone;T@"@ [I" gspush;T@E@ [I" gsquire;T@"@ [I"gsr;T@'@ [I" gssapi;T@x@ [I" gstarter;T@@ [I"gst-kitchen;T@@ [I" gstock;T@@ [I" gstore;T@@ [I"gstreamer;T@9@ [@@9@ [I"gsub_filter;T@'@ [I" gswax;T@E@ [I" gtalk;T@V@ [I"gtalk-bot;T@@ [I" gtasks;T@@ [I" gtdfiles;T@@ [I" gtfs;T@@ [I"gtg-facebooker2;T@n@ [I" g_thang;T@@ [I" gthor;T@@ [I" gtin;T@@@ [I" gtk2;T@9@ [@@9@ [I"gtk2alertapp;T@@ [I"gtk2applib;TU;[I" 15.3.1;T@ [I"gtk2bitcoin;T@@ [I"gtk2blackjack;T@.@ [I"gtk2bookmarks;T@n>@ [I"gtk2checkboxes;T@@ [I"gtk2clockapp;TU;[I" 1.11.0;T@ [I"gtk2dailybooth;T@J@ [I"gtk2diaryapp;T@@ [I" gtk2diet;T@@ [I"gtk2_expander_settings;T@'@ [I" gtk2go;T@@ [I" gtk2mp3;T@X@ [I"gtk2passwordapp;T@0@ [I"gtk2todoapp;T@ @ [I"gtk2_treeview_settings;T@@ [I"gtk2twitter;T@@ [I"gtk2_window_settings;T@@ [I"gtk2youtubeapp;TU;[I" 2.20.0;T@ [I" gtk3;T@'@ [I"gtk3assist;T@V@ [I"gtk3webtable;T@@ [I" gtk_app;T@@@ [I"gtkbuilder;T@[ @ [I"gtkmozembed;T@@ [I"GtkSimpleLayout;T@@ [I"gtksourceview2;T@9@ [@@9@ [I"gtk_webkit_pdf;T@'@ [I"gtk-webkit-ruby;T@"@ [I"gtl-parsley-ruby;T@@ [I"gtokenizer;T@@ [I" gtool;T@n@ [I"gtranslate-two;T@+@ [I"gts;T@g@ [I" guara;T@@ [I" guard;T@l@ [I"guard-addremove;T@@ [I"guard-annotate;T@@ [I"guard-autorefresh;T@'@ [I"guard-bacon;T@@ [I"guard-bdd;T@'@ [I"guard_boilerplate;T@@ [I"guard-brakeman;T@@ [I"guard-bundler;T@@ [I"guard-calabash-ios;T@@ [I"guard-chef;T@E@ [I"guard-cloudformation;T@@ [I"guard-coffeedripper;T@|@ [I"guard-coffeescript;T@u@ [I"guard-compass;T@@ [I"guard-copy;T@n@ [I"guard-ctags-bundler;T@1@ [I"guard-ctags-composer;T@'@ [I"guard-cucumber;T@ @ [I"guard-cucumber-js;T@E@ [I"guard-cunit;T@'@ [@9@E@ [I" guard-db;T@@ [I"guard-delayed;T@@ [I"guard-docbook-status;T@@ [I"guard-ego;T@'@ [I"guard-erb;T@'@ [I"guard-erlang;T@,@ [I"guard-evergreen;T@@ [I"guard-fast_spec;T@E@ [I"guard-fixture_builder;T@'@ [I"guard-flopbox;T@@ [I"guard-focus;T@'@ [I"guard-foodcritic;T@@ [I"guard-frank;T@@ [I"guard-gimli;T@`@ [I"guard-gitpusher;T@@ [I"guard-git-scribe;T@@ [I" guard-go;T@"@ [I"guard-haml;T@R @ [I"guard-haml2erb;T@@ [I"guard-haml-coffee;T@@ [I"guard-handlebars;T@@ [I"guard-hogan;T@'@ [I"guard-hydra;T@'@ [I"guard-i18next;T@I@ [I"guard-i18n-js;T@@ [I" guardian;T@'@ [I"guardian-content;T@I@ [I"guard-jammit;T@@ [I"guard-jasmine;T@ё@ [I""guard-jasmine-headless-webkit;T@@ [I"guard-jasmine-node;T@n@ [I"guard-jekyll;T@@ [I"guard-jekyll2;T@@ [I"guard-jenkins;T@`@ [I"guard-jessie;T@6@ [I"guard-jet;T@'@ [I"guard-jruby-rspec;T@|@ [I"guard-jshint-node;T@n@ [I"guard-jshint-on-rails;T@E@ [I"guard-jslint-on-rails;T@@ [I"$guard-jslint-on-rails-for-1.1.1;T@@ [I"guard-js-static-require;T@'@ [I"guard-jstd;T@@@ [I"guard-knife;T@@@ [I"guard-koans;T@E@ [I"guard-konacha;T@6@ [I"guard-krl;T@V@ [I"guard-less;T@@@ [I"guard-librarian;T@'@ [I"guard-livereload;T@;@ [I"guard-live-set;T@`@ [I"guard-lono;T@E@ [I"guard-markdown;T@@ [I"guard-markdown2impress;T@@ [I"guard-middleman;T@@ [I"guard-migrate;T@@ [I"guard-minitest;T@@ [I"guard-minitest-decisiv;T@@ [I"guard-mirror;T@[@ [I"guard-motion;T@`@ [I"guard-mouch;T@'@ [I"guard-mozrepl;T@@ [I"guard-mustachejs;T@E@ [I"guard-nanoc;T@@ [I"#guard-notifier-git_auto_commit;T@`@ [I"guard-parallel_all;T@@ [I"guard-passenger;T@@ [I"guard-phpcs;T@"@ [I"guard-phpmd;T@E@ [I"guard-phpunit;T@+@ [I"guard-play;T@+@ [I"guard-post;T@@ [I"guard-pow;T@@ [I"guard-premailer;T@@ [I"guard-process;T@W@ [I"guard-prostores;T@'@ [I"guard-prove;T@@ [I"guard-puma;T@I@ [I"guard-puppet;T@E@ [I"guard-puppet-lint;T@@ [I"guard-pusher;T@@ [I"guard-python-unittest;T@@ [I"guard-rack;T@@ [I"guard-rackup;T@'@ [I"guard-ragel;T@"@ [I"guardrail_notifier;T@R@ [I"guard-rails;T@`@ [I"guard-rails-assets;T@6@ [I"guard-rails_best_practices;T@6@ [I"guard-railstestdb;T@"@ [I"guard-rake;T@n@ [I" guardrc;T@[ @ [I"guard-readme-on-github;T@'@ [I"guard-rebar;T@@ [I"guard-redcarpet;T@'@ [I"guard-redis;T@I@ [I"guard-reloader;T@`@ [I"guard-remote-sync;T@@ [I"guard-resque;T@@ [I"guard-resque-scheduler;T@E@ [I"guard-restarter;T@'@ [I"guard-rna;T@@ [I"guard-rocco;T@@ [I"guard-ronn;T@@ [I"guard-roxy;T@E@ [I"guard-rrails;T@@ [I"guard-rspec;T@ @ [I"guard-rspec-jruby;T@@ [I"guard-rspectacle;T@@ [I"guard-rsync;T@`@ [I"guard-ruby;T@'@ [I" guards;T@'@ [I" guard-s3;T@`@ [I"guard-sass;T@@ [I"guard-schema;T@'@ [I"guard-seeds;T@n@ [I"guard-shell;T@@ [I"guard-shopify;T@@ [I"guard-shotgun;T@@ [I"guard-sidekiq;T@@ [I"guard-simple_shell;T@'@ [I"guard-slim;T@'@ [I"guard-soca;T@@@ [I"guard-spin;T@@ [I"guard-spinach;T@E@ [I"guard-spinoff;T@E@ [I"guard-spork;T@@ [I"guard-sporkminitest;T@E@ [I"guard-sprite-factory;T@'@ [I"guard-sprockets;T@@ [I"guard-sprockets2;T@@ [I"guard-staticmatic;T@'@ [I"guard-steering;T@@ [I"guard-stendhal;T@'@ [I"guard-stitch;T@@ [I"guard-sublime-ctags;T@'@ [I"guard-sunspot;T@E@ [I"guard-tay;T@@ [I"guard-templates;T@E@ [I"guard-templates-jshaml;T@@ [I"guard-test;T@X@ [I"guard-tilt;T@'@ [I"guardtime;T@@ [I"guard-toc;T@|@ [I"guard-uglify;T@@ [I"guard-unicorn;T@n@ [I"guard-vows;T@"@ [I"guard-webrick;T@+@ [I"guard-xcode;T@W@ [I"guard-xcoder;T@@ [I"guard-yaml;T@'@ [I"guard-yard;T@@ [I"guard-yeti;T@@ [I"guard-zen;T@"@ [I"guard-zeus;T@'@ [I"guard-zeus-client;T@`@ [I"guava-jars;TU;[I" 13.0.1;T@[I" guava-rb;T@@ [I"gub;T@@ [I"guc_terminal;T@'@ [I"guerilla_patch;T@'@ [I"guerrilla_patch;TU;[I" 2.8.3;T@ [I"guerrilla_rotate;T@@ [I" guess;T@'@ [I" guess4r;TU;[I"0.0.1.20120401.1;T@ [I" guesser;T@@ [I"guess_html_encoding;T@V@ [I"guessmethod;T@@ [I"guestlist;T@'@ [I"guestlistapp;T@@ [I" guff;T@"@ [I"guia_mais;T@@ [I" guid;T@`@ [I" guidance;T@'@ [I"guidance-rails;T@'@ [I"guided_path;T@@ [I"guided_randomness;T@+@ [I"guided_track;T@x@ [I"guidedtrack-lib;T@@ [I"guide-em-up;T@@ [I"guideline;T@@ [I"guidelines;T@'@ [I" guides;T@@ [I"guidestar-ruby;T@x@ [I" guignol;TU;[I" 0.3.5.1;T@ [I" guilded;T@@ [I"guilleiguaran-rubyntlm;T@@@ [I"guillotine;T@@ [I"gui_rules;T@'@ [I" guise;T@@ [I" guitr;T@@ [I"gulesider;T@[@ [I" gulp;T@`@ [I" gumbo;T@'@ [I"gumby-rails;T@s@ [I" gumdrop;T@@ [I" gumrider;T@@ [I" gumroad;T@- @ [I" gumshoe;T@'@ [I"gun;T@E@ [I" GUnit;T@@ [I"gunnertechnology;T@g@ [I" guns;T@+@ [I" gupshup;T@@ [I"gurgitate-mail;TU;[I" 1.10.5;T@ [I" gurgle;T@@ [I" guru;T@'@ [I"gus;T@"@ [I" gust;T@I@ [I"gut;T@@ [I"guten-mtgox;T@@ [I"gutkumber;T@@ [I" gutopia;T@@ [I" guuby;T@'@ [I"gvarela-bluepill;T@@ [I"gvarela-integritray;T@@ [I" gvis;T@z@ [I" gviz;T@`@ [I"gv-RedCloth;T@@ [I"gwdamcalc;T@@ [I"g_web_font;T@@ [I"gwo;T@+@ [I"gwong-apn_on_rails;T@@ [I"gwt;T@E@ [I" gwtf;T@@ [I" gwt_rpc;T@@@ [I"gwx;T@@ [I"gx;T@ @ [I" gyast;T@@ [I" gyazo;T@@ [I" gyazz;T@@ [I"gyazz-markup;T@'@ [I" gync;T@@@ [I"gynzy-rspec-rails;T@} @ [I" gyoku;T@@ [I"gyomu_ruby;T@@ [I"gyordanov-multipass;T@;@ [I" gypsum;T@e@ [I" gyruby;T@6@ [I" gyst;T@"@ [I" gyunyu;T@@ [I" gzip;T@@ [I"gzip_filter;T@!@ [I"h;T@x@ [I"h13ronim-capybara;T@2@ [I"h13ronim-gcal4ruby;T@~@ [I"h2o;T@@ [I"h2ocube_generator;T@'@ [I"h2ocube_rails_assets;T@V@ [I"h2ocube_rails_cache;T@'@ [I"h2ocube_rails_helper;T@@ [I"h2ocube_rails_tasks;T@E@ [I"h4oflashsdk;T@@ [I" h5-min;T@I@ [I"h5_uploader;T@x@ [I" habitat;T@@ [I" habiter;T@[ @ [I" habits;T@6@ [I" habject;T@`@ [I" habl;T@@ [I" habr;T@'@ [I"habtm_generator;T@@ [I" hacer;T@@ [I" hack;T@`@ [I"hackboxen;T@|@ [I"hackedunit-apn_sender;T@@ [I"hackedunit-maxmind;T@@ [I"hackerdude-aws;TU;[I" 2.3.26;T@ [I"hackernews;T@@ [I"hacker_news;T@@ [I"hacker_news_search;T@@ [I"hackersays;T@@ [I"hackershout;T@@ [I"hacker_term;T@@ [I"hacker_todo_list;T@@ [I"hackety_hack;T@'@ [I"hackety_hack-lessons;T@x@ [I"hackety_sling;T@@ [I" hacksaw;T@@ [I"hack_tree;T@@@ [I" hactor;T@'@ [I" haddock;T@I@ [I" hadley;T@@ [I"hadoop-csv;T@@ [I"hadoop-find;T@@@[I"hadoop-jruby-connector;T@@ [I"hadoop-papyrus;T@@ [I"hadoop-rubydsl;T@@ [I" haiku;T@'@ [I"*haikulearning_mongrel_upload_progress;T@,@ [I" hail;T@'@ [I" hairball;T@@ [I"hairtrigger;T@@ [I" hakii;T@'@ [I"hakon-lacquer;T@@ [I" hakto;T@@ [I"hal;T@'@ [I" halb;T@x@ [I" halcyon;T@Y@ [I"halfbyte-mongoid_grid;T@E@ [I"half_shell;T@@ [I" halibut;T@@ [I"halidator;T@@ [I"hallelujah-cassandra;T@@ [I"hallelujah-cassandra-cql;T@@ [I" hallo;T@@ [I" hallon;T@,@ [I"hallon-openal;T@@ [I"hallo_rails;T@@ [I" halo;T@@ [I"halo-reach-api;T@W@ [I"halorgium-auth-hmac;TU;[I"1.1.1.2010100601;T@ [I" halu;T@'@ [I"hamburglar;T@@@ [I"ham_callsign;T@6@ [I"hamcrest4qunit;T@@ [I" hamdown;T@@ [I" hamgen;T@@ [I" haml;TU;[I" 3.1.7;T@ [I" haml2erb;T@@ [I"haml2handlebars;T@E@ [I"haml2slim;T@_@ [I"haml_assets;T@@ [I" hamlbars;T@O@ [I"hamlboard;T@"@ [I"haml-bootstrap-rails;T@?@ [I"haml-coderay;T@@@ [I"haml-coffee;T@@ [I"haml_coffee_assets;T@ @ [I"haml-coffeescript;T@@ [I"haml-coffee-script;T@'@ [I"haml-contrib;T@'@ [I"haml-edge;TU;[I" 3.1.79;T@ [I" haml_ejs;T@'@ [I" hamlet;TU;[I" 0.5.0.1;T@ [I"haml_formtastic_scaffold;T@W@ [I"haml-hikidoc-filter;T@@ [I"haml-i18n;T@"@ [I" hamlify;T@@ [I"haml_interceptor;T@@ [I" hamlize;T@@ [I" hamljs;T@@ [I"haml-kramdown;T@'@ [I"haml-magic-translations;T@@ [I"haml-more;T@@ [I"haml_rails;T@@ [I"haml-rails;T@@ [I"haml-rails-with-i18n;T@6@ [I"haml-sass-converters;T@I@ [I")haml-sass-converters-rubymine-plugin;T@@ [I"haml_scaffold;T@@ [I"hamls_comment;T@'@ [I"haml-server;T@[ @ [I"haml-sprockets;T@n@ [I"haml_to_js;T@`@ [I"haml_to_star;T@@ [I"haml_tumblr;T@O@ [I" hammelin;T@@ [I"hammer_builder;T@@ [I"hammertime;T@@ [I"hammertime19;T@@ [I" hammock;T@@ [I"hammurabi;T@@ [I" hamradio;T@@ [I"hamstache;T@@ [I" hamster;T@@ [I"hamster-pivotal;T@'@ [I" hamster-the-process-watcher;T@;@ [I" hana;T@@ [I"hanber-rails;T@@ [I" hancock;T@V@ [I"hancock-client;T@V@ [I"han-converter;T@@ [I"handbrake;T@x@ [I"handicraft_helper;T@s@ [I"handicraft_ujs;T@@ [I"handlebar;T@@ [I"handlebars;T@@ [I"handlebars_assets;T@@ [I"handlebars-rails;T@@ [I"handlebars_rails_helpers;T@@ [I"handlebars_rb;T@'@ [I"handlebars_routes;T@@ [I"handlebar_wax;T@@ [I"handlebone;T@'@ [I" handler;T@@ [I"handler301;T@I@ [I"handlers-js;T@'@ [I"handlersocket;T@E@ [I"handler_socket;T@'@ [I"handle_search;T@'@ [I"handles_sortable_columns;T@6@ [I" handoff;T@@ [I" hands;T@E@ [I"handscore;T@'@ [I"hands_engine;T@@ [I"handshake;T@@ [I" handsoap;T@@ [I"hands-soap4r;TU;[I" 1.5.8.4;T@ [I" handy;T@@ [I"handy_capper;T@@@ [I"handy_form;T@@ [I"handy-generators;T@E@ [I"handy_regexps;T@'@ [I"handy-regexps;T@6@ [I"handy_sort;T@E@ [I"hanging_gardens;T@@ [I" hangman;T@`@ [I"hangman_letter_letdown;T@@ [I"hangman_tournament;T@@ [I" hangout;T@"@ [I" hangover;T@n@ [I"hank-chronic;T@J%@ [I"hanke-henry;T@@ [I" hanlon;T@@ [I" hanna;T@t @ [I"hanna_gudao;T@@ [I"hanna-nouveau;T@,@ [I" hannibal;T@@ [I" hanoi;T@@ [I" hanover;T@'@ [I" hansel;T@}@ [I"hanswurst;T@@ [I" hanvox;T@[ @ [I"hanzi_to_pinyin;T@- @ [I"haphazard;T@@ [I" hapi;T@E@ [I"haplocheirus-client;T@7@ [I"happening;T@[@ [I" happy;T@@ [I"happy_birthday;T@'@ [I"happy-cli;T@E@ [I"happy-commit;T@@ [I"happydatepicker;T@ @ [I"happyerrorsnotices;T@@ [I"happy_farm_model;T@'@ [I"happy_farm_models;T@E@ [I"happyformvalidator;T@'@ [I"happy_fun_time_bot;T@@ [I"happygirl;T@N@ [I"happygrep;T@"@ [I"happy-helpers;T@E@ [I"happymapper;T@x@ [I"happymapper-swanandp;T@x@ [I"happy-nav;T@`@ [I"happypath;T@@@ [I"happypdf_json_schema;T@@ [I"happy_robots;T@+@ [I"happy-titles;T@@ [I" haproxy;T@@ [I"haproxy2rpm;T@@ [I"haproxy-cluster;T@@ [I"haproxyctl;T@@ [I"haproxy-decklin;T@@ [I"haproxy_dumb;T@@ [I"haproxy_join;T@[ @ [I"haproxy_log_parser;T@'@ [I"haproxy_manager;T@@@ [I"haproxy-tools;T@@ [I" hapyrus;T@'@ [I"har;T@@ [I" harakiri;T@E@ [I" harbor;TU;[I" 0.16.1;T@ [I" harbour;T@E@ [I" harby;T@@ [I"hard_boiled;T@I@ [I"hard-boiled;T@@ [I"hardbound;T@'@ [I" hardmock;T@}@ [I" hare;T@@ [I" hark;T@'@ [I" harker;T@J@ [I"harlequin;T@E@ [I"harleytt-ansitags;T@|@ [I" harleytt-capistrano-gitflow;TU;[I" 1.4.8;T@ [I"harleytt-gvoice-ruby;T@@ [I"harleytt-simplepay;T@I@ [I"harmon-autowatchr;T@1@ [I"harmonious_dictionary;T@'@ [I"harmonize;T@@ [I" harmony;T@@ [I" harness;T@x@ [I" harp;T@ @ [I" harper;T@N@ [I" harpy;T@@ [I" harrods;T@@ [I" harsh;T@@ [I" haruharu;T@@ [I" harukaze;T@@ [I" harv;T@&@ [I" harvest;T@@ [I"harvested;T@@ [I" harvestr;T@'@ [I"harvest_report;T@E@ [I"harvest-ruby;T@`@ [I"harvestthings;T@@ [I"harvestthingstest;TU;[I" 1.0.0.4;T@ [I"harvest_to_infakt;T@`@ [I" harvey;T@E@ [I"harvixture;T@@ [I"has;T@@ [I"has_accounts;TU;[I" 0.18.4;T@ [I"has-activity;T@@ [I"has_addresses;T@@ [I"has_alter_ego;T@@ [I"/has_and_belongs_to_many_with_deferred_save;T@@ [I"has_associative_facades;T@@ [I"has-attached;T@,@ [I"has_attributes_from;T@@@ [I"has_audit_trail;T@@ [I"has_barcode;T@I@ [I"has_bitfield;T@@ [I"has-bit-field;T@@ [I"has_bootstrap;T@@ [I"has_breadcrumb;T@@ [I"has_breadcrumbs;T@@ [I"has_browser;T@@ [I"has_cache_key;T@E@ [I"has_comments;T@@ [I"has_constant;T@-@ [I"has_content;T@"@ [I"has_crud_for;T@'@ [I"has_custom_fields;T@`@ [I"has_default;T@@ [I"has_defaults;T@x@ [I"has_delegates;T@Y@ [I"has_dictionary;T@'@ [I"has_distance;T@@ [I"has_draft;T@@ [I"has_duration;T@@ [I"has_dynamic_attribute;T@@ [I"has_dynamic_fields;T@@ [I" has_easy;T@- @ [I" has_eav;T@N@ [I"has_emails;T@@ [I" has_enum;T@[@ [I"has_enumeration;T@@ [I"has_extra_data;T@!@ [I" has_face;T@@ [I"has_features;T@@ [I" has_file;T@@ [I"has_filter;T@@@ [I"has_finder;T@|@ [I"has_fixtures;T@'@ [I"has_flags;T@E@ [I"has_followers;T@'@ [I"has_foreign_language;T@E@ [I"has_friendly_name;T@@ [I"has_friends;T@E@ [I"has_friends-rails3;T@"@ [I"has_global_session;T@;@ [I"has-guarded-handlers;T@@ [I" hash;T@@ [I"hash-access;T@@ [I"hash_accessor;T@W@ [I"hashafras;T@'@ [I" hash_all;T@@ [I"has_handle_fallback;T@`@ [I"hash_args;T@@ [I"has_hashcode;T@`@ [I" hashbang;T@@ [I"hash-ber-tlv;T@@ [I"hashblock;T@@ [I" hashblue;T@V@ [I"hash-blue;T@@ [I"hashblue-api;T@`@ [I"hash_brown;T@E@ [I"hashbrowns;T@@ [I"hashcache;T@[@ [I"hash-cache;T@`@ [I" hashcash;T@@ [I"hash_chain;T@@ [I"hash_compare;T@@ [I"hash-compositing;T@@ [I"hashconfig;T@E@ [I"hash_converter;T@E@ [I" hashdb;T@@ [I"hash_dealer;T@@ [I"hash-deep-merge;T@`@ [I" hashdiff;T@@ [I"hash-differ;T@E@ [I"hash_digest;T@@ [I"hashdot-test-daemon;T@u"@[I" hashdown;T@I@ [I"has_heartbeat;T@`@ [I" hashed;T@@ [I"hashed_attributes;T@E@ [I"hashed-jasper-rails;T@@ [I" hasher;T@@ [I"hasherize_csv;T@@ [I"hasherizer;T@@ [I" hashery;T@@ [I" hashes;T@'@ [I"hash_extend;T@N@ [I"hash_extension;T@"@ [I"hash_factory;T@@ [I"!hash-from_mysql_query_result;T@'@ [I"hashfunctions;T@@ [I"hashfunctions-extension;T@@ [I"hash_graph;T@x@ [I" hashgrid;T@@ [I"hash-hooked;T@x@ [I" hashi;T@@ [I" hashid;T@@ [I"hashidator;T@@ [I" hashids;T@@ [I" hashie;T@N@ [I"hashie-lazy_trash;T@'@ [I"hashie-model;T@}@ [I" hashify;T@@ [I" hashish;T@'@ [I"has_history;T@`@ [I"hash-keyable;T@'@ [I"hash_key_as_attribute;T@'@ [I"hash-keys;T@@ [I"hash_keyword_args;T@`@ [I"hash_magic;T@@ [I"hash_mapper;T@`@ [I"hashmodel;T@x@ [I"hash-ninja;T@@ [I"hash_object;T@@ [I"hash_path;T@@ [I"hash-path;T@@ [I" hashpipe;T@@ [I"hash-proxy;T@+@ [I"hash-query;T@@ [I"hash_queue;T@@@ [I" hashr;T@@ [I"hash_ring;T@E@ [I"hash_rocket;T@@ [I"hashrocket-netrecorder;T@@ [I"hashrocket-rails;T@@ [I"hash_rollup;T@@@ [I"hash-save;T@@ [I"hash-serializer;T@@ [I"hash_set_operators;T@@ [I"hashslice;T@@ [I"hash_struct;T@[ @ [I"hash_symbolizer;T@@ [I"hash_syntax;T@@ [I"hashtag_retweet_bot;T@@ [I"hash-that-tree;T@+@ [I"hash_to_hidden_fields;T@O@ [I"hash_to_object;T@`@ [I"hash-to-ostruct;T@'@ [I"hashtostruct;T@e@ [I"hashtoxml;T@@ [I"hash_to_xml;T@@ [I"hash_transformer;T@@@ [I" hashtree;T@@ [I"hash-tree;T@E@ [I" hashugar;T@@ [I"hashutils;T@@ [I"hash-utils;T@@ [I"hash_validations;T@`@ [I"hash_walker;T@"@ [I"hash_with_struct_access;T@E@ [I" hashword;T@'@ [I" hashy_db;T@@ [I"hashy_object;T@'@ [I"has_image;TU;[I" 0.4.0.1;T@ [I"has_images;T@,@ [I"has_inherited;T@ @ [I"has_ip_address;T@'@ [I"has_localization_table;T@@ [I"has_machine_tags;T@@ [I"has_magic_columns;T@@ [I"has_magick_title;T@@ [I"has_mailbox;T@@ [I"has_many_booleans;T@@ [I"has_many_by_status;T@W@ [I"has_many_emails;T@@ [I"has_many_friends;T@'@ [I"has_many_polymorphic;T@@ [I"has_many_polymorphs;TU;[I" 2.13;T@ [I"has_many_through_generator;T@x@ [I"has_many_translations;T@_@ [I"has_many_versions;T@n@ [I"has-many-with-set;T@@ [I"has_markup;T@|@ [I"has_media;T@@ [I"has_messages;T@@ [I"has_messages_generators;T@'@ [I"has_messages_huacnlee;T@@ [I"has_metadata;T@l@ [I"has_meta_data;T@@ [I"has_metadata_column;T@@ [I"has_metrics;T@E@ [I"has_mobile_views;T@@ [I"has_moderated;T@@ [I"has_money;T@@ [I"has_money_fields;T@@ [I"has_named_bootstraps;T@@ [I"has_normalized_attributes;T@E@ [I"has_normalized_fields;T@E@ [I"has_normalized_sti;T@@ [I"hasoffers;T@1@ [I"has_offers;T@@ [I"has_one_autocreate;T@@ [I"has_options;T@x@ [I"has_partial;T@`@ [I"has_permalink;T@+@ [I"has_permission;T@^@ [I"has_phone_number;T@@ [I"has_phone_numbers;T@@ [I"has_preference;T@E@ [I"has_price;T@N@ [I"has_properties;T@E@ [I"has-properties;T@@ [I"has_publishing;T@@ [I"has_ratings;T@@ [I"has_redis_feed;T@'@ [I"has-relationship;T@@ [I"HasRemote;T@@ [I"has_roles;T@@ [I"has_safe_dates;T@@ [I"has_schedule;T@@ [I"has_scope;T@@ [I"has_searcher;TU;[I" 0.0.96;T@ [I"has_seo_fields;T@"@ [I"has_serialized;T@6@ [I"has_settings;T@@ [I"has_shortest_path;T@'@ [I" hassle;T@'@ [I" hassle3;T@E@ [I" hassless;T@'@ [I" has_slug;T@@ [I"has_sunspot_scope;T@@@ [I" hast;T@@ [I" hastats;T@"@ [I" haste;T@6@ [I" hastests;T@@ [I" hastie;T@x@ [I"has_token;T@@ [I"has_token_id;T@@ [I"has_token_on;T@@ [I"has_tokens;T@@ [I"has_tracking;T@@ [I"has_translations;T@@ [I" hastur;T@F@ [I"has_unique_slug;T@1@ [I"has_unique_token;T@@ [I" has_url;T@@ [I" has_uuid;T@@ [I"has_validated_attributes;T@'@ [I"has_vcards;TU;[I" 0.20.0;T@ [I"has_versions;T@@ [I"has-versions;T@'@ [I"has_vimeo_video;T@@ [I"has_web_fallback;T@@ [I"hat;T@@ [I" hatchery;T@@ [I" hatchet;T@@ [I"hatchet-airbrake;T@E@ [I"hatchet-hipchat;T@@ [I" hate;T@@ [I"hateda2md;T@@ [I"hatenaapiauth;T@@ [I"hatenaapigraph;T@I@ [I" hatenabm;T@@@ [I"hatena-bookmark;T@@@ [I"hatenadiary;T@@ [I"hatenagraphup;T@@ [I"hatena-keyword;T@'@ [I" hateoas;T@@ [I" hatetepe;T@@ [I"hatless-hoptoad_notifier;TU;[I" 2.2.6.1;T@ [I"hattr_accessor;T@@ [I"hat-trick;T@+@ [I" have;T@'@ [I"have-code;T@@ [I"haversine;T@@ [I"haversine_distance;T@- @ [I"have_table;T@@ [I"hawkerb-thinking-sphinx;T@j@ [I" hawknee;T@@ [I" hawthorn;T@'@ [I"hax;T@@ [I"haxor_gem;T@@ [I" hayabusa;T@@ [I" hayde;T@@ [I"haystack_worker;T@@ [I" haze;T@'@ [I" hazel;T@@ [I"hazelcast-client;T@"@[I"hazelcast-jars;TU;[I" 1.9.4.8;T@[I" haz_enum;T@u @ [I"hbase-adapter;T@'@ [I"hbase-driver;T@E@ [I"hbase-jruby;T@|@[I" hbaserb;T@@ [I"hbase-ruby;T@N@ [I"hbase-stargate;T@l@ [I"hbase-thrift;TU;[I" 0.20.5;T@ [I"hb-runner;T@@ [I"hbs;T@@@ [I" hbs_plus;T@6@ [I" hbuilder;T@'@ [I"hc;T@'@ [I"hcatlin-image_science;T@@ [I"hcatlin-mini_magick;T@ @ [I"hc-httpclient;T@@ [I"hci;T@E@ [I"hcl;T@@ [I" hdcloud;T@@ [I" hdmake;T@'@[@Ș@@ [I"hdo-storting-importer;T@@ [I"headcount;T@@ [I"header-inserter;T@@ [I" headers;T@'@ [I"headjs-rails;T@@ [I" headless;T@@ [I"headless-squirrel;T@@ [I"headliner;T@6@ [I" headshop;T@@ [I"headstart;T@)@ [I"head_start;T@@ [I" headword;T@@ [I" health;T@"@ [I"healthcheck;T@E@ [I"health_check;T@,@ [I"health_checker;T@"@ [I"health-data-standards;T@ @ [I"healthety;T@n@ [I"health_graph;T@@ [I"health_inspector;T@@ [I"health_mode;T@6@ [I"health_monitor;T@+@ [I"health_rails;T@E@ [I"health_seven;T@'@ [I"health_stats;T@`@ [I" healthy;T@`@ [I"heap_dump;T@@ [I" hearken;T@`@ [I" hearsay;T@'@ [I"heartbeat;T@E@ [I"heartbeat-client;T@"@ [I" heater;T@@ [I" heaven;T@ @ [I"heavy_hash;T@"@ [I" hebcal;T@E@ [I" hebruby;T@z@ [I" Hebruby;T@u@ [I" heckle;T@@ [I" hector;T@@ [I"hector-identity-ee;T@ @ [I"hector-secret-channels;T@@ [I"hedbergism;T@@ [I" heel;T@O@ [I" heidi;T@x@ [I" heikou;T@'@ [I" heimdall;T@@ [I"heimdallr;T@@ [I"heimdallr-resource;T@N@ [I" heirloom;T@ @ [I"heisenberg;T@E@ [I" heist;T@@ [I"heliosphere;T@@ [I" Helipad;T@'@ [I" helium;T@@@ [I" hell;T@'@ [I" heller;T@@[I"hellhound;T@E@ [I"hellhound-twitter;T@@ [I" hello;T@'@ [I" Hello;T@@ [I"helloalbum;T@'@ [I"hello_andiputra;T@@ [I"hello_bar;T@'@ [I"hello_ext;T@'@ [I"hello_fax;T@E@ [I" hellogem;T@E@ [I"hello_gem;T@'@ [I"hello-gem;T@@ [I"hello_goodbye;T@@@ [I" hellogr;T@'@ [I" helloh;T@@ [I" hellohoe;T@[ @ [I"hello_lehmannds4;T@@ [I"hello-line;T@'@ [I"hellolorem;T@'@ [I"hello_mail;T@E@ [I"hello_natan;T@@ [I"helloqidi;T@E@ [I"hello_rubyconf;T@@ [I"hello-ruby-station;T@@ [I"hello_szrichard;T@E@ [I" hellotxt;T@@ [I"helloworld;T@'@ [I"hello_world;T@E@ [I"hello-world;T@N@ [I"helloworld1;T@E@ [I"helloworld3;T@@ [I"helloworlda;T@E@ [I"HelloWorldAlephCampos;T@@ [I"hello_world_bundler;T@@@ [I"helloworldgem;T@'@ [I"helloworld-pk;T@'@ [I"hello-world-rails;T@@ [I"hello_world_raw_code;T@6@ [I" helmet;T@6@ [I"helpconverter;T@@ [I"helperful;T@@ [I"helperiffic;T@@ [I"helper_methods;T@ @ [I" helpers;T@`@ [I"helpful_configuration;T@@ [I"helpful_fields;T@@ [I" helphelp;T@V@ [I"help_popups;T@@ [I"helpscout;T@@ [I"helpscout-digest;T@'@ [I"help_spot;T@@ [I"help_spot_issues;T@'@ [I"HEMiDEMi4r;T@`@ [I"hemingway;T@@ [I"hemju-google-analytics;T@- @ [I"hen;T@_@ [I" henchman;T@@ [I" henko;T@@ [I"henpecked;T@@ [I"henrietta_pussycat;T@@ [I"henry-container;T@N$@ [I" hensei;T@'@ [I" henshin;T@@ [I" henson;T@@ [I"hentry_consumer;T@@ [I" heploy;T@E@ [I"her;T@@ [I" hera;T@@ [I" heracles;T@'@ [I"heracles-wrapper;T@@ [I" herage;T@'@ [I" herald;T@[ @ [I"herbalist;T@@ [I"herbaltee;T@'@ [I" herbert;T@n@ [I"herbgobbler;T@@ [I" herbie;T@|@ [I" hercules;T@@ [I" herd;T@E@ [I" herder;T@@ [I" herdis;T@V@ [I" heredity;T@@ [I"heredoc_unindent;T@x@ [I"here_places;T@E@ [I" heritage;T@@ [I"herman-haml-sprockets;T@V@ [I" hermes;T@@ [I" hero;T@@ [I"herodotus;T@E@ [I"heroix_api;T@`@ [I" heroku;TU;[I" 2.33.5;T@ [I"heroku_addon;T@'@ [I"heroku-api;T@@ [I"heroku-autoscale;T@I@ [I"heroku_backups;T@@ [I"heroku_backup_task;T@`@ [I"heroku-bartender;T@@ [I"heroku-client;T@@ [I"heroku_cloud_backup;T@`@ [I"heroku_db_env;T@E@ [I"heroku-deflater;T@@ [I"!heroku_delayed_job_autoscale;T@n@ [I"heroku_deploy;T@!@ [I"heroku-deploy;T@@ [I"heroku_deployment;T@ @ [I"&heroku_development_email_enabling;T@'@ [I"heroku-dev-env;T@E@ [I"heroku_dj_auto_scale;T@@ [I"heroku-domainr;T@`@ [I"heroku_env;T@@ [I"heroku-environment;T@'@ [I"heroku_external_db;T@@ [I"heroku-forward;T@@ [I"herokugarden;T@@ [I"heroku_header;T@@ [I"heroku-helper;T@@ [I"herokuise;T@B@ [I"heroku_log_parser;T@'@ [I"heroku_manager;T@`@ [I"heroku_migrator;T@@ [I"heroku-mongo-backup;T@@ [I"heroku-mongo-backup-pm;T@@ [I"heroku_mongoid;T@'@ [I"heroku_mongo_watcher;T@@ [I"heroku-multi;T@`@ [I"heroku-nav;T@t@ [I" herokuni;T@@ [I"heroku_notification;T@'@ [I"heroku-periscope;T@@ [I"heroku_plus;TU;[I" 5.0.0;T@ [I"heroku-qc-autoscale;T@n@ [I"heroku-rails;T@"@ [I"heroku-rails-saas;T@@ [I"heroku-rake;T@E@ [I"heroku-rds;T@@ [I"heroku-readonly;T@@ [I"heroku_release;T@,@ [I"heroku-resque-auto-scale;T@@@ [I"heroku_resque_autoscaler;T@@ [I"!heroku-resque-workers-scaler;T@1@ [I"heroku_s3_backup;T@'@ [I"heroku-s3-backup-zinergia;T@@ [I"heroku_san;TU;[I" 4.0.7;T@ [I"heroku_san_gt;T@@ [I"heroku_san_sanity;T@n@ [I"heroku_scale_scheduler;T@"@ [I"heroku-socks;T@'@ [I"heroku_super_backup;T@E@ [I"heroku_tasks;T@+@ [I"heroku-tokyotyrant;T@@ [I"heroku-vraptor-scaffold;T@- @ [I"heroscale;T@`@ [I"heroswitch;T@E@ [I" herpes;TU;[I" 0.0.2.8;T@ [I" hessian;T@@ [I" hessian2;T@@ [I"HeSYINUvSBZfxqA-capistrano;TU;[I" 2.5.28;T@ [I"&HeSYINUvSBZfxqA-capistrano_colors;T@u @ [I"#HeSYINUvSBZfxqA-capistrano_log;T@E@ [I"HeSYINUvSBZfxqA-foreman;TU;[I" 0.20.0.4;T@ [I"HeSYINUvSBZfxqA-veewee;TU;[I" 0.203.3;T@ [I"heterocera;T@@ [I"hetzner-api;T@ @ [I"hetzner-bootstrap;T@@ [I"hetzner-cli;T@@ [I"hex;T@@ [I" hexa;T@@ [I" hexabat;T@E@ [I"hexcms-rails;T@'@ [I"hexcore-rails;T@`@ [I" hexdump;T@@ [I"hexgnu-libsvm-ruby-swig;TU;[I" 0.1.3.1;T@ [I" hexoid;T@I@ [I"hex_string;T@@ [I"hexwrench;T@E@ [I" hexy;T@@@ [I"hey_i_am_over_here;T@'@ [I" heyruby;T@@ [I" heywatch;T@N@ [I"heyzap-authlogic-oauth;T@G @ [I"heyzap-authlogic-oid;T@ @ [I"heyzap-contacts;T@@ [I"heyzap_publisher_api;T@@ [I" hflat;T@@ [I" hflr;T@@ [I" hflr2;T@@ [I" hgit;T@'@ [I"hhry-typhoeus;T@x@ [I"hhvacation;T@E@ [I" hiccup;T@@ [I" hickey;T@E@ [I"hide_asset_logs;T@@ [I"hide_attributes;T@+@ [I"hide_columns;T@@ [I"hidemyass;T@6@ [I"hide_my_ass;T@E@ [I" hideous;T@@ [I" hidlib;T@C@ [I" hiera;T@x@ [I"hiera-classifier;T@'@ [I"hiera-dyml;T@"@ [I"hiera-file;T@@ [I"hiera-gpg;T@@ [I"hiera-http;T@E@ [I"hiera-json;T@x@ [I"hiera-mysql;T@`@ [I"hiera-puppet;T@@ [I"hierarchical_config;T@R @ [I"hierarchical_menu;T@+@ [I"hierarchical_page_titles;T@@ [I"hierarchy;T@ @ [I"hierarchy_snapshot;T@'@ [I"hiera-redis;T@@ [I"hiera-redis-backend;T@'@ [I"hiera-simpledb;T@@ [I"hiera-yaml-gather;T@'@ [I"hiera_zookeeper;T@@ [I"hiera-zookeeper;T@6@ [I"hierclust;T@|@ [I"hieroglyph;T@|@ [I"hifi-ckeditor;TU;[I" 3.5.2;T@ [I" higcm;T@@ [I" higgs;T@@ [I" highball;T@E@ [I" highcarb;T@@ [I"highcharts;T@@ [I"highcharts-js-rails;T@@ [I"highcharts-rails;T@)@ [I"higher_expectations;T@E@ [I"highgroove_generator;T@x@ [I" highland;T@E@ [I"highlander;T@@ [I"highlight;T@;@ [I"highlight-code;T@'@ [I"highlight_js-rails;TU;[I" 7.1.0;T@ [I" highline;TU;[I" 1.6.15;T@ [I"highline-sgonyea;TU;[I" 1.6.12;T@ [I"highlogger;T@@ [I" highrise;T@i@ [I"highrise_assist;T@@ [I"highscore;T@J@ [I" hightail;T@"@ [I"hightouch;T@@@ [I"high_voltage;T@u@ [I" highway;T@'@ [I"highwinds;T@'@ [I" higml;T@'@ [I" hijack;T@@ [I" hijacker;T@@ [I"hijri_gem;T@@ [I" hike;T@u@ [I" hikidoc;T@"@ [I" hilfer;T@@ [I" hi-lite;T@E@ [I" hime;T@@ [I" hindbaer;T@@ [I"hinderinputjs-rails;T@E@ [I"hintable_levenshtein;T@@ [I"hip;T@@ [I" hipbot;T@@ [I" hipchat;T@X@ [I"hipchat-api;T@W@ [I"hipchat_bot;T@`@ [I"hipchat_nagios_notifier;T@'@ [I"hipchat-s3;T@@ [I"hipe-githelper;T@'@ [I"hipe-simplebtree;T@'@ [I" hippo;T@@ [I"hipstascale;T@1@ [I"hipsterhash;T@E@ [I"hipsteripsum;T@`@ [I"hir;T@@ [I"hiraku-rack;T@O@ [I" hirameki;T@@ [I" hirb;T@X@ [I"hirb-colors;T@'@ [I"hirb-unicode;T@@ [I" hiredis;T@@ [@@@[I" hirefire;T@+@ [I"hirefireapp;T@V@ [I"hirefire-resource;T@E@ [I" hireling;T@@ [I"hiringthing_api;T@@ [I"hiroshimarb;T@@ [I"hisrc-rails;T@@ [I"histocane;T@E@ [I"histograffle;T@@ [I"histogram;T@@ [I"historian;T@'@ [I" historic;T@@ [I"historical;T@I@ [I"historical_society;T@`@ [I" history;T@@ [I"history_book;T@@ [I"history_commander;T@@ [I"history_file;T@@ [I"historyjs-rails;T@@ [I" hisyo;T@@ [I" hitch;T@@ [I" hitchens;T@@ [I"hit_counter;T@@@ [I"hitfox_coupon_api;T@@ [I" hitimes;T@@[@@@[@@@ [@@@ [@@@[I" hitme;T@'@ [I" hits;T@E@ [I" hive;T@@ [I" hivemeta;T@@ [I"hivequeen_client;T@@ [I" hiwai;T@'@ [I"hj7;T@- @ [I" hkdf;T@@ [I" hk_geo;T@@ [I"hl;T@@ [I" hlspider;T@x@ [I"hlt;T@@ [I" hmachine;T@`@ [I"hmac_signature;T@'@ [I" hmac-uri;T@@@ [I" hmap;T@@ [I" hmdev;T@H@ [I"hmm;T@@ [I"hms;T@@ [I" hmstools;T@E@ [I" hmtime;T@`@ [I"hmx_client;T@@ [I"hn;T@@ [I" hn2json;T@V@ [I" hn_cli;T@@ [I" hnews;T@"@ [I" hoarder;T@'@ [I" hoatzin;T@@ [I" hobber;T@7@ [I" hobelar;T@"@ [I" hobo;T@ @ [I"hobo_devise;T@@ [I"hobofields;T@@ [I"hobo_fields;T@ @ [I"hobo_openid;T@@ [I"hobo_paperclip;T@"@ [I"hobo_simple_color;T@'@ [I"hobostove;T@`@ [I"hobosupport;T@@ [I"hobo_support;T@ @ [I"hobo-support;T@@ [I"hoccer-api;T@@ [I" hockey;T@'@ [I"hockeybrake;T@@ [I"hocus_pocus;T@@ [I" hodel_3000_compliant_logger;T@`@ [I"hoe;T@c@ [I"hoe-bundler;T@N@ [I"hoe-debugging;T@@ [I"hoe-deveiate;T@`@ [I"hoe-doofus;T@@ [I"hoe-gemcutter;T@@ [I"hoe-geminabox;T@@ [I"hoe-gemspec;T@@ [I"hoe-gemspec2;T@@ [I" hoe-git;T@@ [I"hoe-heroku;T@@ [I" hoe-hg;T@W@ [I"hoe-highline;T@@ [I"hoe-manifest;T@@ [I"hoe-manualgen;T@@ [I"hoe-mercurial;T@@ [I" hoe-reek;T@@ [I"hoe-roodi;T@@ [I"hoe-rubygems;T@@ [I"hoe-seattlerb;T@} @ [I"hoe-telicopter;T@@ [I"hoe-travis;T@@ [I"hoe-version;T@N@ [I" hoe-yard;T@@@ [I"hogan_assets;T@@ [I"hoi;T@@ [I" hoiio;T@@ [I" Hokkaido;T@|@ [I" hokuto;TU;[I"0.0.2.8.1.8;T@ [I" hola;T@@ [I"hola123789;T@"@ [I" hola2;T@'@ [I" hola347;T@@ [I" holaaaa;T@'@ [I"hola_adit;T@'@ [I"hola_aghyad;T@@ [I"hola_agis;T@E@ [I"hola_anand;T@@ [I"hola_ancientalex;T@"@ [I"hola_arturkrasnyh;T@'@ [I"hola_avgerinos;T@@ [I"hola_avnit;T@'@ [I"hola_birkoffh;T@@ [I"hola_bsherman26;T@@ [I"hola_calophi;T@@ [I"hola_cnunciato;T@E@ [I"hola_dagosi89;T@"@ [I"hola_daniel;T@E@ [I"hola_davidboy;T@E@ [I"hola_davidglivar;T@'@ [I"hola_dkissell;T@'@ [I"hola_dmitrysobolev;T@@ [I" holadobo;T@'@ [I"hola_drewch;T@@ [I"hola_enrique_delgado;T@@ [I"hola_enroxorz;T@@ [I"hola_funkylarma;T@'@ [I"hola_GMali;T@@ [I" hola_han;T@@ [I"hola-iuhoay;T@"@ [I"hola_jacv;T@@ [I"hola_jain;T@@ [I"hola-jasnow;T@E@ [I"hola_jimc;T@E@ [I"hola_jstuby;T@'@ [I"hola_jtsandlund;T@@ [I"hola_karlo;T@E@ [I"hola_kiubmen;T@'@ [I"hola_kshramt;T@@ [I"hola_kyletolle;T@x@ [I" holalaho;T@6@ [I" holalala;T@@ [I" hola-lds;T@@ [I"hola_luiscruz;T@@ [I"hola_mars2686;T@'@ [I"hola_micka;T@'@ [I"holamundo;T@@ [I"hola_nicholas;T@@ [I"hola_npras;T@'@ [I"hola_oleiman;T@E@ [I"holapizza;T@'@ [I" hola_pjc;T@@ [I"hola_price;T@'@ [I"hola_qiang;T@E@ [I"hola_quaranto;T@@ [I"hola_shun;T@@ [I"hola_surajpratap;T@'@ [I"hola_threadmetal;T@@ [I"hola_tiemei;T@@ [I" hola_van;T@@ [I"hola_viji;TU;[I" 0.0.001;T@ [I"hola_wenbo;T@E@ [I" hola_why;T@'@ [I"hola_wivarn;T@E@ [I" hola_ysh;T@@ [I"holder_rails;T@@ [I"holetse-linkedin;T@-@ [I" holia;T@"@ [I" holiday;T@'@ [I"holiday_japan;T@@ [I"holiday_jp;T@@ [I" holidays;T@W@ [I"hollandaise;T@`@ [I" holler;T@@ [I"hollybush;T@E@ [I"hollywood;T@@ [I" holman;T@'@ [I" holmes;T@'@ [I" holo;T@@ [I" holoas;T@'@ [I" hologem;T@'@ [I"holoserve;T@@ [I"holoserve-connector;T@@ [I"holygrail;T@6@ [I" holypack;T@'@ [I"hom;T@x@ [I"homeaway-api;T@6@ [I"home_cleaner;TU;[I"10.8.27.1;T@ [I"home_io_meas_receiver;T@@ [I" homeland;T@V@ [I"homeostasis;T@ @ [I" homeq;T@@ [I" homer;T@@ [I" home_run;T@- @[@@ @[@@ @ [@@ @ [I"homeschool;TU;[I" 0.0.1.46;T@ [I" homesick;T@X@ [I" homesync;T@!@ [I" homeward;T@@ [I"homework_report;T@E@ [I" homing;T@|@ [I" hominid;T@ @ [I" homura;T@`@ [I"hon;T@@ [I"honclient;T@!@ [I" hondana;T@`@ [I" honesty;T@@ [I"honey-auth;T@@ [I"honeybadger;T@@ [I"honey_badger;T@"@ [I"honey_captcha;T@'@ [I"honey-cms;T@Q-@ [I"honeycomb;T@@ [I" honey-do;T@X@ [I" honeypot;T@@ [I"honeypot-captcha;T@E@ [I" honk;T@'@ [I" honkdo;T@'@ [I"honkster-active_hash;T@n@ [I"honkster-acts_as_solr;T@@ [I"honkster-addressable;T@9 @ [I"honkster-attr_encrypted;T@N@ [I"honkster-auto_tagger;T@@ [I"honkster-bin;TU;[I" 0.6.3.6;T@ [I"honkster-braid;T@@ [I"honkster-encosion;T@@ [I"honkster-erector;T@@ [I"honkster-fasterer-csv;T@@ [I"honkster-friendly;T@J@ [I"honkster-giternal;T@@ [I"honkster-jelly;TU;[I" 0.13.2;T@ [I"honkster-js-test-server;T@R@ [I"honkster-mongo_mapper;T@@ [I"honkster-newrelic_rpm;TU;[I" 2.13.1;T@ [I"honkster-perftools.rb;T@@ [I"honkster-rack-ssl-enforcer;T@@ [I"honkster-redis-store;T@@ [I"honkster-screw-unit-server;T@y@ [I"honkster-selenium-rc;T@t@ [I"honkster-webrat;T@~@ [I" honkster-webrat-rspec-rails;T@`@ [I" hono;T@'@ [I" honstats;T@n@ [I" hood;T@@ [I"Hoodow-facebooker;TU;[I" 1.0.55;T@ [I" hoof;T@n@ [I" hook;T@@ [I" hooka;T@'@ [I" hookable;T@@ [I" hookah;T@'@ [I" hooked;T@@ [I" hookem;T@'@ [I" hooker;T@@ [I" hookers;T@|@ [I" hookify;TU;[I" 0.0.1.6;T@ [I"hook_me_up;T@E@ [I" hookout;T@`@ [I" hookr;T@@ [I" hooks;T@I@ [I" hookup;T@N@ [I" hooky;T@@ [I"hoopla_salesforce;T@@ [I"hoopla-savon;T@@ [I"Hoornet_string_extend;T@'@ [I" hoover;T@@ [I" hooves;T@D@ [I"hop;T@@ [I" hope;T@@[I"hopeless-wufoo;T@@ [I"hopsoft-acts-as-lookup;T@@ [I"hopsoft-fig;T@@ [I"hoptoad-api;T@@ [I"hoptoad_handler;T@|@ [I"hoptoad_notifier;T@@ [I" hoptoadr;T@'@ [I"hoptoad-ribbit;T@@@ [I"hoptoad_zmq_notifier;T@`@ [I" horai;T@@ [I" horario;T@E@ [I" horcrux;T@`@ [I"horde-rails;T@E@ [I"horde_rpc;T@@ [I" hork;T@@ [I"hornairs-scrobbler;T@@ [I"!hornairs-transmission-client;T@E@ [I"hornet-connector-ruby;T@@ [I"hornetseye-alsa;T@@ [I"hornetseye-dc1394;T@J@ [I"hornetseye-ffmpeg;T@@ [I"hornetseye-fftw3;T@@ [I"hornetseye-frame;T@@ [I"hornetseye-kinect;T@@ [I"hornetseye-linalg;T@@ [I"hornetseye-narray;T@@ [I"hornetseye-opencv;T@@ [I"hornetseye-openexr;T@@ [I"hornetseye-qt4;T@@ [I"hornetseye-rmagick;T@@ [I"hornetseye-v4l;T@@ [I"hornetseye-v4l2;T@@ [I"hornetseye-xorg;T@@ [I" hornsby;T@@ [I" horo;T@@ [I" horobi;T@'@ [I" horsee;T@`@ [I"horse_flags;T@@ [I" horseman;T@@ [I"hosemonkey;T@@ [I" hoshi;T@@ [I" host;T@6@ [I"hostconnect;T@g@ [I" hostdig;T@'@ [I"hosted-chef;T@@ [I"hosted_gem_development;T@@ [I"hostelify;T@@ [I" hoster;T@6@ [I" hostess;T@@ [I" hostesse;T@6@ [I"hostgitrb;T@E@ [I" hostinfo;T@@ [I" hostip;T@@ [I"hostipinfo;T@@ [I" hostlint;T@'@ [I"hostmanager;T@@ [I" hostmon;T@'@ [I" hostnet;T@`@ [I" hostor;T@@[@:@@ [@:@@[@:@O@ [I"host_range;T@'@ [I"host-redirector;T@@ [I" hosts;T@`@ [I" hosttag;T@@ [I"hostupdater;T@@ [I" hosum;T@@ [I" hot_body;T@`@ [I"hot_bunnies;T@@[I" hotcocoa;T@y@ [I" hoth;T@@ [I" hotkeys;T@@@ [I"hot_like_sauce;T@@ [I"hotmailer;T@@ [I"hot_or_not;T@^@ [I"hot-or-not;T@@ [I" HOTP;T@@ [I" hotpixiv;T@@ [I"hot_potato;T@@ [I" hotseat;T@X@ [I"hotspotlogin;T@ @ [I" hotspots;T@@ [I" hot_tub;T@"@ [I"hot_uk_deals;T@@ [I" hotwire;T@+@ [I" houdah;T@@ [I" houdini;T@@ [I"houdini-rails;T@1@ [I"houdini-rails3;T@g@ [I"houdinirx;T@@ [I"hourglass;T@E@[I"hourly_backup;T@g@ [I" hours;T@'@ [I" house;T@'@ [I"housefire;T@@ [I" houston;T@`@ [I"HoustonLibrarySearch;T@@ [I"hoverboard;T@@ [I"hovercraft;T@@ [I"how_are_we_doing;T@@ [I" howcast;TU;[I" 0.7.15;T@ [I" howdoi;T@'@ [I" howdy;T@@ [I" howitzer;T@@ [I" howkast;T@'@ [I" howl;T@@ [I" howler;T@@ [I"howlingmine-client;T@|@ [I" howlr;TU;[I" 0.2.0.43;T@ [I"hoy;T@'@ [I"hoygancop;T@H@ [I"hoygan_validator;T@ @ [I" hparser;T@x@ [I" hpdf;T@,*@[@@,*@ [I"hpp;T@@@ [I"hprevalence;T@@ [I" hpricot;TU;[I" 0.6.164;T@[@@@[@@@[@@@1[@@@ [@@@[I"hpricot_scrub;T@[@ [I"hpricot-scrub;T@@ [I" hqmf2js;T@@ [I"hqmf-parser;T@@ [I"hquery-patient-api;T@@ [I"hrl;T@!@ [I"hrmparser;T@X@ [I" hrt_bus;T@n@ [I"hscrubber;T@@ [I" hsc-twitter-bootstrap-rails;T@@ [I" hsdeploy;T@Q@ [I" hsign;T@'@ [I" hsmr;T@'@ [I"hstore-attributes;T@@ [I"hstore_attribute_support;T@@ [I"hstore_flags;T@"@ [I"hstore_utils;T@'@ [I"hsume2-hirb;T@y@ [I"hsume2-localtunnel;T@[ @ [I"hsume2-state_machine;T@W@ [I"ht;T@@ [I" ht2p;T@n@ [I"htanata-acts_as_audited;T@@ [I" htauth;T@@ [I" htcp;T@E@ [I"ht-memcache-lock;T@@ [I"html2email;T@+@ [I"Html2Feedbooks;T@@ [I"html2markdown;T@@ [I"html2markdown-cli;T@E@ [I" html2md;T@6@ [I"html2record;T@'@ [I" html2tex;T@@ [I" html5;T@ @ [I"html5-beautifier;T@E@ [I"html5_boilerplate;T@'@ [I"html5-boilerplate;T@@ [I"html5forms-rails;T@+@ [I"html5jp_graphs;T@'@ [I"html5_layout;T@@ [I"html5-now-rails;T@@ [I"html5-rack-tidy;T@,@ [I"html5-rails;T@@ [I"html5shiv-rails;T@E@ [I"html5-slim-rails;T@E@ [I"html5small;T@@ [I"html5-starter;T@@ [I"html5-utils-rails;T@@ [I"html5_validator;T@'@ [I"html5_validators;T@@ [I"html_acceptance;T@p@ [I"html_attributes;T@@ [I"htmlbeautifier;T@n@ [I"html_builder;T@@ [I"htmlclipping;T@@ [I"html_colours;T@@ [I"htmlcompressor;T@@ [I"html_compressor;T@@ [I"htmlconverter;T@'@ [I"html_css_decorator;T@@@ [I" htmldiff;T@'@ [I" htmldoc;T@@ [I" htmldoc-hulihanapplications;T@,@ [I"htmldoc-rails;T@@ [I"#htmldoc_remote_compile_wrapper;T@[ @ [I" htmldog;T@@ [I"html_email_creator;TU;[I" 1.0.18;T@ [I"htmlentities;TU;[I" 4.3.1;T@ [I"htmlentitties;TU;[I" 4.2.1;T@ [I"html_errors;T@'@ [I"htmlfilter;T@@ [I" htmlfive;T@@ [I" html_gen;T@@ [I" htmlgrid;T@ @ [I" htmlgun;T@@ [I"html_helpers;T@;@ [I"html_inspector;T@@ [I" htmlize;T@s@ [I" htmlkick;T@E@ [I"htmlkickstart;T@'@ [I"html_massage;T@@ [I"html_matchers;T@'@ [I" html_me;T@'@ [I" html-me;T@E@ [I"html_meta;T@'@ [I" htmlmin;T@n@ [I" html_min;T@+@ [I"html_mini;T@E@ [I"html_minifier;T@"@ [I"html_mockup;T@7@ [I"html_namespacing;T@@ [I"html_notes;T@@ [I"html_package;T@n@ [I"html_page_title;T@@@ [I"html-pipeline;T@@ [I"html-pipeline-no-charlock;T@@ [I"html_press;T@@ [I"html_reader;T@'@ [I"html-schema;T@@ [I"html_skeleton;T@@ [I"html-skeleton;T@@ [I"html_slicer;T@@@ [I"html_spellchecker;T@@ [I"htmls_to_pdf;T@@ [I"html_table;T@'@ [I"html-table;T@@ [I"html_table_rails;T@'@ [I"html_tables;T@"@ [I"html_tagger;T@@ [I"html-temp;T@'@ [I"html-template-pro;T@@ [I"htmltokenizer;T@@ [I"htmltools;TU;[I" 1.10;T@ [I"html_to_plain_text;T@@ [I"html_truncator;T@@ [I"html-validator;T@E@ [I"html_writer;T@@ [I" htmr;T@'@ [I" htree;T@X@ [I" ht_retro;T@@ [I"httmultiparty;T@@ [I"httmultiparty_temp;T@@ [I" http;T@x@ [I" http2;T@ @ [I"http_accept;T@|@ [I"http_accept_language;T@@ [I"httpadapter;T@@ [I" HTTPal;TU;[I"30;T@ [I"httparrot;T@@ [I" httparty;T@- @ [I"httparty2;T@@@ [I"httparty-concern;T@@ [I"httparty-icebox;T@"@ [I"httparty-icebox-delooks;T@V@ [I"httparty_sober;T@@ [I"httpattack-lib;T@@ [I" httpauth;T@@ [I"http_base_auth;TU;[I" 0.0.2.5;T@ [I" httpbl;T@1@ [I"httpclient;T@J@ [I"httpclient-uploadio;T@@ [I"httpclient-xaop;T@r6@ [I"http_configuration;T@@ [I"http_connection;T@@ [I" httpdoc;T@@ [I"http_echo_server;T@@ [I"httperf-output-parser;T@'@ [I"httperfrb;T@@ [I"httperfrb-grapher;T@"@ [I"http-error;T@@ [I"Http_Error_Log;T@@@ [I"http_headers;T@R1@ [I" httphere;T@x@ [I" httpi;T@O@ [I"httpimagestore;T@@ [I" httping;T@@ [I"httpi-ntlm;T@Q@ [I" httpit;T@R @ [I"http_link_header;T@@ [I" httplog;T@@ [I" http_log;T@I@ [I"http_logger;T@,@ [I"http-log-parser;T@@ [I" httplz;T@@ [I"http_monkey;T@E@ [I"http_monkey-cookie;T@'@ [I" httpng;T@@ [I"http_objects;T@"@ [I"httpotato;T@@ [I"http_parser;T@6@ [I"http-parser-lite;T@@ [I"http_parser.rb;T@J@[@&@J@[@&@J@ [@&@J@ [I"http-pulse;T@"@ [I" httprb;T@|@ [I"http_redirect_test;T@6@ [I"http-request;T@@ [I"http-requestor;T@@ [I"http_request.rb;TU;[I" 1.1.14;T@ [I"http_resque;T@"@ [I"http_router;T@*@ [I"http_router_sinatra;T@'@ [I"http_sequence;T@'@ [I"http_server;T@@ [I"http_session;T@@ [I"httpsimple;T@@ [I"http_spec;T@@ [I"http_spew;T@@ [I"http_statsd;T@E@ [I"http_status_exceptions;T@@ [I"http-testing;T@6@ [I"httpthumbnailer;T@@ [I"httpthumbnailer-client;T@`@ [I"http_tools;T@"@ [I"http_tracker;T@`@ [I"!http_url_validation_improved;T@ @ [I"http_validator;T@+@ [I"http_vanilli;T@"@ [I"http-wiretap;T@`@ [I" htttee;T@@ [I" htty;T@@ [I"htty-rack;T@@ [I" huami;T@@ [I"huawei_3g_unlock;T@@ [I"hub;TU;[I" 1.10.4;T@ [I" hubbard;T@p@ [I" hubble;T@@@ [I" hubbub;T@@ [I" hubcap;T@@ [I" hubdate;TU;[I" 0.0.01;T@ [I" hubdown;T@n@ [I" hubeye;T@@ [I" hubflow;T@@ [I" hubish;T@'@ [I" hubless;T@@ [I" hubload;T@@ [I"hubmaster;TU;[I" 0.0.09;T@ [I" hubot;T@'@ [I" hubris;T@@ [I" hubruby;T@`@ [I" hubspot;T@E@ [I" hudkins;T@'@ [I" hudson;T@@ [I"hudson-api;T@@ [I"hudson_deployer;T@E@ [I"hudson-remote-api;T@@ [I"hudson-to-pisswhistle;T@@@ [I"hudson-war;TU;[I" 1.395;T@ [I"hue;T@@ [I" huesos;T@@ [I" huey;T@@ [I"huffshell;T@@ [I"huge-boilerplate-middleman;T@[ @ [I" hugeurl;T@n@ [I" hugh;T@`@ [I" hugo;T@@ [I"hugo-zerigo_dns;T@@ [I" hugs;TU;[I" 2.7.1;T@ [I"huh;T@@ [I" hukd;T@;@ [I" hulk;T@@ [I"hulk_smash;T@N@ [I" hull;T@@@ [I" hullapp;T@ @ [I"hulu-automuter;T@@ [I"hulu-show;T@@ [I"hum;T@@ [I"human_attribute;T@@ [I"human_behavior;T@@ [I"human_codes;T@;@ [I"human_date;T@E@ [I"human-date;T@E@ [I"human_digest;T@`@ [I"humane-rails;TU;[I"3.0.5.0.1.5;T@ [I"human_hash;T@@ [I" humanize;T@@ [I"humanize-bytes;T@@ [I"humanized;T@@ [I"humanizer;TU;[I" 2.4.4;T@ [I"human_name_parser;T@@ [I" humanoid;T@N'@ [I" humans;T@E@ [I"human_size_to_number;T@@ [I"humantime;T@I@ [I"human_user_agent;T@@ [I"humanzz-activemerchant;TU;[I" 1.7.1.1;T@ [I"humble_auth;T@@ [I"hummingbird;T@@ [I"humongous;T@@ [I" humps;T@'@ [I" humpyard;T@'@ [I"humpyard_form;T@"@ [I"hungryblank-cache-money;T@"@ [I"hungrynoodle;T@@ [I"hungrysquirrel_test_gem;T@@ [I"hungrytable;T@n@ [I"hungrytable-pjc;T@V@ [I" hunspell;T@`@ [I"hunspell-ffi;T@6@ [I"hunspell-i18n;T@I@ [I" hunt;T@R @ [I" hunter;T@E@ [I" hunter2;T@E@ [I" hupper;T@'@ [I" hurl;T@"@ [I"hurricane;T@E@ [I" hurry;T@@ [I" hush;T@'@ [I" husk;T@'@ [I" husler;T@@ [I" hwaddr;T@"@ [I" hwia;T@@ [I"hx;TU;[I" 0.26.1;T@ [I" hyber;T@'@ [I"hybridgroup-octokit;T@y@ [I"hybridgroup-proxy;T@@ [I"hybridgroup-sphero;T@;@ [I"hybridgroup-whenever;TU;[I" 0.39;T@ [I"hybrid_memcache;T@6@ [I" hyde;T@"@ [I" hydeweb;T@@ [I" hydna;T@@@ [I" hydra;TU;[I" 0.24.0;T@ [I" hydra5;T@@ [I"hydra-access-controls;TU;[I" 5.2.0;T@ [I"hydra_attribute;T@@ [I"hydra-batch-edit;T@@ [I"hydra_cache;T@'@ [I"hydra-console;T@@ [I"hydra-core;T@V@ [I"hydra-file-access;TU;[I" 5.1.0;T@ [I"hydra-head;T@V@ [I"hydra-ldap;T@@ [I"hydra-mods;T@@ [I"hydra-pbcore;T@x@ [I"hydra-testing;T@'@ [I"hydra-tutorial;T@@ [I"hydrogen_bondifier;T@@ [I"hydroponics;T@@ [I" hyena;T@'@ [I" hyogen;T@@ [I" hyouki;T@E@ [I" hype;TU;[I" 42.0.0;T@ [I" hypem;T@@ [I" hypeman;T@'@ [I" hypembot;T@@ [I" hyper;T@@ [I"hyperactive;T@@ [I"hyper_active_record;T@'@ [I"%hyperbolist-rack-codehighlighter;T@"@ [I"hyperbolist-ultraviolet;TU;[I" 0.10.203;T@ [I"hyperclient;T@@ [I" hyperdoc;T@`@ [I"hyperdrive;T@'@ [I"hyper-graph;T@@ [I"hyperimage;T@'@ [I" hyperion;T@@ [I"hyperion-api;T@@ [I"hyperion-mysql;T@@ [I"hyperion-postgres;T@@ [I"hyperion-riak;T@@ [I"hyperion-sql;T@@ [I"hyperion-sqlite;T@@ [I"hyperloglog;T@'@ [I"hyperloglog-redis;T@O@ [I"hypermedia;T@u@ [I"hypermodel;T@@ [I"hyperpublic;T@`@ [I"hyper_record;T@@ [I"hyperscore;T@@ [I"hypersonic;T@@ [I"hyperspec;T@@ [I"hypertemplate;T@@ [I"hypertext_client;T@@ [I"hypodermic;T@@@ [I" hyrarchy;T@@ [I"hysios-fusefs;T@'@ [I"hystorical;T@@ [I"hyves_oauth;T@E@ [I" hz2py;T@@ [I"hz_on_fly;T@'@ [I"i0n_rails3_generators;T@W.@ [I" i15r;T@@ [I" i18n;T@@ [I"i18n_action_mailer;T@I@ [I"i18n-active_record;T@E@ [I"i18n-airbrake;T@E@ [I"i18n_alchemy;T@'@ [I"i18n_attributes;T@1@ [I"i18n_auto_scoping;T@I@ [I"i18n_backend_database;T@'@ [I"!i18n_backend_database_rails3;T@@ [I"i18n-backend-http;T@@@ [I"i18n_backend_sequel;T@@ [I"i18n_column;T@@ [I"i18n-complements;T@n@ [I"i18n_country_select;T@@ [I"i18n-country-translations;T@@ [I"i18n_data;T@@ [I"i18n-date;T@@ [I"i18n-docs;T@"@ [I"i18n_emails;T@@ [I"i18n-export;T@@ [I"i18n_fields;T@@@ [I"I18nFloat;T@@ [I"i18n_generators;T@u@ [I"i18n-generators;T@;@ [I"i18n_googledocs;T@>x@ [I"i18n-grep;T@@ [I" i18n_gui;T@@ [I"i18n-inflector;TU;[I" 2.6.6;T@ [I"i18n-inflector-rails;T@ @ [I"i18n-inline_forms;T@!@ [I" i18nizer;T@E@ [I" i18n_js;T@@ [I" i18n-js;T@ @ [I"i18n-js_padrino;T@@ [I" i18n_kit;T@@ [I"i18n_label;T@@ [I"i18n_lazy_lookup_generator;T@'@ [I"i18n_link;T@1@ [I"i18n_locale_editor;T@@ [I"i18n_lookup_tracer;T@@ [I"i18n-message;T@E@ [I"i18n-missing_translations;T@E@ [I"i18n_multisite;T@@ [I"i18n_namespace;T@@ [I"i18n-one_sky;T@~T@ [I"i18n_plus;T@|@ [I"i18n_rails_helpers;T@ @ [I"i18n_redis;T@@ [I"i18n-router;T@@ [I"i18n_routes;T@'@ [I"i18n_routing;T@@ [I"i18n_scope;T@+@ [I"i18n_scopes;T@x@ [I"i18n_screwdriver;T@ @ [I"i18n-sequel_bitemporal;T@@ [I"i18n_shoulda_generator;T@@ [I"i18n_sort_keys;T@'@ [I"i18n-spec;T@@ [I"i18n_sync;T@@ [I"i18n_template;T@'@ [I"i18n-timezones;T@@ [I"i18n_toolbox;T@E@ [I"i18n_tools;T@@ [I"i18n-tools;T@@ [I"i18n_translation_spawner;T@p@ [I"i18n_translator;T@'@ [I"i18n-translators-tools;T@,@ [I" i18n_url;T@@ [I"i18n-validator;T@'@ [I"i18n-verify;T@@ [I" i18n_viz;T@@ [I"i18n_yaml_generator;T@'@ [I"i18n_yaml_sorter;T@@ [I"i2c;T@@ [I" i2cssh;T@+@ [I"i2p;T@|@ [I" i3-ipc;T@+@ [I" i81n;T@@ [I"iab-ActiveRecordBDBXml;T@@ [I"iab-BrokerAdapters;T@+@ [I" iab-FinancialProductBuilder;T@@ [I"iab-InsuranceBizLogic;T@@ [I" iab-Oil;T@@ [I"iab-RailsGlue;T@+@ [I"iab-WhiteLabeling;T@@@ [I"iaddict-bcms_fckeditor;T@@ [I"iam;T@I@ [I"iamakimmer_game;T@@ [I" iamstef;T@'@ [I"i_am_valid;T@E@ [I" iana;T@"@ [I"iap-validator;T@@ [I" iarea;T@@ [I" iated;T@'@ [I" iauthu;T@E@ [I"ib;T@,@ [I"iba;T@E@ [I"ib_active_extension;T@@ [I"iban-check;T@`@ [I"iban-tools;T@V@ [I"iban_validation;T@'@ [I" ibham;T@@@ [I" ibm_db;TU;[I" 2.5.5;T@[@U;[I" 2.5.11;T@ [@@@ [@@@[I"ibm_sbdtc_rest;T@@ [I" ibruby;T@u I"i686-darwin8.9.1;T[@@u @dn[@@u @[I" ib-ruby;T@e@ [I"ic;T@'@ [I"ical2gcal;T@@ [I"ical_builder;T@@ [I"icalendar;T@u@ [I"icalendar2;T@`@ [I"ical_importer;T@L=@ [I"ical_punch;T@@ [I"icanhasaudio;T@6@ [I" icarus;T@'@ [I"icb;T@@ [I" icbm;T@@ [I"ice;T@@ [I" iceauth;T@"@ [I" iceberg;T@X@ [I" icebox;T@@ [I"icebreaker;T@@ [I" ice_cube;T@@ [I"ice_cube_conrad;T@@ [I"ice_cube_english;T@R @ [I"iced-coffee-script;T@ @ [I"icehouse-right_aws;T@ @ [I" ice_nine;T@@ [I"ice-rails;T@'@ [I"ice_rocket;T@E@ [I" ichabod;T@E@ [I" ichannel;T@e@ [I"icheckmovies;T@@ [I" ichiban;T@@ [I" iching;T@@ [I"ichverstehe-em-spec;T@I@ [I" iciba;T@@ [I"icims_client;T@@ [I" icinga;T@g@ [I"icinga-rest;T@`@ [I"icinga-web;T@'@ [I"ick;T@@ [I"iclassify-interface;T@@ [I" icloud;T@E@ [I" icmp4em;T@E@ [I"icomoon-rails;T@@ [I"icon-buttons;T@@ [I" iconic;T@@ [I"icon_link;T@'@ [I"icon_links;T@,@ [I"iconmonstr-rails;T@@ [I"iconoclasm;T@@ [I"iconoclast;T@+@ [I" iconPlot;T@@ [I"i_contact;T@@ [I"icontact-api;T@@ [I" icontrol;T@@ [I" iconv;T@@ [I"ics;T@@ [I" icss;T@@ [I"icu;T@e@ [I" icu4r;TU;[I"0.1.4.2006.05.29;T@ [I" icu4r_19;T@@ [I" iCuke;T@X@ [I" icu_name;T@@ [I"icunicode;T@+@ [I"icu_ratings;T@@ [I"icu_tournament;T@1@ [I" id2path;T@`@ [I"id3;T@@ [I"id3lib-ruby;T@@[@=@@ [@=@@[I"id3rename;T@@ [I" id3tag;T@@ [I" idclight;T@6@ [I" id_coder;T@@ [I" ideal;T@- @ [I"idealian-git-pivotal;T@,@ [I"ideal-mollie;T@@ [I"id_encoder;T@'@ [I" ident;T@@ [I"identifier;T@T @ [I"identifies_as;T@@ [I" identify;T@`@ [I" identity;T@@ [I"identity_linker;T@@ [I" ideone;T@@ [I"ideone-ruby-api;T@q@ [I" ideyabox;T@@ [I" idgas;T@'@ [I" idhja22;T@O@ [I" idid;T@"@ [I" idiom;T@n@ [I" idiomag;T@@ [I" idiot;T@'@ [I" idkfa;T@@ [I"idl;T@@ [I"idle_whacker;T@E@ [I"idn;T@E@ [I" idn_ffi;T@`@ [I" idn-mihu;T@E@ [I" idn-ruby;T@@ [I"idonethis;T@@ [I"id_please;T@@ [I"idregistry;T@@@ [I"idsign-more;T@`@ [I"ids_rules_parser;T@@ [I" idstock;T@@ [I"id_stuffer;T@'@ [I"idt;T@@S[I" idzebra;T@`@ [I"ie6_fixer;T@@ [I"ie_conditional_tag;T@@ [I" ieee-fpu;T@'@ [I"ie_handler;T@n@ [I"ie_iframe_cookies;T@+@ [I" iemodal;T@"@ [I" ierail;T@[ @ [I"ie_snowman;T@@ [I"if;T@@ [I" if_blank;T@E@ [I"ifchanged;T@@ [I"ifd_tools;T@ @ [I"ifin24-client;T@@ [I" i_flash;T@@ [I" ifmapper;T@@ [I" ifmb;T@"@ [I" iformat;T@@ [I"ifree-sms;T@`@ [I"if_statement;T@@ [I"ifttt-gdash;T@@ [I" ifuture;T@V@ [I" if-vlad;T@'@ [I"if-vlad-recipes;T@@ [I"ig3client;T@@ [I" ig3cmd;T@@ [I" ig3tool;T@@ [I"ign;T@ @ [I" ignite;T@'@ [I" ignition;T@O@ [I"ign-mongo_mapper;TU;[I" 0.8.6.2;T@ [I"ignorable;T@@ [I"ignore_nil;T@@ [I"ignore_this_01;T@'@ [I"ignore_this_02;T@'@ [I"ignore_this_gem;T@@ [I"ign-phashion;T@@ [I" igor;T@'@ [I" igo-ruby;T@|@ [I"igp;T@@ [I"igpay_atinlay;T@@ [I" igraph;T@ @ [I"igrigorik-em-http-request;T@@ [I"igs_bar_chart;T@@ [I"igs_pie_chart;T@V@ [I"i_heart_quotes;T@@ [I" ihelp;T@@ [I"i_helpers;T@@@ [I"ihoka-friendly;T@y@ [I" iht.li;T@'@ [I"iii;T@`@ [I"iis;T@E@ [I"iis-access-log-parser;T@@ [I" iisadmin;T@'@ [I"iisconfig;T@@ [I"ijin-right_aws;T@ё@ [I"ikamusume;T@@ [I" ikbis;T@@ [I"ikm-opengraph;T@n@ [I" iknow;T@,@ [I" ikran;T@@ [I" ilesspainfulclient-cucumber;T@6@ [I" ilike;T@"@ [I"ilinkmaker;T@@ [I"illformed_requirement;T@'@ [I" illiad;T@@ [I"illyan_client;T@@ [I"i_love_unicode;T@E@ [I" image;T@-!@ [I" image8;T@@ [I" imagebin;T@ @ [I"image_bundle;T@E@ [I"image_button_to;T@@ [I"image_cache;T@@ [I"imagecore;T@6@ [I"image_corrupter;T@@ [I"image_downloader;T@,@ [I"imagefactory-console;T@x@ [I"image-file;T@@@ [I"image_genie;T@x@ [I"image_optim;T@@ [I"image-optimizer;T@I@ [I"image_picker;T@@ [I"image_proc;T@ @ [I"imageproxy;T@@ [I"ImageResize;T@@ [I"image_resizer;T@@ [I"imageruby;T@@ [I"imageruby-bmp;T@@ [I"imageruby-bmp-c;T@`@ [I"imageruby-c;T@@ [I"imageruby-devil;T@@ [I" imagery;T@I@ [I"image_science;T@u"@ [I"image_scraper;T@@ [I"images_fetcher;T@@ [I"imagesize;T@`@ [I"image_size;T@@ [I"imagesnap;T@'@ [I"image_sorcery;T@ @ [I"ImageSorcery;T@@ [I"image_spec;T@"@ [I"image_squeeze;T@|@ [I"image_suckr;T@@ [I"imagetiler;T@1@ [I"imagetooth;T@@ [I" imageurl;T@@ [I"image_validator;T@@ [I"imagevenue;T@@ [I"image_voodoo;T@@ [I"imaginable;T@1@ [I"imaginary;T@'@ [I"imaginator;T@|@ [I" imagine;T@@ [I"imagine-basic_list_view;T@+@ [I"imagine_cms;T@@ [I"imagine-galleria_view;T@g@ [I"imagine-orbit_view;T@g@ [I" imagize;T@@ [I" imagut;T@E@ [I" imanip;T@|@ [I"imap_archiver;T@V@ [I"imap-backup;T@@ [I"IMAPCleanse;T@N@ [I"imap-feeder;T@I@ [I" imapget;T@n@ [I"imap_processor;T@@ [I"imapstore;T@@ [I"imap_tickler;T@'@ [I"imap_to_rss;T@s@ [I"imasquerade;T@,@ [I" imatch;T@@ [I" imbue;T@E@ [I"im_contacts;T@N'@ [I" imdb;T@^%@ [I" imdb_api;T@@ [I"imdb_api_lite;T@@ [I"imdb_celebrity;T@@ [I"imdb_lists;T@@ [I" imdb_og;T@@ [I"imdb_parser;T@@ [I"imdb_party;T@@ [I"imdb-scan;T@E@ [I"imdb_vote_history;T@@ [I"imedo_client_communication;T@'@ [I"imedo_monitoring;T@'@ [I" imforger;T@I@ [I"imgareaselect-rails;T@@ [I"img_gravatar;T@@ [I" imgkit;T@s@ [I" imgry;T@1@ [I" imgshark;T@@ [I" img-sort;T@@ [I" imgsrc;T@&@ [I" imgur;T@@ [I" imgur2;T@u@ [I" imhotep;T@E@ [I" imified;T@"@ [I"imified_party;T@@ [I" imine;T@6@ [I" imitate;T@@ [I"imitation;T@'@ [I"imitator_x;T@'@ [I" im-kayac;T@@ [I"immigrant;T@+@ [I" immortal;T@W@ [I"immortalize;T@,@ [I"immutable;T@@ [I"immutable_attributes;T@N@ [I"immutablebox;T@'@ [I"immutable_model;T@'@ [I"immutable_struct;T@@ [I" imobile;T@@ [I" imp3;T@|@ [I" impact;T@@ [I"imparcial;T@n@ [I"impartial;T@'@ [I"impartial-rails;T@"@ [I"impas-client;T@@ [I"impatient;T@@ [I"Impatient;T@@ [I"impawards;T@@ [I"imperator;T@@ [I"imperator-ext;T@@ [I"impermium;T@@ [I" impl;T@@ [I"implicitly;T@E@ [I" import;T@@ [I"importable;T@@ [I"import_contacts;T@'@ [I" importer;T@@ [I"import_everything;T@6@ [I"import_everything_rails;T@@ [I" importex;T@`@ [I"import_framework;T@'@ [I"import_from_ebay;T@@ [I"import-pojo;T@@ [I"imposition;T@' @ [I" imposter;T@@ [I" impostor;T@@ [I"imprecations;T@'@ [I" impress;T@@ [I"impresser;T@@ [I"impressiongram;T@@ [I"impressionist;T@@ [I"impressionizer;T@"@ [I"impromptu;T@@ [I"improved_logging;T@@ [I"improved-rack-throttle;T@X@ [I" impulse;T@n@ [I"impulse-cube;T@@ [I"im_ron_burgundy;T@E@ [I" ims-lti;T@x@ [I" imstat;T@@ [I"imw;T@@ [I" inaba;T@E@ [I"inaction_mailer;T@6@ [I"inactive_record;T@@ [I" inari;T@`@ [I"in_bed_with;T@@ [I" inbound;T@'@ [I" inbox;T@@ [I" inboxer;T@'@ [I" inboxes;T@I@ [I"inbox-sync;T@@ [I" incept;T@@ [I"inception;T@@ [I" incite;T@'@ [I" include;T@'@ [I"include_any;T@E@ [I"include_behaviors;T@@ [I"include_complete;T@6@ [@^@6@y;[@^@6@1[I"included-in;T@@ [I"includejs;T@@ [I"include_js;T@@ [I" includer;T@`@ [I"includes-count;T@@ [I"including;T@@ [I"increment;T@@@ [I"increment_persistent;T@E@ [I" incurve;T@+@ [I" indeed;T@@@ [I"indeed_api;T@"@ [I"indeed-ruby;T@'@ [I"indefinite_article;T@@ [I"indentation;T@@ [I"indentation-parser;T@@ [I"Indentinator;T@@ [I"indent_parser;T@E@ [I" indentr;T@'@ [I"indexed_search;T@@@ [I" indexer;T@@ [I"indexotron;T@@ [I"indextank;T@@ [I"index-tanked;T@@ [I"index_view;T@@ [I"indicator;T@@ [I"indicator_delcom;T@"@ [I"indicators;T@@ [I"indie-raster;T@@ [I"indifferent_eval;T@@ [I"indifferent-variable-hash;T@@ [I"indirect-jekyll;T@Y@ [I"indirect-webrat;T@!@ [I"Indirizzo;T@@ [I" indis;T@6@ [I"indis-arm;T@@ [I"indis-core;T@+@ [I"indis-macho;T@@ [I"indofaker;T@@ [I"induction_cannon_01;T@@ [I" indy;T@@ [I"in_enumerable;T@@ [I"inequal_opportunity;T@@ [I" inetmgr;T@@[@@@ [I" in_every;T@@ [I"inferred_slug;T@@ [I" inferx;T@,@ [I"infinispan-ruby-client;T@E@ [I"infinite-loop;T@@ [I"infinitescrolling-rails;T@@ [I" infinity;T@V@ [I"infinity_test;T@@ [I" inflame;T@`@ [I"inflection;T@@ [I"inflection-js-rails;T@`@ [I"inflections;TU;[I"3.2.9.20121206;T@ [I"inflectious;T@,@ [I"inflector;T@'@ [I"inflector_extension;T@@ [I"inflector_literals;T@@ [I"influence;T@@ [I"infobright-loader;T@'@ [I"infochimps-guard-chef;T@@ [I"infomeme_client;T@R@ [I"infopark_cloud_connector;TU;[I"6.8.0.529.114081979;T@ [I"infopark_component_cache;T@@ [I"infopark_crm_connector;T@@ [I"infopark_fiona_connector;T@@ [I"infopark-politics;T@@ [I"infopark_rails_connector;T@@ [I""infopark_rails_connector_meta;T@@ [I"infopark_reactor;T@@ [I" infopark_reactor_migrations;T@@ [I" inform;T@@ [I" informal;T@@ [I"informant;T@@ [I"in_format;T@'@ [I"information_card;T@@ [I" informer;T@@ [I" Informer;T@@ [I"info_unit;T@@@ [I" infowars;T@;@ [I"infusion_api;T@@ [I"infusionsoft;T@@ [I"ing;T@@ [I"ingamer_raws;T@@ [I"ingamer_rhc;T@@ [I"ingm-handler;T@@ [I"ingoweiss_generators;T@@ [I"ingredient_converter;T@@ [I" ingreedy;T@"@ [I"inheritance_module_eval;T@@ [I"inherited-hash;T@@ [I"inherited_rails_views;T@@ [I"inherited_resources;T@ @ [I" inherited_resources_helpers;T@@ [I"inherited_resources_views;T@@ [I"inherited_templates;T@@ [I"inherited_views;T@E@ [I"inherits_from;T@E@ [I"inherits_many;T@E@ [I"inherits_values_from;T@E@ [I"ini;T@`@ [I" inifile;T@@ [I" inimit;T@@ [I" iniparse;T@@ [I"inireader;T@`@ [I" init;T@@ [I"initforthe-cookies;T@'@ [I"initforthe-roundabound;T@R @ [I" initjs;T@@@ [I" init.js;T@'@ [I" inject;T@'@ [I"injectable;T@@ [I"injectable_rails_env;T@E@ [I"injection;T@@ [I" injector;T@E@ [I" in_json;T@@ [I"ink;T@6@ [I" inkan;T@@ [I" inkdit;T@@ [I" inkit;T@ @ [I" inkling;T@@ [I"inkling_api;T@6@ [I"inkling_cms;T@'@ [I"inkling-cms;T@'@ [I" inko;T@@ [I"ink-rails;T@@ [I"inkscape_merge;T@@@ [I" inline;T@@ [I"inline_attachment;T@@ [I"InlineAttachment;T@@ [I"inline-blocks;T@@ [I"inline_css;T@@ [I"inline_forms;TU;[I" 1.6.9;T@ [I"InlineFortran;T@@ [I"inline_image;T@@ [I"inline_javascript;T@@ [I"inline-ook;T@@ [I" inliner;T@'@ [I"inline-style;T@@ [I"inline_styles;T@x@ [I"inline_styles_mailer;T@n@ [I"inline-style-umanni;T@E@ [I"inline_testing;T@`@ [I"inline_uploader;T@`@ [I"inline_validation;T@E@ [I"inline_view_template;T@@ [I"in_memory_enumeration;T@@ [I" innate;TU;[I" 2012.12;T@ [I"innertube;T@@ [I"innodb_ruby;T@@ [I"innovative_graph_suite;T@E@ [I"innowhite;T@@ [I"innowhite_api;TU;[I" 1.1.7.1;T@ [I"innowhitei_api;T@;@ [I" inochi;TU;[I" 6.1.0;T@ [I"inotify-ffi;T@@ [I"inotify-ffi-dev;T@@ [I" inpay;T@"@ [I" inplace;T@@ [I"in_place_editing;T@N@ [I"inplace_i18n;T@'@ [I"in_place_relation;T@@ [I" inploy;TU;[I" 1.9.6;T@ [I"inploy_godlike;T@@ [I" input;T@'@ [I"input_calendar;T@,@ [I"input_css;T@'@ [I"input_reader;T@'@ [I"input_sanitizer;T@@ [I"input_source;T@'@ [I" inqlude;T@@ [I"inquiries;T@@ [I"inquisition;T@@ [I"inquisitor;T@`@ [I"insales_api;T@V@ [I"insano_image_resizer;T@_@ [I"insensitive_hash;T@@ [I"insert_at_caret-rails;T@@ [I"insert_into;T@@ [I"inside_sales;T@@ [I"insight_agent;T@@ [I"insightful;T@@ [I"insightly;T@ @ [I"insight_rails;T@@ [I" insights;T@'@ [I" insist;T@V@ [I" insparq;T@'@ [I"inspectable;T@@ [I"inspectbang;T@@ [I"inspected_by;T@E@ [I"inspector;T@@ [I"inspector_dragit;T@E@ [I"inspectorgadget;T@'@ [I"inspector_gadget;T@@ [I"inspect_partials;T@'@ [I" insque;T@@ [I"insrc-whenever;T@@ [I" instadoc;T@'@ [I"instafavs;T@@ [I"instagram;T@-@ [I"instagram-fixed;T@@ [I"instagram-innonate;T@W9@ [I"instalatron;T@@ [I"install_generator;T@E@ [I"installshield;T@@ [I"install_theme;T@@ [I"instance_call;T@@ [I"instanceoptions;T@@ [I"instancevalue;T@@ [I"instance_variable_hash;T@@ [I" instant;T@"@ [I"instantcache;T@`@ [I"instant_disappointment;T@@ [I"instant_dsl;T@@ [I"instantiator;T@@ [I"instapaper;T@@ [I"instapaper_download;T@@ [I"instapaper_full;T@@ [I" instapi;T@@ [I"instapush;T@@ [I"insta-rails;T@@ [I"instascraper;T@E@ [I"instastache;T@'@ [I"instedd-rails;T@p@ [I"instigator;T@e@ [I" instiki;T@-/@ [I"institutions;T@"@ [I"instructions;T@@ [I"instrument;T@6@ [I"instrumentable;T@@ [I"instrumental;T@g@ [I"instrumental_agent;T@~@ [I"instrumental_tools;T@J@ [I"instrumentation;T@@ [I"instruments;T@@ [I" insulin;T@!@ [I" insults;T@[ @ [I"insurance;T@[ @ [I"InsuranceBizLogic;T@[@ [I" insync;T@E@ [I" integer;T@1@ [I"integer-base;T@@ [I"integer-obfuscator;T@@ [I"integratedscaffold;T@@ [I"integration;T@@ [I"integration-hipchat-plugin;T@"@ [I"integration_test_redis;T@E@ [I"integration_wrapper;T@'@ [I"integrator;T@E@ [I"integritray;T@@ [I"integrity;T@!@ [I"integrity-bonjour;T@'@ [I"integrity-campfire;T@N@ [I"integrity-email;T@@ [I"integrity-hooks;T@@ [I"integrity-irc;T@n@ [I"integrity-jabber;T@ @ [I"integrity_metrics;T@@@ [I"integrity-nabaztag;T@@ [I"integrity-notifyio;T@@ [I"integrity-prowl;T@@ [I"integrity-tumblr;T@`@ [I"integrity-yammer;T@@ [I"-intentmedia-action_mailer_cache_delivery;T@W@ [I"*intentmedia-activerecord-jdbc-adapter;TU;[I" 1.1.1.1;T@ [I" intentmedia-capybara-webkit;TU;[I" 0.7.2.4;T@ [I" interact;T@@ [I"interactive_editor;T@@ [I"interactive_grep;T@"@ [I"interactive_migrations;T@@ [I"interactive_rspec;T@E@ [I"interception;T@[ @ [I"interceptor;T@'@ [I"intercession;T@@ [I" intercom;T@V@ [I"intercom-rails;T@ @ [I"intercooler;T@'@ [I"interface;T@@ [I"interfacelift;T@`@ [I" interfax;T@@ [I"interfax-rest;T@@ [I"interferoman;T@@ [I" interior;T@' @ [I"interkassa;T@@ [I"interlock;T@@ [I"intermine;TU;[I" 1.00.00;T@ [I"intermine-bio;TU;[I" 0.98.1;T@ [I"intermodal;T@'@ [I"internashunalize-js;T@'@ [I" internet;T@@@ [I"internet_connection;T@E@ [I"internethakai;T@@ [I"internetkassa;T@@ [I"internet_message;T@`@ [I"internet_time;T@@ [I"internet_tracer;T@@ [I" interpol;T@n@ [I"interpolate;T@@ [I"interpolator;T@X@ [I"interpolique;T@'@ [I"interpret;T@@ [I"interpreted_date;T@n@ [I"interpreter;T@@ [I"interrogate;T@@ [I"interrogative;T@@ [I"interrogator;T@@ [I"interrotron;T@@ [I"interstate;T@"@ [I" intersys;T@@ [I"interu-backup;TU;[I" 3.0.16;T@ [I" interval;T@'@ [I"interval-quiz;T@'@ [I"intervals;TU;[I" 0.5.83;T@ [I"interval-tree;T@@@ [I"inthenews;T@+@ [I"in_threads;T@@ [I"intouch-gcal4ruby;TU;[I" 0.5.9.1;T@ [I"intouch-gdata4ruby;T@;@ [I"intrinsic;T@N@ [I"intro_qmr;T@'@ [I"introspection;T@E@ [I" intruder;T@I@ [I"intrusion;T@+@ [I"intuit_ids_aggcat;T@@ [I"intuit-saml;T@@ [I"inu;T@@ [I"inventory;T@@ [I"inventory-rake;T@@ [I"inventory-rake-tasks-yard;T@ @ [I"inverse_of;T@@ [I"inversion;T@)@ [I"inversions_in_array;T@E@ [I" invert;T@@ [I"inverted_index;T@@ [I" invim;T@E@ [I"invisible_captcha;T@`@ [I"invision_bridge;T@@ [I" invoice;T@@ [I"invoice_bar;T@@ [I"invoice_harvester;T@@ [I"invoicepdf;T@+@ [I" invoicer;T@@ [I"invoicing;T@@ [I"invoicing_generator;T@@ [I"invo-sporknife;T@W@ [I" inxmail;T@'@ [I"io;T@'@ [I" iobuffer;T@x@ [I"io-capture;T@@ [I" iocheck;T@@ [I"io-console;T@[ @ [I" io-extra;T@@ [I" ioffer;T@@ [I" io-like;T@@ [I"io-manage;T@ @ [I"ion;T@'@ [I"ionicmobile-git-pair;T@@ [I" ionis;T@`@ [I" io-nosey;T@`@ [I" ioposrw;T@@ [@]@@ [I" iopts;T@@ [I"io-reactor;T@@ [I"IO-Reactor;T@@ [I"iorum-acts_as_viewable;T@@ [I"ios_android_toolbox;T@p@ [I" ios-box;T@,@ [I"ios-cert-enrollment;T@V@ [I"ios-checkboxes;T@@ [I" ios_ci;T@@ [I"ios_generate_settings;T@E@ [I"ios_localizer;T@H@ [I"io_splice;TU;[I" 4.1.1;T@ [I"ios-png-check;T@@ [I"ios-portal;T@'@ [I"ios_push_notifications;T@@ [I" iostruct;T@'@ [I" iota;T@@ [I" io-tail;T@@ [I" iotas;T@@ [I" iotaz;T@@ [I" io_tools;T@[@ [I"io_unblock;T@@@ [I"ip;T@@ [I"ip2country;T@E@ [I"ip2location;T@@ [I"ipa;T@`@ [I"ipa_account_check;T@E@ [I" ipaccess;T@"@ [I"ipaddress;T@@ [I"ip_address;T@@@ [I"ip_address_simple;T@@ [I"ip_address_validator;T@@ [I"ipaddr_extensions;TU;[I"2012.1.13;T@ [I"ipaddr_list;T@E@ [I"ipaddr_range_set;T@ @ [I"ipaddr-tree;T@`@ [I" ipadmin;T@@ [I" ipage;T@@ [I"ipa_reader;T@X@ [I" ipay;T@I@ [I"ip_blocker;T@@ [I"ipcad2squid;T@@ [I" ipcalc;T@@ [I" ipcat;T@@ [I"ipcauthpipe;T@^@ [I"ipc_transit;T@@ [I" ipdb;T@@ [I" ip_frag;T@"@ [I"ipgeobase;T@'@ [I"ipgeobase_example;T@E@ [I"ipgeobase_local;T@E@ [I"ipgeobase_mongoid;T@'@ [I"ipgeolocation;T@@ [I" ipgp;T@'@ [I"iphone_helpers;T@@ [I"iphoneruby;T@@@ [I"iphone-style-checkboxes;T@E@ [I" iphoto2;T@@ [I" ipinfodb;T@'@ [I" ipizza;T@@ [I"ipizza-omniauth-provider;T@@ [I"ipizza-rails;T@@ [I"iplayer-dl;T@@ [I"ip_library;T@'@ [I"ip_location_cn;T@'@ [I" iplogic;T@@ [I"ip_methods;T@@ [I"ipodcastly;T@'@ [I" ipparse;T@@ [I"ipp_quickbase_devkit;T@E@ [I" IPprefix;T@'@ [I"ippy04-remarkable_mongo;T@6@ [I"ip-ranges;T@`@ [I" ipreader;T@E@ [I" iprocess;TU;[I" 5.0.2;T@ [I" iproto;T@@ [I"ipscanner;T@@ [I" ipsum;T@O@ [I"ipsum-core;T@O@ [I"ipsum-english;T@@ [I"ipsum-french;T@@ [I"ipsum-latin;T@@ [I" iptc;T@@ [I"ip_tracker;T@E@ [I" iptrust;T@@ [I"ipv4_address;T@@ [I"ipvs_litmus;T@E@ [I"ip-world-map;T@@ [I"ip-writer-rails;T@'@ [I"ipxact-ruby;T@l5@ [I"ipxact-tools;T@@ [I" iq-acl;T@;@ [I"iqcaptcha;T@s@ [I"iq_captcha;T@@ [I" iq-color;T@@ [I"iq-country;T@@ [I"iqeo-conf;T@@ [I" iq-html;T@6@ [I" iqjax;T@`@ [I" iq_rdf;T@@ [I"iq_triplestorage;T@I@ [I" iqvoc;T@^@ [I"iqvoc_compound_forms;T@+@ [I"iqvoc_inflectionals;T@+@ [I"iqvoc_skosxl;T@@ [I" iracing;T@@ [I" i-rack;T@@ [I"iragsdale-rubydkim;T@[ @ [I" irake;T@'@ [I" irate;T@'@ [I" iravat;T@`@ [I" ir_b;T@@ [I"irb-benchmark;T@@ [I"irb_callbacks;T@@ [I" irbcp;T@"@ [I" irb_drop;T@E@ [I" irberize;T@'@ [I"irb_hacks;T@[@ [I"irb-history;T@@ [I"irb-pager;T@'@ [I"irb_plugin;T@"@ [I"irb-rake-task;T@@ [I"irb_rocket;T@@ [I" irbtools;T@@ [I"irbtools-more;T@@ [I" irby;T@@ [I"irc;T@E@ [I" ircbot;T@I@ [I" irccat;T@@ [I" irc_cat;T@@ [I"irc_cat_clients;T@@ [I"irc_constants;T@@ [I"ircguerilla-irc;T@@ [I"irckitten;T@@ [I"irc_machine;T@'@ [I"ircnotify;T@@ [I" ircp;T@;@ [I"irc_parser;T@@@ [I"irc-qik-bot;T@'@ [I"irc-socket;T@@ [I"ircsupport;T@@ [I" irctc;T@'@ [I"irecorder;T@@![@@V@ [I"iremix-ruby;T@@ [I" iremocon;T@'@ [I" irfsdash;T@|@ [I" irgat;T@@ [I" iridium;T@'@ [I" iris;T@E@ [I"iris_password_generator;T@`@ [I"irobotcreate;T@@ [I" iron;T@'@ [I"ironbuildrake;T@@ [@@`I" ironruby;T[I"iron_cache;T@@ [I"iron_cache_rails;T@+@ [I"iron_core;T@"@ [I"iron_cuke;T@@ [I"iron-extensions;T@x@ [I" ironfan;T@Y@ [I"iron_fixture_extractor;T@@ [I"iron_hammer;T@@ [I" ironhide;T@E@ [I"iron_maiden;T@@ [I"iron-motion;T@'@ [I" ironmq;T@F@ [I" iron_mq;T@@ [I"ironnails;T@@ [I"ironruby-dbi;T@@ [I"ironruby-sqlserver;T@@ [I"iron-term-ansicolor;T@@ [@@I"universal-.net-2.0;T[@@"I"universal-.net;T[@@@Y][I" iron-web;T@@ [I"iron_worker;T@@ [I"iron_worker_ng;TU;[I" 0.14.2;T@ [I" irpack;T@@ [I"irregular_method;T@@ [I"irs_pub78;T@!@ [I"irt;T@ @ [I" irule;T@@Y][I" irumugam;T@@ [I"irwebmachine;T@@@ [I" irwi;T@@ [I" irxml;T@@ [I"irxrb-rails;T@"@ [I"is;T@E@ [I" is_a;T@@ [I" isaac;T@@ [I"isaac-formatting;T@@ [I"is_a_collection;T@`@ [I"is_addressable;T@'@ [I" is_alias;T@E@ [I"is_association;T@E@ [I" isbm;TU;[I" 1.0.7.0;T@ [I" isbn;T@Sg@ [I" isbn10;T@N@ [I" isbn13;T@@ [I"isbn-converter;T@@ [I" isbndb;T@@ [I"isbn-tools;T@@ [I"isbn_validation;T@@ [I" is_bot;T@@ [I"is_business_day;T@@@ [I" iscale;T@'@ [I"isc_analytics;T@Y@ [I" iscjs;T@+@ [I"is_contacted;T@6@ [I" iseq;T@<@[@@<@ [@U;[I" 0.0.3.2;TI"x86-mingw32-1.9.1;T[@@I"x86-mingw32-1.9.2;T[@@I"x86-mswin32-1.9.1;T[@@I"x86-mswin32-1.9.2;T[@@@ [I"is_filterable;T@@ [I" is_gd;T@@ [I"is-gd-shrinker;T@@ [I"is_graffitiable;T@+@ [I"IsHealthyAgg;T@'@ [I"isi;T@@ [I"isikukood;T@@@ [I" isi-rb;T@@ [I"is_it_iphone;T@@ [I"is_it_mobile;T@@ [I"isitopencoffeetomorrow;T@@ [I"is_it_working;T@G @ [I"is_it_working-cbeer;T@ A@ [I" iskr;T@- @ [I"is_listable;T@"@ [I" islock;T@@ [I"is_msfte_searchable;T@@ [I"isms_http;T@@ [I" isna;T@"@ [I"iso;T@@ [I" iso3166;T@@ [I" iso_3166;T@@ [I" iso4217;T@M#@ [I" iso639;T@W@ [I" iso-639;T@@ [I" iso7816;T@@ [I" iso8583;T@+@ [I" iso8601;T@x@ [I"iso8601-js;T@@ [I" iso_code;T@@ [I"iso_codes;T@@ [I"iso-codes;T@x@ [I"iso_countries;T@@ [I"iso-country;T@`@ [I"iso_country_codes;T@@ [I"iso-country-select;T@+@ [I"isoelectric_point;T@@ [I"isohunt-es;T@E@ [I" isolate;T@"@ [I"isolated_eval;T@N@ [I"isolate-git;T@@ [I"isolate-heroku;T@s@ [I"isolate-lockdown;T@@ [I"isolate-scenarios;T@`@ [I"isolation_test;T@@ [I" isono;T@~*@ [I" isotope;T@@ [I"isotope11-suitcase;TU;[I" 1.7.12;T@ [I"isotope_contacts;T@@ [I"is_palindrome;T@@ [I"is_paranoid;T@Q@ [I"is_paranoid_ext;T@@ [I" ispeech;T@@ [I" ispell;T@`@ [I"ispmanager;T@@@ [I"is_positionable;T@@ [I" isprime;T@@ [I" is_prime;T@'@ [I"is_publishable;T@"@ [I" ispunity;T@@ [I" ispusage;T@@ [I" isrc;T@@ [I" isrcs2mb;T@@ [I"is_reviewable;T@`@ [I" is_same;T@ @ [I"is_sequenced;T@'@ [I"isst-vlad;T@@ [I"issue-beaver;T@@ [I" issues;T@E@ [I" issuu;T@@ [I"is_taggable;T@@ [I"is_taggable_rails3;T@@ [I"istart-rails;T@@ [I" istat;T@@ [I" istc;T@@ [I"is_translatable;T@@ [I"is_unique;T@@@ [I" isunit;T@'@ [I"is_visitable;T@@ [I"it;T@@ [I" ita2;T@6@ [I"italian_job;T@E@ [I"itau_shopline;T@@ [I"itc-autoingest;T@@ [I" itcf;T@@ [I" itch;T@W@ [I"iteh-zabbixapi;T@,@ [I"iteration;T@@ [I"iterationlabs-my_obfuscate;T@@ [I"iterationlabs-rarff;T@[@ [I"iterminator;T@'@ [I"itermwindow;T@x@ [I"iterm_window;T@@ [I" itest;T@'@ [I" itext;T@1@[I"itextomml;T@#F@ [I" itg_test;T@'@ [I"itgwiki_mirror;T@@ [I" itility;T@@ [I" itimer;T@|@ [I" itis;T@E@ [I"itium-theme;T@@ [I"#it-logica-application-backbone;T@}@ [I"itm;T@@ [I"i-told-you-it-was-private;T@@ [I"itrigga-admin_api_client;T@I@ [I"itrigga-cache;T@@ [I"itrigga-cap_deploy;T@@ [I"itrigga-config;T@V@ [I"itrigga-core_ext;T@@ [I"itrigga-file_cache;T@@ [I"itrigga-generator;T@6@ [I"itrigga-net_helper;T@@ [I"itrigga-param_fu;T@@ [I"itrigga-ruby19_hacks;T@+@ [I"its;T@@ [I" its-it;T@@ [I" itslog;T@@ [I"itsucks-compass-960-plugin;T@ @ [I" it_tools;T@E@ [I"itu_codes;T@@ [I" ituner;T@@ [I" itunes;T@@ [I"itunes-affiliate;T@@ [I"iTunesAmazon;T@E@ [I"itunes-charts;T@@ [I"itunes-cli;T@@ [I"itunes-command;T@@@9[I"itunes-connect;T@@ [I"itunes-controller;T@@ [I"itunes_csv;T@@ [I"itunes_epf;T@'@ [I"itunes_ingestion;T@@ [I"itunes-library;T@`@ [I"itunes_link_maker;T@@ [I"itunes-observer;T@`@ [I"itunes-receipt;T@6@ [I"itunes_review;T@@ [I"itunes-rm-dups;T@@9[I"itunes-search;T@@ [I"itunes-search-api;T@@ [I"itunes-search-rb;T@@ [I"itunes_store_transporter;T@E@ [I"!itunes_transporter_generator;T@[ @}[@A@hP@ [I"itunes-web-frontend;T@@ [I"it_will_be_mine;T@'@ [I" iudex;T@@[I"iudex-async-httpclient;T@@[I"iudex-barc;T@@[I"iudex-brutefuzzy-protobuf;T@@[I"iudex-brutefuzzy-service;T@@[I"iudex-char-detector;T@@[I"iudex-core;T@ @[I" iudex-da;T@ @[I"iudex-filter;T@@[I"iudex-html;T@@[I"iudex-http;T@@[I"iudex-httpclient-3;T@@[I"iudex-http-test;T@@[I"iudex-jetty-httpclient;T@@[I"iudex-rome;T@@[I"iudex-simhash;T@@[I"iudex-worker;T@@[I" iugu-api;T@@ [I" iugu-ux;T@@ [I" iuid;T@E@ [I"iut;T@@ [I"iv;T@@ [I"ivanvanderbyl-amqp;TU;[I" 0.6.13.1;T@ [I"ivanvc-devise;TU;[I" 1.0.7.1;T@ [I"ivanvc-dictionary;T@E@ [I"ivanvc-geolocation_city;T@'@ [I"ivanvc-sweat;T@'@ [I" ivapi;T@@ [I" iv-cli;T@@ [I" ives;T@@ [I"ivey-longurl;T@@ [I"iv-phonic;T@@ [I" ivy4r;T@?l@ [I"ivy4r-jars;T@N@ [I" ivy-jars;T@ @[I"ivy-resolver;T@@ [I"iwannagothere;T@@ [I" i_wonder;T@|@ [I" iwyg_be;T@'@ [I" ixCB;T@'@ [I" ixtlan;T@@ [I"ixtlan-audit;T@@ [I"ixtlan-babel;T@@ [I"ixtlan-core;T@!@ [I"ixtlan-error-handler;T@@ [I"ixtlan-generators;T@@ [I"ixtlan-gettext;T@@ [I"ixtlan-guard;T@- @ [I"ixtlan-optimistic;T@@ [I"ixtlan-remote;T@+@ [I"ixtlan-session-timeout;T@x@ [I"iye;T@@ [I" iyyov;T@T @[I" izzup;T@@ [I"j;T@A@ [I"jab;T@`@ [I" jabber4r;T@@ [I"jabber-bot;T@@ [I"jabber_delivery;T@'@ [I"jabber-tee;T@@ [I"jabberwocky;T@E@ [I" jabbot;T@@ [I" jabe;T@- @ [I" jabs;T@@ [I" jaccard;T@@ [I" jacha;T@E@ [I" jack;T@@ [I" jackb;T@@ [I" jack-ffi;T@@ [I" jackfs;T@'@ [I" jackpot;T@@ [I"jack_rabbit;T@@[I"jackruss-geokit-rails3;T@f@ [I" jack_up;T@`@ [I"jacobat-authlogic-oid;T@@ [I"jacobat-htmldiff;T@E@ [I"jacobat-refinerycms;TU;[I" 0.9.6.14;T@ [I"jacobdam-selenium;TU;[I" 1.1.16;T@ [I"ja-complex-word;T@@ [I" jaconda;T@@ [I"jacqui-versioned;T@`@ [I" jacs;T@@ [I"jactive_support;T@@*[@@O@ [I" jacuzzi;T@+@ [I" jade;T@`@ [I" jadeite;T@V@ [I"jade-js-source;TU;[I" 0.27.6;T@ [I" jader;T@V@ [I" jadof;T@1@ [I" jadtfmt;T@"@[@ @"@ [I"jaeheegeo;T@'@ [I" jaf-s3;TU;[I"0.6.3.1286550476;T@ [I"jagadeesh;T@'@ [I" jagger;T@'@ [I"jah;T@@ [I"jahtml_formatter;T@@ [I" jail;T@@ [I" jakal;T@@ [I" jake;T@@ [I"#jake3030-sunspot_with_kaminari;T@`@ [I"jake69mac-stopwords;T@u@ [I"jakesdots;T@@ [I"jakewendt-authorized;T@+@ [I"#jakewendt-calnet_authenticated;T@@ [I"jakewendt-documents;T@@ [I"jakewendt-grape_juice;T@@ [I"jakewendt-html_test;T@@ [I"jakewendt-pages;T@@@ [I"jakewendt-phonify_string;T@@ [I"jakewendt-photos;T@@ [I"jakewendt-rails_extension;TU;[I" 2.0.22;T@ [I"jakewendt-rdoc_rails;T@E@ [I"jakewendt-ruby_extension;T@ @ [I" jakewendt-simply_authorized;T@@ [I"!jakewendt-simply_commentable;T@@ [I"!jakewendt-simply_discussable;T@I@ [I"jakewendt-simply_documents;T@@ [I"jakewendt-simply_helpful;TU;[I" 2.2.14;T@ [I"jakewendt-simply_pages;T@O@ [I"jakewendt-simply_photos;T@O@ [I"jakewendt-simply_sessions;T@@ [I"jakewendt-simply_taggable;T@@ [I"jakewendt-simply_testable;T@ @ [I"jakewendt-simply_trackable;T@s@ [I"jakewendt-stringify_date;T@@ [I"jakewendt-stringify_time;T@@ [I"jakewendt-surveyor;TU;[I" 0.11.3;T@ [I"jakewendt-use_db;T@e@ [I"jalalidate;T@@ [I"JalaliDate;T@@ [I"jalcine-tlsmail;T@E@ [I"jam;T@!@ [I"jambalaya-rspec;T@E@ [I" james;T@x@?[@o@@ [I"james-bond;T@'@ [I"jamescook-pow;T@1@ [I"jamesearl-rails-settings;T@W@ [I"jamesgolick-ASS;T@@ [I"jamesgolick-cassandra;T@@ [I"jamesgolick-webby;T@@ [I"jamesottaway;T@E@ [I"jamie-bluebox;T@@ [I"jamie-ec2;T@@ [I"JamieFlournoy-g_viz;T@@ [I"JamieFlournoy-machinist;T@ @ [I"jamieorc-joint;T@@ [I"jamieorc-mongo_mapper;TU;[I" 0.11.1.1;T@ [I"jamie-vagrant;T@x@ [I" jammed;T@@@ [I" jammer;T@'@ [I" jamming;T@@ [I" jammit;T@7@ [I"jammit-core;T@`@ [I"jammit-ebtd;TU;[I" 0.6.9.2;T@ [I"jammit-jcarnegie;T@"@ [I"jammit_lite;T@@@ [I"jammit-mitio;T@@ [I"jammit-s3;T@s@ [I"jammit-sinatra;T@s@ [I" jam-ruby;T@@ [I"jamster-statsd;T@@ [I" jane;T@@ [I"jangomail-mailer;T@E@ [I"jangosmtp;T@ @ [I" janitor;T@@ [I"janitor_rails;T@@ [I" janky;T@@ [I"janova-clearance;T@e@ [I" janus;T@@ [I"japanese_deinflector;T@E@ [I"japanrock_sample;T@@ [I"japanrock_test;T@@ [I"japgolly-Saikuro;TU;[I" 1.1.1.0;T@ [I" jap_mag;T@@ [I"jar;T@'@ [I" jared;T@@ [I"jared_string_extend;T@'@ [I" jarhead;T@@ [I"jaribio_formatter;T@@ [I" jaro;T@@ [I" jarodluebbert-twitter_oauth;T@@ [I" jartools;T@'@ [I" jarvis;T@|@ [I"jar_wrapper;T@@@ [I" jaryl;T@'@ [I"'jashmenn-activerecord-jdbc-adapter;T@N@ [I",jashmenn-activerecord-jdbcmysql-adapter;T@[ @ [I"jashmenn-dalli;T@@ [I"jashmenn-feedzirra;T@6@ [I"jashmenn-httparty-icebox;T@"@ [I"jashmenn-method_cache;TU;[I" 0.8.2.1;T@ [I"jashmenn-redis-lock;T@`@ [I"jashmenn-statsd-instrument;T@;@ [I" jasmine;T@ @ [I"jasmine-ajax;T@E@ [I"jasmine-core;T@ @ [I"jasmine-coverage;T@|@ [I"%jasmine-coverage-kikuchiyo-patch;T@|@ [I"jasmine-fixtures;T@@ [I"jasmine-fixtures-generator;T@|@ [I"jasmine-headless-webkit;T@@ [I"jasmine-jquery-rails;T@@ [I"jasmine-jstd-conf;T@@ [I"jasmine-multi_json;T@D@ [I"jasmine-phantom;T@V@ [I"jasmine-rails;T@@ [I"jasmine-rails-light;T@E@ [I"jasmine-reporters;T@@ [I"jasminerice;T@@ [I"jasminerice-runner;T@"@ [I"jasmine-sauce;T@I@ [I"jasmine-selenium-sauce;T@u@ [I"jasmine-sinon-rails;T@@ [I"jasmine-spec-extras;T@E@ [I"jasmine-sprockets;T@@ [I"jasmine-stories;T@'@ [I"jasmine_webos;T@V@ [I" jasnode;TU;[I" 0.4.3.0;T@ [I" jason;T@@ [I"jason-o-matic-deep_test;TU;[I" 1.2.2.15;T@ [I"jason-orm;T@@ [I"ja-sound-index;T@@ [I"jasper-bridge;T@'@ [I"jasper-client;T@`@ [I"jasper-command-line;T@@ [I"jasper-rails;T@@ [I"jasper-rails-rspec;T@`@ [I"jasperserver4r;T@@ [I"jasperserver-client;T@@ [I"ja_test_gem;T@'@ [I"java2ruby-xmldsig;T@!@ [I"java-autotest;T@E@ [I"javabean_xml;T@@@ [I" java_bin;T@@ [I"javaclass;T@"@ [I"javaeye4r;T@@ [I" javagems;T@LN@ [I"java_inline;T@"@[I"java-inline;T@@[I" javajake;T@@ [I" javaobj;T@!@ [I" javaobjs;T@[ @ [I" javaobs;T@@ [I"java_override;T@+@[I"javaparse;T@|@ [I"java_properties;T@"@ [I" javasand;T@E@ [I"javascript_auto_include;T@@ [I"javascript_eraser;T@@ [I"javascript_features;T@@ [I"javascript_i18n;T@I@ [I"javascript_localize;T@E@ [I"javascripto;T@E@ [I"javascripto-rails;T@@ [I"javascript_safe_logger;T@"@ [I" javascript-securehash-rails;T@@ [I"#javascript-state-machine-rails;T@@ [I"javascript_util_asset_pack;T@3@ [I"java_streamify;T@'@[I"java_testing_guff;T@E@ [I" jawbone;T@@ [I" jaws;T@@ [I"jax;T@,@ [I"jax-fractals;T@@ [I" jaxrsdoc;T@@ [I"jaybbb-ruby-aaws;T@@ [I" jaysus;T@+@ [I" jay_unit;T@E@ [I" jay_z;T@@ [I" jazor;T@@ [I" jazrb;T@`@ [I" jazz;T@`@ [I" Jazz;T@"@ [I" jazzez;T@@ [I" Jazzez;T@@ [I"jazz_hands;T@x@ [I" jazz-jss;T@"@ [I"jazz_libs;T@@ [I"jazz_model;T@@ [I"jazz_money;T@@ [I"jbackup_rails;T@E@ [I"jberkel-jekyll;T@@ [I"jberkel-mysql-ruby;TU;[I" 2.8.1;T@ [I"jb-helloworld;T@'@ [I"jblas-ruby;T@@ [I"jbootstrap;T@`@ [I"jBootstrap;T@'@ [I" jbuilder;T@e@ [I" jbundle;T@+@ [I" jbundler;T@@ [I"jcarley-simplews;T@ё@ [I"jcf-autotest-rails;T@'@ [I"jcgpz_string_extend;T@'@ [I"jcheck_rails;T@@ [I"jcnnghm-acts_as_secure;T@ @ [I" jcon;T@@ [I"j-contacts;T@u"@ [I"jcouchbase;T@+@ [I" jcov;T@@ [I"jcredding-is_tree;T@+@ [I" jcropper;T@@ [I"jcrop-rails;T@@ [I" jcrossley-deltacloud-client;T@<@ [I"jcrossley-twitter-search;T@M+@ [I"jdbc-derby;TU;[I" 10.6.2.1;T@[@ۭU;[I" 10.8.2.2;T@ [I" jdbc-h2;TU;[I" 1.3.170;T@ [I"jdbc-helper;T@u/@ [I"jdbc-hsqldb;TU;[I" 1.8.1.3;T@[@@` @ [I"jdbc-jtds;T@@[@@@ [I"jdbc-luciddb;T@@ [I"jdbc-mssql-azure;T@'@ [I"jdbc-mysql;TU;[I" 5.1.22;T@ [I"jdbc-openedge;TU;[I" 11.1;T@[I"jdbc-openedge-internal;TU;[I" 11.1.0.0;T@[I"jdbc-orientdb;T@@ [I"jdbc-postgres;TU;[I" 8.4.702;T@[@ U;[I" 9.2.1002;T@ [I"jdbc-postgresql;TU;[I" 9.2.1000;T@ [I"jdbc-sqlite3;TU;[I"3.6.14.2.056;T@[@U;[I" 3.7.2;T@ [I"jdbc-teradata;T@@ [I"jdbc-wrapper;T@R @ [I"%jdeerhake-compass-rmagick-engine;T@"@ [I"jdl-authlogic;TU;[I" 2.1.6.2;T@ [I"jdl-chronic;T@v@ [I" jdl-toto;T@]5@ [I"jdrowell-paperclip;T@r@ [I"jdt;T@@ [I" jdtc;T@'@ [I"je;T@6@ [I" jeanny;TU;[I" 0.99.14;T@ [I" jeckyl;T@@ [I"jedis-jars;T@O@[I"jeditable-rails;T@`@ [I" jedlik;T@@ [I" jeeves;T@@ [I" jefe;T@u@ [I" jeff;T@@ [I"jeff_bezos;T@@ [I"!jeffersongirao_faraday-stack;T@|@ [I"!jeffkreeftmeijer-delayed_job;T@@ [I")jeffleeismyhero-rubycas-client-rails;T@E@ [I"jeffrafter-factory_girl;T@@ [I"jeg;T@@ [I" jegolize;T@t @ [I" jeka;T@@ [I" jekyll;T@&@ [I"jekyll_and_hyde;T@N@ [I"jekyll-asset-pipeline;T@|@ [I"jekyll-assets;T@@ [I"jekyll-beastiepress;T@@ [I"jekyll-categories;T@'@ [I"jekyll-ebook;T@E@ [I"jekyll-epub;T@@ [I"jekyll_ext;T@+@ [I"jekyll_generator;T@@ [I"jekyll-haml;T@'@ [I"jekyll-hasty;T@'@ [I"jekyll-less;T@"@ [I"jekyll-localization;T@1@ [I"jekyll-minibundle;T@@ [I"jekyll-minimagick;T@@ [I"jekyll-pagination;T@"@ [I"jekyll_post_generator;T@@ [I"jekyll-press;T@@ [I"jekyll-reloaded;T@@ [I"jekyll-rendering;T@@ [I"jekyll-reposter;T@@ [I"jekyll-s3;T@9 @ [I"jekyll-s3-yearofmoo;T@@ [I"jekyll-sass;T@@ [I"jekyll-scholar;T@@ [I"jekyll-scholar-extras;T@'@ [I"jekyll-svg-plugin;T@@ [I"jekyll-tagging;T@x@ [I"jekylltask;T@@ [I"jekyll-testtasks;T@E@ [I"jekyll-tombell;T@&@ [I"jekyll-ultraviolet;T@@ [I" jelaniharris-activemerchant;TU;[I" 1.29.2;T@ [I""jelder_cloudfront-invalidator;T@@ [I"jelegante;T@N@ [I" jello;T@@ [I" jellog;T@@ [I" jelly;TU;[I" 0.8.10;T@ [I"jelly_bird;T@@ [I"jellyfish;T@@ [I"jem;T@@ [I" jemalloc;T@@ [I" jemini;TU;[I"2010.2.17;T@ [I"jena-jruby;T@@[I"jencil-rails;T@'@ [I"jenerator;T@'@ [I" jeni;T@@ [I" jenkins;T@^%@ [I"jenkins_api_client;T@@ [I"jenkins_cap;T@@ [I"jenkins-capistrano;T@`@ [I"jenkins-cli;T@@ [I"jenkins-client;T@'@ [I"jenkinshub;T@@@ [I"jenkins_job;T@@@ [I"jenkins-json-api;T@E@ [I"jenkins-plugin;T@@ [I"jenkins-plugin-runtime;T@@ [I"jenkins-rails;T@E@ [I"jenkins-remote-api;T@"@ [I"jenkins-status-tool;T@V@ [I"jenkins-war;TU;[I" 1.475;T@ [I" jenny;T@E@ [I" jently;T@@ [I" jeog;T@'@ [I"jeokkarak;T@@ [I" j_era;T@'@ [I" jerbil;T@@ [I"jerefrer-resque;T@@ [I"(jeremydurham-restful_authentication;T@@ [I"'jeremyevans-exception_notification;TU;[I"1.0.20100406;T@ [I"jeremyevans-postgres-pr;T@7@ [I"jeremyw-paper_trail;T@Sa@ [I" jerk;T@"@ [I"!jerryvos-acts-as-taggable-on;T@ @ [I"(jerryvos-authlogic_facebook_connect;T@@ [I" jessica;T@@[I" jesus;T@@ [I"jet;T@E@ [I"jet-facebooker;T@o@ [I"jet-framework;T@'@ [I" jetlag;T@@ [I" jetpack;T@@ [I"jetpack-rails;T@@ [I" jetpants;T@@@ [I"jets3t-rb;T@@ [I" jet_ski;T@'@ [I" jetspade;T@E@ [I"jetstream;T@@ [I" jettr;T@@[I" jetty;TU;[I" 6.1.19.1;T@ [@U;[I"6.2;T@[I"jetty-jsp;TU;[I"6.1.19.2.1.1;T@ [@(@$@[I"jetty-rackup;T@+@ [I"jetty-rails;T@@ [I"jetty-run;T@@ [I"jettywrapper;T@@ [I" jewel;T@@ [I" jewelbox;T@@ [I" jeweler;T@r@ [I" jeweler2;T@Sg@ [I"jeweler_rails;T@@ [I"jeweler_style_versioning;T@@ [I" jexml;T@@[I" jexp;T@@ [I"jfabre-actionwebservice;T@p#@ [I"jferris-mocha;TU;[I"0.9.8.20100526112143;T@ [I"jf--mini_magick;TU;[I"3.1;T@ [I"jfs-generators;T@,@ [I" jgeoip;T@@[I" jgrep;T@ @ [I"jgre-rfeedparser;TU;[I" 0.9.961;T@ [I"jgrevich-knife-solo;T@6@ [I" jgrouper;T@@ [I"jgrouper-server;T@'@ [I"jgrouper-shell;T@'@ [I"jhc;T@@ [I"jhindle-jekyll;T@@ [I"jhubert_common;T@E@ [I" jibeset;T@!@ [I" jido;T@@ [I"jig;T@@@ [I" jigsaw;T@@ [I" jiji;T@F@ [I"jim;T@@ [I"jimmy_hat;T@@ [I"jimmy_jukebox;T@@ [I" jimson;T@e@ [I"jimson-client;T@@ [I"jingdong_fu;T@@ [I" jinigem;T@@ [I"jintastic;T@@ [I" jinx;T@i6@ [I"jinx-json;T@i6@ [I"jinx-migrate;T@ @ [I"jio;T@@ [I" jipe;T@@ [I"jir;T@'@ [I" jira;T@@ [I" jira4nix;T@@ [I" jira4r;T@@ [I"jira4r-19;T@'@ [I"jira4r-jh;T@x@ [I"jira4r-jh-ruby1.9;T@x@ [I"jira4r-straightjacket;T@@ [I"jira4r-uakatt;T@@ [I" jira-api;T@@@ [I"jira-cards;T@@ [I"jira_exception_collector;T@&@ [I" jirafe;T@@ [I"jiralicious;T@@ [I"jirapong-apn_on_rails;T@@ [I"jirarest2;T@@ [I"jira-ruby;T@@@ [I" jiraSOAP;T@d@ [I" jis2euc;T@E@ [I" jisho;T@`@ [I" jist;T@ @ [I" jister;T@@@ [I" jitai;T@@ [I" jitimage;T@@ [I"jit-rails;T@E@ [I" jitsu;T@@ [I"jitterbug;T@@ [I" jiveapps;T@ @ [I"jjp-memcache-client;TU;[I" 1.8.7;T@ [I"jjp-openx;T@@ [I"jkaneacumen-will_paginate;TU;[I" 2.3.12;T@ [I"jkarlsson-gdata;T@@ [I"jkarlsson-mini_fb;T@@ [I"jk-ferret;TU;[I" 0.11.8.3;T@ [I"jkr;T@'@ [I"jkreeftmeijer-delayed_job;T@@ [I" jldrill;T@@ [I"jleo-leftright;T@e@ [I"jlind-twitter;T@<@ [I" jlogger;T@"@ [I"jlog-rails;T@@ [I"jls-clamp;T@@ [I" jls-grok;TU;[I" 0.10.10;T@ [I"jls-http_parser.rb;TU;[I" 0.5.3.1;T@ [I"jls-lumberjack;TU;[I" 0.0.9000;T@ [I"jm81-attach;T@@ [I"jm81-dm-address;T@@ [I"jm81-dm-filters;T@x@ [I"jm81-paginate;T@@ [I"jm81-whois;T@@ [I"jmagee-ui-kit;T@@ [I" jmail;T@@ [I"jmapreduce;T@@ [I"jmcnevin-delayed_job;T@@ [I"jmcnevin-paperclip;TU;[I" 2.4.5.1;T@ [I"jmcnevin-rghost_barcode;T@@ [I"jmeeks-actionwebservice;T@p#@ [I"jmeter-reports;T@@ [I" jminify;T@'@ [I" jmongo;T@@ [I"jmonteiro-mongo_mapper;T@@ [I"jmoses-transmission-client;T@E@ [I" jms4r;T@@[I" jmtest;T@@ [I"jmx;T@B@ [I" jmx4r;T@+@ [I" jnlp;T@n@ [I"jnunemaker-grip;T@`@ [I"jnunemaker-matchy;T@x@ [I"jnunemaker-rack-gridfs;T@@ [I"jnunemaker-validatable;T@r@ [I"job;T@`@ [I"jobboards-parser;T@V@ [I" job_boss;T@@ [I" jobby;T@@ [I"job_central;TU;[I" 1.5.4;T@ [I"job_interview;T@+@ [I" jobit;T@@ [I"jobmanager;T@;@ [I"job_queue;T@3@ [I" jobQueue;T@@ [I"job_reactor;T@@ [I"jobserver;T@+@ [I" jobvite;T@'@ [I" jobviter;T@@ [I"joda-time-jars;T@O@[I"joe;T@6@ [I"joebadmo-rack-test;T@@ [I"joe_jenkins;T@ @ [I"joelind-koala;T@@ [I"joelind-twitter;T@-/@ [I"joenoon-strip_attributes;T@;@ [I"joenoon-url_safe_base64;T@@ [I" joey;T@`@ [I" joffice;T@@ [I"joffice_redis;T@`@ [I"jog;T@@ [I" jogger;T@@ [I" joggle;T@`@ [I" john-doe;T@g@ [I"john-hancock;T@6@ [I"john-mayer;T@I@ [I" johnny;T@`@ [I"johnny_cache;T@'@ [I"johnny-hash;T@`@ [I"johnnypez-feedzirra;T@ @ [I"johnreitano-activemerchant;TU;[I" 1.5.11;T@ [I"johnreitano-ntlm-http;T@H@ [I"johnreitano-savon;TU;[I" 0.7.7.5;T@ [I" johnsbrn-classy-inheritance;TU;[I" 0.6.8.3;T@ [I" johnson;T@N@ [I" johopt;T@'@ [I" join;T@@ [I" joinfix;T@@ [I"joinme-api;T@@ [I" joint;T@@ [I" joker;T@@ [I"joliprint;T@@ [I" jologs;T@@ [I" jolokia;T@@ [I" jolt;T@@ [I" jombo;T@G @ [I"jomz-is_paranoid;T@ @ [I"JonathanTron-specjour;T@@ [I"jonbell-awesome_print;T@@@ [I"jonbell-grip;T@@@ [I"jonbell-mongo;TU;[I" 1.3.1.2;T@ [I"jonbell-mongo_mapper;T@@ [I"jonbell-mongrations;T@@ [I"jonbell-plucky;T@@ [I"jonnii-cheddargetter;T@6@ [I"jonnii-yelp;T@`@ [I"jonrowe-database_cleaner;T@@ [I" joofaq;T@`@ [I" jooor;T@@ [I" joopo;T@"@ [I"#jordan-brough-hoptoad_notifier;T@9@ [I" jorp;T@@ [I" joseph;T@@ [I"josephholsten-rets4r;TU;[I" 1.1.18;T@ [I"joshbuddy-guard;T@ @ [I" josh_cutler-thinking-sphinx;TU;[I" 1.3.17;T@ [I"joshcutler-thinking-sphinx;T@j@ [I"josh-splat;T@@ [I"joshuapinter-cijoe;T@@ [I"joshua_son_of_nun;T@@ [I"josso-client;T@1@ [I"JOT;T@W@ [I" jota;T@- @ [I" joule;T@@ [I" journal;T@n@ [I" journala;T@+@ [I"journal-font-rails;T@'@ [I"journalize;T@'@ [I" journeta;T@I@ [I" journey;T@@ [I" journo;T@@ [I" joust;T@@ [I" joyent;T@@ [I"joyride-rails;T@@ [I" joystick;T@@ [I"jp;T@E@ [I"jpablobr-freshbooks;T@@ [I"jpablobr-freshbooks.rb;TU;[I" 3.0.6.1;T@ [I"#jpablobr-sinatra-authorization;T@@ [I"jpbuilder;T@I@ [I"jpcalendar;T@'@ [I" jpdfer;T@@ [@ @x@[I" jpeg;T@@ [I"jpeg2moro;T@'@ [I" jpeg2pdf;T@@ [I"jpegoptim;T@@ [I" jpegtran;T@6@ [I"jpi;T@@ [I" jplugin;T@@ [I" jpmobile;T@|@ [I"jpmobile-ipaddresses;T@E@ [I"jpmobile-terminfo;T@@ [I"jpp_customercode_transfer;T@E@ [I"jprefecture;T@'@ [I" jpstock;T@@ [I" jpty;T@'@ [I"'jpzwarte-activerecord-jdbc-adapter;TU;[I" 0.9.2.6;T@ [I"jpzwarte-foreigner;T@I@ [I"jqcloud-rails;T@@ [I"jqgrid_for_rails;T@@ [I"jqgrid_rails;T@u"@ [I"jqm_helper;T@`@ [I"jqmobile_helpers;T@E@ [I"jqmobi-rails;T@'@ [I"jqplot_rails;T@"@ [I"jqplot-rails;T@@ [I" jqrating;T@@ [I"jqtools-rails;T@6@ [I"jqtree-rails;TU;[I" 0.1.4.3;T@ [I"jquelpers;T@"@ [I"jquery-ace-rails;T@@ [I"jquery_address-rails;T@@ [I"jquery-assets;T@[ @ [I"jquery-atwho-rails;T@@ [I"jquery_autocomplete;T@@ [I" jquery-auto-session-timeout;T@@ [I" jquery-bootstrap-pagination;T@@ [I"jquery-cheat;T@@ [I"jquery_cheats;TU;[I" 5.1.3;T@ [I"jquery_client;T@@@ [I"jquery-console-rails;T@@ [I"jquery_context_menu-rails;T@"@ [I"jquery_cookie_assets;T@@ [I"jquery-cookie-rails;T@`@ [I"jquery_corpus;T@@ [I"jquery-datatables-rails;TU;[I" 1.11.2;T@ [I"jquery_datepicker;T@R @ [I"jquery-disablewith;T@E@ [I"jquery-drag-rails;T@ @ [I"jquery-dragsort-rails;T@@ [I"jquery_drapper;T@ @ [I"jquery_dynamic_fields;T@@ [I"jquery-elastic-rails;T@@ [I"jquery-entwine-rails;T@@ [I"jquery_expand_assets;T@@ [I"jquery-facebook;T@@ [I"jquery-fileupload-rails;T@x@ [I"jquery.fileupload-rails;T@@ [I"jquery-gmap3-rails;T@`@ [I"jquery-gravatar-rails;T@`@ [I"jquery_helpers;T@@ [I"jquery-historyjs;T@@ [I"jquery-hotkeys-rails;T@@ [I"jquery-iframe_auto_resize;T@@ [I"jquery-image_reader;T@@@ [I"jquery-layout-rails;T@'@ [I"jquery-lazy-images;T@@ [I"jquery-lionbars;T@"@ [I"jquery-minicolors-rails;T@'@ [I"jquery_mobile_fa_rails;T@@ [I"jquery_mobile_rails;T@N@ [I"jquery_mobile-rails;T@@ [I"jquery-mobile-rails;T@@ [I"jquerymobile-rails;T@@ [I"jquery_mobile_rails_latest;T@@ [I"jquery-modal-rails;T@@ [I"jquery-mousewheel-rails;T@E@ [I"jquery_notify_bar;T@@ [I"jquery_on_rails;T@@ [I"jquery-photowall-rails;T@@ [I"jquery_picture_tag-rails;T@'@ [I"jqueryplugingen;T@@ [I"jquery-plugins-rails;T@`@ [I"jquery-popover;T@@ [I"jquerypp-rails;T@@ [I"jquery-qtip2-rails;T@@ [I"!jquery-queuesubmission-rails;T@"@ [I"jquery-rails;T@i6@ [I"jquery_rails3;T@l@ [I"jquery-rails-aristo;T@@ [I"jquery-rails-cdn;T@@ [I"jquery-rails-cdn-yjchen;T@@ [I"jquery-rails-multipart-xhr;T@@ [I"jquery-rails_vho;T@@ [I"jquery-raty-rails;T@'@ [I"jquery_regex;T@"@ [I"jquery-resize-image-rails;T@E@ [I"jquery-rest;T@@ [I"jquery-rest-rails;T@@ [I"jquery-scrollto-rails;T@@ [I"jquery-selectbox;T@'@ [I"jquery-selection-rails;T@'@ [I"#jquery-simplecolorpicker-rails;T@@ [I"jquery-slideMatrix-rails;T@@ [I"jquery-sliders-rails;T@'@ [I"jquery-smooth-scroll-rails;T@@ [I"jquery-source;T@@ [I"jquery-spinner-rails;T@@ [I"jquery-star-rating-rails;T@'@ [I"jquerysvg;T@Q%@ [I"jquery-tablesorter;T@@ [I"jquery_tag;T@@ [I"jquery-timepicker-rails;T@E@ [I"jquery-tipsy;T@'@ [I"jquery-tmpl-rails;T@@ [I"jquery-tokeninput-rails;T@ @ [I"jquery-tools;T@@ [I"jquery-turbolinks;T@@ [I"jquery-ui-bootstrap-rails;T@E@ [I"jquery-ui-form;T@^@ [I"jquery-ui-rails;T@@ [I"jqueryui_rails;T@"@ [I"jquery-ui-rails-cdn;T@`@ [I"jquery_ui_rails_helpers;T@"@ [I"jquery-ui-redmond;T@'@ [I"jquery-ui-themes;T@V@ [I"jquery_ujs_extended;T@@ [I"jquery_underscore-rails;T@@ [I"#jQuery-Validation-Engine-rails;T@'@ [I"jquery-validation-rails;T@Z-@ [I"jquery-validator;T@@ [I"jquery-week-calendar;T@@ [I"jquery-ztree-rails;T@@ [I" jquids;T@@ [I"jr;T@6@ [I"jrack_handlers;T@@[I" jrails;T@@ [I"jrails_auto_complete;T@I@ [I"jrails_ui;T@'@ [I"1jramos-activerecord-activesalesforce-adapter;T@@ [I" JRank;T@@ [I" jraw;T@@ [I"jrb;T@@ [I" j_rb;T@E@ [I"jrb_handler;T@@ [I" jrclj;T@@ [I" jretlang;T@@ [I" jrexml;T@J@ [I"jrjackson;T@n@ [I"jrmey-eventmachine;TU;[I" 0.12.12;T@ [I"jrmey-mysqlplus;T@+@ [I"jrsplenda;T@@ [I" jrtika;T@@ [I" jrtm;T@@ [@J@@[I"jruby-abridged;T@ @ [I"jruby-activemq;TU;[I" 5.5.1;T@[I"jruby-akka_jars;T@@[I"jruby-am-api;T@'@ [I"jruby-base32;T@@@ [I"jruby-bloomfilter;T@ @ [I"jruby_coercion;T@@[I"jruby-coercion;T@E@[I"jrubyconf-button;TU;[I"6;T@[I"jruby-ehcache;T@@ [I"jruby-ehcache-rails2;T@@ [I"jruby-ehcache-rails3;T@@ [I"jruby-elasticsearch;T@@ [I"jruby-elasticsearch_jars;TU;[I" 0.17.2;T@ [@m@,@[I"jruby-enginize;T@B@ [I"jruby-existdb;T@R @ [I"jruby_gc_stats;T@@[I"jruby-hazelcast;T@@ [I"jruby-hazelcast-store;T@@ [I"jruby-hornetq;T@x@ [I"jruby-httpclient;T@@[I"jruby-http-reactor;T@@ [I"jruby-jars;T@@ [I"jruby-jms;T@@ [I"jruby-launcher;T@D@[I"jruby-ldap;T@E@ [I"jruby-lint;T@x@ [I"jruby_mahout;T@I@ [I"jruby-management;T@'@[I"jruby-memcache-client;T@@ [I"jruby-memcached;T@@ [I"jruby-metrics;T@'@[I"jruby-msgpack;T@E@ [I"jruby-notify;T@@ [I"jruby-on-hadoop;T@@ [I"jruby-openssl;T@@ [I"JRuby-OpenSSL;T@@ [I"jruby-openssl-maven;T@@ [I"jruby-pageant;T@@ [@@@[I"jruby-parser;T@[ @ [I"jruby-pgp;T@@ [I"jruby-poi;T@- @ [I"jruby-prof;T@@ [I"jruby-quartz;T@@ [I"jruby-rack;T@@.@ [I"jruby-rack-jetty;T@@ [I"jruby-rack-metrics;T@@ [I" jruby-rack-standalone-jetty;T@'@ [I"jruby-rack-worker;T@D@[@@e@ [I"jruby-readability;T@@ [I"jruby-rfc2445;T@@ [I"jruby_sandbox;T@6@[I"jruby-scala;T@`@ [I"jruby-scala-collections;T@6@ [I"jruby-serviceproxy;T@+@ [I"jruby-slick;T@@ [I"jruby-spymemcached;T@'@ [I" jrubysql;T@@ [I"'jruby_streaming_update_solr_server;T@J@ [I"jruby_threach;T@@[I"jruby-vijava;TU;[I" 2.1.0.1;T@[I"jruby-win32ole;T@-@ [I"jrust-ssl_requirement;T@@ [I" jrzmq;T@@ [I"js;T@'@ [I"js2;TU;[I" 0.3.21;T@ [I"js2bookmarklet;T@@ [I"js-asset-paths;T@'@ [I" jsb3;T@@ [I"js-beautify;T@@ [I" jsbeauty;T@'@ [I"jsc;T@@ [I"jscaffold;T@e@ [I" jscat;T@@ [I"jschairb-rets4r;T@ʰ@ [I" jschat;T@@ [I"jschematic;T@@ [I"js-client-bridge;T@1@ [I" jscmd;T@@ [I"js-code-wrapper;T@6@ [I"jscolor-rails;T@@ [I"jscompress;T@;@ [I" jscover;T@@ [I"jsdebug-rails;T@@ [I" jsdefer;T@@ [I"jsdefer-haml;T@@ [I" jsdiff;T@- @ [I" jsdm;T@@ [I" jsdoc;T@@ [I"jsdoc_plugin;T@@ [I"jsdoc-rails;T@@ [I"jsdoc-toolkit;T@@ [I" jsduck;TU;[I" 4.6.0;T@ [I"jse;T@`@ [I"jsend-rails;T@@ [I" js_erb;T@1@ [I"jserror-rails;T@@ [I" jsexp;T@@ [I"js_fixtures;T@`@ [I"js-fixtures;T@E@ [I" js-get;T@@ [I" jshint4r;T@@ [I"jshint_on_rails;T@@ [I" jshintrb;T@@ [I" jsign;T@'@ [I"js_include;T@@ [I" jslint;T@N@ [I"jslint-johnson;T@@ [I"jslint_on_rails;T@@ [I" jslintrb;T@X@ [I"jslint-rb;T@6@ [I"jslintrb_v8;T@@ [I"jslint-source;TU;[I"2012.08.11;T@ [I"jslint-v8;T@@ [I"js-log-cucumber;T@@ [I"js_message;T@E@ [I"jsmestad-chargify;T@@ [I" jsmetric;T@`@ [I"jsmetric4java;T@`@ [I" jsmin;T@@ [I" jsminc;T@@ [I" jsmin_c;T@W@ [I"jsmin-ffi;T@I@ [I"js-model-rails;T@@ [I"js_namespace;T@E@ [I"js_namespace_framework;T@O@ [I" json;T@@[@a@@ [@a@=@ [@a@=@[I" json2env;T@@ [I"json2graphite;T@n@ [I" jsonable;T@@ [I" jsonapi;T@'@ [I"json_assert;T@E@ [I"jsonbuilder;T@@ [I"json_builder;T@Δ@ [I"json_cache;T@@ [I"json-compare;T@+@ [I"json_config_attributes;T@@ [I"json_controller_generator;T@'@ [I"json-endure;T@@ [I"json_expressions;T@@ [I"json_formatter;T@@ [I" jsonify;T@@ [I"jsonify-rails;T@@ [I"json_in_batches;T@'@ [I" jsonit;T@@ [I"json-jruby;T@@'u[@U;[I" 1.4.3.1;T@*[@@@[I" json-jwt;T@x@ [I"json-kpeg;T@`@ [I" json-ld;T@@ [I"json-maglev-;TU;[I" 1.7.5;T@ [I"json_mapper;T@@ [I"json_matcher;T@@ [I"jsonmodel;T@'@ [I"jsonmodel-formtastic;T@'@ [I"json-monitor;T@@ [I" json-net;TU;[I"3.5.0.53591;T@ [I"json_object;T@E@ [I"jsonorama;T@|@ [I"json_output_helper;T@@ [I" jsonp;T@'@ [I"json-parser;T@'@ [I"json_patch;T@@ [I" jsonpath;T@@ [I"json_patterns;T@@@ [I" jsonpipe;T@'@ [I" jsonpp;T@@ [I"jsonpretty;T@@ [I"json_proxy;T@@ [I"json_pure;T@=@ [I" jsonr;T@@ [I"json_record;T@@ [I"json_response;T@@ [I"json-response;T@@ [I" jsonrpc;T@@ [I" json-rpc;T@1@ [I" jsonrpc2;T@@ [I"jsonrpc2.0;T@$@ [I"jsonrpc2.0-tcp;T@1@ [I"jsonrpc-client;T@"@ [I"json-rpc-objects;T@@ [I"json-rpc-objects-bson;T@@ [I"json-rpc-objects-json;T@`@ [I"json-rpc-objects-msgpack;T@@ [I"json-rpc-objects-psych;T@@ [I"json-rpc-objects-yaml;T@@ [I"jsonrpc-server;T@@ [I"jsonschema;T@@ [I"json-schema;T@@ [I"json_schema_builder;T@@ [I"json_schema_tools;T@n@ [I"json_select;T@6@ [I"json_serialisable;T@E@ [I"json_serializable;T@@ [I"json_serialize;T@ @ [I"json_spec;T@@ [I"json-stream;T@@@ [I" jsont;T@6@ [I"jsontoerb;T@'@ [I"json-tools;T@E@ [I"json_tree;T@@ [I" jsontrim;T@+@ [I"json-utils;T@l@ [I" jsonview;T@'@ [I" jsony;T@'@ [I" jsort;T@"@ [I" jsound;T@6@[I" jsparrow;T@T @ [I" jspec;T@M@ [I"jspec-jquery-sandbox;T@@ [I"jspec_runner;T@@ [I"jspec-steventux;TU;[I" 3.3.2.1;T@ [I"jspooner-authlogic-connect;T@@ [I" jspp;T@N@ [I"js-preflight;T@@ [I" jsr166y;TU;[I" 20120125;T@ [I" js-rails;T@x@ [I"js_rake_tasks;T@`@ [I" jsrat;T@@ [I"jsrebuild;T@@ [I"jsRender-rails;T@@ [I"jsrequire;T@6@ [I" jsroutes;T@@ [I"js_routes;T@$@ [I"js-routes;T@-@ [I"jssignals-rails;T@N@ [I" js_spec;T@@ [I" jsss;T@@ [I" jstats;T@@ [I"jstd-runner;T@V@ [I" jstdutil;T@Q-@ [I"js_test_core;T@@ [I"js-test-driver-rails;T@@ [I"js-test-server;T@^@ [I"jstorimer-deep-test;T@O@ [I"jstorimer-heroku_s3_backup;T@@ [I" jstp;T@x@ [I"jstree_rails;T@+@ [I"jstree-rails;T@"@ [I" jstruct;T@`@ [I" jstyler;T@"@ [I"jsunit-sauce;T@E@ [I" jsus;T@x@ [I"jtable-rails;T@[@ [I"jtalk-rails;T@@ [I" jtest;T@`@ [I"jt-mobile-kit;T@'@ [I"jt-mobile-kit-rails;T@@ [I"jt-partial;T@@ [I"jtplparser;T@"@ [I"jtsandlund_gemtest_a;T@@ [I"jtsandlund_gemtest_b;T@@ [I"jtv;T@@ [I" jtv-apns;T@@@ [I" jubatus;T@@ [I" jubilee;T@I@ [I" jubjub;T@V@ [I" judge;T@@ [I"judge-formtastic;T@`@ [I"judge-simple_form;T@@ [I"judit-pickle;T@@ [I" judo;T@@ [I" judojs;T@@ [I"jugend-httparty;TU;[I" 0.5.3.4;T@ [I"juggernaut;T@ @ [I"juggernaut-kafka;T@ @ [I"juggernaut_rails;T@@ [I" juggle;T@E@ [I" juggler;T@@ [I" jugglite;T@"@ [I" jugynox;T@E@ [I"jugyo-gollum;T@ @ [I"jugyo-grit;T@C@ [I"jugyo-simplenote;T@@ [I" juice;T@I@ [I"juice10-action_flow;T@@ [I" juiced;T@'@ [I"juice_extractor;T@[@ [I" juicer;T@C@ [I"juicer-rails;T@@@ [I" juici;T@@ [I"juici-interface;T@@ [I" juke;T@@@ [I"jukebox-rails;T@@ [I" juliana;TU;[I" 0.0.81;T@ [I"julianmorrison-savon;T@^%@ [I"julien51-em-mysql;T@@ [I"julien51-sax-machine;T@@ [I"juliocesar-harmony;T@@ [I"jumbled-rspec-formatter;T@E@ [I" jumbler;T@@ [I" jumly;T@@ [I" jumoku;T@[@ [I" jump;T@@ [I" jumper;T@!@ [I"jumping_words;T@`@ [I"jumpstart;T@7@ [I"jumpstart_auth;T@@ [I" junebug;T@p@ [I"junebug-wiki;TU;[I" 0.0.37;T@ [I" jung;T@@ [I" jungle;T@@ [I" junior;T@`@ [I" junk;T@@@ [I"junk_drawer;T@n@ [I" junkfood;T@@ [I" junkie;T@3@ [I" juno;T@x@ [I" junodoc;T@@ [I"junos-config;T@@ [I"jurisgalang-snapurl;T@@ [I" jury;T@@ [I" juscr;T@&@ [I"just-a-test;T@'@ [I"just-datetime-picker;T@@ [I"justgage-rails;TU;[I" 1.0.1.2;T@ [I"just_giving;T@@ [I"justgiving_client;T@@ [I"justgiving-client;T@@ [I"justinchen-fluther;T@@ [I"justinf-hydra;TU;[I" 0.23.8;T@ [I""justinf-unification_assertion;T@E@ [I"justinsoong-ri_cal;T@@ [I"justlogging;T@@ [I"justlogging-rails;T@@ [I"just_maybe;T@I@ [I"justonedb;T@@ [I" justools;T@u@ [I"just_open_id;T@"@ [I"just_paginate;T@ @ [I"jvm_gc_graph;T@'@ [I"jvoorhis-knife-env-diff;T@@ [I" jvyaml;T@'@ [I"jwagener-multipart-post;T@@ [I"jwagener-nokogiri;T@@ [I" j-walker;T@@ [I"jwhitmire-geminstaller;T@u @ [I"jw_player_helper;T@'@ [I"jwplayer-rails;T@@ [I"jwt;T@|@ [I"jwysiwyg_rails;T@`@ [I"jxmlvalidator;T@@@ [I"jy-acts_as_votable;T@@ [I"jy-amazon-ecs;T@2@ [I" jyte;T@@ [I"jyurek-prawn-layout;T@@ [I" jzip;T@@ [I"k3cms_blog;T@@ [I" kablame;T@@ [I" kaboom;T@@ [I" kaching;T@@ [I" kado;T@@ [I" kadryll;T@'@ [I"kaerukeyword;T@@ [I" kafka;T@E@ [I"kafka-jars;TU;[I" 0.7.2.2;T@[I" kafka-rb;T@3@ [I" kaft;T@[ @ [I"kag;T@'@ [I" kage;T@e@ [I"kagemusha;T@V@ [I" kaibun;T@@ [I" kaiseki;T@@ [I"kaiwren-patron;T@"@ [I"kajabi-css_parser;T@N'@ [I" kakapo;T@@ [I"kakapo-notifier;T@@ [I"kaka-rails-settings;T@W@ [I"kala-rails;T@@ [I" kalc;T@@ [I"kalebkgem;T@E@ [I" kalei;T@'@ [I"kaleidoscope;T@@ [I"kalendae_assets;T@@ [I"kalenteri;T@`@ [I"kali-chef-deploy;T@` @ [I" kalipso;T@@ [I"kali-redis;T@`@ [I" kaltura;T@`@ [I"kaltura_fu;T@@ [I"kaltura-ruby;T@`@ [I"kamal-ancestry;T@u"@ [I"kamcaptcha;T@@ [I" kame;T@@ [I" kamel;T@@ [I" kameleon;T@@ [I"kamelopard;T@n@ [I" kametori;T@"@ [I" kamila;T@@ [I"kamilski81_lorem;T@E@ [I" kaminari;T@@ [I"kaminari-admin-theme;T@'@ [I"kaminari-bootstrap;T@6@ [I"kaminari-i18n;T@6@ [I" kana;T@@ [I"kanamei_log_formatter;T@'@ [I"kanbantastic;T@|@ [I"kandadaboggu-vote_fu;T@@ [I" kang;T@@ [I" kangaroo;T@@ [I" kanji;T@'@ [I" kanna;T@"@ [I"kannel_rails;T@'@ [I" kanocc;T@@ [I" Kanocc;T@@ [I"kanpou-watcher;T@@ [I" kanshi;T@@ [I"kansi_valid;T@n@ [I" kantan;T@'@ [I"kantan-sgf;T@E@ [I" kanye;T@I@ [I" kAPI;T@E@ [I" kapify;T@"@ [I" kaplan;T@[@ [I" kapow;T@x@ [I"KappaCUDA;T@@ [I" kaptcha;T@+@ [I" karait;T@@ [I" karakuri;T@6@ [I"karakuri-bao;T@|@ [I" karas;T@'@ [I" karel;T@@ [I"karenc_test_gem;T@@ [I"karl-growl;T@ @ [I" karmacrm;T@@ [I"karmasphere-client;T@@ [I" karotz;T@@ [I" karousel;T@@ [I"$karsthammer-inherited_resources;T@@ [I"karteek-docsplit;T@Y@ [I"karteek-tolk;T@@ [I" kasabi;T@@@ [I" kashflow;T@@ [I"kashflow_api;T@E@ [I"kashiwamochi;T@@ [I" kasket;T@ @ [I" kasoba;T@@ [I"kastner-clarity;T@ @ [I" kata;T@ @ [I"katakanaize;T@@ [I" katana;T@`@ [I"katana_stamp;T@@ [I" katcp;T@n@ [I" kate-get;T@+@ [I"kathy_lee;T@@ [I" kato;T@@ [I" katsudo;T@E@ [I"katsuya-rcov;T@w@ [I" kattr;T@E@ [I"katzil-capybara;T@@ [I" kaui;T@@ [I" kaupert;T@@ [I"kauperts_link_checker;T@@ [I" kauplus;T@6@ [I" kavlax;T@'@ [I" kawaii;T@`@ [I" kayabot;T@@ [I" kayak;T@'@ [I"kayakfares;T@'@ [I"kayakoapi-ruby;T@@ [I"KayakoClient;T@@ [I"kazjote-searchlogic;T@@ [I"kazkom_epay;T@@ [I" kazoo;T@@ [I" kazoo-rb;T@'@ [I"!kb-activerecord-jdbc-adapter;T@w@[I"kb-acts_as_revisable;T@@ [I"kbaum-mail;T@7*@ [I"kbaum-mongo;TU;[I" 0.19;T@ [I"kbaum-mongo_ext;T@2@ [I"kbaum-munger;TU;[I" 0.1.5.2;T@ [I"kbaum-pickle;TU;[I" 0.2.1.4;T@ [I"kbaum-rails_sequel;T@I@ [I"kbaum-rchardet;T@@ [I"kbaum-resque-priority;T@@ [I"kbaum-resque-retry;T@`@ [I"kbaum-webrat;T@@ [I"kb-authlogic;T@O7@ [I"kb-config;T@@ [I"kb-configurator;T@@ [I" kcaco;T@E@ [I"kcapifony;T@r6@ [I" kcar;T@x@ [I" kchart;T@'@ [I"kch-dominion;T@n@ [I"kch-ya2yaml;TU;[I" 0.29.1;T@ [I" kcluster;T@@ [I" kcrw;T@@ [I"kdegettext;T@@ [I"kdonaldson_string_gem;T@'@ [I"kdonovan-happymapper;T@@ [I" kdtree;T@[ @ [I" kd-tree;T@@ [I"kealy_cheese;T@@ [I"kealy_cms;T@@ [I"kealy_contact_form;T@'@ [I"kealy_foobar;T@'@ [I" kech;T@@ [I" kedama;T@6@ [I"keeguon-actionwebservice;TU;[I" 3.0.17.4;T@ [I" keen;T@@ [I" keep;T@@ [I"keep_alive;T@'@ [I" keepass;T@'@ [I"keepass-password-generator;T@`@ [I" keepassx;T@@ [I" keeper;T@@ [I"KeeperChallenge;T@"@ [I"keepitsafe;T@@ [I"keep_running;T@"@ [I"keeptesting;T@@ [I"keepyourhead;T@I@ [I" kefka;T@@ [I" keigan;T@E@ [I" keigo;T@@ [I" keikokuc;T@D@ [I" keima;T@E@ [I"keithmgould-delayed_job;T@@ [I" kekka;T@E@ [I" kekkan;T@'@ [I"kellimohr_test_gem;T@@ [I" kellysutton-socketio-client;T@'@ [I" kelp;T@@ [I"kelredd-gemsconfig;T@@ [I"kelredd-mailer;T@|@ [I"kelredd-media-rss;T@E@ [I"kelredd-pathsconfig;T@6@ [I"kelredd-pruview;T@@ [I"kelredd-repository;T@@ [I"kelredd-resourceful;T@&@ [I"kelredd-sinatra-helpers;T@@ [I"kelredd-sprockets-sinatra;T@I@ [I"kelredd-useful;T@@ [I"kelsotest;T@"@ [I"kematzy-tasks;T@`@ [I"kemen_foreigner;T@@ [I"kemen-ruby-odbc;T@@ [I"ken;T@@ [I"kenai_tools;T@@ [I" ken_all;T@1@ [I"kendoui-rails;T@V@ [I" kenexa;T@E@ [I"kenhirakawa-astrotrain;T@u @ [I"kenhirakawa-googlecharts;T@@ [I" kenji;T@R @ [I" kennedy;T@@ [I"kenneth_the_page;T@'@ [I"kenny_dialoggins;T@@ [I" kensa;T@@ [I" kensan;T@'@ [I" Kensei;T@E@ [I" kenshoo;T@@ [I"kent-authlogic_rpx;T@@ [I" kentouzu;T@"@ [I"kent-rpx_now;T@A@ [I"kenwaln-whatlanguage;T@ @ [I"kenyacodes;T@@ [I" kepi;T@@ [I"kerbaldyn;T@@ [I" kerberos;T@[ @ [I"kerio-ical;T@'@ [I" kermit;T@@ [I"kernel_assert;T@@ [I"kernel_hash;T@@ [I"kernel_let;T@@ [I" kernul;T@@ [I" kerplutz;T@6@ [I"kerryb-httparty;T@"@ [I"kerryb-net-ssh-socks;T@@ [I"kerryb-right_aws;TU;[I" 1.10.2;T@ [I"!kerryb-right_http_connection;T@@ [I"keshav-actionwebservice;T@@ [I" keso;T@@ [I"kestrel-client;T@@ [I"kestrelrb;T@@ [I" ketchup;T@@ [I"kete_browserid;T@@ [I"kete-feedzirra;TU;[I" 0.0.20.1;T@ [I"kete_gets_trollied;T@@ [I"kete_trackable_items;T@'@ [I"kete_translatable_content;T@`@ [I"Kevins-Studio-Game;T@@ [I" kev_the_dev_mad_mimi_mailer;T@V@ [I" kev_the_dev-mad_mimi_mailer;T@V@ [I"kewego_party;T@'@ [I" keyboard;T@'@ [I"keyboard_battle;T@@ [I"keyboardjs-rails;T@I@ [I" keybox;T@u@ [I" keychain;T@@ [I"keychain_manager;T@'@ [I"keychain_services;T@`@ [I" keycodes;T@E@ [I"keycutter;T@@ [I" keyczar;T@'@ [I"keyczar-jruby;T@@ [I"keyczar_ruby;T@@ [I" key-db;T@A@ [I" keydown;T@' @ [I" keyhole;T@@ [I"KeyholeIO;T@!@ [I"key-installer;T@s@ [I" keymaker;T@@ [I" keymap;T@@ [I"keymaster;T@@ [I"keymaster-rails;T@@ [I" keynote;T@6@ [I"keynote_driver;T@@ [I" Keypad;T@@ [I" keyrack;T@@ [I" keyring;T@@ [I"keyring-kwallet;T@@ [I" keysms;T@E@ [I" keystone;T@$@ [I"keystone-sass;T@@ [I"keystorage;T@LN@ [I"key_struct;T@@ [I" keytar;T@@ [I" keyval;T@'@ [I"keyvalidatable;T@@ [I" keyvalue;T@`@ [I"key_value;T@"@ [I"keyvaluecoding;T@'@ [I"key_value_ext;T@@ [I" keyword;T@E@ [I"keyword_arguments;T@`@ [I"keyword-filter;T@6@ [I"key-word-filter-on;T@'@ [I"keyword_params;T@'@ [I"keyword_prospector;T@@ [I"keyword_ranking;T@x@ [I"keyword_rankr;T@@ [I"keyword_search;T@@ [I" kfold;T@R @ [I"kgb;T@@ [I"kgbhomeAPI;T@@ [I" kgem;T@g@ [I" kgestpay;T@!@ [I" kgio;TU;[I" 2.7.4;T@ [I"kgio-monkey;T@x@ [I"khammurabi;T@!@ [I"Kharites-tools;T@@ [I" khayyam;T@'@ [I"khelben-autotest-rails;T@I@ [I" khoj;T@'@ [I" khronos;T@+@ [I"khronotab;T@@ [I"ki;T@E@ [I" kibali;T@@ [I" kibi;T@@ [I"kibiz0r-rspec-rr;T@@ [I" kibo;T@@ [I" kibosh;T@@ [I" kibou;T@@ [I"kickboxer;T@'@ [I" kicker;T@r@ [I" kickoff;T@E@ [I"kickstart;T@@ [I"kickstarter;T@@ [I"kickstartgem;T@'@ [I"kid80-cijoe;T@I@ [I" kidomath;T@@ [I" kiel;T@Y@ [I"ki_format;T@@ [I" kiita;T@`@ [I" kikambii;T@E@ [I" kiki;T@`@ [I" kiki_gem;T@@ [I" kikubari;T@@ [I"killergem;T@@ [I"killer_rspec_rack;T@'@ [I" killsite;T@@ [I" kilt;T@@ [I"kim;T@@ [I"ki_middleman;T@ @ [I"kim-logger;T@E@ [I" kimotter;T@@@ [I"kin;T@@ [I" kinata;T@@ [I" kinbote;T@@ [I" kindable;T@"@ [I" kindai;T@ @ [I" kind_dom;T@@ [I" KindDom;T@- @ [I"kindeditor;T@@ [I"kindergarten;T@`@ [I" kindle;T@E@ [I"kindleclippings;T@@ [I"kindle-drm;T@@ [I"kindle-feeds;T@ @ [I" kindlefs;T@`@ [I"kindlegen;T@1@ [I"kindle_hacks;T@@ [I"kindle-highlights;T@@ [I"kindlemail;T@^@ [I" kindler;T@@ [I" kindlerb;T@`@ [I"kindle_strip;T@E@ [I"kindle_util;T@@ [I" kindling;T@@ [I" kindred;T@@ [I" kinect;T@@ [I"kinectable;T@'@ [I"kinectaby;T@'@ [I"kinetosis;T@E@?[@!@E@([I"king_dtaus;T@@ [I"king_hmac;T@@ [I" kingkong;T@@ [I" kingpin;T@@ [I"king_placeholder;T@@ [I" king_soa;T@@ [I"king_tokens;T@O@ [I"king_views;T@@ [I"kinopoisk;T@@ [I" kintama;T@!@ [I" kioku;T@@@ [I" kiosk;T@@ [I" kipatra;T@@@ [I"ki_pivotal;T@V@ [I" kippt;T@@ [I" kiqit;T@'@ [I" kiqstand;T@@ [I" kirby;T@ @ [I"KirbyBase;T@r@ [I" ki-repo;T@`@ [I" kirk;T@@[I" kisaweb;T@@ [I" kiss;TU;[I" 1.8.9;T@ [I" kissfft;T@'@ [I" kissgen;T@@ [I"kissmetrics;T@O@ [I"kissmetrics_rails;T@'@ [I"kissy-rails;T@E@ [I"kit;T@@ [I" kitabu;T@@ [I" kitchen;T@@ [I"kitchensink;T@I@ [I" kitco;T@@ [I" kite;T@'@ [I"ki_trello;T@@ [I" kitsune;T@@ [I" kitten;T@'@ [I" kitty;T@"@ [I" kittybot;T@@ [I"kitty_gen;T@<<@ [I"kittytest;TU;[I"0.0.1.1.1.1.1.1;T@ [I" kiva;TU;[I"0.1.14593;T@ [I" kiwi;T@@ [I"ki_youtrack;T@"@ [I" kizapi;T@@ [I" kjappsms;T@@ [I" kjess;T@@ [I" kks-gem;T@'@ [I"klacointe-openpgp;T@@ [I" kladr;T@@ [I"kladr_converter;T@'@ [I" klarlack;T@@ [I" klarna;T@6@ [I"klarna_chef;T@@ [I"klass_name_types;T@@ [I" klaviyo;T@@ [I" klink;T@@ [I"klink-ruby-api;T@ @ [I" klipbook;T@@ [I" klomp;T@ @ [I" klookup;T@R @ [I" klops;T@@ [I" klout;T@ @ [I" kloutbg;T@@ [I" klout-rb;T@@ [I"km;T@;@ [I"kmandrup-colorist;T@|@ [I" kmeans;T@n@ [I" k_means;T@n@ [I" kmlbo;T@@ [I" km-psych;T@@ [I"km_resque;T@@ [I"km-resque;T@@ [I"kmz_compressor;T@@ [I"knapo-i18n;T@4D@ [I"knife-atrribute;T@'@ [I"knife-attribute;T@@ [I"knife-audit;T@@ [I"knife-azure;T@@ [I"knife-baremetalcloud;T@@ [I"knife-batch;T@@ [I"knife-bigv;T@@ [I"knife-block;T@@ [I"knife-bluebox;T@@ [I"knife-brightbox;T@I@ [I" knife-bulkchangeenvironment;T@@ [I"knife-cfn;T@+@ [I"knife-clodo;T@g@ [I"knife-cloudstack;T@ @ [I"knife-cloudstack-fog;T@W.@ [I"knife-community;T@'@ [I"knife-config;T@@ [I"knife-cookbook-bump;T@'@ [I" knife_cookbook_dependencies;T@V@ [I"*knife_cookbook_dependencies_over_http;TU;[I" 0.0.8.3;T@ [I"knife_cookbook_sync;T@'@ [I"knife-crawl;T@'@ [I"knife-crypt;T@E@ [I"knife-dsl;T@@ [I"knife-dwim;T@@ [I"knife-ec2;T@@ [I"knife-env-diff;T@"@ [I"knife-essentials;T@&@ [I"knife-esx;T@@ [I"knife-eucalyptus;T@@ [I"knife-file;T@@ [I"knife-flip;T@6@ [I"knife-flow;T@"@ [I"knife-gandi;T@I@ [I"knife-github-cookbooks;T@@ [I"knife-google;T@'@ [I"knife-hardware;T@'@ [I" knife-hp;T@@ [I"knife-inspect;T@@ [I"knife-ipmi;T@'@ [I"knife-joyent;T@@ [I"knife-kvm;T@@@ [I"knife-lastrun;T@"@ [I"knife-linode;T@@ [I"knife-lxc;T@'@ [I" knife-nc;T@E@ [I"knife-ninefold;T@@ [I"knife-nodefu;T@@ [I"knife-oca;T@@ [I"knife-ohno;T@@ [I"knife-openstack;T@@ [I"knife-ovh;T@E@ [I"knife-parallel-ec2;T@'@ [I"knife-playground;T@I@ [I"knife-preflight;T@6@ [I"knife-rackspace;T@@ [I""knife-rackspace-load-balancer;T@@ [I"knife-remotekvm;T@'@ [I"knife-remotelxc;T@'@ [I"knife-rhn;T@@ [I"knife-role-spaghetti;T@"@ [I"knife-santoku;T@1@ [I"knife-server;T@@ [I" knife-sl;T@@ [I"knife-solo;T@@ [I"knife-solo_data_bag;T@@ [I"knife-spork;T@ @ [I"knife-stats;T@'@ [I"knife-support;T@'@ [I"knife-table;T@@ [I"knife-terremark;T@@ [I"knife-ucs;T@@ [I"knife-vagrant;T@@ [I"knife-vcloud;T@@ [I"knife-voxel;T@V@ [I"knife-vsphere;T@@ [I"knife-windows;T@'I@ [I"knife-wrapper;T@'@ [I"knife-xapi;T@_@ [I"knife-xenserver;T@@ [I"knife-zcloudjp;T@6@ [I"knightlabs-registry;T@'@ [I"knights_tour;T@@ [I" knipper;T@'@ [I" knitkit;T@~T@ [I"knjappserver;TU;[I" 0.0.30;T@ [I"knjdbrevision;T@@ [I" knjrbfw;TU;[I" 0.0.101;T@ [I" knjtasks;T@@ [I" knmi;T@@ [I"knn;T@'@ [I" knnball;T@@ [I"knock-knock;T@n@ [I"knoc-knoc;T@'@ [I"knockoutjs-rails;T@ @ [I"knockout-rails;T@@ [I" knot;T@E@ [I"kns_email_endpoint;T@@@ [I"kns_endpoint;T@@ [I"knut_tools;T@@ [I" knykode;T@'@ [I"ko;T@@ [I" koala;T@ @ [I"koala-rails;T@g@ [I" koalemos;T@@ [I" koality;T@@ [I"kobra_client;T@"@ [I" koda;T@3@ [I"koda-calais;T@@ [I" kodama;T@@ [I" kode;T@@ [I"kodekopelli;T@@ [I" kodiak;T@'@ [I"koelner_phonetic_encoder;T@@ [I"koeppen_geiger;T@@ [I" kofi;T@@ [I"kog;T@@ [I"koi;T@@ [I" koi-lang;T@"@ [I" koinz;T@V@ [I"koi-reference-compiler;T@E@ [I"koi-reference-parser;T@@ [I" koi-vm;T@"@ [I"koi-vm-ruby;T@"@ [I"koko-koko;T@E@ [I"koko_rails;T@@ [I"kolach-melomel;T@$@ [I" kolb;T@'@ [I" kolorize;T@'@ [I"komachi_alive_monitoring;T@@ [I" komainu;T@@ [I" komandir;T@@ [I" komando;T@@ [I" komerci;T@'@ [I" komodo;T@@ [I" komonzu;T@@ [I"kompanee-recipes;T@+@ [I" kompress;T@@ [I" konacha;T@ @ [I"konacha-chai-matchers;T@@ [I"konchikuwa;T@@ [I" kondi;T@@ [I" konf;T@E@ [I" konfig;T@@ [I"konfigurator;T@@ [I"kongnomal;T@|@ [I" konjac;T@@ [I"konjure-bundler-fix;T@@ [I"konnichiwa;T@'@ [I" konpasu;T@E@ [I" konstati;T@@ [I"kontagent;T@@ [I" kontext;T@`@ [I"kontoapi-rails;T@[@ [I"kontoapi-ruby;T@@ [I"kontocheck;T@@ [I"konto_check;T@@ [I" kontrol;T@R @ [I"kontrol-io;T@@ [I" kooaba;T@E@ [I"kookaburra;T@@ [I"kookoo-gem;T@@ [I"koombea-delayed_job;T@@ [I" koprol;T@E@ [I" korben;T@@ [I" korboard;T@@ [I"korean-string;T@@ [I"korean_zipcode_finder;T@6@ [I" korekuto;T@E@ [I"koremutake;T@@ [I" korma;T@@ [I" kosher;T@n@ [I"kosmeek_test_tools;T@'@ [I"kosmonaut;T@@ [I"kostya-bluepill;TU;[I" 0.0.60.3;T@ [I" kotodama;T@@ [I" koudoku;T@@ [I" koujou;T@6@ [I" kowala;T@@ [I" koyomi;T@@ [I" kpeg;T@ @ [I"kp_folder;T@"@ [I"kpi;T@X@ [I" kpigen;T@'@ [I"krakatoa-icmp4em;T@@ [I"krakatoa-openx;T@:!@ [I" kraken;T@n@ [I"kraken-build;T@@ [I"kraken-js;T@'@ [I" kramdown;T@@ [I"kramdown-gist;T@@ [I"kramdown-haml;T@E@ [I"kramdown-rfc2629;T@&@ [I" krappy;T@'@ [I" kraut;T@@ [I" krawler;T@ @ [I" krazy;T@@ [I" krb5;T@@ [I"krb5-auth;T@D@ [I" krbpwd;T@!@ [I"kredentials;T@W@ [I"kreegerator;T@@ [I" kren-fib;T@@ [I" krish;T@@ [I"kris-kross;T@'@ [I"krisl_gem;T@@ [I"kristjan-st-elsewhere;T@1@ [I" krjs;T@u @ [I"krk-timetables;T@@@ [I"krl;T@@ [I" kronic;T@;@ [I" kronisk;T@'@ [I" kronk;T@:!@ [I"kronn-has_many_polymorphs;T@i@ [I" kronos;T@@ [I"kronparser;T@"@ [I"krukid-cld;T@x@ [I"kryptonite;T@@ [I"kschadeck-active_shipping;TU;[I" 0.9.15;T@ [I"ksd;T@E@ [I" kshramt;T@@ [I"kss;T@x@ [I" kss-alan;T@@ [I"kss-rails;T@@ [I"kss-rails-alan;T@@ [I" kstrano;T@@ [I" ksync;T@@ [I"ktheory-fakefs;T@@ [I"ktheory-fog;T@x@ [I"ktheory-right_aws;T@+@ [I"ktheory-vlad;T@O@ [I"ktheory-vlad-git;T@ @ [I"kth_omniauth;T@E@ [I" kthxbye;T@@ [I" ktools;T@@ [I"ktopping_acl9;T@@ [I"kuahyeow-sunspot;T@@ [I"kuahyeow-sunspot_rails;TU;[I" 0.10.7;T@ [I" kuaipan;T@@ [I"kuaipan-example;T@E@ [I" kuaiqian;T@`@ [I"kuali-rice;T@`@ [I"kuali-sakai-common-lib;T@V@ [I" kuality;T@'@ [I"kube-rails;T@"@ [I" kublog;T@- @ [I" kubrick;T@`@ [I"kue;T@@ [I" ku_fu;T@@ [I" kuhsaft;T@@ [I" kui-md;T@'@ [I"kuji-cube;T@ @ [I"kuji-mercury-rails;T@@ [I" ku-ldap;T@'@ [I" kuler;T@@ [I"kulesa-celluloid;T@-/@ [I"kulesa-contacts;T@@ [I"kulesa-sidekiq;T@@ [I" kumade;T@@ [I" kumo;T@@ [I"kung_figure;T@@ [I"kunkakunka;T@E@ [I" kunoichi;T@E@ [I"kuntoaji-harmony;T@@ [I" kurohige;T@ @ [I" kuroko;T@E@ [I" kuro-rs;T@n@ [I"kurowski-patron;T@"@ [I" kurs;T@@ [I"kut;T@@ [I"kuztuscms;T@@ [I" kuzushi;TU;[I" 0.0.55;T@ [I"kv;T@@ [I" kvbean;T@E@ [I"kvc;T@@ [I"kvo;T@"@ [I" kvom;T@@ [I" kvo-rb;T@'@ [I" kvpair;T@'@ [I"kvs;T@@ [I"kvs-foreigner;T@I@ [I" kwaff;T@@ [I" kwala;T@e@ [I" kwalify;T@@ [I" kw_apn;T@Y@ [I" kwartz;T@@ [I" kwatable;T@@ [I" kwoon;T@E@ [I"k-yamada-net-ssh;T@9@ [I" kyanite;T@@ [I"kynetx_am_api;TU;[I" 0.1.30;T@ [I"kyotocabinet;T@@ [I"kyotocabinet-java;T@@[I"kyotocabinet-ruby;TU;[I" 1.27.1;T@ [I" kyotor;T@'@ [I"kyoto_record;T@@ [I"kyototycoon;T@@ [I" kytoon;T@ @ [I"kyusik-google_analytics;T@@ [I"l;T@@ [I" l10n;T@@ [I" l10nizer;T@@ [I"l10n-simplified;T@B@ [I"l2p;T@@ [I"lab;T@@ [I"lab419-config;T@@ [I"lab419_core;T@"@ [I"lab_bench;T@@ [I"label_builder;T@@ [I" labelize;T@+@ [I"labelized;T@@ [I" labels;T@n@ [I"labilerecord;T@@ [I"labjs-rails;T@d@ [I" lablr;T@@ [I"labmanager;T@`@ [I"lab-manager;T@@ [I" labor;T@6@ [I"laborantin;T@@@ [I" labrador;T@'@ [I" Labrador;T@'@ [I" labs;T@ @ [I"labs-deployer;T@n@ [I"labs-win32;T@ @ [I" laces;T@@ [I"lachie-tapp;T@N@ [I"#lachlanhardy-warden-googleapps;T@"@ [I" lackie;T@@ [I"laco-ruby-gmail;T@@ [I"laco-www-delicious;T@@ [I" lacquer;T@M+@ [I"lad;T@@@ [I" ladle;T@@ [@v@@[I"lady_gaga;T@'@ [I" lafcadio;T@@ [I" laforge;T@W9@ [I" laika;T@u@ [I" lam_auth;T@O@ [I"lambda-queuer;T@"@ [I"LambdaRegexp;T@'@ [I" lambdas;T@'@ [I"lame_adapter;T@@ [I" lamed;T@@ [I"lame_encoder;T@`@ [I" lamer;T@@@ [I" landable;T@'@ [I" landb;T@"@ [I" landlord;T@@ [I"landslider;TU;[I" 0.5.28;T@ [I"lane_groove;T@@ [I" lang;T@@ [I" langa;T@@ [I"langalex-authlogic_oauth2;T@@ [I"langalex-cijoe;T@'@ [I" langdect;T@@ [I" langhelp;T@ @ [I" langis;T@@ [I"langouste;T@1@ [I" langrove;T@|@ [I" LanGrove;T@E@ [I"langrove-google-plugin;T@R@ [I"langrove-mongodb-plugin;T@R@ [I"langrove-plugin-google;T@@ [I"langrove-plugin-mongodb;T@@ [I"langrove-plugin-resque;T@[ @ [I"langrove-resque-plugin;T@R@ [I" langscan;T@@[@@@ [I" langtag;T@@ [I" language;T@@ [I"language-converter;T@@ [I"language_detection;T@E@ [I"language_detector;T@@ [I"language_list;T@@ [I"languager;T@'@ [I"language_sniffer;T@@ [I"language_switcher;T@@ [I"language-translator;T@|@ [I" langue;T@"@ [I"langue-japanese;T@"@ [I"langulator;T@@ [I" langusta;T@@ [I"lannon-lunr;T@~T@ [I"#lantins-resque-multi-job-forks;T@@ [I" lantus;T@E@ [I" lanyrd;T@'@ [I"laowaihua;T@@ [I" lapidary;T@@@ [I" lapillus;T@"@ [I" lapino;T@`@ [I"lapluviosilla-tickle;T@g@ [I"laptimer-geometry;T@E@ [I" laravel;T@@ [I" larch;T@@ [I"lardawge-rfm;T@L@ [I"large-hadron-migrator;T@@ [I"largentinas;T@@ [I" lark;T@E@ [I"larkistrano;T@n@ [I"larsburgess-rest-client;T@l@ [I"larsklevan-after_commit;T@ @ [I"larsklevan-json;T@@ [I"larsklevan_s3_swf_upload;T@@ [I"larsklevan-will_paginate;T@ϯ@ [I" larynx;T@1@ [I"las2witsml;T@@@ [I"lascivious;T@@ [I" lash;T@@ [I"lash-sprites;T@@ [I"las_reader;T@@ [I" lasso;T@@ [I"lastdotfm;T@@ [I" lastfm;TU;[I" 1.14.0;T@ [I" last_fm;T@@ [I" lastfm12;T@E@ [I"lastfm-cli;T@@@9[I"lastfm-client;T@@ [I"lastfm-path-finder;T@@ [I"lastfm-tail;T@@ [I"lastfm_tools;T@@ [I"lastfm-top;T@@ [I"lastgroov;T@@ [I"last_mod_cache;T@@ [I" lastrb;T@@ [I"last-resort;T@@ [I"last-seen-recipes-handler;T@E@ [I" latch;T@x@ [I" later;T@@ [I"later_dude;T@@ [I"laterpaper;T@@ [I" latest;T@x@ [I"latest_branch;T@@ [I" latex;T@6@ [I"latex-decode;T@3@ [@F@3@[I"latex-project-template;T@"@ [I"latex-tools;T@@ [I"latex-to-unicode;T@`@ [I" lather;T@@ [I"latinchart;T@E@ [I" latinirb;T@@ [I" latinum;T@[@ [I"latinverb;T@@ [I" latte;T@"@ [I" lattice;T@@ [I" launch;T@O@ [I"launch-agent;T@@ [I"launchcraft;TU;[I"0.0.1.4.2;T@ [I" launchdr;T@|@ [I" launchit;T@'@ [I"launchpad;T@I@ [I" launchr;T@@ [I"launch_tracks;T@@ [I" launchy;T@ @[@p@ @ [I"launchy_opensearch;T@@ [I"launchy-opensearch;T@u@ [I" laundry;T@V@ [I" lavender;T@@ [I"lawnchair;T@A@ [I"lawn-login;T@n@ [I"law_of_demeter_violator;T@'@ [I" laws;T@ @ [I"lax;T@@ [I"lay;T@@ [I" laydown;T@@ [I"layercake;T@@ [I" layo;T@@ [I" layou2;T@`@ [I" layout;T@@ [I"layout_generators;T@@ [I"layout_mollio_generator;T@- @ [I"layout_options;T@I@ [I"layout_yullio_generator;T@- @ [I" laysl;T@'@ [I" laze;T@@ [I" lazer;T@@ [I" lazibi;T@=@ [I" lazier;T@ @ [I" lazing;T@`@ [I" lazy;T@Q@ [I" lazybox;T@,@ [I"lazy_caching;T@O@ [I" lazydb;T@"@ [I" lazydoc;T@@ [I"LazyEnumerable;T@"@ [I" lazyeval;T@E@ [I"lazyfeatures;T@E@ [I" lazygem;T@@ [I" lazyhash;T@`@ [I"lazy-head-gen;T@@ [I"lazy_high_charts;T@@ [I"lazy_high_charts_tomgi;T@@ [I" lazylist;T@@ [I"lazy_load;T@6@ [I"lazy_mail;T@@ [I"lazy_methods;T@@ [I"lazy_mock;T@@ [I"lazymodel;T@@ [I"lazy_model;T@ @ [I"lazy_named_routes_helpers;T@@ [I"lazy_observers;T@"@ [I"lazyportal;T@@ [I"lazy_resource;T@@ [I"lazy-searchlogic;TU;[I" 2.4.10;T@ [I"lazy_string;T@'@ [I"lazy_susan;T@X@ [I"lazy-wombat;T@E@ [I" lbank;T@@ [I"lbs-config;T@E@ [I"lb_string_extend;T@'@ [I" lcbo;T@@ [I"lcclasses;T@"@ [I" lctl;T@@ [I"ldap-filter;T@@ [I"ldap_fluff;T@6@ [I" ldapi;T@@ [I"ldapmapper;T@@ [I"ldap-rails;T@@ [I"ldap-relations;T@@@ [I"ldap-shell-utils;T@@ [I" ldaptic;T@I@ [I" lda-ruby;T@@ [I" ldclip;T@@ [I" ldoce;T@E@ [I"le;T@@ [I"le1t0-capistrano;TU;[I"2.5.18.024;T@ [I"le1t0-deprec;TU;[I"2.1.6.088;T@ [I"le1t0-dige;T@e@ [I"le1t0-oauth-plugin;TU;[I"0.3.14.001;T@ [I"le1t0-parsley-ruby;TU;[I"0.4.5.001;T@ [I"le1t0-syslogger;TU;[I"1.2.4.002;T@ [I"le1t0-whenever;TU;[I"0.6.2.004;T@ [I"le88-aws-s3;TU;[I"0.6.4.1310482383;T@ [I"leaderboard;T@ @ [I"leaderboard_factory;T@E@ [I"leadlight;T@@ [I"leadspend;T@@ [I" leadtune;T@@ [I"lead_zeppelin;T@!@ [I" leaf;T@6@ [I" leaflet-markercluster-rails;T@@ [I"leaflet-rails;T@@ [I" leakedin;T@'@ [I" leaks;T@@@ [I" leanback;T@@ [I" leander;T@[ @ [I"leandocument;T@|@ [I"leankitkanban;T@`@ [I"leanmodel;T@+@ [I"lean-ruport;T@@ [I"lean_stamper;T@"@ [I" leap;T@M+@ [I" leap_ca;T@@ [I" leap_web;T@'@ [I"leap_web_certs;T@"@ [I"leap_web_core;T@'@ [I"leap_web_users;T@'@ [I" learn;T@'@ [I"learnable-notifier;T@E@ [I"learn_gem;T@"@ [I" learning;T@'@ [I"learn_rails;T@@ [I"learn_ruby;T@'@ [I"learnsprout;T@@ [I"learn_words;T@@@ [I"least_squares;T@@ [I" leaves;T@`@ [I"leboncoin;T@"@ [I" lebowski;T@x@ [I" lector;T@n@ [I" le_delay;T@@ [I" leDelay;T@!@ [I" LeDelay;T@!@ [I"lederhosen;T@@ [I"ledermann-rails-settings;T@N@ [I"ledger-rest;T@+@ [I"ledger_web;TU;[I" 1.4.11;T@ [I" ledis;T@'@ [I"ledsign-api;T@@ [I" leech;T@@ [I" leecher;T@@ [I" leek;T@'@ [I"leela_client;T@E@ [I" leeno;T@E@ [I" leeroy;T@@ [I"leetpassword;T@@ [I"leetspeak;T@`@ [I"leftbrained-ar_mailer;T@@ [I"leftplayer;T@`@ [I"leftright;T@e@ [I"leftronic;T@@ [I"leftronicapi;T@N@ [I" legacy;T@@ [I"legacy_data;T@@ [I"legacy_enum;T@@ [I"legacy_migrations;T@@ [I"legacy_model_generator;T@'@ [I"legacy_woes;T@@ [I"legal_beagle;T@@ [I"legal-docs;T@@ [I" legalese;T@'@ [I"legalizer;T@[@ [I"legal-poo;T@@ [I" legato;T@n@ [I"legendastv-crawler;T@@ [I"legislation-uk;T@@ [I"legit-the-git;T@n@ [I"Legit-the-Git;T@@ [I"lego-core;T@@ [I"lego-haml;T@E@ [I"legolin-happymapper;T@@ [I" lego_nxt;T@E@ [I" legs;T@@ [I"leifcr-mm-sluggable;T@[@ [I" leipzig;T@@ [I"lelylan-rb;T@'@ [I"lem;T@`@ [I"lemmatizer;T@@ [I" lemon;T@e@ [I" lemonade;T@@ [I"lenovo-powervfw;T@@ [I"lenovo-powervfw_client;T@@ [I" lens;T@'@ [I"lens_base;T@'@ [I"lensflare;T@@ [I"leofs_manager_client;T@V@ [I" leonardo;T@Z-@ [I"lepidoptera;T@@ [I"leshill-will_paginate;T@W@ [I" less;T@t@ [I"less_assets;T@I@ [I"lesselements-rails;T@D@ [I"less-expander;T@6@ [I"lessframework-rails;T@'@ [I" lessify;T@`@ [I" less-js;T@`@ [I"less-js-source;T@@ [I"lesslateral;TU;[I" 1.2.21;T@ [I" lessmsi;T@@ [I"lessneglect;T@@ [I""lessonplanet-acts_as_rateable;T@@ [I"lesspainful;T@Z@ [I" lessr;T@@ [I"less-rails;TU;[I" 2.2.6;T@ [I"less-rails-bootstrap;T@ @ [I"less-rails-bootswatch;T@@ [I"less-rails-fontawesome;T@@ [I"less-rails-liftkit;T@!@ [I"less_simple;T@+@ [I" lesstile;T@@ [I"lesstrack;T@@ [I"let;T@6@ [I"let-it-be;T@@ [I" letmein;T@+@ [I",let_me_mass_assign_protected_attributes;T@@ [I"letsfreckle-client;T@@ [I" letsrate;T@ @ [I"letsshop_mapper;T@;@ [I" letter;T@'@ [I" Letter;T@'@ [I"lettercase;T@@ [I"letter_opener;T@@ [I"letter_opener_web;T@E@ [I"letterpress;T@n@ [I"letter_press;T@'@ [I"*letter_press_is_not_as_good_as_boggle;T@@ [I" letters;T@@ [I"letter_stamp_mail_delivery;T@@ [I"letterweight;T@+@ [I" lettr;T@@ [I" lettuce;T@@ [I"leuk-faker;T@`@ [I" level3;T@'@ [I"leveldb-ruby;T@X@ [I" levene;T@"@ [I"levenshtein;T@I@ [I"levenshtein19;T@@ [I"levenshtein-19;T@@ [I"levenshtein-c;T@@ [I"levenshtein-extended;T@'@ [I"levenshtein-ffi;T@@ [I"levenshteinish;T@@ [I" levitate;T@E@ [I"levitation;T@@ [I"lexical_uuid;T@@ [I"lexidecimal;T@'@ [I" lexr;T@@ [I"lfd;T@@ [I"lg;T@E@ [I"lgierth-rack-mount;T@0@ [I" lg-lcd;T@'@ [I"lgustafson-validatable;T@ȯ@ [I"lh;T@@ [I" lh2gh;T@'@ [I" lhbackup;T@@ [I"lhm;T@@ [I" liaison;T@"@ [I" Liaits24;T@@ [I"liangzan-comma;T@@ [I"liangzan-contacts;TU;[I" 1.2.22;T@ [I"liangzan-intercession;T@@ [I"liangzan_omniauth-trello;T@V@ [I"#liangzan-validation_reflection;T@@ [I" liars;T@@ [I"liarsdice_cbarcroft;T@@ [I" libaaron;T@@ [I" libacl;T@'@ [I"libarchive;T@@@ [@@@@[I"libarchive-ruby;T@@ [I"libarchive-ruby-swig;T@@ [I"libarchive-static;T@@y;[@@@ [@@@1[I"libarchive-static-ruby186;T@@y;[@@@1[I" libastag;T@E@ [I" libby;T@@ [I"libcdb-ruby;T@"@ [@@"@[@@"@ [I"libconfig;T@'@ [I"libcraigscrape;T@@ [I"libcruisecontrol;T@6@ [I"libdevinput;T@'@ [I" libdir;T@ @ [I" libdolt;T@@ [I" libeagle;T@s@ [I" libelule;T@E@ [I"libertine;T@E@ [I"libertybot;T@@ [I"liberty_reserve;T@@ [I" libevent;T@E@ [I" libexcel;T@+@ [I" libfchat;T@@ [I"libftdi-ruby;T@"@ [I" libgems;T@6@ [I"libinject;T@@ [I" libisi;T@@ [I"liblinear-ruby-swig;T@@ [I" liblvm;T@@ [I" liblzma;T@!@t[@Ͼ@!@ [I" libmdb;T@@@ [I"libmemcached_store;T@@ [I"libmodbus4r;T@O@ [I"libmpq-ruby;T@@ [I" libnet4r;T@!@ [I"libnotify;T@J@ [@ܾ@J@*[@ܾ@Y@[@ܾ@nI"universal-rubinius-1.2;T[@ܾ@@ [I"libphonenumber-execjs;T@E@ [I"libqalculate-ruby;T@'@ [I"librarian;T@<<@ [I"librarian-puppet;T@ @ [I" librarian-puppet-maestrodev;T@@ [I"libraries;T@1@ [I" library;T@@ [I"LibrarySolution;T@@ [I"library_statistics;T@@ [I"LibraryStatistics;T@"@ [I"library_stdnums;T@N@ [I"librarything-api;T@`@ [I"librato-metrics;T@@ [I"librato-metrics-memcached;T@'@ [I"libratonator;T@'@ [I"librato-rails;T@@ [I"librato_silverline_api;T@@ [I"librato-storm-kafka;T@E@ [I"libravatar;T@N@ [I" librepdf;T@E@ [I" librevox;T@@ [I" librex;TU;[I" 0.0.68;T@ [I" librmpd;T@`@ [I" librrd;T@@ [I" librtmp;T@+@ [I"libshadow;T@@ [I" libsl;T@@ [I"libsnappy;T@@ [I"libspotify;TU;[I"12.1.51.1;T@S[@@@ [@@@}1[@@@M[I"lib_stats;T@n@ [I"lib_string_encryption;T@@ [I"libsvmffi;T@E@ [I"libsvm-ruby-swig;T@x@ [I" libusb;T@I@ [@.@I@ [I"libuuidrb;T@@ [I" libv8;TU;[I" 3.3.10.4;T@%N[@3@4I"amd64-freebsd-9;T[@3@4@[@3@4I"amd64-freebsd-8;T[@3U;[I" 3.11.8.3;TI"x86-freebsd-9;T[@3@=@}[@3U;[I"3.11.8.13;T@ [@3@C@ [@3@C@$[@3@C@S[@3@C@([I"libv8-freebsd;T@=@ [I"libv8-sgonyea;TU;[I" 3.3.10;T@ [I" libv8-st;TU;[I" 3.11.8.2;T@ [I" libvirt;T@@ [I"libvirt-ruby;T@@ [I"libvirt-ruby-mapping;T@`@ [I"libwebsocket;TU;[I" 0.1.7.1;T@ [I" libxml4r;T@@ [I"libxml-ext;T@@ [I"libxml-feed;T@'@ [I"libxml-fixed-jruby;T@@[I"libxml-jruby;T@@ [I"libxml-jruby-fixed;T@@[I"libxml-ruby;T@T @[@n@.@ [@n@.@ [I"libxml-ruby-r19mingw;T@T @ [I"libxml-to-hash;T@@ [I"libxml-xmlrpc;T@|@ [I"libxosd2-ruby;T@R @ [I"libxosd-ruby;T@R @ [I"libxsl-ruby;T@@ [I"libxslt-ruby;T@Q@[@~@@ [@~@@ [I"libxslt-ruby19;T@ @ [I"libxslt-ruby-r19mingw1;T@ @ [I" libzmq;T@@ [I"licensario;T@@ [I" license;T@@ [I"license_finder;T@X@ [I"license_generator;T@'@ [I"license-generator;T@@ [I" licenses;T@'@ [I" licit;T@I@ [I" Lidia;T@@ [I" life;T@N@ [I" lifeboat;T@y@ [I"life_game_viewer;T@@ [I" lifeline;T@@ [I" lifelog;T@@ [I"liferay_content;T@@ [I"#liferay_database_config_reader;T@`@ [I"lifestream;T@|@ [I"lifestreamable;T@n@ [I" liftoff;T@@ [I"ligature-symbols-rails;TU;[I" 2.0.9.2;T@ [I"lightbox-rails;T@@ [I" lightcsv;T@,@ [I"light-daemon;T@ @ [I"lighthouse;T@@ [I"lighthouse-api;T@@ [I"lighthouse_branch;T@@ [I"lighthouse_cli;T@u@ [I"lighthouse-ical;T@@ [I"light_mongo;T@x@ [I"light_mongo-rails;T@@ [I"lightning;T@@ [I"lightrail;T@H@ [I" lightrdf;T@@ [I"light-service;T@n@ [I"lighttpd_pathinfo_fix;T@@ [I"lightwave;T@@ [I"lightwaverf;T@@ [I"lightwave_rf;T@'@ [I" ligo;T@@ [I" lijab;T@`@ [I"like_1999;T@- @ [I" likeable;T@@@ [I"like_a_boss;T@'@ [I"like_a_virgin;T@@ [I"like_bomb;T@'@ [I" likeit;T@E@ [I" liker;T@'@ [I"like_search;T@@ [I"likes_tracker;T@@ [I"like-structure;T@'@ [I" likethat;T@|@ [I" liking;T@@ [I" lil-jon;T@'@ [I" lilp;T@I@ [I" lilu;T@6@ [I" lilutils;T@@ [I"lilygraph;T@@ [I" lilypad;T@@ [I" limber;T@@ [I" limbo;T@@ [I" lime;T@@ [I"limelight;T@@[I"limelight_video;T@@ [I"limerick_rake;T@E@ [I" limgur;T@O@ [I"limited_red;T@@ [I"limited_sessions;T@@ [I" limiter;T@E@ [I"limores_hopstop;T@@ [I" linamack;T@@ [I" lincoln;T@E@ [I" lindo;T@@ [I" lineage;T@x@ [I" linear;T@@ [I" linebook;T@@ [I"linebreak;T@@ [I"linebreak-cli;T@@ [I"linecache;TU;[I" 0.46;T@ [@#@$@[@#@$@[I"linecache19;T@`"@ [I"linecache193;T@'@ [I"linecache-tf;T@@ [I" linecook;T@O@ [I" linefit;T@@ [I" lineman;T@e@ [I" linen;T@&@ [I"line-okuru;T@@ [I"linesetter;T@@ [I"linesource;T@@ [I"line-tree;T@@ [I" lingo;T@<@ [I" lingohub;T@`@ [I"lingohub_utils;T@@ [I"lingotek-cli;T@`@ [I"lingotek-client;T@@ [I" lingq;T@@ [I" lingua;T@@ [I" linguara;T@n@ [I" linguify;T@@ [I" linguine;T@n@ [I" linguist;T@x@ [I"linguistics;T@O@ [I"Linguistics;T@W@ [I"linguist_ruby;T@@ [I" linguo;T@'@ [I" link2;T@!@ [I" linkage;T@D@ [I"linkage-viewer;T@@ [I"link_checker;T@@ [I"link-checker;T@@ [I"linkeddata;T@@ [I" linkedin;T@@ [I"linked_in;T@@ [I"linkedin-bdigital;TU;[I" 0.2.2.3;T@ [I"linkedin-drspin;T@@ [I"linkedin-idkmybffjill;T@@ [I"linkedin_industries;T@@ [I"linkedin-rb;T@'@ [I"linkedin-saimonmoore;T@@ [I"linkedin_scraper;T@@ [I"linkedin-scraper;T@n@ [I"linked_list;T@@ [I" linkety;T@@ [I"link_finder;T@"@ [I"linkformatter;T@E@ [I"link_header;T@@ [I" linkify;T@E@ [I"linkify_errors;T@'@ [I"linki-nifty_generators;T@@ [I"linki-nifty-generators;T@@ [I"linki-symbolize;T@@ [I" linkize;T@'@ [I"link_out_to_helper;T@'@ [I"linkparser;T@T @ [I"link_preview;T@'@ [I" linkr;T@`@ [I" links;T@K@ [I"linkscape;T@@ [I" linkser;T@@ [I"linkshare;T@@ [I"links_processor;T@@ [I" linkterm;T@@ [I"link_thumbnail;T@@ [I"link_thumbnailer;T@@ [I"link_to_action;T@@ [I"link_to_function_helper;T@@ [I" linkup;T@@ [I" linky;T@@ [I" linnaeus;T@@ [I" linode;T@@@ [I"linode-incandescent;T@@ [I" linotype;T@@ [I" linqr;T@@ [I" linterra;T@@ [I" lint_fu;T@J@ [I"lint_report;T@'@ [I"linux_fortune;T@@ [I"linux-kstat;T@@ [@@`I"universal-linux;T[I"linux-tools;T@@ [I"linux_uuid;T@@ [I" lion;T@@ [I"LionAdmin;T@n@ [I" lionel;T@@ [I" lipa;T@@ [I" lipa-web;T@@ [I"lipsiadmin;TU;[I" 5.1.9;T@ [I"lipsiahosting;T@@ [I" lipstick;T@[@ [I" lipsum;T@N@ [I"lipsum-api;T@@ [I" liqpay;T@@@ [I"liqrrdmetal;T@6@ [I" liqueur;T@@ [I" liquicap;T@@ [I" liquid;T@@ [I"liquid_backup;T@@ [I"liquid-blocks;T@@ [I"liquid_cms;TU;[I" 0.3.2.0;T@ [I"liquid-inheritance;T@`@ [I"liquidity;T@'@ [I"liquidizer;T@Y@ [I"liquid_loader;T@@ [I"liquidplanner;T@@ [I"liquid-proxy;T@@ [I" liquify;T@@ [I" liquor;T@`@ [I" lircr;T@@ [I"lis;T@@ [I"lisausa-knife-plugins;T@@ [I"lisausa-knife-sshconfig;T@E@ [I"lisausa-sunspot;T@f@@ [I" lisbn;T@@@ [I" lispy;T@@ [I"list_actions;T@'@ [I"listalicious;T@@ [I"ListBrowser;T@@ [I"list_cloud_files;T@@ [I"list_controls;T@+@ [I" listen;T@@ [I" list-for;T@"@ [I"listingcheck_api;T@@ [I" listit;T@'@ [I" listlace;T@@ [I" lists;T@E@ [I"list_select;T@'@ [I"list-utils;T@@ [I" listview;T@@ [I" liszt;T@n@ [I"lit;T@<@ [I" litc;T@@ [I"lite_access_control;T@'@ [I"litecreations-recaptcha;TU;[I" 0.2.3.12;T@ [I"literal_parser;T@@ [I"literate_maruku;T@6@ [I"literate_md;T@W@ [I"literate_randomizer;T@x@ [I"literate_ruby;T@'@ [I" literati;T@@ [I" litil;T@@ [I"LitleOnline;TU;[I" 8.13.2;T@ [I"litmos-client;T@@ [I" litmus;T@@ [I"litmus-acts-as-taggable-on;T@z@ [I"litmus_mailer;T@@ [I"litmus_paper;T@@ [I" little;T@V@ [I"littlebrat;T@6@ [I"little_brother;T@`@ [I"littlecms;T@@ [I"little_fish;T@E@ [I"little_graphs;T@@ [I"little_log_friend;T@@ [I"little_mapper;T@@ [I"little_math_pet;T@6@ [I"littleneck_clamav;T@'@ [I"little-plugger;T@;@ [I"little_sms;T@@ [I"littlewire;T@B@ [I" liuqi;T@'@ [I" live;T@@@ [I" live_api;T@- @ [I" live_ast;T@@ [I"live_ast_ripper;T@7@ [I"live_ast_ruby_parser;T@@ [I" livecode;T@@ [I"live_console;T@,@ [I"live_contacts;T@@ [I" livecss;T@'@ [I" livedata;T@@ [I"livedoorauth;T@E@ [I"livedoor-feeddiscover;T@@ [I"live_ensure;T@I@ [I"live_f1-core;T@E@ [I" livefyre;T@'@ [I"livejournal;T@@ [I"livejournaller;T@@ [I"livelist-rails;T@@ [I"livelydocs;T@@ [I"livereload;T@l@ [I"liveresource;T@O@ [I"livescript;T@ @ [I"livescript-rails;T@@ [I"livescript-source;T@@ [I"live-search;T@@ [I"live_soccer;T@6@ [I"livestatus;T@@ [I"livevalidation;T@'@ [I"livingsocial;T@'@ [I"livingsocial2;T@@ [I"livingstyleguide;T@@ [I"living-validator;T@@ [I"lj;T@@ [I"ljcomments-rails;T@'@ [I"ljoseppi-paypal;T@ @ [I"lkp;T@'@ [I"llab-generators;T@|@ [I"lleidasms;T@@ [I" llip;T@@ [I"lll;T@v3@ [I"lllibrary;T@'@ [I"lloydstsb;T@@ [I" llremote;T@@ [I" llsd;T@@ [I" lm2doc;T@@ [I"lmarburger-apn_on_rails;TU;[I"0.3.0.20091214173227;T@ [I"LMG_modbus;T@@ [I" lmgtfy;T@"@ [I" lmteste;T@'@ [I" lnbackup;T@X@ [I" loadable;T@u@ [I"loadable_component;T@`@ [I" loadaboy;T@@ [I" loadat;T@E@ [I"load_balance_client;T@6@ [I"load_balanced_tire;T@"@ [I" loadcfg;T@!@ [I"load_data_infile;T@@ [I"loaded_dice;T@@ [I"loaded_plugins;T@@@ [I" loaderio;T@@ [I"load_glob;T@@ [I" load-me;T@@ [I"load_model;T@I@ [I"load_path_find;T@@ [I" loady;T@@ [I" loaf;T@@ [I" lobot;T@@ [I" lobster;T@[@ [I" lobstr;T@E@ [I"local_assets;T@x@ [I"local_authority;T@@ [I"local_cache;T@@ [I"local-cache;T@@ [I"local_cdn;T@@ [I"local_config;T@@ [I" localdev;T@@ [I"localdroptasks;T@@ [I" locale;T@,*@ [I"localeapp;T@^%@ [I"localeapp-handlebars_i18n;T@'@ [I"locale_base;T@"@ [I"locale-data-import;T@`@ [I"locale_dating;T@`@ [I"locale_detector;T@@ [I"locale_flash;T@@ [I"locale_js;T@@ [I"local-env;T@'@ [I"locale_rails;T@@ [I"locale_routing;T@I@ [I"locale_schema;T@@ [I"locale_selector;TU;[I" 1.93.1;T@ [I"locale_setter;T@`@ [I"local_eval;T@@ [I"local_gateway;T@@ [I"local_gem;T@+@ [I"localhost;T@@ [I"localhostapp;T@'@ [I"localist-asset_sync;T@@ [I"localist-feedzirra;T@@ [I"localist-instagvram;T@@ [I" localite;T@@ [I"localizable;T@@ [I"localization_generator;T@@ [I"localization-middleware;T@@ [I"localizator;T@'@ [I" localize;T@!@ [I"localized;T@V@ [I"localized_country_select;T@'@ [I"localized_each_validator;T@@ [I"localized_fields;T@@ [I"localized_gems;T@`@ [I"localized_language_select;T@@ [I"localized_scaffold;T@ @ [I"localized_url_for;T@"@ [I"localizer;T@@@ [I"localmemcache;T@"@ [I"localmemcache_store;T@V@ [I"local_message;T@@ [I"localmotive;T@@@ [I"localocracy-observational;T@[@ [I"localocracy-remit;T@@ [I" localone;T@@ [I"local-openid;T@@ [I"localport;T@6@ [I"localstorageshim-rails;T@@ [I"localtunnel;T@[ @ [I"local_unfuddle_notebook;T@@ [I"localwiki_client;T@"@ [I"localyzed;T@@ [I"locapoint;T@E@ [I"locarails;T@u@ [I" locat;T@@ [I"location-one;T@V@ [I" locator;T@V@ [I" locauto;T@E@ [I"locaweb-gateway;T@1@ [I"loc_counter;T@@ [I" lock;T@@ [I"lock_block;T@E@ [I" lockbox;TU;[I" 2011.7.6;T@ [I"lockbox_middleware;T@-@ [I" lockdown;T@1@ [I"lockdown_vail;T@@ [I" locker;T@@ [I" lockfile;T@@ [I" lockit;T@@@ [I"lockitron;T@@ [I" lockitup;T@@ [I" lock_jar;T@n@ [I" lock_key;T@@ [I"lock_method;T@u @ [I" lockr;T@@ [I"lock-server;T@1@ [I"locksmith;T@`@ [I"lock-smith;T@@ [I"Locksmith;T@`@ [I" loco;T@'@ [I"loco2-geokit;T@'@ [I"loco_bill;T@@@ [I"locomotive;T@'@ [I"locomotive-aloha-rails;TU;[I" 0.20.1.4;T@ [I"locomotive_carrierwave;T@@ [I"locomotive_cmd;T@E@ [I"locomotive_cms;T@"@ [I"locomotivecms_mounter;T@@ [I"locomotive-heroku;T@E@ [I"locomotive_jammit-s3;T@u#@ [I"locomotive_liquid;T@C@ [I"$locomotive_mongoid_acts_as_tree;TU;[I" 0.1.5.8;T@ [I"locomotive-mongoid-tree;T@@ [I"locomotive-tinymce-rails;TU;[I" 3.4.7.4;T@ [I"locu_wrapper;T@@ [I"lodash-rails;T@ @ [I" lodging;T@ @ [I" lofis;T@E@ [I"log;T@@ [I"log2counter;T@"@ [I" log4ever;T@n@ [I"log4j2log4r;T@'@ [I"log4jruby;T@x@ [@@@[I" log4net;T@7U@ [I" log4r;TU;[I" 1.1.10;T@ [I"log4r-color;T@@ [I"log4r-exceptionable;T@X@ [I"log4r-fluent;T@@ [I"log4r-gelf;T@- @ [I"log4r-mail;T@@ [I""log4r_remote_syslog_outputter;T@'@ [I" log4ruby;T@@ [I"log4r-xmpp;T@@ [I"logaling-command;T@I@ [I"logaling-server;T@'@ [I"loganb-mixpanel;T@@ [I"loganb-nestegg;T@@ [I"loganb-scribble-client;T@"@ [I"!logankoester-authlogic-oauth;T@@ [I"logankoester-classifier;T@@ [I" logback;TU;[I" 0.9.15.2;T@ [@@s@[I"logback-jars;T@ @[I"logbackup;T@E@ [I" logbang;T@'@ [I"log-block;T@@ [I" logboard;T@@ [I" logbook;T@@ [I" logbox;T@ @ [I"log_buddy;T@X@ [I" logeasy;T@V@ [I" logem;T@@ [I" log_fu;T@'@ [I" logg;T@1@ [I"loggability;T@@ [I" loggable;T@@ [I" logger;T@F@ [I"logger-colors;T@@ [I" loggerr;T@'@ [I"logger_refi;T@@ [I"logger-syslog;T@@ [I" logging;T@ @ [I"logging_assist;T@@ [I"logging-couchdb;T@@ [I"logging-rails;T@x@ [I"logging-rails-kiriyenko;T@@ [I"logging-remote-syslog;T@"@ [I" logglier;T@^@ [I" loggly;T@x@ [I"loggly-ruby-client;T@@ [I" loggr;T@x@ [I" loggr-rb;T@ @ [I"logiblocs-test;T@'@ [I" logic;T@@@ [I"logical_authz;T@@ [I"logical-construct;T@@ [I"logical-insight;T@@ [I"logical_model;T@"@ [I"logical_tabs;T@@ [I" logicle;T@`@ [I" login;T@`@ [I"login_generator;T@@ [I"loginprompt;T@@ [I"loginradius;T@+@ [I"login_sugar_generator;T@]@ [I" loginza;T@@ [I" logirel;T@1@ [I" logit;T@@ [I" logjam;T@@ [I" log_jam;T@E@ [I"logjam_agent;T@y@ [I"logjam_logger;T@T @ [I" logline;T@'@ [I"log-listener;T@"@ [I"log_master;T@@ [I" log-me;T@"@ [I" logmein;T@,@ [I" logmerge;T@@ [I" logonxc;T@x@ [I"logparser;T@`@ [I" log_plus;T@@ [I" logpoop;T@@ [I"logporter;T@+@ [I" logpos;T@@ [I" logput;T@'@ [I" lograge;T@@@ [I"log_replay;T@E@ [I"log_replayer;T@"@ [I"logrotate;T@u@ [I"LogSimple;T@@ [I"log_slice;T@R @ [I" logsly;T@@ [I" logspray;T@'@ [I"logstash-cli;T@n@ [I"logstash-event;T@@ [I"logstash-lite;TU;[I"0.2.20110505142231;T@ [I"logstash-logger;T@@ [I" logstats;T@@ [I" logstomp;T@'@ [I"log_switch;T@x@ [I" logtail;T@'@ [I" logtrend;TU;[I"0.9.20101209201344;T@ [I"logtwuncator;T@1@ [I"log_weasel;T@n@ [I" logworm;T@@ [I"logworm_amqp;T@<@ [I"logworm_client;T@@ [I"logworm_client_amqp;T@@ [I"log_wrapper;T@E@ [I"loincloth;T@@ [I" lokar;T@@ [I" loki;T@"@ [I" lokka;T@`@ [I"lokka-basic_auth;T@"@ [I"lokka-hello;T@@ [I"lokka-hello_app;T@'@ [I" lokka-sh;T@@ [I"lol;T@@ [I" lola;T@`@ [I" LOLastfm;T@s@ [I" lolcat;TU;[I" 42.0.99;T@ [I"lolcommits;T@@ [I"lolcommits-uploader;T@E@ [I" lol_dba;T@@ [I" lolem;T@E@ [I" lolita;TU;[I" 3.1.18;T@ [I"lolita-editable-list;T@@@ [I"lolita-file-upload;T@n@ [I"lolita-first-data;T@@ [I"lolita-i18n;T@@ [I"lolita-menu;T@@ [I"lolita-report;T@@ [I"lolita-translation;T@y@ [I" lolitra;T@6@ [I" lolize;T@@ [I" lollipop;T@@ [I"lolreplay;T@`@ [I" lolsoap;T@+@ [I" lolspeak;T@@ [I" lomic;T@@ [I" lomo;T@`@ [I"lonely_coder;T@|@ [I"long-decimal;TU;[I" 1.00.01;T@ [I"longitude;T@@@ [I" longurl;T@1@ [I" long_url;T@'@ [I"lonnon-jekyll;T@@ [I" lono;T@@ [I" loofah;T@u@ [I"loofah-activerecord;T@@ [I" look;T@'@ [I"looking_for;T@@ [I" lookout;T@9@ [I"lookout-clickatell;T@&@ [I"lookout-i18n-js;T@@ [I"lookout-mongo_mapper;T@_@ [I"lookout-query_reviewer;T@|@ [I"lookout-rake;T@ @ [I"lookout-vanity;T@@ [I" looksee;T@@ [@D@@*[I" lookup;T@T @ [I"lookup-hash;T@@ [I"look_up_table;T@@ [I" loom;T@?@ [I"!loom-exceptions-rails-plugin;T@@ [I" loompa;T@@ [I" loop;T@'@ [I"loop_dance;T@J@ [I" looper;T@@ [I"loopiator;T@@ [I" looprun;T@@ [I" loops;T@Sg@ [I" loopy;T@`@ [I" loosec;T@E@ [I"loose_change;T@@ [I"loose_tight_dictionary;T@W@ [I""loose_tight_dictionary-ruby19;T@V@ [I"loquacious;T@ @ [I" loquat;T@'@ [I"loquendo-wrapper;T@E@ [I" lorax;T@@ [I" lore;T@' @ [I" lorem;T@@@ [I"lorem_arturkrasnyh;T@'@ [I"lorem_athlete;T@@ [I"lorem_casiano;T@@ [I"lorem_dagosi89;T@'@ [I"lorem_ipsum;T@E@ [I"lorem-ipsum;T@`@ [I"lorem_ipsum_amet;T@@ [I"lorem-ipsum-me;T@@ [I"lorem_ipsum_test;T@'@ [I"loremkealy;T@@ [I" lorem_kg;T@@ [I"lorempixum;T@@ [I" lorentz;T@'@ [I" lores;T@'@ [I" loris;T@@ [I" lorraine;T@n@ [I" lorum;T@E@ [I"lossfully;T@@ [I" lost;T@@ [I"lost-socks;T@'@ [I" lotion;T@'@ [I"lottay-paypal_adaptive;T@@ [I" lotu;T@M@ [I"loudmouth;T@,@ [I" lounge;T@@ [I"louxewtey-client;T@@ [I" love;T@@ [I" lovefilm;T@'@ [I"lovely-rufus;T@@ [I" loveseat;T@@ [I"low;T@@ [I"lowang-parallel;T@@ [I"lowang-rchardet;T@@ [I"lowang-rubberband;T@@ [I"lowang-whenever;TU;[I" 0.7.0.1;T@ [I" lowrpm;T@'@ [I"low_voltage;T@E@ [I" loyal;T@'@ [I"loyal_rmmseg;T@E@ [I"loyal_share_buttons;T@@ [I"loyalty_lab_sdk;T@@ [I"lp-ec2-stop-instance;T@'@ [I"lperichon-contacts;T@@ [I"lperichon-devise_invitable;T@@ [I"lperichon-formtastic;T@' @ [I"lperichon-jintastic;T@@ [I"lpm;T@@ [I" lpmp;T@@ [I"lp_on_rails;TU;[I" 0.1.39;T@ [I" lportal;TU;[I" 1.0.20;T@ [I"lps;T@@ [I"lrd_dev_tools;T@'@ [I"lrd_rack_bug;T@@ [I"lrd_twimage;T@`@ [I"lrd_view_tools;T@|@ [I"lre;T@@ [I"lr_hiya_aires_tarso;T@'@ [I" lrjew;T@@ [I"lru;T@@ [I" lrucache;T@+@ [I"lru_cache;T@@ [I"ls4;T@- @ [I" ls_all;T@'@ [I"lsd_rails;T@1@ [I"lsdr-authlogic-connect;TU;[I" 0.0.3.9;T@ [I"lsh;T@@[@@@ [I"lsl;T@@ [I" lsof;T@@ [I" lspace;T@R @ [I"lstoll-feedzirra;T@ @ [I"lstrip-on-steroids;T@@ [I" lsync;T@ @ [I" luba;T@'@ [I" luca;TU;[I" 0.9.76;T@ [I"lucene-dotnet;TU;[I"2.0.0.4.20100803;T@ [I"lucene_query;T@@ [I"lucene_query_parser;T@'@ [I" luchador;T@'@ [I" lucid;T@'@ [I"lucidimagination-chargify;TU;[I" 0.2.7.2;T@ [I"lucid-tdl;T@@ [I"lucid_works;T@:@ [I" lucio;T@V@ [I" luck;T@1@ [I" lucy;T@@ [I" lucy_cms;T@@ [I" lucy-ffi;T@'@ [I"lucy-goosey;T@@ [I" luddite;T@'@ [I"ludo-roart;T@$@ [I" ludy;T@=@ [I" luego;T@@ [I" luhn;T@`@ [I" luhnacy;T@@ [I" luhnar;T@@ [I"luhney_bin;T@@ [I"luhn_validation;T@@ [I"lui;T@E@ [I"luigi-httparty;T@@ [I"luisparravicini-classifier;T@@ [I" luka;T@'@ [I"luka-astrails-safe;T@@ [I"lukemelia-twitter-stream;T@=@ [I" lulzcatz;T@@ [I" lumbar;T@'@ [I" lumber;T@T@ [I" lumberg;T@@ [I"lumberjack;T@@ [I"lumberjack-couchdb-driver;T@E@ [I"lumberjack-dsl;T@'@ [I"lumberjack_heroku_device;T@"@ [I"lumberjack_mongo_device;T@@ [I"lumberjack_multi-device;T@@ [I"lumberjack_syslog_device;T@@ [I" lumix;T@'@ [@o@E@[I" luna_api;T@@ [I" lunar;T@@ [I"lunar_lander;T@"@ [I" lunch;T@x@ [I" lunchbox;T@@ [I" lunchy;T@@ [I" luneta;T@@ [I" lunetas;T@6@ [I"lungojs-rails;T@@@ [I" lunker;T@n@ [I"lunks-rails_sql_views;T@' @ [I"lunks_rghost;TU;[I"0.8.7.6.1;T@ [I" lunr;T@,*@ [I" luonet;T@'@ [I" luoxin;T@'@ [I" lupus;T@@ [I"luquet-ruby-graphviz;T@@ [I" lurklien;T@'@ [I" luruju;T@@ [I"lusis-jruby-elasticsearch;T@ @ [I"lustr-core;T@@ [I"lustr-jruby;T@@ [I"lustr-mxml;T@@ [I" lustr-wx;T@@ [I"lustr-xul;T@@ [I" lu-tze;T@@ [I" luzvimin;T@@ [I"lvm-mysql-backup;T@E@ [I"LVS-JSONService;T@Y@ [I"lwe-acts-as-taggable-on;T@ @ [I" lwes;T@&@ [I"lwes-logger;T@@ [I"lwes_pure;T@+@ [I"lw-pagto-certo;T@@ [I"lwr-simple;T@'@ [I"lxc;T@'@ [I" lxc-ruby;T@@ [I"lxl;T@@ [I"lyb_devise_admin;T@@ [I"lyb_sidebar;T@`@ [I" lymbix;T@@ [I" lyndon;T@'@ [I" lynx;T@E@ [I" lyrics;T@@ [I"lyrics-ebook;T@@ [I" lytix;T@6@ [I" lz4-ruby;T@@ [@@@ [I" lz77;T@@ [I" lzfruby;T@6@ [@@6@[I" lzfx;T@`@ [I" lzma-ffi;T@[@ [I" lzmat;T@@ [I" lzoruby;T@6@ [@@6@[I" lzss;T@@ [I"m;T@ @ [I"m2a;T@'@ [I"m2-helper;T@E@ [I"m2m_fast_insert;T@@ [I"m2r;T@@ [I" m3ugen;T@"@ [I" m3uzi;T@@ [I" m4assets;T@`@ [I" m4dbi;T@@ [I"M4D-juggernaut;TU;[I" 0.5.9.2;T@ [I"m9t;T@@ [I" maasive;T@'@ [I"maatkit-ruby;T@@ [I"mab;T@E@ [I" mabtie;T@@ [I" macaddr;T@l@ [I" MACAddr;T@@ [I"maca-fork-csspool;T@@ [I" macaron;T@@ [I"mac_bacon;T@@ [I"macbury-metro-ui-rails;TU;[I" 0.15.9;T@ [I"mac-event-monitor;T@@ [I" macgap;T@V@ [I"mac_generators;T@'@ [I" mach;T@@ [I" machete;T@@ [I"machiawase;T@@ [I"machinator;T@`@ [I" machine;T@@ [I" machined;T@e@ [I"machine-head;T@@ [I"machinery;T@ @ [I" machines;T@Y@ [I"machine_setup;T@@ [I"machine.specifications;T@K@ [I"machine_translation;T@'@ [I"machinify;T@@ [I"machinima_utils;T@E@ [I"machinist;T@@ [I"machinist2_mongomapper;T@E@ [I"machinist_activeresource;T@'@ [I"machinist-caching;T@'@ [I"machinist_callbacks;T@@ [I"machinist-couchrest-model;T@N@ [I"machinist-dm;T@E@ [I"machinist_mongo;T@N@ [I"machinist_mongomapper;T@@ [I"machinist_rails;T@@ [I"mac_japanese;T@'@ [I" mack;TU;[I" 0.8.3.1;T@ [I"mack-active_record;T@M@ [I"mack-asset_packager;T@M@ [I"mack-caching;T@M@ [I"mack-data_factory;T@M@ [I"mack-data_mapper;T@M@ [I"mack-distributed;T@M@ [I"mack-encryption;T@M@ [I"mac-keychain;T@'@ [I"mack-facets;T@M@ [I"mack-haml;T@M@ [I"mack-javascript;T@M@ [I"mack-localization;T@M@ [I"mack-markaby;T@M@ [I"mack-more;T@M@ [I"mack-notifier;T@M@ [I" mack-orm;T@M@ [I"mack-orm_common;T@u @ [I"mack-paths;T@@ [I"mack-pdf_writer;T@M@ [I"mack_ruby_core_extensions;TU;[I"0.1.28.100;T@ [I" maclight;T@@ [I" macmem;T@E@ [I" macroape;TU;[I" 3.3.8;T@ [I"mac-robot;T@@ [I"macronconversions;T@'@ [I"macruby-asl-logger;T@@ [I"macruby-face;T@n@ [I" macsay;T@@ [I"mac-skype;T@'@$[I" MacSpec;T@@ [I"mac-spotlight;T@"@ [I" mactag;T@@ [I" mactts;T@@@ [I" madad;T@@ [I" madcat;T@@ [I"mad_chatter;T@@ [I"madcowley-jambase4r;T@;@ [I"madderlib;T@@ [I" maddoc;T@'@ [I"madebyrocket-mousetrap;TU;[I" 0.5.3.8;T@ [I"madeleine;T@@ [I" madeline;T@ @ [I" madgab;T@E@ [I" madison;T@@ [I" madmimi;T@D@ [I" mad_mimi;T@@ [I"madmimi-bernardo;T@@ [I"madmimi_for_rails_two;T@@ [I"madmimi-james2m;T@ @ [I"mad_mimi_mailer;T@@ [I"madmimi_subscribe_form;T@E@ [I"mad_mimi_two;T@@ [I" madoka;T@E@ [I"mad-p-xmpp4r;T@@ [I" madride;T@@ [I"madride-with-bootstrap;TU;[I" 2.0.4.1;T@ [I"madride-with-jquery;T@@ [I"madrona-rad;T@@ [I" madrox;T@@ [I"mad-skillz;T@@ [I"madvertise;T@@ [I"madvertise-ext;T@@ [I"madvertise-logging;T@@ [I"madweblibs;T@E@ [I"maedana-activemerchant;TU;[I" 1.9.1.1;T@ [I"maedana-ar_mailer;TU;[I" 2.1.6.3;T@ [I"maedana-httpclient;TU;[I"2.1.5.2.1;T@ [I" maestro;T@E@ [I" mafia;T@+@ [I" mafti;T@'@ [I"mag;T@@ [I" mage;T@@ [I"mage-hand;T@1@ [I" magellan;T@6@ [I"magellan-framework;TU;[I" 2.0.1.14;T@ [I" magent;T@X@ [I"magentify;T@@ [I"magento-api;T@@ [I" magentor;T@@ [I" mageo;T@@ [I" magesa;T@|@ [I" magic;T@@ [I" Magic;T@@ [I"magicbroker;T@@ [I"magic-commenter;T@@ [I"magic_date_parser;T@E@ [I"magic_door;T@`@ [I"magic_encoding;T@E@ [I"magic_enum;T@@ [I"magic_form;T@@@ [I"magic_grid;T@@ [I" magician;T@@ [I"magickcam;T@`@ [I"magick_columns;T@@ [I"magic_key_auth;T@6@ [I" magickly;T@@ [I"magick-metadata;T@@ [I"magick_numbers;T@+@ [I"magick_numbers_rails;T@@@ [I"magick_title;T@@ [I"magickwand;T@@ [I"magiclabs-userstamp;T@@ [I"magicloader;T@ @ [I"#magic-localized_country_select;T@@ [I"magic_metaclass;T@@ [I"magic_meta_methods;T@@ [I"magic_model_generator;T@@ [I"magicmonkey;T@@ [I"magic_multi_connections;T@u@ [I" magico;T@@ [I" magiconf;T@@@ [I"magic_options;T@@ [I"magic-paperclip;T@'@ [I"magic_pragma;T@E@ [I"magic_recipes;T@<<@ [I"magic_scopes;T@@ [I"magicsheet;T@`@ [I"magic_smoke;T@'@ [I"magic_sti;T@@ [I"magic_user;T@E@ [I"magic_userstamp;T@`@ [I"magic_xml;T@@ [I" magikku;T@@ [I"magistrate;T@@ [I"magistrate_monitor;T@@ [I" maglev;T@@ [I"maglev-webtools;T@@ [I" magnetic;T@'@ [I" magneto;T@@ [I" magni;T@`@ [I" magnolia;T@@ [I"magnoline;T@@ [I" magnum;TU;[I"1.0.0.207;T@ [I" magpie;TU;[I" 0.8.8.1;T@ [I"magtek_card_reader;T@@ [I" magti;T@@ [I" mahogany;T@E@ [I" mahoro;T@[ @ [I" maid;T@@ [I" maid-xdg;TU;[I" 2.2.1.2;T@ [I" mail;T@ @ [I"mail_actual_recipient;T@@ [I"'mail_alternatives_with_attachments;T@@ [I" mailbag;T@"@ [I" mailbox;T@@ [I"mailboxer;T@- @ [I"mailbuild;T@x@ [I"mailbuilder;T@@ [I"mail_builder;T@[ @ [I"mail_builder19;T@@[I"mailbuilder-preview;T@`@ [I" mailcar;T@'@ [I"mailcatcher;T@'I@ [I"mailchecker;T@"@ [I"mail_checker;T@E@ [I"mail_chess;T@@ [I"mailchimp_exporter;T@@ [I"mailchimp_ses;T@@ [I"mailchimp_subscriber;T@M@ [I"mailcrate;T@'@ [I"mail_diff;T@6@ [I"maildiode;T@[@ [I"maildiode-greylist;T@`@ [I" maildir;T@@ [I"maildir-queue;T@@ [I" maildis;T@E@ [I" mailee;T@y@ [I"mail_engine;T@=@ [I"mail_envi;T@@ [I" mailer;T@"@ [I"mailercity;T@n@ [I"mail_extract;T@+@ [I"mailfactory;T@@ [I"mailfakk2;T@I@ [I" mailfire;T@@ [I"mail_form;T@@ [I"mail_gate;T@x@ [I"mail_generator;T@'@ [I" mailgun;T@@ [I"mailgunner;T@@ [I"mailgun-rails;T@`@ [I"mailgun_webhooks;T@E@ [I"mailhopper;T@@ [I"mailhopper_mongoid;T@@ [I"mailinator-spec;T@'@ [I" mailing;T@@ [I"mail-iso-2022-jp;T@O@ [I" mailit;TU;[I"2011.01.27;T@ [I" mail-ja;T@ @ [I" mailjet;T@@ [I"maillogger;T@`@ [I"mail_logger;T@|@ [I"mail-mad_mimi;T@@ [I"mail_magnet;T@@ [I" mailman;T@Y@ [I"mailmanager;T@@ [I"mailman-rails;T@@ [I"mailmatic;T@E@ [I"mail_merge;T@@ [I"mailparser;T@@ [I"mail_parser;T@E@ [I" mailpot;T@E@ [I"mail_processor;T@E@ [I"mail_queue;T@@ [I"mail-redirector;T@'@ [I"mailrelay;T@@@ [I"mailru_api;T@'@ [I"mail_safe;T@@ [I"mail_safe-sendgrid;T@@ [I"mail_sandbox;T@@ [I"mail-single_file_delivery;T@'@ [I"mail_sleuth;T@6@ [I"mailsolution;T@`@ [I" mail_spy;T@`@ [I"mail_stats;T@@ [I"mail-store-agent;T@`@ [I"mail_style;T@1@ [I"mails_viewer;T@@ [I"mail-sympa;T@@ [I"mail_tester;T@E@ [I"mail_to_hip_chat;T@`@ [I" mailtrap;T@@ [I"mail-trunk;T@9@ [I" mailup;T@@ [I"mail_validator;T@@ [I"mail_view;T@@ [I" main;TU;[I" 5.1.1;T@ [I"main_domain;T@'@ [I" mainline;T@@ [I" maintain;TU;[I" 0.2.23;T@ [I"maintenance;T@@ [I"maintenance_page;T@'@ [I"maisonneuve-rtm;T@|@ [I" maitre_d;T@@ [I"majesticseo;T@@ [I"majestic_seo_api;T@@ [I" majic;T@[ @ [I"majordomo;T@"@ [I"major_tom;T@'@ [I"majortom_connector;T@"@ [I"makandra-navy;T@@ [I"!makandra_resource_controller;T@@ [I" makecal;T@n@ [I"make_commentable;TU;[I"0.0.8.1.7;T@ [I" makeconf;T@@ [I"make_exportable;T@@ [I"make_flagable;T@@ [I"make_flaggable;T@@ [I" makegem;T@'@ [I"make_like_a_tree;T@@ [I"make_me_a_sandwich;T@E@ [I"make_permalink;T@@ [I"make-private;T@'@ [I"makerakeworkwell;T@@ [I"make_resourceful;T@@ [I"make_restful;T@@ [I"makers-mark;T@`@ [I"make-rubygem-debs;T@@ [I"make-sandwich;T@@ [I" makesure;T@@ [I"make-text-search;T@@@ [I" makeup;T@@ [I"make_voteable;T@`@ [I"make_watchable;T@@ [I" makitzo;T@@@ [I"maksar-imdb_party;T@y@ [I"maksar-meta_where;T@@ [I"maksar-tmdb_party;T@@ [I" maktoub;T@[@ [I"makumba_import;T@@ [I" makura;TU;[I" 2012.01;T@ [I" malarkey;T@@ [I" malcolm;T@E@ [I" malcolmx;T@@ [I"malechimp;T@'@ [I" malge;T@'@ [I" malice;TU;[I"13;T@ [I" maliq;T@@ [I" malko;T@@ [I" mall;T@@ [I" mallcop;T@'@ [I" malline;T@@ [I" malloc;T@|@[@@|@ [@@@ [I" mallow;T@@ [I" malm;T@`@ [I" malone;T@@ [I" malt;T@x@ [I"malvestuto_factory_girl;T@@ [I"malvestuto_random_data;T@@ [I"malware_api;T@@ [I"mama_cass;T@@ [I"mama_search;T@"@ [I"mambanation;T@I@ [I" mameapns;T@"@ [I"mamechiwa;T@@ [I" mamemose;T@@ [I" mamertes;T@N@ [I" maml;T@@ [I" mana;T@"@ [I"manageable;T@+@ [I"manageable_content;T@@ [I"managed_emails;T@"@ [I"manage_meta;T@@ [I" manband;T@@ [I" manbook;T@'@ [I"mandelbrot;T@+@ [I"mandoline;T@E@ [I" mandown;T@@ [I"mandrews-has-bit-field;T@@ [I" mandrill;T@E@ [I"mandrill-api;T@ @ [I"mandrill_mailer;T@@ [I"mandrill-rails;T@E@ [I" mandy;T@@ [I" maneki;T@@ [I"manga_downloader;T@'@ [I"mang_keeper;T@@ [I" mango;T@@ [I"MangUpdate;T@E@ [I"manhattan;T@"@ [I" manhunt;T@6@ [I" manic;T@E@ [I"manic_monkey;T@E@ [I" manifest;T@@ [I"manifest-destiny;T@@ [I"manifesto;T@X@ [I"manifest-rails;T@^@ [I"manifests-vmc-plugin;TU;[I" 0.4.19;T@ [I" manifold;T@@ [I"manipulator;T@@ [I" manman;T@@ [I" manos;T@@S[I"man_parser;T@6@ [I" manqod;TU;[I" 1.1580.0;T@ [I"manqod-server;TU;[I" 1.287.0;T@ [I"manqod-server-console;TU;[I" 1.29.0;T@ [I" manr;T@`@ [I"manreduce;T@'@ [I"manufactory;T@E@ [I"manufacturing;T@-!@ [I"manuscript;T@@ [I"many-headed;T@@ [I"mao;T@n@ [I"map;TU;[I" 6.2.0;T@ [I"map_by_method;T@&@ [I" mapcache;T@`@ [I" mapel;T@1@ [I"map_fields;T@@ [I"map-fields;T@@ [I" mapfish;T@@ [I" mapit;T@'@ [I" mapkit;T@@ [I"map-kit-wrapper;T@@ [I"map_layers;T@@ [I" maple;T@'@ [I"mapleseed;T@`@ [I" mappable;T@V@ [I" mapper;T@@ [I" mappum;T@,@ [I"mapquest_directions;T@@ [I"map_reduced;T@`@ [I" mapredus;T@@ [I"map_restfully;T@@ [I" mapricot;T@@ [I"map-rotation;T@@ [I"mapsqueak;T@@ [I"mapstraction-rails;TU;[I" 2.0.18.3;T@ [I"maptastic;T@`@ [I"maptastic-form;T@@@ [I"maptp-service;T@@ [I"mar;T@@ [I"marabunta;T@@ [I" marathon;T@@ [I" marauder;TU;[I" 0.1.1.3;T@ [I" marble;T@@ [I" marbu;T@`@ [I" marc;T@@ [I"marc2solr;T@,@ [I" marc4j4r;T@@ [I" marcato;T@'@$[@@@ [I" march;T@'@ [I"march_blog;T@'@ [I"march_forum;T@'@ [I"march_jquery_mobile;T@'@ [I"march_kindeditor;T@'@ [I"march_wiki;T@'@ [I" marconi;T@@@ [I"marcosinger-auto_html;T@@ [I"marcosinger-css_parser;T@@ [I"marcosinger-kilt;T@@ [I"!marcosinger-ruby-readability;T@@ [I" marcspec;T@X@ [I"marginalia;T@@ [I"marginalia-io;T@E@ [I"marginalia-resque;T@E@ [I" margot;T@@ [I"marhan_cli;T@@ [I" marilyn;T@"@ [I" marilyne;T@@ [I"marilyn-rpc;T@"@ [I" mariner;T@@ [I" mario;T@6@ [I"marionetta;T@@ [I"marionette;T@@ [I"marionette-amd-rails;TU;[I" 0.10.2.1;T@ [I"marionette-rails;T@-/@ [I" marjoree;T@@ [I"markababy;T@N@ [I" markabb;T@@ [I" markable;T@6@ [I" markaby;T@@ [I" Markaby;T@7@ [I"mark_as_deleted;T@'@ [I"markauskas-googlebase;T@@ [I"markauskas-googlereader;T@6@ [I"markcatley-enum_field;T@(@ [I" markd;T@@ [I" markdown;T@@ [I"markdown2confluence;T@E@ [I"markdownable;T@@ [I"markdown_doctor;T@x@ [I"markdownie;T@@ [I"markdownizer;T@@ [I"markdownj;T@@[I"markdown_meta;T@E@ [I"markdown_preview;T@@ [I"markdown_previewer;T@'@ [I"markdown-rails;T@@ [I"markdown-scaffold;T@@ [I"markdown_server;T@@ [I"markdown-server;T@`@ [I"markdown_slider;T@@ [I"markdown-toolbar;T@,@ [I" markdpwn;T@|@ [I" marked;T@@ [I"marked-rails;T@@ [I" marker;T@x@ [I" markerb;T@@ [I"markerb-pure;T@@ [I"markerclustererplus-rails;TU;[I" 2.0.15.1;T@ [I"market_beat;T@@ [I"market_bot;T@e@ [I" marketo;T@@ [I"mark_facets;T@@ [I" markio;T@@ [I"markitdown;T@n@ [I" markitup;T@'@ [I"mark_it_up;T@E@ [I"markitup_erb-rails;T@E@ [I"markitup_rails;T@@ [I"markitup-rails;T@I@ [I"markitup_rails3;T@,@ [I"markos_linguistics;TU;[I" 1.0.8.3;T@ [I" markos_validates_timeliness;TU;[I" 2.3.2.2;T@ [I" markov;T@'@ [I"markov_chain;T@I@ [I"markov_rand_words;T@@ [I"markov-reloaded;T@@ [I"markov_uuid;T@n@ [I" marks;T@E@ [I" markshi;T@E@ [I" marktag;T@E@ [I" markup;T@6@ [I"markup_attr;T@@ [I"markup_for;T@E@ [I"markup_helpers;T@'@ [I"markup_model;T@'@ [I"markup_parser;T@@ [I"markup-preview-command;T@@ [I"markup_validity;T@@ [I" markview;T@@ [I" marky;T@@ [I"markyboot;T@'@ [I"marky_markov;T@@ [I" marlene;T@@@ [I" marley;T@@ [I"marley-jamaica;T@"@ [I"marmalade;T@E@ [I" marmoset;T@@ [I"marnen-foreigner;T@@ [I"marnen-typhoeus;T@@ [I" maromi;T@E@ [I" marples;T@ @ [I" MARQ;T@'@ [I" mars;T@@ [I"marshal64;T@@ [I"marshaled_attributes;T@@ [I"marshalled_attributes;T@@ [I"marshal_socket;T@'@ [I"marshal-structure;T@@ [I"mars-nesta;T@Q@ [I"mars_rovers;T@ @ [I"marte-ruby;T@@ [I" martian;T@'@ [I" martile;T@g@ [I" martin;T@6@ [I"%martinemde-dm-salesforce-adapter;T@@ [I"martinos-spork-testunit;T@V@ [I"mart_lorem;T@'@ [I" maruku;T@@ [I"maruku-jbrains;T@@ [I"maruku_snippet;T@'@ [I" marvin;T@@ [I" marx;T@@ [I"maryann_test;T@@ [I"masa-iwasaki-annotate;T@C@ [I"masa-iwasaki-factory_girl;TU;[I" 1.2.3.2;T@ [I"mascara_monetaria;T@`@ [I"mascot-dat;T@@ [I"mascot-mgf;T@@ [I" mascut;T@n@ [I" maset;T@@ [I" mash;T@`@ [I" mashape;T@@ [I" mashery;T@`@ [I" mashfeed;T@'@ [I"maskable_attribute;T@@ [I"maskable_attributes;T@'@ [I"masked_id;T@E@ [I"masked-identifier;T@@ [I"masked_input-rails;T@@ [I"maskedmail;T@@ [I"mask_validator;T@@ [I" mason;T@@ [I"mason-client;T@'@ [I"masonry-rails;T@@ [I"mason-server;T@@ [I" masq;T@,@ [I" masque;T@+@ [I"masquerade;T@@ [I" massaji;T@E@ [I"mass_assignable;T@@ [I"mass_assignment;T@@ [I"mass_assignment_assertions;T@'@ [I"mass_assignment_backport;T@@ [I"(mass_assignment_with_multiple_roles;T@'@ [I"massdebator_api;T@@ [I" massimo;T@@ [I"massive_record;T@I@ [I"massive-scrobbler;T@E@ [I"massive_sitemap;T@@ [I"massive_sitemap-writer-s3;T@'@ [I"masstransit;T@I@ [I" mast;T@@ [I" mastar;T@- @ [I"master_cache;T@'@ [I"mastercard;T@'@ [I"master_forest;T@E@ [I"master_may_i;T@@ [I"mastermind;T@'@ [I"mastermind-cli;T@'@ [I"MASTER_PIPE;T@'@ [I"masterplan;T@@ [I"MasterRecord;T@@ [I"master_slave_adapter;T@x@ [I"$master_slave_adapter_soundcloud;T@@ [I" master_slave_adapter_tcurdt;T@n@ [I"masterview;T@@ [I"masterview_gem_pack;T@@ [I"$masterview_gem_plugin_generator;T@@ [I"masterview_generator;T@@ [I"masterview_parser;T@@ [I" masterview_plugin_generator;T@@ [I" mastery;T@'@ [I"masticate;T@@ [I" mastodon;T@@ [I"mastodon2;T@@ [I" masuda;T@@ [I" masyo;T@'@ [I" matahari;T@@ [I"mataki-subdomain_routes;T@@ [I" matcha;T@- @ [I" matchbox;T@@ [I"matchbox20;T@@ [I"matchdata-highlight;T@@ [I" matches;T@@ [I" matching;T@@ [I"matching_bundle;T@@@ [I"matchmaker;T@'@ [I"match-maker;T@'@ [I"match_map;T@O@ [I"matchstick;T@@ [I" mate;T@@I[@7@N@ [I"matenia-tumblr-api;T@1@ [I"materializer;T@'@ [I"materielize;T@W@ [I" math;T@'@ [I"math_calculator;T@'@ [I" mathcha;T@@ [I"math_engine;T@@ [I"mathie-delayed_job;T@r@ [I"mathjax-rails;T@"@ [I"math_metadata_lookup;T@@ [I" mathml;T@[@ [I" math_ml;T@u@ [I"math_root_find;T@`@ [I"mathstats;T@' @ [I" mathviz;T@@ [I" matic;T@@ [I"matic_accessor;T@'@ [I"matic_grid;T@@ [I"matic_timestamp;T@'@ [I"matid-concerned_with;T@`@ [I"matid-resource_controller;T@@ [I" matina;T@'@ [I" matisse;T@'@ [I" matlab;T@'@ [I"matlab-ruby;T@+@ [I" matlock;T@@ [I"matriarch;T@@ [I"matrix_dsl;T@@ [I"matrix-ext;T@g@ [I"matrixorbital-glk;T@'@ [I"matryoshka;T@E@ [I"matsimitsu-risosu-san;T@@@ [I"matsimitsu-tinder;T@ @ [I"matthewmacleod-princely;T@@ [I"matthewtodd-taps;T@W.@ [I"matthuhiggins-foreigner;T@- @ [I"mattmatt-cijoe;T@@ [I"mattmatt-showoff;T@@ [I"mattmatt-validatable;T@r@ [I" mattock;T@@ [I"5mattscilipoti-capistrano_rsync_with_remote_cache;T@@ [I"!mattscilipoti_cucumber-rails;T@,@ [I"!mattscilipoti-cucumber-rails;T@dZ@ [I"mattscilipoti-model_steps;T@@ [I"mattscilipoti-nestegg;T@"@ [I"mattscilipoti-rdialog;T@@ [I" mattscilipoti-state_machine;T@X'@ [I"mattwilkos-aasm;T@ @ [I"maven_gem;T@E@ [I"maven-helper-script;T@+@ [I"maven_irb_plugin;T@'@[I"mavenlink;T@@ [I"maven_pom;T@E@ [I"mavensmate;T@@ [I"maventhought.commons;T@@ [I"maventhought.testing;T@@ [I"maventhought.units;T@@ [I"maven-tools;T@K@ [I" maveric;T@@ [I" maverick;T@@ [I" mawk;T@`@ [I" maws;T@@ [I" maxchars;T@@ [I" maxcrm;T@@ [I" maxim;T@'@ [I" maxixe;T@@ [I" maxmind;T@@ [I" max_mind;T@@ [I"maxminder;T@@ [I"maxmind-rb;T@x@ [I"maxmpz-sprinkle;T@~@ [I" maxruby;T@@ [I"maxtsap_rqr;T@`@ [I" maya2;T@@ [I" maya3;T@@ [I" maybe;T@@ [I"maybe-chain;T@"@ [I" maybee;T@@ [I"maybelline;T@x@ [I"maybe-nothing;T@E@ [I"maybeyoumeant;T@@ [I" mayfly;T@'@ [I"maygion-ipcam;T@|@ [I" mayi;T@@ [I" mayl;T@@ [I" maymay;T@E@ [I" may_may;T@@ [I" mayuki;T@E@ [I" maze;T@@ [I" mazer;T@'@ [I" ma-zmq;T@'@ [I"mbailey-chef;TU;[I" 0.9.12.2;T@ [I"mbailey-paperclip;T@ @ [I" mbanker;T@@ [I"mb-aws-s3;T@@ [I"mbbx6spp-gitauth;T@+@ [I"mbbx6spp-twurl;T@@ [I"mb-discid;T@6@[@@+@[@@|@ [I"mbeedle-heroku-autoscale;T@@ [I"mbj-inflector;T@'@ [I"mb-minion;T@@ [I" mbox;T@f@ [I" mbta;T@+@ [I" mbunit2;TU;[I"2.4.2.355.20100801;T@ [I" mcbans;T@@ [I" mcbean;T@x@ [I"mcc;T@@ [I" mccloud;T@@ [I"(mccraigmccraig-better_serialization;T@`@ [I"mcf;T@'@ [I" mc-fedex;T@@ [I" mc-fib;T@@ [I" mclaunch;T@"@ [I" mc-limit;T@@ [I" mcll4r;T@E@ [I"mcmire-activemerchant;T@@ [I"mcmire-cache;T@@ [I"mcmire-cassandra;T@@ [I"mcmire-contest;T@6@ [I"mcmire-context;T@@ [I"mcmire-guard-minitest;T@@ [I"mcmire-matchy;T@@ [I"mcmire-mocha;T@ @ [I"mcmire-protest;T@@ [I" mcms;T@@ [I"mcms_authentication;T@@ [I"mcms_blog;T@@ [I"mcms_pages;T@@ [I"mcms_resources;T@@ [I" mcnamara;T@[ @ [I"mcollective-client;T@ @ [I"mcollective-test;T@x@ [I"'mconnell-declarative_authorization;TU;[I" 0.3.2.3;T@ [I"mc-openid;T@"@ [I"mcp;T@E@ [I" mcpp;T@E@ [I"mc-settings;T@1@ [I"mct-amazon-ecs;T@M+@ [I" mctop;T@"@ [I" mcutter;T@'@ [I"mcwrapper;T@ @ [I"md2;T@@ [I" md2html;T@`@ [I" md2man;T@@ [I"md2review;T@@ [I" md5sum;T@@ [I" md5web;T@@ [I" mdbm;T@@ [I"mdd;T@O@ [I" md_data;T@@ [I" mddb;T@^]@ [I"mdeering-acts_as_tree;T@@@ [I" md_emoji;T@@ [I"mdex_client;T@'@ [I" mdify;T@@ [I" mdnotes;T@g@ [I" mdown;TU;[I" 42.1;T@ [I"mdown_handler;T@@ [I"mdp;T@@ [I" mdpage;T@@ [I" mdpress;T@3@ [I" mdprev;T@W@ [I"md_preview;T@@ [I"mdpreviewer;T@E@ [I" mdquery;T@@ [I"md-server;T@"@ [I" mdslide;T@@ [I"md_splitter;T@@ [I"mdv;T@@ [I"me2api-ruby;T@,@ [I"me2day-ruby;T@@ [I"me2text-ruby;T@@ [I"meac_control;T@@ [I" mead;T@6@ [I"meal_ticket;T@`@ [I" mealtime;T@E@ [I" mean;T@@ [I"meaningful_time;T@'@ [I" means;T@@ [I"measurable;T@'@ [I" measure;T@@ [I"measurement;T@[@ [I"measurements;T@@ [I" meatloaf;T@`@ [I" mebla;T@6@ [I"mecab-modern;T@E@ [I"mecab-mora;T@@ [I"mecab-syllable;T@@ [I" mech;T@@ [I"MeChallenge;T@@ [I" mechanic;T@E@ [I"mechanical-cuke;T@@ [I"mechanize;T@0@ [I"mechanize_clip;T@6@ [I"mechanize_content;T@x@ [I"mechanize-content;T@@@ [I"mechanize-downloader;T@'@ [I"mechanized_session;T@@ [I"mechanize-model;T@'@ [I"mechanize-ntlm;T@e@ [I"mechanize-progressbar;T@@ [I"mechanize_rspec;T@@ [I"mechio-brand;T@@ [I"mechwarrior;T@@ [I" meddler;T@@ [I" medea;T@@ [I" Medea;T@N@ [I"medea-generators;T@@ [I"mediaburst;T@@ [I"mediaburst-rails;T@@ [I"mediacloth;T@@ [I"media_control;T@@ [I"mediaelement_rails;T@x@ [I"mediafire;T@@ [I"mediainfo;T@@ [I"mediainfo-ruby;T@@ [I"media_magick;T@@ [I" mediaman;T@n@ [I"media_monster_client;T@@ [I" median;T@@ [I"media-path;T@6@ [I"mediaplug2-ruby;T@@ [I"mediashelf-loggable;T@`@ [I" mediator;T@@ [I"mediatype_directory;T@@ [I"mediawikiapi_client;T@!@ [I"mediawiki_cli;T@'@ [I"mediawiki-gateway;T@@ [I"mediawiki_robot;T@'@ [I"mediawiki_tool;T@'@ [I" medie;T@@ [I" medieval;T@@ [I"mediocre_chess;T@@ [I" medivo;TU;[I" 0.2.24;T@ [I" medo;T@6@ [I"medpass_resource_api;T@^@ [I"medrare-gocardless;T@u@ [I" medusa;T@@ [I" medvane;T@'@ [I"meedan-bootstrap;T@@ [I" meerkat;T@@ [I" meerpush;T@'@ [I" meeting;T@@ [I"meetmermeeting;T@E@ [I"meetmer-meeting;T@@ [I"me_exceptional;T@@@ [I" mega;T@@ [I"megadriver;T@E@ [I" megalith;T@,@ [I"megalopolis;T@x@ [I"mega_mutex;T@@ [I"mega_mutex-dalli;T@@ [I"megaraid-collectd;T@@ [I" me_gusta;T@@ [I" meimei;T@@@ [I"meio_mask-rails;T@@ [I" melai;T@'@ [I"melbourne;T@@ [I" melee;T@'@ [I"melissadata;T@|@ [I" melog;T@'@ [I" melomel;T@$@ [I" melon;T@D@ [I"melonjs-generator;T@[ @ [I" meltdown;T@@@ [I"membase-dump;T@@ [I" membrane;T@E@ [I" memcache;T@>@ [I"memcache_array;T@@ [I"memcache-auth;T@@ [I"memcache-client;T@@ [I"!memcache-client-activerecord;T@@ [I"memcache-client_extensions;T@'@ [I"memcache-client-stats;T@@ [I"memcached;T@@ [I"memcachedb-client;T@E@ [I"memcached_graphite;T@"@ [I"memcached-northscale;TU;[I" 0.19.5.4;T@ [I" memcached-northscale-heroku;T@G<@ [I"memcache_do;T@`@ [I"memcached-seanl;TU;[I" 0.19.5.6;T@ [I"memcached_session_store;T@@ [I"memcached_store;T@@ [I"memcached-uv;T@G<@ [I"mem_cache_fragment_store;T@@ [I"memcache-lock;T@@ [I"memcache_mock;T@ @ [I"memcaches_page;T@6@ [I"memcache_stat;T@@ [I"memcache_viewer;T@"@ [I"memcachier;T@E@ [I" memdash;T@@ [I"memdash-activerecord;T@@ [I"memdash-mongoid;T@@ [I"memdash-mongo_mapper;T@@ [I" meme;T@@ [I" meme-bot;T@'@ [I"meme_captain;T@`@ [I" memegen;T@@ [I"meme_generator;TU;[I"1.9;T@ [I" mememe;T@@@ [I" memento;T@@ [I" memer;T@@ [I" memerize;T@!@ [I" memetalk;T@"@ [I" memetron;T@6@ [I" memflash;T@@ [I"meminator;T@@ [I" mem_info;T@@ [I"mem_inspect;T@@ [I" memlog;T@'@ [I"mem_mappr;T@E@ [I" memmo;T@'@ [I" memo;T@E@ [I" memodis;T@@ [I" memoist;T@@ [I"memoizable;T@@ [I"memoizable_method_missing;T@'@ [I"memoization;T@'@ [I" memoize;T@ @ [I" Memoize;T@@ [I" memoizer;T@@ [I"memonymous;T@@ [I" memor;T@@ [I"memorable_password;T@`@ [I"memorable_strings;T@`@ [I"memo_rage;T@@ [I" memories;T@@ [I" memorize;T@@ [I" memory;T@@ [I"memory_model;T@'@ [I"memory-profiler;T@@ [I"memory_test_fix;T@@ [I"memory_usage;T@"@ [I"memo_tomato;T@"@ [I" memotoo;T@+@ [I" memprof;T@[@ [I" memq;T@'@ [I" memtrics;T@'@ [I" mendeley;T@@ [I"mender_paperclip;TU;[I" 2.4.3.1;T@ [I" mensa;T@|@ [I" mensario;T@@ [I" mentawai;T@X@ [I" menu;T@@ [I"menu_builder;T@@ [I"menu_helper;T@@ [I"menumatic;T@@ [I" menutree;T@`@ [I" meow;T@@ [I"meow-deploy;T@@ [I"meow_logger;T@@ [I"meow-logger;T@`@ [I"meplato-money;T@@ [I" mera;T@@ [I" merb;T@;@ [I"merb-action-args;T@;@ [I"merb_activerecord;T@O@ [I"merb_active_record;T@x@ [I"merb-admin;T@@ [I"merb_akismet;T@@ [I"merb_app_config;T@@ [I"merb-assets;T@;@ [I"merb-auth;T@@ [I"merb-auth-core;T@@ [I"merb-auth-more;T@@ [I"merb_auth_slice_multisite;T@@ [I"merb-auth-slice-password;T@@ [I"#merb-auth-slice-password-reset;T@@ [I"merb_babel;T@@@ [I"merb_bot_test;T@@ [I"merb-breadcrumbs;T@@ [I"merb_builder;T@@ [I"merb-builder;T@ @ [I"merb-cache;T@;@ [I"merb_can_filter;T@+@ [I"merb-cloudbridge;T@@ [I"merb-colorful-logger;T@@ [I"merb_comatose;T@@ [I"merb_component;T@@ [I"merb-core;T@;@ [I"merb_cucumber;T@@ [I"merb_datamapper;T@;@ [I"merb_data_mapper;T@x@ [I"merb_editorkicker;T@@ [I"merb_exceptions;T@ @ [I"merb-exceptions;T@;@ [I" merb-ext;T@@@ [I"merb-ext-direct;T@'@ [I"merb-extjs-direct;T@"@ [I"merb_facebooker;T@@ [I"merb-fixtures-gogolok;T@@ [I"merb-flash;T@@ [I"merb_footnotes;T@!@ [I"merb_form_fields;T@@ [I"merb-freezer;T@@ [I"merbful_authentication;T@@ [I" merb-gen;T@;@ [I"merb_gets_ass;T@6@ [I"merb_global;T@n@ [I"merb_gravatar;T@`@ [I"merb-haml;T@;@ [I"merb_has_flash;T@@ [I"merb_has_rails_plugins;T@@ [I"merb_helpers;T@ @ [I"merb-helpers;T@;@ [I"merb_helpers_monkey;T@@ [I"merb_hoptoad_notifier;T@@ [I"!merb_hoptoad_notifier-secure;T@G @ [I"merb-i18n;T@@ [I"merbiful-release;T@ @ [I"merb_inspector;T@@ [I"merbjedi-compass;T@@ [I"merbjedi-haml;T@@ [I"merb_jquery;T@@ [I"merb-jquery;T@ @ [I"merb_laszlo;T@<@ [I"merb-less-more;T@E@ [I"merb-mailer;T@;@ [I"merb-manage;T@R @ [I"merb-menus;T@I@ [I"merb_merchant;T@@ [I"merb_meta;T@"@ [I"merb_mongoid;T@@ [I"merb_mongomapper;T@@ [I"merb-more;T@D@ [I"merb_openid;T@"@ [I"merb_paginate;T@- @ [I"merb_paginate-gogolok;T@"@ [I"merb-pagination;T@'@ [I"merb_param_protection;T@ @ [I"merb-param-protection;T@;@ [I"merb_parts;T@@ [I"merb-parts;T@ @ [I"merb-photos;T@@ [I"merb_piece_cache;T@@ [I"merb-plugins-app-config;T@@ [I" merb-pre;TU;[I" 1.1.0.0;T@ [I"merb_r18n;T@I@ [I"merb-recaptcha;T@@ [I"merb_relaxdb;T@L@ [I"merb_resque_mailer;T@[ @ [I"merb-resque-mailer;T@R @ [I"merb_rubi18n;T@@ [I"merb-sampleplugin;TU;[I" 0.3.999;T@ [I"merb_screw_unit;T@@ [I"merb-search;T@@ [I"merb_seed;T@`@ [I"merb_sequel;T@@ [I"merb_signupto;T@n@ [I"merb-slices;T@;@ [I"merb-ssl-requirement;T@E@ [I"merb_stories;T@@ [I"merb_strokedb;T@@ [I"merb_test_unit;T@@ [I"merb_threshold;T@+@ [I"merb-to-rails3;T@@ [I" merb-ui;T@`@ [I"merb_viewfu;T@@ [I"merb_virtuozzo;T@@ [I"merb_whenever;T@@ [I"merb-words;T@@ [I"mercadopago;T@O@ [I"merc_convert;T@@ [I" merchant;T@@ [I"merchant_sidekick;T@@ [I"merchii-placeholder_image;T@@ [I"mercurial-ruby;T@u/@ [I" mercury;T@@ [I"mercury-rails;T@- @ [I"mereghost-rails_sql_views;T@-@ [I" merge;T@@ [I" merge3;T@B@ [I" merge_db;T@"@ [I"merged_default_scopes;T@@ [I" mergeq;T@`@ [I" merger;T@@@ [I" meribah;T@@ [I" merimee;T@@ [I" merit;T@@ [I" merle;T@'@ [I" merlin;T@@ [I"merlin_gateway;T@6@ [I" merman;T@'@ [I" merrol;T@E@ [I" merrycms;T@@ [I"merryh5bp;T@E@ [I"merrymenu;T@n@ [I" mersh;T@E@ [I" mesh;T@'@ [I"meshcomplete;T@@ [I"mesh_mysql_adapter;T@'@ [I"mesh_yaml_adapter;T@'@ [I"mesmerize;T@|@ [I"message_block;T@@ [I"messagebus_ruby_api;T@ @ [I"messagebus_ruby_apn_api;T@@ [I"message_dir;T@@ [I"messagefactory;T@@ [I"message-object;T@'@ [I"messagepub;T@@ [I"message-pubsub;T@@ [I"message-recorder;T@@ [I"message_router;T@6@ [I" messages;T@E@ [I" messed;T@E@ [I"messenger;T@@ [I" messente;T@@ [I" messiah;T@- @ [I" messie;T@Y@ [I" meszaros;T@E@ [I" meta;T@`@ [I"metabolical;T@"@ [I"metabuild;T@@ [I"metacarta-geoparser;T@@ [I"metachannels-api-client;T@@ [I"metaclass;T@'@ [I"meta_code_commenter;T@@ [I"meta_compile;T@6@ [I" metacon;T@@ [I"meta_controller;T@@ [I" metadata;T@"@ [I"metadata_cleaner;T@@ [I"metadata_extractor;T@@ [I" metadef;T@'@ [I" metadown;T@@ [I" meta_erb;T@@ [I"meta_field;T@'@ [I"metaforce;T@W@ [I"metaforce-delivery_method;T@"@ [I" metafun;T@@ [I"metafusion;T@@ [I"metafusion-crypto;T@@ [I"metafusion-thor;T@@ [I" metafy;T@@ [I" metag;T@@ [I"meta_grabber;T@'@ [I"meta_graph;T@E@ [I" metahash;T@'@ [I"meta_helper;T@@ [I"metaheuristics;T@@ [I" metaid;T@@ [I"metainspector;TU;[I" 1.13.1;T@ [I"metaipsum;T@E@ [I" metajp;T@@ [I" metal;T@@ [I"metal-archives;T@@ [I" metalink;T@'@ [I" metalive;T@'@ [I" metallum;T@,@ [I"metamagic;T@z@ [I"meta_manager;T@`@ [I"metamethod;T@@ [I"meta_methods;T@W@ [I"metamorphosis;T@@ [I" metamri;T@R@ [I" metanym;T@@ [I"meta_on_rails;T@@ [I" metaphor;T@@ [I"metapost-erb;T@'@ [I"meta_profiler;T@E@ [I"meta_programming;T@I@ [I"meta_project;T@o@ [I" metarake;T@@ [I"meta_request;T@@ [I"metar-parser;T@x@ [I"meta_search;T@;@ [I" metasm;T@@ [I"meta-spotify;T@@ [I"metastrano;T@@ [I" metatags;T@`@ [I"meta-tags;T@@ [I"meta-tags-helpers;T@@@ [I"meta_tools;T@@ [I"meta_types;T@'@ [I"meta-utils;T@@ [I"meta_vars;T@@ [I"meta_where;T@@ [I" meteor;TU;[I" 0.9.7.3;T@ [I"meteoroid;T@'@ [I"meteorology;T@'@ [I"metermaid;T@'@ [I" meth;T@@ [I"methadone;T@u"@ [I"metherd-missing;T@E@ [I" methlab;T@@ [I"meth-math;T@@ [I"method_args;T@"@ [I"method-args;T@`@ [I"methodcache;T@'@ [I"method_cache;T@@ [I"method_cacheable;T@@ [I"method_cacher;T@@ [I"method_call_recorder;T@'@ [I"methodchain;T@@ [I"method_cop;T@'@ [I"method_crm;T@I@ [I"method_decorators;T@' @ [I"method_disabling;T@@ [I"method_extensions;T@V@ [I"methodfinalizer;T@X@ [I"method_finalizer;T@@ [I"methodfinder;T@@ [I"method_finder;T@'@ [I"methodhash;T@@ [I" methodic;T@!@ [I"methodical;T@'@ [I"method_info;T@!@ [I"methodise;T@'@ [I"methodize;T@I@ [I"method_lister;T@@ [I"method_locator;T@"@ [I"method_match;T@@ [I"method_missing;T@'@ [I"method_missing_router;T@'@ [I"Method_Name;T@`@ [I"method_object;T@@ [I"methodphitamine;T@@ [I"method_profiler;T@O@ [I"method_proxy;T@@ [I"method_reload;T@@ [I"method-serializer;T@@ [I"method_source;T@@ [I"method_visibility;T@'@ [I"method_wrapper;T@@ [I"methopara;T@@ [I" metior;T@@ [I" metis;T@`@ [I" metlinkr;T@@ [I"metra_schedule;T@@ [I" metric;T@@@ [I"metric_abc;T@@ [I" metrical;T@@ [I"metric_fu;TU;[I"2.1.3.7.19;T@ [I"metric_fu-metrical;T@`@ [I"metric_fu-roodi;T@ @ [I" metrics;T@V@ [I"metrics-core-jars;T@ @[I" metricsd;T@@ [I"metricsense;T@@ [I"metrics-instrument;T@'@ [I"metrics-java;T@'@ [I"metrics-rails;T@@ [I"metrics_satellite;T@E@ [I"metricstore;T@@ [I" metrify;T@@ [I" metrika;T@+@ [I" metriks;TU;[I" 0.9.9.2;T@ [I" metriksd;T@@ [I"metriks-derive;T@@ [I"metriks-dogstatsd;T@@ [I"metriksd_reporter;T@@ [I"metriks-middleware;T@@ [I"metrixapp;T@@@ [I"metrix_db;T@@ [I" metro;T@@ [I" metrocot;T@@ [I"metro-ld25;T@@ [I"metronome;T@'@ [I"metropolis;T@@ [I"metro-rails;T@@ [I"metrostations;T@'@ [I"metro-ui-rails;TU;[I"0.15.8.11;T@ [I"metro-ui-rails-cn;TU;[I" 0.15.8.4;T@ [I" metry;T@ @ [I" metwit;T@"@ [I"mextractr_webapi;T@E@ [I"meyer-reset;T@O@ [I" mezu;T@@ [I"mezza-bcms_s3;T@@ [I"mezza-rubyzip;T@c@ [I"mezza-testunitxml;T@n@ [I" mf60;T@@@ [I"mfe;T@s@ [I"mg;T@V@ [I" mgem;T@"@ [I" mgnetme;T@@ [I" mgparser;T@N$@ [I"mg_showoff;T@kD@ [I"mguymon-buildr;T@Q%@[@@Q%@ [I"mguymon-cache-money;T@R@ [I"-mguymon-twitter_bootstrap_kaminari_views;T@'@ [I"mguymon-whenever;T@@ [I" mhaml;T@ @ [I"mharris_ext;T@ @ [I"mheffner-cijoe;T@@ [I"mh_extensions;TU;[I" 0.1.6.5;T@ [I"mho;T@E@ [I"mhs-bcms_content_rotator;T@@ [I"mhs-immortalize;T@[@ [I"mhs-right_aws-sns;T@ё@ [I"mhs-rvideo;T@ @ [I"mhs-xapian;TU;[I" 1.0.18.1;T@ [I"mht;T@E@ [I" miby;T@E@ [I"micah_chargify_api_ares;T@@ [I"micah-remit;T@@ [I"#micahwedemeyer-acts_as_archive;T@@ [I"micahwedemeyer-ri_cal;T@@ [I" micetrap;T@`@ [I"michael_hintbuble;T@W@ [I"michel-dry_scaffold;T@@ [I" michelle;T@@ [I"michel-randexp;T@+@ [I"michiels-fog;T@ @ [I"micktagger;T@`@ [I" mico;T@'@ [I" micon;TU;[I" 0.1.28;T@ [I" micro;T@'@ [I"micro_agent;T@1@ [I"micro_auth;T@@ [I" microby;T@@ [I"microcalibration;T@'@ [I"microcloud;T@F@ [I"microdata_fu;T@[@ [I"microengine;T@I@ [I"microfiche;T@@ [I"micro_fire;T@@ [I"microformat;T@n@ [I"microformat_generator;T@'@ [I"microformats;T@[ @ [I"microformats2;T@@ [I"microformats_helper;T@@ [I" microid;T@'@ [I"micromachine;T@@ [I"micro_magick;T@@ [I"micromidi;T@@ [I"micro_mock;T@@@ [I"micronaut;T@@ [I"micronaut-rails;T@@ [I"micro-optparse;T@@ [I"micro-osc;T@'@ [I"microparser;T@@ [I"micropayment;T@6@ [I"micropayment-rails;T@|@ [I"microruby;T@E@ [I"microservice_precompiler;T@+@ [I"micro_sessions;T@@ [I"microsoft.composite;T@O@ [I"microsoft_ngram;T@"@ [I"microsoft_open_data;T@'@ [I"microsoft.prism;T@@ [I"microsoft_translator;T@`@ [I"micro_sql;T@@ [I"microtest;T@@ [I"micro_test;T@@ [I"micro_vkontakte;T@t @ [I"microwave;T@@ [I" mida;T@@ [I" midas;T@@ [I"mida_vocabulary;T@6@ [I"middleman;TU;[I" 2.0.16.1;T@ [@WU;[I" 3.0.9;T@ [I"middle_management;T@W@ [I"middleman-aws-deploy;T@@ [I"middleman-blog;T@@ [I"middleman-bourbon;T@E@ [I"middleman-clementine;T@@ [I"middleman-core;T@\@ [I"middleman-core-x86-mingw32;T@\@ [I"middleman-deploy;T@@ [I"middleman-faqml;T@@ [I"middleman-favicon-maker;T@i@ [I"middleman-gh-pages;T@E@ [I"middleman-i18n;T@`@ [I"middleman-jammit;T@@ [I"middleman-livereload;T@ @ [I"middleman-minify-html;T@@ [I"middleman-more;T@\@ [I"middleman-proxy;T@'@ [I"middleman-remote-data;T@@ [I"middleman-s3_redirect;T@@ [I"middleman-s3_sync;T@ @ [I"middleman-slickmap;T@"@ [I"middleman-smusher;T@@ [I"middleman-sprockets;T@ @ [I"middleman-svg-fallback;T@@ [I"middleman-sync;T@ @ [I"middleman-syntax;T@@ [I"middleman-target;T@'@ [I"middleman-utf8-partial;T@'@ [I"middleman-webcomic;T@@ [I"middleware;T@@ [I" midge;T@@ [I" midi;T@@ [I" midiator;T@@ [I" midi-eye;T@I@ [I"midi-jruby;T@3@ [I" midilib;T@@ [I"midi-message;T@E@}1[@@@ [I"midi-nibbler;T@`@ [I"midiskirt;T@@ [I"midi-topaz;T@@ [I"midi-winmm;T@ @ [I" midna;T@ @ [I" Midna;T@- @ [I" midwife;T@V@ [I"midwife-client;T@@ [I"midwire-wizard_controller;T@@ [I"migemo-lib;T@@ [I"mighty-password;T@@ [I"mightystring;T@@@ [I" migraine;T@'@ [I" migrake;T@@ [I"migrake-sql_store;T@@ [I" migrant;T@@ [I"migrant-boxes;T@@ [I"migrate-well;T@!@ [I"migratification;T@@ [I"migration_assist;T@x@ [I"migration_collapser;T@`@ [I"migration_comments;T@@ [I"migration-foo;T@'@ [I"migration-fu;T@'@ [I"migration_investigation;T@E@ [I"migration_model;T@`@ [I"migration_revert;T@@ [I"migration-spec;T@1@ [I"migration_test_helper;T@ @ [I"migration_tools;T@@ [I" migrator;T@@ [I"migratory;T@@ [I"migratrix;T@u!@ [I" migreazy;T@@ [I" migrext;T@@ [I"miguelbaldi-ri_cal;T@@ [I"mi_hermano;T@E@ [I"miiCardConsumers;T@O@ [I" mikado;T@"@ [I" mikan;T@E@ [I" mike;T@'@ [I"mikeg-vanity;T@@ [I"mikeycgto-sinatra-rest;T@"@ [I"mikezter-workling;TU;[I" 0.4.9.8;T@ [I" mikka;T@I"universal-darwin-11;T[@@@[I" mikldt-authenticates_access;T@I@ [I"mikowitz-color;T@@ [I" mikrotik;T@'@ [I" mikyung;T@n@ [I"milestone;T@@ [I"mileszs-importex;T@6@ [I"milhouse-spork;TU;[I" 0.7.5.4;T@ [I" milia;TU;[I" 0.3.33;T@ [I" milk;T@`@ [I"milkfarm-onix;TU;[I" 0.8.13;T@ [I" milkmaid;T@@ [I" milkode;T@Q@ [I"milkshake;T@g@ [I"milksteak;T@@ [I"millionaire;T@@ [I"millisami-csv-hash;T@@ [I"millisami-thor;TU;[I" 0.14.7;T@ [I"millstone;T@@ [I"millworker;T@@ [I" milo;T@@ [I" milton;T@@ [I" mime;T@@ [I"mimemagic;T@@ [I" mimeo;T@ @ [I" mimer;T@E@ [I"mimer_plus;T@"@ [I"mimetexrb;T@@ [I"mimetype-fu;T@@@ [I"mime_typer;T@@ [I"mime-types;TU;[I" 1.19;T@ [I"mime_version;T@@ [I" mimic;T@@ [I" mimic-rb;T@`@ [I" mimimi;T@`@ [I" mimiweb;T@@@ [I" mimosa;T@@ [I" mina;T@@ [I"mina-cakephp;T@@ [I" mina-ext;T@@@ [I" mince;T@u@ [I"mince_data_model;T@@ [I"mince_dynamo_db;T@ @ [I"mince_model;T@@ [I" mindapp;T@'@ [I" mindbody;T@@ [I"mindful_sass;T@@ [I"mind_reader;T@`@ [I" mindy;T@@ [I" mine;T@@ [I"minecraft;T@@ [I"minecraftctl;T@+@ [I"minecraft-merge;T@@ [I"minep-request;T@@ [I" mineral;T@@ [I"minerva-nifty-generators;T@@ [I"minescope;T@'@ [I"mine_shaft;T@@ [I"mineworker;T@'@ [I" mingle4r;T@@ [I"mingle_access;T@'@ [I"mingle_events;T@6@ [I"%mingle-macro-development-toolkit;T@O@ [I"mingle_macro_models;T@@ [I"minglemingle;T@E@ [I" minglr;T@6@ [I" mingo;T@@ [I"ming-ruby;T@@[I" minhttp;T@@ [I"mini_aether;T@@[I"mini_auth;T@@ [I"mini_backtrace;T@6@ [I"miniball_ruby;T@E@ [I"mini-bootstrap-rails;T@`@ [I"mini_cache;T@@ [I" minicap;T@ @ [I" minicart;T@'@ [I"mini_colors-rails;T@W@ [I"minicomic;T@!@ [I" miniconf;T@'@ [I" mini_css;T@E@ [I"mini_eventbrite;T@E@ [I"mini_exiftool;T@ @ [I"minifactory;T@@ [I"mini_factory;T@!@ [I" mini_fb;T@N@ [I"mini_fb_rails;T@'@ [I"minifilter;T@E@ [I" minify;T@6@ [I"mini_gauge;T@@ [I" minigems;T@ @ [I" minigen;T@G@ [I"mini_geocode;T@'@ [I" minilab;T@@[@@@[@@@ [I"minilang_refi;T@'@ [I" minilex;T@@ [I"mini_logger;T@X@ [I"mini_magick;TU;[I"3.4;T@ [I"mini_magick2;T@@ [I" minimail;T@@ [I" minimal;T@<<@ [I"minimal-buffet;T@6@ [I"minimal_exposure;T@E@ [I"minimal_feedback;T@"@ [I"minimalist_authentication;T@@ [I"minimal_state_machine;T@@ [I"minimapper;T@@ [I"MiniMarkup;T@@ [I"mini_memory_store;T@@ [I"minimization;T@@ [I"minimodel;T@x@ [I"mini_mongo;T@'@ [I" minion;T@=@ [I"minion_kim;T@$@ [I"minion_server;T@'@ [I" miniploy;T@E@ [I"mini_portile;T@@ [I"miniprofiler;TU;[I" 0.1.7.4;T@ [I"mini_profiler;T@"@ [I"mini_record;T@@ [I"mini_record-compat;T@@ [I"miniretrieve;T@'@ [I"mini_shoulda;T@@ [I"miniskirt;T@u@ [I"miniskirt-mongoid;T@@ [I"mini-smtp-server;T@E@ [I"minispade-rails;T@'@ [I"minispec-metadata;T@@ [I"mini_specunit;T@x@ [I" ministat;T@@ [I"ministry_of_state;T@'@ [I"mini_subler;T@'@ [I"minisyntax;T@@@ [I" minit;T@E@ [I" minitap;T@@ [I" minitar;T@Y@ [I"mini_tesseract;T@n@ [I" minitest;T@0@ [I"minitest-activemodel;T@'@ [I"minitest-ansi;T@`@ [I"minitest-ar-assertions;T@"@ [I"minitest-around;T@'@ [I"minitest-capistrano;T@6@ [I"minitest-capybara;T@@ [I"minitest-capybara-unit;T@'@ [I"minitest-chef-handler;T@7@ [I"minitest-ci;T@.@ [I"minitest-colorer;T@`@ [I"minitest-colorize;T@"@ [I"minitest-context;T@x@ [I"minitest-debugger;T@@ [I"minitest-deluxe;TU;[I" 1.4.2.4;T@ [I"minitest-descriptive;T@'@ [I"minitest_diff;T@'@ [I"minitest-display;T@@ [I"minitest-emoji;T@@ [I"minitest-excludes;T@@ [I"minitest-extra-assertions;T@@ [I"minitest-firemock;T@E@ [I"minitest-focus;T@@ [I" minitest-great_expectations;T@@ [I"minitest-growl;T@@ [I"minitest-instrument;T@'@ [I"minitest-instrument-db;T@'@ [I"minitest-libnotify;T@I@ [I"minitest-macruby;T@@ [I"minitest-matchers;T@N@ [I"minitest-metadata;T@@ [I"minitest-mongoid;T@'@ [I"minitest-must_not;T@@ [I"minitest-nc;T@'@ [I"minitest-notification;T@"@ [I"minitest_owrapper;T@'@ [I"minitest-predicates;T@@ [I"minitest-rails;T@[ @ [I"minitest-rails-capybara;T@@ [I"minitest-rails-shoulda;T@@ [I"minitest-reporters;T@ʩ@ [I"minitest-rg;T@@ [I"minitest_should;T@@ [I"minitest-shouldify;T@@ [I"minitest-spec;T@@ [I"minitest-spec-context;T@@ [I"minitest-spec-magic;T@@ [I"minitest-spec-rails;T@|@ [I"minitest-spec-should;T@@ [I"minitest-stub-const;T@@ [I"minitest-sugar;T@@ [I"minitest-tags;T@@ [I"minitest_tu_shim;T@@ [I"minitest-wscolor;T@@ [I"mini_token;T@@ [I"mini-train;T@@ [I"mini_transformer;T@'@ [I" miniunit;T@u@ [I"minival_refi;T@@ [I" miniyard;T@@ [I" minizip;T@@ [I"minjector;T@@ [I" mink;T@@@ [I"minmb-hyde;T@@ [I"minmb-teambox-client;T@x@ [I" minnie;T@6@ [I"minnie-ldap;T@E@ [I"minnie-omniauth;T@'@ [I" minpaso;T@ `@ [I" minstrel;T@@ [I" mint;T@n@ [I" mintchip;T@"@ [I"MINT-core;T@O@ [I"MINT-debugger;T@@ [I"mintdigital-multi_db;T@I@ [I"mintdigital-youtube-g;T@@ [I"MINT-scxml;T@@ [I" MINT-sdl;T@@ [I"MINT-statemachine;T@@ [I"minty_scopes;T@e@ [I"minus5_daemon;T@,@ [I"minus5_mssql;T@@ [I" minute;T@!@ [I"minuteman;T@@ [I"minuteman-rails;T@@ [I" minx;T@@ [I" mios;T@@ [I" miploy;T@'@ [I"mips_tester;T@|@ [I"mir;T@|@ [I" mira;T@'@ [I"miracle_extensions;T@@@ [I"miracle_generators;T@@ [I"miracle_roles;T@@ [I" mirage;T@C@ [I" mirah;T@3@[I" mirahd;T@@ [I"mirah_model;T@E@[I"mirapoint;T@@ [I"mir_extensions;T@@ [I" miriad;TU;[I" 4.1.0.16;T@ [I" miro;T@I@ [I" mirrored;T@1@ [I"mirror_github;T@ @ [I"mirror_mirror;T@@ [I"mir_utility;TU;[I" 0.3.29;T@ [I" misawa;T@'@ [I"mischacks;T@@ [I"misc_validators;T@[ @ [I" mise;T@'@ [I" misfit;T@"@ [I"misfo-aws-sdk-cloudwatch;T@*@ [I"mislav_contacts;T@^@ [I"mislav-is_paranoid;T@E@ [I"mislav-rspactor;T@x@ [I" miso;T@@ [I"miso-java;T@|@ [I" misosoup;T@@@ [I"missile-command-ruby;T@V@ [I"missing-bits;T@'@ [I")missing_controller_helpers_generator;T@@ [I"missingno;T@@ [I"missing_t;T@@ [I"missing_translations;T@@ [I" mission;T@'@ [I"Missionhub;T@@ [I"MissionHub;T@O@ [I" mist;T@y@ [I" mister;T@'@ [I",misterbojangles-rails3_acts_as_paranoid;T@*@ [I"mister_fairy;T@'@ [I"mistilteinn;T@@@ [I"mitamirri;T@,*@ [I"mite-backup;T@@@ [I" mite.cmd;T@t @ [I" mite-rb;T@@ [I"mitio-erubis_rails_helper;T@@ [I"$mitio-inherited_resources_views;T@@ [I" mit-ldap;T@@ [I"mit_stalker;T@@ [I" mitten;T@n@ [I"mityc-geoportal;T@@ [I"mix;T@'@ [I"mixable_engines;T@`@ [I" mix-auth;T@@ [I" mixcloud;T@@ [I"mixcloud-rb;T@'@ [I" mixer;T@'@ [I" mixers;T@N@ [I" mixi;T@'@ [I" mixico;T@+@y;[@f@+@ [@f@+@1[I" mixin;T@@ [I" mixit;T@@ [I"mix-language;T@@ [I"mixlib-authentication;T@@ [I"mixlib-cli;T@@ [I"mixlib-config;T@x@ [I"mixlib-json;T@@ [I"mixlib-log;T@@ [I"mixlib-shellout;T@@ [@z@@ [I" mixology;T@@[@}@@[@}@@ [@}@@[I" mixpanel;T@c@ [I"mixpanel2;T@'@ [I"mixpanelable;T@@ [I"mixpanel_client;T@@ [I"mixpanel-mail;T@@@ [I"mixpanel_rails;T@@ [I"mixpanel_test-rails;T@E@ [I"mixpanel_test_service;T@n@ [I"mixpanel_typhoeus;T@@ [I" mixr;T@@ [I"mix-rails;T@@ [I"mix-settings;T@@ [I" mix-site;T@@ [I"miyazakiresistance;T@1@ [I"miyucy-annotate;T@J@ [I" mizar;T@'@ [I" mizugumo;T@@ [I" mizuho;T@Z@ [I"mizuho_bank;T@1@ [I" mizuno;T@7@ [I" mjai;T@'@ [I"mjai-manue;T@'@ [I" mjclient;T@@ [I"mjfreshyfresh-contest;T@'@ [I"mjfreshyfresh-leaf;T@'@ [I"mjfreshyfresh-mini_fb;T@@ [I" mjfreshyfresh-will_paginate;T@@ [I" mjollnir;T@@ [I" mjolnir;T@'@ [I"mjs;T@`@ [I" mj-theme;T@E@ [I" mkblog;T@n@ [I" mkbok;T@@ [I" mkd_fx;T@@ [I" mkdtemp;T@u@ [I" mkerl;T@E@ [I" mkfifo;T@'@ [I"mk_firewatir;T@X@ [I"mkgitignore;T@`@ [I"mkmf-lite;T@@ [I" mkmfmf;T@R @ [I" mkrf;T@@ [I" mktemp;T@'@ [I"mkuklis-webrat;T@@ [I"mkv;T@E@ [I" mkv2m4v;T@@ [I"ml;T@x@ [I" ml4r;T@@@ [I"mlanett-hive;T@x@ [I"mlanett-redis-lock;T@`@ [I"mlb;T@@ [I"mlb_terminal;T@@ [I" mlist;TU;[I" 0.1.23;T@ [I" ml.rb;T@'@ [I" ml-ruby;T@'@ [I"mls;T@~*@ [I"mm;T@@ [I" mmap;T@@ [I"mmapscanner;T@@ [I"mm-attach-it;T@,@ [I"mm_authlogic;T@'@ [I" mm-blog;T@@ [I"mmc;T@@ [I"mm-carrierwave;T@E@ [I"mmcgrana-scrolls;T@V@ [I"mm-commentable;T@N@ [I"mm-compass-templates;T@`@ [I"mm-concerns;T@N@ [I"mmcopyrights;T@N@ [I"mm-custom-functions;T@@ [I"mm-devise;T@@ [I"mm_dirtier;T@+@ [I" mm-draft;T@@ [I" mmedit;T@@ [I"mm-embeddable;T@'@ [I"mm_es_search;T@'@ [I" mm-files;T@@ [I"mm-friendable;T@@ [I" mm_geoip;T@`@ [I"mm-git-extend;T@@ [I" mmjmenu;T@@ [I"mm-lockdown;T@@ [I"mm-logged-time;T@@ [I"mmm;T@'@ [I" mmmail;T@@ [I" mmmenu;T@@ [I" mm-money;T@@@ [I" mm_mq;T@@ [@3@@[I""mm-multi-parameter-attributes;T@I@ [I"mmmultiworks;T@@ [I"mm-nested-attributes;T@@ [I"mm-nested-attrs;T@'@ [I"mm_no_empties;T@@ [I" mmode;T@V@ [I"mm-optimistic_locking;T@@ [I"mm-paranoid;T@@ [I"mm_partial_update;T@@ [I"mm-referenced-tree;T@@ [I" mms2r;TU;[I" 3.9.1;T@ [I"mm_safe_by_default;T@'@ [I"mm-sanitize;T@@ [I"mm-search;T@@ [I"mm-sluggable;T@@ [I"mm_sortable_item;T@'@ [I"mm-stripper;T@@ [I" mmtodo;T@@ [I" mmtop;T@ @ [I"mm_to_view_model;T@@@ [I"mm-transitions;T@@ [I" mm_tree;T@@ [I" mm-tree;T@+@ [I"mmullis-flay;T@@ [I"mm_uses_no_id;T@@ [I"mm_uses_uuid;T@p@ [I"mm-versionable;T@ @ [I"mm-versioning;T@E@ [I"mm-voteable;T@N@ [I" mneme;T@@ [I"mnemonic_words;T@E@ [I"mnin-stringex;T@@ [I" mnmltest;T@@ [I"mnoble-fakefs;T@@ [I"mo;T@@ [I"moargration;T@"@ [I" moat;T@V@ [I"mob;T@@ [I"mob-dalli;T@T @ [I" mobgpsd;T@'@ [I" mobi;T@@ [I"mobi_check_in;T@n@ [I"mobicoder;T@@ [I"mobile_detect;T@E@ [I"mobile-enhancements;T@@ [I"mobileesp_converted;T@@ [I"&mobile_first_bootstrap_grid-rails;T@'@ [I"mobile-fu;T@@ [I"mobile_fu-rails3;T@ @ [I"mobile_notify;T@[ @ [I"mobile_number_normalizer;T@@@ [I"mobile-pass;T@'@ [I"mobile_path;T@@ [I"mobilepronto;T@@ [I"mobile_pronto;T@@ [I"mobile_rails;T@@ [I"mobile_rails_jqm;T@@ [I"mobile_reset;T@@@ [I"mobilesrepo;T@@ [I"mobile_template;T@@ [I"mobile_version;T@n@ [I"mobile_view;T@@ [I"mobile_views;T@E@ [I"mobilicious;T@@ [I"mobilize-base;TU;[I" 1.0.94;T@ [I"mobilize-ssh;TU;[I" 1.0.95;T@ [I" Mobiloc;T@@ [I" mobilove;T@@ [I" mobitex;T@@ [I" mobius;T@@ [I" mobj;T@O@ [I" moblove;T@E@ [I"mobme_support;T@9@ [I" mobox;T@@ [I"mob_spawner;T@@ [I" mobvious;T@@ [I"mobvious-rails;T@@@ [I" moby;T@N@ [I"mobylette;T@@ [I"moc;TU;[I" 2.5.0.7;T@ [I"moc_compass;T@[ @ [I" mocha;T@@ [I"mocha-color;T@E@ [I"mocha-macruby;TU;[I"0.9.9.20101102121900;T@ [I"mocha-on-bacon;T@@ [I"mocha-protest-integration;T@@ [I"mocha_rails;T@"@ [I"mocha-shot;T@@ [I" mochi;T@@ [I"mochigome;T@[@ [I"mochiscript;TU;[I" 0.6.15;T@ [I" mock;T@'@ [I"MockActiveRecord;T@@ [I"mock-aws-s3;T@@ [I"mocked_fixtures;T@@ [I" mockery;T@@ [I"mock_factory;T@n@ [I" mockfs;T@1@ [I" mocki;T@@ [I"mockingbird;T@@ [I" mockjax;T@@ [I"mock_mailer;T@'@ [I"mock_proc;T@'@ [I" mockr;T@@ [I"mock_redis;T@y@ [I"mock_server;T@"@ [I"mock-server;T@@@ [I"mock-server-thin;T@!@ [I"mock_sftp;T@'@ [I"mocksocket;T@ @ [I"mockspotify;T@@ [I" mocktra;T@@ [I"mock_turtle;T@@ [I"mockumentary;T@@ [I" mockup;T@n@ [I" mockuper;T@'@ [I"mockup-rails;T@@ [I"mockversion;T@@ [I" mock_zen;T@@ [I"mocoso-snapurl;T@"@M[I"modaldiagrams;T@x@ [I"modalfields;T@@ [I" modalh;T@@ [I"modalsettings;T@@ [I"modalsupport;T@' @ [I"mod_auth_openid_loginpage;T@@ [I"mod-auth-pubtkt-rb;T@"@ [I" modbuild;T@@ [I"modbus-cli;T@@ [I" modcloth;T@'@ [I"modcloth-test-onewland;T@@ [I" mod-cons;T@@ [I" model;T@'@ [I"model_attachment;T@<<@ [I"model-cache;T@^@ [I"model_cached;T@@@ [I"modelfactory;T@' @ [I"model_fields_i18n;T@'@ [I"model_formatting;T@@ [I"model_graph;T@6@ [I"model-graph;T@+@ [I"model_grinder;T@@ [I" modelish;T@,@ [I" modelist;T@@ [I"model_iterator;T@@ [I"modelizer;T@@ [I" modellers_testing_framework;T@@ [I"modelling;T@"@ [I"model_loader;T@@ [I"modelmaker;T@@ [I"ModelMaker;T@@@ [I"model_manage;T@@ [I"modelmania;T@@ [I"model_mill;T@@ [I"model_mocker;T@;@ [I"model_presenter;T@@ [I"model_probe;T@@ [I"model_security_generator;T@@ [I"model_set;T@@ [I"models_generator;T@'@ [I"models_timeline;T@G@ [I"model_subsets;T@@ [I"model_sync;T@+@ [I"model_tableizer;T@E@ [I"model_translations;T@@ [I" model_un;T@@ [I"model_xml;T@@ [I"modem_protocols;T@'@ [I"moderable;T@`@ [I"moderated;T@@@ [I"modernizr;T@b@ [I"modernizr_rails;T@ @ [I"modernizr-rails;T@r@ [I"modern-pictograms-rails;T@@ [I"modern_times;T@J%@ [I"modest_model;T@`@ [I"modest_presenter;T@@ [I" modesty;T@@ [I"mod_factor;T@3@ [I" mod_gem;T@@ [I"modified_acts_as_versioned;T@@ [I" modify;T@@@ [I"modjs-architecture;T@@ [I" modlr;T@@ [I"modporter-plugin;T@@ [I" mod_rea;T@@ [I" mods;T@@ [I" mod_spox;T@@ [I"modui-rails;T@'@ [I" modular;T@[@ [I"modulargrid-rails;T@@ [I"modularity;T@@ [I"modularity-rails;T@~@ [I"modular-scale;T@@ [I"module_chain_method;T@`@ [I"module-cluster;T@@ [I"module_creation_helper;T@@ [I"module_ext;T@`@ [I"module_functions;T@E@ [I"module-import;T@x@ [I"module-interface;T@@ [I"module-mixy;T@@ [I"module-pluggable;T@'@ [I"module_with_params;T@E@ [I" modulr;T@X@ [I"modusoperandi;T@@ [I" modyo;T@E@ [I" moebius;T@@ [I"moeffju-luhn;T@6@ [I"mof;T@@ [I" mofo;T@3@ [I"mog;T@@ [I" mogbak;T@@ [I"mogilefs-client;T@9@ [I"mogilefsd_log_tailer;T@E@ [I" mogli;T@]A@ [I" mogo24r;T@'@ [I"mogo-resque-lifecycle;T@`@ [I" mogotest;T@ @ [I" mogreet;T@'@ [I"mogstored_rack;T@@ [I" mohawk;T@E@ [I" moip;T@ @ [I"moip_catarse;T@ @ [I"moip-ruby;T@@@ [I" moiptise;T@E@ [I"moip-transparente;T@E@ [I" mojeid;T@@ [I" moji;T@@ [I" mojibake;T@@ [I" mojikun;T@@ [I" mojito;T@@ [I" mojo;T@E@ [I"mojo_magick;T@@ [I" moka;T@|@ [I" mokuji;T@@ [I"molasses_jar;T@@ [I" mold;T@@ [I" mole;T@D@ [I"molecules;T@@ [I" mollie;T@@ [I"mollie-bank;T@E@ [I"mollie_ideal;T@E@ [I"mollie-ideal;T@@ [I"mollienl-ideal;T@@@ [I"mollie-payment;T@@ [I"mollie-sms;T@@ [I" mollom;T@@ [I" molo;T@u/@ [I" mologue;T@'@ [I"molten_core;T@E@ [I" moment;T@@ [I"momentapp;T@E@ [I"momentarily;T@@ [I"momentjs-rails;T@@ [I" momomoto;T@@ [I" mona;T@@ [I" monadic;T@y@ [I" monarch;T@@ [I"monde-paperclip;T@r@ [I"mondo-generators;T@"@ [I" mondrian;T@@ [I"mondrian-olap;T@@ [@T@x@[I" moneta;T@!@ [I"monetary_value;T@@ [I"moneta-splattael;T@X@ [I" monetico;T@'@ [I" monetra;T@@ [I"monetra-ruby;T@@ [I" money;T@e@ [I"moneybags;T@@ [I"money_bank_sources;T@E@ [I"moneybook;T@@ [I"moneybookers;T@'@ [I"money_column;T@I@ [I"money-converter;T@@ [I"money-historical-bank;T@@ [I"money-mongoid;T@@ [I"money_online;T@@ [I"money-open-exchange-rates;T@`@ [I"moneypenny;T@'@ [I"money_persistent_bank;T@@ [I"moneypools-bundler;T@@ [I"moneypools-capistrano-ext;T@u@ [I"moneypools-delayed_job;T@r@ [I"moneypools-rake_helpers;T@@ [I"moneypools-right_wrapper;T@@ [I"!moneypools-sitemap_generator;T@@ [I""moneypools-sprouts-extensions;T@@ [I"moneypools-thinking-sphinx;T@ @ [I"moneypools-whenever;T@@ [I"moneyrail;T@1@ [I"money-rails;T@@ [I" mongar;T@@ [I"mongestry;T@u @ [I" mongify;T@[ @ [I"monglobal;T@@ [I" mongo;T@ @ [I" mongo3;T@|@ [I" mongoa;T@,@ [I"mongo_adaptor;T@@ [I"mongo_backer;T@'@ [I"mongobile;T@|@ [I"mongo_browser;T@6@ [I"mongocached;T@@ [I"mongo-configure;T@@ [I" mongodb;T@@ [I" mongo_db;T@t @ [I" mongo-db;T@'@ [I"mongodb_adapter;T@@@ [I"mongodb_clone;T@@ [I"mongodb_console;T@3@ [I"mongodb_fulltext_search;T@@ [I"mongo_db_gen;T@@ [I"mongodb-graphite;T@|@ [I"mongodb_logger;T@@[@@@ [I"mongodbmodel;T@'@ [I"mongo_db_model;T@@ [I"mongodb_model;T@ @ [I"mongodb-model;T@'@ [I"mongodb_session_store;T@3@ [I"mongodb_store;T@@ [I"mongo-db-utils;T@V@ [I"mongo_delegate;T@@ [I"mongo-dequeue;T@@ [I" mongodoc;T@,@ [I"mongo_doc;TU;[I" 0.6.34;T@ [I"mongo_doc-rails;T@@ [I"mongo_doc_rails2;T@@ [I"mongo-ec2-backup;T@V@ [I"mongo_exception_logger;T@n@ [I"mongo_ext;TU;[I" 0.19.3;T@ [I" mongo_fe;T@@@ [I"mongo-find_replace;TU;[I" 0.18.3;T@ [I"mongo-fixture;T@@ [I"mongo_followable;T@@ [I"mongo_geo;T@@ [I"mongo-graph;T@@ [I"mongo-hadoop;T@@ [I"mongo-hashie;T@@@ [I"mongo_helper;T@@ [I" mongohq;T@@ [I"mongohq-client;T@"@ [I"mongo_hydrator;T@@ [I"mongo-i18n;T@@ [I" mongoid;T@@ [I"mongoid3_session_store;T@@ [I"mongoid_accountify;T@`@ [I"mongoid_acl;T@`@ [I"mongoid_activity;T@E@ [I"mongoid_acts_as_list;T@@ [I"mongoid_acts_as_tree;T@@ [I"mongoid_adjust;T@@@ [I"mongoid_alize;T@x@ [I"mongoid_alphadog;T@@ [I"mongoid-ancestry;T@@ [I"mongoid_approbation;T@@ [I"mongoid-app_settings;T@@ [I"mongoid_atomic;T@@ [I"mongoid_atomic_votes;T@@ [I"mongoid_autofields;T@'@ [I"mongoid_auto_inc;T@@ [I"mongoid-autoinc;T@6@ [I"mongoid_autoinc_id;T@E@ [I"mongoid_auto_increment;T@@ [I"mongoid_auto_increment_id;T@@ [I" mongoid_big_decimal_integer;T@`@ [I"mongoid_bitfield;T@'@ [I"mongoid-bolt;T@@ [I"mongoid-braxton;T@@ [I"mongoid_cacheable;T@@ [I"mongoid_cached_document;T@@ [I"mongoid-cached-json;T@@ [I"!mongoid_class_for_collection;T@@ [I"mongoid-clerk;T@"@ [I" mongoid_collection_snapshot;T@@ [I"mongoid_colored_logger;T@I@ [I"mongoid-colors;T@@ [I"mongoid_commentable;T@@ [I"mongoid_counter_cache;T@E@ [I"mongoid_data_table;T@+@ [I"mongoid-data_table;T@ @ [I"mongoid_delorean;T@@ [I"mongoid_denormalize;T@@ [I"mongoid-devise;T@@ [I"mongoid_dynamic_finder;T@@ [I"mongoid-eager-loading;T@@ [I"mongoid-embedded-errors;T@@ [I"mongoid_embedded_helper;T@@ [I"mongoid-encrypted-fields;T@@ [I"mongoid-encrypted_string;T@@ [I"mongoid-encryptor;T@@ [I"mongoid-event;T@@ [I"mongoid_ext;T@@ [I"mongoid_feature_flags;TU;[I" 0.1.40;T@ [I"mongoid_find_by;T@`@ [I"mongoid-find_by;T@[ @ [I"mongoid-flags;T@'@ [I"mongoid_follow;T@@ [I"mongoid_followable;T@g@ [I" mongoid-friendly-timestamps;T@"@ [I"mongoid_fulltext;T@@ [I"mongoid-fulltextable;T@1@ [I"mongoid-generator;T@@ [I"mongoid-genesis;T@"@ [I"mongoid_geo;T@@ [I"mongoid_geospatial;T@1@ [I"mongoid_globalize;T@@ [I"mongoid-glue;T@@ [I"mongoid-graph;T@@ [I"mongoid_grid;T@@ [I"mongoid-grid_fs;T@@ [I"mongoid_has_appointments;T@@ [I"mongoid-haystack;T@u@ [I"mongoid-historicals;T@6@ [I"mongoid-history;T@@ [I"mongoid-history-patched;T@@ [I"mongoid_i18n;T@@ [I"mongoid_i18n_embedded;T@@ [I"mongoid_identity_map;T@x@ [I"mongoid_immutable_fields;T@@ [I"mongoid-included;T@@ [I"mongoid_indexing;T@@ [I"mongoid-indifferent-access;T@@ [I"mongoid_integer_keys;T@!@ [I"mongoid-kraken;T@@ [I"mongoid_lazy_migration;T@@ [I"mongoid-likeable;T@@ [I"mongoid_likes;T@`@ [I"mongoid-list;T@|@ [I"mongoid_localization;T@"@ [I"mongoid-localized-accessor;T@@ [I"mongoid_localized_slug;T@ @ [I"mongoid_location;T@@ [I"mongoid-lock;T@@ [I"mongoid-locker;T@@ [I"mongoid-lookup;T@'@ [I" mongoid_magic_counter_cache;T@`@ [I"mongoid-mapreduce;T@+@ [I"mongoid-markdown;T@`@ [I"mongoid_matcher;T@E@ [I"mongoid_max_denormalize;T@n@ [I"mongoid-metastamp;T@@ [I"mongoid_midgets;T@@ [I"mongoid_migration;T@@ [I"mongoid-minitest;T@+@ [I"mongoid-mirrored;T@@ [I"mongoid_misc;T@@ [I"mongoid_model_builder;T@E@ [I"mongoid_money;T@@ [I"mongoid_money_field;T@n>@ [I"mongoid-multi-db;T@@ [I"mongoid-multitenancy;T@`@ [I"mongoid_nested_fields;T@6@ [I"!mongoid-nested-serialization;T@@ [I"mongoid_nested_set;T@@ [I"mongoid_noteable;T@@ [I"mongoid-openid-store;T@`@ [I"mongoid_optimistic_locking;T@E@ [I"mongoid_order;T@"@ [I"mongoid_orderable;T@@ [I"mongoid-ordering;T@6@ [I"mongoid_oslc;T@`@ [I"mongoid-pagination;T@@ [I"mongoid-paperclip;T@V@ [I"&mongoid_paperclip_image_dimension;T@@@ [I"mongoid_paperclip_mobile;T@@ [I"mongoid_paperclip_queue;T@+@ [I"mongoid_param;T@`@ [I"mongoid-permalink;T@E@ [I"mongoid-permalinks;T@@ [I"mongoid_pk_factory;T@@ [I"mongoid-plugins;T@'@ [I"mongoid_publishable;T@@ [I"mongoid-publishable;T@x@ [I"#mongoid_query_string_interface;T@@ [I"mongoid-rails2;T@:!@ [I"mongoid_rails_fixtures;T@'@ [I"mongoid_rails_migrations;T@@ [I"mongoid-random;T@'@ [I"mongoid_rateable;T@@ [I"mongoid-rating;T@6@ [I"mongoid_restful_api;T@3@ [I"mongoid_retry;T@'@ [I"mongoid_revisions;T@@ [I"mongoid_roles;T@"@ [I"mongoid_roles_zhd;T@@ [I"mongoid-rspec;T@@ [I"mongoid_rspec_ign;T@@ [I"mongoid-rspec-mongoid-rc;T@@ [I"mongoid-rspec-multi-db;T@@ [I"mongoid_search;T@@ [I"mongoid_search2;T@@ [I"mongoid-searchable;T@@ [I"mongoid_secure_password;T@'@ [I"mongoid-semaphore;T@V@ [I"mongoid-sequence;T@@ [I"mongoid_session_store;T@@ [I"mongoid_session_store_json;T@@ [I"mongoid-sex;T@'@ [I"mongoid_shortener;T@@ [I"mongoid-siblings;T@`@ [I"mongoid_signature;T@"@ [I"mongoid_silo;T@`@ [I"mongoid-simple-roles;T@'@ [I"mongoid-simple-tags;T@V@ [I"mongoid-simplify;T@@ [I"mongoid_slug;T@@ [I"mongoid-slugify;T@@ [I",mongoid_slug_mongoid_beta_16_compatible;T@@ [I"mongoid_smart_tags;T@"@ [I"mongoid-solr;T@'@ [I"mongoid-sortable;T@'@ [I"mongoid-sorted-relations;T@"@ [I"mongoid_spacial;T@3@ [I"mongoid-sphinx;T@+@ [I"mongoid-sphinx-huacnlee;T@@ [I"mongoid_state_machine;T@@ [I"mongoid_store;T@`@ [I"mongoid_tag;T@@ [I"mongoid_taggable;T@@ [I"mongoid_taggable_on;T@+@ [I""mongoid_taggable_with_context;T@@ [I"'mongoid_taggable_with_context-meta;T@@ [I"mongoid-tags;T@@ [I"mongoid-tags-arent-hard;T@@ [I"mongoid-textile;T@@ [I"mongoid_text_search;T@1@ [I"mongoid_time_field;T@@ [I"mongoid-timeline;T@'@ [I"mongoid_timeline_fu;T@@ [I"mongoid-time_range;T@x@ [I"mongoid-tinyurl-id;T@E@ [I"mongoid-tll;T@"@ [I"mongoid_to_csv;T@x@ [I"mongoid_toggle;T@`@ [I"mongoid_token;T@@ [I"mongoid_touch;T@@ [I"mongoid_translate;T@@ [I"mongoid_tree;T@@ [I"mongoid-tree;T@@ [I"mongoid_trimmable_fields;T@'@ [I"mongoid-undo;T@x@ [I"mongoid_uniquify;T@`@ [I"mongoid_upk;T@@ [I"mongoid_userstamp;T@+@ [I"mongoid_vote;T@@ [I"mongoid_voteable;T@`@ [I"mongoid-voteable;T@`@ [I"mongoid_wice_grid;T@@ [I"mongoid_will_paginate;T@E@ [I"mongoid-with-auth;T@:!@ [I"mongoid-xapian;T@@ [I"mongo-import;T@@ [I" mongojob;T@'@ [I"mongolicious;T@@ [I"mongo_light;T@+@ [I"mongo_likeable;T@@ [I" mongolly;T@@ [I"mongo-locking;T@E@ [I"mongoloid;T@ @ [I"mongo-lyon;T@u"@ [I"mongolytics;T@@ [I"mongo_mapper;T@&@ [I"+mongo_mapper-accepts_nested_attributes;T@E@ [I"mongo_mapper_acts_as_list;T@@ [I"mongo_mapper_acts_as_tree;T@@ [I"#mongo_mapper_acts_as_versioned;T@@ [I"mongo_mapper_connector;T@E@ [I"mongo_mapper_ext;T@@ [I"mongomapper_ext;T@@ [I"mongo_mapper_generators;T@W@ [I"mongomapper_i18n;T@@ [I"mongomapper_id2;T@@ [I"mongo_mapper_ign;T@@ [I"mongomapper-paperclip;T@V@ [I"mongo_mapper-paranoia;T@E@ [I"mongomapper_plugins;T@@ [I"mongo_mapper-rails3;T@@ [I"mongomapper_search;T@`@ [I"mongomapper-search;T@'@ [I"mongo_mapper-strict_keys;T@@ [I"mongomapper-sweatshop;T@@ [I"mongomapper_token;T@'@ [I"mongo_mapper_tree;T@@ [I"mongo_mapper-unstable;TU;[I"2010.08.19;T@ [I"mongo_mapper_versioned;T@@ [I"mongomapper-versioned;T@@ [I"mongomatic;T@@ [I"mongomatic-rails3;T@E@ [I"mongomodel;T@@ [I"mongo_model;T@@ [I"mongomodel-money;T@@ [I"mongo_modl;T@@ [I"mongo_nested_set;T@`@ [I" mongoo;T@@ [I"mongo_odm;T@}@ [I"mongo_odm_grid;T@'@ [I"mongo_on_rails;T@@ [I" mongoose;T@[@ [I"mongo_persist;T@@ [I"mongo_populator;T@@ [I"mongo-query;T@'@ [I"mongo_rack;T@@ [I"mongo-rack-session;T@@ [I"mongo_rails_cache;T@@@ [I" mongo-rails-instrumentation;T@,@ [I"mongo_record;T@@ [I"mongo_request_logger;T@@ [I"mongo-resque;TU;[I" 1.20.0;T@ [I"mongorilla;T@&@ [I" mongorm;T@"@ [I"mongo_scope;T@@ [I"mongoscript;T@@ [I"mongo-search;T@@ [I"mongo_sequence;T@@ [I"mongo_session;T@@ [I"mongo_session_gaggle;T@E@ [I"mongo_sessions;T@@ [I"mongo_session_store;T@O@ [I"mongo_session_store-rails3;T@@ [I"mongo_space;T@`@ [I"mongosphinx;T@`@ [I"mongo_store;T@@ [I"mongo-store;T@,@ [I"mongo-sugar;T@@ [I"mongo_tagger;T@@ [I"mongo_test_server;T@@ [I"mongo_thing;T@@ [I"mongo_trail;T@'@ [I"mongo_translatable;T@@ [I"mongo_tree;T@@ [I"mongo_utils;T@@ [I" mongov;T@@ [I"mongo_watchable;T@,@ [I"mongo_web;T@E@ [I"mongrations;T@!@ [I" mongrel;T@@[@V@@[@V@@ [@V@@ [I" mongrel2;TU;[I" 0.35.0;T@ [I"mongrel_cluster;T@W@ [I"mongrel_cluster_recovery;T@E@ [I"mongrel-cluster-refresh;T@E@ [I"mongrel_config;T@@ [I"mongrel_console;T@@ [I"mongrel-cow;T@@ [I"mongrel_cow_cluster;T@@ [I"mongrel_crypted_download;T@@ [I"mongrel_download_progress;T@@ [I"mongrel_esi;T@Y@ [I"mongrel_experimental;T@s@ [I"mongrel_in_a_tunnel;T@@ [I"mongrel_jcluster;T@'@ [I"mongrel-maglev-;TU;[I"1.1.9.0.1;T@ [I"mongrel-manager;T@@ [I"mongrel_output_compression;T@@ [I""mongrel_page_cache_extensions;T@@ [I"mongrel_page_cache_handler;T@@ [I"mongrel_proctitle;T@@ [I"mongrel_raw_output;T@I@ [I"mongrel_secure_download;T@@ [I""mongrel_secure_download-redux;TU;[I"0.0.4.201;T@ [I"mongrel_send_file;T@@ [I"mongrel_service;T@@ [@@@1[@@x@ [I"mongrel-soap4r;T@'@ [I"mongrel_status;T@@ [I"mongrel_upload_progress;T@I@ [I" moni;T@ @ [I" moniker;T@'@ [I" monit;T@I@ [I" monitaur;T@'@ [I" monitor;T@6@ [I"monitoring;T@@ [I"monitoring-client;T@@ [I"monitor_manager;T@E@ [I" monitr;T@'@ [I"monitr-rails;T@@ [I" monittr;T@n@ [I" monk;T@n@ [I" monkey;T@@ [I"monkeybars;T@W@ [I"monkeybox;T@@ [I"monkey_do;T@@ [I"monkey_forms;T@@ [I"monkeygem;T@'@ [I"monkey-lib;T@Y@ [I"monkey_notification;T@V@ [I"monkey_party;T@@ [I"monkey_patch;T@|@ [I"monkey_patcher;T@'@ [I"monkey-patches;T@@ [I"monkeyshines;T@@ [I"monkeyspecdoc;T@@ [I"monkeysupport;T@@ [I"monkeytest;T@@ [I"monkeytest-win32;T@@ [I"monkey_translator;T@`@ [I"monkeywatch;T@@ [I"monkeywrench;T@@ [I"monkey_wrench;T@+@ [I"monk-glue;T@'@ [I"monk-id-client;T@'@ [I"monoceros;T@E@ [I" monocle;T@[@ [I" monogamy;T@'@ [I" monogusa;T@E@ [I"monologue;T@@ [I"monologue-markdown;T@@ [I"monome_serial;T@@ [I" monorail;T@"@ [I" monoriel;T@@ [I"monosheet;T@- @ [I"!monospace_tag_text_formatter;T@@ [I"monospace_text_formatter;T@@ [I" monque;T@6@ [I" monsoon;T@@ [I" monster;T@@ [I"monster_id;T@'@ [I"monster_id_jruby;T@@ [I"monster_mash;T@@ [I"monster_remote;T@`@ [I" montabe;T@+@ [I" montage;T@x@ [I" month;T@@@ [I" monthify;T@@ [I"months_caluculator;T@'@ [I" monty;T@@ [I"monty-rspec-rails;T@@ [I"monupco-dotcloud-ruby;T@@ [I"monupco-openshift-ruby;T@@ [I"moo;T@E@ [I" mooamba;T@E@ [I" moob;T@@ [I"mooconfig;T@6@ [I" moocow;T@@ [I" moodcube;T@e@ [I"moode-haml-jqm;T@@ [I"moode-haml-toolkit;T@E@ [I"moodle2cc;T@1@ [I"moodstocks;T@E@ [I"mood_swing;T@'@ [I" moody;T@@ [I" moogle;T@`@ [I" mook;T@E@ [I"mooktakim-acts_as_video_fu;T@x@ [I"mooktakim-cloud-crowd;T@@ [I" moom;T@@ [I" moo_moo;T@@ [I" moon;T@"@ [I" moonbot;T@@ [I" moonit;T@@ [I"moonphases;T@@ [I"moonshado-sms;T@@ [I"moonstone;T@@ [I"moonwalkair;T@@ [I"mootools-plus;T@@ [I"mootools-plus-rails;T@@ [I"mootools-rails;T@@ [I" moovatom;T@@ [I"mop;T@@ [I" moped;T@@ [I" moped-rails-instrumentation;T@@ [I"moped-session_store;T@H@ [I"moped-turbo;T@'@ [I" mopencl;T@@ [I" mopup;T@E@ [I"moq;TU;[I"3.1.416.3;TI"universal-dotnet-2.0;T[@dU;[I"4.0.10810.8;T@ [I" moqueue;T@+@ [I" morale;T@;@ [I"morale-client;T@@ [I" moranis;T@@ [I" morbo;T@'@ [I" mordor;T@3@ [I"mordor-auditing;T@p@ [I" more;T@`@ [I" morecane;T@@ [I" moredown;T@@ [I" morel;T@'@ [I"more_math;T@@ [I"more_money;T@`@ [I"more_rinda;T@'@ [I"moretea-awesome_nested_set;T@@ [I" moretext;T@@ [I"more_unit_test;T@@@ [I"more_validators;T@@ [I"morfologik;T@@ [I" mork;T@'@ [I" morlock;T@n@ [I" mormon;T@@ [I"morning_glory;T@@ [I"morning-pages;T@@ [I"moro-miso;T@@ [I" moron;T@@ [I" morph;T@@ [I"morpher_inflect;T@E@ [I" morpheus;T@@ [I" morphine;T@`@ [I"morph-sdoc;TU;[I" 0.2.21;T@ [I"morrisjs-rails;T@@ [I" morse;T@E@ [I"morsecode;T@+@ [I" morsel;T@E@ [I"morsifier;T@@ [I"mort666-jira4r;T@@ [I"mort666-pricetag;T@ @ [I"mortal-token;T@@ [I" mortar;T@"@ [I"mortar-api-ruby;T@@ [I"mortgage_calc;T@@ [I"mortgage_calculations;T@@ [I" mortimer;T@'@ [I" mosaheh;T@E@ [I"mosaic-rails;T@E@ [I"moserp-s3sync;T@Y@ [I"moses-rspec-spies;T@@ [I"moses-vanity;T@ @ [I" mosquito;T@+@ [I" most;T@@ [I" mostash;T@`@ [I"most_common_industry;T@E@ [I"most_nested_hash;T@@ [I"mostscrobbled;T@E@ [I" motally;T@@ [I" mote;T@@ [I"mote-debug;T@'@ [I" motel;T@@ [I" mote_sms;T@@ [I"motherforker;T@@ [I"mothership;T@x@ [I"motine_generators;T@@ [I"motion-addressbook;T@6@ [I"motion-benchmark;T@'@ [I"motionbox-oauth;T@@ [I"#motionbox-oauth-activeresource;T@'@ [I"motion-calabash;TU;[I" 0.9.127;T@ [I"motion-cocoapods;T@u@ [I"motion-define-method;T@@@ [I"motion-dependencies;T@E@ [I"motion-dryer;T@E@ [I"motion-dtrace;T@`@ [I"motion-fixtures;T@@ [I"motion-fontawesome;T@'@ [I"motion-gravatar;T@@ [I"motion-hpple;T@@ [I"motion_i18n;T@"@ [I"motion_kondi;T@@ [I"motion-layouts;T@@ [I"motion-live;T@@ [I"motion-loadingview;T@'@ [I"motion-logger;T@6@ [I"motion_model;T@@ [I"motion_mustache;T@'@ [I"motion-now;T@'@ [I"motion-oauth2;T@'@ [I"motion-objc;T@@ [I"motion-objc-runtime;T@"@ [I"$motion-objc-runtime-bundler-fix;T@@ [I"motion-ocr;T@'@ [I"motion-pixate;T@@ [I"motion-rails-model;T@@ [I"motion-redgreen;T@@ [I"motion_require;T@@ [I"motion_require2;T@x@ [I"motion-resource;T@E@ [I"motion-settings;T@E@ [I"motion-settings-bundle;T@'@ [I"motion-specwrap;T@@ [I"motion_spinner;T@E@ [I"motion-sprites;T@'@ [I"motion-state-machine;T@@ [I"motion_stripe;T@'@ [I"motion-stump;T@@ [I"motion_support;T@@ [I"motion-support;T@@ [I"motion-tab;T@@ [I"motion-table;T@@ [I"motion-testflight;T@@ [I"motion-tidy;T@@ [I"motion-ui-geometry;T@@ [I"motion-util;T@+@ [I"motion_wechat;T@@ [I"motion_yak;T@p@ [I"motion-yandexmapkit;T@'@ [I" motiro;T@A@ [I"motorcontrolboard;T@E@ [I"motorcycle;T@ @ [I"motorized-bootstrap;T@E@ [I" motp;T@@ [I" motr;T@`@ [I"motr-cargo;T@E@ [I"motto-mysql;T@@ [I"moulin_rouge;T@'@ [I"moumar-wmainfo-rb;T@W9@ [I" mounce;T@@@ [I"mountable_cms;T@'@ [I"mountain_berry_fields;T@@ [I")mountain_berry_fields-magic_comments;T@@ [I" mountain_berry_fields-rspec;T@@ [I"mountain-goat;T@W@ [I"mount_doc;T@@ [I" mouse;T@@ [I"mousetools;T@@ [I"mousetrap;T@@ [I"mousetrapjs;T@ @ [I"mousetrap-rails;T@V@ [I" mouth;T@@ [I"mouth-instrument;T@@ [I"movable_erb;T@@ [I"movabletype;T@@ [I"move_associations;T@@ [I" movens;T@'@ [I" mover;T@@ [I" mover_io;T@@ [I"mover_postgres;T@@ [I"movie_merge;T@"@ [I"moviemeter;T@'@ [I"movie-renamer;T@ @ [I" movies;T@ @ [I"movie_searcher;T@1@ [I"movie_show_times;T@@ [I"moviesort;T@@ [I"movr_acts_as_likeable;T@`@ [I"moxie_client_version;T@'@ [I"moxie_forum;T@[@ [I"moxiesoft-jammit;TU;[I" 0.5.4.1;T@ [I"moxiesoft_parallel_tests;TU;[I" 0.6.18;T@ [I" moxify;T@kM@ [I" moxy;T@E@ [I" mozart;T@"@ [I" mozier;T@n@ [I"mozrepl-client;T@E@ [I"mozrepl_tools;T@@ [I" mp3file;T@"@ [I" mp3info;T@@ [I"mp3preview;T@'@ [I"mp3renamer;T@@ [I"mp3scrape;T@'@ [I" mp4info;T@@ [I" MP4Info;T@@ [I" mp4ize;T@E@ [I"mpapis-bundler;TU;[I" 1.0.21.1;T@ [I"mpay_gateway;TU;[I" 0.43;T@ [I"mpc;T@@ [I"mpd;T@N.@ [I"mpd_client;T@E@ [I"mp-deployment;T@V@ [I"mpeghelper;T@@ [I" mp-gwo;T@@ [I"mpi_client;T@ @ [I"mplayer-ruby;T@@ [I"mplayer_screenshot;T@`@ [I" mplex;T@"@ [I"mpm;T@@ [I" mpower;T@G @ [I"mpq;T@@ [I"mq;T@6@ [I" mqproxy;T@@ [I"mq_reporter;T@E@ [I" mqrpc;T@n@ [I" mq-tail;T@@ [I" mqtt;T@@ [I" m_queue;T@+@ [I" mr2cbz;T@@ [I"mram-phpbb_hash;T@`@ [I"mrcsparker-sunspot_solr;T@@ [I"mrd;T@@ [I" mr_eko;T@@ [I" MrFox;T@@ [I"mr_freeze;T@'@ [I" mrhyde;T@@ [I"mr_keychain;T@`@ [I"mrkurt-mongo_mapper;T@A@ [I"mrkurt-versioned;T@`@ [I" mrlic;T@|@ [I"mr_postman;T@@@ [I" mr_prime;T@'@ [I" mrproper;T@"@ [I"mrpunkin-flickr_fu;T@@ [I"mr-sparkle;T@E@ [I"mrt-ingest;T@E@ [I"mrtoolkit;T@|@ [I" mrwatts;T@+@ [I"msales-carmen;T@+@ [I" mscgen;T@@ [I" ms-core;T@L=@ [I"ms_deploy;T@@ [I"msdhcpdump;T@`@ [I"ms-dropdown-rails;T@@ [I"mse;T@'@ [I"ms-error_rate;T@ @ [I"msewage-importer;T@@ [I"msf;T@6@ [I" ms-fasta;T@@ [I" ms_form;T@@ [I"MS-fragmenter;T@E@ [I"msfrpc-client;T@@ [I"msfrpc-simple;T@@ [I"msg-chumby-display;T@@ [I"msg-flukso-localinterface;T@@ [I" msgpack;T@@[@P@@ [@P@@ [I"msgpack-coder;T@E@ [I"msgpack-idl;T@`@ [I"msgpack-idl-java;T@`@ [I"msgpack-jruby;T@@[I"msgpack-rails;T@'@ [I"msgpack-rpc;T@@ [I"msgpack-rpc-over-http;T@E@ [I"msgpack_rpc_server;T@|@ [I"msg-qworker;T@@ [I" ms-ident;T@`@ [I" msieve;T@@ [@h@@ [I"msimkins-haml_scaffold;T@;@ [I"ms-in_silico;T@@ [I" msisdn;T@@ [I"msisdn-za;T@@ [I" msleep;T@@[@s@@ [I"ms-lipidomics;T@@@ [I" ms_lorem;T@@ [I"ms-mascot;T@@ [I" ms-msrun;T@@ [I" mspec;TU;[I" 1.5.17;T@ [I" mspire;T@-@ [I"mspire-lipidomics;T@!@ [I"mspire-sequest;T@@ [I"mspire-simulator;T@@ [I" ms_pivot;T@6@ [I" ms-quant;T@`@ [I"ms-sequest;T@@ [I" mssh;T@@ [I"ms-spectral_summing;T@E@ [I" mssql;T@E@ [I"mssqlclient;T@@ [I"mst;T@@ [I"ms-testdata;T@@ [I" ms_tools;T@@ [I"ms_translate;T@`@ [I"ms-translator;T@@@ [I"ms-unimod;T@@ [I"ms-uniprot;T@@ [I" msword;T@E@ [I"msworddoc-extractor;T@@ [I"ms-xcalibur;T@@ [I" mt940;T@$@ [I"mt940_parser;T@@ [I"mtah-ruby-treemap;T@@ [I" mtest;T@@ [I"mtg;T@@ [I" mtgen;T@@@ [I" mtgox;T@@ [I" mt_gox;T@@ [I"mtgox-ruby;T@@ [I"mthdspool;T@`@ [I" mtik;T@'@ [I"mtk;T@E@ [I" mtrace;T@`@ [I" mtrc;T@"@ [I"mu;TU;[I" 5.7.41;T@ [I" muby;T@=@ [I"muck-activities;T@"@ [I"muck-activity;T@1@ [I"muck-auth;T@2-@ [I"muck-blogs;T@@ [I"muck-comments;T@@ [I"muck-commerce;T@ @ [I"muck-contacts;T@r@ [I"muck-contents;T@Δ@ [I"muck-engine;T@9@ [I"muck-feedbag;T@@ [I"muck-friends;T@@ [I"muck-groups;T@@ [I"muck-invites;T@9@ [I"muck-oauth;T@,@ [I"muck-portablecontacts;T@@ [I"muck-profiles;T@@ [I"muck-raker;T@@ [I"muck-resources;T@@ [I"muck-services;TU;[I" 3.3.3;T@ [I"muck-shares;T@@ [I"muck-solr;T@ @ [I"muck-users;TU;[I" 3.2.25;T@ [I"mud;T@"@ [I" muddle;T@@ [I"muddyit_fu;T@V@ [I" muding;T@@ [I" muffins;T@n@ [I" muffler;T@'@ [I"muflax-chronic;T@@ [I" muflax-t;T@@ [I" mugs;T@'@ [I" mugshot;T@y@ [I"muj;T@@ [I"mujhs-rack-gridfs;T@x@ [I" mula;T@"@ [I" mule;T@`@ [I"mullen-wee;T@ @ [I" mullet;T@"@ [I" mulligan;T@@ [I" mult;T@[@y;[@$@[@ [@$@[@1[I" multi;T@@ [I"multiarray;T@@ [I"multiauth;T@@ [I"multi_auth;T@@ [I"multi_bit_field;T@"@ [I"multi_block;T@@ [I"multiblocks;T@@ [I"multibyte;T@`@ [I"multicast;T@I@ [I"multi_column_search;T@@ [I"multi_config;T@@ [I"multi_css;T@@ [I"multi_currencies;T@@ [I"multi-database-migrations;T@ @ [I" multi_db;T@@ [I"multi_deckjs;T@'@ [I"multidimensional_table;T@@ [I" multidisk-boxgrinder-plugin;T@6@ [I"multiengine;T@@ [I"multi_exiftool;T@@ [I"multifarious;T@@ [I"multi_fetch_fragments;T@ @ [I"multi_formal_i18n_tenancy;T@@ [I"multigiri;T@@ [I"multi-godlike;T@@ [I"multi_headed_greek_monster;T@'@ [I"multi_html;T@E@ [I"multiinfo;T@@ [I" multi_js;T@'@ [I"multi_json;T@@ [I"multi_json-maglev-;T@@ [I"multilang;T@'@ [I"multilang-hstore;T@!@ [I"multi-language-date;T@@ [I"multi-leaderboard;T@W@ [I"multilog-collector;T@@ [I"multilogger;T@|@ [I"multi_mail;T@'@ [I" multimap;T@x@ [I"multi_markdown;T@@ [I"multimeter;T@x@[I"multimethod;T@I@ [I"multi_methods.rb;T@@ [I"multi_mocha_rails;T@"@ [I"multiparameter_date_time;T@@ [I"multipart;T@@ [I"multipart_body;T@@ [I"multipart-parser;T@`@ [I"multipart-post;T@@ [I"multiparty;T@@ [I"multipass;T@@ [I" multiple_connection_handler;T@@@ [I"multiple_mailers;T@@ [I"multiple_table_inheritance;T@@ [I"multiplex;T@E@ [I"multiplexing_delegator;T@`@ [I"multipluck;T@"@ [I"multi_progress_bar;T@@ [I"multipush;T@E@ [I"multi_rails;T@"@ [I"MultiRails;T@'@ [I"multiroot_tree;T@@ [I"multirow_counter;T@E@ [I"multiscript;T@`@ [I"multi-select;T@E@ [I"multiselectjs_rails;T@@ [I"multi-select-rails;T@@ [I"multiserver_whenever;T@`@ [I" multiset;T@x@ [I"multi_shorten;T@E@ [I"multisite;T@'@ [I"multi_sms;T@@ [I"multi-solr;TU;[I" 01.06.00;T@ [I"multistockphoto;T@' @ [I"multistripe;T@'@ [I"multitenancy;T@"@ [I"multitenant;T@x@ [I"multitenant-pg;T@@ [I"multitest;T@@ [I"multitype-introspection;T@@ [I"multi_typograf;T@E@ [I"multi-updator;T@@ [I"multiuploader;T@@ [I"multiupload-uploadify;T@@ [I"multiversion;T@'@ [I"multi_xml;T@@ [I"mumble-ruby;T@@ [I"mumboe-amatch;T@@ [I"mumboe-currency;T@6@ [I"mumboe-soap4r;TU;[I" 1.5.8.5;T@ [I"mumboe-vpim;T@p@ [I" munchies;T@'@ [I"mundo-pepino;T@I@ [I" munger;T@E@ [I" muni;T@@ [I" munin;T@'@ [I"munin2graphite;T@@ [I"muninator;T@@ [I"munin_manager;T@u"@ [I"munin_plugin;T@`@ [I"munin-plugin;T@@ [I"munin-plugins-rails;T@@ [I"munin_rake_processes;T@@ [I"munin-ruby;T@@ [I" munkey;T@@ [I" munkres;T@@ [I"munya-faker;T@@ [I" muon;T@'@ [I"mup;T@@@ [I" muplin;T@'@ [I" mupnp;T@@ [I" murakumo;T@@ [I" murder;T@@@ [I" murdoc;T@t @ [I" murdoch;T@@ [I" muri;T@9@ [I" murlsh;T@ @ [I"murmurhash3;T@6@ [I"murmur-ice;T@'@ [I"murmuring_spider;T@E@ [I"murmur-rpc;T@V@ [I"muruca_widgets;T@@ [I" musashi;T@E@ [I" muscle;T@@ [I" muse;T@3@ [I" mush;T@@ [I" mushbomb;T@'@ [I"mushikago-sdk;T@J@ [I" mushroom;T@E@ [I" music;T@@ [I" musical;T@"@ [I"musical_spec;T@E@ [I"musicbrainz;T@@ [I"musicbrainz_automatcher;T@@ [I"musicbrainz_ruby;T@6@ [I"musicbrainz-ruby;T@x@ [I"musician_analytics;T@@ [I"MusicMaster;TU;[I"1.0.0.20120307;T@ [I"music_player;T@- @9[I"music-query;T@@ [I"musicscrape;T@`@ [I"music_story;T@@ [I"music-utils;T@@ [I"music_xray_api;T@@ [I"musik_core;T@'@ [I" musikov;T@X@ [I" Musix;T@@ [I"musix_match;T@@ [I"mussegam-csvscan;T@@ [I" must;T@@ [I" mustache;TU;[I" 0.99.4;T@ [I"mustache-bibanon;TU;[I" 0.99.5;T@ [I"mustache_json;T@"@ [I"mustachejs-rails;T@@ [I"mustache-rails;T@@ [I"mustache_rails3;T@@ [I"mustache-trimmer;T@@ [I"mustache-trimmer-rails;T@@ [I"mustache_wax;T@@ [I"mustachio;T@@ [I" mustang;T@I@ [I" mustard;T@@ [I" must_be;T@@ [I" mustdown;T@E@ [I" muster;T@@ [I" musterb;T@@ [I" musts;T@@ [I"mutable_pathname;T@'@ [I" mutagem;T@@ [I" mutant;T@V@ [I"mutant-melbourne;T@+@ [I"mutations;T@@ [I"mutations_caller_pipeline;T@@ [I""mutations_caller_pipeline_aws;T@@ [I" muto;T@E@ [I" mutter;T@J@ [I" mutual;T@@ [I"mux;T@@ [I" muxilla;T@'@ [I" muzang;T@@ [I"muzang-plugins;T@T @ [I"mvc;T@@ [I"mvccontrib;TU;[I" 2.0.95.1;T@ [I" mv-core;T@`@ [I"mvcturbine;TU;[I"2.1.0.0.20100820;T@ [I"mvcturbine-ninject;T@@ [I"mvcturbine-unity;T@@ [I"mvcturbine-windsor;T@@ [I" mvg-live;T@@ [I" mvgraph;T@'@ [I"mvl;T@@ [I" mvmv;T@@@ [I" mv-mysql;T@`@ [I" mvnizer;T@"@ [I"mvn-plugin-config;T@@ [I"mvn_watch;T@`@ [I"mv-postgresql;T@`@ [I"mv-sqlite;T@`@ [I" mv-test;T@`@ [I"mw;T@@ [I"mwd-paperclip;T@r@ [I"mwilden-disqus;T@@ [I"mwilden-metric_fu;T@0"@ [I")mwilliams-carrierwave-base64-storage;T@@ [I" mw-irc;T@E@ [I"mwk-ruby-utils;T@@ [I"mwmitchell-rsolr;T@Q@ [I"mwotton-apnd;T@@ [I"mwotton-bluepill;T@]A@ [I"mwotton-daemons;T@@ [I"mwp_themes_proposal_client;T@E@ [I"mws;T@'@ [I"mws-connect;T@@ [I" mxfinfo;T@s@ [I"mxit-rails;T@@ [I"MxmConnect;T@@ [I"mx_record;T@@ [I" Mxx_ru;T@e@ [I"my;T@@ [I" my1stgem;T@@ [I" myapp;T@@ [I" myaso;T@@ [I"my_awesome_gem;T@t@ [I" myaxes;T@@@ [I"my_bloody_valentine;T@@ [I"MyCommerce;T@@ [I"My-Commerce;T@@ [I"MyCommerceapi;T@@ [I"My-Commerce_api;T@@ [I"My-Commerce_auth;T@@ [I"My-Commerce_core;T@@ [I"My-Commerce_dash;T@@ [I"My-Commerce_promo;T@@ [I"My-Commerce_sample;T@@ [I"mycroseconds;T@@ [I" mydbi;T@W@ [I"!my_easy_globalize2_accessors;T@@ [I" my_emma;T@@@ [I"myexperiment-rest;T@@ [I"my_extended_range;T@'@ [I"myfdb_utilities;T@"@ [I"myfirstgem;T@@ [I"my_first_gem;T@'@ [I" myflickr;T@|@ [I" myfonts;T@@ [I" mygem;T@'@ [I" my_gem;T@'@ [I"my_generators;T@"@ [I" mygengo;T@}@ [I"mygengo-ruby;T@s@ [I"mygengo_string;T@@ [I" mygit;T@E@ [I"my_gravatar;T@@ [I" myhola;T@'@ [I" myimdb;T@`@ [I" myip;T@E@ [I" myipv4;T@'@ [I"mylescarrick-aasm;T@@ [I" myl-fech;T@W@ [I" my-lib;T@[@ [I" mymatrix;T@@ [I" mymemory;T@'@ [I" mymoip;T@x@ [I"my_moip-rails;T@'@ [I"myna_bird;T@^@ [I"myna_eventmachine;T@ @ [I"mynewsdesk-git-pair;T@@ [I"mynewsletterbuilder;T@Q@ [I" mynu;T@@ [I"mynyml-override;T@@ [I"mynyml-redgreen;T@@ [I" myoack;T@E@ [I"my_obfuscate;T@@ [I"myownadverts;T@@ [I" mypath;T@'@ [I"my-process-server;T@'@ [I"myproject;T@@ [I"my_push_test;T@@ [I"my_queues;T@@ [I"myreplicator;T@@ [I"myronmarston-rack-client;T@,@ [I" myrrha;T@O@ [I"my-ruby-net-ldap;T@@ [I" myrurema;T@@ [I" mys3ql;T@@ [I"my_scripts;T@=@ [I"my-sequel-synchrony;T@@ [I" myshows;T@I@ [I" myslog;T@n@ [I"mysmallidea-activemerchant;T@@ [I"(mysmallidea-address_standardization;T@@ [I" mysmallidea-mad_mimi_mailer;T@@ [I"my_society-map_it;T@@ [I" myson;T@'@ [I" myspace;T@@ [I"myspaceid-sdk;T@!@ [I"myspace-ruby;T@@ [I" mysql;T@I@[@@@[@@>@[@@>@ [@@>@ [I" mysql2;T@?@ [@@?@ [@@?@[I"mysql2_bigint;T@~@ [I"mysql2-cs-bind;T@@ [I"mysql2_downcase;T@@ [I"mysql2_model;T@@@ [I"mysql2mysql;T@E@ [I"mysql2psql;T@@ [I"mysql2-sp;T@[@ [I"mysql2wrapper;T@E@ [I"mysql2xxxx;T@@ [I"mysql_backup;T@@ [I"mysql_binlog;T@@ [I"mysql_blob_streaming;T@;@ [I"mysql_cache_manager;T@@ [I"mysql_cli;T@'@ [I"mysql-decimal;T@'@ [I"mysql_health;T@@ [I"mysql_incremental_query;T@E@ [I"mysql-inspector;T@@ [I"mysql_manager;T@@ [I"mysql_mirror;T@6@ [I"mysqlplus;T@@@ [I" mysql-pr;TU;[I" 2.9.11;T@ [I"mysql_rake_tasks;T@6@ [I"mysql_replication_adapter;T@x@ [I"mysql-replication-helper;T@@ [I"mysql_replication_monitor;T@1@ [I"mysql_replication_status;T@6@ [I" mysql_retry_lost_connection;T@'@ [I"mysql_s3_backup;T@'@ [I"mysql_schema_bulk_change;T@@ [I"mysql_simple_fulltext;T@@ [I"mysql_stay_connected;T@'@ [I"mysqltopostgres;T@X)@ [I"mysql-to-postgres;T@V@ [I"mysql_truck;TU;[I" 0.5.7.1;T@ [I"mysql_view_support;T@@ [I"mysql_warmer;T@`@ [I"mysql-xml;T@`@ [I"mysticize;T@@ [I"my_string_extend;T@'@ [I"my_string_extend1;T@'@ [I"my_string_extend2;T@'@ [I"my_string_extend3;T@'@ [I"my_string_extend_ah;T@'@ [I""my_string_extend_alexnicolini;T@'@ [I"my_string_extend_amian;T@'@ [I"my_string_extend_ams;T@'@ [I"my_string_extend_anarey;T@'@ [I"my_string_extend_baiki;T@'@ [I"my_string_extend_bam;T@'@ [I"my_string_extend_barrrt;T@'@ [I"my_string_extend_berto;T@'@ [I"my_string_extendbr;T@'@ [I""my_string_extend_bruno_campos;T@'@ [I"my_string_extend_buzain;T@'@ [I"my_string_extend_bw;T@'@ [I"my_string_extend_cb;T@'@ [I"my_string_extendcc;T@'@ [I"my_string_extend_chaitanya;T@'@ [I"my_string_extend_chefe;T@'@ [I"my_string_extend_cs;T@'@ [I"my_string_extend_cwr;T@'@ [I"my_string_extend_dem1;T@'@ [I"my_string_extend_dh;T@'@ [I"my_string_extend_djh;T@'@ [I"my_string_extend_dm;T@'@ [I"my_string_extend_dpl;T@'@ [I"my_string_extend_dwc;T@'@ [I"my_string_extended;T@'@ [I"my_string_extend_eddie;T@'@ [I"my_string_extend_etm;T@'@ [I"my_string_extend_folco;T@'@ [I"my_string_extend_gf;T@'@ [I"my_string_extend_hb;T@'@ [I"my_string_extend_hgontijo;T@'@ [I"my_string_extend_ht;T@'@ [I"my_string_extend_hwolfson;T@'@ [I"my_string_extendj;T@'@ [I"my_string_extend_jeff;T@'@ [I""my_string_extend_jeffcressman;T@'@ [I"my_string_extend_jms;T@'@ [I"my_string_extendjmz;T@'@ [I"my_string_extend_jt;T@'@ [I"my_string_extend_kamil;T@'@ [I"my_string_extend_kaurvaki;T@'@ [I"my_string_extend_kaz;T@'@ [I"my_string_extend_kim;T@'@ [I"my_string_extend_ko;T@'@ [I"my_string_extend_lacsousa;T@'@ [I"my_string_extend_lb;T@'@ [I"my_string_extend_lmd;T@'@ [I"my_string_extend_lsc;T@'@ [I"my_string_extend_lv;T@'@ [I"my_string_extend_lyk;T@'@ [I"my_string_extend_MAB;T@'@ [I"my_string_extend_MAM;T@'@ [I"my_string_extend_marcric;T@E@ [I"my_string_extend_mepis;T@'@ [I"my_string_extend_mg;T@@ [I"my_string_extend_migane;T@'@ [I"my_string_extend_mm;T@'@ [I"my_string_extend_morph;T@'@ [I"my_string_extend_mr;T@'@ [I"my_string_extend_mrleinad;T@'@ [I"my_string_extend_n;T@'@ [I"my_string_extend_neto;T@'@ [I"my_string_extend_nicopaez;T@'@ [I"my_string_extend_nivram;T@'@ [I"my_string_extend_obxhdx;T@'@ [I"my_string_extend_pdc;T@'@ [I"my_string_extend_pk;T@'@ [I"my_string_extend_pradeep;T@'@ [I"my_string_extend_rb;T@'@ [I"my_string_extendrbg;T@'@ [I"!my_string_extend_rcastrobsas;T@'@ [I"my_string_extend_rjh1021;T@'@ [I"my_string_extend_rml;T@'@ [I"my_string_extend_robert;T@'@ [I"my_string_extend_rosawa;T@'@ [I"my_string_extend_rp;T@'@ [I"my_string_extendrvb;T@'@ [I"%my_string_extend_sergiosouzalima;T@'@ [I"my_string_extend_sito;T@'@ [I"my_string_extend_sivan;T@'@ [I"my_string_extend_sj;T@'@ [I"my_string_extend_smw;T@'@ [I"my_string_extend_snm;T@'@ [I"my_string_extend_sofps;T@'@ [I"my_string_extend_srlunar;T@@ [I"my_string_extend_tb;T@'@ [I"my_string_extend_testing;T@'@ [I"my_string_extend_tipz;T@'@ [I"my_string_extend_tk;T@'@ [I"my_string_extend_tmb;T@'@ [I"my_string_extend_tmo;T@E@ [I"my_string_extend_tnaires;T@'@ [I"my_string_extend_ujk;T@'@ [I"my_string_extend_valiant;T@'@ [I"my_string_extend_xyz;T@'@ [I"my_stuff-cache;T@@ [I"my_stuff-fb303;T@@ [I"my_stuff-logger;T@@ [I"my_stuff-multidb;T@@ [I" mysuper;T@'@ [I" myterm;T@"@ [I"my_totokamo;T@'@ [I" my_uuid;T@@ [I" myway;T@@ [I"my_wiki_generator;T@"@ [I"mywowarmory-ruby;T@@ [I" my_zeo;T@@ [I"my_zipcode_gem;T@6@ [I"mzl;T@E@ [I" mzml;T@@ [I"n;T@@ [I" n3mfis;T@E@ [I"n4j;T@@ [I"n8_activemerchant;T@ @ [I"n8-adcenter-client;TU;[I" 8.0.0;T@ [I"n8-attr_encrypted;T@;@ [I"n8-heroku-autoscale;T@I@ [I" nabaztag;T@@ [I" Nabaztag;T@@ [I"nabaztag_hack_kit;T@@ [I" nabit;T@@ [I"nachof-premailer;T@@ [I" nachos;T@@ [I" nacl;T@!@ [I"nacofetch;T@@ [I" nadoka;T@@ [I" naether;T@[@ [@@[@[I"naeu-jekyll;T@X@ [I" nagi;T@I@ [I" nagios;T@"@ [I"nagios_alerter;T@`@ [I"nagios_analyzer;T@@ [I"nagios_check;T@@ [I"nagios_config;T@@ [I"nagios-dashboard;T@"@ [I"nagios-dashboard-sonian;T@@ [I"nagiosharder;T@x@ [I"nagios_helper;T@@@ [I"nagios-manage;T@u @ [I"nagios_mklivestatus;T@3@ [I"nagios_parser;T@@ [I"nagiosplugin;T@@ [I"nagios-plugin;T@'@ [I"nagios-probe;T@@@ [I"nagios_rails_server;T@@ [I"nagios-splunk;T@@ [I"nagios_webbed_log;T@@ [I" naglfar;T@E@ [I" nagoro;TU;[I" 2009.05;T@ [I"nahaylo-simple_captcha;T@@ [I" nailgun;T@@ [I"naive_bayes;T@@ [I"naive-search;T@@ [I"najdi-sms;T@@ [I" nakajima;T@"@ [I"nakajima-twitter_oauth;T@@ [I" nakamura;T@X@ [I" nake;TU;[I" 0.0.9.3;T@ [I"naked-chef;TU;[I" 0.9.15.3;T@ [I" nakor;T@3@ [I" naksh;T@@ [I" namae;T@@ [I" namaste;T@@ [I"namaste_duniya;T@E@ [I" namba;T@N@ [I" name;T@'@ [I" nameable;T@@ [I"nameable_record;T@N@ [I" namebox;T@'@ [I" nameboy;T@@ [I" namecase;T@@ [I"namecheap;T@@@ [I"name_checker;T@@ [I"named_accessors;T@s@ [I"namedarguments;T@@ [I"named_arguments;T@@ [I"named_emoji;T@@ [I"named_instances;T@@ [I"named_let;T@6@ [I"name-dot-com;T@@ [I"name_dot_com_api;T@R @ [I"named_parameter;T@@ [I"named_parameters;T@@ [I"named-parameters;T@@ [I"named_proc;T@@ [I"named-routes;T@ @ [I"named_scope_for_time_attr;T@@ [I"named_seeds;T@@ [I"named_value_class;T@X@ [I"name-generator;T@E@ [I"namelessjon-couchrest;T@@ [I"namelessjon-twitter_oauth;T@@ [I"namelogic;T@6@ [I"name_parse;T@@ [I"name_search;T@' @ [I"namespace;T@@ [I"namespaced_htmldoc;T@@ [I"namespaced_redis;T@@ [I"namespace_helper;T@@ [I"namespaces;T@@ [I"name-spotter;T@,@ [I" nameste;T@@ [I"nametrainer;T@I@ [I" namey;T@V@ [I" namor;T@@ [I"namxam-authlogic;TU;[I" 2.1.3.1;T@ [I"namxam-backup;T@[@ [I"namxam-carmen;T@6@ [I"namxam-rfgraph;T@R @ [I"namxam-ts-delayed-delta;T@@ [I" nancy;T@@ [I" nandoc;T@@ [I" nanite;TU;[I" 0.4.1.17;T@ [I" nano;T@@ [I" NanoAuth;T@@ [I" nanoboy;T@@ [I" nanoc;T@_=@ [I" nanoc2;T@9 @ [I" nanoc3;T@@ [I"nanoc-bibtex;T@@ [I"nanoc-cachebuster;T@@ [I"nanoc-code-classifier;T@@ [I"nanoc_deploy;T@'@ [I"nanoc-deploy;T@@ [I"nanoc-embed;T@E@ [I"nanoc-filesystem-i18n;T@@ [I"nanoc_fuel;T@"@ [I"nanoc-fuel;T@V@ [I"nanoc-git;T@n@ [I"nanoc-gzip-filter;T@'@ [I"nanoc-image-compressor;T@`@ [I""nanoc-javascript-concatenator;T@E@ [I"nanocontexts;T@B@ [I" nanoc-oo;T@@ [I"nanoc-search;T@'@ [I"nanoc-sftp;T@@ [I"nanoc-snippet;T@E@ [I"nanoc-sprockets-filter;T@E@ [I"nanoc-tilt;T@`@ [I"nanoc-toolbox;T@`@ [I"nanoc-video-filter;T@`@ [I"nanomachine;T@@ [I"nano-store;T@@ [I" nanotest;T@c@ [I"nanotest_extensions;T@y@ [I"nanotest_spec;T@B@ [I"nanowrimo;T@@ [I" nant;TU;[I"0.9.0.20100904;T@ [I" naoki;T@W@ [@@W@([@U;[I" 1.0.24;T@ [I"nap;T@@ [I" napolean;T@@ [I" narabi;T@@ [I" narc;T@@ [I" narf;T@n@ [I"Narnach-pony;T@@ [I" narray;TU;[I" 0.5.9.7;T@ [@U;[I" 0.6.0.4;T@ [I"narray_miss;T@F@ [I"narray-ruby19;T@@ [I" nasa;T@@ [I" nash;T@E@ [I" nashie;T@@ [I"nash-rails;T@'@ [I" nasl;T@V@ [I" nasldoc;T@@ [I"nasl-pedant;T@@ [I" na_str;T@@ [I"nas-yahoo_stock;T@@ [I"Nas-yahoo_stock_kalus;T@ @ [I" natcmp;T@@ [I"nateabbott-friendly-id;T@ @ [I"natedaiger-youtube-g;T@@ [I"nate-hunzaker-lorem;T@E@ [I"nathanize;T@@ [I"national_rail;T@@ [I"national-rail;T@/@ [I"nationalweather;T@`@ [I"nativedriver;T@'@ [I"native-gem;T@'@ [I"native-query;T@Q@ [I" nats;TU;[I" 0.4.28;T@ [I" natstrap;T@'@ [I" natto;T@@ [I" natural;T@`@ [I"natural_key;T@@ [I"naturally;T@@ [I"naturalsort;T@@ [I"naturalsorter;T@VK@ [I"naturalspec;TU;[I" 1.0.69.0;T@ [I"natural_time;T@@ [I"naturecommits;T@@ [I" natwest;T@@ [I"naudo-ruby-iactionable;T@`@ [I"naught_check;T@@ [I"naughty-step;T@E@ [I" nautilus;T@V@ [I"nav;T@X@ [I" naver;T@@ [I" navfund;T@"@ [I" navi;T@+@ [I"navigasmic;T@@ [I"navigation_link_to;T@'@ [I"navigator;T@@ [I" navlinks;T@@ [I"nav_link_to;T@"@ [I" navvy;T@@ [I" navy;T@x@ [I"nayutaya-active-form;T@'@ [I"nayutaya-bookmark-utility;T@@ [I"!nayutaya-googlemaps-polyline;T@'@ [I"nayutaya-ironnews-utility;T@@ [I"nayutaya-kagemusha;T@@ [I"nayutaya-msgpack-pure;T@E@ [I"nayutaya-pure-nkf;T@'@ [I" nayutaya-webhook-dispatcher;T@@ [I"nayutaya-wsse;T@'@ [I" nazca;T@`@ [I"nbadw-util;T@+@ [I" nbayes;T@`@ [I"nberger-searchlogic;TU;[I" 2.4.29;T@ [I"nbitarray;T@E@ [I"#nbogie-production_log_analyzer;TU;[I" 1.5.1.3;T@ [I"nbogie-rails;T@|@ [I"nbp;T@E@ [I"nbp_exchange;T@@ [I"nbp-rates;T@@ [I"nbrb_currency;T@@ [I"nbrew-better_nested_set;T@'@ [I"nbrew-country_select;T@'@ [I" nbrew-simple_access_control;T@'@ [I"nbrew-simple_time_select;T@@ [I" nbtfile;T@@ [I"nbt_utils;T@@ [I"nbudin-castronaut;T@!@ [I"nbudin-disqus;T@@ [I"nbudin-google4r-checkout;T@@ [I"nbudin-version_fu;T@@ [I" nbuild;T@n@ [I" nbuilder;T@'@ [I"ncal2gcal;T@1@ [I"ncbo_annotator;T@ @ [I"ncbo_resource_index;T@@ [I"nc-freebase;T@@ [I" nclient;T@@ [I"ncri-seer;T@@ [I"ncr-lazy_high_charts;T@@ [I"ncsa-parser;T@E@ [I" ncs_mdes;T@*@ [I"ncs_mdes_warehouse;T@ @ [I"ncs_navigator_authority;T@@ [I" ncs_navigator_configuration;T@@ [I" ncurses;T@e@ [I"ncurses-ruby;T@u@ [I" ncursesw;TU;[I" 1.2.4.3;T@ [I" ncXBMC;T@@ [I" ndc_tree;T@`@ [I"ndd-rspec;T@`@ [I"nddrylliog_pismo;T@y@ [I"nddrylliog_youtube_it;T@i6@ [I"ndlib-on-rspec;T@"@ [I"ndl_search;T@@ [I"ndo;T@@ [I"neapolitan;T@@ [I"nearbyfyi-client;T@@ [I" nearest;T@E@ [I" nearline;T@@ [I" neartree;T@!@ [I" neat;T@@ [I"neat-compass;T@@ [I"neat-pages;T@E@ [I" nebula;T@'@ [I"neckbeard;T@'@ [I" necktie;T@@ [I" need;T@@ [I" needish;T@E@ [I"need_label;T@@ [I" needle;T@@ [I"needle-extras;T@@ [I" needy;T@@ [I"needy-git;T@@ [I"neg;T@@ [I"negative_captcha;T@@ [I"negative-method;T@u@ [I"negotiator;T@@ [I"negval-deadlock_retry;T@@ [I"neighborparrot;T@@ [I" neko;T@@ [I" nekohtml;T@@ [I"nekoneko_gen;T@@ [I" nele;T@I@ [I" nele-cli;T@@ [I" nemo;T@6@ [I" nendo;T@@ [I" neo4j;T@9 @[I"neo4j-admin;T@@[I"neo4j-advanced;T@ @[I"neo4j-community;T@ @[I"neo4j-core;T@9 @[I"neo4j-cypher;T@@ [I"neo4j-enterprise;T@ @[I"neo4j_helper;T@@ [I"neo4j-rails;T@@ [I"neo4jrb-paperclip;T@'@[I"neo4jr-simple;T@I@ [I"neo4jr-social;T@@ [I"neo4j-spatial;T@V@[I"neo4j-will_paginate;T@@ [@R@@[I"neo4j-wrapper;T@9 @[I"neocoin-mechanize;T@@ [I" neo-dci;T@x@ [I"neography;T@@ [I"neography-ajaycb;T@@ [I" neoid;T@`@ [I" neon;T@'@ [I" neoneo;T@`@ [I" neonjs;T@'@ [I"neon_parser;T@'@ [I" neopets;T@'@ [I"neo-rails;T@@ [I" neo_rest;T@E@ [I" neoscout;T@`@ [I" neo-tmdb;T@x@ [I" neo-viz;T@@ [I" nephelae;T@@@ [I" nephele;T@. @ [I"nephophobia;T@@ [I" neptune;T@@ [I" nera;T@X@ [I"nerd_quiz;T@I@ [I" nerdword;T@'@ [I" nerdz;T@'@ [I" nerve;T@'@ [I" nervion;T@"@ [I"nesstar-api;T@@ [I" nessusdb;T@@ [I"nessus-xmlrpc;T@@ [I" nest;T@x@ [I" nesta;T@@ [I"nestable_logger;T@@ [I"nesta-plugin-admin;T@@ [I"nesta-plugin-blogazine;T@'@ [I"nesta-plugin-cache;T@'@ [I"nesta-plugin-dateslugs;T@E@ [I"nesta-plugin-diskcached;T@@ [I"nesta-plugin-foldable;T@"@ [I"nesta-plugin-google-ads;T@'@ [I"nesta-plugin-linkable;T@'@ [I"%nesta-plugin-metadata-extensions;T@'@ [I"nesta-plugin-project-meta;T@'@ [I"nesta-plugin-sharethis;T@E@ [I"nesta-plugin-sluggable;T@'@ [I"nesta-plugin-smartmeta;T@'@ [I"nesta-plugin-subpages;T@@ [I"nesta-plugin-yaml-metadata;T@'@ [I"nesta-rails;T@'@ [I"nested-benchmark;T@@ [I"nested_config;T@x@ [I"nested-delocalize;T@g@ [I"nested_exceptions;T@@ [I"nested_fields;T@x@ [I"nested-fields;T@@ [I"nested_fields_rails;T@@ [I"nested_form;T@@ [I"nested_form_fields;T@@ [I"nested_hash;T@,@ [I"nested_hash_tricks;T@@ [I"nested_has_many_through;T@E@ [I"nested_layouts;T@6@ [I"nested-layouts;T@@@ [I"nested_liquid;T@`@ [I"nested_list;T@E@ [I"nested_model_auth;T@'@ [I"nested_open_struct;T@@ [I"nested-resources;T@"@ [I"nested_restful_scaffold;T@@ [I"nested_scaffold;T@@ [I"nested_set;T@@ [I"nestedsortabletree-rails;T@@@ [I" nestegg;T@E@ [I" nester;T@E@ [I" nestful;T@V@ [I" nestive;T@@ [I" nestling;T@6@ [I" nestor;T@,@ [I"nestor_growl;T@@ [I" nestoria;T@@ [I"nest_thermostat;T@@ [I"nest-unit;T@'@ [I" netaddr;T@@ [I"net-amazon-s3;T@@ [I"netatlas-poller;T@'@ [I" netaxept;T@@ [I"netchecker;T@'@ [I" netconf;T@@ [I"net-connection;T@'@ [I" net_dav;T@@ [I" net-dhcp;T@@ [I" netdna;T@'@ [I"netdnarws;T@,@ [I" net-dnd;T@x@ [I" net-dns;T@@ [I"net-dns-rbl;T@`@ [I"net-flickr;T@'@ [I" netflix;T@@ [I"netflix4r;T@@ [I" netflow;T@@ [I"net-fs-gmail;T@E@ [I"net-fs-gmail-backup;T@'@ [I"net-ftp-list;T@aP@ [I"net-ftp-putstring;T@'@ [I"net-geoip;T@+M@ [I"net-github-upload;T@V@ [I"netguru_deploy;T@'@ [I"netguru-safe;T@@ [I" nether;T@@ [I"nethttp_ab;T@n@ [I"net-http-auth-hmac;T@'@ [I"net_http_detector;T@'@ [I"net-http-digest_auth;T@u@ [I"net_http_errors;T@@ [I"net_http_exception_fix;T@@ [I"net-http-instrumentation;T@E@ [I"net-http-local;T@@@ [I" net-http-not_modified_cache;T@@ [I"net-http-paranoid;T@E@ [I"net-http-persistent;TU;[I"2.8;T@ [I"net-http-pipeline;T@@ [I"net-http-pool;T@@ [I"net-http-server;T@I@ [I"net-http-spy;T@@ [I"net-httpstub;T@E@ [I"net-https-wrapper;T@@ [I"net_http_timeout_errors;T@E@ [I"net-http-uploadprogress;T@@ [I"netid-tools;T@@ [I"net-interface;T@'@ [I"net-ipaddress;T@E@ [I" net-irc;T@@ [I"net-irc-mala;T@E@ [I" net-ldap;T@@ [I"net-ldap-1;T@x@ [I" net-mdns;T@R @ [I"net-netrc;T@I@ [I" netnoop;T@@ [I" net-ntp;T@ @ [I"net_observer;T@@ [I" net-ping;T@@[@n@@ [@n@@ [I" netprint;T@"@ [I"net-proto;T@W@[@t@@ [I"net-purge;T@@ [I" netrand;T@@ [I" netrc;T@@ [I"net-reactor;T@E@ [I"netrecorder;T@@ [I"netscaler;T@@ [I"netscaler-cli;T@M+@ [I" net-scp;T@@ [I" net-sftp;T@@ [I"netsign-annotate;T@[@ [I"netsign-ios-checkboxes;T@@@ [I"net-simple;T@@ [I" net-smb;T@@ [I"net-snarl;T@'@ [I" net-snmp;T@[@ [I" net-ssh;T@b@ [I"net-ssh-askpass;T@@ [I"net-ssh-gateway;T@@ [I"net-ssh-kerberos;T@@ [I"net-ssh-multi;T@s@ [I"net-ssh-plus;T@E@ [I"net-ssh-session;T@@ [I"net-ssh-shell;T@@ [I"net-ssh-simple;TU;[I" 1.5.9;T@ [I"net-ssh-socks;T@E@ [I"net-ssh-telnet;T@E@ [I"netstats24-client;T@'@ [I" netsuite;TU;[I" 0.0.48;T@ [I"netsuite_client;T@s@ [I"netsuite-rest-client;T@@ [I" net-tftp;T@@ [I" nettica;T@x@ [I" nettle;T@'@ [I"net-tnsping;T@@ [I" net-toc;T@!@ [I"netty-jars;T@@[I" net-uri;T@'@ [I" netvbox;T@n@ [I" netvibes;T@@ [I"network_executive;T@V@ [I"network-facade;T@R @ [I"networking;T@@ [I"network_logger_io;T@@ [I"networkmanager-dbus;T@@ [I"network-projector;T@@ [I"network_roam;T@@ [I"net-wrong;T@@ [I" net-ws;T@E@ [I" net-yail;T@ @ [I" netz;T@'@ [I"netzke-basepack;T@@ [I"netzke-basepack-zh;T@u/@ [I"netzke-cancan;T@E@ [I"netzke-communitypack;T@X@ [I"netzke_config;T@@ [I"netzke-core;T@@ [I"netzke-draper;T@'@ [I"netzke-persistence;T@@ [I"netzke_widget_generators;T@@ [I" neuro;T@@ [I"neuro_gammon;T@@ [I" neuron;T@@ [I"neuron-client;T@@ [I" neuronet;T@@ [I"neutrino_client;T@@ [I"neverblock;TU;[I" 0.1.6.2;T@ [I"neverdone;T@@@ [I"neverfails;T@"@ [I"never-forget;T@`@ [I"neverland;T@@ [I"nevermore-client;T@'@ [I"neversaydie;T@@ [I"never_wastes;T@@ [I"newbamboo-rvideo;T@Q@ [I"newbase60;T@@ [I"new_base_60;T@@ [I"new_class;T@@@ [I" newcocoa;T@"@ [I"new_data_notifier;T@|@ [I" neweden;T@1@ [I"neweden-km-parser;T@@ [I"newer_image_size;T@@ [I" newext;T@'@ [I" newflow;T@@ [I" newgem;T@@ [I" new_gem;T@'@ [I"newick-ruby;T@@ [I" newie;T@@ [I" newjs;TU;[I" 1.7.4;T@ [I" newkata;T@@ [I" newly;T@@ [I" newman;T@@ [I"newmy-plugin;T@'@ [I"new_operators;T@n@ [I"newplugin;T@"@ [I"newproject;T@@ [I"newrelic-amazon-ec2;T@@ [I"newrelic_api;T@u"@ [I"newrelic_data;T@"@ [I"newrelic-excon;T@I@ [I"newrelic-eycap;TU;[I" 0.5.6.0;T@ [I"newrelic-faraday;T@y@ [I"newrelic-grape;T@@ [I"newrelic-httpclient;T@@ [I"newrelic_ia;T@I@ [I"newrelic-middleware;T@@ [I"newrelic_moped;T@*@ [I"newrelic-moped;T@@ [I"newrelic-pjax;T@@@ [I"newrelic-rake;T@@ [I"newrelic-redis;T@@ [I"newrelic_rpm;TU;[I" 3.5.5.38;T@ [I"newrelic_rpm_rails4;T@@ [I"newrelic-sequel;T@@ [I"newrelic_tag;T@@@ [I"newrelic-workling;T@@ [I"new_responds_to_parent;T@|@ [I" news;T@@ [I"newscrapi;T@@ [I" newsfeed;T@@ [I"news_feed;T@@ [I"newsfire_export;T@@v[I" newsite;T@E@ [I"newslettre;T@,@ [I" newsly;T@J@ [I" newsroom;T@'@ [I" newstile;T@@ [I" newt;T@' @ [I" newton;T@@ [I"nex3-test-pkg;T@@ [I" nexmo;T@@ [I" nexpose;T@@@ [I"nexpose_csv_generator;T@"@ [I"nexpose_scan_manager;T@"@ [I" next12;T@*@ [I"next-big-sound;T@@ [I"next-big-sound-lite;T@@ [I" nextbus;T@'@ [I" nextday;T@x@ [I"nextday-engine;T@@ [I"next_muni;T@|@ [I" nextstop;T@'@ [I" nexty;TU;[I" 0.30;T@ [I" nexus;T@@ [I"nexus_artifact;T@@ [I"nexus_cli;T@@ [I"nexus_link;T@@ [I"nexus_parser;T@T @ [I" nezumi;T@@ [I"nf;T@@ [I" nfagent;TU;[I" 0.9.30;T@ [I"nfc;T@@ [I"nfe;T@@ [I" nfler;T@'@ [I"nfl_live_update;T@"@ [I"nfo-resque-mongo;TU;[I" 1.17.2;T@ [I" nfqueue;T@@ [I" nfrb;T@@@ [I"ng;T@@ [I" nginx;T@E@ [I"nginx_config_generator;T@@@ [I"%nginx_config_generator_kthompson;T@I@ [I"nginx_config_parser;T@@ [I"nginx-osx;T@@ [I"nginx_status;T@@ [I"nginx_stream_pusher;T@@ [I"nginx_test_helper;T@'@ [I" nginxtra;TU;[I" 1.2.6.7;T@ [I"nginx-watcher;T@'@ [I"ngmoco-cache-money;TU;[I" 0.2.24.2;T@ [I" ngmoco-request-log-analyzer;T@@ [I"ngpod_scraper;T@`@ [I" n_gram;T@'@ [I"ngramdistance-ffi;T@@ [I" ngrams;T@@ [I"n_grams_generator;T@E@ [I"NGSLib-RFile;T@@ [I"ngs_server;T@W9@ [I" nguyen;T@@ [I"ngw_rest-client;T@N@ [I" ngxlint;T@@ [I"nhibernate;TU;[I"2.1.2.4000;T@ [I"nhl;T@'@ [I" nhruby;T@'@ [I"nhvalidator;TU;[I"1.2.0.3001.20100722;T@ [I" nibbler;T@@ [I" nibbme;T@N@ [I" nibjs;T@@ [I" nic_ar;T@@ [I" nice;T@@ [I"nice_admin;T@n@ [I"nice-buttons;T@@ [I"nice_enum;T@+@ [I"nice-enum;T@6@ [I" nice-ffi;T@R @ [I"nice_generators;T@E@ [I" niceid;T@@ [I"nice-n-easy;T@@ [I"niceogiri;T@@ [I"nice_password;T@@ [I"nice_scaffold;T@E@ [I"nice_text_captcha;T@6@ [I"niche-theme-roller;T@'@ [I",nicholashubbard-production_log_analyzer;T@@ [I" nickel;T@@ [I"nickel-silver-server;T@"@ [I"nickjones-vestal_versions;T@@ [I"nickname_generator;T@'@ [I"nick_tac_toe;T@+@ [I"nicoalert;T@'@ [I" nicoloid;T@@ [I" nicolus;T@u@ [I" niconico;T@;@ [I"nicoscraper;TU;[I" 0.2.15.2;T@ [I"nicovideo;T@@ [I"nielsm-authlogic_haapi;T@@ [I"nielsm-metric_fu;T@ @ [I"nif;T@@ [I" nifti;T@'@ [I"niftier-generators;T@@@ [I" niftp;T@@ [I"nifty-cloud-sdk;T@.@ [I"niftygenerators;T@@ [I"nifty-generators;T@_@ [I"nifty-generators-improved;T@@ [I" nifval;T@I@ [I"nightcrawler;T@E@ [I"nightfury;T@@ [I"night-time;T@@ [I" nike;T@@ [I"nike_plus;T@E@ [I"nikeplus_webcrawler;T@'@$[I" niki;T@I@ [I" nikita;T@'@ [I"nikita-browser;T@'@ [I"nikita-core;T@'@ [I"nikita-debugger;T@'@ [I"nikita-editor;T@'@ [I"nikita-middleware;T@'@ [I"nikita-monitor;T@'@ [I"nikita-profiler;T@'@ [I"nil;T@O@ [I"nilclass-maildir;T@@ [I" niles;T@'@ [I"nilify_blanks;T@@ [I" nilio;T@@ [I"nilly_vanilly;T@@ [I"nil_object;T@'@ [I"nil_roulette;T@'@ [I" nilsimsa;T@@ [I" Nilsimsa;T@@ [I"nil_skipper;T@'@ [I"nil_to_chill;T@@ [I"nim;T@`@ [I" nimble;T@@ [I"nimble_nodes;T@- @ [I"nimbleshop;T@@ [I"nimbleshop_authorizedotnet;T@@ [I"nimbleshop_cod;T@@ [I"nimbleshop_core;T@@ [I"nimbleshop_paypalwp;T@@ [I"nimbleshop_simply;T@@ [I"nimbleshop_splitable;T@@ [I"nimbleshop_stripe;T@@ [I" nimbo;T@n@ [I"nimboids-capybara;T@x@ [I"%nimboids-client_side_validations;T@i@ [I"nimboids-rspec-instafail;T@6@ [I"nimboids-shoulda;T@q@ [I"nimboids-spork;TU;[I" 0.8.99;T@ [I"nimboids-workflow;T@@ [I" nimbu;T@R @ [I" nimbus;T@ @ [I"nimbussecure;T@@ [I"nineflats-api;T@@ [I" nines;T@@ [I"ning-compress-jars;T@@[I" ninja;T@@ [I" ninja2k;T@E@ [I""ninjabutton_chargify_api_ares;T@@ [I"ninja-decorators;T@@ [I"ninja-deploy;T@ @ [I" ninjadoc;T@'@ [I"ninja-model;T@@ [I"ninja-rake;T@@ [I" ninject;TU;[I"2.0.0.0.20100801;T@ [I" ninjs;T@ 9@ [I"ninjs-framework;T@@ [I"nio;T@[@ [I" nio4r;T@@[@@@ [I"nio-percent_fmt;T@@ [I" niouz;T@@ [I"nip;T@- @ [I" nippou;T@'@ [I"niquola-rbeautify;T@n@ [I" nirvana;T@`@ [I"nirvanahq;T@+@ [I"nirvdrum-amazon-ec2;T@@ [I"nirvdrum-jekyll;T@X@ [I"nirvdrum-rubber;T@@ [I"nis;T@@ [I"nisetegami;T@Y@ [I" nis-ffi;T@@ [I" nispack;T@@ [I" nitpick;T@@ [I" nitra;T@@ [I" nitro;T@̓@ [I" nitroapi;T@@ [I"nitro-auth;T@@ [I" nitrode;T@"@ [I" nitron;T@!@ [I" nitrous;T@@ [I"NittResults;T@@ [I" nivo;T@"@ [I"nix;T@`@ [I" nixcolor;T@E@ [I"nixme-vagrant;T@@ [I"njones-marketo;T@@ [I"nlg;T@'@ [I" nlog;TU;[I"1.0.0.505;T@[@&U;[I"1.0.0.505.20100822;T@ [I"nlp;T@^@ [I"nlp_backpack;T@@ [I"nlpcaptcha;T@@ [I"nl_test_gem;T@E@ [I" nmap;T@@ [I"nmap-parser;T@@ [I" nmatrix;T@E@ [I"nma-webtopay;T@u@ [I" nmea;T@R @ [I" nmoneys;TU;[I"2.5.0.0.20120625;T@ [I"nmoneys-exchange;TU;[I"1.0.0.0.20110630;T@ [I" nmunch;T@@ [I"nne_client;T@n@ [I" nnls;T@'@ [I"nnm_event_summarizer;T@'@ [I"nnm_interval_summarizer;T@'@ [I"nnm_ovtopodump_summarizer;T@'@ [I" nntp;T@@ [I"nntp_scrape;T@'@ [I" noaa;T@,@ [I"noaa-alerts;T@6@ [I" noaaer;T@@ [I"noaa-weather;T@|@ [I" noah;T@u!@[@c@u!@ [I"noah-agents-dummy2;T@"@ [I"no_backsies;T@@ [I"nobbie-wx-preview;T@'@ [I" nobody;T@@ [I"nobrainer;T@@ [I"noc;T@@ [I" no-click-exception-celerity;T@- @ [I" nocms;T@@ [I" noctivityinc-activemerchant;T@@ [I"noctivityinc-classifier191;T@@ [I"nod;T@V@ [I" noda;T@@ [I" node;T@E@ [I"node_config;T@'@ [I" nodeify;T@n@ [I" noderb;T@3@ [I" node.rb;T@'@ [I"noderb-http;T@@ [I" nodes;T@@ [I" nodester;T@@ [I" nodevent;TU;[I" 3.1.9;T@ [I" NoDevent;T@E@ [I" nodewrap;T@@ [I" nodex;T@@ [I" nodifier;T@1@ [I" nodule;T@T/@ [I"noe;T@=@ [I" noeq;T@@ [I" noexec;T@@ [I"nofakemail;T@"@ [I"nofxx-annotate;T@ @ [I"nofxx-georuby;T@{@ [I"nofxx-money;T@@ [I"nofxx-nanite;TU;[I" 0.4.1.15;T@ [I"nogara-ciunas;T@'@ [I"nogara-redis_failover;T@@ [I"nogara-resque-lonely_job;T@@ [I"nogara-resque-loner;T@u@ [I"nogara-resque-scheduler;T@@ [I"nogara-resque-statsd;T@"@ [I"nogara-rubber;T@@ [I"nogara-simple_captcha;T@`@ [I"nogara-wash_out;T@@ [I" noid;T@u @ [I"no-ie6-rails;T@E@ [I" noise;T@'@ [I" noisrev;T@@ [I" noisy;T@@ [I"noitehoje;T@@ [I"noko_builder;T@`@ [I" nokogiri;TU;[I" 1.4.4.1;T@[@@e@ [@@e@[@@e@ [@@e@[I"nokogiri-diff;T@@@ [I"nokogiri-fitzsimmons;TU;[I" 1.5.5.3;T@ [@@@[I"nokogiri-happymapper;T@@ [I"nokogiri_helper;T@'@ [I"nokogiri-maglev-;TU;[I"1.5.5.20120817130721;T@ [I"nokogiri-maven;T@@[I"nokogiri-plist;T@@ [I"nokogiri-pretty;T@@ [I"nokogiri-styles;T@@@ [I" nokogirl;T@@ [I" nokorexi;T@@ [I"nol;T@E@ [I" nolate;T@E@ [I"nolman-jetty-rails;T@Q@[I"nom;T@' @ [I" nomad;T@'@ [I" nomadic;T@@ [I"nomagic_capistrano_recipes;T@@ [I"nominatim;T@"@ [I"nominet-epp;T@3@ [I" nom_nom;T@@ [I"nomnomnom-client;T@`@ [I" nomo;TU;[I" 0.0.50;T@ [I"no_more_pending_migrations;T@@ [I" nom-ruby;T@@ [I" nom-xml;T@@ [I"non_blocking_lock;T@@ [I"nondeterminism;T@@ [I" non-haml;T@s@ [I" NoNo;T@'@ [I"nonograms;T@@ [I"nonopaste-cli;T@'@ [I"nono-redis-store;T@@ [I"no_notifier_needed;T@`@ [I" nonsense;T@@ [I" noodall;T@@ [I"noodall-articles;T@@ [I"'noodall-components-disqus-comments;T@@ [I"noodall-components-gallery;T@@ [I"'noodall-components-general-content;T@@ [I"$noodall-components-promo-driver;T@@ [I""noodall-components-quicklinks;T@@ [I"noodall-components-quote;T@@ [I"noodall-core;T@@ [I"noodall-devise;T@@ [I"noodall-form-builder;T@Y@ [I"noodall-ui;TU;[I" 0.5.14;T@ [I" noodle;T@@ [I" noodnik;T@@ [I" noopi;T@@ [I"no_peeping_toms;T@@ [I" no_phone;T@n@ [I"noprocast;T@+@ [I"noprocrast;T@1@ [I" noratext;T@'@ [I" nordea;T@@ [I"nordea-rb;T@@ [I"no_require;T@'@ [I" nori;T@@ [I" norm;T@ @ [I" norma;T@!@ [I" norma43;T@[ @ [I" normalic;T@!@ [I"normalize;T@@ [I"normalize_attributes;T@1@ [I"normalize_it;T@@ [I"normalize-json;T@E@ [I"normalizer;T@'@ [I"normalize-rails;T@@ [I"normal_map;T@'@ [I" norman;T@@ [I"normatron;T@@ [I"northstar;T@@ [I"NortonAntiVirus;T@E@ [I"norwegian-county-names;T@@ [I"norwegian-county-select;T@@ [I"norwegian_holidays;T@"@ [I"norwegian_phone;T@@ [I" nosey;T@@ [I" nosh;T@@ [I"nosql-tutorial;T@`@ [I"nosqoop4u;T@@@[I"nostos-source-illiad;T@"@ [I"nostos-target-voyager;T@"@ [I"nostradamus;T@@ [I" nosweat;T@@ [I" nosy;T@@ [I"not;T@'@ [I"not_a_mock;T@@ [I" notams;T@@ [I" notarius;T@@ [I" notary;T@'@ [I" notation;T@@ [I" notator;T@@ [I"notch8-backupgem;T@@@ [I" notch8_sunspot_autocomplete;T@@ [I" notches;T@@ [I" note;T@u/@ [I" noted;T@`@ [I" notedown;T@'@ [I" notes;T@`@ [I"notes_mailer;T@'@ [I"(notes-structured-text-json-messages;T@+@ [I"'notes-structured-text-strip-bodies;T@|@ [I" notethis;T@'@ [I" nothing;T@@ [I" noti;T@@ [I" notice;T@'@ [I"notifiable;T@"@ [I"notificater-rails;T@@ [I"notification;T@!@ [I"notification_center;T@@ [I"notification_fu;T@x@ [I"notification_server;T@@ [I"notificon;T@"@ [I" notifier;T@@ [I"notifiers;T@@ [I" notifo;T@@ [I" notify;T@x@ [I"notify_if_invalid;T@@ [I" notifyme;T@@ [I"notify-on-error;T@@ [I"notjustagrid;T@x@ [I"not_naughty;T@@ [I"not-naughty;T@@ [I"not_only_but_also;T@@ [I"notorious;T@+@ [I" notprawn;T@@ [I"notprawn-layout;T@@ [I" notroff;T@@ [I" notty;T@@ [I"noty-rails;T@+@ [I" noumenon;T@@ [I"noun_phrase_detector;T@@ [I" nourl;T@'@ [I" nova-dsl;T@6@ [I" novawhiz;T@n@ [I"novelys_authlogic;T@r6@ [I"novelys_mongo_mapper;T@ @ [I"novelys-paperclip;T@r@ [I"nove-system-settings;T@@ [I"nov-oauth2;T@@ [I"novoda-buildr;T@@ [I" novowels;T@`@ [I"nov-rack-openid;T@u@ [I"nov-ruby-openid;T@'@ [I"now;T@@ [I"now_and_later;T@@ [I"no-www-rails;T@'@ [I"noxa-oauth-activeresource;T@'@ [I" noyes;T@N@ [I"nozbe-ruby;T@@ [I" nozomi;T@"@ [I"np422-validatable;T@@ [I"npa_lookup;T@@ [I""npd-activerecord-jdbc-adapter;T@' @ [I"'npd-activerecord-jdbcmysql-adapter;T@' @ [I"npm_assets;T@@ [I"npo_assets;T@@ [I"npr;T@@@ [I"nql;T@@ [I"nr;T@@ [I" nrename;T@[@ [I"nrpe_check;T@E@ [I" nrperb;T@@ [I"nrt;T@@ [I"ns;T@E@ [I"ns24-dashing-collector;T@E@ [I"nsca-client;T@@ [I" nserver;T@T @ [I"nservicebus;TU;[I"2.0.0.1281.20100811;T@ [I"nsi-abntformat;T@@ [I"nsicloudooo;T@@ [I"nsi-lapesi;T@`@ [I" nsisam;T@@ [I"nsivideoconvert;T@'@ [I"nsivideogranulate;T@@ [I"nsm-activeadmin;T@I@ [I" nsnotify;T@"@ [I"NSObject.rb;T@@@ [I"ns-options;T@@ [I"ns-ramaze-ext;T@V@ [I"ns_service_pack;T@@ [I" nsudoku;T@@ [I"nsweb_deployment;T@1@ [I" nswebgen;T@X@ [I"nsweb-generators;T@@ [I" nsync;T@@ [I" nt54;T@'@ [I" ntable;T@1@ [I" ntail;T@@ [I" ntee;T@@ [I"nthrecord;T@@@ [I"ntimeline;T@@ [I"ntlm-http;T@`@ [I" ntlm-sso;T@'@ [I"ntp;T@@ [I" ntxt;T@@ [I"nu;T@@ [I"nuatt-formtastic;T@@ [I"nuatt_sunspot;TU;[I" 1.1.0.3;T@ [I"nuatt_sunspot_rails;T@z@ [I" nudge;T@ @ [I"nugen_barcode_splitter;T@@ [I"nu-generators;T@@ [I" nuget;TU;[I"1.3.20425.372;T@ [I"nugramserver-ruby;T@@ [I" nugrant;T@@ [I" nukaka;T@@ [I" nukumber;T@@ [I" null;T@`@ [I" nullify;T@@ [I"nullify_blanks;T@@ [I"null_logger;T@'@ [I"nullobject;T@@ [I"null_object;T@@ [I"nullobject_chain;T@'@ [I"nulogy-authlogic;TU;[I" 3.1.0.1;T@ [I"nulogy-delocalize;T@r@ [I"nulogy-fitter-happier;T@E@ [I"nulogy-gettext_i18n_rails;TU;[I" 0.5.3.2;T@ [I"nulogy-hydra;TU;[I" 0.26.0;T@ [I"nulogy-poirot;TU;[I" 0.2.4.1;T@ [I"nulogy-s3_direct_upload;T@`@ [I"nulogy-sequel-rails;T@@ [I"nulogy-spreadsheet;TU;[I"0.6.5.7.3;T@ [I" numb;TU;[I" 0.186.0;T@ [I" number;T@@ [I"number_names;T@'@ [I"number_postfixr;T@N@ [I"number_prefix;T@@@ [I"number_recognizer;T@@ [I"numbers_and_words;T@@ [I"numbers_in_words;T@`@ [I"number_to_cn;T@"@ [I"number_to_fraction;T@9@ [I"number_to_indian_currency;T@@ [I"number_to_words;T@u@ [I"number_to_words_ru;T@@ [I"numberwang;T@@ [I" numbr5;T@@ [I"num_coder;T@@ [I" numeral;T@@ [I" numerale;T@n@ [I"numeric_array;T@@ [I"numeric_distance;T@'@ [I"numeric_hash;T@@ [I"numeric_humanize;T@@ [I" numerics;T@@ [I"numeric-time;T@@ [I"numeric_type_column;T@@ [I"numerizer;T@`@ [I" numero;T@E@ [I" numeron;T@@ [I"numerouno;T@@ [I" numfix;T@"@ [I" numon;T@'@ [I"numru-misc;T@`@ [I"numru-units;T@@ [I" num_seq;T@'@ [I"num_to_bytes;T@@ [I" nunit;TU;[I"2.5.7.10213.20100801;T@ [I" nunitr;T@@ [I"nuntium_api;TU;[I" 0.21;T@ [I" nuntius;T@@@ [I" nuodb;T@@ [I"nurettin-jruby-poi;T@@ [I"nurettin-phantomjs;TU;[I" 1.7.0.0;T@ [I"nusurge_gridfs;T@@ [I" nutella;T@"@ [I"#nu_test_has_different_versions;T@@ [I"nutheory_rack;T@'@ [I"nutheory-rack-gridfs;T@@ [I" nutils;T@N@ [I" nutime;T@"@ [I"nutrasuite;T@r@ [I"nutrition_label_plugin;T@@ [I"nutritious;T@'@ [I"nutrun-string;T@6@ [I" nuts;T@'@ [I" nutshell;T@@ [I"nutshell-crm;T@@ [I" nu_wav;T@@ [I"nv-client;TU;[I" 1.66.2;T@ [I"nv-d3js-rails;T@'@ [I"nventory-client;TU;[I" 1.65.4;T@ [I"nvtristrip-ruby;T@@ [I" nvx-sds;T@@ [I" nwcopy;T@@ [I"nweintraut-forem;T@'@ [I" nwiki;T@n@ [I" nwn-lib;T@@ [I" nwodkram;T@[ @ [I" nwrfc;T@@ [I"nxa-sunspot;T@@ [I"nxa-sunspot_rails;T@_@ [I" nyaa;T@@ [I" nyan;T@"@ [I" nyancat;T@@ [I"nyan-cat-chef-formatter;T@@ [I"nyan-cat-formatter;T@@ [I"nyc-ruby-meetup_cijoe;T@@ [I" nyoibo;TU;[I" 0.0.3.3;T@ [I" nyros;T@@ [I" nytimes;T@E@ [I"nytimes-articles;T@@ [I"nytimes-congress;T@@ [I"nytimes-events;T@'@ [I"nytimes-movies;T@`@ [I"nytimes-style;T@@ [I" nytmod;T@@ [I" nzbget;T@@ [I" nzbgetpp;T@6@ [I"nzbmatrix;T@"@ [I"o;T@z@ [I"o2h;T@@ [I" oa2c;T@@@ [I" oa-basic;T@@ [I" oa-blip;T@'@ [I" oa-cadun;T@n>@ [I"oa-casport;T@+@ [I"oa-codeschool;T@@ [I" oa-core;T@@ [I"oa-enterprise;T@@ [I" oa-env;T@'@ [I"oa-globocom;T@@ [I"oa-google-openid;T@@ [I" oahu;T@'@ [I" oahu-bin;T@y@ [I"oahu-dragonfly;T@@ [I"oai;T@@ [I" oaipmh;T@E@ [I"oai_repository;T@- @ [I"oai_talia;T@ @ [I"oak;T@@ [I" oa-ldap;T@E@ [I"oald_parser;T@[@ [I"oa-mailru;T@@ [I"oa-mailru_alexandrov;T@@ [I" oa-more;T@@ [I" oa-oauth;T@@ [I"oa-openid;T@@ [I"oa-pubcookie;T@@ [I" oare;T@@ [I"oa-recruitmilitary;T@@ [I"oar-scripting;T@@ [I"oas;T@N@ [I" oasis;T@Y@ [I" Oasis;T@`@ [I"oas-log-collector;T@1@ [I" oass;T@|@ [I" oatdoc;T@'@ [I" oa_test;T@@ [I" oatmeal;T@@Y][I" oats;T@+@ [I"oats_agent;T@@ [I" oauned;T@O@ [I" oauth;T@@ [I" oauth2;T@@ [I" oauth20;T@@@ [I"oauth2-auth-server;T@E@ [I"oauth2_china;T@"@ [I"oauth2-core;T@+@ [I"oauth2_facebook_grantable;T@@ [I"oauth2_mac_client;T@"@ [I"oauth2_provider;T@@ [I"oauth2-provider;T@L=@ [I"oauth2_provider_engine;T@E@ [I"oauth2-provider-jonrowe;T@@ [I"oauth2-rack;T@@ [I"oauth2-rack-server;T@'@ [I"oauth2-server;T@+@ [I"oauth-activeresource;T@'@ [I"oauth-active-resource;T@@ [I"oauth_china;T@@ [I"oauth-cli;T@V@ [I"oauth-client;T@@ [I"oauth-cli-twitter;T@"@ [I"oauth-contacts;T@E@ [I"oauth_multi_db;T@'@ [I"oauth-multipart;T@@ [I"oauthorizer;T@@ [I"oauth-plugin;T@@ [I"oauth_provider;T@@ [I"oauth_provider_engine;T@@ [I"oauth-rsolr;T@~@ [I"oauth-simple;T@'@ [I"oa-vkontakte;T@I@ [I"oa-vkontakte_alexandrov;T@@ [I"oa-webiso;T@'@ [I"oa-webmoney;T@@@ [I"oa-yubikey;T@E@ [I"oba_client;T@+@ [I"oba-client;T@@ [I" oban;T@1@ [I"obazoud-git-external;T@@ [I"obbistrano;TU;[I" 1.1.146;T@ [I"obd;T@'@ [I"obfuscated;T@@ [I"obfuscate_id;T@'@ [I"obfuscator;T@E@ [I"obis-net-ldap;T@x@ [I"obitum-rails_admin;T@@ [I"obitum-remixr;T@6@ [I"obitum-searchlogic;TU;[I" 2.4.28;T@ [I" obi-wan;T@'@ [I" objds;T@@ [I"object2module;T@@y;[@G@@ [@G@@1[I"object-bark;T@@ [I"objectbouncer;T@+@ [I"object_cache;T@n@ [I"object-channel;T@+@ [I"object_daddy;T@@ [I"object-daddy;T@@ [I"objectdetect;T@@ [I"object_dojo;T@E@ [I"object-factory;T@,@ [I"object-filters;T@@ [I"object-history;T@E@ [I"objectify;T@@ [I"objectify-xml;T@@ [I"object-in-array;T@s@ [I"object-in-enumerable;T@@ [I"object-inspector;T@@ [I"objective_command;T@n@ [I"objectiveflickr;T@@ [I"objective_release;T@@ [I"objective_spec;T@@ [I"object-let;T@@ [I"object_loader;T@@ [I"object_logging;T@I@ [I"object-mapper;T@@ [I"object_mock;T@6@ [I"ObjectModel;T@@ [I"object_momma;T@' @ [I"objectpool;T@@ [I"object_pool;T@E@ [I"object_proxy;T@T @ [I"object-proxy;T@@ [I"ObjectProxy;T@@ [I"object_pub_sub;T@@ [I"object_regex;T@@ [I"(objectreload-foreign_key_extensions;T@6@ [I"objectreload-pagination;T@@ [I"objectreload-permalinks;T@,@ [I"objectreload-permissions;T@1@ [I"objectreload-roles;T@+@ [I"%objectreload-simple_enumerations;T@1@ [I"objectreload-vote_fu;T@6@ [I"object_scoped_i18n;T@@ [I"object-scraper;T@"@ [I"object-send;T@@ [I"objects_extensions;T@x@ [I"object-stash;T@@ [I"objectstore;T@@ [I"object_struct;T@@ [I"object_sugar;T@@ [I"object-threads;T@@ [I"oblique_notify;T@'@ [I"obo;T@@ [I" oboe;T@s@ [I" oboe_fu;T@@ [I"obo_parser;T@@ [I"obscenity;T@@ [I"obscurify_attribute;T@@ [I"observables;T@6@ [I"observation;T@`@ [I"observational;T@[@ [I"observatory;T@@ [I" observe;T@@ [I" obsidian;T@@ [I"obs-recipes;T@@ [I" obtuse;T@E@ [I" obuf;T@@ [I" obviews;T@@ [I" obvious;T@E@ [I"oca;T@S@ [I" ocarina;T@'@ [I" occi;TU;[I" 2.5.13;T@ [I"occurrence-counter;T@'@ [I" ocean;T@'@ [I" ocelot;T@V@ [I" ocelots;T@"@ [I"ochko-flow_pagination;T@@ [I" ocho;T@'@ [I"oci8_simple;T@&@ [I"oclc_classify;T@'@ [I"ocm;T@n@ [I"ocr;T@@ [I" ocra;T@@ [I" ocrsdk;T@@ [I" ocrunner;T@x@ [I"oct;T@@ [I" octarine;T@@ [I"octave-ruby;T@@ [I" octo;T@"@ [I" october;T@`@ [I" octocat;T@@ [I"octocat_herder;T@6@ [I"octoclone;T@`@ [I"octocorn_spree_theme;T@'@ [I" octokit;T@@ [I" octoman;T@@ [I" octomine;T@'@ [I" octopart;T@@ [I"octopart-ruby;T@@@ [I" octopi;T@@ [I" octoplex;T@@ [I"octopress-popular-posts;T@@ [I" octopus;T@@ [I"octopusci;T@J%@ [I"octopussy;T@@ [I" octosh;T@@ [I" octotest;T@'@ [I" octouser;T@@ [I"octranspo;T@E@ [I" oculus;T@@ [I"ocunit2junit;T@@ [I"odata_server;T@'@ [I"odb;T@@ [I" odba;T@@ [I"odbc-rails;T@@ [I" o_dbm;T@@ [I"oddb2tdat;T@x@ [I" oddb2xml;T@;@ [I" oddb.org;T@@ [I"odf-converter;T@"@ [I"odf-report;T@"@ [I"odf-spreadsheet;T@@ [I" odin;T@"@ [I"odin_condition_dsl;T@@ [I" odisk;T@- @ [I" odor;T@'@ [I"odr;T@"@ [I" odt2html;T@`@ [I"odt2html-nsi;T@@ [I" oedipus;T@ @ [I"oedipus-dm;T@n@ [I" oeis;T@"@ [I"oel-brenner-mousetrap;T@@ [I" oembed;T@@ [I"oembed_client;T@@@ [I"oembed_links;T@g@ [I"oembed_provider;T@`@ [I"oembed_provider_engine;T@@ [I" oembedr;T@@ [I"ofa;T@@ [I" ofac;T@ @ [I" ofc2;T@@ [I"offensivecomputing;T@`@ [I"off_github;T@x@ [I"office_autopilot;T@"@ [I"office_csv;T@@ [I"office-login;T@@ [I" officer;T@[@ [I"officex2str;T@@ [I"officialfm;T@@ [I" offline;T@"@ [I" offroad;T@@ [I" offshore;T@@ [I" ofihola;T@E@ [I" ofmcore;T@@ [I"ofm_gettext;T@@ [I"ofocus_sync;T@@ [I"ofx;T@@ [I"ofxbundler;T@^@ [I"ofx_for_ruby;T@@@ [I"ofxparser;T@@ [I"ofx_parser;T@ @ [I"ofx-parser;T@@ [I"ofx-parser-bp;T@@ [I" ofxrb;T@'@ [I"og;T@̓@ [I"ogginfo-rb;T@"@ [I" ogle;T@^@ [I" ogler;T@@ [I" ogma;T@'@ [I"ogone-rails;T@6@ [I" ograph;T@@ [I" ogre.rb;T@!@S[@@!@1[@@!@}1[I"oh;T@@ [I"ohac-ditz;T@@ [I"oha_extensions;T@E@ [I" ohai;TU;[I" 6.14.0;T@ [I" ohash;T@@ [I"oh_behave;T@'@ [I" ohembedr;T@|@ [I"ohio_state_person;T@@ [I"$ohlala_rails_scaffold_templates;T@"@ [I"ohm;T@N@ [I"ohm-arfreaks;T@@ [I"ohm-contrib;T@@ [I"ohm-expire;T@@ [I"ohm-find_by;T@E@ [I" ohm-zset;T@@ [I"oil;T@@ [I" oily_png;T@@ [I" oink;T@ @ [I"oink-transcode;T@@@ [I" oinky;T@@ [I"oj;T@O@ [I"oja;T@@ [I" ojagent;T@'@ [I"oj_mimic_json;T@@ [I"okcomputer;T@@ [I"ok-extensions;T@D@ [I"oki-celerity;T@@ [I"okkez-multi_auth;T@@ [I"!okkez-open_id_authentication;T@@ [I"oklahoma_mixer;T@x@ [I"oklasoft-verhoeff;T@@ [I" okura;T@'@ [I" okuyama;T@,@ [I" okvenue;T@E@ [I"olabini-log4j;TU;[I" 1.2.17;T@ [I" olag;T@M@ [I" olap4r;T@`@ [I"olap4r-mondrian;T@@ [I"olap4r-xmla;T@@ [I"old_api_resource;T@@ [I" oldbill;T@@ [I" oldness;T@@ [I" oldrelic;T@@ [I" oldskool;T@n@ [I"oldskool-gcse;T@@ [I"oldskool-ipinfodb;T@'@ [I"oldskool-password;T@E@ [I"oldskool-puppet;T@@ [I" old_sql;TU;[I" 1.65.0;T@ [I" oldtime;T@6@ [I"ole-helpers;T@'@ [I" olek-capistrano-multiconfig;T@m@ [I"olek-libcraigscrape;TU;[I" 1.1.0.6;T@ [I"olek-paperclip;TU;[I" 2.3.3.2;T@ [I"olek-paperclipftp;TU;[I" 0.1.0.8;T@ [I" olelo;T@@ [I"olgen-god;T@' @ [I"ols;T@@ [I" olsen;T@@ [I" olympe;T@R @ [I"om;T@e@ [I"oma;T@E@ [I" omakase;T@'@ [I" omdb_api;T@n@ [I"omega-tariffs-base;T@@ [I"omega-tariffs-custom;T@6@ [I"omeka-rake;T@@ [I"omeka-recipes;T@@ [I" omelete;T@+@ [I"omelettes;T@@ [I" omf_am;T@'@ [I" omf_oml;T@@ [I"omf_rc_openflow;TU;[I" 6.0.0;T@ [I" omf_rete;T@@ [I" omf_web;T@ @ [I"omg;T@@ [I" omgcsv;T@E@ [I" omgdav;T@'@ [I" omgf;T@@ [I"omg_kitties;T@@ [I" omglog;T@n@ [I"omg_pull_request;T@@ [I" omg-text;T@E@ [I"omg_validator;T@@ [I"omikronn-ai4r;T@@ [I"omikronn-chargify_api_ares;T@@ [I"omikronn-resque-mongo;TU;[I" 1.17.5;T@ [I"!omikronn-resque-mongo-groups;T@^%@ [I"$omikronn-resque-mongo-scheduler;T@,@ [I"omikronn-ripple;T@[ @ [I" ominous;T@"@ [I" oml4r;TU;[I" 2.9.0.1;T@ [I" omni;T@'@ [I" omniauth;T@@ [I"omniauth-37signals;T@@ [I"omniauth-500px;T@@ [I"omniauth-aai;T@@ [I"omniauth-academiaedu;T@@ [I"omniauth-account;T@'@ [I"omniauth-active_passport;T@@ [I"omniauth-afterclassroom;T@'@ [I"omniauth-allplayers;T@E@ [I"omniauth-angellist;T@E@ [I"omniauth-appdotnet;T@E@ [I"omniauth-appnet;T@@ [I"omniauth-authic;T@"@ [I"omniauth-bitbucket;T@'@ [I"omniauth-bitly;T@@ [I"omniauth-bluevia;T@E@ [I"omniauth-box;T@'@ [I"omniauth-broadworks;T@@ [I"omniauth-browserid;T@'@ [I"omniauth-buffer;T@@ [I"omniauth-buffer2;T@'@ [I"omniauth-cafepress;T@`@ [I"omniauth-canvas;T@@ [I"omniauth-cas;T@@ [I"omniauth-casenex;T@6@ [I"omniauth-centro;T@E@ [I"omniauth-cheddar;T@@ [I"omniauth_china;T@`@ [I"omniauth-clio;T@M+@ [I"omniauth-cmply;T@@ [I"omniauth_cobot;T@E@ [I"omniauth-concur;T@'@ [I"omniauth-constantcontact;T@@ [I"omniauth-constantcontact2;T@@ [I"omniauth-creatary;T@E@ [I"omniauth_crowd;T@ @ [I"omniauth-dailycred;T@E@ [I"omniauth-dailymotion;T@@ [I"omniauth-daum;T@E@ [I"omniauth-dbdc;T@@ [I"omniauth-deezer;T@@ [I"omniauth-desk;T@+@ [I"omniauth-deviantart;T@'@ [I"omniauth-do;T@@ [I"omniauth-douban;T@@ [I"omniauth-douban-oauth2;T@@ [I"omniauth-dropbox;T@@ [I"omniauth-dwolla;T@ @ [I"omniauth-ebay;T@@ [I"omniauth_elibri;T@@ [I"omniauth-etsy;T@@ [I"omniauth-eventbrite;T@"@ [I"omniauth-evernote;T@N@ [I"omniauth-everyplay;T@@ [I"omniauth-exvo;T@@ [I"omniauth-facebook;T@@ [I"#omniauth-facebook-access-token;T@`@ [I"omniauth-facebook-rails;T@@ [I"#omniauth-familysearch-identity;T@@ [I"omniauth-fatsecret;T@'@ [I"omniauth-fitbit;T@@ [I"omniauth-flattr;T@@ [I"omniauth-flickr;T@@ [I"omniauth-foco;T@@ [I"omniauth-focovirtual;T@E@ [I"omniauth-force;T@E@ [I"omniauth-foursquare;T@V@ [I"omniauth-freeagent;T@'@ [I"omniauth-geeklist;T@@ [I"omniauth-geni;T@@ [I"omniauth-geoloqi;T@6@ [I"omniauth-getglue;T@@ [I"omniauth-github;T@@ [I"omniauth-goodreads;T@6@ [I"omniauth-google;T@@ [I"omniauth-google-api;T@@ [I"omniauth-google-apps;T@E@ [I"omniauth-googlefederated;T@@@ [I"omniauth-google_oauth2;T@|@ [I"omniauth-google-oauth2;T@@ [I"!omniauth-google-oauth2-moses;T@ @ [I"omniauth-granicus;T@T @ [I"omniauth-groupme;T@@ [I"omniauth-gust;T@@ [I"omniauth-hackid;T@E@ [I"omniauth-harvest;T@@ [I"omniauth-hatena;T@"@ [I"omniauth-healpay;T@E@ [I"omniauth-heroku;T@"@ [I"omniauth-heroku-sso;T@@ [I"omniauth-http-basic;T@@ [I"omniauth-hyves;T@@ [I"omniauth-idcard;T@@ [I"omniauth-identity;T@@ [I"omniauth-idnet;T@@ [I"omniauth-instagram;T@@ [I"omniauth-instapaper;T@@ [I"omniauth-internal;T@@ [I"omniauth-intuit;T@'@ [I"omniauth-jira;T@@ [I"omniauth-jolly;T@@ [I"omniauth-kaeuferportal;T@- @ [I"omniauth-kerberos;T@@ [I"omniauth-khan-academy;T@@ [I"omniauth-klarna;T@@ [I"omniauth-klout;T@@ [I"omniauth-kongregate;T@E@ [I"omniauth-krb5;T@'@ [I"omniauth-lastfm;T@@ [I"omniauth-latvija;T@@ [I"omniauth-ldap;T@@ [I"omniauth-linkedin;T@V@ [I"omniauth-linuxfr;T@@ [I"omniauth-loctouch;T@'@ [I"omniauth-mailchimp;T@@ [I"omniauth-mailru;T@@ [I"omniauth-mapmyfitness;T@@@ [I"omniauth-mapmyhike;T@`@ [I"omniauth-mapmyride;T@`@ [I"omniauth-mapmyrun;T@`@ [I"omniauth-mapmytri;T@`@ [I"omniauth-mapmywalk;T@`@ [I"omniauth-medpass;T@@ [I"omniauth-meetup;T@@ [I"omniauth-mendeley;T@!@ [I"omniauth-mhealth;T@E@ [I"omniauth-miicard;T@'@ [I"omniauth-mindvalley;T@"@ [I"omniauth-miso;T@E@ [I"omniauth-mixi;T@@ [I"omniauth-mobileid;T@@@ [I"omniauth-multipassword;T@@ [I"omniauth-mybigcampus;T@'@ [I"omniauth-mydigipass;T@@ [I"omniauth-myspace;T@E@ [I"omniauth-namba;T@'@ [I"omniauth-nate;T@@ [I"omniauth-netflix;T@@ [I"omniauth-nimble;T@'@ [I"omniauth-nk;T@s@ [I"omniauth-oauth;T@@ [I"omniauth-oauth2;T@@ [I"omniauth-odnoklassniki;T@'@ [I"omniauth-ohloh;T@'@ [I"omniauth-omnisso;T@@ [I"omniauth-openid;T@@ [I"omniauth-opinionage;T@@ [I"omniauth-orcid;T@@ [I"omniauth-origo;T@@ [I"omniauth-osm;T@@ [I"omniauth-pachube;T@'@ [I"omniauth-pam;T@@ [I"omniauth-parse;T@'@ [I"omni_auth_passaporte_web;T@O@ [I"omniauth-passport;T@@ [I"omniauth-password;T@'@ [I"omniauth-persona;T@'@ [I"omniauth-pfas;T@@ [I"omniauth-photobucket;T@@ [I"omniauth-picplz;T@'@ [I"omniauth-pinterest;T@@ [I"omniauth-pocket;T@@ [I"omniauth-podio;T@'@ [I"omniauth-prx;T@E@ [I"omniauth-qq;T@@ [I"omniauth-qq-connect;T@@ [I"omniauth-qrtracc;T@@ [I"omniauth-quantime;T@E@ [I"omniauth-quizlet;T@'@ [I"omniauth-ravelry;T@E@ [I"omniauth-rdio;T@@ [I"omniauth-readability;T@'@ [I"omniauth-readmill;T@@ [I"omniauth-rewardstyle;T@@ [I"omniauth-roomorama;T@@ [I"omniauth-rtm;T@'@ [I"omniauth-runkeeper;T@@ [I"omniauth-salesforce;T@@ [I"omniauth-saml;T@@ [I"omniauth-saml-rstr;T@@ [I"omniauth-scaffold;T@@ [I"omniauth-seesaw;T@@ [I"omniauth-sense;T@`@ [I"omniauth-shibboleth;T@@ [I"omniauth-shopify;T@@ [I"omniauth-shopify-oauth2;T@@ [I"omniauth-shopqi;T@@ [I"omniauth-sina;T@'@ [I"omniauth-singly;T@@ [I"omniauth-slc;T@E@ [I"omniauth-smarterer;T@@ [I"omniauth-smugmug;T@@ [I"omniauth-soundcloud;T@@ [I"omniauth-stackexchange;T@@ [I"omniauth-stackoverflow;T@@ [I"omniauth-stackoverflow-new;T@@ [I"omniauth-steam;T@@ [I"omniauth-steam-nitrogs;T@@ [I"omniauth-storenvy;T@@ [I"omniauth-stormz;T@'@ [I"omniauth-stripe-connect;T@ @ [I"omniauth-stripe-platform;T@@ [I"omniauth-svpply;T@@ [I"omniauth-tapjoy;T@@ [I"omniauth-taskrabbit;T@'@ [I"omniauth-td;T@n@ [I"omniauth-tendril;T@@ [I"omniauth-tent;T@1@ [I"omniauth-tqq-oauth2;T@"@ [I"omniauth-tradeking;T@@ [I"omniauth-trello;T@E@ [I"omniauth-tripit;T@'@ [I"omniauth-troopid;T@@ [I"omniauth-tropo;T@@ [I"omniauth-tumblr;T@s@ [I"omniauth-tumblr2;T@@ [I"omniauth-twitter;T@@ [I"omniauth-unipass;T@@ [I"omniauth-viadeo;T@@ [I"omniauth-vimeo;T@@ [I"omniauth-vkontakte;T@N@ [I"omniauth-vocabulario;T@'@ [I"omniauth-vpsa;T@E@ [I"omniauth-webeat;T@6@ [I"omniauth-weibo;T@@ [I"omniauth-weibo-oauth2;T@@ [I"omniauth-wepay;T@@ [I"omniauth-windowslive;T@@ [I"omniauth-wordpress;T@`@ [I"omniauth-workmate;T@@ [I"omniauth-workxp;T@@ [I"omniauth-wsfed;T@@ [I"omniauth-xauth;T@E@ [I"omniauth-xiaonei;T@@ [I"omniauth-xing;T@6@ [I"omniauth-yahoo;T@"@ [I"omniauth-yammer;T@@ [I"omniauth-yandex;T@E@ [I"omniauth-yelp;T@'@ [I"omniauth-youroom;T@"@ [I"omniauth-youtube;T@f!@ [I"omniauth-yubikey;T@@ [I"omniauth-zaim;T@@ [I"omniauth-zotero;T@'@ [I"omniboard_jqtouch;T@@ [I" omnibot;T@@ [I" omnibus;T@E@ [I" omniconf;T@@ [I"omnicontacts;T@I@ [I" omnidata;T@'@ [I"omnifocus;T@ @ [I"omnifocus-bugzilla;T@x@ [I"omnifocus-github;T@@ [I"omnifocus-pivotaltracker;T@@ [I"omnifocus-redmine;T@u"@ [I"omnifocus-rt;T@@ [I"omnifocus-rubyforge;T@@ [I"omnigollum-bibanon;T@`@ [I" omnigrid;T@E@ [I"omni_kassa;T@N@ [I"omnipopulus;T@@ [I" omnis;T@h@ [I"omniscient;T@E@ [I" omniship;T@@ [I"omnisocial;T@@ [I"omnistore;T@@ [I"omniture_client;T@6@ [I"omniture_rails3;T@"@ [I"omniture_test;T@E@ [I"omniturize;T@@ [I" omnivore;T@@ [I"omnivorous_etag;T@@ [I" omnomnom;T@'@ [I" ompload;T@@ [I"omroep_auth;T@@ [I"omundu_string_extend;T@'@ [I"on;T@@ [I"ona;T@@ [I" once;T@X@ [I" once_in;T@'@ [I"on_destroy;T@`@ [I"one40_proof;T@"@ [I" one9;T@|@ [I" oneable;T@@@ [I"onebody-updateagent;T@7@ [I"onebusaway;T@@ [I"onebusaway_updated;T@@ [I"one_click;T@@@ [I"one_conf_compare;T@E@ [I"one-email_direct;T@X@ [I"one-extension;T@"@ [I"!one_hundred_percent_coverage;T@E@ [I"one_inch_punch;T@@ [I" oneis;T@@[I" oneliner;T@@ [I"onemorecloud-websolr-rails;T@*@ [I" one_offs;T@`@ [I"one_of_many_validator;T@@ [I"one_page_checkout;T@@ [I"one-pivot;T@ @ [I"onescreen-api-client;T@@ [I" onesie;T@@ [I" one_sky;T@@ [I" onetime;T@x@ [I"one_time_assignment;T@@ [I"one_touch;T@@ [I"onetweetforeuruko;T@'@ [I" on_event;T@'@ [I" one_wire;T@`@ [I" onfire;T@@ [I"ongaku_ryoho_server;T@@ [I" onigiri;T@1@ [I"oniguruma;T@@ [@@@[I" onion;T@6@ [I" Onion;T@E@ [I" on_irc;T@@ [I" onis;T@@ [I" onix;T@@ [I"online_friends;T@@ [I"online_now;T@'@ [I"onload_js-rails;T@N@ [I" onlooker;T@`@ [I" Onlooker;T@`@ [I" only;T@@ [I"only_expose;T@@ [I"only_once;T@@@ [I"onpayruclient;T@E@ [I" onstomp;T@ @ [I"on-test-spec;T@@ [I"on_the_fly;T@n@ [I"onthesnow;T@E@ [I"on_the_spot;T@@ [I"onthisday;T@@@ [I" ontology;T@'@ [I" ontomde;T@O@ [I"ontomde-core;T@@ [I"ontomde-demo;T@ @ [I"ontomde-demo-acegi;T@ @ [I"ontomde-demo-bpm;T@ @ [I"ontomde-demo-flex;T@ @ [I"ontomde-demo-java5;T@ @ [I"ontomde-demos;T@O@ [I"ontomde-demo-struts;T@ @ [I"ontomde-inspector;T@ @ [I"ontomde-java;T@@ [I"ontomde-java-frontend;T@ @ [I"ontomde-plugin-rsm6;TU;[I" 1.0.106;T@ [I"ontomde-redland-win;T@@ [I"ontomde-uml2;T@@ [I"ontomde-uml2-apaCom;T@ @ [I"ontomde-uml2-crank;T@ @ [I"ontomde-uml2-ejb2;T@ @ [I"ontomde-uml2-flex;T@ @ [I"ontomde-uml2-java;T@ @ [I"ontomde-uml2-jpa;T@ @ [I"ontomde-uml2-jpdl;T@ @ [I"ontomde-uml2-kb;T@ @ [I"ontomde-uml2-kbjava;T@ @ [I"ontomde-uml2-struts;T@ @ [I"ontrac-web-services;T@' @ [I"ontwerper-page;T@@ [I"onyx_client;T@@ [I"onyx_newrelic_rpm;TU;[I" 2.12.5;T@ [I"onyx-resque-retry;T@|@ [I"onyx-stomp;T@s@ [I"O_o;T@@ [I"O_O;T@@ [I"oo2md2tex;T@"@ [I"oocss3-shapes;T@E@ [I"oocss-compass;T@E@ [I" oode;T@[@ [I" oodle;T@T @ [I" oodler;T@I@ [I" oofile;T@"@ [I" oojs;T@`@ [I" oojspec;T@V@ [I" ookie;T@@ [I" ooor;T@@ [I" ooorest;T@@ [I"ooor_finders;T@1@ [I"ooor-finders;T@@ [I"oops-null;T@@ [I" oos4ruby;T@@ [I" ooyala;T@@@ [I"ooyala_fb;T@I@ [I"oozie-client;T@@ [I"op;T@'@ [I" opal;TU;[I" 0.3.31;T@ [I" Opal;TU;[I" 0.2.5.0;T@ [I"opal-forwardable;T@ @ [I"opal-jquery;T@E@ [I"opal-json;T@'@ [I"opal-native;T@&@ [I"opal-racc;T@@@ [I"opal-rails;T@@ [I"opal-singleton;T@'@ [I"opal-spec;T@@ [I"opal-strscan;T@`@ [I"opal-typed-array;T@ @ [I" Opcodes;T@@ [I" Opdis;T@@ [I" opds;T@@ [I"opds_monster;T@E@ [I" opee;T@@ [I" open311;T@@ [I"open311-validator;T@'@ [I"open3_backport;T@'@ [I" open4;T@@ [I" open5;T@!@ [I"OpenAgent;T@J@ [I"openall_time_applet;T@5d@ [I"openamplify;T@@ [I"open_as_text;T@`@ [I"openaustralia;T@@ [I"open_auth2;T@ @ [I"OpenAuth2;T@@ [I"openbabel;TU;[I" 2.3.1.8;T@ [I"open_badges;T@E@ [I"openbanana;T@@ [I" openbase;T@&@ [I" openbill;T@@ [I"openBuild;T@"@ [I"opencellid-client;T@`@ [I"open-charities;T@'@ [I" opencnam;T@'@ [I"opencoinage;T@'@ [I"open-companies-house;T@[@ [I"OpenCongressAPI;T@@ [I" opencv;T@n@ [I"opencv-ffi;T@'@ [I"opencv-ffi-fast;T@'@ [I" opendaum;T@'@ [I" opendsl;T@@ [I" open_dsl;T@@ [I" openehr;T@T @ [I" open_ehr;T@@ [I"open_events;T@'@ [I"open_exception;T@@ [I"open_exchange_rates;T@@ [I"openfire_api;T@@ [I"openfooty;T@@ [I" opengdsn;T@@ [I" open_gem;T@@ [I" open-gem;T@E@ [I"open_geo_db;T@"@ [I"opengl-cube;T@E@ [I"opengotham_redis-namespace;T@"@ [I"opengotham_resque;T@@ [I"opengotham-rtranslate;T@ @ [I" opengov;T@'@ [I"opengraph;T@"@ [I"open_graph;T@n@ [I"open_graph_helper;T@`@ [I"opengraph_parser;T@6@ [I""openhood-simple_state_machine;T@@ [I" openid;T@'@ [I"openid_active_record_store;T@@ [I"openid_auth;T@@ [I"open_id_authentication;T@@ [I"openid_connect;T@@ [I"openid_couchdb_store;T@"@ [I""openid_couch_rest_model_store;T@@ [I"openid_dalli_store;T@@ [I"openid_dm_store;T@@ [I"openid_fu_generator;T@'@ [I"openid_login_generator;T@@ [I"openid_mongodb_store;T@@ [I"openid-redis-store;T@E@ [I"openid_registrable;T@E@ [I"openid_store_mongoid;T@E@ [I"openid-store-sequel;T@E@ [I"openils-mapper;T@<@ [I" openkvk;T@n@ [I"openlibrary;T@@ [I"open_lighting;T@6@ [I"openlogcleaner;T@|@ [I"openlogic-couchrest_model;T@@ [I"openlogic-feed-normalizer;T@@ [I"openlogic-rdf;T@@ [I"openlogic-resourceful;T@N@ [I"openlogic-saml-sp;T@:V@ [I"openlogic-turn;T@@ [I"openlogic-zip;T@+@ [I"open_market;T@s@ [I" openmenu;T@@ [I"open-meta-tags;T@x@ [I"openminds_deploy;T@ @ [I"openMSX-builder;T@@ [I"open_namespace;T@@ [I"opennebula-cli;T@r)@ [I"opennebula-oca;T@r)@ [I"openneo-auth-signatory;T@@ [I" open_nlp;T@@[I" open-nlp;T@+@ [I"openobject;T@@ [I" openpgp;T@@ [I"openpgp_signed_hola;T@@ [I"openphoto-ruby;T@'@ [I"openplacos;T@@ [I" openplay;T@E@ [I"open_porch;T@@ [I" open_qq;T@i@ [I" openrgss;T@|@ [@y@|@ [I" OpenS3;T@@ [I"opensearch;T@'@ [I"opensearchtoolkit;TU;[I"1.1.0.0.20100820;T@ [I"opensecrets;T@@ [I"opensesame;T@@@ [I"open-sesame;T@`@ [I"opensesame-github;T@@ [I"openshift;TU;[I" 0.60.3;T@ [I"openshifter;T@6@ [I"open-ship;T@1@ [I"open-skies;T@= @ [I"open-skies-ties;T@*@ [I"opensocial;T@"@ [I"opensprints-core;T@@ [I" opensrs;T@@ [I"openssl-extensions;T@N@ [I"openssl-nonblock;T@@ [I"openssl_pkcs8;T@@@ [I"openstack;T@ @ [I"openstack_activeresource;T@g@ [I"openstack-compute;T@@ [I"openstack-keystone-client;T@E@ [I"openstack-quantum-client;T@|@ [I"openstack-quantum-messager;T@@@ [I"openstack-swift;T@@ [I"opensteam;T@@ [I"openstreetmap;T@@ [I"openstreetmap-oauth-plugin;T@@ [I"openstudio;T@u/@ [I"open_taobao;T@@ [I"openteam-commons;T@@ [I"openteam-modest_model;T@@ [I"open-temporary;T@@ [I"open_terms;T@@ [I"opentick-ruby;T@`@ [I" opentok;TU;[I" 0.0.92;T@ [I" open_tok;T@'@ [I"OpentokAPI;T@'@ [I"opentoken;T@@ [I"opentoken-newrelic-rails23;T@@ [I"opentox-ruby;T@@ [I"opentox-ruby-api-wrapper;T@X@ [I"opentracker-ws;T@@ [I"open_trade;T@'@ [I"opentransact;T@@@ [I" opentsdb;T@@ [I" openup;T@'@ [I"open-uri-and-write;T@@ [I"open-uri-cached;T@@ [I"open_uri_db_cache;T@"@ [I"openuri_memcached;T@@@ [I"open_uri_redirections;T@'@ [I" openurl;T@@ [I"openvas-cli;T@@ [I"openvas-omp;T@"@ [I"openvibe-launcher;T@@@ [I"openVPNServer;T@E@ [I" openvz;T@@ [I"openvz_one;TU;[I" 1.5.2.3;T@ [I"openwferu;T@@ [I"openwferu-extras;T@@ [I"openwferu-kotoba;T@<@ [I"openwferu-scheduler;TU;[I"0.9.16.1404;T@ [I"openwferu-sqs;T@<@ [I"openwsman;T@@@ [I" openx;T@@ [I" operable;T@@ [I"operations_middleware;T@@ [I" operator;T@@ [I" Operator;T@u @ [I"operawatir;T@@[I" opinio;T@6@ [I"opinionated;T@"@ [I"opinionated-xml;T@@ [I" opinions;T@'@ [I" oplop;T@n@ [I"opm;T@@ [I" opml;T@@ [I"opml-reader;T@'@ [I" opod;T@'@ [I"opportune;T@@ [I" opro;T@@ [I"ops;T@"@ [I"opsb-bourne;T@@ [I"opsb-delayed_job;T@+@ [I"opsb-email_spec;T@@ [I" opsb-git;T@>@ [I"opsb-octopussy;T@@ [I"opsb-RubyInline;T@V8@ [I"opschannel;T@E@ [I" opsdb;T@'@ [I" opsfeed;T@@ [I"opskeleton;T@'@ [I"ops_routes;T@@ [I"opsview_rest;T@@ [I"optconfig;T@@ [I"optical_diff;T@@ [I" opticon;T@"@ [I"optics-ansi;T@@ [I" optiflag;T@D@ [I" optify;T@@ [I"optimal-control;T@E@ [I"optimeez_preferences;T@@ [I"optimis_client;T@@ [I" optimism;TU;[I" 3.3.1;T@ [I"optimis-workflow-scripts;T@x@ [I"optimizable;T@'@ [I"optimize_ab;T@@ [I" optimus;T@E@ [I"optimus-ep;T@[@ [I"optimus-prime;T@"@ [I" option;T@@ [I"optionalargument;T@@ [I"optiongrouper;T@@ [I"optionize;T@`@ [I"OptionParser;T@@ [I" options;T@9@ [I"options-arg;T@'@ [I"options_checker;T@'@ [I"optionsful;T@J@ [I"optionsful2;T@,@ [I"options-hash;T@@ [I"options-lib;T@@ [I"options_library;T@@ [I" optipng;T@@ [I" optitron;T@@ [I" optix;T@@ [I" optopus;T@@ [I" optout;T@E@ [I"optparse-command;T@@ [I"optparse-defaults;T@@ [I"optparse-lite;T@@ [I"optparse-off;T@'@ [I"optparse-pathname;T@'@ [I"optparse-range;T@@ [I"optparse-simple;T@x@ [I"optparshie;T@@ [I" optruct;T@'@ [I" opts;T@'@ [I" optser;T@@ [I"opt-simple;T@@ [I" opub;T@'@ [I"oqgraph_rails;T@`@ [I"oracle_ebs_authentication;T@@@ [I"oracle_enhanced;T@@ [I"oracle-enhanced-enhanced;T@@ [I"!oracle_enhanced_plus_xmltype;T@@ [I"oracle-model-generator;T@@ [I"oracle_query;T@`@ [I"oracle_raw;T@@ [I"oracle_to_mysql;T@@ [I" orange;T@M+@ [I"orange-core;T@@ [I"orange-flickr;T@6@ [I"orange-gollum;T@@ [I"orange-more;T@n@ [I"orange-ruby;T@@ [I"orange-sparkles;T@@ [I"orangeweb_bootstrap_helper;T@@ [I"orangewire_sender;T@@ [I"orangutan;T@n@ [I"orasaurus;T@@ [I" oration;T@"@ [I"orb;T@|@ [I" orbit;T@@ [I" Orbital;T@E@ [I"orbital_fields;T@@ [I" Orbjson;T@"@ [I"orca_card;T@@ [I" orc-cli;T@@@ [I" orchard;T@!@ [I"orchestra;T@E@ [I"orchestrated;T@n@ [I" orchid;T@'@ [I" order;T@`@ [I"orderable;T@@ [I"order_book;T@'@ [I"ordered-active-record;T@ @ [I"orderedhash;T@@ [I"ordered_json;T@@ [I"ordered_set;T@@ [I"ordered-tags;T@'@ [I"orderedtree;T@ @ [I"ordered_tree;T@@ [I" orderly;T@E@ [I" order_me;T@V@ [I" orders;T@@ [I"order_tree;T@"@ [I" ordinal;T@@ [I"ordinal_array;T@@ [I"ordinalizatron;T@'@ [I"ordinalize;T@@ [I"!ordnance_survey_vs_the_world;T@@ [I" ordrin;T@`@ [I"ordr.in-cli;T@!@ [I"ore;T@ @ [I" ore-core;T@|@ [I"ore-example;T@@ [I" oreflect;T@@ [I" orefs;T@|@ [I" oregano;T@'@ [I"oreille_test;T@I"mipsallegrexel-unknown;T[I"orend-feedzirra;T@ @ [I"orend-sax-machine;T@@ [I"ore-tasks;T@@ [I"org;TU;[I"2009.03.28;T@ [I"org2daily;T@'@ [I"organicinternet-paperclip;TU;[I" 2.3.8.1;T@ [I"organizai;T@`@ [I" organize;T@@ [I"organizze-contacts;T@E@ [I"organizze_importer;T@"@ [I"organizze-ofx;T@@ [I" organizze_permanent_records;T@6@ [I" org_mode;T@@ [I"orgmode-cli-tools;T@@ [I"orgno_validator;T@@ [I"org-parse;T@@@ [I" org-ruby;T@@ [I" orgy;T@@ [I"ori;T@@ [I" oria;T@`@ [I"orichalcum;T@@ [I" orientdb;T@H@[@S@N@[@S@N@ [I"orientdb4r;T@@ [I"orientdb-ar;T@@[I"orient_db_client;T@@ [I" origami;T@u"@ [I"origami-importer;T@'@ [I" origin;T@@ [I"origin-selectable_ext;T@`@ [I" orkut;TU;[I" 0.0.0.34;T@ [I"orkut_os_client;T@@ [I" orly;T@@ [I" orlydb;T@E@ [I"orm_adapter;T@x@ [I"orm_adapter_activeresource;T@'@ [I" orm_adapter_couchrest_model;T@'@ [I"orm_adapter-dynamoid;T@'@ [I"orm_adapter_rails4_fix;T@@ [I"orm_adapter-sequel;T@@ [I"orm_adapter-simple_record;T@'@ [I"orm_from_csv;T@`@ [I"orm-redis;T@@ [I"ornitorrinco;T@@ [I" orochi;T@n@ [I" orph;T@`@ [I" orphan;T@'@ [I"ors;T@@ [I" ortho;T@@ [I" orthor;T@@ [I"orthorings;T@@ [I" orthrus;T@@ [I"orthrus-ssh;T@@ [I"oruen_redmine_client;T@'@ [I"os;T@Q@ [I" osaka;T@@ [I"osbro-git-deploy;T@@ [I"osc;T@+@ [I"osc-access;T@@ [I"oscillator;T@@ [I" oscillo;T@'@ [I" osc-ruby;T@@ [I" osdb;T@@ [I" osdc;T@@ [I" osgb;T@@ [I"osgb_convert;T@"@ [I"osgb_wgs84;T@E@ [I" osgi;T@'@ [I" osheet;T@ @ [I" oslc;T@@ [I"osm;T@!@ [I"osm2mongo;T@'@ [I" osmer;T@@ [I"osm-import;T@'@ [I"osmlib-base;T@+@ [I"osmlib-export;T@+@ [I"osmlib-namefinder;T@+@ [I"osmlib-sqlite;T@+@ [I" osmn;T@`@ [I" os-name;T@"@ [I"oso;T@@ [I" ospec;T@=@ [I" ospfv2;T@E@ [I"ost;T@|@ [I" ostatus;T@3@ [I" ost-bin;T@@ [I"ostrichpoll;T@@ [I" ostruct2;T@@ [I"ostructer;T@@ [I" osub;T@n@ [I" osu-db;T@@ [I" osvt;T@e@ [I" osx_dict;T@@ [I" osx_env;T@@ [I"osxhotkey;T@@ [I"osx_keychain;T@@ [I"osx-plist;T@@ [I"osxscreenshot;T@@ [I" osxtrash;T@@ [I"osx-trash;T@@ [I"osxwarranty;T@@ [I"osx_watchfolder;T@@ [I" otaku;T@x@ [I"otherinbox-capybara-webkit;TU;[I" 0.12.0.1;T@ [I"otherinbox-classifier;TU;[I"1.3.1.2.20121218.2;T@ [I"otherinbox-crypt19;T@u@ [I"otherinbox-mail;TU;[I"2.4.4.20121031;T@ [I"otokonoramen500yen;T@@ [I"otp_kickoff;T@V@ [I" otpr;T@@ [I"otr;T@@@ [I"otrs_connector;T@@ [I"otrs_proxy;T@"@ [I"ots;T@Y@ [I" otter-rb;T@'@ [I" otto;T@@ [I" ottra;T@@ [I" oughtve;TU;[I"111;T@ [I" ouija;T@`@ [I"oui_lookup;T@@ [I" oujoke;T@6@ [I" oulipo;T@@ [I"our;T@@ [I"our-eel-hacks;T@`@ [I" ourkudos;TU;[I" 0.0.38;T@ [I" outback;T@ @ [I"outdated-gems;T@@ [I" outdent;T@@ [I"outfielding-jqplot-rails;TU;[I"1.0.4.1121;T@ [I" outlaw;T@6@ [I" outline;T@I@ [I"outlook2gcal;T@'@ [I"outlook_importer;T@@ [I" outpost;T@,@ [I"output-to-file;T@@ [I"outside-in;T@@ [I" outsider;T@E@ [I"outside_transaction;T@E@ [I"outsource;T@@ [I"ouvrages-flvtool2;T@ @ [I"ouvrages-guard-haml2erb;T@`@ [I"ouvrages-haml2erb;T@[ @ [I"ouvrages-tinymce-rails;TU;[I" 3.4.9;T@ [I" oven;T@E@ [I" overcast;T@'@ [I"overdrive;T@@@ [I"overdrive_metadata;TU;[I" 1.0.2.5;T@ [I" overider;T@@ [I"overlay_me;T@T@ [I" overlook;T@"@ [I" overlord;T@@ [I"overmind_client;T@@ [I"overridable;T@@ [I" override;T@@ [I"override_kernel;T@@ [I" overseer;T@'@ [I" oversip;T@@ [I"oversip-mod-mysql;T@@ [I"oversip-mod-postgresql;T@@ [I" overtime;T@@ [I"overtime-queries;T@'@ [I"overwatch;T@@ [I"overwatch-cli;T@`@ [I"overwatch-collection;T@`@ [I" ovfparse;TU;[I" 0.9.2.4;T@ [I" ovh-rb;T@`@ [I"ovh_savoni;TU;[I" 1.54.0;T@ [I"ovh_soapi;T@@ [I" ovni;T@@ [I"ovo_opchistdwn_summarizer;T@@ [I"ovo_report_summarizer;T@ @ [I"&ovo_template-interface_summarizer;T@'@ [I"$ovo_template-logfile_summarizer;T@'@ [I"&ovo_template-snmptraps_summarizer;T@'@ [I"owasp-esapi-ruby;T@K@ [I"owd;T@@ [I" owemegod;T@'@ [I"owl;T@'@ [I" owlet;T@@ [I"owlim-ruby;TU;[I" 0.9.9.3;T@ [I"owlscribble;T@e@ [I" ownable;T@I@ [I"owncloud-admin;T@@ [I" ownet;T@@ [I"ox;T@ @ [I" oxford;T@B@ [I"oxm;T@6@ [I" oxmlk;T@x@ [I" oyster;T@@ [I"oz;T@`@ [I"oz_holidays;TU;[I" 1.2013;T@ [I" ozon;T@E@ [I"ozy;T@+@ [I"_p_;T@@ [I" p2ruby;T@|@ [I" p4ruby;T@@ [I"pa;T@@ [I" paasio;TU;[I" 0.3.16.1;T@ [I"pabarcode;T@'@ [I" pablo;T@@ [I" Pablo;T@@ [I" pabst;T@'@ [I"pac;T@@ [I" pacct;T@@[I" pace;T@@ [I" pacecar;T@@ [I" pacer;T@@[I"pacer-bloomfilter;T@@ [I"pacer-dex;T@O@[I"pacer-jogger;T@@ [I"pacer-neo4j;T@@[I"pacer-orient;T@O@[I"pacer-xml;T@I@[I" pachuber;T@@ [I"pachube-stream;T@"@ [I" pacifier;T@'@ [I" pacino;T@@ [I" pacioli;T@'@ [I" pack;T@@ [I" packable;T@q@ [I"package_converter;T@@ [I"packagegenerator;T@E@ [I"package_manager;T@n@ [I" packager;T@@ [I"package_tracker;T@@ [I"packed_fields;T@@ [I" packet;T@=@ [I"packetcount;T@@ [I" packetfu;T@@ [I"packet_io;T@@ [I" packman;T@'@ [I" packmule;T@@ [I" packnga;T@ @ [I" packr;T@@ [I" packrat;T@1@ [I"packr-rails;T@'@ [I" packsnap;T@'@ [I" pacman;T@'@ [I" pacmine;T@@ [I" pacpdf;T@@ [I"pacstream;T@B@ [I" pactrac;T@"@ [I" paddle;T@@ [I" paddock;T@@ [I" padlock;T@`@ [I"padma-assets;T@@ [I"padmapriya;T@@ [I" padrino;T@@ [I"padrino-admin;T@@ [I"padrino-assets;T@@ [I"padrino_bootstrap_forms;T@'@ [I"padrino-cache;T@@ [I"padrino-cancan;T@@ [I"padrino-cms;T@`@ [I"padrino-contrib;T@@ [I"padrino-cookies;T@@@ [I"padrino-core;T@@ [I"padrino-csrf;T@`@ [I"padrino-fields;T@@ [I"padrino-flash;T@@ [I"padrino-form-errors;T@@ [I"padrino_gelflogger;T@@ [I"padrino-gen;T@@ [I"padrino-helpers;T@@ [I"padrino-hstore;T@`@ [I"padrino-jbuilder;T@@ [I"padrino-json;T@@ [I"padrino-localization;T@@ [I"padrino-mailer;T@@ [I"padrino-relative;T@E@ [I"padrino-responders;T@6@ [I"padrino-routing;T@@ [I"padrino-rpm;T@@ [I"padrino-sprockets;T@'@ [I"padrino-validation-html5;T@!@ [I"padrino-views;T@@ [I"padrino-warden;T@@ [I"page_actions;T@d@ [I"PagedList;T@@ [I"pagedown-rails;T@@ [I"paged_scopes;T@`@ [I"page_engine;T@@ [I"page_glimpse;T@@ [I"pagehub-markdown;T@6@ [I"page_iterator;T@`@ [I"pagelime_rails;T@|@ [I"page_match;T@'@ [I" pageme;T@@ [I"pagemodels;T@@ [I"page-object;T@@ [I"page_object_wrapper;T@q@ [I"page_parts;T@@@ [I" pager;T@@ [I" pagerank;T@@ [I"pageranker;T@'@ [I"PageRankr;T@@ [I"pagerduty;T@ @ [I"pager_duty_rest_client;T@[ @ [I"pagerduty-sonian;T@x@ [I"pagerduty_tools;T@@ [I" pages;T@'@ [I" pagesjs;T@@ [I"page_specific_js;T@@ [I"pagespeed;T@'@ [I"page_speed;T@|@ [I"pagespeed_grabber;T@'@ [I"PageTemplate;T@9 @ [I"page_title_helper;T@@ [I"pagetypebuilder;T@х@ [I"page_weight;T@'@ [I"page_wrapper;T@E@ [I"pagificate;T@'@ [I" pagify;T@@ [I" paginate;T@@ [I"paginate_alphabetically;T@@ [I"paginated_table;T@@ [I"paginate_me;T@@ [I"paginate-simple;T@@@ [I"pagination;T@@ [I"pagination_render_logic;T@E@ [I"pagination_scope;T@@@ [I"paginator;T@@ [I" pagoda;T@@ [I"pagoda-client;T@I@ [I"pagoda-tunnel;T@6@ [I"pagseguro;T@@ [I"pag_seguro;T@x@ [I"pagseguro_catcher;T@`@ [I"pagseguro_client;T@@ [I"pagseguro_v2;T@'@ [I"paiement_cic;T@!@ [I"painless_partials;T@`@ [I" paint;T@-@ [I" painter;T@+@ [I" pair;T@"@ [I" pairhost;T@@ [I" pairkit;T@|@ [I"pair-salad;T@`@ [I" pairtree;T@@ [I" pairwise;T@@ [I" pairzone;T@'@ [I" pakada;T@@ [I"pakada-dispatch;T@@ [I"pakada-render;T@@ [I" pakman;T@x@ [I" pakunok;T@@ [I" pakyow;T@@ [I"pakyow-core;T@@ [I"pakyow-mailer;T@@ [I"pakyow-presenter;T@@ [I"pal;T@@ [I" paladin;T@"@ [I" palaver;T@@ [I" palco;T@@ [I" pale;T@'@ [I"pa_learner;T@`@ [I" paleta;T@@ [I" palett;T@'@ [I" palette;T@V@ [I"palette_creator;T@@ [I" palettes;T@@ [I" palf;T@n@ [I"palf-utils;T@@ [I"pali-canon;T@'@ [I"palidanx-cache-money;T@[@ [I"palidanx-fb_graph;T@@ [I"palidanx-koala;T@- @ [I"palindrome;T@@ [I" pallet;T@@ [I"pallet-ops;T@'@ [I" palm;T@"@ [I"palmister;T@E@ [I" palmtree;T@@ [I" palobr;T@W@ [I" paloma;T@V@ [I"pam;T@@ [I" pamela;T@@ [I" pamfaxr;T@@ [I" panache;T@`@ [I" pancake;T@@ [I"pancake-parser;T@@ [I" panda;T@ @ [I"panda_canvas;T@@ [I" pandafu;T@E@ [I"panda_query;T@@ [I" pandemic;T@Y@ [I"pandoc-ruby;T@@ [I" pandoku;T@B@ [I" pandora;T@@@ [I"pandorabots;T@'@ [I"pandora_client;T@@@ [I"pandorified;T@@ [I"panelbeater;T@1@ [I"pangel-chronic;T@?@ [I"pangel-sg-ruby;T@`@ [I"pangel-testy;T@@ [I" pango;T@9@ [@k@9@ [I" pangolin;T@@ [I"pangrammic_surplus;T@@ [I"pan_handler;T@E@ [I" panini;T@N@ [I" panko;T@'@ [I"panmind-bigbro;T@&@ [I"#panmind-exception_notification;TU;[I" 2.3.10;T@ [I"!panmind-http_accept_language;T@x@ [I"panmind-recaptcha;T@@ [I"panmind-rtf;T@@ [I"panmind-ruby-audioinfo;T@@ [I"panmind-sslhelper;T@' @ [I"panmind-tarantula;T@@ [I"panmind-usage-tracker;T@@ [I"!panmind-usage-tracker-server;T@@ [I"panmind-zendesk;T@@ [I" pano;T@@ [I" panorama;T@'@ [I"panoramic;T@"@ [I"panoramio;T@'@ [I"panoramio-rb;T@@ [I" pantheon;T@@ [I" panthoot;T@@ [I"panztel-actionwebservice;T@p#@ [I"paparazzi;T@@ [I" papaya;T@@ [I" paper;T@'@ [I" paperboy;T@@ [I"papercavalier-money;TU;[I" 3.7.1;T@ [I"papercavalier-ruby-aaws;T@@ [I"paperclip;T@c@ [I" paperclip_archive_processor;T@@ [I"paperclip-atompub;T@E@ [I"PaperclipAttachmentRemover;T@@ [I"Paperclip-Autosizer;T@'@ [I"paperclip-aws;T@X@ [I"paperclip-bsm-s3;T@@ [I"paperclip_cloudfiles;T@"@ [I"paperclip-cloudfiles;TU;[I" 2.3.10.1;T@ [I"paperclip_cloud_storage;T@@ [I"paperclip-compression;T@`@ [I"paperclip_database;T@W@ [I"paperclip_database_storage;T@@ [I"paperclipdb;T@@ [I"paperclip-defaults;T@@ [I"paperclip_delete_helpers;T@`@ [I"paperclip-dimension;T@@ [I"paperclipdropbox;T@@ [I"paperclip-dropbox;T@@ [I"paperclip_duplicate_check;T@@ [I"paperclip-elvfs;T@"@ [I"paperclip-env_aware;T@@ [I"paperclip-facecrop;T@@@ [I"paperclip-fedora;T@ @ [I"paperclip-ffmpeg;T@@ [I"paperclipftp;T@,@ [I"paperclip-gridfs;T@s@ [I"paperclip-hacked;TU;[I" 2.3.1.3;T@ [I"paperclip_helpers;T@@ [I"paperclip_i18n;T@@ [I"paperclip-matchers;T@`@ [I"paperclip-meta;T@@ [I"paperclip-migrator;T@e@ [I"&paperclip_mogilefs_storage_ennder;T@@ [I"paperclip_plus;T@- @ [I"paperclip_processors;T@W@ [I"paperclip-qiniu;T@@ [I"paperclip-remote;T@@ [I"paperclip-removable;T@@ [I"paperclip-riak;T@E@ [I"paperclip-s3;T@@ [I"paperclip-sftp;T@@ [I"paperclip-smusher;T@@ [I"paperclip-storage-ftp;T@@ [I"paperclip-storage-tmp;T@"@ [I"'paperclip-strip-strange-characters;T@'@ [I"paperclip-swift;T@'@ [I"paperclip-time-stamped;T@ @ [I"paperclip_video_processor;T@[ @ [I"paperclip_waveform;T@@ [I"paperclip_with_versions;T@r@ [I"paperclip-youtube;TU;[I" 2.3.8.2;T@ [I"papercrop;T@n@ [I" papercut;TU;[I"2010.3.3.0;T@ [I"paperless_to_xero;T@@ [I" paperlex;T@@ [I"papermill;T@ @ [I"papermill-agent;T@@ [I"papersync;T@@ [I"papertime_client;T@@ [I"papertrail;T@Q@ [I"paper_trail;T@1@ [I"papertrail-cli;T@@ [I"paper_trail_manager;T@@ [I"papertrail-provisioner;T@'@ [I"papervision3d;TU;[I" 2.1.921;T@ [I"paperwrap;T@E@ [I" paperzip;T@'@ [I" papla;T@`@ [I" paprika;T@'@ [I" paprite;T@@ [I" papyrus;T@E@ [I"Papy-tools;T@6@ [I"par;T@'@ [I" para;T@`@ [I" parade;T@@ [I" paradiso;T@@ [I" parallel;T@@ [I"parallel2;T@@ [I"+parallel588-bootstrap-timepicker-rails;T@6@ [I"parallel588_google_drive;T@@ [I"parallel_ancestry;T@@ [I"parallel-ancestry;T@@ [I"parallel_batch;T@E@ [I"parallel-each;T@@ [I"parallel_enum;T@I@ [I"parallel-forkmanager;T@@ [I"parallel_http;T@'@ [I"parallelize;T@x@ [I"parallelized_specs;TU;[I" 0.3.88;T@ [I"parallelpipes;T@@ [I"parallel_queue;T@`@ [I"parallel_run;T@@ [I"parallel_runner;T@@ [I"parallels-backup;T@@ [I"parallels_desktop;T@'@ [I"parallel_split_test;T@@ [I"parallel_tests;T@' @ [I"parallel_tests-instructure;T@@ [I"parallizer;T@@ [I"param_accessible;T@E@ [I"param_checker;T@@ [I"parameter_chain;T@'@ [I"parameter_filter;T@@ [I"parameterize;T@@ [I"parameters;T@"@ [I"parameters_extra;T@@ [I"param_guard;T@'@ [I" paramix;T@@ [I"param_protected;T@@ [I" params;T@@ [I"params_cleaner;T@@ [I"params_debugger;T@@ [I"params_extractor;T@@ [I"params_validator;T@@ [I"params-validator;T@@ [I" paranoia;T@N@ [I""paranoia_uniqueness_validator;T@@ [I" paranoid;T@n@ [I"paranoid2;T@@ [I"paranoid_create;T@@ [I"paranoid_dummy;T@'@ [I"paranoid_fu;T@@ [I"paranoid_starlight;T@@ [I"paraphrase;T@@ [I"paraphraser;T@@ [I" parasite;T@@ [I"parasyogi;T@'@ [I" paratele;T@@ [I" parcel;T@R @ [I"parchemin;T@x@ [I"parenthesize;T@'@ [I"parent_resource;T@`@ [I" parents;T@E@ [I"paresseux;T@E@ [I" pario;T@Y@ [I" parka;T@@ [I"parlement;T@|.@ [I" parlez;T@6@ [I"parndt-acts_as_tree;T@@ [I" parrot;T@@ [I"parseargs;T@@ [I"parseArgs;T@'@ [I"parseconfig;T@@ [I"parse-cron;T@@@ [I"parseexcel;T@@ [I"parsehtml;TU;[I" 1.12.2;T@ [I"parseinput;T@'@ [I" parseitc;T@1@ [I" parsel;T@`@ [I" parseley;T@'@ [I"parseline;T@@ [I" parsely;T@+@ [I"ParseModel;T@@ [I"parse_my_sql;T@@ [I"parseOpts;T@E@ [I" parse_p1;T@@ [I"parse_resource;T@@ [I"parse_resource_rails;T@E@ [I"parse-ruby-client;T@g@ [I"ParseTree;T@i@[@@i@ [@@\@ [I"parsetree19;T@[ @ [I"ParseTreeReloaded;T@'@ [I"ParseUserAgent;T@@ [I" parsey;T@@ [I"parsi-date;T@@ [I"parsi-digits;T@[ @ [I"parsi-localize;T@@ [I"parsing-utils;T@N@ [I"Parsistence;T@߲@ [I" parslet;T@@ [I"parslet-css;T@'@ [I" parsley;T@@ [I"parsley-ruby;T@@ [I"parsley-store;T@@ [I" parsnip;T@E@ [I" parsr;T@"@ [I"partial_date;T@@ [I"partial-date;T@u@ [I"partializer;T@@@ [I"partialruby;T@I@ [I" particle;T@s@ [I"partigirb;T@@ [I"partitioned;T@@ [I"partitioner;T@@ [I"part_of_speech;T@E@ [I" parts;T@`@ [I" party;T@@ [I"party_boy;T@@ [I" partyhat;T@'@ [I"party_resource;T@"@ [I"partystreusel;T@E@ [I"pas;T@E@ [I"pasaporte;T@@ [I" pasco;T@@ [I"paso-net-http-spy;T@@ [I" pasrb;T@+@ [I" pass;T@E@ [I" passage;T@@ [I" passbook;T@E@ [I"passbook-ios;T@@ [I"passbook-rails;T@E@ [I"passbook-ruby;T@`@ [I" passdb;T@@ [I" passdock;T@|@ [I"passenger;TU;[I" 3.0.19;T@ [I"passenger_debugger;T@6@ [I"passenger_dudemeister;T@ @ [I"passenger_dyno;T@E@ [I"passenger-jmazzi;TU;[I" 2.2.10;T@ [I"passenger_mon;T@@ [I"passenger_monit;T@@ [I"passenger-oob-gc;T@'@ [I"passenger_reaper;T@E@ [I"passenger-recipes;T@@@ [I"passenger_status;T@E@ [I" passgen;T@@ [I"passifier;T@@ [I"passifier-rails;T@@ [I" passify;T@@ [I"passive-dns;T@@ [I"passiveldap;T@@ [I"passiverecord;T@!@ [I"passive_resource;T@@ [I" passkit;T@E@ [I" passmakr;T@@ [I"pass_nils_to;T@@ [I"passphrase;T@@ [I"passphrase_entropy;T@`@ [I" passport;T@`@ [I"passportist;T@@ [I"passtools;T@"@ [I"passvault;T@@@ [I" passw3rd;T@@ [I" password;T@@ [I"password_dynamo;TU;[I"0.0.00017;T@ [I"password_manager;T@'@ [I"password_policy;T@@ [I"password_resetter;T@ @ [I"passwordsafe;T@@ [I"password_safe;T@"@ [I"password_strength;T@@ [I"password_strong;T@'@ [I"passwordy;T@'@ [I" paste;T@@ [I" pastebin;T@@ [I"pasteboaRb;T@'@ [I"pasteboard;T@@ [I"pastejour;T@u@ [I" pastie;T@@ [I"pastie-api;T@@ [I"pastiepacker;T@@ [I"pastie_parser;T@E@ [I" pastis;T@@ [I" pastr_it;T@@ [I" pastry;T@6@ [I"pat;T@@ [I" pata;T@@ [I"patch-asset_library;T@@ [I"patch-html_namespacing;T@(@ [I"patch_irb_completion;T@'@ [I"patchmaster;T@@ [I" patchr;T@+@ [I"patcito-maruku;T@@ [I"patcito-rdiscount;T@t@ [I"patcito-ricogen;T@[ @ [I" patella;T@@ [I" patento;T@@ [I" path;T@ @ [I" path2;T@@ [I"pathbuilder;T@E@ [I" pathby;T@E@ [I"patheditor;T@@ [@@@[I"path-email_spec;T@@ [I"path_finder;T@@ [I" pathfinderdev-mortgage_calc;T@`@ [I"pathfixer;T@@ [I"pathf_validator;T@@ [I" path_gem;T@E@ [I"path-log4r;T@@ [I"pathname2;T@@[@@-@ [@@X@[@@X@ [I"pathname3;T@@ [I"pathname-common_prefix;T@'@ [I"pathname_local;T@E@ [I"path_observer;T@@ [I"pathological;T@@ [I"path_operator;T@@ [I"path-paperclip;T@ @ [I"path_rewriter;T@@ [I"path_router;T@E@ [I" Paths;T@@ [I"paths_of_glory;T@|@ [I"pathstring;T@'@ [I" path-to;T@@ [I" pathtraq;T@M#@ [I"path_tree;T@@ [I" pathway;T@[ @ [I" pathways;T@n@ [I" pathy;T@"@ [I" patience;T@`@ [I"patience_diff;T@@ [I"patient-age;T@@ [I"patinfo2csv;T@@ [I" patir;T@@ [I"patmaddox-activemerchant;T@V@ [I"pato-client;T@`@ [I"patriarch;T@,@ [I"patrick-lockdown;T@@ [I"patrickod-raspell;T@s@ [I" patrol;T@@ [I" patron;T@8@ [I"patronage;T@n@ [I" pattern;T@@ [I"pattern-match;T@`@ [I"patternmatching;T@[@ [I" patterns;T@+@ [I"patterntap;T@E@ [I" patty;T@@ [I"paul_diagnostic;T@"@ [I"pauldix-ruby-gmail;T@@ [I"paul_dix_thundergod;T@@ [I"paul-is-awesome;TU;[I" 30.0.0;T@ [I"paul_rake;T@V@ [I"paul_revere;T@s@ [I" pauper;T@`@ [I" pause;T@@ [I" pawn;T@@ [I" pawnee;T@|@ [I" payable;T@"@ [I" paybox;T@'@ [I"paybox_system;T@@ [I" payday;T@@ [I" payex;T@@@ [I" pay_fu;T@@ [I" paygent;T@@@ [I" paylane;T@@ [I" payme;T@V@ [I" payment;T@@ [I"payment_dta;T@'@ [I"paymentonline;T@@ [I"payments-pl;T@@ [I"paymentspring;T@'@ [I" paymill;T@@ [I"payone_connect;T@@@ [I"payoneer_csv;T@@@ [I"payout_system;T@'@ [I" paypal;T@O@ [I"paypal_adaptive;T@@ [I"paypal-adaptive-gateway;T@'@ [I"paypal_api;T@@ [I"paypal-brazil;T@@ [I"paypal-business;T@@ [I"paypal_calculator;T@E@ [I"paypal-express;T@@ [I"paypal-frete-facil;T@u@ [I"paypal_fx;T@`@ [I"paypal-ipn;T@E@ [I"paypal_nvp;T@,@ [I"paypal_permissions;TU;[I" 0.0.5.5;T@ [I"paypal-permissions;T@@ [I"paypal-recurring;T@@ [I"paypal-report;T@@@ [I"paypal-scaffold;T@@@ [I" paypal-sdk-adaptiveaccounts;TU;[I" 1.96.2;T@ [I" paypal-sdk-adaptivepayments;T@@ [I"paypal-sdk-buttonmanager;T@@ [I"paypal-sdk-core;T@+@ [I"paypal-sdk-invoice;TU;[I" 1.96.1;T@ [I"paypal-sdk-merchant;T@@ [I"paypal-sdk-permissions;T@@ [I"paypal-subscribe;T@@ [I" payr;T@@ [I"paysimple;T@@ [I"payson_api;T@@ [I" payza;T@@ [I" pazuzu;T@@@ [I"pb;T@`@ [I"pba_crawler;T@@ [I" pbcopy;T@@ [I"pbenchmark;T@@ [I" pbkdf2;T@@ [I" pbkdf256;T@6@ [I"pbkdf2-peter_v;T@@@ [I"pbl;T@@ [I"pb-will_paginate;T@ϯ@ [I"pbxproject;T@[@ [I" pbxtra;T@X@ [I" pbyf;T@"@ [I" PBYF;T@'@ [I"!pcai_client_side_validations;T@"@ [I" pcanusb;T@@ [I" pcap;T@X@ [I" pcap-ffi;T@@ [I" pcapr;T@n@ [I"pcapr-local;T@@ [I" pcaprub;T@_@ [I"pcap_simple;T@@ [I" pcolor;T@@ [I" pcr-ruby;T@@ [I"pcs_vegas;T@'@ [I" pcut;T@@ [I"pd;T@@ [I" pdbook;T@!@ [I"PDF;T@'@ [I" pdf2json;T@@ [I" pdf2nook;T@@ [I" pdf417;T@@ [I" pdfbeads;T@@ [I"pdf-burst;T@@ [I" pdfcrowd;T@9@ [I"pdf-extract;T@`@ [I"pdf_form_filler;T@E@ [I"pdf-forms;T@@ [I" pdf_gen;T@W9@ [I" pdf_info;T@@ [I"pdf-inspector;T@@ [I"pdfjs-rails;T@E@ [I" pdfkit;T@@ [I"pdfkit-amd64;T@u@ [I"pdfkit-heroku;T@@@ [I"pdfkit_songrit;T@@ [I"pdf-labels;T@@ [I"pdf_maker;T@"@ [I"pdf-merger;T@@ [I" pdfmult;T@ @ [I"pdf-my-url;T@@ [I"pdf_ravager;T@@[@4@V@ [I"pdf_reader;T@'@ [I"pdf-reader;T@@ [I"pdf-reader-html;T@@ [I"pdf-reader-turtletext;T@I@ [I"pdf_renderer;T@E@ [I"pdfservice;T@u@ [I"pdf_split_bookmark-pdftk;T@'@ [I"pdf-stamper;T@@ [I"pdf-storycards;T@@ [I"pdfthat-client;T@E@ [I"pdftk_forms;T@@ [I"pdftohtmlr;T@@ [I"pdftoimage;T@1@ [I"pdf-toolkit;T@@ [I"pdftoruby;T@@ [I"#pdf_to_swf-paperclip-processor;T@`@ [I"pdf_utils;T@@ [I"pdf-wrapper;T@@ [I"pdf-writer;T@@ [I" pdfxray;T@@@ [I"pdg;T@@ [I"pdlibrary;T@'@ [I"pdm;T@"@ [I"pdm-rails;T@V@ [I" pdoc;T@@ [I"PD_officeally;T@'@ [I"pdr-client;T@'@ [I"pduey-sunspot;T@f@@ [I"pduey-sunspot_rails;T@f@@ [I" PD_x12;T@@ [I"pea;T@'@ [I" peaberry;T@'@ [I"peacekeeper;T@@ [I"peace_love;T@@ [I"peace_of_mind;T@`@ [I" peach;T@@ [I" peaches;T@E@ [I" peachy;T@@ [I" peanut;T@[ @ [I" peanuts;T@i6@ [I"pearson-hashing;T@"@ [I"pearson_kitchen_manager;T@@ [I" peas;T@@ [I" peaty;T@@ [I"pebblebed;T@ @ [I"pebble_path;T@@ [I" pebbles;T@@ [I"pebbles-anti_hangover;T@@ [I"pebbles_audio_files;T@W@ [I"pebbles-compgacha;T@@ [I"pebbles-dajare;T@@ [I"pebbles-fizzbuzz;T@`@ [I"pebbles-kenshiro;T@@ [I"pebbles-nyarucode;T@@@ [I"pebbles-path;T@@ [I"pebbles-php_cond;T@E@ [I"pebbles-php_cond-infected;T@E@ [I")pebbles-productivity10x-switch_hosts;T@'@ [I"pebbles-rack-hanoi;T@@ [I"pebbles-sl;T@e@ [I"pebbles-soreyuke;T@`@ [I"pebbles-uid;T@ @ [I"pebbles-xmas;T@@ [I"pebbles-zenra;T@`@ [I" pebkac;T@E@ [I" peck;T@@ [I"peck-on-rails;T@@ [I" pedal;T@'@ [I" pedalog;T@6@ [I" pedant;T@@ [I" pedantic;T@`@ [I" peddler;T@@ [I" pedit;T@`@ [I" pedlar;T@'@ [I" pedump;TU;[I" 0.4.16;T@ [I" peegee;T@@ [I" peekaboo;T@x@ [I" peekapp;T@`@ [I"peek-a-view;T@"@ [I" peekbot;T@@ [I" peekdb;T@@ [I" peeler;T@'@ [I" peep;T@D@ [I" peepcode;T@@ [I"peeper-rails;T@@ [I"peeping_tom;T@X@ [I" peepshot;T@E@ [I"peerindex;T@'@ [I"peg;T@@ [I" pegarus;T@@ [I" pegasus;T@n@ [I" pegex;T@E@ [I" peggy;T@@ [I" peglite;T@@ [I"peg_test_gem;T@'@ [I"peiji-san;T@@ [I" pekky;T@@ [I"peleteiro-i18n;T@@ [I"peleteiro-twitter-search;T@M+@ [I"pelle-actionwebservice;T@p#@ [I"pelle-ruby-openid;T@'@ [I"pelops-jars;T@@[I" pelt;T@'@ [I" pelusa;T@I@ [I" penchant;TU;[I" 0.2.26;T@ [I" pencil;T@@ [I"penctl-ruby;T@6@ [I" pendaxes;T@@ [I" pending;T@`@ [I"penetrator;T@@ [I" penfold;T@@ [I"penmanship;T@@ [I" pennride;T@@ [I"pennstudyspaces;T@@ [I" pennu;T@`@ [I"penny_sms_muncher;T@@ [I" pennytel;T@@ [I"pennyworth;T@@ [I" pensieve;T@'@ [I"penso-feedbag;T@@ [I"penso-feedparser;T@W9@ [I"penso-feedzirra;T@ @ [I" pentex;T@@ [I" pentix;T@@ [I" peon;T@6@ [I" peons;T@@ [I" people;T@@ [I"people_places_things;T@d@ [I"peoplesoft;T@'@ [I" pepper;T@E@ [I"peppercorn;T@@ [I"perambulate;T@@ [I"percentage;T@@ [I"percentise;T@@@ [I"perception;TU;[I" 0.3.19;T@ [I" perch;T@^@ [I"perchance;T@'@ [I"percolate-mail;T@@ [I" percy;T@@ [I" peregrin;T@@ [I"perennial;T@@ [I"perens-instant-user;T@@ [I" pererinha_my_string_extends;T@'@ [I"perfectqueue;TU;[I" 0.8.24;T@ [I"$perfect-random-number-generator;T@@ [I"perfectsched;T@-@ [I" perfer;T@@ [I" perforce;T@@ [I"perforce2svn;T@X@ [I" perform;T@'@ [I"performance_tester;T@3@ [I"performing;T@'@ [I"perform_later;T@@ [I"perftools.rb;T@O@ [I" pericope;T@@ [I" periodic;T@@ [I"periodical;T@`@ [I"periodic_counter;T@+@ [I"periodic-scheduler;T@X@ [I"periodic_table;T@@ [I"periodic_table_bz;T@'@ [I"periodic_table_jasnow;T@E@ [I"periphery;T@'@ [I" periplus;T@@ [I"periscope;T@@ [I"periscope-activerecord;T@@ [I"periscope-data_mapper;T@@ [I"periscope-mongoid;T@@ [I"periscope-mongo_mapper;T@@ [I"periscope_rails;T@ @ [I"peritor-better;T@@ [I"peritor-bundler;T@X@ [I" perka;T@@ [I" perlin;T@@ [@@@ [I"perlin_noise;T@@@ [I"per_mailer_smtp_settings;T@@ [I"permalink;T@u@ [I"permalinker;T@'@ [I"permalink_fu;T@@ [I"permanent_records;T@9@ [I" permiso;T@@ [I"permissable;T@@ [I"permissible;T@'@ [I"permissify;T@`@ [I"permissive;T@'@ [I" permit;T@@ [I"permitted;T@'@ [I"permit_yo;T@@ [I" permoid;T@'@ [I"permutation;T@@ [I"permutation_generator;T@@@ [I"permutations;T@+@ [I"perpetuity;T@@ [I"perquackey;T@@ [I" perry;T@@ [I"perseus_match;T@V@ [I"persevere;T@s@ [I" persia;T@@ [I"persia_generator;T@@ [I" persis;T@E@ [I" persist;T@@ [I"persisted;T@'@ [I"persistence;T@"@ [I""persistence-adapter-flat_file;T@"@ [I"%persistence-adapter-kyotocabinet;T@@ [I"persistence-rails;T@@ [I"persistent;T@@ [I"/persistent_cookie_authentication_generator;T@'@ [I"persistent_http;T@W@ [I"persistent_httparty;T@@ [I"persistent_settings;T@@ [I"persistize;T@@ [I" persona;T@@ [I"personage;T@E@ [I"personal_api_client;T@'@ [I"personhood;T@@@ [I"personify;T@x@ [I"person_name;T@@ [I"person-name;T@"@ [I"personnummer;T@n@ [I" persvr;T@I@[I"pervasives;T@@ [I"per-version;T@@ [I" pesel;T@- @ [I" pest;T@@ [I"pet;T@@ [I"peteforde-scrobbler;T@@ [I"petef-statsd;T@@ [I"peterc-prowl;T@6@ [I"peterc-sanitize;T@@ [I"petermorphose;T@@ [I"peter-mueller;T@@ [I"peterosullivan-highrise;T@|@ [I"petfinder;T@6@ [I"petfinder_client;T@@ [I" pethau;T@@ [I" petit;T@@ [I"petite-lettre;T@@ [I" peto;T@@ [I"petroglyph;T@@ [I"*pettanr_creative_commons_v30_licenses;T@@ [I"(pettanr_pettan_commons_v01_licenses;T@n@ [I"*pettanr_pettan_protected_v01_licenses;T@n@ [I"'pettanr_pettan_public_v01_licenses;T@n@ [I"'pettanr_public_domain_v01_licenses;T@@ [I"!pettanr_unknown_v01_licenses;T@@ [I" pew_pew;T@E@ [I"pez;T@`@ [I"pf-command;T@@ [I" pfeed;T@@ [I"pfsc_gruff;T@@ [I"pfsc-gruff;T@@ [I"pftg-jruby-openssl;T@J@ [I" pfuse;T@u/@ [I"pg;T@@[@@@*@[@@@@ [@@@@ [I"pg_advisory_locker;T@@ [I"pg_application_name;T@@ [I"pg-app-name;T@@ [I" pg_array;T@@ [I"pg_array_parser;T@V@[@M@V@ [I"pg_audit_log;T@@ [I"pgbackups-archive;T@"@ [I"pgbackup-tasks;T@@ [I"pg_comment;T@`@ [I"pg_connection;T@@@ [I"pg_creditcard;T@@ [I" pgcrypto;T@@ [I" pg_csv;T@1@ [I" pg-ct;T@ @ [I"pg_data_encoder;T@'@ [I"pg_dumper;T@g@ [I" pg_enum;T@@ [I"pgericson-handsoap;T@@ [I"pgexplain;T@|@ [I"pg_fuzzy_string_matcher;T@'@ [I"pg_gnostic;T@@@ [I"pg_helper;T@@ [I"pg-hstore;T@;@ [I"pg-jdguyot;T@ @ [I" pgjob;T@`@ [I" pg_json;T@'@ [I"pg-ldap-sync;T@`@ [I"pg_migrate;T@1@ [I"pg_migrations;T@@ [I"pg-migrator;T@@ [I"pgmonitor;T@@ [I" pgpass;TU;[I"2012.01.18;T@ [I" pg_power;T@@ [I"pgq;T@6@ [I"pg_query_analyzer;T@!@ [I" pg_queue;T@+@ [I" pgq_web;T@E@ [I"pg_reconnect;T@@@ [I"pg_recurrence;T@`@ [I"pg_reindex;T@+@ [I" pgrid;T@@ [I"pg-safesys;T@@ [I"pg_schema;T@E@ [I"pg_scope_by_soundex;T@'@ [I"pg_search;T@@ [I"pg_search_scope;T@@ [I"pg_sequencer;T@E@ [I"pg_serializer;T@@@ [I"pg_typecast;T@6@ [I"pgxn_utils;T@+@ [I" phaad;T@@ [I" phalanx;T@@ [I"phantom_client;T@@ [I"phantomjs;TU;[I" 1.6.0.0;T@ [I"phantomjs-binaries;T@e@ [I"phantomjs-linux;T@E@ [I"phantomjs-linux64;T@@ [I"phantomjs-mac;T@@ [I"phantomjs.rb;T@@ [I"phantom_menace;T@E@ [I"phantom_proxy;T@7U@ [I" pharos;T@@ [I" pHash;T@x@ [I" phashion;T@W@ [I"phat_pgsearch;T@1@ [I" phaxio;T@x@ [I"phegaro-whenever;T@@ [I"PheldItunesReporter;T@@ [I"phene-backgrounded;T@@ [I"phene-i18n_auto_scoping;T@@ [I"phene-parallel_tests;T@@ [I""phene-rails3_acts_as_paranoid;T@@ [I"phenomenal;T@u"@ [I"phenomenal_rails;T@@ [I" phidgets;T@@ [I"phidgets4r;T@@ [I"phidgets-ffi;T@@@ [I"philevans-activemerchant;T@@ [I"philologic-client;T@@ [I"philrosenstein-chronic;T@@ [I"phishtank;T@@@ [I"phl_geocode;T@@ [I"phlipper-gem-test;T@E@ [I" phlow;T@X@ [I"pho;T@@ [I"phocoder-rails;T@@ [I"phocoder-rb;T@@ [I" phocus;T@s@ [I" phone;T@s@ [I"phone_classifier;T@V@ [I" phonegap;T@I@ [I"phonegap-api;T@N@ [I"phonegap-build;T@@ [I"phonem_encoder;T@E@ [I"phonemico;T@@ [I"phonenumber;T@'@ [I"phone_number;T@@ [I"phonenumber-client;T@@ [I"phone_numbers;T@N@ [I" phoner;T@@ [I"phonester;T@'@ [I" phonet;T@'@ [I"phone-validator;T@E@ [I"phone_wrangler;T@6@ [I" phoney;T@6@ [I" phonie;T@@ [I" phono;T@!@ [I"phonology;T@= @ [I" phonos;T@u"@ [I" phony;T@r@ [I"phony_number;T@E@ [I"phony_rails;T@t @ [I"phosney-money;T@E@ [I"phosphorus;T@'@ [I" phostr;T@E@ [I"photocopier;T@"@ [I"photo_folder;T@x@ [I"photograph;T@'@ [I"photo_handler;T@'@ [I"photoinfo;T@1@ [I"photo_mini_fb;T@+@ [I" photon;T@`@ [I"photos_manager;T@@ [I"photostat;T@@ [I"photoviewer;T@x@ [I"pho-utensil;T@@ [I"php;T@`@ [I" php4r;T@@ [I"phpass-ruby;T@@@ [I" phpcode;T@n@ [I" phpdocr;T@`@ [I"php_embed;T@@ [I"php_embed_interface;T@6@ [I" phper;T@-@ [I" phpf;T@@ [I"phpfog-fog;T@@ [I"php_http_build_query;T@@ [I" phpow;T@@ [I"php_process;T@@ [I" phprpc;T@ @ [I"php-serial;T@@ [I"php-serialization;T@J@ [I"php_serialize;T@@ [I"php-serialize;T@@ [I"php-serialize4ruby;T@@ [I"php-serialize_ryan;T@@ [I" php_vm;T@6@ [I" phrake;T@@ [I" phrase;T@@ [I"phrase_assembler;T@@ [I" phrasie;T@|@ [I" phrasify;T@'@ [I" phrk;T@@ [I" phuby;T@@ [I"phusion-backup;T@@ [I" physics;T@@ [I"pi;T@n@ [I" piano;T@&@ [I"pianobartender;T@"@ [I" pias;T@E@ [I" pi-bake;T@@ [I"pic;T@@ [I" pic2ch;T@E@ [I" picard;T@@ [I" picaroon;T@V@ [I" picasa;T@y@ [I"picasa_albums;T@@ [I"picasa-downloader;T@@ [I"picasa_plucker;T@@ [I"picasa-ruby;T@6@ [I"picasaweb;T@@ [I"picasawebalbums;T@Q%@ [I"picasaweb-backup;T@x@ [I" picasso;T@@ [I"picgarage;T@n@ [I" Pickaxe;T@@ [I"pickhost-cli;T@x@ [I" pickle;T@LN@ [I"pickled_aruba;T@@ [I"pickled_optparse;T@`@ [I"pickle-dupe;T@@ [I"pickle-has_many_support;T@@ [I"pickle_i18n;T@"@ [I"pickle-mongoid;T@@ [I"pickle-mongo_mapper;T@E@ [I" pickler;T@@ [I"pickle-surprise;T@"@ [I"picklive-currency;T@@ [I"picklive-logging;T@@ [I" pickup;T@V@ [I" picky;TU;[I" 4.12.6;T@ [I"picky-client;T@@ [I"picky-generators;T@@ [I"picky-live;T@@ [I"picky-statistics;T@@ [I"picky-vietnamese;T@'@ [I" picnic;TU;[I"0.8.1.20100201;T@ [I" picolena;T@I@ [I" picombo;T@@ [I"picombo-auth;T@I@ [I" picotest;T@'@ [I"picpacput;T@E@ [I" pics;T@`@ [I"pictaculous;T@'@ [I" pictate;T@@ [I" pictopus;T@@ [I" pictor;T@@ [I"pictos-free;T@'@ [I"pictos-icons;T@@ [I"pictrails;T@@ [I"picturefill-rails;T@I@ [I"picture_frame;T@@ [I"picturepath;T@@ [I"picture_tag-rails;T@"@ [I" pidfile;T@@ [I"pidgin2adium;T@@M[@@@ [I" pidify;T@`I"i386-linux;T[@@!@}1[I" pidlock;T@@ [I" pidly;T@6@ [I"pie;T@"@ [I"piecemeal;T@'@ [I"piece_pipe;T@@ [I" pie-high;T@@ [I"pie-rails;T@@ [I" piet;T@@@ [I"pietervisser-spork;TU;[I" 0.7.5.1;T@ [I" piffle;T@@ [I"pig;T@n@ [I" pigeon;T@- @ [I"pigeon_fu;T@`@ [I" piggly;T@u@ [I" piggy;T@@ [I" Piggy;TU;[I" 0.5.1.3;T@ [I"piggyback;T@@ [I" piggybak;TU;[I" 0.6.24;T@ [I"piggybak_bundle_discounts;T@"@ [I"piggybak_coupons;T@3@ [I"piggybak_giftcerts;T@@ [I""piggybak_rails_admin_nestable;T@"@ [I"piggybak_taxonomy;T@@ [I"piggybak_variants;T@@ [I"piggybank;T@"@ [I"piggy_latin;T@`@ [I"piginzoo_test;T@'@ [I"piglatinize;T@'@ [I" piglet;T@@ [I"piglop-ovh-rb;T@+@ [I"piglop-prawn;TU;[I" 0.10.2.3;T@ [I" pigment;T@@ [I" pig-spec;T@E@ [I"pik;T@^@ [I" pika;T@"@ [I" pikachu;T@'@ [I" piki_doc;T@G@ [I" pikl;T@@[@]@@ [I"pil;T@@ [I" pilha;T@I@ [I" pillboxr;T@@ [I" pillow;T@@ [I" pimento;T@E@ [I" Pimki;TU;[I" 1.8.200;T@ [I" pimon;T@1@ [I"pimpmychangelog;T@@ [I"pin;T@@ [I" pinba;T@@ [I" pinbo;T@@ [I" pinboard;T@"@ [I"pinboard_api;T@@ [I"pinboard_rb;T@@ [I" pinch;T@@ [I" pindah;T@@@ [I" pine;T@@ [I" pine2csv;T@@ [I"pineapple;T@@ [I" pingable;T@@ [I" pingback;T@@ [I" pingd;T@@ [I"pingdom-cap;T@@@ [I"pingdom-to-graphite;T@@ [I" pinger;T@@ [I" pingfm;T@@ [I" pingity;T@@ [I" pingly;T@@ [I"ping-middleware;T@E@ [I" pingmon;T@I@ [I"pingr-rails;T@@ [I" pinion;T@@ [I" pin_it;T@@ [I"pin-it-button;T@e@ [I" pinkie;T@@ [I"pink_shirt;T@@ [I" pinky;T@[@[I" pinned;T@@ [I" pinniped;T@'@ [I" pinny;T@`@ [I" pinpoint;T@@ [I" pinter;T@@ [I"pinterest;T@'@ [I"pinterest-share;T@'@ [I" pinyin;T@+@ [I"pinyin_split;T@@ [I" pioneer;T@@ [I" piou;T@@ [I" pipe;T@'@ [I"pipedrive;T@'@ [I"pipedriver;T@@ [I"pipedrive-ruby;T@,@ [I"pipedrive-wrapper;T@'@ [I" pipejump;T@@ [I" pipeline;T@@ [I"pipe_line_dealer;T@@ [I"pipeliner;T@s@ [I"pipeline_toolkit;T@@ [I"pipemaster;T@@ [I" piper;T@E@ [I" pipe-run;T@@ [I" pipes;T@@ [I" pipe_to;T@@ [I" pipette;T@`@ [I" pi_pie;T@'@ [I" pipin;T@@ [I" pipl;T@'@ [I" pippin;T@@ [I" pirate;T@1@ [I"pirate_metrics_agent;T@@@ [I" piRituba;TU;[I" 0.0.666;T@ [I"pirj-pony;T@[ @ [I"pirj-sinatra-contrib;T@@ [I" pismo;T@@ [I"pis_pasep;T@@ [I"pis_pasep_validator;T@'@ [I"pistachio;T@e@ [I" pistol;T@E@ [I" piston;T@~T@ [I"piston_api;T@@ [I"pit;T@n@ [I" pita;T@E@ [I"pitchfork;T@"@ [I" pith;T@@ [I"pius-rdfs;T@@ [I"pius-wmata-hotfix;T@@ [I"piv;T@'@ [I"pivo_flow;TU;[I" 0.4.5.1;T@ [I" pivot;T@@ [I"pivotable;T@@ [I" pivotal;T@@ [I"pivotal_angel;T@@ [I"pivotal-apdex;T@@ [I"pivotal_doc;T@@ [I"pivotal_git_scripts;T@T @ [I"pivotalprinter;T@@ [I"pivotal_reporting;T@x@ [I"pivotalrpx-bcms_feeds;T@@ [I"pivotal_shell;T@@ [I"pivotal-stories;T@@ [I"pivotal_to_pdf;T@ @ [I"pivotal_to_pdf-formatters;T@"@ [I"pivotal_tracker;T@@ [I"pivotal-tracker;T@'I@ [I"pivotal-tracker-client;T@@ [I"pivotal-tracker-console;T@'@ [I"!pivotal_workstation_cookbook;T@'@ [I" pivotcli;T@@ [I"pivoteable;T@@ [I"pivot_table;T@`@ [I" pivotxt;T@`@ [I" piwik;T@E@ [I"piwik_analytics;T@@ [I"piwik-tracker;T@`@ [I"pixarea-compass-themes;T@@ [I"pixbufutils;T@'@ [I" pixel;T@@ [I"pixel_curtain;T@3@ [I"pixelearth;T@} @ [I" pixie;T@'@ [I"pixiedust;T@@ [I" pixii;T@1@ [I" pixiv;T@@ [I" pixmatch;T@@ [I"pixnet-sso;T@"@ [I" pixxer;T@@ [I" pixxxer;T@@ [I" pixy;T@`@ [I"pizdzielnik;T@@ [I" pizzazz;T@@@ [I"pjax_rails;T@@ [I"pjax-rails;T@+@ [I"pjax-rails-for-ruby-18;T@+@ [I" pjson-rb;T@'@ [I"pjstadig-logging;TU;[I" 1.1.4.2;T@ [I"pjstadig-metric_fu;T@0"@ [I" pkcs11;T@@[@|@@ [@|@@ [I"pkcs11_protect_server;T@@ [@@@ [I"pkg;T@'@ [I"pkg-config;T@T @ [I"pkglookup;T@`@ [I"pkg_noisrev;T@E@ [I" pkgr;T@@ [I" pkgwat;T@@ [I"pkg-wizard;T@'@ [I"pk-merb_facebooker;T@"@ [I"pk-merb_sequel;T@@ [I" place;T@`@ [I" placebo;T@@ [I" placed;T@'@ [I"placefinder;T@I@ [I"placehold;T@@ [I"placeholder;T@@ [I"placeholder_image;T@`@ [I"placeholdit;T@E@ [I"placehold_it;T@E@ [I"placekitten;T@@ [I"place_kitten;T@'@ [I"placemaker;T@@ [I" places;T@'@ [I" placid;T@@ [I" plaid;T@@ [I"plaid-rails;T@@ [I"plain_http;T@!@ [I"plain_option_parser;T@@@ [I"plain_record;T@[ @ [I" plan;T@E@ [I" plancast;T@6@ [I" plane;T@'@ [I" planet;T@x@ [I"planet_express;T@V@ [I" p-lang;T@@ [I" plank;T@'@ [I"plantwatchdog;T@E@ [I" plasma;T@6@ [I" plasmoid;T@"@ [I" plastic;T@I@ [I"plastic_wrap;T@'@ [I" platanus;TU;[I" 0.0.49;T@ [I" plate;T@u/@ [I" plateau;T@E@ [I" platem;T@E@ [I" platform;T@1.@ [I" Platform;T@x@ [I"platform1;T@@ [I"platform_helpers;T@6@ [I" plato;T@[@ [I"platonic_config;T@`@ [I" platypus;T@@ [I" play;T@V@ [I" play_api;T@@ [I" PlaydARR;T@@ [I"playerconnect-wsdsl;T@@ [I" playfair;T@'@ [I"playing_cards;T@E@ [I" playit;T@'@ [I" playmo;T@ @ [I"playnicely;T@@@ [I" playpen;T@@ [I" playpi;T@@ [I"play_solder;T@@ [I" playtime;T@@ [I"play-tmdb;T@E@ [I" playwhe;T@@ [I"plc;T@E@ [I"pl-commerce;T@@ [I" please;T@"@ [I"!please-command-alias-manager;T@@?[I"pleaseignore;T@@ [I"pleasevalidate;T@@ [I" plek;T@@ [I" plesk;T@E@ [I" plexify;T@@ [I"plex-ruby;T@@ [I" plexus;T@'I@ [I" pline;T@@ [I" pling;T@@ [I"pling-actionmailer;T@@ [I"pling-mobilant;T@@ [I" plist;T@@ [I" plist4r;T@@ [I" plistr;T@@ [I" plivo;T@X)@ [I"plivohelper;T@@ [I" plllayer;T@'@ [I" plog;T@@ [I"plokijuhygtfrdeswa;T@E@ [I"plot_simple;T@@ [I"plot_statistics;T@@ [I" plow;T@@ [I"plowdawg-carrierwave;T@M+@ [I"ploymorphic_wuid;T@@ [I" plplot;T@@ [I"plsql_deploy_util;T@'@ [I" plucky;T@@ [I"pludoni-capistrano;T@@ [I" plug;T@'@ [I" plugems;T@@ [I"plugems_deploy;T@@ [I"pluggability;T@'@ [I"pluggable;T@@ [I" plugin;T@s@ [I"pluginfactory;T@@ [I"plugin-loader;T@x@ [I"plugin_manager;T@@ [I"plugin_migrations;T@@@ [I"plugin_test_helper;T@@ [I" plugman;T@@ [I"PlugStorm;T@'@ [I" plumber;T@'@ [I" plumbing;T@@ [I"plumnailer;T@+@ [I" plumr;T@@ [I" plunger;T@V@ [I"plupload-rails;T@ @ [I"plupload-rails3;T@n@ [I"pluralize;T@@ [I"pluralizer;T@@ [I"pluralsight;T@@ [I" plurk;T@@ [I" plus;T@E@ [I"plus2_git_tagger;T@@ [I"plus2_seeder;T@@ [I"plus2_version;T@"@ [I"plusminus;T@@ [I" pluto;T@@ [I" plutus;T@@ [I" plymouth;T@@ [I" pmail;T@@ [I" pmap;T@@ [I"pmoran-yammer4r;T@|@ [I"pms;T@@ [I" pmsrb;T@@ [I" pmux;T@`@ [I" pmux-gw;T@6@ [I" pNet-DNS;T@@ [I"png;T@N@ [I" png2swf;T@@ [I" png_font;T@E@ [I" pngqr;T@6@ [I"pngrammar;T@'@ [I" pnslurp;T@@ [I"po;T@@ [I" pocket;T@@ [I"pocket_api;T@E@ [I"pocketknife;T@@ [I"pocketknife_ec2dream;T@|@ [I"pocketknife_windows;T@@ [I"pocket-ruby;T@@ [I"pocketsphinx;T@"@ [I"pod;T@E@ [I" podcast;T@"@ [I"poddb_client;T@@ [I" podgraph;T@|@ [I" podio;T@@ [I" podium;T@@ [I"pod_legal;T@'@ [I"podman-geoip-c;T@@ [I"podman-user-agent;T@u@ [I"poe;T@E@ [I" poet;T@R @ [I" poetics;T@'@ [I" poetize;T@'@ [I" pog19;T@x@ [I" pogo;TU;[I" 2.32.14;T@ [I" point;T@@ [I"point-cli;T@'@ [I" pointme;T@@ [I"points-scraper;T@@ [I" poi_pond;T@@ [I" poirot;T@,@ [I" poisson;T@@ [I" poj_org;T@@ [I" pokan;T@@ [I"pokan-cluster;T@ @ [I" poke_js;T@+@ [I" poker;T@'@ [I"poker_eval;T@@ [I"pokerstats;T@9@ [I" pola;T@'@ [I" polar;T@@ [I" Polar;T@@ [I" polaris;T@x@ [I"polar-renren;T@@ [I" polecat;T@E@ [I" polemic;T@'@ [I" polepin;T@"@ [I" police;T@'@ [I"police-dataflow;T@'@ [I"police-labels;T@'@ [I"police-rack;T@'@ [I"police-vminfo;T@'@ [I" policia;T@E@ [I"policymap_wrap;T@@ [I"poliqarpr;T@ @ [I"poliqarpr-corpus;T@@ [I" polish;T@1@ [I"polish_cell_number_checker;T@'@ [I" polisher;T@R @ [I"polisher-test;T@@ [I" polish-flexive-name-endings;T@|@ [I"polish-number;T@@ [I" polite;T@@ [I" polka;T@E@ [I"polkadots;T@@ [I"polleverywhere;T@@ [I" polling;T@n@ [I" pollock;T@@@ [I" pollster;T@@ [I" polly;T@@ [I"pollyanna;T@@ [I" polonium;T@@ [I"polskie_stringi;T@n@ [I"poltergeist;T@@ [I"polvomenu;T@'@ [I"polyamorous;T@@ [I"polyamory;T@@ [I"polybius-square;T@`@ [I"polychrest;T@"@ [I"polychromasia;T@@ [I" polyglot;T@@ [I"polyglot-cms;T@'@ [I"polyglot_js;T@@ [I" polygon;T@'@ [I"polygonize;T@V@ [I"polyhedra;T@@ [I"polyhedral;T@'@ [I"polyhoraire;T@@ [I"polylines;T@`@ [I"polymorpheus;T@x@ [I"polymorphic_as_table;T@@ [I"polymorphic_identity;T@`@ [I"polymorphic_model;T@n@ [I"polymorphic_select;T@E@ [I"polynomial;T@@ [I"polynomials;T@"@ [I"polypaperclip;T@@ [I" polyrex;TU;[I" 0.8.23;T@ [I"polyrex-calendar;T@ @ [I"polyrex-createobject;T@LN@ [I"polyrex-feed-reader;T@@ [I"polyrex-headings;T@@ [I"polyrex-links;T@|@ [I"polyrex-object-methods;T@@ [I"polyrex-objects;T@"@ [I"polyrex-parser;T@@ [I"polyrex-schema;T@@ [I"polyrex-search;T@@ [I"polyrex-xslt;T@@ [I" polytalk;T@E@ [I"pom;T@ @ [I" pomade;T@I@ [I"pomegranate;T@B@ [I" pomelo;T@@ [I" pomo;T@@ [I" pomodoro;T@@ [I"pomodoro_timer;T@"@ [I"pomo-ruby;T@@ [I" pompom;T@'@ [I"pompompom;T@;@ [I" ponch;T@E@ [I" pondasee;T@@ [I" ponder;T@@ [I" pong;T@@ [I" poniard;T@'@ [I" pontifex;T@@ [I" pony;T@@ [I"pony-express;T@' @ [I" ponyhost;T@@ [I"pony-test;T@@ [I"pool_balancing;T@@ [I" poole;T@E@ [I"pooled-curb;T@@ [I"poolparty;T@t@ [I" pools;T@+@ [I"poopypants;T@'@ [I"pop;T@'@ [I" popcorn;T@@ [I"popcornjs-rails;T@N@ [I" popcount;T@'@ [I" pope;T@E@ [I" popen4;T@@@ [I" POpen4;T@+@[@@+@ [I"POpen4-mingw;T@1@ [I" popfly;T@@ [I" popit;T@E@ [I" popo;T@I@ [I" poppins;T@@ [I" poppler;T@9@ [@@9@ [I"poppycock;T@'@ [I" popshops;T@@ [I" popspell;T@@ [I" popstar;T@HH@ [I" popthis;T@[ @ [I" populate;T@E@ [I"populate-me;T@@ [I"population;T@@ [I"populator;T@@ [I"populator3;T@@ [I" popup;T@V@ [I" porch;T@E@ [I" pori;T@"@ [I"pork_sandwich;TU;[I" 0.4.23;T@ [I" porn;T@@ [I" poro;T@@ [I" port;T@- @ [I"portablecontacts;T@@ [I"portable-hole;T@@ [I"portable_model;T@@ [I" portal;T@'@ [I"portalign;T@`@ [I"portal-ruby;T@E@ [I"port-a-query;T@`@ [I"portarius;T@E@ [I" porteo;T@@@ [I" porter;T@@ [I"porter2stemmer;T@@ [I" portera;T@+@ [I" portero;T@@ [I"porter_stemmer;T@E@ [I"portfolio;T@' @ [I" porth;T@E@ [I" porthole;T@^@ [I"porth-plist;T@'@ [I" portmidi;T@@ [I"portpublisher;T@E@ [I"port_upgrade;T@@@ [I" portvcs;T@@ [I" poscvt;T@@ [I" pose;T@@ [I" poser;T@W@ [I" poseur;T@`@ [I" posifile;T@[@ [I"positionable;T@@ [I"positioned;T@E@ [I"position_inspector;T@@ [I"positionrange;T@@ [I" posix;T@@ [I"posixlock;T@'@ [I" posix_mq;T@O@ [I"posix-semaphore;T@@ [I"posix-spawn;T@@ [I"posixtimer;T@!@ [I" poslavu;T@E@ [I"possessify;T@@ [I"possessive;T@@ [I" post2irc;T@' @ [I" postablr;T@'@ [I" postage;T@>x@ [I"postageapp;TU;[I" 1.0.17;T@ [I"pos-tagger;T@@ [I" postal;T@@ [I"postalmethods;T@T @ [I" postbin;T@1@ [I" postbox;T@@ [I" postcode;T@E@ [I"post_code;T@'@ [I"postcodeanywhere;T@@ [I"postcode_anywhere;T@[ @ [I"postcodeanywhere_banking;T@E@ [I"post_commit;T@@@ [I"post-em-all;T@`@ [I"posterboard;T@@ [I"posterboy;T@'@ [I"posterous;T@ @ [I"posterous_api;T@@ [I"posterous-lacquer;T@[@ [I"posterrrrous;T@E@ [I"postfix_admin;T@@ [I"postfix-xforward;T@6@ [I" postful;T@@ [I"postgis_adapter;T@@ [I" postgres;T@@ [I"postgres-copy;T@J@ [I"postgres_ext;T@@ [I" postgres_loose_table_counts;T@'@ [I"postgres-pr;T@y@ [I"postgres-pr-opt;T@"@ [I"postgresql_cursor;T@x@ [I"postgresql_lo_streamer;T@`@ [I"postgres_sequence_support;T@@ [I"post_haste;T@@ [I" postie;T@@ [I" postini;T@`@ [I"post_install;T@E@ [I" post-it;T@@ [I" postly;T@I@ [I" postmail;T@'@ [I" postman;T@@ [I"postman_pat;T@@ [I" postmark;T@@ [I"postmarkdown;T@@ [I"postmark-mitt;T@@ [I"postmark-rails;T@@ [I"postmark_spamcheck;T@E@ [I"postmaster_general;T@6@ [I"post-modern;T@@ [I"postnummer;T@@ [I"postnummer_norge;T@E@ [I" posto;T@x@ [I"postoffice;T@@ [I"post_office;T@@ [I"post_policy;T@'@ [I" postpone;T@@ [I"postrank-api;T@x@ [I"postrank-uri;T@P@ [I"post_remote_log;T@@ [I"post_to_s3;T@E@ [I" postview;T@' @ [I" posty;T@@ [I" potato;T@ @ [I"potatosalad-carrierwave;T@@ [I"potatosalad-csv_builder;T@+@ [I"%potatosalad-mongoid_acts_as_tree;T@ @ [I" potemkin;T@'@ [I"pothoven-attachment_fu;T@} @ [I"po_to_json;T@"@ [I" potracer;T@@ [I" potrubi;T@'@ [I" pottery;T@6@ [I"pound_config_generator;T@E@ [I" pounder;T@@ [I" poundie;T@+@ [I"poundie-ffm;T@@ [I"poundie-last-tweet;T@@ [I"poundie-pic;T@E@ [I"poundie-shake-shack;T@E@ [I"poundie-urban-dictionary;T@'@ [I"poundie-weather;T@E@ [I"poundie-wikipedia;T@'@ [I"poundie-wozzeck;T@E@ [I" poundpay;T@x@ [I"pow;T@@ [I" powa_api;T@@@ [I"pow-client;T@@@ [I"powcloud-firewall-agent;T@`@ [I"powcloud-insurance;T@@ [I"powcloud-sprinkle;T@@ [I"pow-debug;T@@ [I"pow_debugger;T@@ [I" powder;T@@ [I" powerbar;T@@ [I"powercontroller9202;T@@ [I"powerdns_pipe;T@@ [I"power_enum;T@[@ [I"poweriq_client;T@@ [I"powerline;T@@ [I" poweron;T@@ [I"power_reviews;T@@ [I"powershop;T@'@ [I"powertip-rails;T@'@ [I" powerup;T@@ [I" powify;T@-@ [I"pow-index;T@n@ [I" powirb;T@@ [I" powncer;T@@@ [I"pow_proxy;T@@ [I" powser;T@@ [I"pox_paginate;T@[@ [I"pp-adaptive;T@"@ [I" ppane;T@`@ [I" pparams;T@@ [I"ppc_logic;T@@ [I"pp-colour;T@@ [I"ppcommand;T@+@ [I"pp-contacts;T@@ [I"ppds-libs;T@@ [I"ppe-4store-ruby;T@@ [I" ppe_api;T@@ [I"ppe-dbpediafinder;T@@ [I"ppe-georuby;T@@ [I"ppe-panoramio;T@@ [I"ppe-postgis-adapter;T@@ [I"ppe-ruby-geonames;T@@ [I" ppgit;T@n@ [I"ppl;T@+@ [I" Pport;T@`@ [I"ppp;T@@ [I" pprb;T@- @ [I" ppscr;T@@ [I"pqa;T@@@ [I" pqdl;T@@ [I" pqueue;T@@ [I"pr0d1r2-capybara;T@@ [I"Pr0d1r2-geokit;TU;[I" 1.3.2.10;T@ [I" Pr0d1r2-resource_controller;T@$@ [I" pr2gpx;T@@ [I"prag_events;T@@ [I"pragmatic;T@`@ [I"pragmatic_tut_studio_game;T@@ [I"prag_prog_game;T@@ [I"pragprog_sales_chart;T@E@ [I" prague;T@E@ [I" prak;T@@ [I"prakhar_string_extend;T@'@ [I" praline;T@+@ [I" prarupa;T@@@ [I"'prathe_devise_ldap_authenticatable;T@@ [I"prathe_net-ldap;TU;[I"0.2.20110317223538;T@ [I"prathe-net-ldap;T@@ [I" Pratt;T@1@ [@@1@ [I" prawml;T@`@ [I" prawn;T@&@ [I"prawn-blank;T@E@ [I"prawn_commander;T@@@ [I"prawn-core;T@@ [I"prawn-fast-png;T@@ [I"prawn-fillform;T@@ [I"prawn-flexible-table;T@@@ [I"prawn-format;T@@ [I"prawn-graph;T@"@ [I" prawn-js;T@@ [I"prawn-labels;TU;[I" 0.11.4.0;T@ [I"prawn-layout;T@@ [I"prawn_oval_text;T@[@ [I"prawn_plus;T@@ [I"prawn-print;T@'@ [I" prawn-qr;T@E@ [I"prawn-qrcode;T@@ [I"prawn_rails;T@@ [I"prawn-rails;T@E@ [I"prawn-security;T@@ [I"prawn_shapes;T@[@ [I"prawn-svg;TU;[I" 0.12.0.3;T@ [I" prawnto;T@`@ [I"prawnto_2;T@[@ [I"pre;T@E@ [I" preamble;T@E@ [I"precedence;T@@ [I" precious;T@'@ [I"precious_cargo;T@'@ [I"preciousss;T@ @ [I"pre-commit;T@@ [I"preconditions;T@@ [I"precssious;T@`@ [I"predicated;T@@ [I"predicates;T@|@ [I"preferable;T@@ [I" prefered;T@@ [I"preference_fu;T@@ [I"preferences;T@@ [I"prefetch-rspec;T@|@ [I"prefinery;T@@@ [I" prefix;T@`@ [I"prefix-cmd;T@!@ [I"prefixed-log-formatter;T@@ [I" prefixr;T@E@ [I"preflight;T@@ [I"preforker;T@`@ [I"preformatter;T@@ [I" pregel;T@'@ [I" preheat;T@@ [I"preheatable_cache;T@@@ [I"pre-johnson;T@O@ [I" preload;T@@@ [I"preload_counts;T@E@ [I" prelude;T@@ [I" prem;T@@ [I"premailer;T@@ [I"premailer-plus;T@6@ [I"premailer-rails3;T@ @ [I" prenus;T@@ [I" prep;T@x@ [I" prepare;T@'@ [I" prepend;T@|@y;[@ @|@ [@ @|@1[I"prependfile;T@@ [I"preplay_hiredis;T@_@ [I"preposterous;T@@ [I" prepro;T@|@ [I"preprocessor;T@@ [I" prequel;T@'@ [I"presechute;T@`@ [I" presence;T@@ [I"$presence_at_least_one_validator;T@@ [I" present;T@`@ [I"presentable;T@6@ [I"presenter;T@`@ [I"presenter-pattern;T@@ [I"present_foo;T@@ [I"presenting;T@+@ [I"present-rails;T@'@ [I" presents;T@@ [I" press;T@&@ [I" presser;T@@@ [I"presskit-apn_on_rails;T@@ [I"pressletter;T@E@ [I" pressman;T@'@ [I"presspass;T@@@ [I"prestoscript;T@'@ [I" pretty;T@@ [I"pretty_args;T@@ [I"pretty_aws;T@@ [I"pretty_chat;T@'@ [I"PrettyComment;T@6@ [I"pretty_diff;T@' @ [I"pretty-diff;T@+@ [I"PrettyException;T@@ [I"pretty_face;T@@ [I"pretty-fsm;T@!@ [I"pretty_gsl;T@E@ [I"pretty_match_data;T@@ [I"pretty_param;T@@ [I"prettyphoto-rails;T@`@ [I"prettyplease;T@@ [I"prettypretty;T@`@ [I"pretty_table;T@@ [I"pretty_test;T@@ [I"pretty_text;T@@ [I"pretty_time;T@I@ [I"pretty-xml;T@`@ [I"prevent_destroy;T@'@ [I"prevent_destroy_if_any;T@@ [I" preview;T@E@ [I"preview_add;T@E@ [I" previews;T@@ [I" prezio;T@"@ [I"prezjordan-toto;T@`@ [I"pr_geohash;T@@ [I" priam;T@`@ [I"priceable;T@@ [I" pricecut;T@@ [I" prickle;T@@ [I"priehlazx;T@"@ [I" priest;T@n@ [I" prigner;T@@ [I"priit-sprockets-rails2;T@'@ [I" prim;T@@ [I"primadoro;T@'@ [I" primary;T@E@ [I" primate;T@'@ [I" prime;T@'@ [I"prime_finder;T@@ [I"primehosting;T@E@ [I"prime_iterator;T@s@ [I"prime-numbers;T@'@ [I" primer;T@I@ [I" primerjs;T@E@ [I"primitive_array;T@'@ [I" primus;T@@ [I" princely;T@@ [I"prince-ruby;T@@ [I" princess;T@@ [I" print;T@@ [I"print_client;T@@ [I" printer;T@@ [I"printing_labels;T@E@ [I"printing_press;T@I@ [I"print_json_response;T@@ [I"print-links;T@@ [I" printr;T@@ [I"print_square;T@E@ [I"prioritizable;T@@ [I"prioritized_ar_mailer;T@@ [I"!prioritized_ar_mailer_rails3;T@@ [I"priority_order_scopes;T@E@ [I"priority_queue;T@@ [I"PriorityQueue;T@@@ [I"priority_test;T@"@ [I" prism;T@@ [I" prisma;T@,@ [I" prismpay;T@@ [I"prisoners-dilemma;T@'@ [I" prissy;T@@ [I"privacy_mask_tools;T@@ [I"private_attr;T@`@ [I"private-bam;T@@ [I"private-dumper;T@@ [I"private_event;T@@ [I"private_mail;T@"@ [I"privatepaste;T@@ [I"private_please;T@E@ [I"private_pub;T@@ [I"privileged;T@`@ [I" prizm;T@E@ [I"prj;T@'@ [I"prlbackup;T@@ [I"prm;T@@ [I"probability;T@@ [I" probe;T@@ [I" probject;T@@ [I" proby;T@ @ [I"proby_notifier;T@@ [I"proc2json;T@'@ [I"procbuddy;T@E@ [I"proc-cache;T@@@ [I"procedural_transactions;T@'@ [I"process_builder;T@@ [I"process-builder;T@@ [I"process_command;T@@ [I"process_control;T@@ [I"processingjs;T@'@ [I"processingjs-source;T@@ [I"processit;T@@ [I"process_memory;T@'@ [I"process_mgt;T@@ [I"process_monitor;T@@ [I"process-monitor;T@@ [I"ProcessorPool;T@@ [I"ProcessPilot;TU;[I"2.0.0.20120301;T@ [I"process_pool;T@6@ [I"process-query-language;T@@ [I" processr;T@Q@ [I"process_shared;T@1@ [I"process_starter;T@G @ [I"processwanker;T@@ [I"process_watcher;T@R @ [I"processwrapper;T@'@ [I"proc-extra;T@"@ [I"procfile_split;T@@@ [I"proc_for_case_equality;T@@ [I" procfs;T@'@ [I" procman;T@N@ [I" procmon;T@@ [I"procrastinate;T@@ [I"procreate;T@@ [I"proc_rollback;T@'@ [I"proc-throttle;T@@ [I" proctor;T@"@ [I"proc-wait3;T@ @ [I"producer_consumer;T@@ [I" product;T@'@ [I"producteev;T@;@ [I"production_chain;T@@ [I"production_log_analyzer;T@@ [I"production-sync;T@1@ [I"productwars-api;T@@ [I"product_widgets;T@@ [I" proevo;T@,@ [I"profanalyzer;T@N@ [I"profanity_filter;T@`@ [I" proffer;T@ @ [I" profig;T@Q@ [I"profigure;T@"@ [I" profile;T@@ [I"profile_require;T@@ [I"profitably-abingo;T@@@ [I"profitably-km;T@x@ [I"profitbricks;T@e@ [I"profligacy;T@@[I"progenitor;T@@ [I" programr;T@'@ [I" progress;T@.@ [I"progressbar;T@&@ [I"progress_bar;T@x@ [I"progress_bar_snapshot;T@"@ [I"progressbar_zobar;T@7@ [I"progression;T@@ [I"progressions-basepath;T@v@ [I"progressions-g;T@ @ [I"progressions-postly;T@I@ [I"progressions-translator;T@@ [I"progressive_io;T@@ [I"progress-logger;T@@ [I"progress-meter;T@@ [I"progress-monitor;T@@ [I"progress_upload_field;T@'@ [I"progstr-filer;T@W@ [I"progstr-ruby;T@ @ [I" proj4rb;T@@1[@@@.[@@@[@@@ [@@@ [I" project;T@@ [I"project_btorretta;T@@ [I"projectdx_activemerchant;TU;[I"1.7.1.20100817.3;T@ [I"projectdx_pipeline;T@@ [I"projectdx-subdomain_routes;T@@ [I"project-health;T@@ [I"project-honeypot;T@@@ [I"projectlocker_errata;T@E@ [I"projector;T@@ [I"project-root;T@@ [I"project_scout;T@E@ [I"project_templater;T@@@ [I"projekktor-rails;T@'@ [I" projen;T@`@ [I" projit;T@@ [I" projmgr;T@@ [I" prologue;T@@ [I"prometheus;T@+@ [I"promiscuous;T@'@ [I"promiscuous-newrelic;T@|@ [I" promise;T@@ [I"promotion;T@@ [I"ProMotion;T@@ [I" prompt;T@u@ [I" prompter;T@|@ [I"promptula;T@@ [I"pronghorn;T@E@ [I"pronounce;T@'@ [I" proof;T@@ [I"prooflink_connect;T@K,@ [I" prop;T@@ [I"prop2redis;T@@ [I"propaganda;T@@ [I"propagate;T@@ [I" propel;T@"@ [I"proper_caser;T@'@ [I"proper_process_api_ares;T@'@ [I"properties;T@@ [I"properties-ruby;T@"@ [I" property;T@J@ [I"property_bagged;T@@ [I"propertybuilder;T@@ [I"property_sets;T@&@ [I" property_synthesize_dealloc;T@@ [I" proposal;T@@ [I" propr;T@@ [I" props;T@@ [I"proscribe;T@@ [I" prosopon;T@@ [I"prospecto;T@@ [I" prosper;T@@ [I"prosto_cache;T@6@ [I"protected;T@@ [I"protected_parent;T@@ [I"protective;T@@ [I"protect_via_honeypots;T@@ [I" protest;T@@ [I"protester;T@1@ [I"protest-rails;T@@ [I" proteus;T@- @ [I"proteus_client;T@n@ [I" protk;T@x@ [I" proto;T@n@ [I" protobuf;T@r@ [@@r@[I"protobuf-activerecord;T@u"@ [I"protobuf-closure-library;T@1@ [I"protobuffer;T@@ [I"protobuf-jars;TU;[I" 2.4.1.1;T@[I"protobuf-rspec;T@@ [I" protocol;T@- @ [I"protocolist;T@@ [I"protoform;T@@@ [I" protoj;T@@ [I"protojson;T@@ [I"protokoll;T@@ [I"*protolif-acts_as_taggable_on_steroids;T@ @ [I"protolink;T@@ [I" protomsg;T@@ [I" proton;T@@ [I"protoncouch;T@@ [I"ProtonCouch;T@@ [I"protoplasm-blocking-client;T@@ [I"protoplasm-client;T@'@ [I"protoplasm-em-server;T@@ [I"protoplasm-server;T@'@ [I"protopuffs;T@@ [I"prototype;T@O@ [I"prototype-rails;T@n>@ [I"protovis-rails;T@@ [I"protractor;T@'@ [I" proudhon;T@@ [I" proutils;T@@ [I"prova-vhm-raw2xml;T@@ [I"prove_uru;T@`@ [I" provideal-migration-helpers;T@x@ [I"provideal-plugin-utils;T@6@ [I"providence;T@@@ [I" provider;T@'@ [I"provider_one;T@@ [I"provincias;T@"@ [I" provise;T@'@ [I"provision;T@'@ [I"provisional;T@@ [I"provisional-repoman;T@@ [I"provisioner;T@E@ [I"provisioning-api;T@@ [I" proviso;T@@ [I"provizioning;TU;[I" 0.9.18;T@ [I" prowl;T@6@ [I" prowler;T@ @ [I"prowl-exception;T@@ [I"prowlnotify;T@I@ [I" prowlr;T@I@ [I" prowly;T@@ [I" proxeze;T@u@ [I" proxie;T@`@ [I" proxies;T@@ [I"proxies-scanner;T@E@ [I"proxifier;T@@ [I" proxify;T@'@ [I" proximo;T@@ [I" proximus;T@E@ [I"proxinacci;T@@ [I" proxy;T@q@ [I"proxy_for_template;T@n@ [I"proxylocal;T@@ [I"proxymachine;T@u"@ [I"proxy_machine;T@@ [I"proxymock;T@@ [I"proxy-object;T@@ [I"proxy_party;T@I@ [I"proxy_request;T@@ [I"proxy-server;T@n@ [I"proxy_stack;T@@ [I" prreport;T@@ [I" prspec;T@`@ [I" prss;T@@ [I" prtg;T@@ [I"pru;T@1@ [I"pruby-net-ldap;T@I@ [I" pruim;T@`@ [I" prune;T@"@ [I"prusswan-forem;T@E@ [I"prx_client;T@6@ [I"pry;T@@[@@@1[@@@ [@@@y;[I" pryable;T@6@ [I"pry-awesome_print;TU;[I" 9.6.5;T@ [I" pry-bot;T@'@ [I"pry-buffers;T@@ [I"pry-capture;T@@ [I"pry-clipboard;T@`@ [I"pry-coolline;T@|@ [I" pry-de;T@@ [I"pry_debug;T@'@ [I"pry-debugger;T@@ [I"pry-debundle;T@6@ [I"pry-developer_tools;T@`@ [I"pry-disasm;T@'@ [I" pry-doc;T@"@ [I"pry-docmore;T@"@ [I"pry-editline;T@@ [I" pry-em;T@@ [I"pry-exception_explorer;T@@ [I" pry-full;T@N@ [I"pry-full18;T@R @ [I" pry-gist;TU;[I" 5.1.12;T@ [I" pry-git;T@@ [I"pry-github;T@E@ [I" pry-hack;T@@ [I"pry-highlight;T@'@ [I"pry-multi_debugger;TU;[I" 4.8.15;T@ [I" pry-nav;T@@ [I" pry-note;T@ @ [I"pry-padrino;T@@@ [I" pry-plus;T@@ [I"pry-popularity;T@@ [I"pry-pretty-numeric;T@`@ [I"pry-rails;T@I@ [I"pry-remote;T@1@ [I"pry-remote-auto;T@@ [I"pry-remote-em;T@n@ [I"pry-rescue;T@X@ [I"pry-stack_explorer;T@@ [I"pry-syntax-hacks;T@@ [I"pry-theme;T@6@ [I"pry-vterm_aliases;T@@ [I"przelewy24_payment;T@6@ [I" pr-zlib;T@@ [I"ps;T@V@ [I"psc;T@@ [I"pseudocephalopod;T@@ [I"pseudo_date;T@+@ [I"pseudohelp;T@'@ [I"pseudo_model;T@`@ [I"pseudo-terminal;T@E@ [I"pseudoxml;T@@ [I" ps_f;T@@ [I"psm;T@@@ [I"psn;T@"@ [I"psn_api_ar;T@@ [I"psn_trophies;T@E@ [I" pspec;T@@ [I"psp_hello_world;T@@![I" psp_task;T@@ [I" psql-cm;T@I@ [I" psquared;T@'@ [I" ps-smurf;T@N@ [I"pst;T@E@ [I" pstizzle;T@@ [I"ps-voodoo;T@V@ [I" pswincom;T@@ [I" psych;T@@ [I"psychedelic;T@'@ [I" psychic;T@@@ [I" psycho;T@@ [I"psychomail;T@'@ [I"psyho_juicer;T@@ [I"psyho-skype;T@@ [I"psyho-stalker;T@@ [I"pt;T@M+@ [I"ptb;T@'@ [I"ptc_datamapper;T@E@ [I" pt-flow;T@@ [I"ptj;T@`@ [I" ptools;T@9@ [@r@@ [@r@@[I" Ptrace;T@' @ [I" ptus;T@@ [I"puavo_authentication;T@,@ [I"puavo-client;T@"@ [I"puavo_organisation;T@"@ [I"puavo-view-helpers;T@@ [I"pub;T@@ [I" pubba;T@@ [I" pubbee;T@@ [I" pubby;T@E@ [I" pubdraft;T@E@ [I" pubgen;T@I@ [I" pubkey;T@'@ [I"public_activity;T@Y@ [I"publicious;T@@ [I"publicize;T@'@ [I"public_pages;T@`@ [I"public_rescue;T@@ [I" public_service_announcement;T@`@ [I"public_suffix;T@N@ [I"public-suffix-list;T@@ [I"public_suffix_service;T@e@ [I"publinator;T@@ [I" publish;T@`@ [I"publish2cloud;T@`@ [I"publishable;T@@ [I"publisher;T@x@ [I"publishing_logic;T@@ [I" publishr;T@e@ [I"publishus;T@@ [I"pubmed_search;T@x@ [I" pubnub;TU;[I" 3.3.0.2;T@ [I"pubnub-ruby;T@@ [I" pubsub;T@@ [I" pub_sub;T@'@ [I"pubsubhubbub;T@@ [I" puer;T@@ [I" puff;T@@ [I" puffer;T@`@ [I"puffer_pages;T@`@ [I"puffing-billy;T@6@ [I"puggernaut;T@@ [I"pugnacious_juices;T@@ [I" puke;T@E@ [I" Puke;T@E@ [I" pukka;T@@ [I" pull;T@E@ [I" pullall;T@@ [I"pullcrusher;T@'@ [I" puller;T@`@ [I"pullermann;T@@ [I" pulley;T@"@ [I" pullme;T@'@ [I" pullr;T@6@ [I" pulp;T@@ [I"pulp_simple;T@@ [I" pulsar;T@@ [I" pulse;T@@ [I" Pulse;T@ @ [I"pulseaudio;T@V@ [I"pulse-meter;T@@ [I" pulse-meter-client-backport;T@+@ [I"pulse-meter-rails;T@+@ [I" puma;T@@[@@@ [I" pummel;T@@ [I" pump;T@'@ [I" pumpkin;T@'@ [I" punch;T@E@ [I"punchblock;T@@ [I"punchblock-console;T@@ [I"punchcard;T@@ [I" puncher;T@E@ [I"punchfork;T@n@ [I"punching_bag;T@@ [I" punchr;T@@ [I" puncsig;T@'@ [I" punctual;T@'@ [I" pundit;T@@ [I"punkt-segmenter;T@e@ [I"punndit_youtube;T@9@ [I"puntopagos;T@$@ [I" puny;T@@ [I"punycode4r;T@@ [I" pupcap;T@@ [I" pupil;T@@ [I" puppet;T@@ [I"puppet_agent_mgr;T@V@ [I"puppetdashboardmonitor;T@"@ [I"puppeteer;T@'@ [I"puppetlabs_spec_helper;T@x@ [I"puppet-lint;T@@ [I"puppet-module;T@@ [I"puppet_module_spec_helper;T@@ [I"puppet-parse;T@E@ [I"puppet-pip;T@@ [I"puppet-profiler;T@E@ [I"puppet-pssh;T@@ [I"puppet-qatools;T@x@ [I"puppet-rundeck;T@n@ [I"puppetsdb;T@@ [I"puppet-testing;T@@ [I" puppi;T@@ [I" pupu;T@!@ [I" purchase;T@D@ [I"purdytest;T@@ [I" pure;T@I@ [I"pure-bootstrap-rails;T@t@ [I"pure_function;T@@ [I"puremotion;T@`@ [I" puremvc;T@@ [I"puremvc-as3;T@z@ [I"puremvc-gen;T@@@ [I"puremvc-ruby;T@@ [I"PureMVC_Ruby;T@@ [I" puret;T@@ [I"purevolume;T@@@ [I"purgeable;T@@ [I" purobu;T@@ [I" purple;T@'@ [I"purple_hash;T@@ [I"purple-lang;T@'@ [I"purplepkg;T@@ [I"purple_ruby;T@h@ [I"purple_shoes;TU;[I" 0.7.166;T@ [I"purp-ruby-gmail;T@I@ [I" purse;T@`@ [I" push;T@'@ [I"push2heroku;T@"@ [I"push-apns;T@@ [I"push-c2dm;T@@ [I"push-client;T@@ [I"push-core;T@@ [I"pushdeploy;T@K,@ [I" push_dir;T@@ [I" pusher;T@)@ [I"pusher-client;T@@ [I"pusher-client-merman;T@@ [I"pusher-client-nc;T@@ [I"pusher-fake;T@x@ [I"pusher.io;T@@ [I"pusher_rails;T@[@ [I"pusher-rails;T@@ [I" pushesus;T@E@ [I" push-gcm;T@@ [I"push_handler;T@@ [I" pushify;T@@ [I" pushio;T@E@ [I" pushit;T@'@ [I" pushkin;T@'@ [I"pushlayer;T@e@ [I" pushlet;T@[@ [I" pushmeup;T@@@ [I"push-notify;T@@ [I" pushover;T@H@ [I"pushpop-rails;T@@ [I"push_safety;T@'@ [I"pushwagner;T@[@ [I" pushy;T@6@ [I"pushy-api;T@E@ [I"puts_finder;T@@ [I"putsinator;T@@ [I" putsjs;T@@ [I"puts_pyramid;T@'@ [I" putsy;T@@ [I" putz;T@@ [I" puzzle;T@@ [I" puzzled;T@e@ [I"puzzle_reader;T@@ [I"puzzle_selector;T@@ [I" puzzlize;T@'@ [I"pv;T@= @ [I"pvn;T@@ [I"pvpgn-twilight;T@@ [I" pvwatts;T@@ [I"pvwatts-ee;T@+@ [I"pw;T@@ [I" pwdcalc;T@@ [I" pwdhash;T@@ [I"pwdpractise;T@`@ [I" pwfoo;T@@@ [I"pwl;T@@ [I"pwm;T@N@ [I"pwnalytics_client;T@+@ [I"pwnash-mongo_mapper;T@u/@ [I"pwnbus-configdb;T@@ [I"pwnix-api-client;T@@ [I"pwnstyles_rails;T@'@ [I"pwqgen.rb;T@"@ [I" pwrake;T@@ [I" pwrb;T@@ [I"pws;T@@ [I"pwsafe-agent;T@E@ [I" pwscf;T@@ [I" pwsqr;T@`@ [I"pwt_pdfrenderer;T@'@ [I" pwup;T@V@ [I" pxpay;T@@ [I" pyapns;T@@ [I" pyapns2;T@@ [I"pybossa-api;T@'@ [I" pygg;T@E@ [I"pygmentize;T@@ [I"pygments.rb;T@@ [I" pylon;T@^@ [I" pyradise;T@@ [I"pyramid_scheme;T@@ [I"pyrat-chronic;T@@ [I" pyre;T@@ [I" pyrite;T@$@ [I"pythonconfig;T@@ [I"pyu-activesp;TU;[I"0.0.4.1.3;T@ [I"pyu-ntlm-http;T@@ [I"pyu-ruby-sasl;T@m@ [I"pyu-savon;TU;[I" 0.7.9.3;T@ [I"pyu-xmpp4r-simple;T@@ [I"q;T@@ [I"Q;T@'@ [I"q4m;T@V@ [I"qaddy-client;T@"@ [I" qadmin;T@@ [I"qa_release_tasks;T@@ [I"qa_robusta;T@g@ [I" qbert;T@@ [I" qbfc;T@@[@A @@ [I" qbwc;T@@ [I"qc-mailer;T@E@ [I" qcmd;T@@ [I" qcms;T@@ [I" qcontent;T@@ [I" qcore;T@N@ [I" qcourses;T@!@ [I"qcumberless;T@@ [I" q_deploy;T@n@ [I" qdml;T@'@ [I" qdox;T@&|@ [I"qe;T@@ [I"qed;T@>@ [I"qedproject;T@x@ [I"qemu-toolkit;T@@ [I"qer;T@@ [I"qft;T@@ [I"qfunction;T@1@ [I" qhandout;T@@ [I"qif;T@@ [I" qiflib;T@@ [I" qiita;T@@ [I"qiita-kachick;T@@ [I"qiita_mail;T@@ [I"qik-loops;T@i6@ [I" qilin;T@@ [I" qiniu-rs;T@c@ [I" qiniu-s3;T@@@ [I"qio;T@'@ [I" qiwi;T@@ [I"q-language;T@@ [I" qless;T@' @ [I"qless-campfire;T@e@ [I"qless-growl;T@e@ [I"qlg;T@@ [I" qlive;T@@ [I"qlive-rails;T@@ [I"qlive-rspec;T@@ [I" qlzruby;T@@@ [@ @@@[I""qm-acts-as-generic-controller;T@I@ [I"qnotifier;T@@ [I"qoobaa-oauth;T@@ [I"qoobaa-opensocial;T@I@ [I"qor_cache;T@@ [I" qor_dsl;T@@ [I"qor_layout;T@@ [I" qor_test;T@@ [I" qpid;T@6@ [I"qpid_messaging;TU;[I" 0.18.2;T@ [I"qpid_proton;T@'@ [I" qplus;T@E@ [I" qqface;T@`@ [I"qqfileuploader;T@'@ [I"qq-pengyou;T@@ [I" qqwry;T@@ [I"qr;T@@ [I" qr4r;T@@ [I" qrcli;T@'@ [I" qrcoder;T@6@ [I" qrcx;T@@ [I"qrda_generator;T@@ [I"qrencoder;T@@ [I"qrp;T@@ [I" qrpc;T@e@ [I"qrscanner;T@@ [I" qrtools;T@@ [I"q-ruby-driver;T@@ [I"qrz-callbook;T@'@ [I" qsagi;T@E@ [I" qserver;T@@ [I" QSID;T@@ [I"qst_client;T@@ [I" qswarm;T@@ [I"qtbindings;TU;[I" 4.8.3.0;T@ [@ @ @ [I"qt_connect;T@@ [I" qtext;T@^%@ [I"qtjruby-core;T@@[I" qtool;T@@ [I"q_translate;T@'@ [I"qtrefmovie;T@`@ [I" qtruby4;T@@[I" qtunes;T@n@ [I"qu;T@@ [I"quacks-like;T@@ [I" quacky;T@@ [I"quacky-charts;T@n@ [I" quaid;T@'@ [I"qu-airbrake;T@@ [I" quake;T@@ [I"quality_extensions;T@@ [I"quality-measure-engine;T@ @ [I"quality_rdoc;T@'@ [I"qualitysmith_extensions;TU;[I" 0.0.64;T@ [I" quant;T@@ [I" quantify;T@n>@ [I"quantify-amee;T@@ [I"quantipay-acts_as_secure;T@@ [I" quantity;T@@@ [I"quantitymanager;T@' @ [I" quantize;T@E@ [I"quantum_leap;T@@ [I" quanty;T@N@ [I"quapistrano;T@@ [I"quarantino;T@E@ [I" quarry;T@@ [I"quartermaster;T@@ [I"quarter_system;T@@@ [I"quarter_time;T@@ [I"quartz-dotnet;TU;[I"1.0.2.0.20100811;T@ [I"quartz-jruby;T@`@ [I" quasi;T@@ [I"qubole_rails_sql_views;T@@ [I"qu-delayed;TU;[I" 0.1.4.2;T@ [I" quebert;T@ё@ [I"queencheck;T@@ [I"Queen_Of_Diamonds;T@R @[I" quercle;T@'@ [I"querinator;T@E@ [I"queryable_with;T@@ [I"queryalize;T@'@ [I"query-analyzer;T@`@ [I"querybuilder;T@T @ [I"query_diet;T@x@ [I"query-nyc;T@'@ [I"queryparams;T@@ [I"queryparser;T@@ [I"query_reviewer;T@1@ [I"querystring;T@@ [I"query_string_filter;T@1@ [I"query_string_interface;T@@ [I"query_string_parser;T@`@ [I"query_trace;T@`@ [I"query_trace3;T@`@ [I"query_tracer;T@@ [I"query_trace-rails-3;T@`@ [I" quest;T@@ [I"questionable;T@@ [I"question_chain;T@E@ [I"questionnaire;T@E@ [I"quest_search;T@@ [I"queue_bundle;T@E@ [I"queue_classic;T@ @ [I"queue_classic-later;T@@ [I" queued;T@@ [I"queue_dispatcher;T@ʰ@ [I"queued_mail;T@@ [I"queue_fetcher;T@@ [I"queuehash;T@@ [I"queueing_proxy;T@@ [I"queue_map;T@D@ [I"queue_to_the_future;T@@ [I"qu-exceptional;T@@ [I"quez_locodriver;T@@ [I"'qui-automatic-form-required-fields;T@@ [I" quic_cms;T@+@ [I"quick_attr;T@"@ [I"quick_auth;T@@ [I"quickbase;T@@ [I"quickbase_client;TU;[I" 1.0.22;T@ [I"quickblox;T@!@ [I"quickbooks;T@@ [I"quickbooks_api;T@@ [I"quickbooks_web_connector;T@@ [I"quick-bundler;T@@ [I"quick_captcha;T@@ [I"quick_cert;T@@ [I"quick_cipher;T@'@ [I"quickcite;T@ @ [I"quickconnect;T@@ [I"quick-debug;T@"@ [I"quickeebooks;T@@ [I" quicken;T@@ [I"quick-etl;T@@ [I"quick_file;T@N@ [I"quick-generators;T@@ [I"quickgraph;TU;[I"3.3.50603.0.20100822;T@ [I" quickie;T@@ [I"quickie_motion;T@@ [I" quickl;T@@ [I"quick_magick;T@@ [I"quick_magick_hooopo;T@@ [I"quick_queue;T@@@ [I"quick_response;T@,@ [I"quickroute;T@@@ [I"quick_scrapper;T@@ [I"quick_script;T@~@ [I"quick_search;T@'@ [I"quick_serve;T@x@ [I"quickshare;T@'@ [I"quick_short;T@`@ [I"quick_start;T@@ [I"quick_state;T@@ [I"quicksync;TU;[I" 0.0.7.2;T@ [I"quicktest;T@@ [I"quick_test_runner;T@@ [I"quicktime-player-mac;T@'@ [I"quick_utils;T@I@ [I" quicky;T@@ [I"qui-common-helpers;T@V@ [I"quiescent;T@`@ [I"quiet_assets;T@@ [I"quietbacktrace;T@`@ [I"qui-index-table;T@@ [I" quiiq;T@E@ [I"quijotipsum_api;T@!@ [I" quilt;T@@ [I"quilted-harvested;T@@ [I" quimby;T@@ [I" quincy;T@x@ [I" quine_mc;T@@ [I"quintus-example-gem;T@'@ [I"qui-pagination;T@E@ [I" quirk;T@"@ [I" qui-tabs;T@@ [I"qui-toolbar;T@@ [I" quixote;T@@ [I" quiyo;T@I@ [I" quiz;T@`@ [I" quizgame;T@E@ [I" quizzy;T@@ [I"qu_mailer;T@@ [I" qu-mongo;T@@ [I"qu-mongoid;T@@ [I" qunited;T@@ [I"qunited-rails;T@'@ [I"qunit_for_rails;T@@ [I"qunit-rails;T@E@ [I"quora-client;T@@@ [I" quorum;T@@ [I" quote;T@@ [I" quotefm;T@E@ [I"quotemedia;T@E@ [I" quotes;T@'@ [I"quote_unquote;T@`@ [I" quotey;T@@ [I" quoth;T@'@ [I" quotr;T@'@ [I" quova;T@@ [I"quo_vadis;T@u@ [I"qup;T@@ [I" qu-rails;T@@ [I" quredis;T@@ [I" qu-redis;T@@ [I"qu-scheduler;T@`@ [I" qusion;T@@ [I" qu-spec;T@@ [I" qvod;T@`@ [I" qwandry;T@|@ [I" qwerly;T@@ [I"qwerly-ruby;T@E@ [I" qwikdoc;T@'@ [I" qwiki;T@N@ [I" qwirk;T@I@ [I"qwirk_active_mq_adapter;T@@[I"qwirk_jms_adapter;T@@[I"r;T@@ [I" r10k;T@n@ [I"r18n-core;T@;@ [I"r18n-desktop;T@;@ [I"r18n-rails;T@;@ [I"r18n-rails-api;T@;@ [I" r19cov;T@@ [I"r2;T@@ [I" r2do;T@@ [I" r2flickr;T@!@ [I" r2mp3;T@I@ [I"r38y-aasm;T@@ [I"r3_exception_logger;T@. @ [I"r3_plugin_toolbox;T@@ [I"R3T;T@'@ [I""r3trofitted-bitmask-attribute;T@@ [I"r43;T@@ [I"r4digitalnz;T@@ [I"r4s;T@@ [I"r4x;T@@ [I" r509;T@@ [I"r509-ca-http;T@@ [I"r509-middleware-certwriter;T@!@ [I"r509-middleware-validity;T@!@ [I"r509-ocsp-responder;T@@ [I"r509-validity-redis;T@R @ [I"r7z;T@@ [I" raad;T@@ [I" raakt;T@@ [I" rabal;T@@ [I"rabbirack;T@O@ [I" rabbit;T@@ [I"rabbitcage;T@@@ [I" rabbiter;T@O@ [I"rabbithutch;T@@@ [I"rabbit_jobs;T@=@ [I"rabbit_manager;T@'@ [I"rabbitmqadmin-cli;T@@[@ @@ [I"rabbitmq_http_api_client;T@@ [I"rabbitmq-jruby-client;T@@ [I"rabbitmq_manager;T@@ [I"rabbitmq-service-util;T@[ @ [I")rabbit-slide-daijiro-groonga-night-3;TU;[I"2012.11.29;T@ [I"%rabbit-slide-kou-debian-gum-2012;TU;[I"2012.06.23.3;T@ [I""rabbit-slide-kou-devlove-2012;TU;[I"2012.12.16.2;T@ [I"rabbit-slide-kou-sprk2012;TU;[I"2012.09.16.6;T@ [I""rabbit-slide-myokoym-mojicode;TU;[I"2012.05.18.2;T@ [I"&rabbit-slide-myokoym-rabbit2-test;T@@ [I"+rabbit-slide-nari-serious-GC-with-Ruby;T@@ [I" rabbit-slide-okkez-sprk2012;T@@ [I"+rabbit-slide-rabbit-theme-benchmark-en;T@@ [I"+rabbit-slide-rabbit-theme-benchmark-ja;T@@ [I"*rabbit-slide-znz-SapporoRubyKaigi2012;TU;[I"2012.09.15;T@ [I"rabbit-theme-clear-code;T@@ [I"rabbit-theme-sprk2012;T@@ [I"rabbit-tools;T@x@ [I"rabble-rest;T@'@ [I"rabelyoda;T@T @ [I"rabidprawns;T@@ [I" rabies;T@'@ [I" rabl;T@@ [I"rabl-rails;T@@ [I"ra-bluepill;T@@ [I" rabwii;T@O@ [I"ra-capistrano-recipes;T@X@ [I" racc;T@G.@ [I" raccdoc;T@@ [I" raccept;T@'@ [I" racer;T@6@ [I" racf;T@@ [I" rack;T@@ [I" Rack;T@O@ [I"rackables;T@@ [I"rack-abstract-format;T@<@ [I"rack-accept;T@@ [I"rack-acceptable;T@@ [I"rack-accept-default;T@'@ [I"rack-accept-header-updater;T@@ [I"rack-accept_language;T@@ [I"rack-accept-media-types;T@B@ [I"rack-accepts;T@'@ [I" rack-access-control-headers;T@@ [I"rack-action;T@'@ [I"rack-active_record_status;T@@ [I" rack-add-pdf-headers-for-ie;T@@ [I"rack-affiliates;T@@ [I"rack_after_reply;T@@ [I"rack-aggregate;T@@ [I"rack-alive;T@E@ [I"rack-allow-from;T@E@ [I" rack-amf;T@O@ [I"rackamole;T@@ [I"rack-analytics;T@@ [I" rack-api;T@@ [I"rack-asset-compiler;T@@ [I"rack-assets;T@e@ [I"rack-async;T@@ [I"rack-async2sync;T@@ [I"rack-attack;T@@ [I"rack-audit;T@E@ [I"rack-auth-cheat;T@@ [I"rack-auth-cookie;T@u/@ [I"rack-authenticate;T@@ [I"rack-authentication;T@'@ [I"rack-auth-ip;T@n@ [I"rack-auth-kerberos;T@[@ [I"rack-auth-krb;T@@ [I"rack-auth-simples;T@@ [I"rack-autocrud;T@N$@ [I"rack-auto-session-domain;T@`@ [I"rack-backend-api;T@@ [I"rack-bert-rpc;T@@ [I"rack-block;T@`@ [I"rack-bouncer;T@@ [I"rack-bridge;T@@ [I" rack-bug;T@@ [I"rack-bug-rails-3;T@@ [I"rack-bug-speedtracer;T@'@ [I"rack_bugzscout;T@@ [I"rack-bundle;T@@ [I"rack-cache;T@@ [I"rack-cache-buster;T@I@ [I"rack-cachely;T@@ [I"rack-cache-purge;T@E@ [I"rack-cache-tags;T@@ [I"rack-call;T@'@ [I"rack-campaign;T@"@ [I"rack-campfire;T@E@ [I"rack-canonical-host;T@V@ [I"rack-canonical-hostname;T@!@ [I"rack-cappuccino;T@E@ [I"rack-captchator;T@@ [I" rack-cas;T@@ [I"rack-cas_client;T@@ [I"rack-cas-client;T@|@ [I"!rack-case-insensitive-routes;T@E@ [I"rack-casual;T@@@ [I" rack-cat;T@@@ [I"rack-cerberus;T@@ [I"rack-chain;T@@ [I"rack-chartbeat;T@@ [I"rack-chromeframe;T@@ [I"rack-chrome_frame;T@'@ [I"rack-city;T@'@ [I"rack-cleancookies;T@@@ [I"rack_clicky;T@W@ [I"rack-client;T@x@ [I"rack-closed;T@@ [I"rack-cluster;T@'@ [I"rack-codehighlighter;T@@ [I"rack-coderay;T@@ [I"rack-coffee;T@@ [I"rack-coffee_filter;T@- @ [I"rack-colorized_logger;T@@ [I"rack-combobot;T@I@ [I"rack-common_logger-fluent;T@@ [I"rack-conditional-forms;T@E@ [I"rack-config;T@- @ [I"rack-config-flexible;T@+@ [I"rack-conneg;T@|@ [I" rack-content_type_validator;T@@ [I"rack-contrib;T@@ [I"rack-contrib_stringbot;T@@ [I"$rack-contrib-with-working-jsonp;T@7@ [I"rack-cookie-monster;T@@ [I"rack-core-data;T@@ [I"rack-cors;T@@ [I"rack-couchdb-oauth2;T@@ [I"rack-counter;T@@ [I"rack_csrf;T@.@ [I"rack-current;T@@ [I"rack_current_page;T@@ [I"rack-databases;T@E@ [I"rack-datamapper;T@@ [I"rack-datamapper-session;T@[ @ [I" rack_dav;T@6@ [I"rack-debug;T@O@ [I"rack-debug19;T@@ [I"rack-denyie;T@;@ [I"!rack-detailed_request_logger;T@6@ [I"rack_detect_platform;T@E@ [I"rack_detect_robots;T@@ [I"rack-devise_cookie_auth;T@@ [I"rack-digestif;T@@ [I"rack_direct;T@=@ [I"rack-directory-index;T@@ [I"rack-directory-indexes;T@'@ [I"!rack-docunext-content-length;T@'@ [I"rack-domain_redirect;T@`@ [I"rack_doubles;T@'@ [I" racked;T@@ [I"rack-embed;T@'@ [I"rack-emstream;T@+@ [I"rack-ensure_proper_host;T@@ [I" rack-env;T@6@ [I"rack_environment;T@'@ [I"rack-environment;T@N@ [I"rack-environmental;T@N@ [I"rack-ermahgerd;T@@ [I"rack_errorpage;T@@ [I"rack-escapee;T@`@ [I" rack-esi;T@@ [I" racket;T@@ [I" racket2;T@@ [I"rack-evil_robot;T@@ [I"rack-facebook;T@@ [I"rack_facebook_connect;T@'@ [I"rack-facebook-method-fix;T@x@ [I"!rack-facebook-signed-request;T@@ [I"rack-failtale;T@`@ [I"rack_fake_s3;T@@ [I"rack_fast_escape;T@9@ [I" rack-fb;T@E@ [I"rack-federated-auth;T@@ [I"rack-fiber_pool;T@' @ [I"rack-fix-content-type;T@@ [I"rack-flash;T@@@ [I"rack-flash2;T@@ [I"rack-flash3;T@@ [I"rack-flash-session;T@@ [I"rack-fonts;T@`@ [I"rack-fontserve;T@@ [I"rack-footnotes;T@"@ [I"rack-force_domain;T@@ [I"rack-forceie7;T@@ [I"rack_format_response;T@E@ [I" rackful;T@+@ [I"rack-funky-cache;T@@ [I"rack-gauges;T@@ [I"rack-gem-assets;T@@@ [I" rack-geo;T@6@ [I"rack-geoip;T@@@ [I"rack-geoipcity;T@'@ [I"rack-geoipcountry;T@@ [I"rack-geo-locale;T@@ [I"rack-gist;T@u@ [I" rack-git;T@'@ [I"rack-git_sha;T@@ [I"rack-git-up;T@'@ [I"rack-git-version;T@@ [I"rack_global_session;T@[ @ [I"rack-goggles;T@@ [I"rack-golden_frill;T@@@ [I"rack-golem;T@6@ [I"rack-google_analytics;T@@ [I"rack-google-analytics;T@*@ [I"rack-google-custom-search;T@`@ [I"rack_grid;T@"@ [I"rack-gridfs;T@@ [I"rack-gridfs-thumb;T@@ [I"rack_grid_thumb;T@@ [I"rack-gsub;T@@ [I"%rack_guarantee_trailing_new_line;T@@ [I"rack_gyazo;T@@@ [I"rack-handler-apache;T@E@ [I"rack-handlers;T@u @ [I"rack_hashed_cookie_session;T@E@ [I"rackheader;T@'@ [I"rack-headercontrol;T@E@ [I"rack-header-key;T@"@ [I"rack_headers;T@@@ [I"rack-headers;T@@ [I"rack-health;T@`@ [I"rack-heartbeat;T@6@ [I"rack-heroku_env;T@@ [I"rack_heroku_meta;T@'@ [I"rack-highlighter;T@@ [I"rack-honeypot;T@@@ [I"rack_hoptoad;T@|@ [I"rack-hoptoad-notifier;T@@ [I"rack-html5;T@@ [I"rack-html5-rails_helper;T@@ [I"rack-htmltidy;T@@ [I"rack-http-enforcer;T@@@ [I"rack-httperflog;T@`@ [I"rack_http_script_name;T@E@ [I"rack-i18n_best_langs;T@[ @ [I"rack-i18n_locale_switcher;T@@ [I"rack-i18n_routes;T@[ @ [I"rack-idempotent;T@@ [I"rack-idle;T@@ [I"rack-ie-redirect-fix;T@'@ [I" rackif;T@`@ [I" rack-if;T@@@ [I"rack-iframe;T@@ [I"rack-iframe-transport;T@@@ [I"rack_image_size;T@@ [I"rack-img-sizes;T@E@ [I"rack-informant;T@@ [I"rack-initforthe-facebook;T@n@ [I"rack-insight;TU;[I" 0.5.24;T@ [I"rack-instruments;T@ @ [I"rack-ip_filter;T@@ [I"rack_iphone;T@@ [I"rack_iphone_web_app;T@"@ [I"rack_ip_restrictor;T@@@ [I"rack-ip-whitelist;T@E@ [I"rack-jekyll;T@@ [I"rack-jetty;T@@ [I" rackjour;T@@ [I"rack_jruby_profiling;T@@ [I" rackjson;T@@ [I"rack-json-api;T@'@ [I"rack-jsonp;T@ @ [I"rack-jsonp-middleware;T@V@ [I"rack-jsonp-tools;T@@ [I"rack-ketai;T@,@ [I"rack-key_value_logger;T@@ [I"rack-killswitch;T@@ [I"rack_konami;T@@ [I"rack-large-uploads;T@E@ [I"rack-lazy-load;T@@ [I"rack-leakin;T@'@ [I"rack-legacy;T@@ [I"rack-less;T@@ [I"rack-lesscss;T@@ [I"rack-lettering;T@`@ [I"rack-linkeddata;T@@ [I"rack-linkify;T@E@ [I"rack-livereload;T@[@ [I"rack-locale_chooser;T@ Q@ [I"rack-locale-root-redirect;T@"@ [I"rack_logger;T@"@ [I"rack-log-request;T@@ [I"rack_mailer;T@6@ [I"rack-mail_exception;T@'@ [I"rack-maintenance;T@@ [I"rack-maintenance_mode;T@"@ [I"rack-markdown;T@E@ [I"rack-mason;T@@@ [I"rack-methodoverride-4-all;T@@ [I"$rack-methodoverride-with-params;T@@ [I"rack-middleware-glitch;T@'@ [I"!rack-middleware-google-image;T@@ [I"rack-mini-profiler;T@@ [I"rack-minitest;T@@ [I"rack-mlog;T@@ [I"rack-mobile-detect;T@x@ [I"rack-mock-pubcookie;T@@ [I"rack-modernizr;T@E@ [I"rack-mogilefs;T@@ [I"rack-mongo;T@"@ [I"rack-mongrel2;T@,@ [I"rack_monitor;T@'@ [I"rack-monitor;T@x@ [I"rack_monkey_party;T@@ [I"rack-mount;T@&@ [I"rack-multipart_related;T@@ [I"rack-musicindex;T@@ [I" rack-mux;T@@@ [I"rack_my_openid;T@E@ [I"rack-neverlocal;T@'@ [I"rack_new_window;T@E@ [I" racknga;T@@ [I"rack-nocache;T@@ [I"rack-noie;T@@ [I"rack-noie6;T@@ [I"rack-non-www-enforcer;T@'@ [I"rack-normalize-domain;T@'@ [I"rack-noslashdot;T@@ [I"rack-no-www;T@E@ [I"rack-ntlm;T@'@ [I" racko;TU;[I"50000.0.1;T@ [I"rack-oauth;T@|@ [I"rack-oauth2;T@@ [I"rack-oauth2-provider;T@@ [I"rack-oauth2-server;TU;[I" 2.8.0;T@ [I"rack-oauth2_utils;T@@ [I"rack-oauth_echo;T@E@ [I"rack-oauth-wrap;TU;[I" 0.5.2.2;T@ [I"rack-obama;T@`@ [I"rack-offline;T@@ [I"rack-olark;T@@ [I"rack_oom_killer;T@E@ [I"rack-opal;T@- @ [I"rack-openid;T@ @ [I"rack-openidp;T@"@ [I" rack-p3p;T@@ [I"rack_pack;T@E@ [I"rack-pack;T@@ [I"rack_page_cache;T@@ [I"rack-pagespeed;T@x@ [I"rack-parser;T@@@ [I"rack-passbook;T@'@ [I"rack-path_prefixer;T@@ [I"rack-payment;T@+@ [I"rack-perftools_profiler;T@@ [I"rack-per_request_cache;T@@ [I"rack-php-session;T@@ [I"rack-picatcha;T@@ [I"rack-ping;T@E@ [I"rack-piwik;T@6@ [I"rack-pjax;T@X@ [I"rack-plastic;T@6@ [I"rack-policy;T@x@ [I"rack-pony;T@@ [I"rack-post-body-to-params;T@|@ [I" rack-pot;T@@ [I"rack-pretty_json;T@E@ [I"rack-preview;T@'@ [I"rack-private;T@@ [I"rack-probe;T@@ [I"rack-process;T@E@ [I"rack-process-name;T@E@ [I"rack_proctitle;T@@ [I"rack-profile;T@@ [I"rack-protection;T@@ [I"rackproxy;T@E@ [I"rack-proxy;T@@ [I"rack-pubcookie;T@@ [I"rack_push;T@@ [I"rack-push-notification;T@@ [I"rack-pygmentize;T@@ [I"rack-pygments;T@R @ [I"rack-pygmoku;T@`@ [I"rack-qiniu_mock;T@'@ [I" rack-r;T@@ [I"rack-r18n;T@@ [I"rack-rails-logger;T@@ [I"rack-raker;T@`@ [I"rack-ratelimiter;T@E@ [I"rack-raw-upload;T@@ [I"rack-rdiscount;T@@ [I"rack-recaptcha;T@7@ [I"rack-recorder;T@@ [I"rack-redirect;T@@ [I"rack_referral;T@'@ [I"rack-referrals;T@E@ [I"rack-rekon;T@@ [I"rack-relativize;T@'@ [I"rack-remove-param;T@"@ [I"rack_replace;T@@ [I"rack-replace-http-accept;T@E@ [I"rack-request_logger;T@@ [I"rack-request-profiler;T@@@ [I"rack-rescue;T@@@ [I"rack-reshow;T@I@ [I"rack-respond_to;T@ @ [I"&rack_respond_to_malformed_formats;T@"@ [I"rack-response-signature;T@@ [I"rack-rest_api_versioning;T@E@ [I"rack-rest_book;T@@ [I"rack-restfolia;T@'@ [I"rack-restful-controller;T@'@ [I"rack-restful_submit;T@@ [I"rack_restrictor;T@@ [I" rack-revalidate-while-cache;T@'@ [I"rack-reverse-proxy;T@"@ [I"rack-revision;T@@ [I"rack_revision_info;T@@ [I"rack-revision-info;T@@ [I"rack-rewrite;T@ @ [I"rack-rewrite-dynamic;T@"@ [I"rack-rewrite_root_filter;T@'@ [I"rack-robots;T@@@ [I"rack-router;T@@ [I"rack-routes;T@@ [I" rack-rpc;T@@ [I" rack-rpx;T@|@ [I"rack_rscript;T@@ [I"rack-rscript;T@@ [I" rack-rsi;T@E@ [I" rack-s3;T@"@ [I"rack-saml;T@"@ [I"rack-sanitize;T@@ [I"rack-screen-door;T@"@ [I"rack-search_terms;T@@ [I"rack-secure_only;T@@ [I"rack-server-pages;T@@ [I"rack-sesame;T@@ [I"rack_session_access;T@@ [I"rack-session-dbm;T@6@ [I"rack-session-file;T@@ [I"rack-session-leveldb;T@'@ [I"rack-session-mongo;T@'@ [I"rack-session-moped;T@'@ [I"rack-session-redis;T@@ [I"rack_session_redis_store;T@E@ [I"rack-session-sequel;T@'@ [I"rack-session-stack;T@@ [I" racksh;T@@ [I" rack-si;T@@ [I"rack-signature;T@@@ [I"rack-singleshot;T@+@ [I"rack-slashenforce;T@E@ [I"rack_slashless;T@n@ [I"rack-smart-app-banner;T@'@ [I"rack-smartphone_detector;T@"@ [I"rack-smoke;T@@ [I"rack-smusher;T@"@ [I"rackson-five;T@@ [I"rack-source;T@'@ [I"rackspace;T@`@ [I"rackspace-apps;T@`@ [I"rackspace_cloud;T@x@ [I"rackspace-cloud;T@6@ [I"rackspace_cloudservers_api;T@E@ [I"rackspace-fog;T@@ [I"rackspace-monitoring;T@V@ [I"rack-sparklines;T@@ [I"rack-sparql;T@@ [I"rack-speedtracer;T@@ [I"rack-speling;T@@ [I"rack_spellchecker;T@@ [I"rack-sprocketize;T@@ [I"rack-sprockets;T@@ [I" rack_ssi;T@E@ [I" rack-ssi;T@'@ [I" rack-ssl;T@@ [I"rack-ssl-cure;T@'@ [I"rack-ssl-enforcer;T@[@ [I"rack-ssl-facebook;T@@ [I"rack-ssl-rails;T@E@ [I"rack_staging;T@@ [I"rack-staging;T@@ [I"rack-static_fallback;T@@ [I"rack-staticifier;T@1@ [I"rack-static-if-present;T@@ [I"rack-statsd;T@`@ [I"rack-status;T@@ [I"rack-stereoscope;T@@ [I"rack-store;T@"@ [I"rack-stream;T@@ [I"rack-streaming-proxy;T@@ [I"rack-streaming-proxy2;T@@ [I"#rack-strip_http_accept_headers;T@@ [I"rack-stripper;T@@ [I"rack-strip-www;T@@ [I"rack-stubs;T@@ [I"rack-subdomain;T@@ [I"rack-superfeedr;T@@ [I"rack-supported-media-types;T@@ [I" rack-svn;T@'@ [I"rack-syntax-highlighter;T@E@ [I"rack-taint;T@@ [I"rack-tamperproof;T@'@ [I"rack-test;T@@ [I"rack-test-rest;T@@ [I"rack-throttle;T@@ [I"rack-thumb;T@,@ [I"rack-thumb-proxy;T@@ [I"rack-tidy;T@@ [I"rack-tidy-ffi;T@@ [I"rack-timeout;T@@ [I"rack_timer;T@"@ [I"rack-time-zone-header;T@@@ [I"rack-tipi;T@@ [I"rack-tipi-jquery;T@@ [I"rack-token_auth;T@'@ [I"rack-track;T@|@ [I"rack-try_static;T@`@ [I"rack-tunnel;T@`@ [I"rack-turing-test;T@@@ [I"rack-twilio-validator;T@@ [I"rack-twitter-auth;T@@ [I"rack-typekit;T@@ [I"rack-unbasic;T@@ [I"rack-unscripted;T@@ [I"rack-uploads;T@@ [I"!rack_upstream_identification;T@E@ [I"rack_url_stripper;T@@ [I"rack-useragent;T@@ [I"rack-useragent-filter;T@@ [I"rack-validate;T@+@ [I"rack-valid-html;T@@@ [I"rack-var-dump;T@@ [I"rack-version-header;T@`@ [I"rack-vhost;T@@@ [I"rack-webauth;T@6@ [I"rack-webconsole;T@+@ [I"rack-webconsole-pry;T@@ [I"rack-webmoney;T@n@ [I"rack-webtranslateit;T@6@ [I"rack-weinre;T@@ [I"rack-whitelist;T@g@ [I" rack-www;T@@ [I"rack-www-enforcer;T@E@ [I"rack-xapper;T@E@ [I"rack-xframe-options;T@@@ [I"rack-xml_stylesheet;T@'@ [I"rack-xrevision;T@@ [I" rack-xsl;T@@ [I"rack-xslview;T@@ [I"rack-zombie_shotgun;T@'@ [I" racl;T@@@ [I" racoon;T@@ [I" racovi;T@@ [I"rad;T@@ [I"radamanthus-skates;T@@ [I" radamanthus-superfeedr-ruby;T@@ [I" radar;T@x@ [I"radar-delayed_job;T@@ [I"radar-dnssd;T@@ [I"radar-webrat;T@kD@ [I"rad_assets;T@ @ [I" rad_bag;T@E@ [I"rad_common_interface;T@@ [I" rad_core;T@@ [I" raddocs;T@6@ [I" rad_ext;T@@ [I" rad_face;T@@ [I" radiant;T@@ [I"'radiant-archive_children-extension;T@@ [I"radiant-archive-extension;T@ @ [I"#radiant-archive_tabs-extension;T@ @ [I"%radiant-asset_pipeline-extension;T@@ [I"radiant-assets-extension;T@3@ [I"*radiant-autoresize_textarea-extension;T@@ [I"radiant-autotest;T@@ [I"+radiant-backend_archive_view-extension;T@@ [I"%radiant-banner_rotator-extension;T@@ [I"&radiant-basic_page_auth-extension;T@@ [I"(radiant-bluecloth2_filter-extension;T@@ [I"#radiant-cache_buster-extension;T@'@ [I"$radiant-cache_by_page-extension;T@@ [I"#radiant-child_layout-extension;T@@ [I"&radiant-children_config-extension;T@x@ [I"'radiant-ck_editor_filter-extension;T@@ [I"radiant-clipped-extension;T@@ [I"(radiant-clipped-extension-add-group;T@x@ [I"radiantcms-couchrest_model;T@,@ [I"radiant-comments-extension;T@@ [I"'radiant-concurrent_draft-extension;T@ @ [I" radiant-copy_move-extension;T@J@ [I" radiant-dashboard-extension;T@@ [I"&radiant-database_mailer-extension;T@@ [I"radiant-debug-extension;T@@ [I" radiant-downloads-extension;T@@ [I"!radiant-drag_order-extension;T@@ [I"*radiant-dumb_user_interface-extension;T@@ [I"*radiant-dutch_language_pack-extension;T@@ [I"radiant-enabler-extension;T@@ [I"!radiant-eventbrite-extension;T@@ [I"%radiant-event_calendar-extension;T@e@ [I" radiant-event_map-extension;T@@ [I"-radiant-exception_notification-extension;T@@ [I"radiant-exporter-extension;T@@ [I"(radiant-fabulator_exhibit-extension;T@@ [I" radiant-fabulator-extension;T@@ [I"%radiant-featured_pages-extension;T@+@ [I",radiant-file_system_resources-extension;T@s@ [I"&radiant-filter_toolbars-extension;T@@ [I"radiant-flapper-extension;T@`@ [I"radiant-forms-extension;T@@ [I"radiant-forum-extension;T@|@ [I"!radiant-globalize2-extension;T@@ [I"radiant-go;T@1@ [I")radiant-grandchildren_tags-extension;T@@ [I"%radiant-group_children-extension;T@@ [I""radiant-group_forum-extension;T@@ [I"radiant_helper;T@@ [I"radiant-help-extension;T@;@ [I"#radiant-heroku_dalli-extension;T@@ [I"'radiant-heroku_memcached-extension;T@@ [I""radiant-heroku_sass-extension;T@@ [I" radiant-html_tags-extension;T@@ [I"!radiant-if_id_tags-extension;T@@ [I"$radiant-if_param_tags-extension;T@@ [I"radiant-images-extension;T@@ [I"!radiant-index_page-extension;T@@ [I"&radiant-kramdown_filter-extension;TU;[I"1.0.13.4.1;T@ [I"radiant-lacquer-extension;T@@ [I"radiant-layouts-extension;T@;@ [I"radiant-library-extension;T@ @ [I"radiant-location-extension;T@u@ [I"(radiant-locked_page_parts-extension;T@ @ [I"radiant-mailer-extension;T@@ [I"%radiant-mailer_layouts-extension;T@`@ [I"&radiant-markdown_filter-extension;T@@ [I"radiant-mobile-extension;T@@ [I"!radiant-navigation-extension;T@+@ [I"&radiant-navigation_tags-extension;T@@ [I"'radiant-page_attachments-extension;T@@ [I"*radiant-page_factory_config-extension;T@@ [I"#radiant-page_factory-extension;T@@ [I"-radiant-page_group_permissions-extension;T@@ [I"%radiant-page_list_view-extension;T@@ [I"#radiant-page_preview-extension;T@`@ [I"#radiant-paperclipped-extension;T@@ [I"-radiant-parameterized_snippets-extension;T@@ [I"radiant-people-extension;T@@ [I"'radiant-predefined_parts-extension;T@@ [I"#radiant-race_results-extension;T@*@ [I"radiant-rails3;T@@ [I" radiant-rbac_base-extension;T@ @ [I"radiant-rc;T@- @ [I"radiant-reader-extension;TU;[I" 3.0.38;T@ [I"#radiant-reader_group-extension;T@u"@ [I"%radiant-reader_mailman-extension;T@@@ [I" radiant-relations-extension;T@@ [I"'radiant-reorder_children-extension;T@ @ [I" radiant-scheduler-extension;T@@ [I"radiant-search-extension;T@@ [I"radiant-settings-extension;T@@ [I"radiant-sheets-extension;T@@ [I"%radiant-shop_discounts-extension;T@@ [I"radiant-shop-extension;TU;[I" 0.94.8;T@ [I"$radiant-shop_packages-extension;T@@ [I"$radiant-shop_variants-extension;T@6@ [I"#radiant-sibling_tags-extension;T@@ [I"%radiant-site_area_tags-extension;T@@ [I"%radiant-sitemap_search-extension;T@@ [I"%radiant-site_templates-extension;T@ @ [I"*radiant-smarty_pants_filter-extension;T@@ [I"radiant-snippets-extension;T@@ [I"radiant-sns-extension;T@- @ [I"$radiant-sns_page_hook-extension;T@@ [I"$radiant-sphinx_search-extension;T@@ [I"&radiant-taggable_events-extension;T@@ [I"radiant-taggable-extension;T@@ [I"radiant-tags-extension;T@t@ [I" radiant-templates-extension;T@ @ [I"%radiant-textile_filter-extension;T@@ [I"radiant-tools-extension;T@@ [I",radiant-turkish_language_pack-extension;T@@ [I"radiant-twitter-extension;T@@ [I"radiant-users-extension;T@@ [I"radiant-vapor-extension;T@i6@ [I"!radiant-vcard_part-extension;T@@ [I"radiant-vhost-extension;T@o@ [I" radio;T@@ [I" radiodns;T@6@ [I"radiospiel-app;T@ @ [I"radiospieler;TU;[I"2012.09.13;T@ [I"radiotagmap;T@V@ [I"radiovis-generator;T@@ [I"radiowaves;T@"@ [I" radish;T@@ [I" radium;T@'@ [I"radium_io;T@'@ [I" radius;T@n@ [I"radius19-radiant;T@@ [I" radiusrb;T@@ [I"radiustar;T@n@ [I"radius-ts;T@ @ [I" radix;T@@ [I" radix62;T@@ [I"radix_tree;T@N@ [I"rad_jquery;T@@@ [I" rad_js;T@@ [I" radk;T@@ [I" rad_kit;T@@ [I"rad_matchers;T@R @ [I" radmin;T@@ [I"rad_store;T@E@ [I"rad_themes;T@E@ [I" radum;T@@ [I"rad_users;T@E@ [I"rae;T@@ [I" raemon;T@I@ [I"raf;T@@ [I" rafa;T@'@ [I" rafaday;T@@ [I"rafaels-picasa;T@@ [I"rafaels-wysihat-engine;T@@ [I" raffle;T@@ [I"rag;T@@ [I"ragaskar-jsdoc_helper;T@@ [I" rage;T@!@ [I" ragi;T@@ [I" ragnar;T@@ [I" ragtag;T@@ [I" ragweed;T@@[@{@ @ [I"rahu_yama_time;T@'@ [I" raibo;T@@ [I"raicebook;T@`@ [I" raiff;T@@@ [I"railblazer;T@"@ [I" railbone;T@@ [I"rail_chaser;T@@ [I" railgun;T@`@ [I"railhead_autoformat;T@E@ [I"railhead_autouser;T@+@ [I"railhead_cacheify;T@"@ [I"railhead_handlersocket;T@E@ [I"railhead_lazy_columns;T@'@ [I"railhead_memorize;T@@ [I"railhead_permalink;T@p@ [I"railhead_sanitize;T@@ [I" railines;T@'@ [I" railings;T@@ [I" railj;T@@ [I" railroad;T@@ [I"railroady;T@@ [I" rails;T@@ [I"rails2_asset_pipeline;T@@ [I"rails2ext;T@'@ [I"rails31-evergreen;T@@ [I"rails31-markdown-editor;T@@ [I"rails3-active_form;T@O@ [I"rails3_acts_as_paranoid;T@[@ [I"#rails3_acts_as_paranoid-bjones;T@'@ [I"#rails3_acts_as_paranoid_create;T@@ [I"rails3_artifactor;T@x@ [I"rails3_assist;T@@ [I" rails3b;T@ @ [I"rails3_bridge;T@@@ [I"rails3_devise_wizard;T@@ [I"rails3_fitter_happier;T@E@ [I"rails3-generators;T@@ [I"rails3-jquery-autocomplete;T@G @ [I"#rails3-jquery-autocomplete-moc;T@@ [I"rails3_libmemcached_store;T@@ [I"rails3_markitup;T@"@ [I"rails3-opensocial;T@@ [I"#rails3_pg_deferred_constraints;T@@ [I"rails3_plugin_toolbox;T@@ [I"rails3-redis-session-store;T@@ [I""rails3-restful-authentication;T@ @ [I"rails3_sequel;T@@ [I"rails-3-settings;T@`@ [I"rails3-settings;T@@ [I"rails3-tutorial;TU;[I" 0.4.4.2;T@ [I"#rails_4_session_flash_backport;T@'@ [I"rails4_upgrade;T@@ [I" rails800;T@'@ [I"rails960gs;T@,@ [I"rails_action_args;T@@ [I"rails-action-args;T@`@ [I"rails_address_fetcher;T@@ [I"rails_admin;T@x@ [I"rails-admin;T@@ [I"rails_admin_globalize;T@E@ [I"rails_admin_histeroid;T@E@ [I"rails_admin-i18n;T@n@ [I"rails_admin_import;T@@ [I"rails_admin_jcrop;T@@ [I"rails_admin_nestable;T@V@ [I"rails_admin_pdf;T@'@ [I"rails_admin_state_machine;T@@ [I"rails_admin_tag_list;T@|@ [I"rails_admin-treeview;T@@ [I"rails_adserver;T@@ [I"rails-ajax;TU;[I"0.1.1.20120710;T@ [I"rails-alertify;T@@ [I"railsalitics;T@@ [I"rails_analyzer_tools;T@@ [I"rails-and-solid;T@e@ [I"rails-annoying;T@@ [I"rails_antiscroll;T@@ [I"rails-api;T@@ [I"rails_app_config;T@E@ [I"rails_appengine;T@V@ [I"rails-app-installer;T@@ [I"rails_application_assets;T@@ [I"rails_apps_composer;TU;[I" 2.2.27;T@ [I"rails-app-spec;T@@ [I"rails-archer;T@'@ [I"rails_artifactor;T@@ [I"rails-asset-jqgrid;T@@ [I"rails-asset-jqueryui;T@@ [I"rails_asset_packager;T@I@ [I"rails_assist;T@J@ [I"rails-async;T@`@ [I"rails_atomic_increment;T@!@ [I"rails_auditor;T@'@ [I"rails_authentication;T@@ [I"rails-auth-github;T@'@ [I"rails_authorization;T@' @ [I"rails-autoellipsis;T@G @ [I"rails_autolink;T@@ [I"rails-backbone;T@- @ [I"rails-backbone-forms;T@[@ [I"rails-backbone-generator;T@'@ [I"rails-backbone-sp;T@'@ [I"rails-backup-migrate;T@3@ [I"rails-behaviors;T@@ [I"railsbench;T@ @ [I"rails_best_practices;TU;[I" 1.13.2;T@ [I"&rails_best_practices-gorgeouscode;T@@ [I"#rails_best_practices-raydog153;T@e@ [I"rails-block-labels;T@E@ [I"rails_blog_engine;T@"@ [I"rails-boilerplate;T@g@ [I"rails-boot-reporting;T@@ [I"rails_bootstrap_helpers;T@'@ [I"#rails-bootstrap-toggle-buttons;T@@ [I"rails-bootstrap-ui;T@E@ [I"rails_breadcrumbs;T@Y@ [I"rails-breadcrumbs;T@@ [I"rails_bridge;T@@ [I"rails-brochure;T@`@ [I"rails-browscap;T@`@ [I"rails-cache-tags;T@N@ [I"rails-caddy;T@V@ [I"rails_calendar;T@'@ [I"rails-canhaz;T@W@ [I"rails_captcha;T@n@ [I"rails-carrot;T@@ [I"railscart;T@"@ [I"railscasts;T@@ [I"railscasts_download;T@@ [I"railscheck;T@@ [I"rails_cherry_pick;T@d@ [I"rails-ckeditor;T@@ [I"rails_clafer;T@@ [I"rails-clean-logs;T@s@ [I"rails_code_qa;T@@ [I"rails_code_stats;T@`@ [I"rails_commentable;T@@ [I"rails_complete;T@@ [I"rails_component;T@@@ [I"railsconfcal;T@@ [I"rails_config;T@@ [I"rails_config_i18n;TU;[I" 0.3.1.3;T@ [I"rails_config_loader;T@|@ [I"!rails_config_model_generator;T@@ [I"rails_configurator;T@'@ [I"rails-console-pry;T@@ [I"rails-console-tweaks;T@@ [I"rails_creator;T@@ [I"rails-cron-logger;T@@ [I"rails-crud;T@E@ [I"rails-crumbs;T@@ [I"rails_css_themes;T@@ [I"rails-csv-fixtures;T@'@ [I"rails_csv_importer;T@6@ [I"rails_currency;T@@ [I"rails_current;T@@ [I"rails_customerbeats;T@[ @ [I"rails-database-url;T@@ [I"rails_database_yml;T@E@ [I"rails_datamapper;T@@ [I"rails_db_admin;T@+@ [I"rails_db_browser;T@@ [I"rails-dbd-mysql;T@@ [I"rails_db_dump;T@`@ [I"rails-db_env;T@E@ [I"rails-dbi;T@@@ [I"rails_debugging_toolbar;T@@ [I"rails_decorators;T@[@ [I"rails-default-database;T@ @ [I"rails_default_url_options;T@@ [I"rails-dev-boost;T@@ [I"rails-dev-boost-beta;T@6@ [I"rails-dev-bundle;T@!@ [I"rails-development-toolbox;T@@ [I"rails_development_toolkit;T@"@ [I""rails_devs_for_data_integrity;T@|@ [I"rails-dev-tweaks;T@@ [I"rails-dev-tweaks-arturo;T@@ [I"rails_dictionary;T@@@ [I"rails_dm_datastore;T@3@ [I"rails_doctor;T@'@ [I"rails_document_ready;T@@ [I"railsdog-less;T@@ [I"rails-doorman;T@@ [I" rails_dt;T@+@ [I"rails-dtrace;T@"@ [I"rails_dump;T@@ [I"RailsEditor;T@<@ [I"rails_email_preview;T@"@ [I"rails_email_validator;T@+@ [I"rails_emoji;T@Q@ [I"rails_engine_decorators;T@'@ [I"rails_env;T@@ [I"rails-env-switcher;T@!@ [I"rails-erb-check;T@@ [I"rails-erd;T@@ [I"rails_errors2html;T@@ [I" railsex;T@@ [I"rails-excel;T@@ [I" rails-excel-rubyXL-strategy;T@'@ [I"%rails-excel-spreadsheet-strategy;T@'@ [I"$rails-excel-writeexcel-strategy;T@'@ [I"rails_exception_handler;T@@ [I"rails-ext;T@ @ [I"rails_extensions;T@ @ [I"rails-extjs-direct;T@@ [I"rails_filemanager;T@@ [I"rails-firephp;T@'@ [I"rails-flash_patch;T@'@ [I"rails-font-awesome;T@@ [I"rails-footnotes;TU;[I" 3.7.9;T@ [I"rails-footnotes-linux;T@Z=@ [I"rails_form_autosave;T@n@ [I"rails_form_backing_objects;T@E@ [I"rails-four-queueing;T@@ [I" rails_fu;T@'@ [I"rails_gae;T@"@ [I"rails-gallery;T@@ [I"railsgarden-message_block;T@@ [I"rails_gem_install;T@@ [I"rails-generators;T@'@ [I"rails-geocoder;T@Z@ [I"rails_git_version;T@'@ [I"rails-hamljs;T@'@ [I"rails-heatmap;T@@ [I"rails_helper;T@@ [I"rails_helpers_fix;T@`@ [I"rails_highcharts;T@@ [I"railshoster;T@ @ [I"rails_html_output;T@@ [I"rails-i18n;T@@ [I"rails-i18n-debug;T@@ [I"rails_i18n_gettext;T@"@ [I"rails-i18n-record;T@@ [I"rails-i18n-routes;T@@ [I"rails-i18n-updater;T@@ [I"railsieve;T@'@ [I"rails-indexes;T@'@ [I"rails_info;T@@ [I")rails_inheritable_attributes_manager;T@@ [I"rails_instrument;T@"@ [I"rails-ioc;T@@ [I"rails_ip_validator;T@@@ [I"rails_javascript_helpers;T@@ [I"rails_join;T@@ [I"rails_jq_grid;T@@ [I"rails-jquery-bundle;T@E@ [I"rails-jquerymobile;T@@ [I"rails_jquery_ui_datepicker;T@@ [I"rails_jumpstart;T@@ [I"rails_kindeditor;T@[@ [I"rails-latex;T@@ [I"rails_legacy_mapper;T@@ [I"railsless-deploy;T@@ [I"rails_locale_detection;T@@ [I"rails_locale_sorter;T@`@ [I"rails-localization;T@`@ [I" railslog;T@'@ [I"rails_log_autotruncator;T@I@ [I"rails_log_converter;T@E@ [I"rails_logger;T@T @ [I"rails-logger-ext;T@@ [I"rails_log_stdout;T@`@ [I"rails_log_watcher;T@E@ [I"rails_lookup;T@"@ [I"railslove-cli;T@E@ [I"railslove_deploy;T@_@ [I"railslove-rack-throttle;T@'@ [I"railsmachine;T@ @ [I"rails_magick;T@V@ [I"rails_mail_preview;T@"@ [I"rails_markdown;T@@ [I"rails-marker;T@E@ [I"rails_markitup;T@@ [I"rails_memcached_view;T@!@ [I"rails_menu;T@@ [I"rails_meta_tags;T@^@ [I"rails_metrics;T@@ [I"rails_mini;T@@ [I"rails-mobile;T@e@ [I"rails_mongo_sessions;T@@ [I"rails_mustache;T@'@ [I"rails-named-routes-options;T@'@ [I"rails_nav;T@9@ [I"rails_nested_layouts;T@`@ [I"rails_new;T@V@ [I"rails-no-cache;T@`@ [I"rails_objects_logger;T@@ [I"rails-observers;T@`@ [I"railsonfire;T@ZB@ [I"rails_on_pg;T@'@ [I"rails_openid;T@@ [I"rails-pages;T@'@ [I"rails_paginate;T@n@ [I"rails-pagination;T@O@ [I"rails_parallel;T@6@ [I"rails_parser;T@'@ [I"rails-parts;T@@ [I"rails-paypal;T@@ [I"rails-permalink;T@@ [I"rails-pg-procs;T@@ [I"rails-pjax;T@E@ [I" railspm;T@'@ [I"rails-precompile2git;T@W@ [I"rails_product;T@6@ [I"rails-pry;T@'@ [I"rails-przelewy24;T@"@ [I"rails-pulse;T@@ [I"rails_pwnerer;T@n@ [I"rails_qaptcha;T@@ [I"railsquest;T@@ [I"rails-queue;T@@ [I"rails-rake-pg;T@"@ [I"rails-rateit;T@!@ [I"rails-recipes;T@@@ [I"rails-redactorjs;T@'@ [I"rails_redis_cache;T@@ [I"rails_refactor;T@@ [I"rails_relations_fix;T@@ [I"RailsRemoteControl;T@@ [I"rails_rename;T@'@ [I"rails_responds_to_parent;T@@ [I"rails_reverse_db;T@@ [I"rails-routes-js-utils;T@T @ [I"RailsRRDTool;T@@ [I"rails-sandbox-assets;T@"@ [I"rails-sandbox-busterjs;T@'@ [I"rails_sandbox_jasmine;T@@ [I"rails_sandbox_mocha_chai;T@'@ [I"rails-scheduler;T@`@ [I"rails-schema-validations;T@@ [I"rails-security;T@E@ [I"rails_seeder;T@@ [I"rails_semantic_logger;T@@ [I"rails_sequel;T@@ [I"rails-serious-business;T@@ [I"rails-services;T@|@ [I"rails_settings;T@`@ [I"rails-settings;T@@ [I"rails-settings-cached;T@,@ [I"rails_setup;T@@ [I" rails-sh;T@@ [I" rails_simple_backup_restore;T@@ [I"rails_simple_config;T@"@ [I"rails_simple_monitor;T@'@ [I"rails-simple-search;T@@ [I"rails-skeleton;T@'@ [I"rails_slickgrid;T@"@ [I"!rails-slow-assets-workaround;T@`@ [I"rails-slugs;T@@ [I"rails_soft_destroy;T@`@ [I"rails_sql_triggers;T@E@ [I"rails_sql_views;T@@ [I"rails-ssi;T@E@ [I"rails-stencil;T@@ [I"rails_structure_loading;T@`@ [I"rails-styleguide;T@"@ [I"rails-subdomain;T@E@ [I"rails_superfish;T@@ [I"rails_syslogger;T@1@ [I"rails-tables;T@$@ [I"rails_tabs;T@' @ [I"rails-talks;T@@ [I"railstank;T@@ [I" railstar;T@3@ [I"rails-tartare;T@@ [I"rail_stat_generator;T@O@ [I"rails-template-inheritance;T@E@ [I"rails_templater;T@@ [I"rails_templatizer;T@'@ [I"rails_temporary_data;T@@ [I"rails-test-serving;T@3 @ [I"rails_test_shortcuts;T@`@ [I"rails-test-toolbox;T@@ [I"rails-theme-helper;T@E@ [I"railsthemes;T@N@ [I"rails-themes;T@@ [I"rails-timeago;T@@ [I"rails_tiny_ds;T@@ [I"rails_tinymce;T@'@ [I"rails_tokeninput;T@ @ [I"rails-toolkit;TU;[I" 8.04.1;T@ [I""rails_tools-absence_validator;T@@ [I"rails_tooltip;T@'@ [I" RailsTop;T@E@ [I"rails-translate;T@@ [I"rails-translate-models;T@@ [I"rails-translate-routes;T@6@ [I"railstrap;T@'@ [I"rails-trash;T@O@ [I"rails-ujs;T@@ [I"rails-ujs-form;T@@ [I"rails-units;T@ @ [I" rails-up;T@'@ [I"rails-upgrade;T@E@ [I"rails-uploader;T@n@ [I"rails_uri_parser;T@@ [I"rails_uri_validator;T@@@ [I"rails_validations_hmac;T@@ [I"rails_validators;T@'@ [I"railsversions;T@@ [I"rails_view;T@@ [I"rails_view_annotator;T@n@ [I"rails-view-helper-objects;T@'@ [I"rails_warden;T@@ [I"railsware-authlogic;T@m@ [I"railsware-gcal4ruby;T@@ [I"railsware-passenger;TU;[I" 3.0.2.1;T@ [I"railsware-soap4r;TU;[I" 1.5.8.1;T@ [I"railsware-telesign;T@E@ [I"railsware-workflow;T@@ [I"rails-web-console;T@@ [I"railswhere;T@!@ [I"rails_wink;T@@@ [I"rails_wip;T@`@ [I"rails_wizard;T@|@ [I"rails-wysihtml5;T@2@ [I"rails-xmlrpc;T@@ [I"rails_xss;T@@ [I"rails_zombie;T@@ [I" railties;T@@ [I"rail_trip;T@ @ [I" railway;T@'@ [I"railway_flower;T@E@ [I" railx;T@'@ [I" raily;T@'@ [I" railz;T@'@ [I"railz_blog;T@'@ [I" rain;T@W@ [I" rain8net;T@@ [I" rainbow;T@T @ [I" rainbows;TU;[I" 4.4.2;T@ [I"rainbow_say;T@@ [I" rainbros;T@n@ [I" raincoat;T@@ [I"raindrops;T@ @ [I"rainforest_auth;T@E@ [I"raingrams;T@@@ [I"rainmaker;T@|@ [I" rainman;T@@@ [I"rainpress;T@@ [I"rainux-selenium-webdriver;T@@ [I" raisin;T@@ [I" rajkumar;T@E@ [I"rak;T@@ [I" rake;TU;[I" 10.0.3;T@ [I"rake4latex;T@6@ [I" rakeable;T@'@ [I" rake-ar;T@@ [I"rake-assets;T@@ [I"rake_bubbler;T@@ [I"rake-builder;T@ @ [I" rakecap;T@E@ [I"rake_check;T@@ [I"rake_command;T@'@ [I"rake-command-completion;T@'@ [I"rake_commit;T@l5@ [I"rake-compiler;T@@ [I"rake-compiler-sgonyea;T@@ [I"rake-confirm;T@"@ [I"rake-convert;T@"@ [I"rake-debian-build;T@C@ [I"rake-deploy;T@[ @ [I" rake-dir;T@'@ [I" rake_dmg;T@E@ [I"rake-dotnet;T@@ [I"rake-gemcutter;T@@ [I"rake-gem-ghost;T@E@ [I" rakegen;T@$@ [I"rakegrowl;T@@ [I"rake-hooks;T@@ [I" rakeist;T@@ [I" rakejava;T@@ [I" rake-kit;T@@ [I"rake_menu;T@E@ [I"rake-minify;T@x@ [I"rake_monkey;T@@ [I"rake-notes;T@'@ [I" rakeoff;T@@ [I"rake-performance;T@@ [I" rake_pid;T@'@ [I"rake-pipeline;T@X@ [I"rake-pipeline-i18n-filters;T@@ [I"rake-pipeline-web-filters;T@X@ [I"rake_plugins;T@6@ [I"rake-plus;T@@ [I" rakepp;TU;[I" 0.1.6.3;T@ [I"rake-progressbar;T@@ [I" raker;T@'@ [I"rake-rails;T@'@ [I"rake-remote_chef;T@'@ [I"rake-remote_task;T@@ [I"rake-repl;T@@ [I"rake_routes_normalizer;T@`@ [I"rake-rubygems;T@@ [I"rake_server;T@@ [I" rake-sh;T@@ [I"rake_shared_context;T@'@ [I"rake_tasks;T@@ [I"rake-tasks;T@!@ [I"rake-tester;T@'@ [I"rake-timer;T@@ [I" rake_ui;T@@ [I"rake-version;T@@ [I" rakeweb;T@E@ [I" rakext;T@@ [I" rakins;T@@ [I" rakismet;T@@ [I" rakugoka;T@@ [I"rakumarket;T@@ [I" rakuten;T@`@ [I"rakuten-de;T@E@ [I" rakwik;T@@ [I" ralbum;T@n@ [I"ralesforce;T@'@ [I" ralexa;T@@ [I" ralf;T@@ [I"ralgorithms;T@@ [I" ralias;T@E@ [I"RAliasFile;T@@ [I" rallhook;T@@ [I" rally;T@'@ [I"rally_api;T@@ [I" rallycat;T@@ [I"rally-jasmine;TU;[I" 1.2.0.7;T@ [I"rally-jasmine-core;TU;[I" 1.2.0.1;T@ [I"rally_rest_api;T@W@ [I"rallytastic;T@G.@ [I"rally_workspace_utils;T@@ [I"ram;T@'@ [I" ramaze;TU;[I"2012.12.08;T@ [I"ramaze-asset;T@@ [I"ramaze.ch.oddb.org;T@@ [I"ramaze-fnordmetric;T@@ [I"ramazon_advertising;T@@ [I" rambang;T@@ [I" rambler;T@6@ [I"rambling-slider-rails;T@`@ [I"rambling-trie;T@@ [I" rambo;T@J@ [I" ramcrest;T@@ [I"%ramdiv-mongo_mapper_acts_as_tree;T@@@ [I" ramen;T@@ [I" ramenu;T@@ [I"ramhoj-scruffy;T@^@ [I" rami;T@R @ [I" ramix;T@+@ [I" raml;T@@ [I" ramon;T@"@ [I"ramon-devise;T@@ [I" ramp;T@@ [I"ranalytics;TU;[I"0.1.071029125738;T@ [I"ran_a_lytics;T@@ [I" rand;T@e@ [I" rand62;T@@ [I" randall;T@`@ [I" randexp;T@@ [I"randfiles;T@'@ [I" randgen;T@W@ [I" random;T@@ [I"random-accessible;T@@ [I"random_data;T@ @ [I" randomer;T@E@ [I"randomext;T@@ [I"random_from_db;T@@ [I"random_fu;T@@ [I"random_images;T@@ [I"random_ipsum;T@'@ [I"randomized_field;T@@ [I"randomized_id;T@E@ [I"randomizer;T@"@ [I"randomizr;T@@ [I"random_jpg;T@@ [I" randomly;T@@ [I"random_password_generator;T@@ [I"randomperson;T@@ [I"random_phrase;T@@ [I" randomr;T@`@ [I"random_record;T@V@ [I"random_sass;TU;[I"0.0.2.201211010036;T@ [I"random_sources;T@@ [I"randomstring;T@@ [I"random_text;T@@ [I"random_value_sampler;T@@ [I"random_variable;T@@ [I"random-walk;T@E@ [I"random-word;T@@ [I"random-word-generator;T@'@ [I"randomyoutube;T@@@ [I"random_youtube_comment;T@`@ [I" randroid;T@n@ [I" randumb;T@@ [I" randy;T@'@ [I"range_builder;T@@ [I"rangeclient;T@@ [I"ranged_find;T@!@ [I"range_dsl;T@+@ [I"range_ext;T@'@ [I"rangehash;T@n@ [I"range_hash;T@@ [I"RangeHash;T@@ [I"range_math;T@@ [I"range_operators;T@`@ [I" ranges;T@@ [I"range_sentence_parser;T@E@ [I"range_set;T@E@ [I"range_slice;T@@ [I"ranges_merger;T@@ [I"range_splitter;T@O@ [I"rangetastic;T@@ [I"range_validator;T@@ [I"range_with_gaps;T@@ [I" rangify;T@@ [I" rango;T@@ [I" rank;T@E@ [I" rankable;T@@ [I"rankable_graph;T@@ [I"rank-aggregation;T@@ [I"ranked-model;T@@ [I" ranking;T@`@ [I"ranking-simpledb;T@+@ [I" rankit;T@'@ [I"rankitize;T@@ [I" rankles;T@E@ [I" rankstar;T@'@ [I" ranktize;T@'@ [I" rannel;T@@ [I" ransack;T@@ [I"ransack_chronic;T@@ [I"ransack_ffcrm;T@@ [I"ransack_ui;T@@ [I" rant;T@@ [I" rantly;T@@ [I"raop-client;T@`@ [I"rap;T@~@ [I" rape-me;TU;[I" 6.6.9;T@ [I" rap_enum;T@E@ [I"rap_enumerable;T@'@ [I"raphaeljs-maps-rails;T@'@ [I"raphaeljs-rails;T@@ [I"raphael-rails;T@@ [I" rapi;T@`@ [I" rapid;T@@ [I"rapid-app;T@@ [I"rapid-core;T@@ [I"rapidmango-events;T@"@ [I" rapi_doc;T@x@ [I" rapids;T@|@ [I"rapidshare;T@J@ [I"rapidshare-ext;T@@ [I"rapid_transit;T@@ [I"rapleaf_api;T@u"@ [I" rapnd;T@@ [I"rapnd-mikec54088;T@@ [I" rapns;T@ @ [@@ @[I" rapp;T@+@ [I" rapper;T@@ [I"rapper_lite;T@@ [I" rapport;T@@ [I" rapt;T@I@ [I"raptcache;T@@ [I" raptcha;T@O@ [I" raptget;T@@@ [I" raptor;T@@ [I"raptor-editor-rails;T@@ [I"raptorize-rails;T@'@ [I" rapuncel;T@@ [I" raque;T@@ [I"raramorph;T@@@ [I" rare_map;T@T @ [I" rarff;T@@ [I" rarg;T@@ [I" rarity;T@`@ [I" rascut;T@@ [I" rasem;T@@ [I" rash;T@@ [I" rasin;T@X@ [I" rask;T@@ [I" raspell;T@@ [I" rasputin;T@ @ [I"rasputin-jui;T@- @ [I" rasqal;T@'@ [I" rasskey;T@@ [I"rassphrase;T@@ [I" rasta;T@ @[I" rastman;T@1@ [I"rat;T@@ [I"ratatouille;T@@ [I" ratch;T@N@ [I" ratchet;T@@ [I"ratcheted;T@'@ [I"ratchetio;T@LN@ [I"ratchet-rails;T@@ [I" rate;T@`@ [I"rate5me_grs;T@@ [I" rateable;T@@ [I"rateable_attributes;T@@ [I"ratelimit;T@@ [I"rate_limit;T@'@ [I"rate_limited_scheduler;T@E@ [I"rate_limiter;T@@ [I"rate-limiting;T@@ [I" rate_man;T@V@ [I" rateme;T@@ [I"rate_throttle;T@@ [I" ratexa;T@'@ [I" rat-hole;T@!@ [I"rating_for;T@[ @ [I"rationalize;T@'@ [I" ratis;TU;[I" 2.5.2.4;T@ [I" ratlas;T@@@ [I" ratom;T@@ [I"ratom-instructure;T@"@ [I"ratom-ssl;T@@ [I" ratonga;T@'@ [I" ratpack;T@6@ [I"ratpoison;T@'@ [I" rats;T@@ [I"rattlecache;T@[ @ [I" rattler;T@@ [I" raudi;T@E@ [I"raus22-happymapper;T@@ [I"rautomation;T@@ [I" raval;T@'@ [I" rave;T@@@[@`@@@ [I" raven;T@u"@ [I" ravendb;TU;[I"1.0.0.0.121.20100804;T@ [I"raw;TU;[I" 0.49.0;T@ [I" rawapi;T@@ [I" rawdio;T@@ [I"rawengulksans-font-rails;T@'@ [I"rawjsonrpc;T@1@ [I" rawk;T@6@ [I" rawkx;T@@ [I" rawler;T@@ [I" rawline;T@@ [I" rawq;T@@ [I" rawr;T@@ [I" raws;T@@ [I" raxb;T@!@ [I" raxe;T@"@ [I" raxus;T@`@ [I"ray;T@@ [I" rayback;T@!@ [I" raydash;T@2@ [I"ray-db2fog;T@@ [I" rayeux;T@@ [I" raygun;T@ @ [I"raylayers;T@+@ [I" raymond;T@'@ [I" rayo;T@@ [I" rays;T@6@ [I" raystest;T@@ [I" raystool;T@F@ [I" rayt;T@'@ [I" razel;T@I@ [I"razenha-vestal_versions;T@@ [I" razor;T@@ [I" razsell;T@@ [I" razyk;T@'@ [I" rb232;T@@ [I" rb2so;T@@ [I"rb8-trepanning;T@6I"universal-ruby-1.8.7;T[@@6I"universal-ruby-1.9.2;T[@@|@ [I" rbabel;T@!@ [I"rbacanable;T@I@ [I" rbackup;T@g@ [I" rb-aes31;T@'@ [I"rbahocorasick;T@'@ [I"rb-airgram;T@"@ [I"rballista;T@@ [I"rbankgiro;T@@ [I" rbapp;T@'@ [I"rb-appscript;T@@ [I" rbarcode;T@E@ [I" rbase;T@6@ [I" rbatch;T@@ [I" rbayes;T@@ [I" rbbcode;T@@ [I"rb-blink1;T@@ [I"rb-bsdiff;T@`@ [I" rbbt;T@@ [I" rbbt-dm;T@@ [I"rbbt-entities;T@O@ [I" rbbt-GE;T@@ [I"rbbt-marq;T@ @ [I"rbbt-marq-www;T@N@ [I"rbbt-phgx;T@@ [I"rbbt-sent;T@@ [I"rbbt-sent-www;T@@ [I"rbbt-sources;T@@ [I"rbbt-text;T@@ [I"rbbt-util;T@@ [I"rbbt-views;T@@ [I" rbcddb;T@@ [I" rbcdio;T@}@ [I" rb_cdio;T@@ [I"rbcluster;T@E@ [I"rbcrontab;T@@ [I" rbcurse;T@@ [I"rbcurse-core;T@@ [I"rbcurse-experimental;T@'@ [I"rbcurse-extras;T@@ [I" rbczmq;T@@ [I" rbdaemon;T@E@ [I" rb-daspk;T@'@?[@ @n@[@ @n@%N[@ @n@ [I"rb-dayone;T@@ [I" rbdbg;T@'@ [I"rb_delimcc;T@@ [I" rbeai;T@@ [I"rbeautify;T@n@ [I" rbee;T@@ [I" rbehave;T@@ [I" rbench;T@@ [I"rbenv-autohash;T@@ [I"rbenv-rehash;T@[ @ [I" rbet;T@@ [I" rb_ext;T@@ [I"rbf;TU;[I" 0.0.7.3;T@ [I"rb_facebook;T@V@ [I" rbfam;T@`@ [I"rb-fchange;T@@ [I" rbfk;T@@ [I" rbfnv;T@[ @ [I" rbfnv19;T@@ [I"rb-fsevent;T@@ [I"rb-fsevent-legacy;T@@ [I" rbfunge;T@@ [I"rbg;T@@ [I"rb-gae-support;T@E@ [I" rbgccxml;T@@ [I" rbgct;T@@ [I" rbglitch;T@'@ [I" rbglox;T@@ [I" rbgooey;T@@ [I"rb_goog_auth;T@@ [I" RbGps;T@[ @ [I" rb-grib;T@I@ [I" rbhive;T@4@ [I" rbht;T@'@ [I" rbhtml;T@@ [I" rbib;T@@ [I" rbibtex;T@@ [I" rbin;T@'@ [I"rbindkeys;T@E@ [I" rbing;T@@ [I"rb-inotify;T@@ [I"rbinvoice;T@@ [I"rbiphonetest;T@x@ [I" rbjs;T@,@ [I" rbkb;T@ @ [I"rbkb-http;T@@ [I" rbkmoney;T@'@ [I"rb-kqueue;T@@ [I"rb-kqueue-burke;T@@ [I"rbktoblzcheck;T@@@ [I"rb-libsvm;T@@ [I"rblineprof;T@@ [I" rblkid;T@'@ [I" rb-lomo;T@@ [I"rb-lorcon;T@@ [I" rblosxom;T@1@ [I"rbm;T@@ [I"rb-mailnotify;T@[ @ [I"rbmediawiki;TU;[I" 0.2.6.2;T@ [I" rbml;TU;[I"0.0.5.9.4.2;T@ [I" rbmobile;T@@ [I" rbmount;T@'@ [I" rb_nav;T@^@ [I" rbnf;T@@ [I"rb-notifu;T@"@ [I"rboardgame;T@'@ [I" rbone;T@+@ [I" rbook;T@@ [I"rbook-bisac;T@@ [I"rbook-gbip;T@6@ [I"rbook-isbn;T@@ [I"rbook-onix;T@@ [I"rbook-pacstream;T@W9@ [I"rbook-titlepage;T@' @ [I"rbootstrap;T@x@ [I" rboss;T@@ [I" rbot;T@@ [I" r-bot;T@'@ [I"rbot-meme_generator;T@R @ [I" rbovirt;T@ @ [I" rbox;T@@@ [I"rbp;T@E@ [I" rbpar;T@@ [I" rb-pcap;T@@ [I" rbpic;T@@ [I"rb-pid-controller;T@'@ [I" rbpig;T@6@ [I" rbpl;T@!@ [I"rbplusplus;T@@ [I" rbpm;T@@ [I"rbpoly2tri;T@'@ [I"rbprayertime;T@|@ [I" rb_prob;T@@ [I"rb_probdsl;T@"@ [I"rbpwdchecker;T@E@ [I"rb-pygments;T@@ [I" rbrainz;T@@ [I" rbraspag;T@`@ [I"rb_raven_api;T@@ [I"rb_raventools;T@"@ [I" rbrc;T@E@ [I"rb-readline;T@@ [I"rb_reloader;T@E@ [I" rbridge;T@@ [I"rbroccoli;T@@ [I"rb.rotate;T@`@ [I"rb-ruby_parser;T@@ [I"rbs;T@@ [I" rb_scope;T@z@ [I" rbsed;T@E@ [I"rb-skypemac;T@@ [I" rbslurl;T@'@ [I" RbST;T@@ [I"rbstardict;T@`@ [I" rbsync;T@@ [I" rbtagger;T@@ [I" rbtags;T@@ [I"rb_termbox;T@@ [I"rb-threadframe;T@(@ [I" rbtk;T@@[I" rb-tmpl;T@@@ [I" rbtrace;TU;[I" 0.3.18;T@ [I" rb-trace;T@6@ [I" rbtree;T@@ [I"rbtree-jruby;T@@ [I"rbtree-pure;T@`@ [I"rb_tryagain;T@'@ [I" rbuild;T@6@ [I" rbuilder;T@@ [I" rbus;T@@ [I" rbuzz;T@@ [I" rbvimeo;T@x@ [I" rb_visa;T@`@ [I" rbvmomi;T@ @ [I"rb-wartslib;T@@ [I"rb_webcam;T@@ [I"rbwowhead;T@E@ [I"rb_wunderground;T@@@ [I"rbx-linecache;T@@ [@0U;[I" 0.44;T@\%[@0@@[@0@I"universal-rubinius-2.0;T[I"rbx-require-relative;T@@[@9@I"universal-jruby-1.2;T[@9@n@[@9@nI"universal-ruby-1.9.3;T[@9@n@[@9@@ [I"rbx-tracer;T@'@\%[@B@"@[I"rbx-trepanning;T@'@\%[@E@I"universal-rubinius-1.2.1;T[@E@@[I" RbYAML;T@@ [I" rbyte;T@'@ [I" rbzip2;T@@ [I" rb-zmq;T@@ [I"rc;T@@ [I" rcap;T@@ [I"rcap-rails-generators;T@@ [I" rcaps;TU;[I" 0.9.20;T@ [I" rcapture;T@@ [I"rcarvalho-capybara;T@JZ@ [I"&rcarvalho-eventmachine_httpserver;T@@ [I"rcarvalho-happening;TU;[I" 0.2.5.5;T@ [I"rcarvalho-jigsaw;T@@ [I"rcarvalho-uber-s3;T@,@ [I"rcarvalho-workless;TU;[I" 1.0.2.21;T@ [I" rcat;T@'@ [I"rcd;T@E@ [I" rcdk;T@@ [I" rcelery;T@@ [I" rchardet;T@ @ [I"rchardet19;T@q@ [I" rchart;T@Sg@ [I" rchoice;T@@ [I"rcicindela;T@@ [I" rcite;T@@ [I"rcl;T@@ [I" rclconf;T@@ [I"rclements_active_shipping;T@@ [I" rcli;T@@@ [I"rcloudstack;T@@ [I"rcodetools;TU;[I" 0.8.5.0;T@ [I" rcoins;T@E@ [I" rcomet;T@@ [I" rcommand;T@@ [I" rcommons;T@@ [I"rcommonsmath;T@@ [I" rcomp;T@@ [I"rcomposite;T@@ [I" rcon;T@@ [I"rconditions;T@x@ [I" rconf;T@[@ [I" rconfig;T@@ [I"rconfigurator;T@@ [I" rconio;T@@ [I" rconomic;T@R @ [I" rcor;T@@ [I" rcov;TU;[I"0.8.1.2.0;T@[@@Z@[@@@ [I"rcov_notifier;T@I@ [I"rcov_plugin;T@ @ [I"rcov_rails;T@@ [I"rcov_stats;T@9 @ [I"rcqrs_generators;T@@ [I" rcracy;T@@@ [I" rc_rails;T@ @ [I" rcrawl;T@@ [I" rc-rest;T@d=@ [I"rcr-notify;T@@ [I" rcron;T@@@ [I" rcronwtf;T@@ [I"rcrossword;T@'@ [I" rcrypt;T@@ [I" rcscript;T@`@ [I"rcscript-client;T@@ [I" rcss;T@@ [I"rcstorable;T@x@ [I" rcsv;T@@ [I"rcsvreader;T@6@ [I"rct;T@@ [I" rctl;T@'@ [I" RCups;T@@ [I"rcv;T@@ [I"rd;T@"@ [I" rd2odt;T@`@ [I"rd3;T@'@ [I"rda;T@x@ [I" rdaneel;T@@ [I" rdata;T@@ [I" rdate;T@"@ [I"rdavila_friendly_id;T@ @ [I"rdavila-query_reviewer;T@@ [I"rdavila-version_master;T@`@ [I"rd_awesome_nested_set;T@@ [I" rdayone;T@@ [I" rdazzle;T@O@ [I" rdbackup;T@!@ [I" rdbc;T@@ [I" rdbi;T@e@ [I"rdbi-dbrc;T@@ [I"rdbi-driver-mock;T@e@ [I"rdbi-driver-mysql;T@' @ [I"rdbi-driver-odbc;T@@@ [I"rdbi-driver-postgresql;T@e@ [I"rdbi-driver-sqlite3;T@e@ [I"rdbi-result-driver-json;T@@ [I" rdbxml;TU;[I" 2.4.13.2;T@ [I" Rdcpu16;TU;[I" 0.0.4.0;T@ [I" rddd;T@@ [I"rddd-monitor;T@6@ [I" rdebug;T@@ [I"r_decorator;T@n@ [I" rdefs;T@E@ [I"rdelicious;T@@ [I"rdf;TU;[I" 0.3.11.1;T@ [I"rdf-4store;T@E@ [I" rdfa;T@V@ [I"rdf-agraph;T@@ [I"rdfa_parser;T@|@ [I" rdf-bert;T@@ [I" rdfbus;T@'@ [I" rdfcache;T@'@ [I"rdf-cassandra;T@@ [I"rdf_context;T@VK@ [I" rdf-do;T@@ [I"rdf_for_sqlite;T@@ [I" rdfgrid;T@@ [I" rdf-gzip;T@@ [I"rd_find_by_param;T@`@ [I"rdf-isomorphic;T@@ [I" rdfize;T@@ [I" rdf-json;T@@ [I"rdf-mapper;T@@ [I"rdf-microdata;T@@ [I"rdf-mongo;T@kM@ [I" rdf-n3;T@@ [I"rdfobjects;T@"@ [I"rdfobjects-changeset;T@'@ [I"rdfobjects-pho;T@@@ [I"rdf-raptor;T@@ [I"rdf-rasqal;T@@ [I" rdf-rdfa;TU;[I" 0.3.19.1;T@ [I"rdf-rdfobjects;T@'@ [I"rdf-rdfxml;T@@ [I"rdf-redstore;T@@ [I"rdf-ruby19;T@@ [I" rdfs;T@@ [I"rdf_schema_generator;T@@ [I"rdf-sesame;T@@ [I"rdf-source;T@E@ [I"rdf-sparql;T@E@ [I" rdf-spec;T@?@ [I"rdf-spec-ruby19;T@1@ [I"rdf-talis;T@@@ [I"rdf-threadsafe;T@@ [I" rdf-trig;T@+@ [I" rdf-trix;T@@ [I"rdf-turtle;T@@ [I"rdf-virtuoso;T@`@ [I" rdf-xml;T@@ [I" rdf-xsd;T@@ [I" rdgc-dm;T@@ [I"RDI;TU;[I"0.1.1.20091105;T@ [I" rdialog;T@@ [I" rdialogy;T@`@ [I" rdice;T@@ [I" rdig;T@J%@ [I" rdio;T@@ [I" rdio_api;T@`@ [I" rdio-cli;T@'@ [I"rdiscount;T@1@ [I" rdist;T@E@ [I"rdmopensource-warbler;T@@ [I"rdo;T@@ [I" rdoba;T@@ [I" rdoc;T@k @ [I"rdoc-babel;T@e@ [I" rdoc_chm;T@@ [I"rdoc-data;T@k @ [I" rdoc-f95;T@E@ [I"rdoc-generator-fivefish;T@'@ [I"rdoc_html_templates;T@9@ [I"rdoc-newfish;T@@ [I"rdoc_osx_dictionary;T@@ [I"rdoc-perl_pod;T@@ [I"rdoc-rake;T@@ [I"rdoc-readme;T@@@ [I"rdoc_rest;T@@@ [I"rdoc-shomen;T@`@ [I"rdoc-sinatra;T@@ [I"rdoc-spellcheck;T@@ [I"rdoc-tags;T@@ [I" rdoctest;T@E@ [I"rdoc-view;T@"@ [I" rdomino;T@E@ [I"rdo-mysql;T@@ [I"rdo-postgres;T@@ [I"#rdoroshenko_mediaelement_rails;T@x@ [I"rdo-sqlite;T@@ [I"rdp-arguments;T@$@ [I" rdparser;T@@ [I"rdp-ffi-inliner;T@dZ@ [I"rdp-jruby-prof;T@W@ [I" rdpl;T@@ [I"rdp-mysql2;TU;[I" 0.2.7.1;T@ [I"rdp-rautomation;TU;[I" 0.6.3.1;T@ [I"rdp-rb-readline;T@(@ [I"rdp-require_all;TU;[I" 1.1.0.1;T@ [I"rdp-rmagick;T@@ [I"rdp-ruby_core_source;T@|@ [I"rdp-rubydoctest;T@@ [I"rdp-ruby-prof;T@y@ [I"rdp-ruby-snarl;T@@ [I"rdp-ruby-wmi;T@@ [I"rdp-win32screenshot;T@@ [I"rd_resource_controller;T@@ [I" rdropbox;T@@ [I"rds_backup_service;T@"@ [I"rd_searchlogic;T@ @ [I"rds_slow_log;T@E@ [I" rd_stump;T@E@ [I" rdtool;TU;[I" 0.6.38;T@ [I" rdub;T@'@ [I"rd_unobtrusive_date_picker;T@@ [I"rduration;T@@ [I"rdvd-slideshow;T@@ [I"rdy;T@@ [I"re;T@@ [I"re2;T@@ [I"rea;T@'@ [I" reac;T@`@ [I" reacco;T@@ [I" reach;T@@ [I"reachable;T@@ [I"reach-api;T@@ [I" react;T@@ [I" reaction;T@@@ [I"reaction_mailer;T@E@ [I" reactive;T@@ [I"reactive-activerecord;T@@ [I"reactive-core;T@@ [I"reactive-css;T@6@ [I"reactive-dev;T@@ [I"reactive-mvc;T@@ [I"reactive_resource;T@X@ [I"reactive_view_wx;T@@ [I"reactive-wx;T@@ [I" read;T@@@ [I"readability;T@|@ [I"readability-engine;T@V@ [I"readability_importer;T@6@ [I" readable;T@'@ [I"readable_exceptions;T@'@ [I"readable_message;T@@ [I"readable_random;T@6@ [I" reader;T@@ [I"readernaut;T@@ [I"reader_writer_cache_store;T@`@ [I"read_from_slave;T@@ [I"readingtime;T@`@ [I"reading_time;T@@ [I" readis;T@@ [I" readit;T@n@ [I"read_it_later;T@,@ [I"read_later;T@@@ [I"readline_buffer;T@' @ [I"readline-ffi;T@E@ [I"readline-history-restore;T@'@ [I"readline-ng;T@@ [I" readme;T@@ [I"readmedia-garb;TU;[I" 0.9.1.1;T@ [I"readmedia-gattica;T@:@ [I"readminator;T@'@ [I"read-only-gollum;T@@ [I"readonly_party;T@@ [I"readorder;T@O@ [I"read-password;T@H@ [I"ready_for_i18n;T@@ [I" real;T@@ [I" realex;T@R @ [I" real_fk;T@@ [I"real-growl;T@X@ [I"realiaser;T@'@ [I"Realiaser;T@'@ [I"real_include;T@I@y;[@@I@ [@@I@1[I"realityforge-braid;T@@ [I"realityforge-jekyll;T@@[I"realityforge-jekylltask;T@@[I"realityforge-piston;T@@ [I"reallycare_utils;T@V@ [I"really_sure_rails;T@'@ [I" realrand;T@O@ [I"real_settings;T@@ [I"realtimebattle;T@@ [I"real_time_rails;TU;[I" 0.0.73;T@ [I"realtime-validations;T@@ [I" realweb;T@@ [I"rea-netscaler-cli;T@@ [I" reap;TU;[I" 9.4.0;T@ [I" reaper;T@'@ [I"rear_admiral_randy;T@@ [I" reason;T@E@ [I"reasonable_log4r;T@@ [I"rebalance;T@'@ [I" rebar;T@@ [I" rebat;T@+@ [I" rebay;T@N@ [I" rebind;T@'@ [I" rebinder;T@@ [I" rebound;T@E@ [I"rebuy_deployment;T@@ [I"rec;T@ @ [I" recalls;T@@ [I" Recalls;T@@ [I" recap;T@ @ [I"recaptcha;T@@ [I"recaptchaed;T@@ [I"recaptcha-gogolok;T@8@ [I"recaptcha-mailhide;T@`@ [I"recaptcha-rails3;T@@ [I" received;T@@ [I" recess;T@@ [I" Recharge;T@@ [I" recho;T@@ [I"recipe_puppy;T@'@ [I" reciper;T@@ [I" recipiez;T@`@ [I" reciter;T@@ [I"recklessly;T@'@ [I" reckon;T@@ [I" reckoner;T@c@ [I" recliner;T@'@ [I" recloner;T@`@ [I" recmon;T@x@ [I" reco;T@@@ [I"recognizer;T@@ [@@@[I"recommendable;T@@ [I"recommendations;T@@ [I"recommendations2;T@@ [I"recommendify;T@@ [I" recon;T@'@ [I"reconsidered;T@e@ [I"record_cache;T@@ [I"record-cache;T@@@ [I"record_filter;T@@ [I"record_history;T@' @ [I"recordsearch;T@@ [I"recordselect;T@} @ [I"recordselect_vho;TU;[I" 3.1.101;T@ [I"record_sort;T@'@ [I"record_with_operator;T@@ [I" recordx;T@+@ [I"recordx-parser;T@6@ [I"recordx-xslt;T@@ [I" recortas;T@@ [I" recruit;T@@ [I" recs4;T@'@ [I" rector;T@@ [I" recur;T@@ [I" recurly;T@@ [I"recurly-js-rails;T@E@ [I"recurrence;T@N@ [I"recurrent;T@x@ [I"recurring;T@@ [I" recurs;TU;[I" 0.0.4.8;T@ [I"recurse-delete;T@"@ [I"recursive-open-struct;T@@ [I"recursive_pimp_slap;T@@ [I"recursive_rake_tasks;T@@ [I"recursive_replace;T@@@ [I"red;TU;[I" 4.1.7;T@ [I" red25519;T@@[@Y@@ [I"redactor-paperclip;T@@ [I"redactor-rails;T@@ [I"RedAdmiral;T@'@ [I"redaranj-right_aws;TU;[I" 1.11.3;T@ [I"redaranj-twitter-text;TU;[I"1.0.4.191;T@ [I" red-base;T@'@ [I" redbox;T@@ [I" redcap;T@`@ [I" redcar;TU;[I" 0.13;T@ [I"redcar-bundles;T@!@[@w@[ @ [I"redcar-clojure;T@@[@z@!@ [I""redcar-filter-through-command;T@@[I"redcar-groovy;T@@[@@!@ [I"redcar-html;T@8@ [I"redcar-icons;T@!@[@@[ @ [I"redcar-javamateview;T@@[@@!@ [I"redcar-javascript;T@@[@@!@ [I"redcar-jruby;T@@ [I"redcar-mirah;T@@[@@!@ [I"redcarpet;T@t@ [I"redcarpeter;T@@ [I"redcarpet-manpage;T@'@ [I"redcar_plugin;T@@ [I"redcar-sparkup;T@8@ [I"redcar-svnkit;T@@[@@!@ [I"redcar-xulrunner-win;T@@[@@[ @ [I" redcat;T@'@ [I" RedCloth;TU;[I" 4.2.3;T@[@@@ [@@@[@@@[@@@ [I"redclothcoderay;T@@ [I"redcloth-formatters-ast;T@@ [I" redcloth-formatters-docbook;T@"@ [I"red_cloth_formatters_plain;T@@ [I"redcloth-formatters-rdoc;T@'@ [I"redcloth_on;T@@ [I"red_cluster;T@E@ [I"redcrumbs;T@@ [I" redcuine;T@6@ [I" redcukes;T@@ [I"red_davis;T@'@ [I"reddavis-clickatell;T@'@ [I" reddy;T@@ [I" redef;T@@ [I"redfinger;T@@ [I" redflags;T@@ [I"red-glass;T@@ [I"red_grape;T@`@ [I" redgreen;T@@ [I" RedGreen;T@@ [I"redgreengrid;T@@ [I"redgreen_inception;T@@ [I"redgreen_supermario;T@@ [I" red_haze;T@'@ [I" redhead;T@V@ [I"redhillonrails_core;T@N@ [I" redi;T@V@ [I" rediline;T@E@ [I"redinger-hashdown;T@@@ [I"redinger-rr;T@@ [I" redir;T@@ [I" Redir;T@"@ [I" redirect;T@@ [I"redirect_follower;T@`@ [I"redirector;T@+@ [I"redirectr;T@n@ [I"redirect_routing;T@"@ [I"redirect_to_back_url;T@"@ [I" redis;T@@ [I"redis2-session-store;T@@ [I"redis-actionpack;TU;[I" 3.2.3;T@ [I"redis-activesupport;T@@ [I"redis-aid;T@@ [I"redisarray;T@'@ [I"redis_autocomplete;T@+@ [I"redis-autosuggest;T@@ [I"redis_backed_model;T@@ [I"redis-bank;T@@@ [I"redis-breadcrumbs;T@E@ [I"redis_buddy;T@@ [I"redis_cache;T@'@ [I"redis-cache;T@@ [I" redis_cache_mailer_delivery;T@@ [I"redis_captcha;T@@ [I"redis-central;T@6@ [I"redis-classy;T@N@ [I"redis-column;T@@ [I"redis_connection_ssl;T@@ [I"redis-connection-ssl;T@'@ [I"redis-connection-universal;T@'@ [I"redis_connector;T@E@ [I"rediscover;T@E@ [I"redis-diff_match_patch;T@@ [I"redis_directory;T@@ [I"redis-dump;T@@ [I"redisearch;T@@ [I" redised;T@@ [I"redis-em-mutex;T@@ [I" redisent;T@'@ [I"redis-expiring_counter;T@C@ [I"redis-expiring-set;T@@@ [I"redis_failover;T@@ [I"redis_feature_control;T@E@ [I"redis_feed;T@'@ [I"redis-friendships;T@!@ [I"redis_geo;T@@ [I"redis_gun;T@@ [I" redish;T@'@ [I" redis_ha;T@+@ [I"redis-health;T@'@ [I"redis-i18n;T@@ [I"redis_importer;T@@ [I"redis_json_serializer;T@'@ [I" redisk;T@I@ [I"redis-keyring;T@`@ [I"redis_knock;T@E@ [I"redis-load;T@!@ [I"redislock;T@- @ [I"redis-lock;T@@ [I" redislog;T@@ [I"redis_logger;T@@ [I"redis_logger_device;T@E@ [I"redismapper;T@'@ [I"redis_master_slave;T@'@ [I"redis_message_capsule;T@@ [I"redis-messages;T@@ [I"redis_migrator;T@'@ [I"redis-mmm;T@`@ [I"redismodel;T@@ [I"redis-model;T@6@ [I"redis-model-extension;T@@ [I" redismq;T@@ [I"redis-mutex;T@O@ [I"redis-namespace;T@u@ [I"redis-namespace-with-multi;T@u@ [I"redis-native_hash;T@I@ [I"redis_object;T@@ [I"redis-objective;T@@ [I"redis-objects;T@@ [I"redis-objects-rmap;T@'@ [I"redis_on_heroku;T@'@ [I"redis_orm;T@@ [I"redis-orm;T@"@ [I"redis_pagination;T@@ [I"redis-persistence;T@n@ [I"redis_pipeline;T@@ [I"redis_pipeliner;T@E@ [I"redis_props;T@[ @ [I"redis-proxy;T@'@ [I" redisque;T@@ [I"redis-rack;T@@ [I"redis-rack-cache;T@u@ [I"redis-rails;T@@ [I"redis-rdb;T@@ [I"redis_recipes;T@@ [I"redisrecord;T@@ [I"redis_record;T@'@ [I"redis-record;T@'@ [I"redis-redirect;T@@ [I"redis-repeater;T@@ [I"redis_resque_initializer;T@'@ [I"redis-retry;T@@ [I"redis_ring;T@6@ [I"redis_ring_client;T@@@ [I"redis-roc;T@J@ [I" redisrpc;T@@ [I"redis_safe_queue;T@'@ [I"redis-scheduler;T@@ [I"redis-script;T@'@ [I"redis-scripted;T@@ [I"redis-search;T@- @ [I"redis_selector;T@@ [I"redis-semaphore;T@|@ [I"redis-sentinel;T@@ [I"redis-server;T@@ [I"redis_session;T@1@ [I"redis-session-retrieve;T@@ [I"redis_session_store;T@E@ [I"redis-session-store;T@g@ [I"redis-settings;T@@ [I"redis-sinatra;T@ @ [I"redis-slave;T@@ [I"redis_snippets;T@@ [I"redis-spawn;T@@ [I"redis-stat;T@@ [@@@[I"redis_status;T@`@ [I"redis_storage;T@x@ [I"redis-store;T@;@ [I"redis_store_jr;T@@ [I"redis-structured-multi;T@E@ [I"redis_support;T@p@ [I"redis_tags;T@"@ [I" redistat;T@@ [I" redisted;T@E@ [I"redis_template_resolver;T@@@ [I"redis-textsearch;T@@ [I"redis_throttle;T@@ [I"redis-timeline;T@1@ [I"redis_tools;T@E@ [I" redistry;T@6@ [I" redis-ui;T@@ [I"redis_vars;T@@ [I"redis_voteable;T@@@ [I"redis_wrapper;T@@ [I"redis_wrapper_rails;T@@ [I" reditor;T@`@ [I" redix;T@"@ [I"redlander;T@@ [I" redline;T@@ [I"redmine-cli;T@`@ [I"redmine_client;T@'@ [I"redmine_client_user;T@@ [I"redmine_plugin_support;T@@ [I"%redmine_prefix_issue_with_author;T@@ [I" redminer;T@@@ [I"redmine_rate;T@@ [I"redmine_stagecoach;T@@ [I"redmine-ticket-client;T@I@ [I"redmine_version_priorities;T@`@ [I"redmine_wiki_exporter;T@n@ [I"redmine_wiki_issue_details;T@@ [I" redmiso;T@@ [I" redmon;T@"@ [I" RedNails;T@@ [I" redness;T@|@ [I" rednode;T@@@ [I" redns;T@$@ [I" redom;T@@@ [I"red_onion;T@'@ [I" redpack;T@ @ [I"redpack-ruby;T@@ [I" redparse;T@@ [I" redpear;T@e@ [I" redphone;T@@ [I" redplot;T@@ [I" redpomo;T@ @ [I"red_query;T@'@ [I"redrack-session;T@@ [I"redrails-session;T@@ [I"redrecord;T@D@ [I" redrock;T@@@ [I" redrug;T@@ [I" redrum;T@@ [I" redsafe;T@1@ [I" redshift;TU;[I" 1.3.24;T@ [I"red_socket;T@E@ [I" redstar;T@'@ [I" redstone;T@@ [I" redstorm;T@@ [I" redsync;T@@ [I" redtape;T@@ [I"red_trend;T@E@ [I" redtube;T@"@ [I" redu;T@"@ [I" reduce;T@@ [I"reduceable;T@@@ [I"redundant_column;T@@ [I"red_unicorn;T@@ [I" redwood;T@@@ [I" reefer;T@`@ [I" reek;T@>@ [I" reel;T@@ [I" reeltalk;T@@ [I"reenhanced-paperclip;T@0@ [I"reenhanced-remixr;T@@ [I" reevoo;T@'@ [I"re_expand;T@@ [I"ref;T@@ [I"refacebook;T@@ [I"refactoring;T@'@ [I" refe;TU;[I" 0.8.0.3;T@ [I" refe2;T@Y@ [I" referee;T@@ [I"reference;T@@ [I"reference_number;T@'@ [I"reference_tracking;T@@ [I"referer-parser;T@@ [I"referer_tracking;T@O@ [I" referly;T@@ [I"referrable_joins;T@@ [I"referrer_tracker;T@|@ [I"referthis;TU;[I" 0.5.37;T@ [I" refh;T@@ [I"refilling_queue;T@"@ [I"refinance;T@'@ [I" refine;T@'@ [I" refined;T@E@ [I" refinery;T@@ [I"refinerycms;T@Sg@ [I"refinerycms-admin-locales;T@@ [I"refinerycms-announcements;T@@ [I"refinerycms-authentication;T@Sg@ [I"refinerycms-ballots;T@!@ [I"refinerycms-banners;T@@ [I"refinerycms-base;T@@ [I"refinerycms-blog;T@z@ [I"refinerycms-bookings;T@+@ [I"refinerycms-brushart_logo;T@@ [I"refinerycms-calendar;T@@ [I"refinerycms-categories;T@@ [I"refinerycms-ckeditor;T@@ [I"refinerycms-codemirror;T@1@ [I"!refinerycms-company_settings;T@R @ [I"refinerycms-contacts;T@@@ [I"refinerycms-convertor;T@@ [I"refinerycms-copywriting;T@@ [I"refinerycms-core;T@Sg@ [I"!refinerycms-css_and_js_files;T@@ [I"refinerycms-dashboard;T@Sg@ [I"refinerycms-downloads;T@@ [I"refinerycms-events;T@"@ [I"refinerycms-feedsucker;T@@ [I"refinerycms-footer-menu;T@@ [I"refinerycms-formtastic;T@@ [I"refinerycms-generators;T@@ [I"refinerycms-homepages;T@@ [I"refinerycms-i18n;T@@ [I"refinerycms-image-gallery;T@6@ [I"refinerycms-image_rotators;T@@ [I"refinerycms-images;T@Sg@ [I"!refinerycms-image_slideshows;T@ @ [I"refinerycms-imajax;T@O@ [I"refinerycms-inquiries;T@+@ [I"refinerycms-javascripts;T@@ [I"refinerycms-jquery_gallery;T@@ [I"refinerycms-libris;T@@ [I"refinerycms-link-image;T@@ [I""refinerycms-location_explorer;T@@ [I"refinerycms-locations;T@@ [I""refinerycms-magickal_workings;T@s@ [I"refinerycms-mailchimp;T@E@ [I"refinerycms-map;T@@ [I"refinerycms-masthead;T@@ [I"refinerycms-members;T@!@ [I"refinerycms-members-ci;T@@ [I"refinerycms-menus;T@@ [I"refinerycms-multiform;T@!@ [I"'refinerycms-multiform-email-action;T@@@ [I"refinerycms-multisite;T@V@ [I"refinerycms-music;T@I@ [I"refinerycms-news;T@@ [I"refinerycms-newsletters;T@s@ [I"refinerycms-page-downloads;T@'@ [I"refinerycms-page-images;T@@ [I"refinerycms-page-menus;T@@ [I"refinerycms-page-resources;T@'@ [I"refinerycms-pages;T@Sg@ [I"refinerycms-page_seeder;T@'@ [I"refinerycms-pc_banners;T@@ [I" refinerycms-pdf_newsletters;T@@ [I"refinerycms-pgsearch;T@@ [I"refinerycms-photo-gallery;T@`@ [I"refinerycms-podcast;T@@ [I"refinerycms-pods;T@ @ [I"refinerycms-portfolio;T@@ [I"refinerycms-products;T@ @ [I"#refinerycms-project_portfolios;T@@ [I"refinerycms-quotes;T@@ [I"refinerycms-real_estates;T@@ [I" refinerycms-recommendations;T@@ [I"refinerycms-redirects;T@@@ [I"refinerycms-registrations;T@`@ [I"#refinerycms-resource-downloads;T@'@ [I"refinerycms-resources;T@Sg@ [I"refinerycms-routes;T@@ [I"refinerycms-s3assets;T@@ [I"refinerycms-search;T@O@ [I"refinerycms-settings;T@@ [I"%refinerycms-settings-initializer;T@e@ [I"refinerycms-simple_members;T@@ [I"refinerycms-sl-calendar;TU;[I" 2.0.6.3;T@ [I"refinerycms-slideshows;T@@ [I"refinerycms-sl-snippets;T@@ [I"refinerycms-sl-videos;T@@ [I"refinerycms-snippets;T@@ [I"refinerycms-stats;T@@ [I"refinerycms-stores;T@@ [I"refinerycms-stylesheets;T@@ [I"refinerycms-tags;T@@ [I"refinerycms-testimonials;T@@ [I"refinerycms-testing;T@Sg@ [I"refinerycms-theming;T@@ [I"refinerycms-tip-of-the-day;T@`@ [I"refinerycms-translations;T@[ @ [I"refinerycms-variants;T@@ [I"refinerycms-varnish-pages;T@G@ [I"refinerycms-videojs;T@Ή@ [I"refinerycms-videos;T@@ [I"refinerycms-vimeo-videos;T@-@ [I"refinerycms-whatson;T@e@ [I"refinerycms-white_papers;T@@ [I"!refinerycms-wordpress-import;T@@ [I"refinerycms-wymeditor;T@'@ [I" refining;T@@ [I" refinuri;T@@ [I" reflect;T@@@ [I"reflection;T@@ [I"reflectiverecord;T@@ [I"reflectorr;T@@ [I" reflex;T@@ [I"reflexion;T@6@ [I"reflexive;T@@@ [I" reflow;T@'@ [I" refr;T@@ [I"refraction;T@@ [I"refreshingmenus_api;T@@ [I" refs;T@@ [I" refuge;T@+@ [I" refuse;T@@ [I"reg;T@@ [I" regdomr;T@|@ [I"regenersis-httpi;T@Q@ [I"regenersis-savon;T@@ [I"regentanz;T@@ [I" regex;T@@ [I"regexbuilder;T@'@ [I"regexhelper;T@@ [I"RegexpBench;T@@ [I"regexp_crawler;T@' @ [I"regexp_debugger;T@'@ [I"regexpert;T@E@ [I"regexp_optimized_union;T@@@ [I"regexp_parser;T@`@ [I" RegExpr;T@E@ [I"regexp_union_hack_for_r186;T@'@ [I"regex_replace;T@@ [I"regex_test;T@E@ [I"regex-treetop;T@@ [I" reggie;T@+@ [I" reggieb;T@@ [I" regin;T@@ [I"region_extractor;T@'@ [I"registrar-client;T@@ [I" registry;T@6@ [I"registry-rails;T@@ [I"regnarto1;T@E@ [I" rego;T@@ [I"rego-data-grid;T@@ [I"rego-date-time-fields;T@+@ [I"rego-devise-lastseenable;T@@ [I"rego-js-builder;T@E@ [I"rego-ruby-ext;T@@ [I" rego_wcm;T@E@ [I"regparsec;T@@ [I"regressiontest;T@E@ [I" regrit;T@@ [I"regular_validation;T@E@ [I" regulate;T@@@ [I" regulos;T@@ [I"regurgitator;T@@ [I"rehabilitate;T@4@ [I" rehash;T@@ [I"rehearsal;T@@ [I"!reidiculous-actionwebservice;T@i@ [I"(reidiculous-actionwebservice-client;T@@ [I" reify;T@'@ [I"reify-core;T@'@ [I" reigns;T@@[I" rein;T@&@ [I"reincarnation;T@`@ [I"reittiopas;T@@ [I" reject;T@'@ [I" rejuicer;T@"@ [I" rekode;T@@ [I"rel;T@'@ [I" relata;T@"@ [I" Relata;T@@ [I" related;T@y@ [I"related_products_spree;TU;[I"3.2;T@ [I"related_words;T@E@ [I"relations;T@"@ [I"relation_scope;T@@ [I" relative;T@@ [I"relative-require;T@s@ [I"relativity;T@@ [I"relatorio-horas;T@6@ [I" relax;T@I@ [I" relax4;T@@S[@>!@N@ [I" relaxdb;T@J@ [I"relaxed-job;T@@ [I" relaxo;T@x@ [I"relaxo-model;T@@ [I"relaxo-query-server;T@@@ [I" relay;T@`@ [I" relayer;T@E@ [I"relayrace;T@@ [I" release;T@x@ [I"releaseable;T@@ [I"releaseinator;T@3@ [I"release_party;T@@ [I" releaser;T@@@ [I" releasy;T@I@ [I"relevance_ipaddress;T@@ [I"relevance_rails;T@@ [I"relevant-datetime;T@E@ [I" relevant-eventbrite-signups;T@E@ [I"relevant-github;T@'@ [I"relevant-google-calendar;T@E@ [I"relevant-html;T@E@ [I"relevant-hudson;T@'@ [I"relevant-twitter;T@@ [I"relevant-widget;T@V@ [I"relex-specjour;T@@ [I"reliable-msg;T@@ [I"reliable-msg-agent;T@@ [I" relief;T@@ [I"reliefweb_scraper;T@@ [I" relish;T@6@ [I"relishable;T@@ [I" relisp;T@x@ [I" relix;T@@ [I"reloadapp;T@'@ [I" reloader;T@@ [I"reloader_gem;T@I@ [I" reloc;T@E@ [I" remail;T@@ [I" remailer;T@@ [I"remail-rails2;T@n@ [I" remark;T@@ [I"remarkable;TU;[I" 3.1.13;T@ [I"remarkable_activerecord;T@!@ [I"remarkable_date_validator;T@@ [I"remarkable_devise;T@@ [I" remarkable_devise_invitable;T@@ [I"remarkable_mongo;T@+@ [I"remarkable_mongoid;T@@ [I"remarkable_mongo_ign;T@@@ [I"remarkable_paperclip;T@@ [I"remarkable_rails;T@!@ [I"Remarkably;T@@ [I"remcached;T@@ [I" remedy;T@@ [I" remember;T@@ [I""remembering_strong_parameters;T@'@ [I"remember_the_meeting;T@@ [I"rememberthemilk;T@@ [I"remember-the-ruby;T@@ [I" remian;T@`@ [I" remind;T@@ [I" reminder;T@@ [I"reminder_aaronj1335;T@'@ [I" remindme;T@@ [I" remit;T@@ [I" remit2;T@@ [I" remix;T@`@1[@!@`@ [@!@`@y;[I" remixr;T@@ [I"remix-stash;T@;@ [I" remnant;T@,@ [I" remo;T@@ [I"remockable;T@`@ [I" remodel;T@@ [I"remodel-h;T@ @ [I"remodel-h-r19;T@,@ [I"remotable;T@@ [I" remote;T@'@ [I"remoteable;T@@ [I"remote_api;T@@ [I"remote_association;T@"@ [I"remotebackup;TU;[I" 0.70.2;T@ [I"remote_book;T@|@ [I"remote-controller;T@@@ [I"remote_cp;T@`@ [I"remote-dcl;T@@ [I"remote_executor;T@@ [I"remote_files;T@ @ [I"remote_history;T@'@ [I"remote_http_testing;T@+@ [I"remote_i18n;T@`@ [I"remote_jenkins_job;T@@ [I"remoteling-ruby;T@@ [I"remote_logger;T@@ [I" remotely;T@@ [I"remote_model;T@@ [I"remote_notifier;T@'@ [I"remote_run;T@g@ [I"remote-session;T@@ [I"remote_syslog;T@t@ [I"remote_syslog_logger;T@@ [I"remote_table;T@@ [I"remote_table-ruby19;TU;[I" 0.2.30;T@ [I"remote_task;T@@ [I" remoting;T@@ [I"remotipart;T@@ [I" remoto;T@E@ [I"remotransmission;T@@ [I"remove_stale_gems;T@@ [I"remove_white_border;T@@ [I" remq-rb;T@E@ [I" remreq;T@@ [I" remy;T@@ [I" rename;T@@ [I" Renamer;T@@ [I" rencdec;T@'@ [I" rencode;T@@ [I" rencrypt;T@E@ [I"render_any;T@@ [I"render_anywhere;T@E@ [I"render_component;T@ @ [I"render_component_vho;T@n>@ [I"render_csv;T@'@ [I"rendered_csv;T@@ [I"render_execjs;T@@ [I"render_inheritable;T@@ [I" renderit;T@I@ [I"render_mate;T@'@ [I"render_parent;T@@ [I"renderpdfasview;T@+@ [I"render_radiant;T@@ [I"!render_with_missing_template;T@"@ [I"rendezvous;T@E@ [I"rendition;T@E@ [I"rene-adhearsion;T@@ [I" renee;T@?@ [I"renee-core;T@?@ [I"reneedv_gem;T@@ [I"reneedv_gem_test;T@@ [I"reneedv_hello_gem;T@'@ [I"reneedv_test_gem;T@'@ [I"renee-render;T@?@ [I" renet;T@N$@ [@f"@N$@M[@f"@N$@y;[I" renfield;T@E@ [I" renmov;T@@ [I" reno;T@@ [I" renren;T@ @ [I" ren_ren;T@E@ [I" renren2;T@@ [I"renren-api;T@R @ [I"renren-mobile;T@@ [I" renshi;T@@ [I"rentjuicer;T@- @ [I" renum;T@ @ [I" renvy;T@@ [I" reorder;T@@ [I"reorganise;T@@ [I" reot;T@@ [I"rep;T@"@ [I"rep.ajax.toolkit;T@@ [I" reparcs;T@^@ [I" Reparto;T@@ [I" repctl;TU;[I" 0.0.72;T@ [I"repeated_auto_complete;T@6@ [I" repeater;T@'@ [I"repertoire;T@@ [I"repertoire-assets;T@@ [I"repertoire-faceting;T@Y@ [I"rep.jquery;T@@ [I" repka;T@'@ [I" repl;T@@ [I"replace_entities;T@f!@ [I"replace_replace;T@'@ [I"replacer.rb;T@E@ [I" replay;T@'@ [I" replica;T@N@ [I"replicant;T@@ [I"replicate;T@@ [I"repl_index;T@'@ [I" reploy;T@@ [I" repo;T@@ [I" repoman;T@@ [I"repo_manager;T@@ [I" repomap;T@@ [I" repomate;T@@ [I" repop;T@@ [I" report;T@`@ [I"reportable;T@N@ [I"reportbuilder;T@@ [I"report_engine;T@u"@ [I" reporter;T@@ [I"reportTestUnit;T@@ [I" reposh;T@ @ [I" Reposh;T@|@ [I"repository;T@'@ [I" repozish;T@@ [I"represent;T@@ [I"representable;T@} @ [I"representable_resources;T@E@ [I"representation;T@@@ [I"representations;T@"@ [I"representative;T@W@ [I"representative_view;T@@ [I"re-pricing-nl;T@'@ [I"reps_client;T@`@ [I" rept;T@I@ [I" reptile;T@@@ [I" repub;T@@ [I"republica_virtual;T@@ [I"reputation;T@@ [I"request-auditor;T@@ [I"requested;T@@ [I"request_exception_handler;T@R @ [I"request_log;T@@@ [I"request-log-analyzer;TU;[I" 1.12.7;T@ [I"request_lumberjack;T@E@ [I"requestly;T@'@ [I"requestor;T@+@ [I"request_profiler;T@E@ [I"request_recorder;T@@@ [I"requests_counter;T@@ [I"request_store;T@W@ [I"request_visualizer;T@@ [I" requeus;T@`@ [I" requidef;T@@ [I" require;T@@ [I" require2;T@@ [I"require_all;T@u@ [I"require_assets;T@@ [I"require_columns;T@'@ [I" required;T@6@ [I"required_options;T@@ [I"require-dsl;T@@ [I"require-extra;T@@ [I"require_gist;T@"@ [I"require-here;T@@ [I"require_hooks;T@@ [I"requirejs-controllers;T@`@ [I"requirejs_optimizer;T@@ [I"requirejs-rails;T@e@ [I"require-magic;T@@ [I"require-me;T@u/@ [I"requirement_authorization;T@@ [I"requirements;T@@ [I"require_options;T@@ [I"require_paranoia;T@@ [I"RequirePaths;T@@ [I"require-prof;T@'@ [I"require_relative;T@@ [I"require_reloader;T@`@ [I"requires_approval;T@W@ [I"requires_approval_rails_2;T@@ [I"requires_shunt;T@E@ [I" reqwire;T@'@ [I" rerails;T@@ [I" reraise;T@'@ [I" rereplay;T@!@ [I"reretryable;T@`@ [I" rerun;T@@ [I" resat;T@@ [I"rescheduler;T@@ [I" rescik;T@@ [I" rescpos;T@@ [I"rescue_each;T@@ [I"rescue_me;T@`@ [I"rescue-me;T@@ [I" reseed;T@`@ [I"resellerclub;T@E@ [I"reservoir;T@@@ [I" resh;T@"@ [I"residence;T@p@ [I" resident;T@@ [I"resilient_socket;T@x@ [I" resin;T@@ [I" resizor;T@ @ [I"resmarkee;T@`@ [I" resolved;T@@ [I" resolver;T@@@ [I"resolv-ipv6favor;T@@ [I" resort;T@@ [I"resort-bjones;T@@ [I" resource;T@@ [I"resource_awareness;T@I@ [I"resource_controller;T@$@ [I"#resource_controller_extensions;T@@ [I"resource_controller_views;T@$@ [I"resource_defaults;T@@ [I"resourceful;T@@ [I"resourceful_controller;T@'@ [I"resource_full;T@@ [I"resourceful_loader;T@@ [I"resourceful_parenting;T@@ [I"resource_inclusion;T@E@ [I"resourceize;T@@@ [I"resourcelogic;T@6@ [I"resource_mapper;T@"@ [I"resource_pool;T@@ [I""resource-presentation-helpers;T@`@ [I"resource_proxy;T@@ [I"resourcer;TU;[I" 4.2.0;T@ [I"resourcery;T@'@ [I"resources_controller;T@@ [I"resources_id_replace;T@'@ [I"resourcy-rails;T@@ [I" respec;T@@ [I"responder;T@I@ [I"responder_controller;T@x@ [I"responders;T@@ [I"responders_backport;T@@@ [I"respondie;T@- @ [I"respond-rails;T@@ [I"responds_to_parent;T@@ [I"responds_to_parent_ffcrm;T@@ [I"respond_to;T@E@ [I"respond-to;TU;[I"2.6;T@ [I"respond_to_missing;T@@ [I"respond_with;T@"@ [I"respond_with_backport;T@@ [I"responsalizr;T@@ [I"response_assembler;T@'@ [I"response_code_matchers;T@E@ [I"response_for_rails;T@@ [I"response_for_rc_rails;T@I@ [I"response_logger;T@@ [I"responsive;T@} @ [I"responsive_image_tag;T@@ [I"responsive-sass;T@`@ [I"responsys;T@@ [I"responsys-client;T@E@ [I"resqovery;T@@ [I" resque;T@~l@ [I""resque-access_worker_from_job;T@@ [I"!resque_action_mailer_backend;T@@ [I"resque_any_method;T@`@ [I"resque-approval;T@u@ [I"resque-aps;T@@ [I"resque-async_deliver;T@N@ [I"resque-async-method;T@s@ [I"!resque-async-method-enhanced;T@@ [I"resque-batched-job;T@@ [I"resque-batched-logger;T@@ [I"resque-batchworker;T@@ [I"resque-brokered;T@@ [I"resque-cedar;T@@ [I"resque-class-stats;T@'@ [I"resque-cleaner;T@ @ [I"resque_coalmine;T@'@ [I""resque-concurrent-restriction;T@M+@ [I"resque-crashlog;T@@ [I"resque-data;T@'@ [I"resque-data-warehouse;T@@@ [I"resque-dedup;T@'@ [I"resque-delay;T@@ [I"resque-delayable;T@@ [I"resque-delayed;T@@ [I"resque_delivery;T@'@ [I"resque-director;T@@ [I"resque-durable;T@@ [I"resque-dynamic-queues;T@@ [I"resque_empty_queue;T@@ [I"resque-enqueue-arity;T@'@ [I" resque-enqueue-lock-timeout;T@x@ [I"resque-enqueue-logger;T@@ [I"resque-ensure-connected;T@@ [I"resque-exceptional;T@@ [I"resque-exponential-backoff;T@`@ [I"resque-failed-job-mailer;T@'@ [I"resque-fairly;T@@ [I"resque-fallback-inline;T@@ [I"resque-filter;T@@ [I"resque-fine-grained-locks;T@@ [I"resque-forker;T@@ [I"resque-future;T@@ [I"resque-heartbeat;T@@ [I"resque-heroku;T@@ [I"resque-heroku-autoscaler;T@@ [I"resque-heroku-scaler;T@@ [I"!resque-heroku-scaling-canary;T@@ [I"resque-hijacker;T@E@ [I"resque-history;TU;[I" 1.9.5;T@ [I"resque-hitman;T@'@ [I"resque-honeybadger;T@@ [I"resque-igo;TU;[I" 1.12.8;T@ [I"resque-insist;T@@ [I"resque-jobs-per-fork;T@&@ [I"resque-job-stats;T@@ [I"resque-job-tracking;T@"@ [I"resque-kalashnikov;T@@ [I"resque-kawai;T@1@ [I"resque-lifecycle;T@`@ [I"resque-lock;T@@ [I"resque-lock-retry;T@E@ [I"resque-lock-timeout;T@@ [I"&resque-lock-timeout-process-aware;T@`@ [I"resque-logger;T@@ [I"resque-lonely_job;T@@ [I"resque-loner;T@u@ [I"resque_mailer;T@ @ [I"resque_mailhopper;T@@ [I"resque_mail_queue;T@x@ [I"resque-meta;T@O@ [I"resque-methodize;T@@ [I"resque-metrics;T@@ [I"resque-mock;T@`@ [I"resque-mongo;TU;[I" 1.9.8.1;T@ [I"resque-mongo-groups;T@y@ [I"resque-mongo-scheduler;T@+@ [I"resque-multi-job-forks;T@@ [I"$resque-multiple-failure-backend;T@@ [I"resque-multi-step;T@@ [I"resque-oink;T@'@ [I"resque-pagerduty;T@@ [I"resque-pause;T@"@ [I"resque-picky_worker;T@@ [I"resque-pool;T@@ [I"resque-pool-dynamic;T@6@ [I"resque-priority;T@`@ [I"resque-priority-jobs;T@I@ [I"resque-progress;T@@ [I"resque-pubsub;T@@ [I"resque-queueable;T@@ [I"resque-queue-lock;T@'@ [I"resque-queue-priority;T@@ [I"resque-queue-stats;T@@ [I"resque-rails;T@@ [I"resque-ranger;T@@@ [I"resque-remora;T@@ [I"resque-remote;T@`@ [I"resque-reset;T@E@ [I"resque-restriction;T@@ [I"resque-result;T@@ [I"resque-retry;T@@ [I"resque-retry-on-lock;T@@ [I"resque-scheduler;T@O@ [I"resque-send-later;T@@ [I"resque-sentry;T@@ [I"resque-serializable;T@E@ [I"resque-sliders;T@@ [I"resque_spec;T@@ [I"resque-stats;T@`@ [I"resque-statsd;T@'@ [I"resque-status;T@x@ [I"resque-swapper;T@@@ [I"resque-tabber;T@'@ [I"resque-task;T@@ [I"resque-telework;T@@ [I"resque_template;T@@ [I"resque-throttle;T@@ [I"resque-timeframe;T@@ [I"resque-timeout;T@@ [I"resque-top;T@'@ [I"resqueue-metadata;T@E@ [I"resque_ui;T@} @ [I"resque-uniq;T@n@ [I"resque-unique;T@@ [I"resque-unique-job;T@'@ [I"resque_unit;T@"@ [I"resque_utils;T@"@ [I"resque-uuid;T@@@ [I"resque-waiting-room;T@6@ [I"resque-web_no_act;T@@ [I"resque-workers-lock;T@.@ [I" ressbo;T@@ [I" rest;T@ @ [I"restafari;T@@ [I" restalk;TU;[I" 0.0.0.14;T@ [I" restapi;T@@ [I" rest_api;T@@ [I"restapi_doc;T@@ [I"restart_notifier;T@@@ [I" restarts;T@@ [I"rest-assured;T@@ [I"restaurant_week_boston;T@@ [I"restbooks;T@@ [I" restbox;T@@ [I"rest_cache;T@@ [I"rest-client;T@j@ [I"rest-client-components;T@N@ [I"rest-client-multipart;T@@ [I"rest-client-next;T@@ [I"rest-client-next-dshelf;T@l@ [I"restclient_with_cert;T@V@ [I"rest_connection;T@W@ [I"rest-core;T@@ [I" rested;T@@ [I"rest_ejabberd;T@E@ [I"rest_engine;T@"@ [I" resterl;T@3@ [I" restest;T@@ [I" restet;T@'@ [I"restfolia;T@@ [I"restfolia-uritemplate;T@'@ [I"restforce;T@@ [I" restfs;T@'@ [I" restful;T@}@ [I"restful_acl;T@@ [I"restful_adhearsion;T@@ [I"restful_api_authentication;T@I@ [I"restful_authentication;T@@ [I"restful-authentication;T@u@ [I"restfulie;T@@ [I"restfulie-nosqlite;T@@ [I"restful_jsonp;T@@ [I"restfully;T@ @ [I"restfully-addons;T@@ [I"restful_metrics;T@T @ [I"restful_press;T@'@ [I"restful_query;T@@ [I"restful_query-rails3;T@R @ [I"restful_route_version;T@@ [I"restful_serializer;T@|@ [I"restful_spec;T@@ [I" restfulx;T@ @ [I"rest-graph;T@@ [I" resthome;T@@ [I"restility;T@"@ [I"rest-in-motion;T@@ [I"rest_in_peace;T@@ [I"rest_in_place;T@ @ [I"restis-client;T@@@ [I" restivus;T@@ [I"restivus-gis;T@"@ [I" rest_kat;T@@ [I"restkit-generate;T@!@ [I"rest_model;T@@ [I"rest-more;T@O@ [I" resto;T@|@ [I"rest-object;T@'@ [I"rest-open-uri;T@@ [I"restparty;T@6@ [I" restr;T@@ [I" restrack;T@@ [I"restrack-balancer;T@@ [I"restrack-client;T@u@ [I"restrack-splitter;T@@ [I"rest_request;T@@ [I"rest_resource;T@@ [I"restricted_array;T@ @ [I"restricted_attributes;T@@ [I"rest-segment;T@E@ [I"rest-sinatra;T@x@ [I" reststop;T@J@ [I"rest-terminal;T@g@ [I"restulicious;T@|@ [I" resty;T@@ [I"resty-generators;T@n@ [I" resu;T@E@ [I"resubject;T@"@ [I" result;T@E@ [I"resumator;T@'@ [I"resumator-client;T@6@ [I" resume;T@E@ [I" resumerb;T@@ [I"resumetools;TU;[I" 0.2.7.6;T@ [I"retailigence;T@@ [I" retarded;T@<@ [I"re_template;T@H@ [I"rethinkdb;TU;[I" 1.2.6.0;T@ [I" rethtool;T@E@ [I"retina_image_tag;T@@ [I"retina_rails;T@E@ [I"retina_tag;T@@ [I" retlang;TU;[I"1.0.5.422;T@ [I" retmx;T@*@ [I" retort;T@@ [I" retreat;T@@@ [I" retreval;T@@@ [I"retriable;T@ @ [I" retries;T@@ [I"retriever;T@@ [I"!retroactive_module_inclusion;T@@ [I"retrograph;T@@ [@%@@[I"retrograph_easy;T@!@ [I" retry;T@@ [I"retryable;T@@ [I"retryable-rb;T@@ [I"retryable_record;T@`@ [I"retry_block;T@N@ [I"retry-handler;T@!@ [I"retrying_proxy;T@@@ [I"retry-this;T@s@ [I"retry_upto;T@@ [I" rets;T@x@ [I" rets4r;T@ʰ@ [I"rets-sarmiena;T@@@ [I" retter;T@[@ [I"return_bang;T@s@ [I"returning;T@"@ [I" reuben;T@'@ [I"reubypathdb;T@@ [I" reunion;T@@ [I" reusable;T@@ [I" reuser;T@@ [I"rev;T@@ [I" revactor;T@|@ [I" reval;T@E@ [I"revans_right_aws;T@@ [I" revdev;T@6@ [I" reve;T@@ [I" reveal;T@@ [I" revealer;T@@ [I"revelation-image_science;T@@ [I" revenant;T@E@ [I" revenc;T@6@ [I" revent;T@y@ [I"reversable_data_migration;T@@ [I"reverse_captcha;T@'@ [I"reverse_chronic;T@'@ [I"reverse_geocoder;T@'@ [I"reverse_markdown;T@@ [I"reverse-markdown;T@@@ [I"reverse-polish-calculator;T@'@ [I"reverserequire;T@@ [I"reverse-require;T@@ [I"reverse-tunnel;T@@ [I"reversible_data;T@@ [I"reversible_data_migration;T@`@ [I" reverso;T@'@ [I"revertible_paper_trail;T@@ [I"rev_httpserver;T@@ [I" review;T@@ [I" reviewed;T@'@ [I"reviewed-auth;T@E@ [I"reviewed_braai;T@V@ [I" reviewr;T@@ [I" revise;T@'@ [I"revisionable;T@@ [I"revisions;T@@ [I"revision-san;T@@ [I"revisor_client;T@E@ [I" revit;T@E@ [I"rev_memcache;T@@ [I"revo-lockdown;T@@ [I" revolt;T@@ [I"revolution;T@@ [I" revolver;T@@ [I"revo-nokogiri;T@@[I"revo-paper_trail;T@@ [I"revo-remit;T@@ [I"revo-seed-fu;T@@ [I"revo-ssl_requirement;T@@ [I"revo-webrat;T@@ [I" revrise;T@@ [I" revup;T@@ [I" Revver4R;T@@ [I"rev-websocket;T@6@ [I"reward_station;T@V@ [I"reward_station-gilman;T@n@ [I" rewrite;T@@ [I"rewritten;T@@ [I" rews;T@u @ [I"rex;T@@ [I" rexcel;T@@@ [I"rexchange;T@@ [I" rexec;T@@ [I" rexfeng;T@E@ [I" rexical;T@W@ [I" rexle;TU;[I" 0.9.68;T@ [I"rexle-builder;T@@ [I"rexleparser;T@@ [I"rexml-expansion-fix;T@@ [I" rexpl;T@'@ [I" rexslt;TU;[I" 0.4.00;T@ [I" rext;T@X@ [I" rextra;T@@ [I" rextract;T@|@ [I" rezgo;T@@ [I"rfacebook;T@ @ [I"RFb;T@@ [I" rfc2047;T@!@ [I"rfc-3339-attributes;T@`@ [I" rfc822;T@@@ [I" rfc-822;T@@ [I"rfc822_util;T@@@ [I"rfc-822-validator;T@'@ [I"rfc-base32;T@@ [I"rfcommerce;T@@ [I"rfcommerce_api;T@@ [I"rfcommerce_auth;T@@ [I"rfcommerce_core;T@@ [I"rfcommerce_dash;T@@ [I"rfcommerce_promo;T@@ [I"rfcommerce_sample;T@@ [I"rfcommerce_sandbox;T@@ [I"rfc-ws-client;T@@ [I"rfeedfinder;T@@ [I"rfeedparser;TU;[I" 0.9.951;T@ [I"rfeedparser_ictv;TU;[I" 0.9.932;T@ [I"rfeedparser-ictv;TU;[I" 0.9.931;T@ [I"rfeedreader;T@P@ [I"rferraz-churn;T@L=@ [I"rferraz-metric_fu;T@ @ [I" rfetion;T@@ [I" rffw;T@@ [I" rfgraph;T@[ @ [I" rfid;T@@ [I" rfid4r;T@@ [I" rfid_api;T@"@ [I"rfid-usb-gom-sensor;T@1@ [I" rfil;T@[ @ [I" rfile;T@@ [I"rfilemaker;T@E@ [I" rfits;T@'@ [I" Rfizzy;T@@ [I" rflak;T@R @ [I" rflickr;TU;[I"2006.02.01;T@ [I"rflowplayer;T@@ [I"rfm;T@@ [I" rforce;T@Q@ [I"rforcedotcom;TU;[I" 20.0.0;T@ [I"rforce-raygao;T@@ [I" rformat;T@@@ [I"rformspec;T@[ @[@'@R @ [I"rformunit;T@`@[@'@@[I" rfortune;T@@ [I" rfpset;T@E@ [I"rfreechart;T@@ [I"rfs;T@[ @ [I" rfsms;T@@@ [I" rftp;T@ @ [I" rfuse;T@@ [I"rfuse_flac_to_mov_fs;T@E@ [I" rfusefs;T@@ [I" rfuse-ng;T@J@ [I"rfuse_symbolic_fs;T@@ [I" rfuzz;T@B@ [I" rfuzzy;T@E@ [I" r-fxxk;T@x@ [I"rgabo-readability;T@+@ [I" rgadu;T@@ [I"rgarner-csv-mapper;T@@ [I" rgauge;T@@ [I"rgb_to_hex;T@@ [I"rgd;T@@ [@?'@@ [I"rgd2-ffij;T@@ [I" rgdata;T@@ [I" rgdb;TU;[I"0.0.1.245;T@ [I" rgem2rpm;T@G.@ [I" rgen;T@@ [I" rgen-xsd;T@@ [I" rgeo;T@[@ [I"rgeo-activerecord;T@_@ [I"rgeo-geojson;T@@ [I" rgeoip;T@@ [I"rgeoserver;T@OZ@ [I"rgeo-shapefile;T@@ [I" rget;T@-@ [I" rghost;TU;[I" 0.8.7.9;T@ [I"rghost_barcode;T@B@ [I"rghost_rails;T@@ [I"rghost-ruby1.9-beta;TU;[I" 0.8.7.2;T@ [I" rgit;T@"@ [I" rgithook;T@i@ [I"rgl;T@x@ [I" rgloader;T@@ [I" rglpk;T@@ [I"rglviewer;T@E@ [I"RGnuchess;T@@ [I" rgoogle;T@@ [I" rgossip;T@@ [I" rgossip2;T@,@ [I" rgovdata;T@@ [I"rg-phx-test;T@"@ [I" rgreek;T@@ [I" rgroups;T@I@ [I" rg_stats;T@x@ [I" rgtk;T@@ [I" rgviz;TU;[I" 0.49;T@ [I"rgviz-rails;TU;[I" 0.76;T@ [I"rgz;T@@ [I"rha;T@`@ [I"rhabarber;T@'@ [I" rhack;T@x@ [I" rhaiker;T@@@ [I" r_hapi;T@@@ [I" rhapr;T@@ [I" rhaproxy;T@6@ [I" rhash;T@n@ [I"rhc;T@N'@ [I" rhcp;T@W.@ [I"rhcp_shell;T@"@ [I" rhc-rest;T@@ [I" rhello;T@'@ [I" rhessus;T@'@ [I"rhighlightjs;T@@ [I"rhinestone;T@E@ [I"rhino.mocks;TU;[I" 3.6.0.0;T@ [I" rhizmail;T@|@ [I" rhj_init;T@,@ [I" rhmp;T@@ [I"rhn_satellite;T@@ [I"rhoconnect;TU;[I" 3.4.2;T@ [I"rhoconnect-adapters;T@ @ [I"rhoconnect-rb;T@@ [I" rhocr;T@|@ [I" rhodes;TU;[I" 3.5.1.12;T@ [I"rhodes-framework;T@u@ [I"rhodes-translator;T@"@ [I"rhogallery;T@6@ [I" rholdem;T@@ [I"rholidays;T@@ [I"rhomobile-cijoe;T@V@ [I"rhomobile-debug;T@ @ [I"rhomobile-grit;T@C@ [I" rhook;T@@ [I" rhosetta;T@@ [I" rhosync;TU;[I" 2.1.17;T@ [I"rhosync_api;T@6@ [I"rhr;T@+@ [I"rhtml2pdf;T@'@ [I" rhubarb;T@@ [I" rhuidean;T@@ [I"rhunspell;T@'@ [I"rhx;T@'@ [I" rhyme;T@+@ [I" rhymes;T@"@ [I" rhype;T@@ [I"rhythmruby;T@`@ [I" ri18n;T@"@ [I" riaction;T@@ [I"riaction_genie;T@@ [I"riak-cache;T@@ [I"riak-client;T@@ [I"riak-dt-ruby;T@'@ [I" riakpb;T@@ [I" riakrest;T@@ [I"riak_sessions;T@!@ [I"riak-sessions;T@ @ [I"riak-shim;T@@ [I" riaktor;TU;[I" 0.0.4.3;T@ [I" rials;T@@ [I"rib;T@@ [I" ribbit;T@@ [I" ribbon;T@@ [I" rib_fix;T@@@ [@((@@@ [I"rib-heroku;T@@ [I" ribit;T@@ [I" ribitco;T@'@ [I" riblet;T@@ [I" ribs;T@E@ [I" ribusb;T@'@ [I"ric;T@&@ [I" ri_cal;T@@ [I"ricardoo27-writeexcel;TU;[I" 0.6.12.2;T@ [I" rice;T@@ [I"rice-jdguyot;T@@ [I"ricepaper;T@"@ [I" ricer;T@+@ [I" rich;T@@ [I" rich_cms;T@@ [I" richerb;T@@ [I" richfile;T@"@ [I"rich_i18n;T@@ [I"richmeyers-whenever;T@@ [I"rich_pluralization;T@ @ [I" richrc;T@"@ [I"rich_support;T@@@ [I"rich_table_component;T@n@ [I"richunits;T@@ [I"richzhou-rspec-rails;T@@ [I"rickshaw_rails;T@"@ [I" riclib;T@`@ [I" rico;T@@ [I" ricodigo-capistrano-recipes;T@@ [I" ricogen;T@@ [I"ricordami;T@@ [I" ricque;T@@@ [I"rid;T@@ [I" rid-core;T@@ [I" rid-dd;T@|@ [I" riddick;T@@ [I" riddle;T@;@ [I"riddle-huacnlee;T@@ [I" riddler;T@-@ [I" ride;T@@ [I" rider;T@!@ [I"rid-export;T@@@ [I" rid-fn;T@E@ [I" ridic;T@@ [I"Ridiculous;T@@ [I" rid-init;T@@@ [I" ridley;T@y@ [I" rid-push;T@@@ [I" riel;T@@ [I" rieles;T@@ [I"riemann-client;T@V@ [I"riemann-dash;T@`@ [I"riemann-hbase;T@E@ [I"riemann-tools;T@@ [I" riess;T@V@ [I" rif-cs;T@@ [I" riff;T@@ [I"riffraff_jsonpath;T@@ [I" rifle;T@g@ [I" ri_for;T@@ [I" rift;T@'@ [I"rig;T@h@ [I" rigger;T@R@ [I"right_agent;T@l5@ [I"right_amqp;T@@ [I"right_api;T@6@ [I"right_api_client;T@@ [I"right_aws;T@ @ [I"right_aws_ec2dream;T@ @ [I"right_aws-yodal;T@Q@ [I"right_data;TU;[I" 0.7.13;T@ [I"right_flexiscale;T@@ [I"right_gogrid;T@@ [I"right_http_connection;T@@ [I"rightimage_tools;T@@ [I"rightmove;T@ @ [I"rightmove_wrangler;T@N$@ [I" rightnow;T@'@ [I"rightnow_client;T@'@ [I"rightnow_oms;T@1@ [I"right_popen;T@/@ [@(@/@[I"right-popen;T@@ [@(@@[I"right_rackspace;T@d@ [I"right-rails;T@@ [I"rightresource;T@@ [I"right-scale-api;T@@ [I"rightscale_api;T@x@ [I"rightscale-api;T@@ [I"RightScaleAPIHelper;T@_@ [I"rightscale-autocomplete;T@@@ [I"rightscale-nanite;TU;[I" 0.4.1.22;T@ [I"rightscale-nanite-dev;T@(@ [I"rightscaler;T@@ [I"right_scraper;T@ @ [I"rightscript_sync;T@@ [I"right_session;T@@ [I"rightsignature;T@@ [I"right_slicehost;T@@ [I"rightstuff;T@@ [I"right_support;TU;[I" 2.6.12;T@ [I" righttp;T@|@ [I" rigor;T@E@ [I"ri_hiya_delija_tony;T@'@ [I" riif;T@@ [I" riik;T@@ [I"rik;T@@@ [I" rika;T@Q@[I" riki;T@'@ [I"ril;T@@@ [I" rill;T@@@ [I" rillow;T@@ [I" ril_text;T@'@ [I"rim;T@l@ [I" RIMA;T@@ [I" riml;T@@ [I" rind;T@|@ [I" rindle;T@@ [I"ringbarker;T@E@ [I"ringcentral;T@@ [I" ringer;T@'@ [I"ringioAPI;T@@ [I"ringleader;T@@ [I" ringo;T@E@ [I"RingRingAds;T@@ [I"RingyDingy;T@u@ [I" rinject;T@@@ [I" rink;T@@ [I" rinku;T@@ [I"rinku-ffi;T@@ [I" rino;T@@ [I" RInotify;T@B@dn[I" rinruby;T@+@ [I"rinterceptor;T@@ [I"rinterface;T@@ [I"rio;T@@ [I" rio-ffi;T@`@ [I" riojs;T@n@ [I" rios;T@x@ [I" riot;TU;[I" 0.12.5;T@ [I"riot-carrierwave;T@'@ [I"riot-datamapper;T@@ [I"riot-fancydots;T@E@ [I"riot-gear;T@V@ [I" riot-js;T@'@ [I"riotjs-xpcc;T@E@ [I"riot-mongoid;T@@ [I"riot-mongo_mapper;T@@ [I"riot_notifier;T@@ [I"riot_on_rails;T@E@ [I"riot-rack;T@'@ [I"riot_rails;T@V@ [I"riot-rails;T@@ [I"rip;T@@ [I"rip_hashrocket;T@@ [I" ripl;T@X@ [I"ripl-after_rc;T@@ [I"ripl-auto_indent;T@@ [I"ripl-color_error;T@`@ [I"ripl-color_result;T@@ [I"ripl-color_streams;T@@@ [I"ripl-commands;T@@ [I"ripl-debug;T@@ [I" ripl-em;T@@ [I"ripl-fresh;T@@ [I"ripl-hijack;T@@ [I"ripl-i18n;T@@ [I" ripl-irb;T@I@ [I"ripl-johnson;T@@ [I"ripl-multi_line;T@@ [I"ripl-padrino;T@'@ [I"ripl-play;T@@ [I"ripl-profiles;T@@ [I"ripl-rack;T@@ [I"ripl-rails;T@@ [I" ripl-rc;T@,@ [I"ripl-readline-em;T@@ [I"ripl-ripper;T@@ [I"ripl-rocket;T@`@ [I"ripl-shell_commands;T@@ [I"ripl-short_errors;T@@ [I"ripltools;T@@ [I"ripl-watir;T@"@ [I" ripper;T@W@ [I"ripper2ruby;T@E@ [I"ripper-plus;T@@ [I"ripper_ruby_parser;T@V@ [I"ripper-tags;T@`@ [I" ripple;T@@ [I"ripple_oh_caramba;T@@ [I"ripple_searchable;T@@ [I"rippy_rules;T@E@ [I"riproad_rapns;T@;@ [I" ript;T@@ [I"ripta-dm-paperclip;TU;[I" 2.6.2.1;T@ [I"ripxplore;TU;[I" 0.17.1;T@ [I" risbn;T@@ [I" risc;T@E@ [I" riscfuture-hoptoad_notifier;T@@ [I" riscos;T@|@ [I" rish;T@@ [I" riskman;TU;[I" 0.23;T@ [I"risk_of_burns;T@@ [I" risky;T@@ [I" rison;T@O@ [I"risosu-san;T@@ [I" risp;T@'@ [I" risu;T@@ [I"rit;T@'@ [I" ritalin;T@E@ [I" ritex;T@@ [I" ritsu;T@@ [I" ritual;T@@ [I" rity;T@@ [I"rivendell;T@@@ [I"rivendell-api;T@"@ [I"rivendell-import;T@"@ [I" river;T@@ [I" ri_vim;T@g@ [I"rivsc-xmlattributes;T@@ [I"rix;T@@ [I" rixi;T@[@ [I" rixius;T@n@ [I"rizwanreza-chronic;T@'@ [I"rj;T@*@ [I" rjab;T@I@ [I"rjack-async-httpclient;TU;[I" 1.7.9.0;T@[I"rjack-commons-codec;T@@[I"rjack-commons-dbcp;T@(k@[I"rjack-commons-dbutils;T@@[I"rjack-commons-pool;TU;[I" 1.5.7.0;T@[I"rjack-guava;TU;[I" 13.0.1.0;T@[I"rjack-httpclient-3;T@Δ@[I"rjack-httpclient-4;TU;[I" 4.2.2.0;T@[I"rjack-icu;TU;[I" 4.50.1.0;T@[I"rjack-jackson;TU;[I" 1.8.11.0;T@[I"rjack-jdom;TU;[I" 1.1.0.2;T@[I"rjack-jets3t;T@sl@[I"rjack-jetty;TU;[I" 9.0.0.1;T@[I"rjack-jetty-jsp;TU;[I" 9.0.0.0;T@[I"rjack-jms;T@@[I"rjack-jms-spec;T@@[I"rjack-logback;T@@[I"rjack-lucene;TU;[I" 4.0.0.0;T@[I"rjack-maven;TU;[I" 3.0.4.0;T@[I"rjack-mina;TU;[I" 1.0.10.0;T@[I"rjack-nekohtml;TU;[I" 1.9.17.0;T@[I"rjack-netty;TU;[I" 3.4.6.0;T@[I"rjack-protobuf;TU;[I" 2.4.1.0;T@[I"rjack-qpid-client;T@,@[I"rjack-rome;T@@[I"rjack-slf4j;TU;[I" 1.7.2.0;T@[I"rjack-solr;T@E*@[I"rjack-tarpit;T@@[@m*@@ [I"rjack-xerces;TU;[I" 2.9.1.0;T@[I"rjack-zookeeper;TU;[I" 3.4.5.0;T@[I"rjaswal-geokit;T@@ [I"rjb;T@@[@|*@@([@|*@@?[@|*@}@[@|*@@ [I"rjb-require;T@'@ [I"rjharmon-strongbox;T@@ [I" rjhead;TU;[I" 2.88.6;T@ [I" rjiffy;T@`@ [I"rjoystick;T@@ [I"rjr;T@- @ [I" rjson;T@|@ [I"rkamyk-ya2yaml;TU;[I" 0.26;T@ [I" rkelly;T@ @ [I"rkerberos;T@@ [I"rkeychain;T@@ [I" rkid;T@`@ [I" rkill;T@'@ [I" rkit;T@'@ [I"rkj-character-encodings;T@@ [I"rkj-merb-i18n;T@@ [I"rkv;T@@ [I" rlanyrd;T@'@ [I" rlayout;T@@ [I" rldap;T@"@ [I"rleber-textmate;T@w@ [I" rlet;T@@ [I" rlex;T@@ [I"rl_hi_damfly;T@'@ [I"rl_hiya_allen_douglas;T@@ [I"!rl_hiya_allen_douglas_mepis1;T@'@ [I"rl_hiya_ambrogio_daniel;T@'@ [I"rl_hiya_amian_david;T@'@ [I"rl_hiya_ana_rey;T@'@ [I"rl_hiya_askins_karen;T@'@ [I"rl_hiya_ataides_neto;T@'@ [I"rl_hiya_baiki_dot;T@'@ [I"rl_hiya_bao_pham;T@E@ [I"rl_hiya_bapat_anand;T@'@ [I"rl_hiya_barenko_rafael;T@'@ [I"rl_hiya_baruah_biswajit;T@'@ [I"rl_hiya_belnicoff_marcelo;T@'@ [I"rl_hiya_bhat_sathya;T@'@ [I"rl_hiya_bjorklund_patrik;T@"@ [I"rl_hiya_booth_rob;T@'@ [I"rl_hiya_brooks_jason;T@'@ [I"rl_hiya_bruno_campos;T@'@ [I"rl_hiya_buzain;T@'@ [I"rl_hiya_cls;T@'@ [I"rl_hiya_cordeiro_luciano;T@'@ [I"rl_hiya_courault_gustavo;T@'@ [I"rl_hiya_cox_nathan;T@'@ [I"rl_hiya_cressman_jeff;T@'@ [I"rl_hiya_crisostomo_john;T@'@ [I"rl_hiya_crissman_chad;T@'@ [I"rl_hiya_dackam_richardson;T@'@ [I"rl_hiya_dalen_vegard;T@'@ [I"rl_hiya_daniel_camargo;T@'@ [I"rl_hiya_diaz_federico;T@'@ [I"rl_hiya_diez_carlos;T@'@ [I"rl_hiya_donna_j_harris;T@'@ [I"rl_hiya_dorsey_laurens;T@E@ [I"rl_hiya_duarte_johan;T@'@ [I"rl_hiya_ferlinghetti_folco;T@'@ [I"rl_hiya_fernando_alvarez;T@'@ [I"rl_hiya_ferreira_obedi;T@'@ [I"rl_hiya_flavius_stef;T@E@ [I"rl_hiya_fortuna_gabriel;T@'@ [I"rl_hiya_garcia_jcarlos;T@'@ [I"rl_hiya_garcia_leandro;T@'@ [I"rl_hiya_garoche_michele;T@'@ [I"rl_hiya_gomes_stephane;T@'@ [I" rl_hiya-guilherme_railander;T@'@ [I"rl_hiya_gustafson_david;T@'@ [I"rl_hiya_hacohen_liron;T@'@ [I"rl_hiya_henry_wolfson;T@'@ [I"rl_hiya_hernandez_antonio;T@'@ [I"rl_hiya_hill_barrie;T@'@ [I"rl_hiya_hill_raymond;T@'@ [I"rl_hiya_jacobsen_glenn;T@'@ [I"rl_hiya_johan_burger;T@'@ [I"rl_hiya_jure_srsen;T@'@ [I"rl_hiya_kayacik_umit;T@'@ [I"rl_hiya_kbg;T@'@ [I"rl_hiya_keith_donaldson;T@'@ [I"rl_hiya_kheti_sivanand;T@'@ [I"rl_hiya_kim_michael;T@'@ [I"rl_hiya_king_brian;T@'@ [I"rl_hiya_kostash_ryleigh;T@'@ [I"rl_hiya_Koval_Artem;T@'@ [I"rl_hiya_Kretzman_Peter;T@'@ [I"rl_hiya_kryptyk_fysh;T@'@ [I"rl_hiya_lake_david;T@'@ [I"rl_hiya_leonard_tim;T@'@ [I"rl_hiya_leong_jet;T@'@ [I"rl_hiya_lima_sergio;T@'@ [I"rl_hiya_lingefors_eiwe;T@'@ [I"rl_hiya_loeffler_david;T@'@ [I"rl_hiya_lopez_alfonso;T@'@ [I"rl_hiya_lunar_santiago;T@@ [I"rl_hiya_lyons_david;T@'@ [I"rl_hiya_lysik_robert;T@'@ [I"rl_hiya_magotswi_mwaki;T@E@ [I"rl_hiya_major_dennis;T@'@ [I"rl_hiya_marin_jesus;T@'@ [I"rl_hiya_martinez_marcelo;T@'@ [I"rl_hiya_meowyam_catface;T@'@ [I"rl_hiya_merayo_isidro;T@'@ [I"rl_hiya_mikhail_grishko;T@'@ [I"rl_hiya_minneman_marc;T@'@ [I"rl_hiya_moh_bin;T@'@ [I"rl_hiya_mooradian_martin;T@'@ [I"rl_hiya_moreno_fran;T@'@ [I"rl_hiya_mos_tshenolo;T@'@ [I"rl_hiya_mroczek_kamil;T@'@ [I"rl_hiya_mumm_jacob;T@'@ [I"rl_hiya_nelson_pascoal;T@'@ [I"rl_hiya_nichols_todd;T@'@ [I"rl_hiya_nicolini_alex;T@'@ [I"rl_hiya_oakes_karl;T@'@ [I"rl_hiya_oliveira_henrique;T@'@ [I"rl_hiya_paez_nicolas;T@'@ [I"rl_hiya_pedroche_raul;T@'@ [I"rl_hiya_pedro_duran;T@'@ [I"rl_hiya_pereira_gustavo;T@'@ [I"rl_hiya_perez_sofia;T@'@ [I"rl_hiya_persson_anders;T@'@ [I"rl_hiya_persson_kim;T@'@ [I"rl_hiya_preyer_johnny;T@'@ [I"rl_hiya_quintao_cristiano;T@'@ [I"rl_hiya_ramirez_david;T@'@ [I"rl_hiya_reddy_shane;T@'@ [I"rl_hiya_reed_jeff;T@'@ [I"rl_hiya_rembang_patrix;T@'@ [I"rl_hiya_Reyes_Cid;T@E@ [I"rl_hiya_reynoldson_chad;T@'@ [I"rl_hiya_rohon_marek;T@'@ [I"rl_hiya_ryoji_osawa;T@'@ [I"rl_hiya_santos_rafael;T@'@ [I"rl_hiya_shakya_pradeep;T@'@ [I"rl_hiya_sharman_ben;T@'@ [I"rl_hiya_sinha_neha;T@'@ [I" rl_hiya_sonpatki_prathamesh;T@'@ [I"rl_hiya_tang_titan;T@'@ [I"rl_hiya_tavares_luciano;T@'@ [I"rl_hiya_teddy_ma;T@'@ [I"rl_hiya_tomasz_babel;T@N@ [I"rl_hiya_ureta_felipe;T@E@ [I"rl_hiya_vanbrandenburg_rob;T@'@ [I"rl_hiya_waag_steve;T@'@ [I"rl_hiya_wiseman_tracy;T@'@ [I"rl_hiya_zoltek_john;T@'@ [I"rl_hyia_oliveira_gabriel;T@'@ [I" rlibcore;T@E@ [I"rlibsphinxclient;T@I@ [I" rlid;T@@ [I" rlife;T@E@ [I"rlinkextract;T@@ [I" rlint;T@'@ [I" rlirc;T@@ [I" rlog;T@@ [I" rlogic;T@@ [I" rlogin;T@@ [I"rls;T@'@ [I"rl_skumar_revath;T@@ [I" rlsm;T@ @ [I" rltk;T@ @ [I" rlua;T@@ [I"rly;T@@ [I" rlyeh;T@`@ [I" rlzxdoc;T@E@ [I"rm;T@'@ [I" rmagick;T@x@ [I"rmagick4j;T@@[@+@@ [I"rmagick_captcha;T@@ [I"rmagick-metadata;T@E@ [I"rmagick-sprite;T@V@ [I" rmail;T@@ [I" rmap;T@@ [I" rmarc;T@@ [I" rmarket;T@E@ [I" rmarshal;T@@ [I"rmasalov-surpass;T@@ [I" rmasm;T@`@ [I"rmathemata;T@`@ [I"rmathguard;T@@@ [I" rmaven;T@'@ [I"rmb;T@i@ [I"rmb-rails;T@V@ [I"rmce_uploadr;T@@ [I" rmds;T@!@ [I" rme2day;T@@ [I" rmeetup;T@@ [I" rMeetup;T@@ [I" rmeetup2;T@E@ [I"rmello-devise;TU;[I" 2.1.0.2;T@ [I" rmem;T@@ [I"rmemlimit;T@@ [I"rmetaweblog;T@@ [I"r_migreme;T@@ [I" rmilk;T@1@ [I"rml;T@`@ [I" rmla;T@@ [I"rmm5t-flickr_fu;T@@ [I"rmm5t-sendgrid;TU;[I"0.1.0.20100110;T@ [I"rmm5t-slideshare;T@I@ [I" rmmseg;T@1@ [I"rmmseg-cpp;T@ @ [I"rmmseg-cpp-huacnlee;T@ @ [I" rmobio;TU;[I" 1.1.34;T@ [I" rmodbus;T@@[@,,@@ [I" rmoip;T@'@ [I" rmotion;T@'@ [I" rmov;T@1@ [I" rmovie;T@@ [I" rmpd;T@;@ [I" rmplayer;T@@ [I"rmq;T@V@ [I"rmr;T@@ [I" rmre;T@@ [I"rms;T@!@ [I" rmsgen;T@@ [I"rmthemegen;T@@ [I" rmtools;T@Sa@ [I" rmtree;T@9 @ [I"rmv;T@@ [I"rmybackup;T@@ [I"rmysqldump;T@@ [I"rna;T@@ [I" rnewick;T@@@ [I" rnexus;T@n@ [I"rngtng-bounce-email;T@@@ [I"rnotifier;T@@ [I" rnotify;T@!@ [I"rns;T@n@ [I"ro;T@'@ [I"roachclip;T@@ [I" roadie;T@@@ [I" roadmap;T@@ [I"roadrunner;TU;[I" 4.0.4;T@ [I"RoadRunner;T@'@ [I" roadtrip;T@@ [I" roar;TU;[I" 0.11.5;T@ [I"roar-extensions;T@@ [I"roar-rails;T@@ [I" roart;T@ @ [I"roastbeef;T@"@ [I" roasted;T@`@ [I" roauth;T@V@ [I" robads;T@@@ [I" robbo;T@@ [I"robb-toto;T@9@ [I" robby;T@'@ [I"!robdimarco-authlogic-connect;T@@ [I" robdimarco_authlogic_oauth2;T@T @ [I"robdimarco_rails_sql_views;T@- @ [I"robert-shoulda;TU;[I" 2.10.4;T@ [I"rob-gordon;T@|@ [I"robinboening-fleximage;T@ @ [I" robo;T@'@ [I"robobuilder;T@@ [I" robocop;T@`@ [I" robohash;T@@ [I"robokassaclient;T@E@ [I" robomake;T@@ [I" roborabb;T@@ [I"robostripper;T@@ [I" robot;T@@ [I"robot-army;T@g@ [I"robot-army-git-deploy;T@"@ [I" robotblake-closure-compiler;T@@ [I"robot_enumerable;T@@ [I" roboter;T@@ [I" robotex;T@@ [I"robotic-arm;T@I@ [I"robotlegs;T@@ [I" roboto;T@@ [I" robotok;T@@ [I" robotr;T@@ [I"robot_remote_server;T@]3@ [I"robot_rules;T@@ [I" robots;T@[@ [I"robotstxt;T@Y@ [I"robot-vim;T@O@ [I"robotwitter;T@@ [I"robowhois;T@@ [I"robsharp-extlib;T@@ [I"robsharp-flickr_fu;T@@ [I"robsharp-sunspot_rails;T@.*@ [I"robustserver;T@E@ [I"robustthread;T@@ [I" robut;T@x@ [I"robut-quiz;T@@ [I"robut-rdio;T@@@ [I"robut_whois;T@E@ [I"robworley-browscap;T@@ [I"robworley-rack-noie;T@@ [I"!robworley-schema-validations;T@@ [I"robworley-stripper;T@+@ [I" roby;T@@ [I"roc;T@@ [I" roca;T@"@ [I" rocco;T@@ [I" roccofy;T@E@ [I"rocco-obb;TU;[I" 0.83;T@ [I"rocco_rails;T@B@ [I" rocha;T@,@ [I" rock;T@1@ [I"rock_config;T@"@ [I" rockdove;T@@ [I" rocker;T@@ [I" rocket;T@"@ [I"RocketAMF;T@@ [I"rocketamf_pure;T@@ [I"rocket-core;T@"@ [I"rocketeer;T@x@ [I"rocket-js;T@"@ [I"rocket_launcher;T@'@ [I"rocket_pants;T@@ [I"rocket_pants-rpm;T@@ [I" rockets;T@@ [I"rocket-server;T@"@ [I"rocket_shorts;T@E@ [I"rocket_sms;T@`@ [I"rocketstarter;T@@ [I"rocket_tag;T@@ [I"rockhands;T@@ [I"rocking_chair;T@_@ [I" rockit;T@@ [I"rockit-now;T@@ [I"rock-queue;T@@ [I"rock-queue-smpp;TU;[I" 0.1.6.09;T@ [I" rocks;T@@ [I" rockstar;T@X@ [I"rockstar-custom;T@@ [I"rocksteady;T@@ [I"rocky-klout;T@E@ [I"roconnector;T@'@ [I" rocrad;T@|@ [I" rocx;T@@@ [I"rod;T@@ [I" rodders;T@@ [I" rodf;T@@ [I"rodneyc-anemone;TU;[I" 0.7.1.3;T@ [I" rods;T@e@ [I"roe;T@@ [I" roempro;T@`@ [I" roflbalt;T@E@ [I" roflbot;T@@ [I" roflmoas;T@'@ [I"roflscale;T@'@ [I"rog;T@|@ [I" rogdl;T@@ [I"rogerio-augusto-highrise;T@z@ [I"roger_rabbit;T@E@ [I" rogger;T@'@ [I" roglew;T@,@ [I"rogue_parser;T@@ [I" roker;T@@ [I" roket;T@'@ [I" rokko;T@@ [I"roku-packager;T@@ [I"rolando-comma;T@ @ [I" roleable;T@@ [I"role_authorization;T@@ [I"role-authz;T@@ [I"role_based_authorization;T@@ [I"role_based_security;T@@ [I" roled;T@@ [I" roleful;T@@ [I"role-haml;T@u@ [I"role_manager;T@`@ [I" role_me;T@@ [I"role_model;T@@ [I" role_on;T@@ [I" roleplay;T@@ [I"role_play;T@u@ [I"roleplayer;T@@ [I"role-rails;T@ @ [I" roles;T@@ [I"roles_active_record;T@@ [I"roles_data_mapper;T@@ [I"roles_for_dm;T@@ [I"roles_for_mm;T@@ [I"roles_for_mongoid;T@@ [I"roles_generic;T@@ [I"roles_manager;T@@ [I"roles_mongoid;T@@ [I"roles_mongoid_zhd;TU;[I" 0.4.8.1;T@ [I"roles_mongo_mapper;T@@ [I"roles-spec;T@@@ [I" role_up;T@|@ [I" rolify;T@@ [I" roll;T@N@ [I" rollable;T@6@ [I"rollbacker;T@@ [I"rollcall-prosody;T@'@ [I" roller;T@'@ [I"rollerblade;T@'@ [I" rollout;T@N@ [I"rollout_rest_api;T@O@ [I"rollout_ui;T@@ [I" rollr;T@@ [I" rolo;T@@ [I" roma;T@W@ [I"roma-client;T@@ [I"roma-commons;T@@ [I" romaji;T@1@ [I"romajinizer;T@@ [I" roman4r;T@`@ [I" romaniac;T@'@ [I"romanianvalidators;T@`@ [I"romankana;T@6@ [I"roman-name-generator;T@6@ [I"roman-numerals;T@@ [I"roman_numerals_converter;T@@ [I" romans;T@@ [I" romeo;T@'@ [I" romglog;T@V@ [I" romkan;T@x@ [I"romniture;T@"@ [I" romp;T@`@ [I" romp-rpc;T@@ [I" romq;T@@ [I"ron;T@R @ [I"Ron;T@@@ [I" ronary;T@@ [I" Ronela;T@+@ [I" rong;T@[@ [I"rong-client;T@,@ [I"rong-elements;T@I@ [I"rong-server;T@I@ [I" ronimopi;T@6@ [I" ronin;T@@ [I"ronin-asm;T@@ [I"ronin-dorks;T@6@ [I"ronin-exploits;T@@ [I"ronin-gen;T@N@ [I"ronin-grid;T@@ [I"ronin-php;T@+@ [I"ronin-scanners;T@+@ [I"ronin-sql;T@,@ [I"ronin-support;T@@ [I"ronin-web;T@@ [I" ronn;T@n@ [I" ronnie;T@@ [I"roo;T@&|@ [I" roodi;T@@ [I" roodi1.9;T@@ [I" roogle;T@+@ [I" roogli;T@@ [I"roo-immersion;T@@ [I" rook;T@@ [I" rookie;T@@ [I" rools;T@R @ [I" room;T@@ [I" roomba;T@'@ [I" roomer;T@@ [I" root;T@'@ [I"roots-rails;T@@ [I"roozer_client;T@!@ [I" rope;T@@ [I" ropencc;T@"@ [I"ropenlaszlo;T@X@ [I"ropenlayer;T@@ [I"ropenstack;T@@ [I" ropian;T@`@ [I" ropml;T@@ [I"roqua-gem;T@'@ [I" rora;T@x@ [I"rorra-twitter;T@<@ [I"rorra-twitter_oauth;T@@ [I"rorsvnprep;T@@@ [I" rortel;T@@@ [I" rosar;T@@@ [I" rosc;T@6@ [I" rose;T@@ [I" rosemary;T@@ [I" rosetta;T@@@ [I"rosetta_queue;T@@ [I"rosewood_migrations;T@E@ [I" rosey;T@@ [I" roshambo;T@@ [I" rosie;T@@ [I" rosruby;T@'@ [I"rosruby_msgs;T@"@ [I" roster;T@'@ [I" rostra;T@@ [I" rosxauth;T@@ [I" rosy;T@@ [I"rot;T@@ [I" rot13;T@`@ [I" rotation;T@'@ [I" rote;T@@ [I" rotp;T@@ [I" rotten;T@@ [I"rotten-party;T@+@ [I"rottentomatoes;T@@ [I"rotten-tomatoes;T@@ [I"rotten-tomatoes47;T@'@ [I" rouge;T@ @ [I"rouge-lang;T@@ [I" roulette;T@@ [I"roulette_wheel_selection;T@@ [I"roundabout;T@@ [I"rounders-gdata-ruby;T@x@ [I"roundhouse;TU;[I"0.5.0.237;T@[@.U;[I"0.5.0.247;T@[@.@@ [I"round_robin;T@N@ [I"roundsman;T@@ [I"roundsman-sgonyea;T@W@ [I"roundtrip;T@'@ [I" roundup;T@@ [I" routable;T@@ [I" route53;T@@ [I"route53web;T@`@ [I" route66;T@@ [I"route_dog;T@0@ [I"route_downcaser;T@`@ [I"route_manager;T@e@ [I"route_matcher;T@@ [I" routengn;T@x@ [I"router_simple;T@E@ [I" routes;T@+@ [I"routes_for_page;T@'@ [I"routes-js;T@E@ [I"routespec;T@'@ [I"route_translator;T@O@ [I" routing;T@@ [I"routing_concerns;T@@ [I"routing_data;T@I@ [I"routing-filter;T@@ [I"%routing_filter_locale_unless_api;T@I@ [I" routo;T@"@ [I" routr;T@'@ [I" roverjoe;T@@ [I" rowl;T@@ [I"rows_controller;T@"@ [I" rowx;T@@@ [I"rox;T@@ [I" roxml;T@\@ [I" ROXML;T@@ [I" roxo;T@t @ [I" roxy;T@@ [I"roy;T@J@ [I" roy-lang;T@E@ [I"roy-rails;T@E@ [I"royratcliffe-zucchini-ios;T@u @ [I" rpack;T@@ [I" rpam;T@@ [I"rpam-ruby19;T@u@ [I" rpanel;T@@ [I" rparsec;T@@ [I"rparsec-ruby19;T@@ [I" rpaste;T@`@ [I"rpatricia;T@@ [I"rpbertp13-dm-geokit;T@Z@ [I"rpbertp13-twitter;T@e@ [I" rpbk;T@@ [I"rpc;T@!@ [I" rpcjson;T@E@ [I" rpc-json;T@E@ [I"rpc-mapper;T@@ [I" rpcoder;T@@ [I" rpdf2txt;T@@ [I" rpdfbox;T@@ [I"rpeg-markdown;T@*@ [I"rpeg-multimarkdown;T@`@ [I"rpeg-multimarkdown2;T@+@ [I"rpg;T@@ [I" rpgdice;T@@ [I" rpg_dice;T@@ [I" rpgem;T@+@ [I"rpg-tools;T@,@ [I" rphylip;T@@ [I" rpiet;T@@ [I" rping;T@+@ [I" rpipe;T@@ [I" rpir;T@'@ [I"rplatform;T@'@ [I"rplatform-rails;T@@ [I" rplex;T@@ [I" rplot;T@'@ [I" rplug;T@@ [I"rpm;T@E@ [I"rpm_contrib;T@@ [I"rpm-utils;T@@ [I"rpn;T@E@ [I"rpn-converter;T@E@ [I" rpos;T@d@ [I"rpositivity;T@'@ [I" rpostf;T@`@ [I"rpowerflow;T@@ [I" rprb;T@@ [I"r_presenter;T@'@ [I" rprince;T@@ [I" rprocfs;T@@ [I" rprogram;T@@ [I"RProperties;T@E@ [I" rprov;T@'@ [I"rps;T@@ [I" rptman;T@'@ [I" rpub;T@x@ [I" rput;T@@ [I" rpv_core;T@!@ [I" rpv_i18n;T@!@ [I"rpv_swing;T@!@ [I" rpxem;T@"@ [I" rpx_now;T@0@ [I"rpx_regexp;T@'@ [I"rpy;T@'@ [I"rq;T@c@ [I"rqr;T@I@ [@l/@I@[I" rqr19;T@,@ [I" rqrcode;T@@ [I"rqrcode_png;T@`@ [I"rqrcode-rails3;T@1@ [I"rqrcode-renderer;T@E@ [I"rqrcode_to_svg;T@E@ [I"rqrcode-with-patches;T@@ [I"rqrencoder;T@@@ [I"rqrencoder-magick;T@@ [I"rq-ruby1.8;TU;[I" 3.4.7;T@ [I"rqtrotate;T@@ [I" rquad;T@@ [I" rquery;T@@ [I"rquery-activerecord;T@@ [I"rquerypad;T@M@ [I"rr;T@@ [I"rr2fetcher;T@B@ [I" rrails;T@N@ [I" rraxml;T@@@ [I" rrba;T@@ [I" rrbayes;T@@ [I" rrd-ffi;T@"@ [I" rrdgraph;T@'@ [I"rrd-grapher;T@@ [I" rrdiff;T@- @ [I"rrdsimple;T@'@ [I" rredis;T@@ [I" rrename;T@@ [I" rresume;T@@ [I"rr_games_radar;T@@ [I"rri;T@@ [I"rr-matchy;T@@ [I" rrobots;T@'@ [I" rroc;T@`@ [I" rroonga;T@' @[@/@N'@[@/@ @ [@/@ @ [I"rroonga_sort_cursor;T@E@ [I" rrproxy;T@E@ [I"rrr;T@6@ [I" rrrex;T@@ [I"rrschedule;T@@ [I" rrt_ruby;T@@[I" rrunit;T@@ [I"rs;TU;[I"35;T@ [I" rs232;T@6@ [I"rs232-sigmakoki;T@6@ [I"rs3vans-dm-is-sluggable;T@@ [I"rsa;T@+@ [I" rsaml;T@@@ [I"rs-api-tools;T@'@ [I" rsay;T@@ [I"rsc;T@`@ [I" rscale;T@@@ [I" rsched;T@@ [I" rscm;T@@ [I"rscm-accurev;T@V@ [I" rscribd;T@@ [I" rscript;T@N$@ [I"rscript-server;T@6@ [I"rscrobbler;T@I@ [I" rsdl;T@+@ [I" rsearch;T@@ [I" rsec;T@R @ [I" rsec-ext;T@@ [I" rseg;T@@ [I" rseg1.9;T@|@ [I" rsel;T@@@ [I"rsemantic;T@@ [I" rsence;T@2@ [I"rsence-deps;TU;[I"971;T@ [I"rsence-pre;TU;[I" 2.3.0.14;T@ [I"rserve-client;T@@ [I"rserve-simpler;T@@ [I"rservicebus;T@Դ@ [I" rs.ge;T@`@ [I" rsgrep;T@'@ [I"rsh;T@@ [I" rsh2;T@"@ [I" rshare;T@@@ [I" rshell;T@@ [I"rs-helloworld;T@E@ [I"rshoeboxed;T@+@ [I" rshot;T@"@ [I"rsi;T@R @ [I" rsift;T@@ [I"r_simperium;T@@ [I" rsimpy;T@@@ [I" rsipgate;T@!@ [I" rsips;T@@ [I"rsl;T@E@ [I" rslt;T@@ [I"rsm;T@t @ [I" rsmaz;T@"@ [I"rsmbclient;T@E@ [I"rsocialize;T@@ [I" rsokoban;T@@ [I" RSokoban;TU;[I" 0.76.1;T@ [I" rsolr;T@@ [I"rsolr-async;T@@ [I"rsolr-client-cert;T@@ [I"rsolr-direct;T@@ [I" rsolr-em;T@E@ [I"rsolr-ext;T@@ [I"rsolr-footnotes;T@E@ [I"rsolr-nokogiri;T@@ [I"rsolr-patron;T@E@ [I" rsox;T@E@ [I"rsox-command;T@@ [I"RSP;T@i@ [I" rspactor;T@@ [I" rspec;TU;[I" 2.12.0;T@ [I" rspec2-rails-views-matchers;T@I@ [I"rspec-action;T@@ [I"rspec-action_view;T@@ [I" rspec-am;T@@ [I"rspec_api_documentation;T@@ [I"rspec-apigen;T@"@ [I"rspec-apotomo;T@Q@ [I"rspec-approvals;T@@ [I"rspec-aspic;T@E@ [I"rspec_attr_extensions;T@@@ [I"rspec_attribute_matchers;T@@ [I"rspec_candy;T@@ [I"rspec-cells;T@@ [I"rspec-centaur-pride;T@@ [I"rspec-check-auth;T@@ [I"rspec-chef;T@@ [I"rspec-cleanup;T@@ [I"rspec-cleverbacktrace;T@@ [I"rspec_clickable_output;T@'@ [I"rspec-collection;T@O@ [I" rspec-compact-doc-formatter;T@@ [I"rspec-console;T@@ [I"rspec-core;TU;[I" 2.12.2;T@ [I"rspec-cramp;T@@@ [I"rspec_css_validator;T@@ [I"rspec-deep-matchers;T@E@ [I"rspec-dns;T@'@ [I""rspec-dump-profile-customizer;T@E@ [I"rspec-encoding-matchers;T@@ [I"rspec_engine_generator;T@@ [I"rspec-engine-generator;T@@ [I"rspec-example_steps;T@@ [I"rspec-expectations;TU;[I" 2.12.1;T@ [I"rspec_explain;T@@ [I"rspec-ext;T@@ [I" rspec_extensions_collection;T@"@ [I"rspec-extra-formatters;T@@ [I"rspec-factory-girl;T@@ [I"rspec-fakes;T@@ [I"!rspec-file-transfer-matchers;T@@ [I"rspec-fire;T@;@ [I"rspec-fixture;T@E@ [I"rspec_for_generators;T@@ [I"$rspec-formatter-git_auto_commit;T@"@ [I"rspec-formatter-webkit;T@ @ [I"rspec-fuuu;T@@ [I"rspec-gc-control;T@@ [I"rspec_gem;T@,@ [I"rspec_generator;TU;[I" 0.5.15;T@ [I"rspec-git;T@'@ [I"rspec-given;T@ @ [I"rspec-hiera-puppet;T@@ [I"rspec_hpricot_matchers;T@@ [I"rspec-hpricot-matchers;T@@ [I"rspec-html-matchers;T@x@ [I"rspec_html_validator;T@'@ [I"rspec-http;T@ @ [I"rspec-i18n;T@u@ [I" rspecial;T@@ [I" rspecify;T@1@ [I"rspec-infrastructure;T@@ [I"rspec-instafail;T@,@ [I"rspec-instructure;T@ @ [I"rspec-integration;T@@ [I"rspec-isolation;T@`@ [I"rspec-jasmine;T@E@ [I"rspec_junit_formatter;T@|@ [I"rspec-kwalify;T@E@ [I"rspec-longrun;T@`@ [I"rspec-mocks;T@0@ [I"rspec-mocks-call-through;T@@ [I"rspec_more;T@r@ [I"rspec_multi_matchers;T@u@ [I"rspec-multi-mock;T@@ [I"rspec-must;T@'@ [I" rspec-nc;T@"@ [I"rspec_normalized_hash;T@'@ [I"rspec-notify-osd;T@@ [I"rspec-on-rails-matchers;T@@ [I"rspec-ontap;T@@ [I"rspec_org_formatter;T@@ [I"rspec_outlines;T@@ [I"rspec-padrino;T@@ [I"rspec_parallel;T@1@ [I"rspec-parameterized;T@n@ [I"rspec-performance;T@@ [I"rspec_prank;T@@@ [I"rspec_pretty;T@'@ [I"rspec-pride;T@ @ [I"rspec-process-mocks;T@E@ [I"rspec-prof;T@@ [I"rspec-profiler;T@@ [I"rspec-pubsub-formatter;T@'@ [I"rspec-puppet;T@|@ [I"rspec-puppet-maestrodev;T@f@ [I"rspec-quickfix-formatter;T@@ [I"rspec-radar;T@@ [I"rspec-rails;T@0@ [I"rspec-rails23;T@@ [I"rspec_rails3_gen;T@I@ [I"rspec-rails-assign;T@'@ [I"rspec-rails-controller;T@@@ [I"rspec-rails-ext;T@ @ [I"rspec-rails-extra-routing;T@@ [I"rspec-rails-matchers;T@@ [I"rspec-rails-mocha;T@@ [I"rspec-rails-uncommitted;T@O@ [I"rspec-rails-watchr;T@@ [I"rspec-rails-watchr-emacs;T@e@ [I"rspec-rails-w-factory_girl;T@@@ [I"rspec_random;T@'@ [I"rspec-rayo;T@@ [I"rspec-redis_helper;T@@@ [I"rspec-refinements;T@'@ [I"rspec-requestable-examples;T@1@ [I"rspec-rerun;T@`@ [I"rspec-retry;T@@ [I"rspec-routes_coverage;T@1@ [I" rspec-rr;T@@ [I"rspec_scenarios;T@@@ [I"rspec_sequel_matchers;T@@ [I"rspec-set;T@'@ [I"rspec-sitemap-matchers;T@`@ [I"rspec-smart-formatter;T@"@ [I"rspec-solr;T@@ [I"rspec-spies;T@@ [I"rspec_spinner;T@O@ [I"rspec-spy;T@@ [I"rspec-statsd;T@'@ [I"rspec-steps;T@V@ [I"RSpec-Steps;T@'@ [I"rspec-subject-extensions;T@@ [I"rspec_super;T@`@ [I"rspectacular;T@@ [I"rspec_tag_matchers;T@@ [I"rspec-tag_matchers;T@@@ [I"!rspec_traffic_light_formater;T@@ [I"rspec_twicks;T@;@ [I"rspec-unit;T@@ [I""rspec_validation_expectations;T@@ [I"rspec-vraptor;T@<@ [I"rspec_w3c_matchers;T@E@ [I"rspec-web;T@@ [I"rspec-webdriver;T@'@ [I"rspec-xml;T@@ [I" rspider;T@@ [I" rsplunk;T@x@ [I"rspreedly;T@$@ [I" rsql;T@@ [I" rsrc;T@@ [I"rsr_participants;T@@ [I" rsruby;T@kD@ [I" RSRuby;T@x@ [I" rss2mail;T@6@ [I"rss-atom-feed_history;T@"@ [I"rss-client;T@~T@ [I"rss-dcterms;T@@ [I"rss_detector;T@@ [I" rss-feed;T@@ [I" rssh;T@'@ [I"RssMangler;T@@ [I"rss-motor;T@`@ [I"rss-nokogiri;T@ @ [I" rss-opds;T@E@ [I"rss_parser;T@@ [I"rst;T@@ [I" rstack;T@'@ [I" rstake;T@'@ [I" rstat;T@@ [I" rstats;T@"@ [I" rstatsd;T@[ @ [I" rstore;T@@ [I" rstrip;T@E@ [I" rstruct;T@`@ [I" rstt;T@@ [I" rstyle;T@@ [I" rstyx;T@@ [I" rsubhak;T@@ [I"rsubstitute;T@E@ [I"rsubtitle;T@`@ [I"rs_user_policy;T@@ [I" rsvejo;T@@ [I" rsvg2;T@9@ [@1@9@ [I" rsvm;T@'@ [I" rsword;T@@ [I" rswt;T@@ [I"rsx;T@'@ [I" rsxml;T@@ [I"rsync_deploy;T@E@ [I"rsyncdiff;T@@ [I"rsyncmanager;T@s@ [I"rsync_wrap;T@@ [I"rsyntaxtree;T@@ [I"rt;T@E@ [I" rtaglib;T@@ [I" rtags;TU;[I" 0.97;T@ [I"rtagstask;T@"@ [I" rtalib;T@'@ [I" rtask;TU;[I"010;T@ [I" RTask;T@y@ [I" rtbot;T@@@ [I"rt_capistrano;T@@ [I"rtc_datatable;T@@ [I"rt-client;T@x@ [I"rtesseract;T@ @ [I" rtest;T@`@ [I" rtex;T@ @ [I" rtext;T@@ [I" rtextile;T@,@ [I"rtf;T@@ [I" rtfd;T@E@ [I"rtf_filter;T@"@ [I" rtfm;T@@ [I" rtfmd;TU;[I"0.10301.20;T@ [I" RTFMd;TU;[I"0.10301.17;T@ [I"rtf_rails;T@'@ [I" rtfs;T@@@ [I"rtf-templater;T@E@ [I"rthbound-suitcase;T@K>@ [I"rth-studiogame;T@B@ [I" rticker;T@N@ [I" rtika;T@@ [I" rtimbl;T@@@ [I" rtimeout;T@@ [I"rtinspect;T@L=@ [I" rtkit;T@D@ [I" rtlit;T@@ [I" rtlize;T@@ [I" rtlog;T@@@ [I"rtm;T@@ [I"rtm-activerecord;T@@ [I" rtmapi;T@y@ [I" rtmilk;T@@ [I"rtm-javatmapi;T@@ [@H2@@[I" rtml;T@z@ [I"rtm-majortom;T@@[I"rtm-ontopia;T@@ [@O2@@[I"rtm-rails;T@@ [I"rtm-sesametm;T@@ [I"rtm-shell;T@'@ [I" rtm-time;T@@ [I"rtm-tinytim;T@@ [@Z2@@[I" rtm-tmcl;T@@ [I" rtm-tmql;T@@ [@_2@@[I" rtodoist;T@E@ [I" rtokbox;T@[ @ [I" rtoken;T@@ [I" rtomcat;T@"@ [I" rtopia;T@@ [I" rtopsy;T@E@ [I" rtor;T@@ [I"rtp;T@|@ [I"rtp-connect;T@@ [I" rtpl;T@@ [I" rtrac;T@@ [I" rtrace;T@'@ [I"rtrac-utils;T@'@ [I"rtranscoder;T@6@ [I"rtransmission;T@[ @ [I"rtripcode;T@'@ [I"rtriplify;T@@ [I" rtsp;T@@ [I"rtt;T@@ [I" rttool;TU;[I" 1.0.3.0;T@ [I" rtui;T@I@ [I" rtunes;T@@ [I" rtunesu;T@@ [I" rtunnel;T@@ [I" rturk;T@,@ [I"rtv;T@@ [I"rt_watchdog;T@@ [I" rtypist;T@E@ [I"rua;T@@ [@2@@[I" rubabel;T@I@ [I"rubactive;T@'@ [I" rubai;T@@@ [I"rubaidh-rails_sql_views;T@@ [I" rubaiji;T@@@ [I" rubame;T@E@ [I" rubango;T@+@ [I" rubarb;T@@ [I" rubb;T@@ [I" rubber;T@ @ [I"rubberband;T@ @ [I"rubberband-audio;T@@ [I"rubberband-pure;T@1@ [I"rubber-generate;T@@ [I"rubber-jcarnegie;T@'@ [I"rubbish_collection;T@"@ [I" rubbr;T@T @ [I" rubdev;T@ @ [I" rubdo;T@@ [I" rube;T@@@ [I" rubec;T@@ [I"rubeechat;T@@ [I"rube-goldberg;T@'@ [I" rubel;T@@ [I" rubemacs;T@@ [I"ruben-sunspot;T@T @ [I"ruben_sunspot_rails;T@T @ [I"rube_post;T@@ [I" ruber;T@@ [I" ruberl;T@E@ [I"rubernate;T@E@ [I"Rubernate;T@@ [I" ruberry;T@E@ [I" rubervu;T@!@ [I" Rubeuler;T@@ [I" rubeus;T@@[I" rubhub;T@@ [I" rubi18n;T@R @ [I"rubicante;T@@ [I" rubicus;T@`@ [I" rubidium;T@@ [I" rubified;T@@ [I" rubify;T@'@ [I" rubigen;T@ @ [I"rubigraph;T@@ [I" rubikon;T@@ [I" rubiks;T@@ [I" rubillow;T@"@ [I" rubin;T@@ [I" rubineti;T@@ [I" RuBing;T@6@ [I" rubinium;T@`@ [I"rubinius-actor;T@E@ [I"rubinius-core-api;T@'@ [@ 3@'@[I"rubinius-report;T@@ [I"rubinstein;T@E@ [I" rubio;T@'@ [I" rubis;T@'@ [I" rubish;T@@ [I"rubiskell;T@@ [I"rubitlash;T@!@ [I" rubius;T@@ [I" rubix;T@@@ [I" rubizon;T@@ [I"rublicatorg;T@'@ [I" rublique;T@E@ [I" RubMat;T@9 @ [I" rubocop;T@@ [I" Ruboid;T@E@ [I" rubolite;T@@ [I" ruboozie;T@@@ [I"ruboss4ruby;T@x@ [I"ruboss_on_ruby;T@@ [I" rubot;T@!@ [I"rubot-base;T@'@ [I" ruboto;T@[@ [I"ruboto-core;T@@ [I" rubotz;T@'@ [I" rubsh;T@E@ [I" rubst;T@'@ [I" rubtella;T@@@ [I"rubuild-core;T@@ [I"rubunkulous;T@"@ [I" ruburple;T@V@ [I" ruby;T@@ [I"ruby18_source_location;T@!@y;[@K3@!@1[@K3@!@ [I"ruby19_stable_sort;T@'@ [I" ruby2c;TU;[I" 1.0.0.9;T@ [I"ruby2cext;T@@ [I" ruby2ch;T@6@ [I" ruby2d;T@|@ [I" ruby2jar;T@@ [I"ruby2java;T@E@ [I"ruby2lolz;T@'@ [I"ruby2ruby;T@@ [I"ruby2xlsx;T@E@ [I"Ruby4Misawa;T@@@ [I"Ruby4Skype;T@@ [I" ruby800;T@'@ [I"ruby-aaws;T@X@ [I"ruby-aaws-simple;T@"@ [I" rubyacl;T@@ [I" Ruby-ACL;T@W@ [I"ruby-activeldap;T@M@ [I"ruby-activeldap-debug;T@y@ [I" ruby-adt;T@@ [I"ruby-aes-cext;T@@}1[@z3@s@1[@z3@s@ [I"ruby-aes-normal;T@s@ [I"ruby-aes-optimized;T@s@ [I"ruby-aes-table1;T@s@ [I"ruby-aes-table2;T@s@ [I"ruby-aes-unroll1;T@s@ [I"ruby-aes-unroll2;T@s@ [I" ruby-agi;T@O@ [I"ruby-ahocorasick;T@@ [I" ruby-ajp;T@@ [I"ruby-akismet;T@@ [I"ruby-alibris;T@@ [I"ruby-alsa;T@W9@ [I" ruby_ami;T@@ [I"ruby-ampache;T@@@ [I" ruby-amt;T@@ [I" rubyapi;T@@ [I" ruby_apk;T@@ [I" rubyapp;T@@@ [I" _rubyapp;T@@ [I" ruby-app;T@g@ [I" RubyApp;TU;[I" 0.6.50;T@ [I"ruby-app-ar;T@`@ [I"ruby_archive;T@@@ [I"ruby-ares;T@'@ [I"ruby-asdf;T@@ [I" rubyast;T@E@ [I"ruby-asterisk;T@n@ [I"ruby-atmos;T@W@ [I"ruby-atmos-pure;T@W@ [I"ruby-audio;T@l@ [@3@l@ [I"ruby-audio-heroku;T@Q@ [I"ruby-audioinfo;T@@ [I"ruby-augeas;T@@ [I"ruby-avm-library;T@'@ [I" ruby-aws;T@ @ [I"ruby-backports;T@@ [I"ruby-batik;T@@ [I"ruby-bbcode;T@@ [I"ruby-beaconpush;T@@ [I"ruby-beamer;T@'@ [I"ruby-beautify;TU;[I" 0.92.2;T@ [I"rubybenchmark;T@@ [I" rubyBHL;T@@ [I"ruby-binlog;T@@ [I"ruby-bitly;T@|@ [I" rubybits;T@@ [I"ruby-blockcache;T@@[@3@!@ [I"ruby-boost-regex;T@@ [I"rubybooty;T@@ [I"ruby_bosh;T@X@ [I" rubybots;T@'@ [I"rubybreaker;T@@ [I"ruby-breakpoint;T@@ [I"ruby-bsdconv;TU;[I"9.1;T@ [I"ruby-bugzilla;T@@ [I"ruby-bulksms;T@R @ [I"ruby-bullet;T@E@ [@3@@ [I"rubybuntu-gedit;TU;[I" 12.01.05;T@ [I" rubyc;T@6@ [I"ruby-cache;T@@ [I"ruby-cafinfo;T@I@ [I"ruby-cakemail;T@'@ [I"ruby_captivate;T@@ [I"ruby-cares;T@@ [I"ruby-carrot;T@@ [I"rubycas-client;T@,@ [I"rubycas-client-rails;T@@ [I"rubycas-client-rails-vpsa;T@`@ [I"rubycas-server;T@x@ [I"ruby_cddb;T@'@ [I" rubyce;T@'@ [I"rubyception;T@@ [I" rubycf;T@@ [I" rubychan;T@`@ [I"ruby_channel;T@E@ [I" rubychem;T@@ [I"ruby_chopped;T@@ [I"rubycious;T@+@ [I"ruby-cldr;T@E@ [I" ruby_cli;T@@ [I"rubycliweather;T@@ [I"ruby_clone;T@@ [I"ruby-coco;T@@ [I"ruby-coco-source;T@@ [I"ruby-conf;T@9@ [I"rubyconfbd2013_hello;T@'@ [I"ruby-config;T@'@ [I"ruby-configurable;T@@ [I"ruby-contract;T@`@ [I"ruby_contracts;T@`@ [I" rubycop;T@@ [I" ruby_cop;T@W@ [I"ruby_core_ri;T@@ [I"ruby_core_source;T@|@ [I"ruby_cotendo;T@'@ [I"ruby_cowsay;T@@ [I"ruby-cracklib;T@@ [I"rubycraft;T@`@ [I" rubycron;T@@ [I" ruby_css;T@@ [I"ruby_css_lint;T@@ [I"rubyctaculous;T@E@ [I" rubycue;T@@ [I" rubycurl;T@@ [I"rubycut-babushka;TU;[I" 0.10.8;T@ [I"ruby-cute;T@'@ [I"ruby-cymbol;T@@ [I"ruby-cyrus-sasl;T@E@ [I" ruby-d2l;T@_@ [I"ruby-daemonic-threads;T@G @ [I"ruby_danfe;T@- @ [I"RubyDataStructures;T@@ [I" rubydbc;T@@ [I"ruby-dbus;T@- @ [I"ruby-dbus-openplacos;TU;[I" 0.7.2.1;T@ [I" ruby-dcl;TU;[I" 1.7.0.2;T@ [I"ruby-ddp-client;T@'@ [I"ruby-debian;T@@ [I"ruby-debug;T@!@[@4@D@ [I"ruby-debug19;T@@ [I"ruby-debug193;T@'@ [I"ruby-debug-base;T@D@[@4@D@ [@4@D@[I"ruby-debug-base19;TU;[I" 0.11.25;T@ [I"ruby-debug-base193;T@'@ [I"ruby-debug-base19x;TU;[I" 0.11.29;T@ [I"ruby-debug-completion;T@@ [I"ruby_debugger;T@@ [I"ruby-debug-ide;T@@ [I"ruby-debug-ide19;T@4@ [I"ruby-debug-passenger;T@@ [I"ruby-debug-pry;T@@ [I"ruby-debug-wrapper;T@'@ [I"ruby-decimal;T@I@ [I"ruby-decompiler;T@@ [I"ruby_decorators;T@@ [I"ruby_deezer;T@@@ [I"ruby_deployer;T@`@ [I" rubydeps;T@@ [I" ruby-des;T@@ [I"ruby_desk;T@e@ [I" rubydice;T@@ [I"ruby-dice;T@@ [I"rubydictionary;T@@ [I"ruby_diff;T@!@ [I"ruby-djbdns;T@E@ [I" rubydkim;T@@ [I" rubydns;T@J@ [I" ruby_do;T@"@ [I" rubydoc;T@'@ [I"rubydoctest;T@;@ [I" rubydoo;T@'@ [I"ruby-doom;T@- @ [I" rubydoop;T@@[@4@W@ [I"'ruby_do_plugin_execute_application;T@'@ [I"ruby_do_plugin_filesearch;T@E@ [I"+ruby_do_plugin_power_management_upower;T@'@ [I" rubydora;T@u@ [I" rubydraw;TU;[I" 0.3.2.5;T@ [I"ruby-dtrace;T@@ [I"ruby-dtrace-consumer;T@x@ [I" rubyduck;T@@ [I"ruby-duration;T@i6@ [I"ruby-dzen;T@'@ [I" ruby-dzi;T@@@ [I"ruby-echonest;T@x@ [I" ruby-elf;T@ @ [I"ruby-ensembl-api;T@@ [I"ruby-epub;T@^@ [I" ruby-eql;T@E@ [I" rubyeti;T@@ [I"ruby-event;T@@ [I"ruby_events;T@@ [I" ruby_ex;TU;[I" 0.5.6.2;T@ [I"ruby-exiv2;T@@ [I" ruby_ext;T@R@ [I" ruby-ext;T@_@ [I" RubyExt;T@@@ [I"ruby_ext_backtrace;T@E@ [I"ruby_ext_direct;T@@ [I"ruby_extend;T@@ [I"ruby_extendsions;TU;[I" 0.1.8.5;T@ [I"ruby_extensions;T@@ [I"ruby-extensions;T@@ [I"ruby-extjs;T@z@ [I"ruby-ext-js;T@x@ [I" rubyexts;T@@ [I"ruby-factual;T@+@ [I"ruby-fann;T@;@ [I" rubyfb;T@Y@[@!5@Y@ [@!5@h@ [I" rubyfca;T@@ [I"ruby-fcgi;T@@ [I"ruby-fedora;T@W@ [I"ruby-feedbooks;T@@ [I"ruby-feedparser;T@D@ [I"ruby-ffprobe;T@E@ [I"ruby-fftw3;T@R @ [I"ruby_fgraph;T@3@ [I"ruby-fifo;T@'@ [I"ruby-filemagic;T@@ [I" rubyfish;T@@ [I" rubyfit;T@E@ [I"ruby-fitbit;T@@ [I"ruby-flickr;T@@@ [I"ruby_flipper;T@@ [I"ruby-fogbugz;T@`@ [I"ruby-foomatic;T@'@ [I"rubyforge;T@z@ [I"rubyfox-client;T@@[I"rubyfox-server;TU;[I" 2.3.0.0;T@ [I"rubyfox-sfsobject;T@@*[@P5@@[I"ruby-freenect;T@E@ [I"ruby-freshbooks;T@@ [I"rubyfromexcel;T@K,@ [I"ruby-frontbase;T@@ [I" ruby_fs;T@@ [I"ruby-fsevent;T@@ [I"ruby-fs-stack;T@J@ [I"ruby-ftd2xx;T@'@?[I"rubyful_soup;T@@ [I"rubyful_soup_2011;T@|@ [I"rubyfunge;T@'@ [I" rubyfw;T@`@ [I" rubygame;T@ @dn[@k5@ @[@k5@9@[@k5@9@ [@k5U;[I" 2.6.4;T@ [I"rubygamertag;T@x@ [I" ruby-gd;T@@ [I"ruby-gdchart;T@@ [I"ruby-gdsii;T@@ [I"ruby_gem_eg;T@`@ [I"rubygemfeed;T@@ [I"rubygem_requirement_patch;T@@ [I"rubygems-auto-rehash;T@@ [I"rubygems-backports;T@@ [I"rubygems-bug-child;T@s@ [I"rubygems-bug-parent;T@@ [I"rubygems-bundler;T@@ [I"rubygems-checkcert;T@@ [I"rubygems-compile;T@@ [@5@xI"universal-macruby;T[I"rubygems-desc;T@N@ [I"rubygems_dump;T@@ [I"rubygems-isit19;T@@ [I"rubygems-isitjruby;T@x@ [I"rubygems-isitrubinius;T@@ [I"rubygems-mate;T@'@ [I"rubygems-mini_mirror;T@@ [I"rubygems-mirror;T@@ [I"rubygems-mygems;T@'@ [I"rubygems-noproxy;T@'@ [I"rubygems-openpgp;T@@ [I"rubygems_over_ssh;T@@ [I"rubygems-proxy_server;T@@ [I"rubygems-pwn;T@`@ [I"rubygems-sandbox;T@@ [I"rubygems-sing;T@u@ [I"rubygems_snapshot;T@@ [I"rubygems-source;T@'@ [I"rubygems-source-cli;T@'@ [I"rubygems-tasks;T@@ [I"rubygems-test;T@@ [I"rubygems-update;TU;[I" 1.8.24;T@ [I"ruby-geometry;T@"@ [I" ruby-git;T@I@ [I"ruby-github;T@@ [I"ruby-git-lacravate;T@'@ [I"ruby-glfw;T@e@ [I"RubyGlobe;T@@ [I"ruby-gmail;T@@ [I"ruby_gntp;T@@ [I" rubygoo;T@V@ [I"ruby-googlechart;T@@ [I"ruby-googleloader;T@@ [I" ruby_gpg;T@@ [I"ruby-gpgme;T@ @ [I"rubygraph;T@'@ [I"ruby-graphml;T@'@ [I"ruby-graphviz;T@@ [I"ruby-graphviz-mindmap;T@@ [I"ruby_grep;T@@ [I"ruby-growl;T@d=@ [I"ruby-gsl-ng;T@@ [I"ruby-gsl-ngx;T@~@ [I"ruby-gtkhex;T@@ [I"ruby-hackernews;T@ @ [I"rubyhacks;T@`@ [I"ruby-hamljs;T@'@ [I"ruby-haml-js;T@@ [I" rubyhaze;T@n@[I"rubyhaze-persisted;T@@[I"ruby-hbase;T@"@ [I"ruby-hdfs;T@@ [I"rubyhealthvault;T@'@ [I" rubyheap;T@@@ [I"rubyhelpers;T@`@ [I"ruby-hijiki;T@@ [I" ruby-hl7;T@@ [I" Ruby-HL7;T@@ [I"ruby-hmac;T@x@ [I"ruby-hmac-openssl;T@@ [I" rubyhorn;T@"@ [I"ruby_http_parser;T@'@ [I" ruby-hue;T@'@ [I"ruby-iactionable;T@@@ [I"ruby-iarm;T@@ [I" ruby-iff;T@@ [I"ruby-imagespec;T@@ [I"ruby-imdb;T@n@ [I"ruby_imgur;T@@ [I"ruby-imgur;T@@ [I"ruby_indentation;T@@ [I"ruby-informix;T@@1[@#6@@ [I"RubyInline;TU;[I" 3.12.0;T@ [I"RubyInlineAcceleration;T@'@ [I"ruby-inotify;T@@ [I"ruby-interface;T@@ [I"ruby-internal;T@-@ [I"ruby-interview;T@'@ [I" ruby-ip;T@e@ [I" rubyipmi;T@@ [I"ruby-ipmitool;T@@ [I" rubyipq;T@@}1[I"ruby-ipqueue;T@6@ [I"ruby-irail;T@@ [I" Ruby-IRC;T@ @ [I"ruby-iscsiadm;T@'@ [I"ruby-issues;T@@ [I" ruby_it;T@x@ [I" ruby-iup;T@E@1[@I6@@[@I6@@ [I" ruby-ivy;T@@ [I"ruby-iwlist;T@@ [I" RubyJack;T@@ [I"ruby-jade;T@'@ [I" rubyjams;T@@ [I"rubyjedi-actionwebservice;TU;[I"2.3.5.20100714122544;T@ [I"rubyjedi-nokogiri_java;TU;[I"1.4.0.20100513161003;T@[I"rubyjedi-soap4r;TU;[I"1.5.8.20100619003610;T@ [I"rubyjedi-testunitxml;TU;[I"0.1.5.20100616141003;T@ [I"ruby-jetspade;T@'@ [I" ruby_jid;T@@ [I" rubyjs;T@@ [I"ruby-json;T@x@ [I"ruby_jsonpath;T@@ [I"rubyjs-rails;T@@ [I"ruby_keychain;T@@ [I"ruby-keychain;T@`@ [I"rubykeyword;T@"@ [I"rubyknight;T@@ [I" rubylabs;T@ @ [I"ruby-lapack;T@@S[@6@@ [I"ruby-last.fm-wrapper;T@E@ [I"ruby-ldap;T@@ [I"ruby-ldapserver;T@@ [I" rubyless;T@@ [I" rubylet;T@@[I" ruby-let;T@'@ [I"rubylet-jetty;T@@[I"rubylet-tasks;T@@[I"rubylexer;T@@ [I"ruby-libappindicator;T@|@ [I"rubylibcrack;T@,@ [I"ruby-libgearman;T@@ [I"ruby-libgtop2;T@6@ [I"ruby-libjit;T@[@ [I"ruby-libnids;T@@1[I"ruby-libnio;T@@ [I"ruby-libnotify;T@@ [I"ruby-libtommath;T@̓@ [I"ruby-libvirt;T@x@ [I"rubylight;TU;[I" 1.0.3.2;T@ [I"ruby_linear;T@@ [I"ruby-linkedin;T@'@ [I"ruby-lint;T@E@ [I"ruby-llenv;T@@ [I"ruby-llvm;T@@ [I" rubylog;T@'@ [I"ruby_loggly;T@@ [I"ruby_logo;T@E@ [I"rubylogparser;T@6@ [I"ruby-lsapi;T@d=@ [I" ruby-lua;T@@ [I" rubylude;T@@ [I" ruby-lvm;T@`@ [I"ruby-lvm-attrib;T@'@ [I"ruby-lzma;T@@ [I"ruby_mac_os_x_dev_configs;T@"@ [I"rubymacros;T@|@ [I"ruby-maidcafe;T@'@ [I"ruby-mailchimp;T@@ [I"ruby-managesieve;T@@ [I"ruby_mapnik;T@|@ [I"ruby_mapscript;T@@ [I"ruby-mapsource;T@!@ [I"rubymarks;T@@ [I"ruby_marks;T@ @ [I"ruby-mass;T@`@ [I"ruby-maven;TU;[I"0.8.3.0.3.0.28.3;T@[@6U;[I"3.0.4.1.1;T@ [I"ruby-mcrypt;T@`@ [I"ruby-mediawiki;T@@ [I"Ruby-MemCache;T@'@ [I"ruby-metrics;T@@ [I"ruby_micro_benchmarks;T@`@ [I"rubymine2xcode-theme;T@E@ [I"rubymine_heaven;T@@ [I"ruby-minisat;TU;[I" 1.14.2;T@ [I"rubymirrors;T@@ [I" rubymisc;T@"@ [I"ruby-miyako;TU;[I" 2.1.22;T@ [I"ruby-miyako-mswin32;T@7@ [I"ruby-mojeid;T@I@ [I"ruby-monetdb-sql;T@@ [I"rubyMorphbank;T@@ [I"rubymotion_generators;T@"@ [I"rubymotion-observer;T@'@ [I"rubymotionr;T@'@ [I"ruby-mp3info;T@@ [I" ruby-mpc;T@@ [I"ruby-mpfi;T@n@ [I"ruby-mpfr;T@@ [I" ruby-mpi;T@@ [I"ruby-mpns;T@x@ [I"ruby-mpris;T@`@ [I" ruby-msg;T@@ [I" rubymtp;T@@ [I" rubymud;T@N@ [I"ruby-multipart-post;T@x@ [I"rubymurray;T@@@ [I" ruby_mvc;T@"@ [I" ruby-mws;T@@ [I"ruby-mysql;T@6 @ [I"ruby-mysql-ext;T@6 @ [I"ruby-mythtv;T@@ [I"ruby_nacl;T@@@ [I"ruby-nagios;T@E@ [I"ruby-nessus;T@@ [I"ruby-netcdf;TU;[I" 0.6.6.1;T@ [I"ruby-net-ldap;T@"@ [I"ruby-net-nntp;T@@ [I"ruby_new_bosh;T@@ [I"ruby_ngrams;T@@ [I"ruby-nmap;T@@ [I" rubynode;T@|@ [I"ruby-notes;T@@ [I"ruby-notify-my-android;T@@ [I" rubynpr;T@`@ [I" ruby_nsq;T@E@ [I" rubyntlm;T@`@ [I"ruby-ntlm;T@'@ [I"ruby-nuggets;T@@ [I"ruby-numtheory;T@@ [@]7@@ [@]7@n@ [I" ruby-nxt;T@@ [I" RubyObjC;T@x@ [I"ruby-objc-nil;T@`@ [I"ruby-oci8;T@W@1[@g7@+@[@g7@i6@ [@g7@i6@ [I"ruby-oci8-master;T@1@ [I"ruby_odata;T@`@ [I"ruby-odbc;TU;[I" 0.99994;T@ [I"Ruby-ODE-SWIG;T@E@ [I"ruby_odeum;T@@ [I"ruby-oembed;T@@ [I" ruby-ogg;T@'@ [I"ruby-ogginfo;T@A@ [I"ruby-ogre;T@'@ [@7@"@ [I" ruby-ole;TU;[I" 1.2.11.6;T@ [I""ruby-ole-patched-for-home_run;TU;[I"1.2.10.1.1;T@ [I"ruby-omegle;T@6@ [I" ruby_omx;T@Դ@ [I"rubyonacid;T@x@ [I"ruby_on_etags;T@6@ [I"ruby_on_ruby;T@'@ [I"ruby_on_skis;T@@ [I"ruby-openal;T@!@ [I"ruby-opengeodb;T@@ [I"ruby-opengl;TU;[I" 0.60.0;T@1[@7U;[I" 0.60.1;T@ [I"ruby-opengl2;TU;[I" 0.60.6;T@ [I"ruby-openid;T@t@ [I"ruby-openid-apps-discovery;T@N@ [I" rubyosa;T@x@ [I"rubyosa19;T@@ [I" ruby-osc;TU;[I" 0.31.0;T@ [I" ruby-otp;T@!@ [I"rubyoverflow;T@@ [I" ruby-paa;T@'@ [I"RubyPackager;TU;[I"1.2.0.20120302;T@ [I"ruby_pagination_logic;T@@ [I" rubypan;T@@ [I"rubypants;T@@ [I"rubypants-unicode;T@@ [I"ruby-pardot;T@@ [I"ruby_parser;T@@ [I"ruby-password;T@@ [I"ruby_patch;T@O@ [I"ruby-path;T@@ [I"ruby-paypal;T@@ [I"ruby-paypal-extended;T@@ [I"ruby-pcap;T@@ [I" rubypeg;T@"@ [I" rubyperf;T@@ [I"ruby-perl;TU;[I"04.01.2011.2;T@ [I"ruby_peter_v;T@E@ [I" ruby-pg;T@@ [I"ruby-pgplot;T@1@ [I"ruby-picasa;T@@ [I"ruby-pinyin;T@@ [I"ruby-pipeline;T@@ [I"ruby-pixels;T@'@ [I"ruby-player;T@@ [I" rubyplb;TU;[I" 0.2.91;T@ [I"ruby-plot;T@@ [I"ruby-plsql;T@@ [I"ruby-plsql-spec;T@@ [I"rubyplugs;T@'@ [I"rubypodder;T@@ [I"rubypoint;T@ @ [I"ruby-poker;T@@ [I"ruby-pomegranate;T@E@ [I"ruby-pong;T@"@ [I" rubypost;T@n@ [I"ruby_postcode_anywhere;T@E@ [I"ruby-postcodeanywhere;T@6@ [I"ruby-postgres;TU;[I"0.7.1.2006.04.06;T@ [@8@8@[I" rubypp;T@@ [I"ruby_process;T@V@ [I"ruby-process-controller;T@@ [I"ruby-processing;T@@ [I"ruby-prof;T@@[@8@n@[@8@@[@8@)@ [@8@_@ [I"ruby-prof-danielhoey;T@@ [I"ruby_prof-json;T@'@ [I"ruby-progressbar;T@@ [I"ruby-prolog;T@@ [I" rubyprot;T@@ [I"ruby_protobuf;T@LN@ [I"ruby-protocol-buffers;T@@ [I"ruby_prototype;T@N@ [I"ruby_provisioning_api;T@@ [I"ruby-proxy;T@I@ [I"ruby_psigate;T@@ [I"ruby-psql;T@'@ [I"ruby_pub_sub;T@"@ [I"rubypulse;T@@ [I" rubypunk;T@'@ [I"rubypython;T@y@ [I"rubypython-raspi;T@@@ [I"ruby-qmail;T@`@ [I"ruby-qstat;T@@@ [I"rubyquartz;T@6@ [I"ruby-query;T@`@ [I"rubyquest;T@'@ [I"ruby-quilt;T@@ [I"ruby-quota;T@@ [I"ruby-radix;T@@ [I"RubyRanges;T@@ [I"ruby-rapleaf;T@I@ [I" ruby-rc4;T@|@ [I" rubyrdf;T@'@ [I"rubyrdf-sesame;T@'@ [I"ruby-readability;T@@ [I"ruby-recaptcha;T@W@ [I"ruby-recorder;T@E@ [I"ruby-reddit;T@@ [I"ruby_reddit_api;T@@ [I"ruby_reddit_api-h;T@@ [I"ruby-redis;T@E@ [I"ruby_redis_lock;T@@ [I"ruby-redis-portertech;T@@ [I"ruby-redmine_client;T@@ [I"ruby_reduce;T@'@ [I"ruby_regex;T@@ [I"ruby-regress;T@`@ [I" rubyrep;T@N@ [I"ruby_reportable;T@@ [I"ruby-rescuetime;T@@ [I" rubyrest;T@@ [I"ruby-rets;T@@ [I"ruby_rhymes;T@@@ [I"ruby-ripmime;T@|@ [I"ruby_rockers;T@@ [I"ruby_rockers_predictor;T@@ [I"rubyrogues;T@@ [I" ruby-rpm;T@ @ [I"RubyRRDtool;T@@ [I" ruby-rtf;T@'@ [I" rubyrun;T@- @dn[@8@- @[@8@- @v[@8@@7[@8@Q@ [@8@Q@9[@8@Q@[@8@@ [I"RubyRun_CE;T@- @v[@8@- @ [I"ruby-s3cmd;T@|@ [I"ruby-s3cmd-anfleene;T@`@ [I"ruby-saferpay;T@@ [I"ruby-saml;T@@ [I"ruby-saml-bekk;T@@ [I"ruby-saml-bm;T@@ [I"ruby-saml-for-portal;T@@ [I"ruby-saml-idp;T@@ [I"ruby-saml-mod;T@p@ [I"ruby-saml-uppercase;T@@ [I"ruby-sasl;T@@ [I"ruby-satisfaction;T@!@ [I"ruby_scope;T@`@ [I"ruby-screen;T@- @ [I"ruby_scribe;T@|@ [I"rubyscript;T@@ [I"rubyscript2exe;T@J@ [I"rubyscriptwriter;T@E@ [I" rubysdl;T@ @ [I"ruby-sdl-ffi;T@R @ [I"rubysdl-mswin32-1.8;T@ @ [I"rubysdl-mswin32-1.9;T@ @ [I"rubySelenium;T@V@ [I"ruby-sendhub;T@@ [I"ruby-serialport;T@X@ [I"rubyserif;T@@@ [I"ruby_service_helper;T@@ [I"ruby-sesame;T@@ [I"ruby-sfst;T@@ [I" rubysh;T@@ [I" RubySH;T@@ [I"ruby-shadow;T@i6@ [I" rubyshop;T@@ [I"ruby-shout;T@ @ [I" rubysip;T@@ [I"ruby_skynet;T@@ [I" rubyslim;T@@ [I"rubyslim-unofficial;T@E@ [I"rubyslippers;TU;[I" 1.08;T@ [I"ruby_slippers;T@X)@ [I"ruby-slippers;TU;[I" 0.1.43;T@ [I" ruby-sml;T@!@ [I"ruby-smpp;T@@ [I"ruby-smugmug;T@'@ [I"ruby_snake;T@@ [I"ruby-snarl;T@V@ [I"RubySocialClub;T@@ [I"RubySpamAssassin;T@`@ [I"ruby_speech;T@@ [I"ruby-splunk;T@"@ [I"ruby-spreadsheet;T@7@ [I" rubyspy;T@@ [I" ruby-srp;T@+@ [I" rubysspi;T@ @1[@9@ @ [I"rubysspi-server;T@'@ [I"ruby-standard-deviation;T@O@ [I"ruby-state-mach;T@E@ [I"ruby-state-machine;T@@ [I"ruby-station;T@1@ [I"ruby-station-runtime;T@"@ [I"rubystats;T@@ [I"ruby-stemmer;T@' @[@!9@@ [@!9@@ [@!9@@[I"ruby-stemp;T@s@ [I"ruby-string-match-scorer;T@@ [I"ruby-style;T@@ [I"RubySunrise;T@[ @ [I"ruby-sun-times;T@@@ [I"ruby-supervisor;T@E@ [I" ruby-svd;T@@ [I"ruby_svg_light;T@@ [I" rubyswig;T@'@ [I" rubysync;T@@ [I"ruby-tables;T@|@ [I"ruby-taglib2;TU;[I" 1.02;T@ [I" ruby-tcl;T@`@ [I" rubytea;T@@@ [I"ruby_teamsite;T@@ [I"ruby_template;T@E@ [I"ruby_template_960;T@'@ [I"ruby_template_handler;T@@ [I"ruby-terminfo;T@`@ [I"ruby-termios;T@Q@ [I" rubytest;T@J@ [I"ruby-tf-idf;T@@ [I"ruby-threading-toolkit;T@ @ [I"ruby_thread_pool;T@@ [I"ruby-thumbor;T@@ [I"ruby-tic-tac-toe;T@@ [I" rubytidy;T@@[I"ruby_tika_app;T@[ @ [I"ruby-tmdb;T@@ [I"ruby-tmdb3;T@@ [I" RubyToC;T@p@ [I" rubytodo;T@@ [I"ruby-tokyotyrant;T@@ [I"rubytorrent;T@[ @ [I"rubytorrent-allspice;T@@ [I"rubytracer;T@@ [I"rubytrackselector;T@E@ [I"ruby-traileraddict;T@'@ [I"ruby_transform;T@+@ [I"ruby_traverser;T@@ [I" rubytree;T@&@ [I"ruby-treemap;T@@ [I"ruby-trello;TU;[I" 0.4.4.3;T@ [I"ruby-trello-wgibbs;T@"@ [I" RubyTrie;T@@ [I"ruby_trollem_ipsum;T@'@ [I" rubytter;T@@ [I"ruby_ttfm;T@@ [I"ruby_tube;T@@ [I"ruby_tubesday;T@@ [I"ruby-tumblr;T@E@ [I" ruby_ucp;T@@ [I" ruby-uml;T@I@ [I"rubyunderscore;T@@ [I"ruby-unison;T@'@ [I"ruby-units;T@@ [I"ruby-units-brewpoo;T@@ [I"ruby-unix-now;T@@ [I" rubyuno;T@@ [I"ruby_uri_template;T@@ [I" ruby-usb;T@6@[@9@@ [I"ruby-usdt;T@@@ [I"ruby-uuid;T@'@ [I" ruby-uv;TU;[I" 0.0.6.4;T@ [I" rubyuw;TU;[I" 0.99.19;T@ [I"ruby_vcloud_sdk;T@@ [I"rubyVDRconvert;T@@ [I"ruby-version;T@@ [I"rubyview-rails;T@'@ [I"ruby_vim_sdk;T@@ [I"ruby-vips;T@@ [I"ruby-vircurex;T@@ [I"ruby-virtualenv;T@@ [I" rubyvis;T@@ [I" ruby-vnc;T@@ [I" rubyvor;T@+@ [I" ruby-vpi;TU;[I" 21.1.0;T@ [I"rubywarrior;T@6@ [I"rubywarrior-i18n;T@@ [I"ruby-watchcat;T@@ [I"ruby-watchcat-pure;T@@ [I"ruby-watchr;T@@ [I" rubywbem;T@@ [I"rubyweather;T@u@ [I"rubyweatherforecast;T@@ [I" ruby-web;T@@ [I"rubywebdialogs;T@@ [I"ruby-webp;T@@ [I"rubyw_helper;T@|@ [I"ruby-which;T@@ [I" rubywho;T@x@ [I"ruby-wmctrl;T@"@ [I" ruby-wmi;T@x@ [I" rubywmq;T@I"i386-mswin32-mq6;T[@9@I"i386-mswin32-mq5.3;T[@9@I"sparc-solaris2.8-mq5.3;T[@9@O@ [I"rubyworks-ec2;T@+@ [I" rubywpa;T@'@ [I" ruby-wsd;T@"@ [I"ruby-wunderlist;T@R @ [I"ruby-xbmc;T@@ [I" ruby-xen;T@@ [I" rubyXL;T@7U@ [I"rubyxmacro;T@n@ [I"ruby-xml-mapper;T@@ [I"ruby-xml-smart;TU;[I" 0.1.12.1;T@1[@ :U;[I" 0.2.99.3;T@ [I"ruby-xpath;T@x@ [I"ruby-xquery;T@[@ [I" ruby-xsd;T@E@ [I"ruby-xslt;T@<@ [I" ruby-xz;T@`@ [I" rubyyabt;T@1@ [I"ruby-yadis;T@@ [I"ruby_yahoo_answers_api;T@@ [I"ruby-yasm;T@@ [I"ruby-youtube-dl;T@@ [I" ruby-yql;T@'@ [I" ruby-yui;T@n@ [I"rubyzilla;T@`@ [I"rubyzilla-awt;T@6@ [I" rubyzip;T@<@ [I" rubyzip2;T@@ [I" rucas;T@'@ [I" ruck;T@@ [I"ruck-glapp;T@@ [I"ruck-midi;T@@ [I"ruck-realtime;T@@ [I"ruck-ugen;T@@ [I" ruckus;T@@ [I" ruco;T@ZB@ [I"RuCodeGen;T@@ [I" rucola;T@@ [I"rucursive;T@@ [I" rucy;T@6@ [I" rudate;T@@ [I" rudbms;T@'@ [I" rudebug;T@@ [I" rudeki;T@`@ [I" rudil;T@@ [I" rudis;T@@ [I" rudo;T@@ [I" rudoo;T@z@ [I" rudy;TU;[I"0.9.8.020;T@ [I" rudyl;TU;[I" 5.8.4;T@ [I" ru_excel;T@n@ [I"rufirmata;T@n@ [I"rufus-cloche;T@@ [I"rufus-decision;T@@ [I"rufus-dollar;T@@ [I"rufus-doric;T@$@ [I"rufus-eval;T@@ [I"rufus-google;T@'@ [I"rufus-jig;T@@ [I"rufus-json;T@@ [I"rufus-lru;T@W@ [I"rufus-lua;T@@ [I"rufus-mnemo;T@@ [I"rufus-rtm;T@6@ [I"rufus-scheduler;TU;[I" 2.0.17;T@ [I"rufus-sixjo;T@|@ [I"rufus-sqs;T@W9@ [I"rufus-tokyo;T@ @ [I"rufus-treechecker;T@@ [I"rufus-verbs;T@@ [I"rug;T@'@ [I"Rug;T@E@ [I" ruga;T@@ [I"rugalytics;T@@ [I" rugem;T@'@ [I" rugex;T@@ [I" ruggby;T@@ [I" rugged;T@ @ [I" rugger;T@'@ [I" RuGPost;T@`@ [I" rugroupy;T@@@ [I"rugroupy-server;T@@@ [I" rugs;T@`@ [I" rugui;T@ @ [I" ruhl;T@@ [I" ruhoh;T@s@ [I" ruhue;T@@ [I"rui;T@@@ [I" Ruiby;TU;[I" 0.53.0;T@ [I" ruil;T@@ [I" ruined;T@@ [I" ruinput;T@@ [I" rujitsu;T@@ [I" ruku;T@!@ [I"RUL;T@@ [I" rule;T@E@ [I" rulebook;T@@ [I" ruleby;T@W9@ [I"rulecrusher;T@`@ [I" ruler;T@@ [I" rules;T@@@ [I"rules_engine;T@@ [I"rules_engine_templates;T@@ [I"rules_engine_users;T@@ [I" rulesio;T@ @ [I"rules_view;T@@ [I" rulesy;T@'@ [I"ruletagger;T@@ [I"rum;T@@[@:@@ [@:@@?[I" rumacs;T@'@ [I" rumai;T@(C@ [I" rumake;T@6@ [I""rumblinthebronx-sys-proctable;T@' @S[@:@ @[I"&rumblinthebronx-system-getifaddrs;T@@t[@:@@ [@:@@ [I" rumbly;T@@ [I" rumbster;T@@ [I" rumember;T@@ [I" rumeme;T@x@ [I" rumi;T@@ [I" ruminate;T@@ [I" ruml;T@@ [I" rumld;T@@ [I" rummage;T@'@ [I"rummageable;T@@ [I" rumoji;T@@ [I" rumonade;T@x@ [I" rump;T@@ [I"rumplayer;T@`@ [I" rumpy;TU;[I" 0.9.24;T@ [I" rumx;T@@ [I"run;T@@ [I"runa-chef;T@X'@ [I" runarray;T@'@ [I"run-as-root;T@`@ [I" runcible;T@@ [I" runciter;T@E@ [I"runcoderun;T@@ [I"runcoderun-gem;T@`@ [I" rune;T@`@ [I" runes;T@6@ [I"run_every;T@1@ [I"run_in_background;T@@ [I" runison;T@'@ [I"runit-man;T@@ [I"runkeeper;T@@ [I"run_keeper;T@@ [I"runkeeper-activities;T@"@ [I" run_loop;T@"@ [I"runmetric;T@"@ [I" runnable;T@@ [I" runnel;T@"@ [I" runner;T@@ [I" running;T@@ [I"running_man;T@J%@ [I" runo;T@I@ [I" run_once;T@@ [I"runpuppet;T@@ [I" runspell;T@'@ [I" runssh;T@J@ [I" runt;T@X@ [I" runt19;T@@ [I"runtastic-tiny_mce;T@|@ [I"&runtastic-tiny_mce_curblyadvimage;T@,@ [I" runtex;T@@ [I" runtime;T@@ [I"runtime_info;T@@ [I" runway;T@'@ [I" ruote;TU;[I" 2.3.0.1;T@ [I"ruote-activeresource;T@O@ [I"ruote-amqp;T@^;@ [I"ruote-beanstalk;T@ @ [I"ruote-couch;T@ @ [I"ruote-cukes;T@'@ [I" ruote-dm;T@ @ [I"ruote-extras;T@z@ [I"ruote-jig;T@'@ [I"ruote-kit;TU;[I" 2.2.0.3;T@ [I"ruote-library;T@@ [I"ruote-mon;T@9@ [I"ruote-mongodb;T@@ [I"ruote-nats;T@@ [I"ruote-redis;T@9@ [I"ruote-registry;T@@ [I"ruote-sequel;T@9@ [I"rup;T@@ [I" RuPac;T@@ [I" rupee;TU;[I" 0.2.9.3;T@ [I" rupees;T@@ [I" rupi;T@`@ [I" ruploy;T@"@ [I" ru_pol;T@@@ [I" ruport;T@@ [I"ruport_json_formatter;T@@ [I"ruport-lean;T@@ [I"ruport_report_builder;T@`@ [I"ruport-util;T@l5@ [I"rupostrano;T@'@ [I" rupov;T@@ [I" rupower;T@|@ [I"ru_propisju;T@i6@ [I" rupture;T@@ [I" rupy;T@@ [I" rural;T@@ [I" ruremai;T@@ [I" ruri;T@@@ [I" rurl;T@@ [I" ruroku;T@@ [I" rusage;T@@ [I"RusaMember;T@@ [I"ruscountrylist;T@E@ [I" rush;T@^%@ [I"rushcheck;T@W9@ [I" rushiro;T@@ [I" rushover;T@@ [I" rusic;T@"@ [I"ruslan_first_gem;T@@ [I" russdeep;T@@ [I" russian;T@@ [I"russian-reversal;T@ @ [I"russian_sex;T@'@ [I"rut;T@E@ [I" rutabaga;T@"@ [I" rutaci;T@@@ [I" rutema;T@@ [I"rutema_elements;T@+@ [I"rutemaweb;T@@ [I"rutema_web;T@ @ [I"rUtilAnts;TU;[I"1.0.0.20120223;T@ [I" rutils;T@O@ [I"rutorrent;T@'@ [I"ru_translit;T@@ [I" rutt;T@@ [I" rutty;T@ao@ [I" RuTu;T@'@ [I" rutui;T@!@ [I"rut_validator;T@'@ [I" ruty;T@'@ [I"ruv;T@@ [I" ruva;T@@ [I" ruvi;T@4@ [I" ruwiki;T@@ [I" ruxster;T@'@ [I"rv;T@N@ [I"r_validator;T@@ [I"rvc;T@@ [I"rvd;T@@ [I" rvideo;T@@ [I"rvideo-tecnobrat;T@@ [I" rviki;T@E@ [I"rvincenty;T@@ [I" rvista;T@X@ [I"rvk;T@!@ [I"rvm;TU;[I" 1.11.3.5;T@ [I"rVM;T@@ [I" rvmbs;T@"@ [I"rvm-capistrano;T@N'@ [I"rvm-completion;T@@ [I" rvmify;T@@ [I"rvm_loader;T@@ [I"rvm-tester;T@@ [I" rvm-with;T@- @ [I"rvn;T@@ [I" rvol;T@@ [I"rvs;T@+@ [I"rw;T@'@ [I"rwb;T@@ [I"rwdaddresses;T@m@ [I" rwdcalc;T@'@ [I" rwddemo;TU;[I" 0.92;T@ [I"rwddialogmap;TU;[I" 0.02;T@ [I" rwdeliza;T@}@ [I"rw_depot_theme;T@@ [I"rwdfoldeditor;T@+M@ [I"rwdgutenberg;T@s@ [I"rwdhypernote;T@|7@ [I"rwd-kickstart;T@@ [I"rwdlanguage;T@@ [I"rwdmovies;TU;[I" 0.95;T@ [I" rwdmpd;TU;[I" 0.08;T@ [I" rwdruby;T@8@ [I"rwdschedule;T@=9@ [I" rwdshell;TU;[I" 1.00;T@ [I"rwdtinker;TU;[I" 1.85;T@ [I"rwdtorrent;T@T<@ [I"rwdziparubyslippers;T@q@ [I"rwdziprwdanimatedgifs;TU;[I" 0.70;T@ [I"rwdziprwdaschedule;T@=9@ [I"rwdziprwdmp3;T@<<@ [I"rwdziprwdwaddresses;TU;[I" 1.07;T@ [I"rwdziprwdwanimatedgifs;TU;[I" 0.82;T@ [I"rwdziprwdwcalc;TU;[I" 0.63;T@ [I"rwdziprwdwdialogmap;T@<<@ [I"rwdziprwdweliza;T@}@ [I"rwdziprwdwfoldeditor;T@+M@ [I"rwdziprwdwgraphics;T@@ [I"rwdziprwdwgutenberg;T@s@ [I"rwdziprwdwhypernote;T@|7@ [I"rwdziprwdwlanguage;T@@ [I"rwdziprwdwmovies;T@@ [I"rwdziprwdwmpd;T@T<@ [I"rwdziprwdwrefreshacpi;T@@ [I"rwdziprwdwruby;T@8@ [I"rwdziprwdwschedule;T@3@ [I"rwdziprwdwshell;TU;[I" 1.04;T@ [I"rwdziprwdwtorrent;T@T<@ [I"rwdziprwdwwords;T@<<@ [I"rwdziptinkerbellw;T@@ [I"rwdzipwrubyslippers;T@8@ [I" rweb;T@@ [I"Rwebserver;T@@ [I" rwebspec;T@0@ [I"rwebspec-mechanize;T@@ [I"rwebspec-webdriver;T@@ [I"rwebthumb;T@@ [I" rwebunit;T@ @ [I"rw_fastercsv;T@@ [I" rwget;T@J@ [I" rwiimote;T@'@ [I" rwiki;T@[@ [I" rwikibot;T@O@ [I" rwordnet;T@6@ [I"rworktracker;T@@ [I" rwsc;T@@ [I" rwspider;T@@ [I" rwv2;T@@ [I" rww_auth;T@@ [I"rx;T@'@ [I" RXAAL;T@'@ [I" rxcode;T@@ [I" rxen;T@@@ [I"rxfhelper;T@+@ [I" rxhp;T@@ [I" rxls;T@@ [I"rxraw-lineparser;T@!@ [I" rxsd;T@@ [I"ryana-this;T@@ [I""ryandotsmith-asf-soap-adapter;T@@ [I"ryansch-andand;T@@ [I"ryansch-awesome_print;T@@ [I"ryansch-bluepill;TU;[I" 0.0.53;T@ [I"ryansch-mock_redis;T@@ [I"ryansch-paperclip;T@{@ [I"ryansch-resque-loner;T@@ [I"ryansch-resque_spec;T@8@ [I"ryansch-ts-resque-delta;TU;[I" 1.1.5.4;T@ [I"ryanwood-mousetrap;T@@ [I" ryba;T@@@ [I" ryder;T@E@ [I"rye;T@ @ [I" rygments;T@@ [I"rylwin-acts_as_archive;T@x@ [I" ryodo;T@I@ [I" rype;T@"@ [I" rypper;T@E@ [I" rypple;T@n@ [I" rzabbix;T@!@ [I"rzd;T@@ [I" rzero;T@'@ [I"rzeszotko-ar_mailer;T@@ [I" rzip;T@ @ [I" rzotero;T@E@ [I"s2container;T@@ [I"s2d;T@'@ [I"s3;T@?@ [I" s33r;T@u @ [I" s3aps;T@'@ [I"s3archive;T@@ [I" s3_asset;T@`@ [I" s3asy;T@@@ [I"s3b;T@@ [I" s3backup;T@@ [I"s3-backup;T@@ [I" s3batch;T@+@ [I" s3-batch;T@E@ [I" s3cmd;T@@ [I" s3copy;T@@ [I"s3_cors_fileupload;T@|@ [I" s3cp;T@@ [I"s3_db_assets_backup;T@@ [I"s3db-backup;T@@ [I" s3deploy;T@@@ [I"s3-deploy;T@'@ [I"s3deployer;T@n@ [I"s3_direct_rails;T@`@ [I"s3_direct_upload;T@n@ [I"s3download;T@'@ [I" s3etag;T@'@ [I" s3file;T@@ [I"s3_form_presenter;T@n@ [I" s3fsr;T@L@ [I" s3ftp;T@'@ [I" s3gb;T@@@ [I" s3io;T@E@ [I"s3itch_client;T@u@ [I" s3lib;T@`@ [I" s3link;T@"@ [I"s3_logger;T@'@ [I"s3_multipart;T@"@ [I"s3_multi_upload;T@E@ [I"s3mybackup;T@"@ [I"s3-publisher;T@@ [I"s3restful;T@@ [I"s3-restful;T@@ [I" s3-ruby;T@@ [I" s3share;T@R @ [I"s3snapshot;T@@ [I"s3-static-site;T@@ [I" s3stream;T@@ [I"s3_swf_upload;T@@ [I" s3sync;T@@ [I" s3-sync;T@N'@ [I"s3sync-cf;T@'@ [I" s3tools;T@'@ [I" s3up;T@@ [I" s3upload;T@@ [I"s3-upload;T@@ [I"s3_uploader;T@@ [I"s3_upload_form;T@@ [I" s3utils;T@I@ [I"s4;T@@ [I" s41c;T@@ [I"s4t-utils;T@@ [I" s6x_auth_scaffold_generator;T@@ [I"s6y;T@@ [I"s7;T@'@ [I"s7n;T@`@ [I" saag;T@@ [I" saal;T@V@ [I" saas;T@`@ [I" saasable;T@@ [I"saasaparilla;T@I@ [I"saas_deny_subdomains;T@E@ [I" saaspose;T@E@ [I"saasposesdk;T@@ [I"saas_pulse-ruby;T@@@ [I" saasu;T@E@ [I" saasy;T@'@ [I" sabbath;T@E@ [I" saber;T@u"@ [I" sabnzbd;T@@ [I"sac;T@'@ [I"Sac;T@'@ [I"sa-carrot;T@@ [I"sa-detector;T@@ [I" sadie;T@l@ [I" sads_xml;T@"@ [I" safai;T@^]@ [I"safari_layout;T@+@ [I"safari_plist;T@@ [I"safariwatir;T@x@ [I" safe;T@W9@ [I"safe_attributes;T@@ [I"safeblock;T@'@ [I" Safebox;T@E@ [I" safeeval;T@'@ [I"safe_eval;T@@ [I"safe_fork;T@@ [I"safeguard;T@`@ [I" safely;T@@ [I" safe-me;T@@ [I" safemode;T@@ [I"safe_nested_calls;T@'@ [I" safer;T@@ [I"safe_redirection;T@@ [I"sa-ferret;TU;[I" 0.11.6.3;T@ [I"safer_send_file;T@'@ [I"safe_shell;T@@ [I"safe_spec;T@@ [I"safety_mailer;T@@ [I"safety_net;T@@ [I"safety_patrol;T@@ [I"safety_patrol_padrino;T@@ [I"safety_pin;T@n@ [I"safe_video_embed;T@@ [I" safiro;T@@ [I" safubot;T@@ [I" saga;T@ @ [I" sage_one;T@'@ [I"sage_party;T@E@ [I" sage_pay;T@@ [I"sagepayadminapi;T@E@ [I" sahara;T@ @ [I" sahi;T@@ [I"sa-i_can_daemonize;T@@ [I"saiku_client;T@@ [I" saikuro;T@u@ [I" Saikuro;T@@ [I"saikuro_treemap;T@@ [I" sailor;T@'@ [I" sailthru;T@x@ [I"sailthru_batching_client;T@'@ [I"sailthru-client;TU;[I" 1.15;T@ [I"sailthru_mailer;T@@ [I"sailthru_mailer_3;T@@ [I"!saimonmoore-database_cleaner;T@@ [I" saintly;T@ @ [I"sak;T@@ [I"sakai-cle-test-api;T@6@ [I"sakai-info;T@@ [I"sakai-oae-test-api;T@n@ [I" sake;T@D@ [I" saki;T@+@ [I" sakura;T@N@ [I"sakura_cloud;T@'@ [I"sakuramochi;T@M+@ [I"sal;T@@ [I" salad;T@@ [I"salamander;T@6@ [I" sales;T@6@ [I"%salesflip-jobboersen_integration;T@@ [I"!salesflip-lead_notifications;T@@ [I"salesforce;T@'@ [I"salesforceapi-rest;T@@ [I"salesforce_ar_sync;T@@ [I"salesforcebulk;T@N@ [I"salesforce_bulk;T@@ [I"salesforce_bulk2;T@J@ [I"salesforce_bulk_api;T@"@ [I"salesforce_bulk_oauth2;T@@ [I"salesforce-chatter;T@@ [I"salesforce_connector;T@@ [I"salesforce_connector_light;T@@ [I"salesforklift;T@V@ [I" salgo;T@@ [I"sallie_mae_gateway;T@@ [I" salsa20;T@@ [I" salt;T@'@ [I"salt-and-pepper;T@@ [I"salted_login_generator;T@@ [I" salticid;T@@ [I"sal-tools-analyze;T@@ [I" salty;T@@ [I" Salut;T@x@ [I"salvatore;T@@ [I"salve_parananon;T@@ [I"sam;T@E@ [I" sambal;T@@@ [I" sambala;T@ @ [I"sambal-cle;T@kM@ [I"sambal-kuali;T@@ [I"same_table_translation;T@@ [I" saml;T@!@ [I"saml2ruby;T@@ [I"saml_op_client;T@@ [I"samlown-carrierwave;T@@ [I"samlown-couchrest;T@@ [I"(samlown-couchrest_extended_document;T@W@ [I" samlr;T@@ [I" saml-sp;T@@ [I"sammy-rails;T@`@ [I"sam-mysql-ruby;T@@ [I"samoli-hirefire;T@`@ [I"samoli-maxmind;T@@ [I"samoli-money;T@i6@ [I" samorau;T@@ [I"sample_gem;T@'@ [I"samplegemm;T@E@ [I"sample_models;T@o@ [I" sampler;T@@ [I"samples_table;T@E@ [I"sample_tasks;T@*@ [I"sam-rakegrowl;T@,@ [I" samuel;T@@ [I" samurai;T@x@ [I"san;T@@ [I" sandbox;T@`@ [I"sandboxed;T@E@ [I"sandboxed_erb;T@@ [I"sandboxer;T@+@ [I" sander;T@@ [I"sandmanapp;T@R @ [I"sandofsky-gd2;T@x@ [I"sandofsky-typhoeus;T@6@ [I"sandozxmlconv;T@@ [I" sandra;T@ @ [I"sandra-rails;T@V@ [I" sandrbox;T@@ [I" Sandrbox;T@'@ [I"sandro-fakeweb;T@@ [I" sandwich;T@@ [I" sandy;T@n@ [I" sane;TU;[I" 0.25.6;T@ [I" sane-ffi;T@`@ [I"sane_timeout;T@@ [I" sanford;T@@ [I"sanford-protocol;T@@ [I" sang;T@'@ [I" sanitize;T@+@ [I"sanitize_attributes;T@E@ [I"sanitized_attributes;T@@ [I"sanitize_email;T@W@ [I"sanitizer;T@@ [I"sanitize-rails;T@@ [I"sanitize-url;T@+@ [I" sanity;T@@ [I" san_juan;T@"@ [I" sankey;T@'@ [I" sans;T@@ [I" santa;T@!@ [I"santas_little_helper;T@n@ [I"santey_blog;T@@ [I"santey-blog;T@E@ [I"santey_view;T@@ [I"santey_vote;T@`@ [I"santuxus-settingslogic;T@@ [I"sanultari-commander;T@@ [I"sanultari-config;T@[@ [I"sanultari-growl;T@W@ [I" sanzang;T@E@ [I"saoj-monkey;T@@ [I" sap4ruby;T@@ [I" saphira;T@@ [I" sapling;T@@ [I" sapnwrfc;T@'I"x86_64-darwin11.3.0;T[@?@'@}1[I" sapo;T@E@ [I" sapoci;T@@ [I"sapoci-connect;T@t @ [I" sapoku;T@[ @ [I" sapo-rb;T@ @ [I" sapphire;T@u!@ [I"sapphire-exp-env;T@x@ [I"sappho-basics;T@@ [I"sappho-data-publisher;T@,@ [I"sappho-heatmiser-proxy;T@ @ [I"sappho-socket;T@+@ [I" sappy;T@@ [I"sap-rails;T@'@ [I" saran;T@'@ [I" sarcasm;T@'@ [I" saruman;T@@ [I" sash;T@`@ [I" sasha;T@`@ [I" sashimi;T@I@ [I"sasquatch;T@@ [I" sass;T@aP@ [I"sass-960gs;T@@ [I"sassafras;T@@ [I"sass-align;T@`@ [I" sassator;T@@ [I"sass-capucine;T@@ [I" sassdoc;T@E@ [I" sasset;T@@ [I"sass-extractor;T@'@ [I"sass_fix_ie;T@'@ [I"sass-fontimage;T@@ [I"sass-globbing;T@@ [I"sass-media_query_combiner;T@E@ [I"sass-on-heroku;T@- @ [I"sass_on_heroku_with_rack;T@E@ [I"sass-pygments-rails;T@@ [I"sass-rails;T@aP@ [I"sass-rails-bootstrap;TU;[I" 2.2.2.2;T@ [I"sass_rails_patch;T@'@ [I"sass-softlight;T@E@ [I"sass-tools;T@t @ [I"sass-twitter-bootstrap;T@@ [I"!sass-twitter-bootstrap-rails;T@@ [I" sassy;T@@ [I"sassybeans;T@@ [I"sassy-beans;T@E@ [I"sassy-buttons;T@+@ [I"sassy-fractions;T@@ [I"sassy-math;T@@ [I"sassy_noise;T@+@ [I"sassy_noise_gradient;T@@ [I"sassyseeds;T@@ [I"sassy-text-shadow;T@"@ [I"sa-sweat_shop;T@@ [I" satan;T@"@ [I"satellite;T@@ [I"satisfaction-jasmine;T@@ [I" sa-tmail;TU;[I" 1.2.5.1;T@ [I" saturday;T@@ [I"sauberia-aws-s3;TU;[I"0.6.2.1254423624;T@ [I"sauberia-db2s3;T@K@ [I" sauce;T@t@ [I"sauce-cucumber;T@ @ [I"sauce-jasmine;T@ @ [I"saucelabs-adapter;T@' @ [I" saucerly;T@@ [I"saucerly-r3;T@@ [I"sauce-test;T@@ [I" saucier;T@"@ [I" saucy;T@ @ [I"saucy-kiss;T@x@ [I"saulolso-activeadmin;T@@ [I" sauron;T@@ [I" savage;T@@ [I"savage-beast;T@@ [I"sa_vat_validation;T@`@ [I"saveassets;T@@ [I"save-changes-to;T@@ [I" saveconf;T@'@ [I"save_file;T@@ [I"save_queue;T@x@ [I" saver;T@@ [I"save-your-dosh;T@@ [I" savior;T@E@ [I" savon;T@@ [I"savon_model;T@N@ [I"savon-multipart;T@N@ [I"savon_spec;T@@ [I"savon-xaop;TU;[I" 0.7.2.7;T@ [I"savory_theme;T@@ [I" sawmill;T@$@ [I" saws;T@E@ [I" sawtooth;T@@ [I" sawyer;T@n@ [I"saxaphone;T@@ [I"saxerator;T@@ [I"sax-machine;T@@ [I"$sax-machine-nokogiri-1.4.4-safe;T@@ [I"saxon-xslt;T@@*[I" saxony;T@@ [I"sax_stream;T@@ [I" saxy;T@@@ [I"say;T@@ [I"sayso-api-client;T@6@ [I"sayso-dalli;TU;[I"1.0.3.001;T@ [I"!sayso-exception_notification;TU;[I"1.0.0.001;T@ [I"sayso-geokit;TU;[I"1.5.0.3.003;T@ [I"sayso-i18n;TU;[I"0.5.0.001;T@ [I"sayso-js-test-driver-rails;TU;[I"0.4.3.002;T@ [I"sayso-kaminari;TU;[I"0.12.4.001;T@ [I"sayso-meta_where;TU;[I"1.0.4.001;T@ [I"sayso-oauth;TU;[I"0.4.4.001;T@ [I"sayso-paperclip;TU;[I"2.3.10.001;T@ [I"sayso-permalink_fu;TU;[I"0.0.1.001;T@ [I"sayso-routing-filter;TU;[I"0.2.2.001;T@ [I"sayso-syslogger;TU;[I"1.2.4.001;T@ [I"sayso-thinking-sphinx;TU;[I"2.0.3.002;T@ [I" say_when;T@@ [I"sba;T@'@ [I"sbader-lhm;T@@ [I"sbader-yui-compressor;T@Q@ [I" sbci;T@@ [I" sbdb;T@s@ [I"sbdevcart;T@n@ [I"sbdevcore;T@[@ [I"sbdev-core;T@'@ [I"sbdevpadi;T@V@ [I"sb-heroku-autoscaler;T@P@ [I"sbiclient;T@|@ [I" sbif;T@@ [I"sbn;T@e@ [I"sbs2003_contacts;T@@ [I" sbsm;T@@ [I"sb-styleguide;T@@ [I"sbt;T@n@ [I" sbyc;T@+@ [I"sc2;T@@ [I"sc2_achievements;T@`@ [I" sc2cinch;T@`@ [I" sc2epub;T@V@ [I"sc2profile;T@!@ [I" sc2ranks;T@1@ [I" sc2stats;T@`@ [I" scaffold;T@@ [I"scaffolder;T@"@ [I""scaffolder-annotation-locator;T@+@ [I"scaffolder-fake;T@@ [I"scaffolder-plugin-fake;T@@ [I"scaffolder-test-helpers;T@@ [I"scaffolder-tools;T@6@ [I"scaffold_form_generator;T@T @ [I"scaffoldhub;T@6@ [I"scaffolding_extensions;T@ @ [I"scaffold_logic;T@O@ [I"scaffold_markup;T@'@ [I" scaffy;T@@ [I"scaf-generator;T@@ [I"scala-bootstrapper;T@e@ [I"scala-inline;T@'@[I"scala-library-jars;TU;[I" 2.9.2;T@[I" scalapi;T@ @ [I"scalarium;T@"@ [I"scalarium-api-wrapper;T@@ [I"scalarium_cli;T@"@ [I"scale_down;T@n@ [I"scale_generator;T@@ [I" scalerui;T@6@ [I" scales;T@"@ [I"scales-core;T@"@ [I"scales-monitor;T@"@ [I"scales-server;T@"@ [I"scales-worker;T@"@ [I" scalpel;T@@ [I" scalr;T@I@ [I" scam;T@@ [I"scambra-ar_mailer;T@O7@ [I" scamp;T@@ [I" scandb;T@6@ [I" scanner;T@"@ [I"scanner_generator;T@@ [I" scanny;T@@ [I" sc-ansi;T@@ [I"scarecrow;T@'@ [I" scarlet;T@@@ [I" scaruby;T@@ [I"scashin133-net-ldap;T@+@ [I"scashin133-rsaml;T@@@ [I"scashin133-s3;T@?@ [I"scashin133-syslogger;T@@ [I"scashin133-syslog_logger;T@@ [I"scashin133-vpim;T@@ [I"scashin133-xmpp4r-simple;T@@ [I" scasm;T@`@ [I" scatter;T@"@ [I" scbi_ace;T@@ [I"scbi_blast;T@Դ@ [I"scbi_cominer;T@n@ [I"scbi_distributed_blast;T@"@ [I"scbi_fasta;T@g@ [I"scbi_fastq;T@@ [I"sc-big_sitemap;TU;[I" 0.8.3.4;T@ [I"scbi_headers;T@E@ [I"scbi_mapreduce;T@1@ [I"scbi_math;T@'@ [I"scbi_plot;T@@ [I"scbi_queue_system;T@@ [I"scbi_testcode;T@'@ [I"sc-campfire;T@'@ [I" scccp;T@'@ [I"sc-core-ext;T@u@ [I"SCDBtoYAML;T@'@ [I" sc-docs;T@@ [I" scenario;T@@ [I"scenarios;T@`@ [I"scenariotest;T@`@ [I" scene;T@E@ [I"scene7ize;T@,@ [I"scene7-wrapper;T@@ [I"scene-toolkit;T@@ [I"scensus-utils;T@@ [I" scent;T@"@ [I" scgi;T@e@ [I" schaefer;T@n@ [I"scharfie-bones;T@^@ [I"scharfie-rails-footnotes;T@9@ [I" schatz;T@"@ [I" sched;T@@ [I"schedular;T@N$@ [I" schedule;T@'@ [I"schedule_atts;T@E@ [I"schedule_fu;T@!@ [I"scheduler;T@[ @ [I"scheduler_daemon;T@x@ [I"schedule-scraper;T@@ [I"schedulicon;T@E@ [I"scheherazade;T@`@ [I" schema;T@@ [I"schema_associations;T@@@ [I"schema_comments;T@+@ [I"schema_generator;T@@ [I"schema_hash;T@@ [I"schemaker;T@+@ [I"schema_migration_monitor;T@E@ [I"schema_plus;T@@ [I"schema_qualified_tables;T@@ [I" schemata;T@@ [I"schemata-staging;T@ @ [I"schematic;T@@ [I"schema_to_scaffold;T@@ [I"schema_transformer;T@@ [I"schematron;T@@ [I"schema_validations;T@@ [I" schemer;T@`@ [I" schemy;T@E@ [I" schet;T@@ [I" schiphol;T@' @ [I" schizo;T@@@ [I" schlep;T@@ [I"schleuder;T@9 @ [I"schleyfox-bert;T@x@ [I"schleyfox-ernie;T@9 @ [I"schleyfox-grit;T@^;@ [I"schleyfox-hookr;T@@ [I"schleyfox-lockfile;T@@ [I"schleyfox-rgeo;T@[@ [I"schmobile;T@@ [I" Schmock;T@B@ [I"schmurfy-bacon;T@@ [I"schmurfy-bert;T@@ [I"schmurfy-em-spec;T@I@ [I"schnitzelpress;T@@ [I"schnitzelstyle;T@@@ [I"schofield;T@@ [I"school_days;T@@ [I"schoolfinder;T@@ [I"school_friend;T@'@ [I"schreihals;T@"@ [I"schrodinger;T@`@ [I"schrodingers-cat;T@@ [I"schubert-ci_reporter;T@Q@ [I" schulze;T@'@ [I"schwabsauce-is_paranoid;T@ @ [I" scide;T@3@ [I"scidea-cv-redirects;T@E@ [I"scidea-cv-sco_completion;T@E@ [I"scidea-hsfc-policies;T@@ [I"scidea-hsfc-theme;T@@ [I"scidea-schools;T@s@ [I" sciime;T@J@ [I"SciMed-bj;T@@ [I"scintillation;T@x@ [I" sciruby;T@6@ [I" scissor;T@@ [I"scissor-echonest;T@`@ [I" scissors;T@'@ [I"sc_jammit_lite;T@@ [I" scli;T@@ [I" sclust;T@@ [I" scmd;T@O@ [I" sconv;T@@ [I" scoop;T@@ [I" scope;T@@ [I"scope-builder;T@@@ [I"scope_by_fuzzy;T@E@ [I"scope_counter;T@@ [I"scoped_attr_accessible;T@+@ [I"scoped_cache_keys;T@`@ [I"scoped_choices;T@@ [I"scoped_from;T@@ [I"ScopedProxy;T@@ [I"scoped_search;T@.@ [I"scoped-search;T@@ [I"scoped_search_paranoid;T@@ [I"scoped_struct;T@@ [I"scoped-tags;T@@ [I"scoped_traversal;T@@ [I"scope_filter;T@' @ [I"scope_filters;T@E@ [I" scopes;T@'@ [I"scopes_for_associations;T@|@ [I" scopify;T@|@ [I"scopperfield;T@'@ [I"scoreable;T@@ [I" scoreoid;T@@ [I" scorer;T@@ [I" scorerb;T@@ [I"ScoreWatch;T@,@ [I"scoring_rules;T@'@ [I" scorm;T@@ [I"scorm2004-manifest;T@N@ [I"scorm_cloud;T@@ [I" scorpion;T@R@ [I" scotch;T@@ [I" scottkit;T@x@ [I"scotttam-resque;T@@ [I"scotttam-RocketAMF;T@I@ [I"#scottwb-encrypted_cookie_store;T@@ [I" scotty;T@'@ [I" scour;T@I@ [I" scout;TU;[I" 5.5.10;T@ [I"scout_agent;TU;[I" 3.2.7;T@ [I"scout_api;T@x@ [I"scout_rails;T@@ [I"scout_rails_proxy;T@ @ [I"scout_rails_proxy_proxy;T@W@ [I"scout_scout;T@@ [I" scrab;T@"@ [I"scrabbler;T@6@ [I"scrabble-solver;T@!@ [I" sc-rails;T@@ [I"scrambler;T@@@ [I" scramblr;T@@ [I" scrap;T@"@ [I"scrapbooker;T@@ [I" scrapbot;T@E@ [I" scrape;T@@ [I"scraped_resource;T@'@ [I" scraper;T@@ [I"scraperwiki;T@@ [I"scraperwiki-api;T@@ [I" scrapes;T@@ [I"scrapescrobbler;T@!@ [I" scrapey;T@@ [I" scrapi;T@O@ [I" scrapie;T@@ [I" scrapify;T@@ [I"scrapin-a-livin;T@+@ [I" scrappy;T@1@ [I" scratch;T@6@ [I" Scratch;T@s@ [I"scratch_pad-filters-maruku;T@@ [I"+scratch_pad-filters-paragraph_stripper;T@'@ [I"%scratch_pad-node_extensions-list;T@E@ [I"%scratch_pad-node_extensions-page;T@@ [I"%scratch_pad-node_extensions-post;T@"@ [I"&scratch_pad-node_extensions-table;T@E@ [I"+scratch_pad-node_extensions-text_block;T@@ [I"scratch_pad-themes-default;T@E@ [I"%scratch_pad-themes-default_admin;T@E@ [I"scratch_pad-themes-primary;T@E@ [I"!scratch_pad-widgets-branding;T@'@ [I""scratch_pad-widgets-copyright;T@'@ [I"scratch_pad-widgets-flash;T@'@ [I")scratch_pad-widgets-google_analytics;T@E@ [I"$scratch_pad-widgets-system_menu;T@E@ [I"$scratch_pad-widgets-unobtrusive;T@'@ [I"scratch_pad-widgets-woopra;T@'@ [I" scratch_pad-widgets-yielder;T@'@ [I" scrawl;T@'@ [I" scrawler;T@'@ [I" scream;T@'@ [I"screcipes;T@@ [I"screencap;T@@ [I"screen_capture;T@@ [I"screeninator;T@@ [I"screenomat;T@'@ [I"screenout;T@@ [I"screen_recorder;T@|@ [I"screensized;T@- @ [I"ScreenTimer;T@@ [I"screenxtv;T@@ [I" screwcap;T@&@ [I"screw_server;T@@ [I"screw-unit;T@@ [I"screw-unit-server;T@J@ [I"scribbler;T@@ [I"scribd-carrierwave;T@@@ [I"scribd_fu;T@4@ [I" scribe;T@,@ [I"scribe_api;T@@ [I" scribeit;T@@ [I" scriber;T@@ [I"scribe-rb;T@ @ [I"scribl-rails;T@x@ [I" scripref;T@@ [I" scripsi;T@'@ [I"scriptaculous_slider;T@@ [I"scriptcam-rails;T@E@ [I"script-ci-lib;T@E@ [I"scriptcrmod;T@@ [I"script_detector;T@@@ [I" scripted;T@'@ [I"script_executor;T@u@ [I"script_finder;T@ @ [I"script_flow;T@@ [I"script_helpers;T@@ [I"scripting;T@I@ [I"scriptlandia;T@n@ [I"scriptlandia-r;T@@ [I"scriptlet_scanner;T@@ [I"script_summoner;T@@ [I" scriptty;T@@[I"scriptular;T@|@ [I"scripture;T@@ [I"scriptures;T@n@ [I"scrivener;T@@ [I"scrnshots;T@@ [I" scroauth;T@@ [I"scrobbler;T@@ [I"scrobbler2;T@"@ [I"scrobbler-ng;T@4@ [I"scrobbler-ng-utils;T@@ [I" scroll;T@Y@ [I" scrolls;T@,@ [I"scrolls-minimal;T@+@ [I"scrolls_rails;T@@ [I"scrollysign;T@@ [I" scron;T@@ [I" scrooge;T@+@ [I" scrub;T@`@ [I" scrubber;T@@ [I" scrubby;T@@ [I"scrub_jpeg;T@'@ [I" scruby;T@'@ [I" scrubyt;TU;[I" 0.4.06;T@ [I" scruffy;T@@ [I"scrumbler;T@@ [I"scrumninja;T@|@ [I"scrumninja-git-cli;T@@ [I" scrutiny;T@@ [I" scrym;T@E@ [I" scrypt;T@@ [I" scrypty;T@@ [I"scss-boilerplate-rails;T@1@ [I"scss_helpers;T@@ [I"scss-lint;T@[ @ [I" scsv;T@@ [I"scuby-wars;T@@ [I" sculd;T@E@ [I" sculpt;TU;[I" 0.1.05;T@ [I" scutil;T@_@ [I"scv;T@"@ [I" scxml;T@@ [I" scylla;T@@ [I"sdb-backup;T@@ [I" sdbcli;T@@ [I" sdb_dal;T@3@ [I" sdb_lock;T@E@ [I" sdbport;T@x@ [I"sdb_service;T@@ [I" sdbtools;T@@ [I" sdl4r;T@Z@ [I"sdl_console;T@@ [I"sdm;T@6@ [I" sdoc;T@[@ [I" sdoc_all;T@ @ [I"sdoc-helpers;T@+@ [I"sdoc_local_editor;T@G8@ [I"sdp;T@ @ [I" sds-rest;T@1@ [I"sdsykes_acts_as_ferret;T@;@ [I"sdsykes-ferret;TU;[I"0.11.6.19;T@ [I"sdw-assets;T@@ [I"sdw-generator;T@@ [I" seabass;T@,@ [I"seacucumber;T@@ [I" seajack;T@'@ [I" SEAK;T@`@ [I" seal;T@`@ [I" seamless;T@@ [I"seamless_database_pool;T@@ [I" seamus;T@x@ [I"seamusabshere-daemon-spawn;T@@ [I"'seamusabshere-scriptaculous_slider;T@@ [I"seanwalbran-feedzirra;T@6@ [I"seanwalbran-rpm_contrib;TU;[I" 2.1.6.9;T@ [I"seanwalbran-scashin133-s3;T@?@ [I" search;T@E@ [I"searchable;T@@ [I"searchable_record;T@@ [I"searchandrank;T@@@ [I"search_biomodel;T@r6@ [I"searchbox-tire;T@'@ [I"search_do;T@@ [I"search_engine_submitter;T@@ [I" searcher;T@@ [I"search_for;T@'@ [I"search_fu;T@- @ [I"searchgasm;T@@ [I"search_generator;T@@ [I"searchham;T@"@ [I"searchify;T@@ [I"search_logger;T@"@ [I"searchlogic;TU;[I" 2.5.8;T@ [I"searchlogic-heroku;TU;[I" 2.4.19;T@ [I"search_magic;T@@ [I"search_party;T@@ [I"search_qd;T@'@ [I"search_query;T@'@ [I"search_scope;T@@ [I"search-scope;T@@ [I"search-sniffer;T@@ [I"search_space_splitter;T@@ [I"SearchString;T@@ [I"search_terms;T@E@ [I"searchViz;T@'@ [I" searchy;T@@ [I"sears-api;T@@ [I"seasoning;T@`@ [I" seasy;T@@ [I" seasyar;T@@ [I" seatbelt;T@`@ [I" seatgeek;T@@@ [I"seattle_weather_gem;T@@ [I" seaweed;T@@@ [I"sec;T@E@ [I" sechat;T@@ [I" seche;T@'@ [I",secobarbital-authlogic_facebook_connect;T@@ [I"secobarbital-classifier;T@D@ [I"secobarbital-cookiejar;T@;@ [I"secobarbital-jammit;T@@ [I"secobarbital-twitter;T@YR@ [I"secondbase;T@@ [I"secondbureau;TU;[I" 0.0.4.4;T@ [I"secondhand;T@@ [I"second_level_cache;T@ @ [I"secondplanet-ultraviolet;T@W@ [I" seconds;T@!@ [I"sec_query;T@@ [I"secretary;T@@ [I"secret_data;T@@ [I"secretive;T@@ [I"secret_key;T@@ [I"secret_mail;T@'@ [I" secrets;T@@ [I"secret_sauce;T@'@ [I"secretsharing;T@[ @ [I"secret_store;T@"@ [I"section9-unittest;T@'@ [I"sections_rails;T@@ [I"securails;T@'@ [I" secure;T@;@ [I"secure_carrot;T@@ [I"secure_escrow;T@@ [I"secure_job;T@,@ [I"securely_hashed_attributes;T@@ [I"secure_routes;T@'@ [I"secure_string;T@ @ [I"secure_trading;T@@ [I"secure_uri;T@@ [I"secure_yaml;T@@ [I" securid;T@@ [I"securities;T@@ [I" security;T@@@ [I"security_blanket;T@N@ [I"security_guard;T@n@ [I"sed;T@'@ [I" sedative;T@'@ [I" sedna;T@@ [I"seeclickfix;T@@ [I" seed;T@;@ [I" seedable;T@'@ [I" seedbank;T@@ [I" seedbed;T@@ [I"seed_dump;T@@ [I"seed_dumper;T@6@ [I" seeder;T@6@ [I"seed_formatter;T@@ [I" seed-fu;T@ @ [I"seed-fu-ndo;T@E@ [I" seeding;T@@ [I" seedling;T@@ [I"seedlings;T@E@ [I"seed_list;T@@ [I"seed_loader;T@E@ [I" seed_me;T@@ [I"seed_migrations;T@"@ [I"seedomatic;T@@ [I" seeds;T@|@ [I" seedsv;T@@ [I"seed_upgrade;T@@@ [I" seedy;T@$@ [I"seeing_is_believing;T@@ [I" seeker;T@@@ [I" seekrit;T@@ [I"see-less-ess-ess;T@E@ [I" seep;T@@ [I" seer;T@ @ [I" seesaw;T@[@ [I"seesmic-rest;T@@ [I"seetemap-client;T@@ [I"segfaulter;T@E@ [I"segmented-memcache;T@u@ [I"segmenter;T@@ [I" segments;T@@ [I"segment_tree;T@@ [I" segua;T@`@ [I"seh;T@@ [I" seinfeld;T@@ [I"seis_ruby;T@,@ [I"seisuke-whenever;T@y@ [I"seivan-generators;T@@ [I" sekka;T@N@ [I" select;T@@ [I"select2-rails;T@n>@ [I"selectable_attr;T@G8@ [I"selectable_attr_rails;TU;[I" 0.3.15;T@ [I"selectbox_rails;T@E@ [I"select-column;T@@ [I"select_extra_columns;T@n@ [I"selection_options_for;T@@ [I"selections;T@1@ [I"selective_binding;T@@ [I"selectivizr-rails;T@@ [I"select_options;T@@ [I"select_weekday;T@'@ [I"select_with_include;T@'@ [I" selene;T@@ [I" selenium;T@[@ [I" Selenium;T@6@ [I"selenium-client;T@z@ [I"Selenium-Client;T@@ [I"selenium-core-runner;T@@ [I"selenium-dsl;T@@ [I"selenium-extjs;T@'@ [I"selenium_fury;T@@ [I"selenium-grid;T@,@ [I"$selenium_interaction_statistics;T@E@ [I"selenium-proxy;T@E@ [I"selenium-rails;T@@ [I"selenium-rake;T@@ [I"seleniumrc;T@E@ [I"selenium-rc;T@@ [I" seleniumrc_fc_webrat_mapper;T@`@ [I"selenium_remote_control;T@@ [I"selenium-rspec-dsl;T@@ [I"selenium-selenese;TU;[I" 1.1.13;T@ [I"selenium_shots;T@@ [I"selenium-webdriver;TU;[I" 2.27.2;T@ [I"*selenium-webdriver-element-decorators;T@@ [I"5selenium-webdriver-rails-support-via-monkeypatch;T@`@ [I"=selenium-webdriver-rails-support-via-monkeypatch.gemspec;T@@ [I"selenium-webdriver-viewers;T@@ [I"self-control;T@I@ [I"self-defense;T@6@ [I"self-flagellation;T@@ [I" selfml;T@@ [I" self-ml;T@'@ [I"self-notifo;T@@ [I"self_testing_framework;T@'@ [I"selldotcom;T@@ [I" sellect;T@'@ [I"selleo-annotate;T@J@ [I" sem4r;T@1@ [I" semacode;T@y@ [I"semacode-ruby19;T@y@ [I" semantic;T@@ [I"semantically-taggable;T@@ [I"semantic_antispam;T@`@ [I"semantic_calendar;T@@@ [I"semantic-crawler;T@@ [I"semantic_extraction;T@@ [I"semantic_form_for;T@@ [I"semanticgap_date_time_form;T@@@ [I"semantic_grid;T@@ [I"semanticgs-rails;T@@ [I"semantic_hacker;T@@ [I"semantic_id;T@@ [I"semantic_logger;T@O@ [I"semantic-mixins;T@6@ [I"semanticmodel;T@-!@ [I"semantic_naming;T@9 @ [I"semantic_navigation;T@`@ [I"semantictext;T@@ [I"#semaperepelitsa-autotest-rails;T@I@ [I"semaphore;T@'@ [I"semaphore_classification;T@@ [I"sem_extractor;T@"@ [I"semi-autotest;T@6@ [I"semi_daemon;T@' @ [I" semilla;T@n@ [I"semillagen;T@E@ [I"semi_static;T@@ [I"semlogger;T@@ [I"semq-client;T@@ [I" semr;T@'@ [I" semrush;T@ @ [I" semver;T@@ [I" semver2;T@ @ [I"sem_version;T@@ [I"semver_stringer;T@@ [I"sencha-model;T@@ [I"sencha-touch2-charts-rails;TU;[I"2.0.1.1.2;T@ [I"sencha-touch2-rails;T@ E@ [I" sendcat;T@'@ [I" send_csv;T@6@ [I" sender;TU;[I" 1.5.10;T@ [I" sendfile;T@@ [I"sendgmail;T@@ [I" sendgrid;T@@ [I"sendgrid_api;T@E@ [I"sendgrid_cli;T@@ [I"sendgrid_cli_mailer;T@@ [I"sendgrid-enphase;T@@ [I"sendgrid_events;T@"@ [I"sendgrid-newsletter;T@'@ [I"sendgrid-parse;T@@ [I"sendgrid-rails;T@@ [I"sendgrid-rails23;T@+@ [I"sendgrid_smtpapi;T@'@ [I"sendgrid_toolkit;T@N@ [I"sendgrid_web;T@'@ [I"sendgrid_webapi;T@'@ [I"sendhipchat;T@@ [I" sendhub;T@$@ [I"send-keys;T@@ [I" sendl;T@V@ [I" sendle;T@`@ [I" sendln;T@@ [I"sendmail_qwriter;T@'@ [I"send_nsca;T@LN@ [I" sendq;T@'@ [I"sendregning;T@@@ [I" sendsms;T@@ [I"send_to_friends_generator;T@@ [I"send_to_kindle;T@'@ [I"sendwithus;T@'@ [I" senedsa;T@ @ [I" senga;T@@ [I" senha;T@@ [I"senor_armando;T@'@ [I"$senotrusov-ruby-applied-toolkit;T@W@ [I"senotrusov-ruby-toolkit;T@@ [I" sensei;T@'@ [I"sensible-cinema;TU;[I" 0.35.3;T@ [I" sensis;T@@ [I" sensors;T@ @ [I" sensu;T@nI"x86_64-darwin10.8.0;T[@E@u!@[@E@u!@ [@E@ @ [I"sensu-dashboard;T@ @ [I"sensu-dashboard-sonian;T@Q@ [I"sensu-plugin;T@|@ [I" sentence;T@@ [I"sentence_extractor;T@@ [I"sentence_with_links;T@@ [I"sentia_apn_sender;T@ @ [I"sentia-capistrano-gitflow;T@@ [I"sentient_model;T@@ [I"sentientmonkey-facebooker;T@o@ [I" sentientmonkey-subdomain-fu;T@@ [I"sentient_user;T@@ [I"sentiment;T@E@ [I"sentimentalizer;T@@ [I"sentiment_analysis;T@'@ [I" sentinel;T@@ [I" sentiql;T@x@ [I"sently-sms;T@`@ [I" sentry;T@J@ [I"sentry-raven;T@x@ [I"seo;T@@ [I"seo_checker;T@[@ [I" seo_fuel;T@6@ [I" seofy;T@1@ [I"seo_helper;T@@ [I" seo_info;T@E@ [I" seo_meta;T@@ [I"seo_meta_builder;T@`@ [I"seo-mixer;T@'@ [I"seomoz-e20_ops_middleware;T@@ [I"seomoz-json-schema;T@@ [I"seo_params;T@@ [I"seotoolbox;T@@ [I" seotools;T@@ [I"seotracker;T@@ [I" seppuku;T@@ [I" septa;T@@ [I"seq;T@@ [I"seqtrimnext;TU;[I" 2.0.54;T@ [I"seqtrimnext_report;T@@ [I" sequel;TU;[I" 3.43.0;T@ [I"sequel_acts_as_cacheable;T@@ [I"sequel-audit_by_day;T@@ [I"sequel_bitemporal;T@@ [I"sequel-bit_fields;T@@ [I"sequel-bit-fields;T@@ [I"sequel_bulk_attributes;T@E@ [I"sequel-cacheable;T@@ [I"sequel-collation;T@@ [I"sequel_column_type_array;T@"@ [I"sequel_core;T@r)@ [I"sequel-crushyform;T@+@ [I"sequel-devise;T@E@ [I"sequel-factory;T@@ [I"sequel_fast_columns;T@E@ [I"sequel-fixture;T@@ [I"sequel-fusiontables;T@@ [I"sequel-hive-adapter;T@@ [I"sequel-hstore;T@@ [I"sequelinha;T@'@ [I"sequel-instruments;T@@ [I"sequel-jdbc-hxtt-adapter;T@6@ [I""sequel-jdbc-pervasive-adapter;T@@ [I"sequel_json_attributes;T@!@ [I"sequel_mappable;T@'@ [I"sequel_migration_builder;T@@ [I"sequel_model;T@r)@ [I"sequel_notnaughty;T@@ [I"sequel_oracle_extensions;T@h@ [I"sequel_orderable;T@@ [I"sequel_paperclip;T@@ [I"sequel_pg;T@l@ [@F@l@[@F@@ [I"sequel-pg-locker;T@@@ [I"sequel_plus;T@@ [I"sequel_postgresql_triggers;T@@ [I"sequel_proc_error_handling;T@@ [I""sequel_proc_error_handling.rb;T@@ [I"sequel-rails;T@@ [I"sequel_rails3;T@x@ [I"sequel-rails-cartodb;T@@ [I"sequel_sanitize;T@E@ [I"sequel_secure_password;T@@ [I"sequel_sexy_validations;T@@ [I"sequel_simple_callbacks;T@@@ [I"sequel_sluggable;T@@ [I"sequel_temporal;T@@ [I"sequel_translatable;T@@ [I"!sequel_validation_exceptions;T@!@ [I"$sequel_validation_helpers_block;T@@ [I"sequel-vertica;T@@ [I" sequence;T@@ [I"sequenced;T@@ [I"sequenceid;T@@ [I"sequence_logo;T@@ [I"sequencer;T@N@ [I"sequencerrb;T@@ [I"sequences;T@@ [I"sequenceserver;T@@ [I" sequin;T@'@ [I" seran;T@'@ [I" serb;T@@@ [I"serdisplib-ruby;T@@ [I" serel;T@@ [I" serenade;T@2@ [I"serenade_rails;T@@ [I" serenity;T@E@ [I"serenity_now;T@@ [I"serenity-odt;T@@ [I" serf;T@l5@ [I"sergeant_simple;T@@ [I"serghello;T@@ [I" sergio;T@@ [I"serialbox;T@@ [I"serialclient;T@@ [I"serial_file;T@@ [I"serial_interface;T@@ [I"serialist;T@ @ [I"serializable;T@`@ [I"serializable_attributes;T@@ [I"serializable_data;T@'@ [I"serializable_decorator;T@@ [I"serializable_proc;T@@ [I"serialization_extender;T@@ [I"serialization-scope;T@`@ [I"serialization_scopes;T@@ [I"serialize;T@@ [I"serialized_attributes;T@6@ [I"serialized-attributes;T@@ [I"serialize-list-attribute;T@'@ [I"serializer;T@@ [I"serialize-rails;T@E@ [I"serialize_variants;T@ @ [I"serialize_with;T@@ [I"serialize_with_coder;T@6@ [I"serialize_with_options;T@@ [I"serial-key;T@@ [I"serialnumber;T@@ [I"serialport;T@@ [I"serialport-server;T@@ [I"serial_preference;T@x@ [I"serial-scheduler;T@@ [I"serial-watcher;T@@ [I"serienmover;T@6@ [I"serienrenamer;T@@ [I"series_joiner;T@@ [I"series_timer;T@I@ [I" serif;T@!@ [I" serious;T@@ [I" sermepa;T@E@ [I"sermepa_web_tpv;T@E@ [I" sermont;T@@ [I"serpentine;T@`@ [I" serv;T@@ [I" servant;T@E@ [I" servdir;T@"@ [I" serve;T@@ [I" servedir;T@R @ [I"serve_dir;T@'@ [I"server-blender;T@K,@ [I"server-blender-core;T@'@ [I"server-blender-manifest;T@@@ [I"server-density;T@'@ [I"serverdensity-heroku;T@"@ [I"server_launcher;T@@ [I"server_maint;T@"@ [I"server-registry-client;T@'@ [I"server_remote;T@@ [I"serverside;TU;[I" 0.4.5.4;T@ [I"server-side-google-maps;T@@ [I"server_status;T@`@ [I"servethis;T@@ [I"serve-this;T@`@ [I"ServeWebdav;T@E@ [I" service;T@@ [I"service-analytics;T@E@ [I"servicebuilder;T@@ [I"service_crud;T@@ [I"service_disruption;T@@ [I"service_manager;T@@ [I"servicemerchant;T@@ [I"service_provider;T@E@ [I"serviceproxy;T@@ [I" servitor;T@'@ [I" servloko;T@E@ [I" servme;T@@ [I" servo;T@@ [I" servolux;T@ @ [I"ses;T@@ [I" sesame;T@'@ [I"ses-proxy;T@@ [I"ses-proxy-rails;T@@ [I" session;T@@ [I"session_captcha;T@`@ [I"session_countdown;T@@ [I"session_dump;T@E@ [I"sessioner;T@@ [I"session-hack-rails2-rails3;T@@ [I"session_injector;T@'@ [I"session_logger;T@@ [I"sessionm-cassandra_object;T@@@ [I"sessionm-resthome;T@@ [I"sessionm-thrift;T@X'@ [I"session_off;T@R @ [I"session_tracker;T@"@ [I"session-view-helper;T@@ [I"sessionvoc-open;T@@ [I"set_assertions;T@@ [I"set-combination;T@'@ [I"setec_astronomy;T@@ [I" setler;T@@ [I"setlocale;T@E@ [I" set_man;T@@ [I"set_specs;T@1@ [I" setsumei;T@@ [I"sets_uuid;T@@ [I" set_sync;T@@ [I" settable;T@s@ [I"#settable_constructor_variables;T@|@ [I" setter;T@@ [I"set_theory;T@n@ [I"settingcrazy;T@@ [I" settings;T@"@ [I"settingsdb-rails;T@W@ [I"settings-env-loader;T@@@ [I"settings-goo;T@@ [I"settings_js;T@@@ [I"settingslogic;T@Sg@ [I"settings_lord;T@@ [I"settings-tree;T@@ [I" settis;T@@ [I" settler;T@u"@ [I" settlers;T@@ [I" settr;T@@@ [I" setup;T@V@ [I"setup_once_context;T@@ [I"setup_recipes;T@'@ [I"set_watch_for;T@'@ [I"sevendigital-deploy;T@@ [I"seven_segment_display;T@@ [I"seventytwo;T@'@ [I"sevenwire-http_client;T@@ [I"sex;T@@ [I"sex_it_up;T@@ [I"sexmachine;T@@ [I" sexp;T@@ [I"sexp_builder;T@@ [I"sexp_grammar;T@@ [I"sexpistol;T@n@ [I"sexp_path;T@x@ [I"sexp_processor;T@(C@ [I"SexpProcessor;T@@ [I" sexpr;T@@ [I" sextant;T@@ [I"sexxy-emails;T@@ [I"sexy_bookmarks;T@@ [I"sexybuttons;T@@ [I"sexy_download;T@@ [I"sexy_json_schemas;T@n@ [I"sexy_pg_constraints;T@@ [I"sexy_scopes;T@@ [I"sexy_settings;T@'@ [I"sexy_to_param;T@@ [I"sexy_validations;T@Y@ [I"sexy_validators;T@@ [I" seymour;T@@ [I"sf6;T@@ [I" sfalma;T@@ [I"sfanalytics;T@3@ [I"SFAscrapi;T@@ [I" SFAtidy;T@;@ [I" sfcc;T@@ [I"sfc-custom;T@6@ [I"sfc_ikiteru;T@n@ [I" sfc-room;T@'@ [I" sfcsfs;T@+@ [I" sfdcutil;T@@ [I" sfget;T@@ [I"sfh;T@@ [I"sfl;T@@ [I" sfpark;T@'@ [I"5sf-username-password-authentication-and-rest-api;T@'@ [I" sfzer;T@@ [I" sga_enum;T@@ [I"sga_fields_synchronizer;T@6@ [I" sga_nav;T@@ [I"sga_paperclippolymorph;T@@ [I"sgc-ruby-cuda;T@`@ [I"sge;T@@ [I" sgeoip;T@I@ [I"sgeorgi-logging;T@@ [I" sget;T@@ [I"sgfparser;T@'@ [I"sgf_parser;T@@ [I"SgfParser;T@O@ [I"sgl;T@@ [I" sgmailer;T@@ [I" sg_mrt;T@`@ [I"sg_node_mapper;T@@ [I" sgpass;T@`@ [I" sg-ruby;T@@ [I"sgs;T@@ [I" sgsms;T@@@ [I"sh;T@E@ [I" sha3;T@I@ [I"sha3-ruby;T@'@ [I" shabng;T@`@ [I" shacho;T@+@ [I" shadchan;T@@ [I"shaderize;T@@ [I"shado_puppet;T@`@ [I" shadow;T@s@ [I"ShadowBelmolve-formtastic;T@ @ [I"shadowbox-rails;T@@ [I"shadow_db_credentials;T@@ [I"shadow_facter;T@@@ [I"shadowpass;T@'@ [I"shadow_puppet;T@@ [I" shadows;T@`@ [I"shadowserver;T@@@ [I" shadydb;T@@ [I" shaft;T@6@ [I" shag;T@@ [I" shagit;T@@ [I"sha_header;T@"@ [I" shake;T@6@ [I" shaken;T@`@ [I"shake_n_bake;T@`@ [I" shakes;T@@ [I"SHAKES_AND_FIDGETS;T@'@ [I"shakespeare;T@@ [I" shakyo;T@E@ [I" shallot;T@[ @ [I" shallow;T@`@ [I" sham;T@@ [I"shamazing;T@@ [I" shaml;T@@ [I"sham_rack;T@@ [I" shamrock;T@@ [I"shanboli-cache-money;T@@ [I"shanel-autotest;T@@ [I" shapelib;T@X@ [I" shapely;T@@ [I" shapes;T@[ @ [I"shapeslib;T@'@ [I"shapewear;T@@ [I" sharable;T@'@ [I" share;T@E@ [I"share_checker;T@@ [I"share_counts;T@+@ [I" shared;T@@ [I"shared_book;T@@ [I"shared-mime-info;T@@ [I"!shared-secret-authentication;T@@ [I"shared_should;T@- @ [I"shared_tests;T@@ [I"shared_workforce;T@@ [I"share-linuxfr;T@6@ [I" share-me;T@'@ [I"sharemotion;T@@ [I" sharer;T@@ [I"sharkapps;T@$@ [I"sharkfrown;T@E@ [I"sharptestsex;TU;[I"1.0.0.0.20100911;T@ [I"sharptestsex-nunit;T@hH@ [I" shart;T@ @ [I"sharts_studio_game;T@@ [I" shash;T@n@ [I"shashasha;T@@ [I"shattered;T@X@ [I"shattered_controller;T@@ [I"shattered_model;T@@ [I"shattered_ogre;T@@1[@|H@R I" windows;T[I"shattered_ogrerb;T@@ [I"shattered_pack;T@@ [I"shattered_ruby;T@@ [I"shattered_support;T@@ [I"shattered_view;T@@ [I" shatty;T@V@ [I" shaven;T@'@ [I"shawty-client;T@@ [I"shawty-server;T@T @ [I"shearwater;T@+@ [I" shebang;T@@ [I"shebang_fixer;T@@ [I" sheep;T@`@ [I" SheepDog;TU;[I"0.2.0.20120314;T@ [I"sheepsafe;T@@ [I"sheep-sebastian;T@@ [I" sheet;T@I@ [I"sheet_mapper;T@@ [I" sheets;T@@ [I"sheffield_ldap_lookup;T@E@ [I" shelbytv;T@'@ [I"sheldon-client;T@C@ [I"sheldond_fgs;T@@ [I" shelf;T@@ [I" shell;T@'@ [I" shella;T@@ [I" shellac;T@@ [I"shellcast;T@@ [I"shell_command;T@@ [I" sheller;T@@ [I"shell-executer;T@@ [I"shellfish;T@'@ [I" shellout;T@R @ [I"shellpress;T@@ [I"shell-proxy;T@@ [I"shell_shock;T@@ [I"shellshot;T@@ [I"shell-spinner;T@@ [I" shellter;T@Q@ [I"shell_test;T@@ [I"shelltoad;T@@ [I"shell_tools;T@@@ [I"shellutils;T@ @ [I"shell_utils;T@'@ [I"shell-utils;T@`@ [I" shelly;T@h@ [I"shelly-dependencies;T@@ [I" shelr;T@>@ [I" shelver;T@@ [I" shelves;T@@ [I"shenandoah;T@@ [I"shenanigans;T@ @ [I"shenie-ssl_requirement;T@;@ [I"shen-ruby;T@@ [I" shenzhen;T@@ [I" shepherd;T@@ [I" sherb;T@@ [I" shere;T@' @ [I" sheriff;T@E@ [I" sherlock;T@@@ [I" sherpa;T@'@ [I" sherry;T@E@ [I" shexy;T@@ [I"shh;T@@ [I"shh_spotify;T@'@ [I" shia;T@@ [I"shibboleth_auth;T@@ [I"shibboleth-rails;T@@ [I"shibboleths_lil_helper;T@@ [I"shibkit-meta_meta;T@I@ [I" shibui;T@ @ [I" shield;T@@ [I"shield-contrib;T@@ [I" shift;T@x@ [I"shift-lang;T@+@ [I"shift-nanite;T@JZ@ [I"shift-railroad;T@M+@ [I"shift_subtitle;T@`@ [I"shift_subtitles;T@`@ [I"shifty_week;T@`@ [I" shikashi;T@@ [I" shiki;T@'@ [I" shim;T@|@ [I"shinagawaseaside;T@@ [I" shindan;T@@ [I" shindo;T@@ [I" shine;T@6@ [I" shiner;T@@ [I"shin-faraday;T@@ [I"shingara-anemone;T@,@ [I"shingara-blather;TU;[I" 0.4.14;T@ [I"shingara-devise;T@;@ [I"shingara-garb;T@u/@ [I" shingle;T@'@ [I"shingling;T@@ [I" shining;T@@ [I"shin-irc_cat;T@x@ [I" shinmun;T@@ [I" shinobi;T@@ [I" shiny;T@@ [I" ship;T@@ [I" shipindo;T@@ [I" shipit;T@V@ [I" ship-it;T@E@ [I" ship_me;T@@ [I" shipment;T@@ [I" shipping;T@ @ [I"shipping-calc;T@@ [I"ShippingInfo;T@@ [I"shippinglogic;T@@ [I"shipsurance;T@6@ [I" shipt;T@@@ [I" shipyard;T@@ [I" shire;T@@ [I" shirka;T@'@ [I" shitcan;T@!@ [I" shitty;T@E@ [I" shiv;T@6@ [I" shkuph;T@6@ [I"shl;T@'@ [I"shlauncher;T@@ [I" shlint;T@|@ [I" shnell;T@x@ [I" shodan;T@@ [I"shodan-ruby;T@`@ [I" shoe;T@@ [I" shoehorn;T@Y@ [I" shoes;T@ @ [I"shoes-cucumber;T@E@ [I" shoesgem;TU;[I" 0.1514.0;T@ [I"shoes-mocks;T@E@ [I"shoes_mvc;T@E@ [I" shogun;T@'@ [I" shoji;T@@ [I" shomen;T@`@ [I"shomen-model;T@@ [I"shomen-rdoc;T@@ [I"shomen-yard;T@@ [I"sho-mongrel;T@@ [I"shooting_star;T@B@ [I"shop_bunny;T@@ [I" shopify;T@@ [I"shopify_api;T@i@ [I"shopify-api-limits;T@V@ [I"shopify_app;T@0@ [I"shopify_appstore;T@@@ [I"shopify-kaminari;T@@ [I"shopify-mock;T@@@ [I"shopify-routes;T@@ [I"shopify_theme;T@n@ [I"shopify_theme_multi_shop;T@V@ [I"shopify_watcher;T@'@ [I" shopkit;T@1@ [I" shopper;T@'@ [I"shopping-list;T@E@ [I" shoppr;T@@ [I"shopqi-app;T@ @ [I"shopqi-app-webhook;T@1@ [I"Shopsense;T@`@ [I"shopsense-ruby;T@`@ [I"shopstyle;T@@ [I" short;T@@ [I" shorten;T@@ [I"shortener;T@@ [I" shortey;T@'@ [I"shorthand;T@@ [I" shortie;T@@ [I"short_inspect;T@E@ [I" shortly;T@@ [I"shortn-url;T@|@ [I" shorts;T@@ [I"shortservice;T@"@ [I"short_stack;T@`@ [I" shorturl;T@@ [I"short_url;T@6@ [I"short-url-creator;T@@@ [I"short_url_token_generator;T@@ [I"shortwave;T@'@ [I" shorty;T@@@ [I" Shorty;T@@ [I"shorty_client;T@@ [I"shorty_server;T@@ [I" shotgun;T@B@ [I" shotter;T@'@ [I" should;TU;[I" 1.0.1.0;T@ [I" shoulda;T@@ [I"shoulda_action_mailer;T@@ [I"shoulda-activemodel;T@E@ [I"shoulda-addons;T@@ [I"shoulda-callback-matchers;T@@ [I"shoulda-change_matchers;T@'@ [I"shoulda-context;T@@ [I"shoulda_create;T@"@ [I"shoulda_generator;T@q@ [I"shoulda-let;T@"@ [I" shoulda_machinist_generator;T@"@ [I"shoulda-matchers;T@@ [I"shoulda_routing_macros;T@@@ [I"should_be_faster;T@@ [I"should_clean;T@@ [I"shoulders;T@'@ [I" shouldly;TU;[I" 1.0.0.16;T@ [I"should_pricot;T@@ [I"shout-bot;T@@ [I"shout-bot-portertech;T@V@ [I"shoutbox-client;T@@ [I"shoutcast_api;T@@ [I"shoutcast_status;T@@@ [I"shout-mouth-communicator;T@@ [I" shove;T@@ [I" shovel;T@'@ [I" show;T@@ [I"showandtell;T@V@ [I"showbuilder;T@3@ [I"show_directory_content;T@@ [I"showdown-rails;T@@ [I"showfeature;T@6@ [I" show_for;T@[@ [I" show_gem;T@E@ [I"show_in_browser;T@@ [I"show_json_exceptions;T@'@ [I" showman;T@@ [I" showme;T@`@ [I"show_me_the_cookies;T@T @ [I" showoff;T@X@ [I"showoff-alexch;TU;[I" 0.7.0.3;T@ [I"showoffer;T@'@ [I"showoff-io;T@@ [I"showoff-pusher;T@'@ [I"showrobot;T@'@ [I" show_sha;T@E@ [I"showstopper;T@@ [I" showterm;T@@ [I" showtime;T@@ [I" showtube;T@E@ [I" shp2db;T@@@ [I"shp2geocouch;T@@ [I"shr;T@`@ [I" shredder;T@@ [I" shrimp;T@E@ [I" shrink;T@@ [I" shroom;T@3@ [I" shroud;T@`@ [I" shrub;T@`@ [I"sht_rails;T@@ [I"shuber-interface;T@"@ [I" shubox;T@' @ [I" shuck;T@@ [I" shuffle;T@`@ [I"shuffler_fm;T@O@ [I" shuhari;T@@ [I" shunt;T@'@ [I" Shunt;T@!@ [I" shuriken;T@@ [I" shurl;T@@ [I"shu-san-scripts;T@@ [I" shushu;T@. @ [I"shutdown-dialog;T@'@ [I" shutl;T@@ [I"shutl_auth;T@@ [I"shutl_rails;T@n@ [I"shutl_resource;T@@ [I" shutter;T@@ [I" shuttle;T@F@ [I"shutup_sqlite;T@[ @ [I" shway;T@ @ [I" ShyCouch;T@y@ [I"ShyRubyJS;T@@ [I"si;T@+@ [I"SI;T@'@ [I" siatra;T@@ [I" siba;T@@ [I"siba-destination-aws-s3;T@6@ [I"siba-destination-ftp;T@E@ [I"siba-source-mongo-db;T@"@ [I"siba-source-mysql;T@E@ [I"sickbeard;T@@ [I" sicl;T@@ [I" sicuro;T@x@ [I"sid;T@"@ [I" sidekick;T@X@ [I"sidekick-client;T@[@ [I" sidekiq;T@p5@ [I"sidekiq-failures;T@@ [I"sidekiq-kawai;T@1@ [I"sidekiq_mailer;T@"@ [I"sidekiq-mailer;T@@ [I"sidekiq-middleware;T@@ [I"sidekiq-redis-logger;T@@ [I"sidekiq-scheduler;T@@ [I"sidekiq-sqs;T@@ [I"sidekiq_status;T@@ [I"sidekiq-status;T@@ [I"sidekiq-throttler;T@@ [I"sidekiq-unique-jobs;T@J@ [I" sidepop;TU;[I" 0.0.0.45;T@[@J@J@ [I"$sideshowbandana-acts_as_archive;T@@ [I"sidestate;T@@ [I" sidewalk;T@@ [I" sidir;T@@ [I" sidro;T@'@ [I"siebel_donations;T@@ [I"!sierra_alpinists_studio_game;T@@ [I" siesta;T@6@ [I" sieve;T@@ [I"sieve-parser;T@@ [I" sifar;T@@ [I" siffer;T@@@ [I" sifiapi;T@l5@ [I" SIFMaker;T@E@ [I" sift;T@W@ [I" sifter;T@`@ [I"sifterology;T@`@ [I" sigame;T@'@ [I" sigar;T@@ [I" sigen;T@@ [I" sigil;T@O@ [I" sigimera;T@@ [I"sig_mongoid_spacial;T@ZB@ [I"signal_tools;T@I@ [I"signatory;T@V@ [I"signature;T@1@ [I" signauth;T@6@ [I"signed_json;T@@ [I"signed_request;T@@ [I" signer;T@@ [I" signet;T@"@ [I"significance;T@@ [I" signore;T@@@ [I" signum;T@@ [I" signupto;T@@ [I"sii_chile;T@`@ [I" sikuli;T@@ [I" sikulirc;T@'@ [I"sikuli-server;T@'@ [I"silenceable;T@@ [I"silence_log_tailer;T@'@ [I" silencer;T@x@ [I"silentale-on-rails;T@@ [I"3silent-e-activerecord-activesalesforce-adapter;T@1@ [I"silent-oracle;T@@ [I"silent-postgres;T@`@ [I"silhouette;T@O@ [I"siliconsalad-settingslogic;T@Sg@ [I" silk;T@@ [I"silk-bootstrap-rails;T@'@ [I"silk_icons;T@u@ [I"silk-rails;T@@ [I"silly_putty;T@@ [I"silly_stats;T@@ [I"sillystring;T@@ [I"silly_templates;T@"@ [I" silo;T@+@ [I"silo_manager;T@@ [I" silva;T@@ [I" silver;T@,@ [I"silverlight_player_helper;T@@ [I"silvermoon;T@@ [I"silver_spoon;T@E@ [I"silverstripe-deploy;T@@ [I" simba;T@@ [I" simhash;T@[@ [I"simianarmy-ruote-amqp;TU;[I" 0.9.21;T@ [I" similar;T@@ [I"similarity;T@,@ [I"similar_text;T@"@ [I" similie;T@@ [I" similis;T@@ [I" similus;T@@@ [I"sim_launcher;T@_@ [I" simms;T@@ [I" simon;T@`@ [I"simonmenke-globalize2;T@n@ [I"simperium;T@@ [I"simperuby;T@E@ [I" simpex;T@@@ [I" simpl;T@'@ [I" simple;T@@ [I"simple_abstract;T@`@ [I"simple-address-generator;T@@ [I"simple_admin;T@@ [I"simple_analytics;T@'@ [I"simple_api_auth;T@@ [I"simple_app_config;T@@ [I"simple_assertions;T@@ [I"simple_attachments;T@`@ [I"simple_attribute_mapper;T@E@ [I"simple_audioplayer;T@O@ [I"simple_audit;T@@ [I"simple_auth;T@@ [I"simple-auth;T@@ [I"simple-authorisation;T@@ [I"simple_autocomplete;T@@ [I"simple_aws;T@u@ [I"simple_bdd;T@E@ [I"simple_bing;T@@ [I"simple_bitbucket;T@'@ [I"simple_bitlify;T@@ [I"simple_bitly;T@@ [I"simple-bot;T@"@ [I"simple_cache;T@@ [I"simple_cacheable;T@@ [I"simple_cache_rs;T@*@ [I"simple_caches;T@'@ [I"simple_calendar;T@@@ [I"simple_captcha;T@6@ [I"simple_changelog;T@@ [I"simple-chmod;T@@ [I"simple_circuit_breaker;T@@ [I"simple_classifier;T@@ [I"simplecli;T@@ [I"simple-client;T@E@ [I""simple-cloudfront-invalidator;T@@ [I"simple_cms;T@e@ [I"simple_column_search;T@@ [I"simpleconf;T@"@ [I"simple-conf;T@@ [I"simpleconfig;T@O@ [I"simple_config;T@+@ [I"simple-config;T@@@ [I"simpleconsole;T@`@ [I"simple_countdown;T@'@ [I"simplecov;T@@ [I"simple_cov;T@@ [I"simplecov-console;T@@ [I"simplecov-csv;T@6@ [I"simplecov-gem-adapter;T@@ [I"simple_cov-html;T@@ [I"simplecov-html;T@@ [I"simplecov-jscoverage;T@E@ [I"simplecov-json;T@`@ [I"simplecov-multi;T@'@ [I"simplecov-rcov;T@@ [I"simplecov-rcov-text;T@E@ [I"#simplecov-single_file_reporter;T@E@ [I"$simplecov-sublime-ruby-coverage;T@@ [I"simplecov-summary;T@@ [I"simplecov-text;T@'@ [I"simplecov-vim;T@'@ [I"simplecrawler;T@@ [I"simple_crop;T@`@ [I"simple_crowd;T@u@ [I"simplecsv;T@+@ [I"simple_currency;T@ @ [I"simple_daemon;T@@ [I"simple-daemon;T@@@ [I"simple_datatables;T@@ [I"simple_date_scopes;T@@ [I"simple_dav;T@@ [I"simple_decorator;T@'@ [I"simple-decorator;T@@ [I"simple_delegator;T@E@ [I"simple_deploy;T@$@ [I"simple_deployer;T@6@ [I"simple_descriptor;T@@ [I"simple_document;T@@@ [I"simple_eav;T@@ [I"simpleemail;T@@ [I"simple_email_tracker;T@E@ [I"simple_enum;T@-@ [I"simple_enumerations;T@`@ [I"simple_enums;T@,@ [I"simple_etl;T@@ [I"simpleexpression;T@'@ [I"simple_facebook_connect;T@n@ [I"simple_fibonacci;T@@@ [I"simple_file_store;T@"@ [I"simple_filter;T@'@ [I"simple-flickr;T@6@ [I"simpleflow;T@'@ [I"simple-fluther;T@[@ [I"simple_form;T@z@ [I"simple_form_ext;T@E@ [I"simple_form_fancy_uploads;T@E@ [I"simple_form-jpmobile;T@'@ [I"'simple_form_with_client_validation;T@E@ [I"simple_forum;T@"@ [I"simple-fourchan;T@@@ [I"simple_fs;T@'@ [I"simple_gate;T@u @ [I"simple_gcm;T@@ [I"SimpleGCM;T@@ [I"simplegdata;T@@ [I"simplegem;T@@ [I"simple_gem;T@E@ [I"simple-gem;T@@ [I"simple_gemset;T@- @ [I"simple_generators;T@@ [I"simplegeo;T@J@ [I"simple_geocode;T@@ [I"simple_geocoder;T@@ [I"simple_geoip;T@@ [I"simple_geolocation;T@n@ [I"simplegeo-test;T@@ [I"simple-git-pair;T@@ [I"simple-graphite;T@@ [I"simple_gravatar;T@'@ [I"simple_grid;T@@ [I"simple_gui_creator;T@@ [I"simple-hasher;T@n@ [I"simple_helpers;T@@ [I"simplehttp;T@6@ [I"simple_i18n;T@E@ [I"simpleidn;T@"@ [I"simple_iif;T@'@ [I"simple-image-uploader;T@+@ [I"simple_importer;T@@ [I"simple_ipc;T@s@ [I"simplejob;T@@ [I"simple_job;T@@ [I"simple_jshint;T@'@ [I"simple-json;T@@ [I"simplekiss;T@@ [I"simple_km;T@E@ [I"simple_layout;T@@ [I"simple-layout;T@x@ [I"simple_ldap_authenticator;T@@ [I"simple_lightbox;T@g@ [I"simple_like;T@ @ [I"simple_localizer;T@@ [I"simple_lockfile;T@@ [I"simplelog;T@I@ [I"simple_logger;T@@ [I"simple-logger;T@@ [I"simple_login;T@V@ [I"simple-login;T@@ [I"simple_machine;T@@ [I"simple_mailer;T@@ [I"simple-mailer;T@'@ [I"simpleMailer;T@g@ [I"simplemapper;T@@@ [I"simple_mapper;T@'@ [I"simple_matrix;T@'@ [I"simple-measures;T@@ [I"simple_memoize;T@x@ [I"simple_menu;T@`@ [I"simple_menus;T@E@ [I"simple_metar_parser;T@'@ [I"simple_metrics;T@_@ [I"simple-metrics;T@@[I"simple_metrics_client;T@'@ [I"simple_metrics-client;T@E@ [I"simple-mmap;T@T @ [I"simple_mock;T@E@ [I"simple_model;T@@ [I"simple_model_translations;T@^@ [I"simple_money;T@@ [I"simple_monitor;T@@ [I"simple_mysql_api;T@"@ [I"simple_nav;T@'@ [I"simple_navigation;T@Q%@ [I"simple-navigation;TU;[I" 3.9.0;T@ [I" simple-navigation-bootstrap;T@"@ [I"simple-navigation-ext;T@E@ [I"simple_nested_form;T@@ [I"simple_nested_set;T@g@ [I"simplenote;T@@ [I"simple-notifier;T@`@ [I"simple_oauth;T@@ [I"simple_page;T@@ [I"simple_pager;T@'@ [I"simple-pages;T@@ [I"simple-pages-rails;T@@ [I"simple-parser;T@`@ [I"simplepass;T@@ [I"simple-password-gen;T@|@ [I"simplepay;T@I@ [I"simple_performer;T@3@ [I"simple_permissions;T@@ [I"simple_phone_number;T@g@ [I"simple_pid;T@@ [I"simple-piwik;T@M+@ [I"simple_position;T@@ [I"simple_postmark;T@@ [I"simple_postmark18;T@@ [I"simple_presenter;T@6@ [I"simple_progressbar;T@6@ [I"simple_publisher;T@`@ [I"simple_qs;T@!@ [I"simple_query_tool;T@@ [I"simple_queues;T@@ [I" simpler;T@@ [I"simple-rack-bouncer;T@@ [I"simple-rack-logger;T@@ [I"simple-rails-deploy;T@[ @ [I"simple-random;T@@ [I"simple_range_validator;T@@ [I"simplerdb;T@!@ [I"simple_recaptcha;T@'@ [I"simple_record;T@ @ [I"simple_redis_cache;T@E@ [I"simple-redis-server;T@'@ [I"simple_redis_store;T@'@ [I"simple_relevance;T@'@ [I"simple_resource;T@@ [I"simple_resque;T@@ [I"simple_rest;T@@ [I"!simple_restricted_attributes;T@@ [I"simple_roles;T@V@ [I"simple_rotate;T@E@ [I"simple_router;TU;[I" 0.9.8.1;T@ [I"simple-rss;T@@ [I"simpler-tiles;T@"@ [I"simple-ruby;T@'@ [I"simple_ruby_gui;T@@ [I"simpler_workflow;T@@ [I" simples3;T@'@ [I"simple_s3;T@@ [I"simple-s3;T@@ [I"simple_schema;T@n@ [I"simple-scm;T@@ [I"simple_scrobbler;T@@@ [I"simple_sdk_builder;T@@ [I"simple_search;T@`@ [I"simple-search;T@@ [I"SimpleSearch;T@@ [I"simple_search_like;T@@ [I"simple_selector;T@'@ [I"simplesem;T@+@ [I"simple_sentiment;T@'@ [I"simpleserve;T@@ [I"simple_server;T@'@ [I"simple_shell;T@@ [I"simple_show;T@@ [I"simple_show_helper;T@@ [I"simple_similarity;T@'@ [I"simple_site;T@@ [I"simple_sitemap;T@@@ [I"simple_slugs;T@V@ [I"simplesnippets;T@"@ [I"simple_socket;T@`@ [I"simple_soft_delete;T@'@ [I"simple_solr;T@X@ [I"simple-spawn;T@`@ [I"simple-spreadsheet;T@`@ [I"!simple-spreadsheet-extractor;T@*@ [I"simple_ssh;T@E@ [I"simple_ssi;T@"@ [I" simplest;T@`@ [I"simple_stack;T@^]@ [I"simple_state_machine;T@@ [I"simple_states;T@`@ [I"simple_statistics;T@@ [I"simple-statistics;T@@ [I"simplestats;T@@ [I"simple_stats;T@@ [I"simplest_auth;T@@ [I"simple_store;T@'@ [I"simple_struct;T@"@ [I"simple_style_sheet;T@@ [I"simplesync;T@E@ [I"simple_table;T@L=@ [I"simple_tag;T@'@ [I"simple_tags;T@@ [I"simple_temperature;T@@ [I"simple_template;T@'@ [I"simple-templater;T@@ [I"simple_tesseract;T@@ [I"simple_test_runner;T@7@ [I"simple-thread-pool;T@'@ [I"simple-tidy;T@`@ [I"simpleton;T@X@ [I"simpleton_string_extend;T@'@ [I"simple-tooltip;T@E@ [I"SimpleTrace;T@'@ [I"simple-tracer;T@!@ [I"simple_transitions;T@'@ [I"simple_tree;T@@ [I"simple_tumblr;T@@ [I"simple-twilio;T@@ [I"simple-unix-users;T@'@ [I"simple_update_field;T@C@ [I"simple_upnp;T@E@ [I"simple-useragent;T@@ [I"simple_user_auth;T@@ [I"simple_uuid;T@@ [I"simple_validation;T@|@ [I"simplevcf;T@@ [I"simple_versioning;T@H@ [I"simple_view;T@E@ [I"simple-view;T@6@ [I"simple_view_helpers;T@E@ [I"simplevoc-open;T@e@ [I"simple_weather;T@1@ [I"simple_wiimote;T@@ [I"simple_worker;T@@ [I"simple_workflow;T@@ [I"simple_work_queue;T@e@ [I" simplews;T@ @ [I"simplexls;T@@ [I"simple-xls;T@`@ [I"simple_xlsx_writer;T@J@ [I"simple-xml;T@@ [I"simple_xurrency;T@x@ [I"simple_youtube;T@@ [I"simplificator-activist;T@"@ [I" simplificator-billboard-api;T@e@ [I"simplificator-conversions;T@@ [I"simplificator-fsm;T@@ [I"simplificator-ruby-kiva;T@@ [I"simplificator-rwebthumb;T@@ [I"simplificator-withings;T@$@ [I"simplifyapi;T@'@ [I"simplvisor;T@@ [I" simply;T@@ [I"simply_configurable;T@@ [I" simplydb;T@@ [I"simply_edit;T@'@ [I"simply_load;T@@ [I"simply_messages;T@`@ [I"simply_mongo;T@@ [I"simply_stated;T@@ [I"simply_stored;T@^%@ [I"simply_stored_scaffold;T@@ [I"simply_useful;T@@ [I"simply_versioned;T@>@ [I" simplyx;T@@ [I" simredis;T@@ [I" simrpc;T@R @ [I" simsen;T@'@ [I" simsim;T@6@ [I" simttf;T@'@ [I"simultaneous;T@@ [I"sin;T@@ [I" sina;T@@@ [I"sina_focus;T@'@ [I" sinagen;T@@@ [I" sinatra;T@ @ [I"sinatra-accept-params;T@@ [I""sinatra-accept-params-d1plo1d;T@`@ [I"sinatra-activerecord;T@u@ [I"sinatra_ad_auth;TU;[I"0.25.20120401;T@ [I"sinatra-advanced-routes;T@@ [I"sinatra-any;T@@ [I"sinatra-api-docs;T@`@ [I"sinatra_app_gen;T@@ [I"sinatra-arg;T@'@ [I"sinatra-assetpack;T@@ [I"+sinatra-assetpack-flexible-compression;T@'@ [I"sinatra-assets;T@`@ [I"sinatra-asset-snack;T@'@ [I"sinatra-asterisk;T@@ [I"sinatra-auth;T@@ [I"sinatra-authentication;T@@ [I"!sinatra-authentication-dmeiz;T@@ [I"sinatra-authentication-erb;T@'@ [I"#sinatra-authentication-gogolok;T@@ [I"#sinatra-authentication-nedludd;T@'@ [I" sinatra-authentication-oran;T@[@ [I"sinatra_auth_github;T@&@ [I"sinatra_auth_gmail;T@`@ [I"sinatra-authorization;T@@ [I"sinatra-authorize;T@E@ [I"sinatra_autoload;T@E@ [I"sinatra-auto-reload;T@@ [I"sinatraband;T@1@ [I"sinatra-base;T@@ [I"sinatra-basicauth;T@'@ [I"sinatra-basic-auth;T@@ [I"sinatra-block-html;T@"@ [I"sinatra-blog;T@@ [I"sinatra_bootstrap;T@@ [I"sinatra-browserid;T@[ @ [I"sinatra-bundles;T@J@ [I"sinatra-cache;T@@ [I"sinatra-cache-assets;T@@ [I"sinatra-cacher;T@@ [I"sinatra-can;T@!@ [I"sinatra-captcha;T@_1@ [I"sinatra-cas;T@`@ [I"sinatra-cell;T@`@ [I"sinatra-charter;T@1@ [I"sinatra-coffee;T@@ [I"sinatra-cometio;T@@ [I"sinatra-compass;T@@ [I"sinatra-config-file;T@@ [I"sinatra-content-for;T@@ [I"sinatra-content-for2;T@[ @ [I"sinatra-contrib;T@@ [I"sinatra-controllers;T@@ [I"sinatra-cookie_thief;T@`@ [I"sinatra-croon;T@@ [I"sinatra-cross_origin;T@@ [I"sinatra-css;T@|@ [I"sinatra_cyclist;T@E@ [I"sinatra-dalli;T@@ [I"sinatra_debug_console;T@@ [I"sinatra-default_charset;T@@ [I"sinatra-default-templates;T@@ [I"sinatra-diet;T@@ [I"sinatra-diskcache;T@@ [I"sinatra-ditties;T@E@ [I"sinatra-dm;T@+@ [I"sinatra-dm-auth;T@'@ [I"sinatra-doc;T@@ [I"sinatra-documentation;T@E@ [I"sinatra-doorman;T@@ [I"sinatra-editable;T@@ [I"sinatra-effigy;T@@ [I"sinatra-ember;T@E@ [I"sinatra-env;T@E@ [I"sinatra-erb;T@@ [I"sinatra-example;T@@ [I"sinatra-exceptional;T@'@ [I"sinatra-extension;T@@ [I"$sinatra-facebook-signed-request;T@@ [I"sinatra_fake_webservice;T@e@ [I"sinatra_fedora;T@@ [I"sinatra-filler;T@@ [I"!sinatra-filtering_parameters;T@@ [I"sinatra-flash;T@@ [I"sinatra-flash-nicer;T@@ [I"sinatra-formhelpers;T@x@ [I"sinatra-formkeeper;T@@ [I"sinatra-geckoboard;T@6@ [I"sinatragen;T@'@ [I"sinatra-gen;T@@ [I"sinatra-geoloqi;T@@ [I"sinatra-ghetto_i18n;T@@ [I"sinatra-google-auth;T@@ [I"sinatra-graph;T@6@ [I"sinatra-group-items;T@'@ [I"sinatra-haml;T@`@ [I"sinatra-handlebars;T@"@ [I"sinatra-hashfix;T@@ [I"sinatra-has_scope;T@@ [I"sinatra-hat;T@@ [I"sinatra-head;T@@@ [I"sinatra-helpers;T@@ [I"sinatra-i18n;T@@ [I"sinatra-ie6nomore;T@6@ [I"sinatra-index;T@E@ [I"sinatra-indextank;T@@ [I"sinatra-initializers;T@+@ [I"sinatra-iphone-views;T@@ [I"sinatra-js;T@|@ [I"sinatra-jsend;T@@ [I"sinatra-jsonapi;T@@ [I"sinatra-jsonp;T@@ [I"sinatra-linkeddata;T@@ [I"sinatra-linkedin;T@'@ [I"sinatralli;T@@ [I"sinatra-logentries;T@'@ [I"sinatra-logger;T@`@ [I"sinatra-mapper;T@@ [I"sinatra-mapping;T@N@ [I"sinatra-maruku;TU;[I" 1.0.0.2;T@ [I"sinatra-memcache;T@`@ [I"sinatra-minify;T@@ [I"sinatra_mobile;T@'@ [I"sinatra-mobile-adsense;T@`@ [I"sinatra-mongo;T@@ [I"sinatra-mongo-config;T@'@ [I"sinatra-mongoid;T@E@ [I"sinatra-mongoid-config;T@`@ [I"sinatra-mongomapper;T@@ [I"sinatra-mongomatic;T@@ [I"sinatra_more;TU;[I" 0.3.43;T@ [I"sinatra-more-server;T@@ [I"sinatra-mustache;T@@ [I"sinatra-muster;T@'@ [I"sinatra-mvc;T@"@ [I"sinatra-named_routes;T@@ [I"sinatra-named-routes;T@`@ [I"sinatra-namespace;T@@ [I"sinatra_omniauth;T@N@ [I"sinatra-opencaptcha;T@@ [I"sinatra-outputbuffer;T@@ [I"sinatra-packrat;T@I@ [I"sinatra-pages;T@@ [I"sinatra-pagin;T@@ [I"sinatra-paginate;T@@ [I"sinatra-param;T@`@ [I"sinatra-partial;T@x@ [I"sinatra-path;T@@ [I"sinatra-r18n;T@;@ [I"sinatra-rabbit;T@;@ [I"sinatra_rake_tasks;T@@ [I"sinatra-rdiscount;TU;[I" 1.0.0.6;T@ [I" sinatra-redirect-with-flash;T@@ [I"sinatra-redis;T@@ [I"sinatra-redis-auth;T@`@ [I"sinatra-reloader;T@@ [I"sinatra-request-logger;T@I@ [I"sinatra_resource;TU;[I" 0.4.24;T@ [I"sinatra-resources;T@@@ [I"sinatra-responder;T@'@ [I"sinatra_respond_to;T@@ [I"sinatra-respond_to;T@@ [I"sinatra-rest;T@@ [I"sinatra-rest-addons;T@@ [I"sinatra-rest-helpers;T@@ [I"sinatra-route-group;T@@ [I"sinatra-route-mapper;T@'@ [I"sinatra-router;T@@ [I"sinatra-routes;T@`@ [I"sinatra-s3;T@q@ [I"sinatra-sammy;T@'@ [I"sinatra-scope;T@6@ [I"sinatra-scopes;T@@ [I"sinatra-security;T@@ [I"sinatra-seo;T@@ [I"sinatra-sequel;T@- @ [I"sinatra-session;T@@ [I"sinatra-session-auth;T@`@ [I"sinatra-sessionography;T@`@ [I"sinatra-settings;T@@@ [I"sinatras-hat;T@@@ [I"sinatra-shopify;T@@ [I"sinatra-simple-assets;T@@ [I"sinatra-simple-auth;T@@ [I""sinatra-simple-authentication;T@@ [I"sinatra-simple-navigation;TU;[I" 3.5.1;T@ [I"sinatra-simple-rdiscount;T@'@ [I"sinatra-snap;T@@ [I"sinatra-spec;T@@ [I"sinatra-sprockets;T@E@ [I"sinatra-sprockets-ext;T@@ [I"sinatra-sse;T@@ [I"sinatra-static;T@`@ [I"sinatra-static-assets;T@@ [I"sinatra-static-bp;T@@ [I"sinatra-statsd-helper;T@!@ [I"sinatra-subdomain;T@@@ [I"sinatra-subroutes;T@'@ [I"sinatra-sugar;T@@ [I"sinatra-support;T@@ [I"sinatra-symphony;T@@ [I"sinatra-synchrony;T@@ [I"sinatra-tag-helper;T@@ [I"sinatra-tags;T@`@ [I"sinatra-template;T@@ [I"sinatra-test-helper;T@@ [I"sinatra-tests;T@1@ [I"sinatra-thumbnails;T@@ [I"sinatra-tinycache;T@6@ [I"sinatra-torrent;T@@ [I"sinatra-trails;T@n@ [I"sinatra-twilio;T@@ [I"sinatra-twitter-bootstrap;T@@ [I"sinatra-twitter-oauth;T@@ [I"sinatra-url;T@'@ [I"sinatra-verbs;T@@ [I"sinatra-view_helpers;T@+@ [I"sinatra-views;T@@ [I"sinatra_warden;T@@ [I"sinatra-wardrobe;T@@ [I"sinatra-websocket;T@@ [I"sinatra_with_assets;T@E@ [I"sinatra_wms;T@`@ [I"sinatra-xsendfile;T@x@ [I"sinatra-xslview;T@`@ [I"sinatrify;T@'@ [I" sinbad;T@"@ [I" sinbook;T@g@ [I" sindex;T@+@ [I"sinefunc-rstakeout;T@E@ [I" sinew;T@@ [I" sinfile;T@`@ [I" sing;T@E@ [I" singem;T@@ [I"singhtomar;T@@ [I"single_instance;T@@ [I"single_running_checker;T@@ [I"singleserving;T@@ [I"single_test;T@@ [I"singleton_act;T@@ [I"singularity;T@E@ [I"singularitygs;T@@ [I"sinmetrics;T@@ [I"sinon-chai-rails;T@@ [I"sinonjs-rails;T@'@ [I"sinon-rails;T@@ [I" sinotify;T@E@ [I" sinsk;T@@ [I"sip;T@@ [I" sipatra;T@@ [I" sipgate;T@@@ [I" siphre;T@'@ [I" Sipper;T@;@ [I"sir_cachealot;T@@ [I"SirCachealot;T@@ [I" siren;T@@ [I" siret;T@@ [I" siri_cal;T@'@ [I"siriproxy-appcontroller;T@@ [I"siriproxy-facebookstatus;T@@ [I"siriproxy-hue;T@'@ [I"siriproxy-iJokes;T@@ [I"siriproxy-nextbus;T@'@ [I"!siriproxypm-clientstatecache;T@"@ [I"siriproxypm-honey;T@"@ [I"siriproxy-samsungremote;T@6@ [I"SiriProxy-SamsungRemote;T@@ [I"siriproxy-sancho;T@'@ [I"siri_says;T@E@ [I"sirius-client;T@R@ [I"sirportly;T@N'@ [I"sir-sync-a-lot;T@'@ [I"sir_tracks_alot;T@@ [I"sir-trevor-rails;T@@ [I" sisal;T@'@ [I"sisal-timwe;T@E@ [I"siscop_gem;T@'@ [I"sishen-hbase-ruby;T@@ [I"sishen-language_detector;T@@ [I"sishen-rtranslate;T@@ [I" siskel;T@@ [I" sisow;T@@ [I"sisow_ideal;T@@ [I" sistrix;T@@ [I"sisyphus-rails;T@"@ [I" site;T@H@ [I"sitebuilder;T@@ [I"site_checker;T@@ [I" sitefuel;T@@ [I"site_generator;T@6@ [I"site_logic;TU;[I" 1.9.13;T@ [I" sitemap;T@@ [I" site_map;T@@ [I" SiteMap;T@@ [I"sitemap_builder;T@@ [I"sitemap-builder;T@@ [I"sitemap_checker;T@@ [I"sitemap_generator;T@@ [I"sitemap_maker;T@"@ [I"sitemap_notifier;T@"@ [I"sitemapper;T@@ [I"sitemap_ping;T@'@ [I" sitemaps;T@@ [I"sitemap_treemaker;T@@ [I"site_meta;T@@ [I"site_navigator;T@@ [I" sitepack;T@6@ [I"site_prism;T@@ [I"site_search;T@@ [I"site-skel;T@+@ [I"sitethree;T@@ [I"site_tree;T@'@ [I"site_validator;T@@ [I" sitges;T@I@ [I"siuying-gitdocs;T@@ [I"siuying-kindle-highlights;T@V@ [I"!siwilkins-responds_to_parent;TU;[I"1.0.20121128;T@ [I"six;T@@ [I" six45;T@"@ [I" sixarma;T@@ [I"sixarma-bt;T@@ [I"six-arma-builder;T@@ [I"six-arma-tools;T@@ [I"#sixarm_ruby_active_record_mock;T@*@ [I"sixarm_ruby_alpha_bravo;T@@ [I"sixarm_ruby_array_slice;T@i6@ [I"sixarm_ruby_commander;T@@ [I"sixarm_ruby_current_user;T@*@ [I" sixarm_ruby_current_user_id;T@@ [I"sixarm_ruby_date_age;T@@ [I"sixarm_ruby_date_stamp;T@@ [I"sixarm_ruby_defining;T@@ [I")sixarm_ruby_email_address_validation;T@O@ [I" sixarm_ruby_geocode_address;T@@ [I"sixarm_ruby_hash_more;T@@ [I""sixarm_ruby_http_status_codes;T@@ [I""sixarm_ruby_magic_number_type;T@O@ [I" sixarm_ruby_math_statistics;T@N@ [I"sixarm_ruby_metric_names;T@@ [I"(sixarm_ruby_numeric_floor_precision;T@@ [I" sixarm_ruby_numeric_percent;T@@ [I"sixarm_ruby_numeric_round;T@@ [I"#sixarm_ruby_password_attribute;T@ @ [I"sixarm_ruby_password_hash;T@@ [I"sixarm_ruby_password_salt;T@@ [I"sixarm_ruby_password_text;T@@ [I""sixarm_ruby_pathname_dirnames;T@@ [I"sixarm_ruby_person_name;T@@ [I"sixarm_ruby_ramp;T@@ [I"sixarm_ruby_range_parse;T@@ [I"sixarm_ruby_rexml;T@@ [I"/sixarm_ruby_rexml_element_new_with_options;T@N@ [I"sixarm_ruby_secure_random;T@u@ [I"sixarm_ruby_secure_token;T@@ [I" sixarm_ruby_string_to_class;T@@ [I"sixarm_ruby_time_stamp;T@x@ [I"sixarm_ruby_time_terse;T@@ [I"sixarm_ruby_to_id;T@@ [I"sixarm_ruby_unaccent;T@@ [I"sixarm_ruby_uspto;T@@ [I"sixarm_ruby_week;T@@ [I"sixarm_ruby_xml_load;T@@ [I"sixarm_ruby_xml_strip;T@@ [I",sixarm_ruby_yaml_load_documents_globber;T@@ [I" sixcore;T@@ [I" sixhour;T@@ [I"six-launcher;T@I@ [I" sixpack;T@x@ [I"six-rsync;T@@ [I" six-uac;T@|@ [I"six-updater;T@)@y;[@IQU;[I" 0.22.5;T@ [@IQ@KQ@[@IQ@KQ@ [I"six-updater-web;TU;[I" 0.24.15;T@ [I"siyelo-blogify;T@I@ [I"siyelo-flare;T@+@ [I"siyelo-tweetify;T@|@ [I" sizes;T@@ [I"sjunkieex;T@`@ [I" skab;T@@ [I"skalar-bluepill;TU;[I" 0.0.60.1;T@ [I"skalee-thinking-sphinx;TU;[I" 1.3.14.2;T@ [I" sk-api;T@@ [I"sk_api_schema;T@@ [I" skates;T@@ [I"skating-system;T@`@ [I" sk_calc;T@@ [I" skeema;T@E@ [I" skeeter;T@@ [I" skele;T@I@ [I" skelerl;T@@ [I" skeletal;T@'@ [I" skeleti;T@`@ [I" skeleton;T@'@ [I"skeleton_creator;T@x@ [I"skeleton_rails;T@|@ [I"skeleton-rails;T@E@ [I" skeletor;T@- @ [I" skema;T@@ [I" skeme;T@@ [I" skeptic;T@@ [I" sketch;T@"@ [I" sketches;T@`@ [I"sketchup_json;T@`@ [I" skewer;T@`@ [I" sk-hoth;T@@ [I"Skibideebop;T@@ [I" skiima;TU;[I" 0.1.000;T@ [I" skim;T@@ [I"skimlinks;T@@ [I" skink;T@@ [I" skinny;T@@ [I"skinnycms_tumblr;T@E@ [I"skinny_daemon_example;T@'@ [I"skinny_jeans;T@Q@ [I"skinny-jeans;T@@ [I" skip_activerecord_callbacks;T@@@ [I"skip_database;T@@ [I" skiplist;T@E@ [I"skippy-authlogic;T@@ [I"skitter-rails;T@'@ [I" skittles;T@@ [I" skkhub;T@@ [I" skles;T@@ [I"sklik-api;T@@ [I" skooby;T@'@ [I" sk_sdk;T@I@ [I" skullet;T@'@ [I" skvs;T@"@ [I"sky;T@@ [I" skydb;T@@ [I"sky-debug;T@@@ [I" skyframe;T@@ [I"skylinecms;T@@ [I" skynet;T@@ [I"skynet-core;T@n@ [I"skynet-deploy;T@@ [I"skype_api;T@@ [I"skype_archive;T@@ [I"skype-history-import;T@O@ [I" skypekit;T@E@ [I"skype_lock_logout;T@'@ [I" skypemac;T@'@ [I" skyper;T@@ [I" SkypeR;T@@ [I"skyrocket;T@@ [I" skyron;T@"@ [I" skyruby;T@@ [I"skyscraper;T@@ [I" skywatch;T@'@ [I" slab;T@@ [I" slacker;T@@ [I"slack-utils;T@!@ [I"slainer68_vimeo;T@@ [I"slainer68_youtube_it;T@ @ [I" slanger;T@@ [I" slapchop;T@'@ [I" slapshot;T@@ [I" slash;T@"@ [I"slashjoin;T@E@ [I"slashport;TU;[I" 0.15.12;T@ [I" slate;T@@ [I" slave;T@@ [I" slavery;T@@ [I"slaxor-chronic;T@@ [I"slayer-authlogic_rpx;T@@ [I"slayer-rpx_now;TU;[I" 0.6.25;T@ [I"slayer-surpass;T@@ [I"slayer-thrift;T@X@ [I"slayer-twilio;T@ @ [I" sldb;T@@ [I" sleep;T@!@ [I" sleeper;T@@ [I"sleeping-wolf;T@'@ [I"sleepsort;T@E@ [I" sleepy;T@1@ [I"sleepy_penguin;T@@ [I"sleipnir-api;T@@ [I"slender_t;T@+@ [I" sleuth;T@@ [I" slf4j;TU;[I" 1.5.6.3;T@ [@9R@@@[I"slf4j-jars;T@Q@[I" slf4r;T@@ [I"slicecraft;T@@@ [I"slicehost;T@@ [I"slicehost-tools;TU;[I" 0.0.13.1;T@ [I"slick-buttons;T@@ [I" slicker;T@@ [I"slickgrid-rails;T@@ [I"slick_map_css-rails;T@`@ [I" slickrun;T@'@ [I" slicks;T@'@ [I"slidedown;T@@ [I"slide-em-up;T@@ [I" slider;T@!@ [I" slides;T@ @ [I"slideshare;T@@ [I"slide_share;T@@ [I"slideshare-api;T@'@ [I"slideshare_integration;T@'@ [I"slideshare_ruby;T@E@ [I"slideshift;T@E@ [I"slideshift-static;T@'@ [I"slideshow;T@@ [I"slideshowpro;T@n@ [I"sliding-stats;T@^@ [I"slight_assets;T@x@ [I"slightcms;T@|@ [I" slim;T@@ [I"slim_assets;T@E@ [I"slim-attributes;T@@ [I"slim_breadcrumb;T@E@ [I" slimdx;TU;[I"4.0.10.43;T@ [I" slime;T@@ [I"slim_fast;T@'@ [I" slimgems;TU;[I" 1.3.9.5;T@ [I" slimmer;TU;[I" 3.10.0;T@ [I"slim_migrations;T@n>@ [I"slim-rails;T@@ [I"slim_scrooge;T@@ [I"slim-server;T@'@ [I" SlimTest;TU;[I" 4.6.1.1;T@ [I"slimtimer4r;T@,@ [I"slimtimercli;T@@ [I"SlimZenTest;TU;[I" 4.6.2;T@ [I"slingshot;T@x@ [I"slingshot-rb;T@@ [I" slinky;T@X@ [I" slipmate;T@I@ [I" slippers;T@@ [I"slippyd-colorist;T@@ [I" slither;T@^@ [I"slither-ruby19;TU;[I" 0.99.3;T@ [I"slo;T@@ [I" slobr;T@!@ [I" slo-db;T@'@ [I" slogger;T@@ [I" sloop;T@@ [I" slop;T@@ [I"slope_one;T@`@ [I" sloth;T@@ [I"slot_machine;T@@ [I" slotter;T@@ [I" slo-twit;T@'@ [I" slouch;T@'@ [I" slovom;T@!@ [I" slow;T@@ [I"slow-actions;T@@ [I"slowgrowl;T@6@ [I"slowhandcuke;T@@ [I" slowweb;T@`@ [I"sls_rspec_matchers;T@'@ [I" slubydoo;T@*@ [I" slug;T@@ [I" slugable;T@E@ [I"slugalicious;T@O@ [I"slug-engine;T@@ [I"sluggable;T@`@ [I"sluggable_finder;T@ @ [I" slugged;T@@ [I" slugger;T@@ [I"sluggerize;T@@ [I" sluggify;T@E@ [I" Sluggish;T@'@ [I" sluggy;T@@@ [I" slugify;T@W@ [I" slugit;T@E@ [I" slugize;T@@ [I" slugly;T@"@ [I" slugoid;T@@ [I"slugorize;T@E@ [I"slugtastic;T@@ [I" sluice;T@@ [I" slurp;T@@ [I" slurpee;T@@ [I" slurper;T@@ [I" slurry;T@@ [I" slushy;T@6@ [I" slydell;T@'@ [I"slyphon-git-utils;T@E@ [I"slyphon-log4j;TU;[I" 1.2.15;T@ [I"slyphon-transocks_em;T@'@ [I"slyphon-zookeeper;T@@ [@!S@@[I"slyphon-zookeeper_jar;TU;[I" 3.3.5;T@ [@$S@%S@[I"sm2;T@'@ [I" smack;T@@ [I" smackr;T@E@*[I" smagacor;T@E@ [I" smail;T@n@ [I" smailer;T@@ [I"smail-mime;T@n@ [I" smailr;T@Y@ [I" small;T@@ [I"smallcage;T@@ [I"small-potatos;T@E@ [I"small_wonder;T@g@ [I" smappy;T@"@ [I" smarbs;T@@ [I" smarta;T@R @ [I"smart_asana;T@E@ [I"smart_ass;T@@ [I"smart_asset;T@VK@ [I"smart_cache;T@'@ [I"smartcall;T@"@ [I"smart_capcha;T@@@ [I"smartcard;T@@[@TS@LN@[@TS@u @ [I"smart_chart;T@@ [I"smart_colored;T@@ [I"smart_cookie_store;T@@ [I"smartcropper;T@@ [I"smart_csv;T@E@ [I" smartdc;T@@ [I"smart_devnet;T@V@ [I"smart_devnet_lite;T@@ [I"smartdict;T@@ [I"smartdict-core;T@+@ [I"smartdict-gtk;T@+@ [I"smartdict-icons;T@'@ [I"smartdiff;T@@ [I"smart_editor;T@@ [I"smart_env;T@O@ [I"smarter_csv;T@@ [I"smarter_dates;TU;[I" 0.2.7.14;T@ [I"smartermeter;T@@ [I"smarter_paperclip;T@@ [I"smart_field_constraints;T@@@ [I"smart_filter;T@`@ [I"smart_filters;T@'@ [I" smartfm;T@@ [I" smartfox;T@x@ [I" smartgen;T@@ [I"smartgen_action_view;T@E@ [I"smartgen_erb;T@@ [I"smartgen_syntaxhighlighter;T@@ [I"smartguard;T@@ [I"smart_hash;T@`@ [I"smartimage;T@"@ [@S@"@[I"smart_logger;T@`@ [I"smart-meta;T@@ [I"smart_model;T@@ [I"smart_month;T@@ [I"smartname;T@@ [I"smart_properties;T@@ [I"smartscope;T@E@ [I"smartsender;T@'@ [I"smartstart;T@|@ [I"smartthumbs;T@@ [I"smart_time;T@@ [I"smart_time_ago;T@`@ [I"smart_titles;T@@ [I"smart_translitter;T@'@ [I"smart_tuple;T@@@ [I"smartware;T@@ [I" smarty;T@@ [I" smash;T@'@ [I"smashing-layout;T@@ [I" smc-get;T@@ [I" smeagol;T@@ [I" smeargle;T@@ [I"sme-configdb;T@@ [I" smeg2;T@'@ [I" smesser;T@E@ [I"sme_storage;T@E@ [I"smf;T@ R@ [I" smfbot;T@@ [I"smg;T@@ [I" smi-ffi;T@@ [I" smile;T@"@ [I"smile_me_please;T@'@ [I"smile-xml;T@@[@S@@ [I" smiley;T@'@ [I" smiling;T@'@ [I" smilodon;T@@ [I"smira-memcache-lock;T@@ [I" smirc;T@'@ [I" smirk;T@@ [I" smith;TU;[I" 0.5.13.1;T@ [I" smithy;T@'@ [I"sml-flickr;T@G @ [I"sml-rubber;T@@ [I"sml-twitter;T@n@ [I" smog;T@"@ [I" smoke;TU;[I" 0.5.20;T@ [I"smokegraphy;T@@ [I" smokeit;T@@ [I"smoke_monster;T@@ [I"smoke-rack;T@"@ [I"smokesignal;T@|@ [I"smoke_signals;T@- @ [I"smokey_bear;T@@ [I" smooch;T@|@ [I" smoodit;T@E@ [I" smooth;T@@ [I"#smooth-jazz-nyan-cat-formatter;T@`@ [I"smooth_s3;T@@ [I"smparkes-envjs;T@3@ [I"smparkes-eventmachine;TU;[I"0.12.10.3;T@ [I"smparkes-jazrb;T@3@ [I"smparkes-johnson;TU;[I" 1.1.2.6;T@ [I"smparkes-watchr;TU;[I" 0.5.7.8;T@ [I" smpdtfmt;T@'@[@(T@'@ [I"smpp_encoding;T@`@ [I"smq;T@@ [I" smql;T@n@ [I"sms;T@@ [I"SMS;T@E@ [I"sms16client;T@@ [I" sms24x7;T@@ [I" SmsAPI;T@'@ [I"sms_auth-twilio;T@'@ [I" sms_bao;T@'@ [I" smsc;T@@ [I"smscenter;T@@ [I"sms-client;T@"@ [I"smsc_manager;T@@ [I"smsforall;T@`@ [I" sms_fu;T@x@ [I"sms_gateway;T@@ [I"smsgh_sms;T@@ [I"smsglobal;T@@ [I"smshelper;T@4@ [I" smshuman;T@`@ [I" smsified;T@@ [I" smsim;T@+@ [I"smsinabox;T@@ [I"sms_my_bus;T@'@ [I" smsnger;T@@ [I"smsonrails;T@@@ [I" smspilot;T@"@ [I"smspromote;T@n@ [I" sms-rb;T@'@ [I" sms_ru;T@@ [I" smsRuby;T@@ [I"sms_sender;T@"@ [I" sms-spec;T@1@ [I"smstrade_de;T@'@ [I"smstraderb;T@@ [I"sms_xchange;T@@ [I" smtlaissezfaire-betabuilder;TU;[I" 0.7.4.2;T@ [I"smtpcom_api;T@'@ [I" smtpd;T@@ [I" smtp_tls;T@@ [I" smtp_url;T@@ [I"smtp_with_gmail;T@@ [I"smtp-xoauth;T@@ [I"smt_rails;T@,@ [I"sm-transcript;T@@ [I" smugmug;T@'@ [I"smugmugapi;T@ @ [I" smugmugr;T@@ [I" smugsync;T@[ @ [I"smulube-activemerchant;TU;[I" 1.7.1.5;T@ [I"smulube-notifo;T@`@ [I" smurf;T@@ [I"smurf-huacnlee;T@W@ [I"smurf-rails;T@@ [I"smurfville;T@@ [I" smusher;T@`@ [I" smushkid;T@@ [I"smweb-foreigner;T@!@ [I" snack;T@@ [I"snackpack;T@@ [I" snafu;T@@ [I" snail;T@X@ [I" snailgun;T@@ [I"snailgun-rr;TU;[I" 1.1.1.5;T@ [I"snailmail;T@+@ [I"snail-map-reduce;T@"@ [I"snakeeyes;T@@ [I"snake_eyes;T@6@ [I" snap;T@+@ [I"snapimage;T@`@ [I" snapmon;T@@ [I" snapp;T@'@ [I" snapper;T@E@ [I" snappy;T@"@ [I"snappycode-shadow_puppet;T@@ [I"snappy_ext;T@@@ [I"snappy_ffi;T@@@ [I"snapshot_reload;T@@ [I"snapshot-ruby;T@@ [I"snapshots;T@"@ [I"snapshot_tree;T@'@ [I" snapurl;T@@ [I" snarl;T@@ [I"snarl-snp;T@@ [I" snatch;T@@ [I" snatchdb;T@@ [I"snaury-soap4r;T@@ [I" sndacs;T@,@ [I" sndfile;T@6@ [I" sndr;T@'@ [I" sneak;T@@ [I"sneakin-refinerycms-news;T@@ [I"sneaky-save;T@@ [I" snfn;T@@ [I" sniff;T@@ [I" sniffles;T@+@ [I" snip;T@@ [I"snipcheat;T@@ [I" snipper;T@n@ [I" snippet;T@E@ [I"snippetem;T@'@ [I"snippetize;T@@ [I" snippets;T@'@ [I"snippets_converter;T@+@ [I" snippits;T@@ [I" snipplr;T@@ [I" snippr;T@o@ [I"snip-snap;T@+@ [I" snitch;T@+@ [I" snmp;T@@ [I" snmp4em;T@@ [I" SNMP4JR;T@L=@ [@U@@[I"snmpdumper;T@"@ [I" snmpscan;T@@ [I"snmpstats;T@@ [I" snmptop;T@'@ [I"snogmetrics;T@g@ [I" snoo;T@`@ [I" snooby;T@|@ [I" snoopy;T@E@ [I"snooze_force;T@@ [I" snort;T@@ [I" snortor;T@'@ [I"snort-rule;T@@ [I" snowday;T@6@ [I"snowfinch-collector;T@@ [I"snowflake;T@'@ [I"snowleopard-ncurses;T@u"@ [I"snowman_meltdown;T@@ [I"snp-search;T@ @ [I"sns_endpoint;T@@ [I" sntr;T@E@ [I" snuggie;T@@ [I" so2db;T@@ [I" soap4r;T@ @ [I"soap4r-middleware;T@&@ [I"soap4r-middleware-192;T@@ [I"soap4r-r19;T@@ [I"soap4r-ruby19;T@@ [I"soap4r-ruby1.9;T@@ [I"soap4r-sgonyea;T@ @ [I"soap4r-spox;T@ @ [I"soap4r-straightjacket;T@@ [I" soap5r;T@+@ [I" soapbox;T@@ [I" soapex;T@@ [I" soap-lc;T@@ [I" soap-wss;T@@ [I" soauth;T@!@ [I"sobakasu-image_science;T@@ [I"soba-mieruka;T@"@ [I" soca;T@@ [I" sociable;T@@ [I" social;T@@ [I" so_cial;T@"@ [I"social2social;T@@ [I"social-avatar-proxy;T@@ [I"social-bee;T@"@ [I"social_butterfly;T@"@ [I"social_buttons;T@`@ [I"social-buttons;T@@ [I"socialcast;T@N@ [I"socialcast-api;T@E@ [I"socialcast-git-extensions;T@1.@ [I" socialcast_ldap_integration;TU;[I" 1.1.21;T@ [I"socialcast-net-ldap;T@1@ [I"socialcast-opengraph;T@@ [I"socialcastr;T@W.@ [I"socialcast_shoulda_ext;T@+@ [I"social_cheesecake;T@@ [I"social_cleaner;T@"@ [I"social_connections;T@L=@ [I"socialcount;T@@ [I"social_current;T@@ [I"social_engine;T@'@ [I"social-experiment;T@'@ [I"social_feed;T@'@ [I"social_graph;T@'@ [I"social_icons;T@@ [I"socialinfo;T@E@ [I"socialization;T@x@ [I"socializer;T@u!@ [I"social_login;T@"@ [I"social_media_monitoring;T@@ [I"social_megaphone;T@'@ [I"socialmod;T@@ [I"socialoud;T@`@ [I"social_scraper;T@E@ [I"social-share-button;T@`@ [I"social_share_hub;T@@ [I"social_sign_on;T@6@ [I"social_stream;T@@ [I"social_stream-base;T@@ [I"social_stream-documents;T@@ [I"social_stream-events;T@@ [I"social_stream-linkser;T@@ [I"social_stream-ostatus;T@@ [I"social_stream-presence;T@@ [I"social_widgets;T@@ [I"socialyzer;T@"@ [I"socket_accept_filter;T@@ [I"socket_dontwait;T@@ [I"socket.io;T@E@ [I"socketio-client;T@@ [I"socket-keepalive;T@@ [I"socketlab;T@E@ [I"socketlabs;T@@ [I"socketpool;T@+@ [I"socket_proxy;T@@ [I"socket_sendfile;T@@ [I" sockit;T@E@ [I" sockjs;T@@ [I" socksify;T@@ [I"socksify-a;T@T @ [I" socky;T@x@ [I"socky-authenticator;T@@ [I"socky-client;T@@ [I"socky-client-rails;T@@ [I"socky-server;T@@ [I"socmap_adf;T@@ [I"so-comment-hellban;T@@ [I" socrata;T@@ [I" socrates;T@'@ [I" soda;T@)@ [I"soda-ruby;T@I@ [I" sofa;T@`@ [I"sofa_blog;T@6@ [I"sofa_gallery;T@@ [I"soft_attributes;T@E@ [I"softboard;T@@ [I"soft-deletable;T@+@ [I"soft_delete;T@`@ [I"soft_delete-rails;T@'@ [I"soft_deletion;T@@ [I"soft_destroyable;T@@ [I"softlaunch;T@@ [I"softlayer_api;T@W@ [I"softlayer_api_jruby;T@@ [I"softlayer_messaging;T@@ [I"soft_validate;T@@ [I"&softwaregravy-net-http-persistent;T@#@ [I"software_smithy;T@s@ [I" sogger;T@E@ [I"sogilis-moxie_forum;T@ @ [I"sogoumap2pdf;T@@ [I"sokobanrb;T@"@ [I"sokoban.rb;T@E@ [I" Soks;T@@ [I" solaar;T@`@ [I" solar;T@E@ [I"solaris-contents;T@@ [I"solaris-file;T@@ [I"solaris-kstat;T@@ [I"solaris-mysql2;T@?@ [I"solaris-patch;T@@ [I"solaris-prototype;T@@ [I"solarsearch;T@@ [I"solar_terms;T@@ [I"soleone-highrise;T@7@ [I"soleranetworks;T@1@ [I" solid;T@@ [I"solid_assert;T@n@ [I" solidify;T@'@ [I"solid_state;T@@ [I" soloist;T@ @ [I" solokit;T@ @ [I" solon;T@@ [I"solo-rails;T@@@ [I"solr-client;T@'@ [I"solr_collection;T@|@ [I" solr_ead;T@@ [I" solrium;T@@ [I" solrizer;T@O@ [I"solrizer-fedora;T@o@ [I"solrizer-rabbit;T@'@ [I"solrj_wrapper;T@E@ [I"solr_mapper;TU;[I" 0.1.91;T@ [I"solrmarc_wrapper;T@"@ [I"solrpanel;T@`@ [I"solr_query;T@@ [I"solr_query-jgp;T@T @ [I"solr-ruby;T@V@ [I"solr_sail;T@@[I" solrsam;T@@ [I" solrsan;T@@ [I"solr_search_sanitizer;T@@ [I" solrsrv;T@@ [I" solusvm;T@u@ [I"solution-generator;T@'@ [I" solve;T@@ [I" solve360;T@@ [I" solvent;T@@ [I" solver;T@`@ [I"solve_sudoku;T@@ [I"som;T@"@ [I" soma;T@'@ [I"somatics3;T@@ [I"somatics3-generators;T@@ [I" somatsu;T@'@ [I"somefixtures;T@I@ [I"somehow_has_relation;T@n@ [I" someter;T@E@ [I"something_and_nothing;T@@ [I"sometimes_memoize;T@@ [I"somewhere;T@@ [I"somezack-feedzirra;T@@ [I" sonar;T@@@ [I"sonar_connector;T@-@ [I"sonar_connector_filestore;T@@ [I"sonar_ews_pull_connector;T@@ [I"sonar_push_connector;T@@ [I"sonar_rexchange;T@@ [I"songbirdsh;T@@ [I" songkick;T@E@ [I"songkick-oauth2-provider;T@-/@ [I"songkickr;T@@ [I"songkick_ruby;T@@ [I"songkick-transport;T@1@ [I"songkicky;T@`@ [I"songphi-gattica;T@J@ [I"songsterr;T@`@ [I"sonic_death_monkey;T@@ [I"sonixlabs-em-websocket;T@@ [I"sonixlabs-net-ssh;T@9@ [I"son_of_a_batch;T@E@ [I"sonofhash;T@@ [I" sonos;T@@ [I" soogem;T@@ [I" sooner;T@@ [I"soothsayer;T@@ [I"sooty-puppet;T@@ [I" soprano;TU;[I" 0.96;T@ [I" sorcerer;T@@ [I" sorcery;T@(@ [I" soroban;T@x@ [I" Soroban;T@@ [I" sortable;T@@ [I"sortablecolumns;TU;[I" 3.0.3.1;T@ [I"sortable_columns;TU;[I" 0.0.0.3;T@ [I"$sortable_element_for_nested_set;T@6@ [I"sortable_list;T@@ [I"sortable-model;T@@ [I"sortable_nested_set;T@@ [I"sortables;T@E@ [I"sortable_table;T@@ [I" sortah;T@X@ [I"sort_alphabetical;T@6@ [I"sort-by-alphabet;T@@ [I"sort_by_field;T@W@ [I"sort_by_str;T@@ [I" sorte;T@@ [I" sorted;T@@ [I" sorter;T@x@ [I"sortifiable;T@@ [I"sorting_table_for;T@@ [I"sort_it_out;T@@ [I" sortobot;T@@ [I"sort_order;T@@@ [I" sort_out;T@`@ [I"sort_this;T@@ [I" sorty;T@E@ [I"so_social;T@@ [I" sosowa;T@ @ [I" so_tweet;T@'@ [I" souffle;T@"@ [I" soul;T@'@ [I" soulmate;T@6@ [I"soul_points;T@+@ [I"soundcheck;T@@ [I" soundcli;T@@ [I"soundcloud;T@@ [I"soundcloud2;T@@ [I"soundcloud-auth;T@@ [I"soundcloud-client;T@@ [I"#soundcloud-custom-player-rails;T@@ [I"soundcloud-plus;T@E@ [I" soundcloud-ruby-api-wrapper;T@@ [I"soundcord;T@@ [I"soundcord_rails;T@E@ [I"soundmanager2-rails;TU;[I"2.97.20120916;T@ [I"soundmanager-rails;T@@@ [I"soundwave;T@@ [I" soup;T@@ [I"soup-client;T@'@ [I" source;T@@ [I"source2swagger;T@E@ [I"sourcecontrol;T@'@ [I"source_control;T@E@ [I"source_locator;T@@ [I"source_map;T@ @ [I"source_map-jsmin;T@@ [I"sourceninja;T@- @ [I"source_notes;T@'@ [I"source_position;T@@ [I"source_proc;T@@ [I" sourcer;T@E@ [I" sourcery;T@@ [I" sources;T@'@ [I"source-tools;T@@ [I"source_track;T@@ [I" sourcify;T@@ [I" sous;T@E@ [I"sous_chef;T@@ [I"#southeastern-daily-performance;T@@ [I" sova;T@@ [I" sovaa;T@V@ [I"sow;T@@ [I" soxer;T@@ [I" soybean;T@ao@ [I" soywiki;T@' @ [I" sozdat;T@E@ [I"sp;T@\@ [I" sp_2010;T@@ [I" space;T@@ [I"spacedocs;T@E@ [I"spaced_repetition;T@@ [I"space_frame_spine;T@@ [I"spaceport;T@I@ [I" spacer;T@@ [I" spaces;T@'@ [I"space-saver-redis;T@'@ [I"spacewalk;T@E@ [I" spacewar;T@E@ [I"spacialdb;T@@ [I" spacify;T@@@ [I" spackle;T@@ [I" spackler;TU;[I" 0.9.2.5;T@ [I" spade;T@@ [I"spade-core;T@@ [I"spade-packager;T@W@ [I"spade-runtime;T@W@ [I"spaghetti;T@@ [I"spaghettiohs;T@@ [I" spakit;T@- @ [I"spamchronic;T@V@ [I" spamham;T@@ [I"spamspanify;T@@ [I" spamster;T@@ [I" spamtrap;T@@ [I" spandex;T@n@ [I" spanish;T@`@ [I"spanish_ccc_validator;T@"@ [I"spanish_pluralizer;T@@ [I"spanish_vat_validators;T@E@ [I" spanner;T@E@ [I"spanner-lfittl;T@@ [I" spans;T@@ [I" spanx;T@`@ [I" spar;T@@ [I"sparehand;T@@ [I" spark;T@@ [I"spark_api;T@ @ [I"sparkfly-foreigner;T@@ [I" sparkle;T@`@ [I"sparkleology;T@@ [I" sparkler;T@@ [I"sparklines;T@@ [I"sparklines_generator;T@I@ [I"sparkly-auth;T@u@ [I"sparkmotion;T@H@ [I"sparkplug;T@@ [I" sparkql;T@@ [I" spark_rb;T@6@ [I" sparks;T@[ @ [I"sparkviewengine;T@@ [I" sparky;T@'@ [I"sparqcode_bunny;T@E@ [I"sparqcode_cane;T@@ [I"sparqcode-dnsimple-ruby;T@@ [I"sparqcode-urbanairship;T@O@ [I"sparqcode-waz-storage;T@@ [I"sparq_hmac;T@@ [I" sparql;T@@ [I"sparql-algebra;T@'@ [I"sparql-client;T@@ [I"sparql-grammar;T@@ [I"sparql-server;T@E@ [I"SparqlTransmission;T@s@ [I" sparrow;T@@ [I"sparrowhawk;T@Q@ [I" sparse;T@"@ [I"sparsehash;T@`@ [@X@`@[I" spartan;T@'@ [I" spass;T@@ [I" spassky;TU;[I" 0.1.45;T@ [I"spatial_adapter;T@ @ [I" spatialnetworks-pdf-stamper;T@@ [I" spatula;T@3@ [I" spawn;T@+@ [I" spawner;T@@ [I"spawngebob;T@|@ [I" spawnjob;T@'@ [I"spawnpocassets;T@E@ [I"spawn_server;T@N@ [I"spawntest;T@'@ [I" spcheck;T@@ [I" spdy;T@@ [I" speak;T@E@ [I"speakeasy;T@@ [I" speaker;T@"@ [I"speaker_rate;T@@ [I"speaker_text;T@@ [I"speaking_id;T@I@ [I"speaking_url;T@@ [I"speak_your_mind;T@'@ [I" spec1;T@@ [I" spec2;T@@ [I" spec3;T@@ [I" spec4;T@@ [I"spec-assist;T@@ [I"spec-bench;T@@ [I" speccify;T@@ [I" speccle;T@'@ [I"spec_converter;T@J@ [I"spec-converter;T@@ [I"spec_convertor;T@@ [I"spec_coverage;T@@ [I"spec_distributed;T@E@ [I" specdown;T@@ [I"special_agent;T@6@ [I"special_delivery;T@@ [I"special_fried_links;T@O@ [I"specific_assets;T@@ [I"specific_install;T@@ [I"specistent;T@@ [I" specjour;T@X@ [I"spec_marker;T@@ [I"spec-more;T@"@ [I"spec_oompa_loompa;T@6@ [I"spec_query;T@'@ [I" specrun;T@@ [I"spec_run_queue;T@@ [I"specstar-controllers;T@@ [I"specstar-models;T@@ [I"specstar-support-random;T@@ [I"spec_support;T@@ [I" spect;T@@ [I"spectabular;T@f!@ [I"spectacles;T@E@ [I"spectacular;T@@ [I"spec-talks;T@@ [I" spectask;T@'@ [I" spectate;T@@ [I"spectator;T@@ [I"spectator-attr_encrypted;T@;@ [I"spectator-validates_email;T@`@ [I" spectest;T@"@ [I" spectie;T@"@ [I"spectools;T@@ [I"spectralfilter;T@@ [I" Spectre;T@'@ [I"spectroscope;T@@ [I" spectrum;T@'@ [I" spec_ui;T@,@ [I" spe_cuke;T@x@ [I" specular;T@@ [I"spec_unit;T@'@ [I"spec-unit;T@@ [I"spec_wire;T@@ [I"speech2text;T@@ [I" speed;T@@ [I" speedo;T@@ [I"speedo-formstrap;T@} @ [I"speedpetal;T@E@ [I"speed-test;T@E@ [I" speedway;T@@ [I" speedy;T@@@ [I"speedy_c2dm;T@@ [I"speedy_gcm;T@e@ [I"speedytime;T@E@ [I"spekmachine;T@@ [I"spektacular;T@+@ [I"spellbook;T@,@ [I"spellchecker;T@|@ [I"spell_checker;T@E@ [I"spellingbee;T@E@ [I"spell_number;T@E@ [I" spex;T@@ [I" spfy;T@@ [I" sphere;T@@ [I"spherebird;T@@ [I" sphero;T@@ [I"Sphincter;T@@ [I" sphinx;TU;[I"0.9.10.2122;T@ [I"sphinxcrawl;T@E@ [I"sphinx_for_dm;T@@ [I"sphinxsearchlogic;T@@ [I"sphinx_tv;T@@ [I"sphonglepress;T@@ [I" spice;T@ @ [I"spiceinit;T@E@ [I"spiceweasel;T@O@ [I"spicycode_rspec_extensions;T@'@ [I" spider;T@"@ [I" spider2;T@@ [I" spiderfw;TU;[I" 0.6.27;T@ [I"spiderman;T@@ [I" spiderz;T@`@ [I" spidey;T@"@ [I"spidey-mongo;T@@ [I" spidr;T@@ [I"spiegela-jruby-httpclient;T@@[I"spielplan_saar;T@E@ [I" spik;T@@ [I" spike;T@@ [I" spin;T@J@ [I" spinach;T@X@ [I"spinach-console-reporter;T@'@ [I"spinach-rails;T@@ [I"spinal_tap;T@@ [I"spindance-syslogger;T@F@ [I"spinderella-client;T@@ [I" spindle;T@'@ [I" spinebox;T@@ [I"spine-extensions;T@'@ [I"spine-rails;T@@ [I"spingying;T@`@ [I"spinjs-rails;T@"@ [I" spinner;T@@ [I"spinning_cursor;T@@@ [I" spinoff;T@'@ [I"spintax_parser;T@@ [I" spinto;T@X)@ [I"spinto-jekyll;TU;[I" 0.11.2.5;T@ [I"spinto-liquid;TU;[I" 2.3.0.3;T@ [I" spinying;T@B@ [I" spira;T@3@ [I" spiral;T@'@ [I" spire;T@LN@ [I" spire_io;T@u"@ [I" spit;T@+@ [I" spitball;T@@ [I"spitball-client;T@@ [I"spitball-server;T@@ [I" spitter;T@'@ [I" spittle;T@Hp@ [I"spix_parser;T@@ [I"spk-anemone;T@x@ [I"spk-html5;T@[@ [I" splashy;T@@@ [I" splat;T@+@ [I" spleen;T@E@ [I"splendeo-generators;T@@ [I"splendeo-nifty-generators;T@@ [I"splendeo_translator;T@@ [I" splib;T@@ [I" splice;T@@ [I" Splice;T@@ [I" spliner;T@W@ [I" splinter;T@@ [I" split;T@_@ [I"split-analytics;T@@ [I"split_datetime;T@@ [I"split-export;T@@ [I"Split_Lines;T@@ [I"split_logger;T@@ [I"split_pgdump;T@x@ [I" splitter;T@E@ [I"split_tester;T@@ [I"split-where;T@@ [I" sploek;T@6@ [I" sploit;T@@ [I"splunk-client;T@X@ [I" splunker;T@@ [I"splunkman;T@'@ [I"spm;T@@ [I" spns;T@3@ [I"spob_browser_detector;T@@ [I"spob-flix_cloud-gem;T@@ [I" spock;T@E@ [I" spockets;T@`@ [I" spoke;T@$@ [I" sponge;T@@ [I" sponges;T@@ [I"spool_pool;T@@ [I" spoon;T@'@ [I"spoon_daemon;T@@ [I" spore;T@@ [I" spork;T@- @ [@Y@- @[@Y@' @ [I"spork-assert;T@'@ [I"spork-local_process;T@n@ [I"spork-minitest;T@@ [I"sporkmonger-sax-machine;T@`@ [I"spork-rails;T@n>@ [I"spork-rdebugide-testunit;T@@ [I"spork-riot;T@'@ [I"spork_tasks;T@@ [I"spork-testunit;T@V@ [I" sportdb;T@ @ [I"sportdb-market;T@@ [I"sportdb-play;T@@ [I"sports_data_api;T@@ [I"sports_direct;T@n@ [I" spot;T@z@ [I"spotif-aye;T@@ [I"spotifiery;T@'@ [I" spotify;TU;[I" 12.3.0;T@ [I"spotify-api;T@n@ [I"spotify-dbus;T@@ [I"spotify-metadata;T@@ [I"spotify-to-mp3;T@@ [I"spotlight;T@@ [I" spoved;T@'@ [I"spox-plist;T@ @ [I"spox-textpow;T@@ [I"spox-ultraviolet;T@W@ [I"spp_nokogiri_ext;T@@ [I" spqr;T@@ [I" sprache;T@@ [I"spraypaint;T@@ [I"spray_paint;T@'@ [I" spread;T@@ [I"spreadbase;T@6@ [I"spread-client;T@@ [I" spreader;T@ @ [I"spreadhead;T@y@ [I"spreadsheet;T@!@ [I"spreadsheet-aggregator;T@'@ [I"#spreadsheet_cache_manager_refi;T@@@ [I"spreadsheet_db-cache_refi;T@@ [I"spreadsheet_db_refi;T@@ [I"spreadsheet-excel;T@@ [I"spreadsheet_export_refi;T@@ [I"spreadsheetkit;T@ @ [I"spreadsheet_manager_refi;T@@ [I"SpreadsheetML;T@@ [I"spreadsheet_report;T@@ [I"spreadsheet_template;T@@ [I"spreadsheetx;T@I@ [I"spreadshirt_client;T@@ [I"spreadshoot;T@"@ [I" spree;T@ @ [I"spree_active_shipping;T@@ [I"!spree_additional_calculators;T@`@ [I"spree_address_book;T@@ [I"spree_advanced_calculators;T@'@ [I"spree_advanced_cart;TU;[I" 0.40.0;T@ [I"spree_advanced_reporting;T@@ [I"spree_affiliate;T@@ [I"spree_affiliate_links;T@T @ [I"spree_ajax_cart;T@N@ [I"spree_api;T@ @ [I"spree_api_auth;T@@ [I"spree-api-client;T@'@ [I"$spree_api_content_type_rewriter;T@@ [I"spree_aprova_facil;T@- @ [I"spree_auth;T@T @ [I"spree_auth_devise;T@ @ [I"spree_auth_disabler;T@'@ [I"spree_avatax;T@@ [I"spree_awesome_blog;T@@ [I"spree_banner;T@x@ [I"spree_batch_capture;T@+@ [I"spree_bitcoin_checkout;T@6@ [I"spree_block_contents;T@@ [I"spree_bushido;TU;[I" 0.80.28;T@ [I"spree_bushido_api;T@KZ@ [I"spree_bushido_auth;T@KZ@ [I"spree_bushido_promo;T@KZ@ [I"spree_carousels;T@@ [I"spree_carrierwave;T@@ [I"spree_cash_on_delivery;T@'@ [I"spree_category_bullets;T@E@ [I"spree_change_locale;T@J@ [I"spree_city_zones;T@'@ [I"spree_clean;T@W@ [I"spree_cmd;T@ @ [I"spree_cms;T@"@ [I"spree-cms;T@@ [I"spree_comments;T@@ [I"spree_compare_products;T@N@ [I"spree_contact_form;T@@ [I"spree_contact_us;T@@ [I"spree_content_chunks;T@@ [I"spree_core;T@ @ [I"spree_correios;T@@ [I"spree_coupon_preview;T@@ [I"spree_crux;T@@ [I"spree_custom_api;T@@ [I"spree_custom_multi_lingual;T@@ [I""spree_custom_related_products;T@@ [I"spree_custom_user_groups;T@;@ [I"spree_dash;T@ @ [I"spree_delayed_job;T@@ [I"!spree_deprecated_user_agents;T@@ [I" spreedly;T@q@ [I"spreedly_core;T@6@ [I"spreedly-core-ruby;T@@ [I"spree_downloads;T@@ [I"spree_dynamic_sitemaps;TU;[I" 0.50.1;T@ [I"spree_easy_contact;T@@ [I"spree_editor;TU;[I" 0.70.0;T@ [I"spree_email_to_friend;T@@ [I"spree_embedded_videos;T@@ [I" spree_enhanced_option_types;T@N@ [I"spree-enriquez;T@@ [I"spree_essential_blog;T@@ [I"spree_essential_cms;T@x@ [I"spree_essential_menus;T@@ [I"spree_essential_press;T@@ [I"spree_essentials;T@@ [I"spree_essentials_jn;T@@ [I"spree_events_list;T@7@ [I"spree_exactor;TU;[I"1.1.1.112920126;T@ [I"spree_faq;T@ @ [I"spree_featured;T@@ [I"spreefinery;T@'@ [I"spree_flat_in_range;T@@ [I"spree_forem;T@@ [I"spree_froomerce_fconnect;TU;[I" 0.70.5;T@ [I"spree_google_base;T@d@ [I"spree_google_checkout;T@"Z@ [I"spree_grid_faq;T@@ [I"spree_grid_feed;T@@ [I"spree_heist_theme;T@'@ [I"spree_heroku;T@E@ [I"spree_home_page_features;T@@ [I"spree-homepager;T@N@ [I"spree_html_email;T@!@ [I"spree_html_invoice;T@@ [I"spree_i18n;T@@ [I"spree_ifmb;T@E@ [I"spree_inactive_taxons;T@@ [I"spree_invoice;T@D@ [I"spree_mail;TU;[I" 0.40.0.4;T@ [I"spree_mail_chimp;T@@ [I"spree_minicart;T@;@ [I"spree_mini_contact;T@+@ [I"spree_mobile_views;TU;[I" 0.50.2;T@ [I"spree_multi_domain;T@ @ [I"spree_multi_lingual;T@@ [I"spree_multi_slideshow;T@u@ [I"spree_multitenant;T@'@ [I"spree_multi_theme;T@@ [I"spree_myriad_options;T@@ [I"spree_news;T@@ [I"spree_odg_theme;T@@ [I"spree_omni;T@@ [I"spree_online_support;T@Z@ [I"spree_onpay;T@I@ [I"spree_order_price_sync;T@e{@ [I"spree_pages;T@@ [I"spree_pag_seguro;T@ @ [I"spree_payflow;T@7@ [I"spree_payment_calculator;T@@ [I""spree_paypal_adaptive_payment;T@`@ [I"spree_paypal_express;T@@ [I""spree_paypal_website_standard;T@@ [I"spree_payuin;T@@ [I"spree_pinterest;T@@ [I"spree_pricemask;T@N@ [I"spree_product_assembly;T@7@ [I"#spree_product_based_calculator;T@@ [I"spree_product_enquiry;T@`@ [I"spree_product_feed;T@Z@ [I"spree_product_price_from;T@u@ [I"spree_product_sort;T@N@ [I"spree_product_suppliers;T@'@ [I"spree_product_testimonials;T@@ [I"spree_product_translation;T@'@ [I"spree_product_translations;T@@ [I"spree_promo;T@ @ [I"spree_przelewy24;T@@ [I"spree_pxpay_paymentmethod;T@@ [I"spree_recurring_service;TU;[I" 0.70.3;T@ [I"spree_redirects;T@@ [I"spree_related_products;T@@ [I"spree_restriction;T@u"@ [I"spree_retailers;T@C@ [I"spree_reviews;T@Z@ [I"spree_reviews_rating;T@N@ [I"spree_robokassa;T@Z@ [I" spree_s3;T@`@ [I"spree_sale_pricing;T@@ [I"spree_sample;T@ @ [I"spree_showcase;T@@ [I"spree_simple_blog;T@ @ [I"&spree_simple_product_translations;T@@ [I"spree_sitemap_generator;T@i@ [I"spree_size_chart;T@@ [I"spree_skrill;T@@ [I"spree_slider;T@N@ [I"spree_snippets;T@7@ [I"spree_social;T@s@ [I"spree_social_onr;T@i6@ [I"spree_solr_search;TU;[I" 0.40.3;T@ [I"spree_special_offers;T@T @ [I"spree_states;T@'@ [I"spree_static_content;T@@ [I"spree_store_credits;T@@ [I"spree_sunspot;T@@ [I"spree_suppliers;T@@ [I"spree_swatches;T@N@ [I" spreet;T@@ [I"spree_taxonomy_published;T@u@ [I"spree_taxonomy_purpose;T@u@ [I" spree_taxonomy_purpose_menu;T@@ [I"spree_taxonomy_sort;T@N@ [I"spree_taxonomy_style;T@N@ [I"spree_temando;T@@ [I"spree_testimonials;T@ @ [I"spree_usa_epay;T@@ [I"spree_user_groups;TU;[I" 0.40.1;T@ [I"spree_variant_options;T@@ [I"spree_videos;T@'@ [I"spree_volume_pricing;T@@ [I"spreewald;T@@ [I"spree_watermark;TU;[I" 0.50.4;T@ [I"spree_webmoney;T@@ [I"spree_wholesale;TU;[I" 0.40.2.2;T@ [I"spree_wishlist;T@@ [I"spree_wordsmith;T@@ [I"spree_yandex_market;T@N@ [I"spree_zoned;TU;[I" 0.5.38;T@ [I"spree_zone_pricing;TU;[I" 0.1.90;T@ [I"spree_zones_by_zip_code;T@@ [I" spring;T@E@ [I"springboard;T@)@ [I" springer;T@@ [I"springnote_client;T@@ [I"springnote_resources;T@$@ [I"springpad;T@@ [I"springsteen;T@@ [I" sprinkle;T@@ [I"sprinkle_packages;T@'@ [I" sprint;T@@ [I" sprite;T@@ [I"sprite-factory;T@@ [I"sprite_generator;T@@ [I"sprite-generator;T@!@ [I"spriteous;T@+@ [I" spriter;T@~@ [I"spritesheet;T@@ [I"spritopia;T@'@ [I"sprock-assets;T@@ [I"sprocketize;T@@ [I"sprocketizer;T@@ [I"sprocket-mq-combiner;T@@ [I"sprockets;T@:@ [I"sprockets-blackcoffee;T@@ [I"sprockets-cache-memcache;T@'@ [I"sprockets-cache-mongodb;T@E@ [I"sprockets-cache-redis;T@@ [I"sprockets-cache-riak;T@E@ [I"sprockets-caches;T@'@ [I"sprockets_cjs;T@@ [I"sprockets-commonjs;T@@ [I"sprockets-derailleur;T@@ [I"sprockets-directives;T@'@ [I"sprockets-dotjs;T@;@ [I"sprockets-foo;T@"@ [I""sprockets-handlebars_template;T@@ [I"sprockets_helper_rails3;T@@ [I"sprockets-helpers;T@@ [I"sprockets_html_template;T@'@ [I"sprockets-image_compressor;T@@ [I"sprockets_inline;T@'@ [I"sprockets-jquery-tmpl;T@`@ [I"sprockets-jsrender;T@6@ [I"sprockets-jsx;T@E@ [I"sprockets-less;T@@ [I"#sprockets-media_query_combiner;T@"@ [I"sprockets-plugin;T@@ [I"sprockets-rack;T@E@ [I"sprockets-rails;T@@ [I"sprockets_rails3;T@'@ [I"sprockets_rails3_backport;T@"@ [I"sprockets-rails-parallel;T@"@ [I"sprockets-redirect;T@@ [I"sprockets-sass;T@e@ [I"sprockets-source-url;T@'@ [I"sprockets_spacely;T@E@ [I"sprockets-torquebox-cache;T@@ [I"sprockets-typescript;T@@ [I"sprockets-urlrewriter;T@@@ [I"sprockets-vendor_gems;T@6@ [I" sprout;TU;[I" 0.7.219;TI"i686-darwin10;T[@.\U;[I" 0.7.246;T@I[@.\@4\@%N[@.\@4\@ [@.\@4\@ [@.\@4\@[I"sprout-air-bundle;T@'@ [I"sprout-alivepdf-library;T@=@ [I"sprout-as2-bundle;T@@ [I"sprout-as3-bundle;TU;[I" 1.0.37;T@ [I"sprout-as3crypto-library;T@@ [I" sprout-as3flickrlib-library;TU;[I" 0.87.2;T@ [I"$sprout-as3flickrlib-src-library;T@J\@ [I"%sprout-as3httpclient-src-library;T@@ [I"sprout-as3mapprlib-library;TU;[I" 0.85.1;T@ [I"#sprout-as3mapprlib-src-library;T@S\@ [I"sprout-as3-puremvc-bundle;T@@ [I"sprout-as3spec-library;T@`@ [I"%sprout-as3syndicationlib-library;T@S\@ [I")sprout-as3syndicationlib-src-library;T@S\@ [I"!sprout-as3youtubelib-library;T@S\@ [I"%sprout-as3youtubelib-src-library;T@S\@ [I"sprout-asunit25-library;T@a@ [I"sprout-asunit3-library;TU;[I" 4.0.21;T@ [I"sproutbox-mousetrap;T@@ [I"sprout-bulkloader-library;TU;[I" 0.175.1;T@ [I"sprout-cairngorm-library;T@t@ [I"!sprout-cairngorm-src-library;T@t@ [I"sproutcore;TU;[I" 1.6.0.1;T@ [@w\@x\@[@w\@ @ [I"sproutcore-coffeescript;T@|@ [I"sprout-corelib-library;T@ @ [I"sprout-corelib-src-library;T@ @ [I"sproutcore-rails;T@@ [I"sprout-degrafa-library;T@u@ [I"sprout-developer-bundle;T@`@ [I" sprout-facebook-api-library;T@@ [I"sprout-flashplayer;TU;[I" 9.115.1;T@ [I"sprout-flashplayer-bundle;TU;[I" 10.22.8;T@ [I"sprout-flashplayer-tool;TU;[I" 10.102.0;T@ [I"sprout-flex2sdk;T@@ [I"sprout-flex2sdk-tool;T@ @ [I"sprout-flex3sdk-tool;T@O@ [I"sprout-flex4-bundle;T@+@ [I"sprout-flex4sdk-tool;TU;[I" 4.2.14;T@ [I"sprout-flexdatavis-library;T@S@ [I"sprout-flexlib-library;T@o@ [I"sprout-flexlib-src-library;T@o@ [I"sprout-flexsystemsdk-tool;T@@@ [I"*sprout-flexunit4aircilistener-library;T@@ [I"sprout-flexunit4as-library;T@@ [I"'sprout-flexunit4cilistener-library;T@@ [I".sprout-flexunit4flexcoverlistener-library;T@@ [I"!sprout-flexunit4flex-library;T@@ [I"'sprout-flexunit4uilistener-library;T@@ [I"sprout-flexunit-library;T@S\@ [I" sprout-flexunit-src-library;T@S\@ [I"sprout-flexunitsrc-library;T@S\@ [I"sprout-fuse-library;T@i6@ [I"sprout-fzlib-library;T@@ [I"#sprout-google-spreadsheet-ruby;T@'@ [I"sproutit-narwhal;TU;[I" 0.2.109;T@ [I""sprout-jukeboxapi-src-library;T@n@ [I"sprout-mate-library;T@@ [I"sprout-melomel-library;T@0@ [I" sprout-melomel_stub-library;T@0@ [I"sprout-mtasc;T@@ [I"sprout-mtasc-tool;TU;[I" 1.13.7;T@ [I"sprout-mxml-bundle;T@@ [I"sprout-papervision-library;T@@ [I"sproutpunk;T@@@ [I"sprout-puremvc-library;T@z@ [I"sprout-puremvc-src-library;T@z@ [I"sprout-purepdf-library;TU;[I"0.23.20100210;T@ [I"sprout-purepdfont-library;T@\@ [I" sproutr;T@@ [I"sprout-robotlegs-library;T@E@ [I"sprout-ruby-aws;T@N@ [I"sprout-swfmill;T@ZB@ [I"sprout-swfmill-tool;T@ @ [@\@ @ [I"#sprout-swiftsuspenders-library;T@E@ [I"sprout-swx-library;T@@ [I"sprout-tourbuzz-bundle;T@@ [I"sprout-tweeneras2-library;TU;[I" 1.26.63;T@ [I"sprout-tweener-library;T@\@ [I"sproutvideo-rb;T@N@ [I"sprout-xpath4as2-library;T@@ [I" sprout-yahoomapsas3-library;T@e@ [I"sprout-yajl-library;T@'@ [I" spruce;T@E@ [I" spruz;T@"@ [I" sps_bill;T@`@ [I"sp-squealer;T@@ [I"sp-tutorial;T@@ [I"spud_admin;T@@ [I"spud_banners;TU;[I" 0.9.0.2;T@ [I"spud_blog;T@@ [I" spud_cms;T@<@ [I"spud_core;T@ @ [I"spud_inquiries;T@e@ [I"spud_media;T@@ [I"spud_permalinks;T@e@ [I"spud_photos;T@e@ [I"spud_reports;T@@ [I"spud_search;T@|@ [I"spud_videos;T@@ [I" spurs;T@@ [I" sputnik;T@!@ [I" sputnik1;T@'@ [I" spwn;T@@@ [I"spx-resque-multi-job-forks;T@@ [I"spy;T@@ [I"spymemcached;T@@[I"spyou_rpx_now;T@$@ [I"spy-satelite;T@E@ [I"spy-vs-spy;T@V@ [I"Spy-Vs-Spy;T@@ [I" sqale;T@'@ [I" sq_auth;T@q@ [I" sqew;T@@ [I"sql;T@@ [I"sqlanywhere;T@@@1[@P]@+@1[@P]@1@ [@P]@1@ [I"sqlconsole;T@@ [I" sqld4r;T@E@ [I"SQLDependencyGrapher;T@@ [I"sql_dep_graph;T@@ [I" sqldroid;T@E@[@]]@I" android;T[@]]@@ [I" sqldsl;T@*@ [I" sqldump;T@"@ [I"sqlfinder;T@@ [I" sql_formatter_web_interface;T@@ [I" sql_funk;T@'@ [I" sqliki;T@"@ [I"sqliki_generator;T@"@ [I" sqlite3;T@@[@p]@@ [@p]@@ [I"sqlite3_ar_regexp;T@@ [I"sqlite3-dotnet;TU;[I" 3.7.2.1;T@ [I"sqlite3-ironruby;T@`@ [I"sqlite3-ruby;T@@[@}]@@[@}]@@ [@}]@@[@}]@ @ [I"sqlitecache;T@'@ [I"sqlite-foreigner;T@@ [I"sqlite_log_filter;T@'@ [I"sqlite-ruby;T@9 @ [@]@9 @[I"sqlloader;T@@ [I"sql_loader;T@`@ [I"sql-logging;T@=@ [I"sql_logic;T@'@ [I"sql_mapper;T@@ [I"sql_munger;T@n@ [I"sql_origin;T@@ [I"sql_output;T@@ [I"sql_pager;T@@ [I"sql_parser;T@'@ [I"sqlpostgres;T@u"@ [I"sql_queries_count;T@'@ [I"sql_record;T@W@ [I"sql_safety_net;T@O@ [I"sqlserver;T@'@ [I"sql_server;T@`@ [I"sqlserver-schema-reflector;T@E@ [I"SqlStatement;T@@ [I" sqlstmt;T@+@ [I"sql_tagger;T@E@ [I"sql_tasks;T@'@ [I" sql_tree;T@@ [I" sqlup;T@ @ [I"sql_values;T@@ [I"sql_wrangler;T@@ [I" sqlyzer;T@@ [I"sqoop-ruby;T@'@ [I" sqoot;T@@ [I" sqrbl;T@@ [I"sqs;T@@@ [I"SQS;T@@ [I"sqs_async;T@n@ [I"sqspoller;T@@ [I"sqs-queue-locator;T@E@ [I" sqsrun;T@@ [I"sqs_transport;T@@ [I" squall;T@@ [I"square-activerecord;T@|@ [I"square-arel;TU;[I"2.0.9.20110222133018;T@ [I"square_bracket;T@@ [I"squarecoder;T@'@ [I"square_graph;T@@ [I"square-hoptoad_notifier;TU;[I" 2.4.8;T@ [I"squarepusher;T@"@ [I" squash;T@V@ [I"squash_ios_symbolicator;T@@ [I"squash_java;T@@ [I"squash_javascript;T@@ [I"squash_rails;T@@ [I"squash_ruby;T@@ [I"squash_uploader;T@@ [I" squat;T@'@ [I" squatch;T@@ [I" squawk;T@@ [I" squeal;T@@ [I" squealer;T@t@ [I" squeegee;T@`@ [I" squeel;T@@ [I"squeel_rbg;T@&@ [I" squeese;T@@ [I" squeeze;T@@ [I"SqueezeBox;T@'@ [I" squeezem;T@|@ [I" squeezer;T@@ [I"squeezer-ruby;T@@ [I" squeezy;T@'@ [I"squidward;T@6@ [I" squiggle;T@@ [I" squirm;T@@ [I"squirm_model;T@@ [I"squirm_rails;T@E@ [I" squirrel;T@@ [I"squirtgun;T@@ [I" squish;T@'@ [I"squishable;T@E@ [I" squishit;TU;[I"0.6.0.0.20100831;T@ [I" sqweeze;T@@ [I" sqwish;T@(@ [I" sr71;T@E@ [I" sras;T@@ [I"srawlins-scruffy;T@ @ [I"srbovanje;T@@ [I" srcforge;T@@ [I" sredder;T@n@ [I"sreeix-cache-money;T@"@ [I"srs;T@`@ [I" srscript;T@6@ [I"sr-scripts;T@p@ [I" srs_game;T@`@ [I"srtshifter;T@N@ [I"sru;T@@ [I"sr_uniquify;T@`@ [I"srv;T@@ [I"srvany_manager;T@@ [I"srvmonitor;T@@ [I" srx2ruby;T@@ [I"srx-english;T@@@ [I"srx-polish;T@@ [I"ss;T@'@ [I" ss2json;T@@ [I" s-savon;T@@ [I"s_savon_model;T@x@ [I"ssc;T@"@ [I" ssdeep;T@@ [I" ssdiff;T@'@ [I" sse4rb;T@@ [I"ssedap-client;T@"@ [I" ssejs;T@@@ [I"ssh;T@@ [I" sshakery;T@@ [I"ssh-allow;T@@ [I"ssh-config;T@@@ [I"ssherman-mongo_mapper;T@@ [I"ssherman-sysloglogger;T@@ [I"sshexpect;T@E@ [I"ssh-forever;T@@ [I"ssh-gemspec;T@@ [I"ssh_guard;T@"@ [I"sshingler-calais;T@@ [I" sshkey;T@ @ [I"sshkeyauth;T@@ [I"ssh-keyput;T@x@ [I" ssh-keys;T@@ [I"ssh-key-sync-man;T@@ [I" sshkg;T@I@ [I"ssh-locate;T@@ [I" sshotgun;T@W@ [I"ssh_runner;T@n@ [I" ssh_test;T@'@ [I"ssh_voodoo;T@"@ [I" sshwitch;T@E@ [I" sshwrap;T@'@ [I"ssh-wrapper;T@@ [I"sskirby-activerecord;T@n>@ [I"sskirby-hydra;TU;[I" 0.23.3;T@ [I"sskirby-mongoid;T@ @ [I"sskirby-resque-scheduler;TU;[I" 1.10.14;T@ [I"ssl;T@@ [I" sslackey;T@@ [I"ssl_certifier;T@+@ [I"ssl_enforcer;T@+@ [I"sslrequirement;T@N@ [I"ssl_requirement;T@@ [I"ssl_routes;T@|@ [I" sslsmart;T@@ [I" ssltool;T@@ [I"ssm;T@@ [I"ssn;T@@ [I"ssn_validator;T@@ [I" sso-auth;T@*@ [I"sso_client;T@"@ [I"ssoroka_takes_the_win;T@@ [I" sso_what;T@@ [I"ssp;T@$@ [I"ssp-cijoe;TU;[I" 0.4.4.5;T@ [I"ssp-pickler;T@|@ [I" ssprgame;T@@ [I"sss;T@E@ [I" sssmoke;T@@ [I" sstruct;T@@ [I" ssvm_cli;T@"@ [I" ssync;T@@ [I"st;T@'@ [I"sta;T@<@ [I"stable_match;T@`@ [I"stable-rails;T@'@ [I" stache;T@@ [I" stack;T@@ [I"stackable_flash;T@n@ [I" stackd;T@'@ [I"stackdeck;T@@ [I" stacked;T@@ [I" stacker;T@E@ [I"stack_exchange;T@@ [I"stackexchange-ruby;T@@ [I" stackfu;T@-@ [I"stackfury;T@'@ [I" stackmob;T@6@ [I"stackoverflair;T@"@ [I"stackoverflow;T@|@ [I"stack_overflow;T@@ [I" stackr;T@'@ [I"stackservr;T@E@ [I"stackster;T@@ [I"stacktrace;T@@ [I"stack_tracy;T@g@ [I"stack_wars;T@`@ [I" Staf;T@@ [I" stage;T@@ [I"stagecoach;T@'@ [I"stagehand;T@"@ [I" stager;T@I@ [I" stages;T@@ [I" staging;T@@ [I"stair_car;T@@ [I"stakach-algorithms;T@@ [I" stale;T@'@ [I"stale_fish;T@@ [I" stalk;T@`@ [I"stalk-boss;T@N$@ [I" stalker;T@- @ [I"stalker_test;T@@ [I" stalkr;T@Q@ [I" stalky;T@'@ [I" stallion;T@@ [I" stamina;T@@ [I"stamina-core;T@@ [I"stamina-gui;T@@ [I"stamina-induction;T@@ [I" stamp;T@@ [I"stampable;T@@ [I"stamp-i18n;T@@ [I" stamps;T@@ [I"standalone_migrations;T@@ [I"standard_deviation;T@@ [I"standard_tasks;T@@ [I" standin;T@'@ [I"stands4_geocoder;T@'@ [I" standup;T@"@ [I"stanford-core-nlp;T@@ [I"stanford-mods;T@@ [I"stanfordparser;T@ @ [I"stanfordparser-infochimps;T@t@ [I" stapler;T@@ [I" starapi;T@@ [I"starbucks;T@@ [I" stardate;T@ @ [I" stardust;T@E@ [I" starfish;T@u@ [I" starling;T@[@ [I"StarRezApi;T@@ [I" stars;T@J@ [I"star_searcher;T@'@ [I" startat;T@@ [I"startbrick;T@V@ [I" starter;T@@ [I"starter-template_generator;T@E@ [I"startmobile_sms;T@@ [I"start_project;T@V@ [I"starttime;T@E@ [I" startup;T@N@ [I" startups;T@HH@ [I"startupspawn;T@N@ [I"startupstats;T@@ [I" stash;T@O@ [I"stashboard;T@E@ [I"stashboard_notifier;T@E@ [I"stashboxr;T@@ [I"stash-magic;T@`@ [I" stasis;T@@ [I" stastic;T@@ [I" stat;T@E@ [I" stata;T@`@ [I"statarray;T@'@ [I"stat_board;T@@@ [I"stat-count-client;T@'@ [I" state;T@@ [I"state_attr;T@@ [I"stateface-rails;T@@ [I"stateflow;T@@ [I"state_flow;T@@ [I" state-fu;T@C"@ [I"stateful_link;T@@ [I"statefulobject;T@'@ [I"statefulton;T@E@ [I"state-handler;T@@@ [I"$stateless-systems-image_science;T@@ [I"stateless-systems-paypal;T@@ [I"statelogic;T@@ [I" stately;T@@ [I"statemachine;T@@ [I"state_machine;T@x@ [I"state_machine_audits;T@+@ [I"state_machine-audit_trail;T@6@ [I"state_machine_ext;T@I@ [I"state_machine_history;T@I@ [I"state_machine-mongoid;T@|@ [I"state_machine_setters;T@@ [I"state_manager;T@ @ [I"statementor;T@"@ [I"state_objects;T@V@ [I"state-of-zip;T@@ [I"stateology;T@@ [I"state_pattern;T@@ [I"state_select;T@@ [I"state_select_plugin;T@`@ [I"state_shifter;T@@ [I"state_store;T@@ [I"state_validations;T@@ [I"state_validator;T@@ [I" statgrab;T@@ [I" stathat;T@@ [I" static;T@6@ [I" statica;T@@ [I"static_addthis;T@@ [I"static_auth;T@"@ [I"static-bartender;T@"@ [I"static_cms;T@@ [I"static_config;T@"@ [I"static_content;T@@ [I"static_fm;T@@ [I" staticfy;T@'@ [I"static_generator;T@@ [I"static_geocode_lookup;T@@ [I"static-gmaps;T@@ [I"static-gmaps2;T@@ [I"static-gmaps-v3;T@@ [I"staticify;T@`@ [I"static_image_download;T@@ [I"staticker;T@@ [I"static_list;T@I@ [I"static_map;T@@@ [I"staticmatic;T@[@ [I"staticmatic2;T@r6@ [I"static_model;T@@ [I"static-model;T@x@ [I" statico;T@'@ [I"static_pages;T@@ [I"staticpress;T@X@ [I"static_record;T@'@ [I"static_record_cache;T@@ [I"static_resource;T@@ [I"static_server;T@E@ [I"static_signature;T@'@ [I"static_sitemap_tasks;T@R @ [I"static_watcher;T@@ [I"staticweb;T@@ [I" station;T@@ [I"stationary;T@'@ [I"statistics;T@@ [I"statistics2;TU;[I" 0.54;T@ [I" stativus;T@'@ [I" stat_mon;T@@ [I"statraptor;T@@ [I" stats;T@@ [I"statsample;T@N@ [I"#statsample-bivariate-extension;T@@ [I"statsample-optimization;T@+@S[@C`@+@ [@C`@+@ [@C`@ @ [I"statsample-sem;T@@ [I"StatsCollect;TU;[I"0.3.0.20120314;T@ [I"stats_combiner;T@@ [I" statsd;T@Y@ [I"statsd-cli;T@'@ [I"statsd-client;T@V@ [I"#statsd-default_instrumentation;T@x@ [I"statsdeify;T@@ [I"statsd_helper;T@d@ [I"statsd-instrument;T@@ [I"statsd-rb;T@@ [I"statsd-ruby;T@N@ [I"statsd.scala;T@@ [I"statsdserver;T@W9@ [I" statsmix;T@@ [I" statsn;T@`@ [I" statsy;T@@ [I" statt;T@"@ [I" stattr;T@`@ [I" status;T@'@ [I"status_accessor;T@@ [I"status_cats;T@'@ [I"status_dogs;T@E@ [I"status_enumerator;T@@ [I"status_file;T@'@ [I"status_for;T@@ [I"status_page;T@@ [I"status_quo;T@"@ [I" statusz;T@@ [I" statval;T@6@ [I"statwhore;T@"@ [I"staugaard-rpm_contrib;T@ @ [I" stay;TU;[I"0.1.4.3.1;T@ [I"std_capture;T@E@ [I"stderr_logger;T@E@ [I"stderr-sentry;T@Y@ [I"stdiotrap;T@@ [I"stdouttoggler;T@@ [I"std_rules;T@n@ [I" stead;T@3@ [I" steady;T@'@ [I" steak;T@O@ [I" steam;T@V@ [I"steamcannon-aws;TU;[I" 2.3.26.2;T@ [I""steamcannon-deltacloud-client;TU;[I"0.0.9.8.1;T@[@`@@ [I" steamcannon-deltacloud-core;T@@[@`@@ [I"steamcannon-s3;T@@ [I"steamcannon-thin;T@F@ [I"steam-client;T@@ [I"steam_community;T@@ [I"steam-condenser;T@@ [I" steamer;T@@@ [I"steam-prices;T@g@ [I"steamprofile;T@'@ [I"steamroller;T@@ [I" steamy;T@@ [I"steelbones;T@@ [I"steenzout-cfg;T@@ [I"steenzout-dao;T@@ [I"steenzout-sqnc;T@@ [I" steering;T@N@ [I"steering-rails;T@@ [I" stefan;T@'@ [I"stefl-chargify;T@[@ [I"stefl-cucumber;T@[@ [I"steflewandowski-geoapi;T@@ [I"stefl-rack-cache-purge;T@E@ [I"stefl-sinmetrics;T@@ [I"steini-resque;TU;[I" 1.18.5;T@ [I"steipete_is_paranoid;T@Q@ [I" stella;TU;[I"2.1.2.004;T@ [I" stellar;T@@ [I" stellr;T@@@ [I"st-elsewhere;T@|@ [I" stem;T@@ [I"stemmable;T@@ [I" stemmer;T@@ [I"stemmer4jr;T@'@ [I"stemmer4r;T@6@ [I" stemmify;T@E@ [I" stencil;T@|@ [I" Stencil;T@`@ [I" stencils;T@@ [I" stendhal;T@!@ [I" steno;T@@ [I"stenographer;T@@ [I" step;T@E@ [I"step_definitions_viewer;T@'@ [I" stepdown;T@X@ [I" stepford;T@sA@ [I"step_master;T@@ [I" stepper;T@@ [I"step_rewrite;T@@ [I" step-up;T@@ [I"step_wizard;T@'@ [I" sterile;T@@ [I"stethoscope;T@@ [I" steto;T@n@ [I" steve;T@@ [I"steve-capistrano-helpers;T@@ [I"stevedore;T@'@ [I"steveh-browscap;T@@ [I"steveh-geokit;T@l@ [I"stevenson;T@- @ [I"stevequinlan-aws-s3;T@y@ [I" steward;T@@ [I" stick;T@ @ [I" stickler;T@@ [I"stickshift;T@@ [I"stickybits;T@"@ [I"sticky_blox;T@N@ [I"stickyflag;T@@ [I" stiki;T@@ [I"stillwater;T@@ [I" stilts;T@"@ [I"stilts-stomp-client;T@@[I" stint;T@'@ [I" stipe;T@|@ [I" stipend;T@@ [I"stipulate;T@W@ [I" stirlitz;T@H@ [I" stitch;T@1@ [I"stitch_rails;T@n@ [I"stitch-rb;T@V@ [I"stj;T@@ [I"stlondemand-rvideo;T@ @ [I" stockery;T@@ [I"stockfolio;T@1@ [I"stock_quote;T@@ [I" stockr;T@@ [I"stocktracker;T@V@ [I"stocktrade-money-rails;T@@ [I"stocktwit;T@"@ [I"stocktwits;T@@ [I"stocktwits-api;T@`@ [I" stocky;T@@ [I" stomp;T@F@ [I" stomper;T@@ [I"stomping_ground;T@Q@ [I"stomping_ground-celluloid;T@@ [I"stomp_message;T@y@ [I" stompmq;T@@ [I" StompMq;T@R @ [I"stompserver;T@<@ [I" stone;T@@@ [I"stonepath;T@y@ [I" stones;T@+@ [I"stonewall;T@@ [I" stooge;T@+@ [I"stopango_tester;T@n@ [I"stopdropandrew_ci_reporter;TU;[I" 1.7.0.1;T@ [I"stop_forum_spam;T@E@ [I" stop_ie;TU;[I" 0.1.0.2;T@ [I"stopwatch;T@"@ [I"stopwords;T@!@ [I"stopwords-filter;T@@ [I" storable;T@@ [I" storage;T@|@ [I"storage_room;T@[:@ [I" storcs;T@E@ [I"store_base_sti_class;T@E@ [I"!store_base_sti_class_for_3_0;T@6@ [I"!store_base_sti_class_for_3_1;T@'@ [I"store_configurable;T@aP@ [I"stored_attribute;T@'@ [I"store_field;T@O@ [I"storefront;T@[@ [I" storenvy;T@6@ [I"storesapp-rb;T@ @ [I" storevil;TU;[I"0.6.0.0.20100823;T@ [I" storey;T@@ [I" stories;T@6@ [I"stories-cli;T@'@ [I"stories_sync;T@@ [I" storm;T@E@ [I"stormmq-client;T@n@ [I"stormpath-rails;T@@ [I"stormpath-sdk;T@x@ [I"storm-pointless;T@@ [I"stormrets;T@@ [I"StormRETS;T@x@ [I"stormtroopers;T@@ [I"stormy-cloud;T@6@ [I"story-helper;T@@ [I"story_with_ruby;T@@ [I" stowaway;T@[@ [I" str2time;T@@ [I" strabo;T@E@ [I"strace_me;T@@ [I" straides;T@+@ [I"straight_dope;T@@@ [I"straight_shooter;T@@ [I" strainer;T@@ [I"straitjacket;T@@ [I" strand;T@@ [I"strangebox;T@"@ [I" stranger;T@@ [I" strap;T@n@ [I"strapless;T@@ [I" strap_on;T@+@ [I" straps;T@`@ [I" strata;T@'@ [I"stratagem;T@,@ [I"stratify-base;T@+@ [I"stratify-foursquare;T@>x@ [I"stratify-garmin;T@>x@ [I"stratify-github;T@6@ [I"stratify-gowalla;T@>x@ [I"stratify-instapaper;T@>x@ [I"stratify-itunes;T@3 @ [I"stratify-rhapsody;T@>x@ [I"stratify-twitter;T@>x@ [I" stratus;T@@ [I"strava-api;T@l5@ [I"strawberry;T@y@ [I"strawberry_cough;T@@ [I"strawberry_log;T@@ [I" strawman;T@@ [I" strc;T@"@ [I" streak;T@@ [I" stream;T@@ [I" Stream;T@8@ [I"stream2tracks;T@@ [I" streama;T@@ [I"streamapi;T@"@ [I"streambot;T@@ [I"streamcap;T@@ [I"stream_grabber;T@+@ [I"streaming_join;T@@ [I" streamio;T@ @ [I"streamio-cli;T@u/@ [I"streamio-ffmpeg;T@- @ [I"streamio-magick;T@@ [I" streamit;T@V@ [I" streamly;T@+@ [I"streamly_ffi;T@@ [I"stream_prettifier;T@@@ [I" streams;T@@@ [I"streamsend;T@@@ [I"streamsend-ruby;T@E@ [I"street_address;T@@ [I"StreetAddress;T@@ [I"streetaddressch;T@E@ [I"streetcred;T@E@ [I"street_lights;T@@ [I" strelka;T@@ [I"strelka-cms;T@'@ [I"strelka-fancyerrors;T@E@ [I" stresser;T@@ [I"stress_reporter;T@@ [I" stretto;T@@ [I" strftime;T@@ [I" strict;T@!@ [I"stricter_global_usage;T@@ [I"strict-forgery-protection;T@V@ [I"strict_parameters;T@|@ [I" strike;T@@ [I"strikeiron;T@"@ [I"$strikeiron_address_verification;T@g@ [I"strikeroff-helpful_utils;T@@ [I"strikeroff-routing-filter;T@@ [I"!strikeroff-simple-navigation;T@@ [I" string19;T@"@ [I"string2hex;T@E@ [I"string_base64;T@@ [I"string_case_pl;T@@@ [I"string_cleaner;T@@ [I"string_comparision;T@'@ [I"string_date_accessors;T@V@ [I"string-eater;T@I@ [I"string-encrypt;T@@ [I"string-enumerable;T@'@ [I"string_enumerator;T@@ [I" stringer;T@'@ [I" stringex;T@@ [I"string_extend;T@'@ [I"string_extend_gustavoper;T@'@ [I"string_extendr;T@'@ [I"string_extensions_refi;T@@ [I"string_extensor;T@'@ [I"stringformat;T@'@ [I"string_formatter;T@@ [I" stringfu;T@@ [I"stringglob;T@@ [I"string_helpers;T@@ [I"stringincrement;T@'@ [I"string_interpolation;T@@ [I"string-irc;T@@ [I"string-mapper;T@@ [I"string_markdown;T@E@ [I"string_masker;T@'@ [I"string_master;T@@ [I"string_normalizr;T@[ @ [I"string-pad;T@'@ [I"string_parse_erb;T@`@ [I"string_proc;T@'@ [I"stringray;T@@ [I"string_replacer;T@'@ [I"string_ripper;T@@ [I"string_sanitize;T@@ [I"string_score;T@@ [I"string_stubber;T@@ [I"string-to;T@'@ [I"string_to_editor;T@@ [I"string_to_pinyin;T@@ [I"string_to_point;T@@ [I"string_to_sha1;T@@ [I"stringtrain;T@'@ [I"stringub-commons;T@@ [I" stringup;T@@ [I"stringup-puppet;T@E@ [I"string-urlize;T@@ [I"string_utf8;T@'@ [I"string_utility_belt;T@x@ [I"stringutils;T@'@ [I"string_utils;T@@ [I"string-utils;T@@ [I"stringvalidator;T@R @ [I"string-width-tanasinn;T@@ [I"string-witchy;T@'@ [I"string_z2h;T@@ [I"strip_attributes;T@@ [I"strip_control_chars;T@f!@ [I" stripe;T@PM@ [I"stripe_event;T@@ [I"stripe_rails;T@@ [I"stripe-rails;T@@ [I"strip_params;T@'@ [I" stripper;T@+@ [I" striuct;T@@ [I" strmask;T@@ [I" strobe;T@?@ [I"strockets;T@@ [I" strokedb;T@G@ [I" strokes;T@' @ [I"strongbox;T@@ [I"strongboxio;T@@ [I"strong_parameters;T@1@ [I"strong_parameters_rails2;T@@ [I"strongroom;T@E@ [I"strongspace;T@@ [I"strongtyping;T@@[@c@1@ [I"stropheruby;T@I@ [I"strophe_ruby;T@@ [@c@@S[I"strsyntax;T@@@ [I"struct2json;T@@ [I"structable;T@@ [I"struct-alias_member;T@E@ [I"struct-default_value;T@'@ [I"struct-for_pairs;T@'@ [I"struct-fx;T@`@ [I" structr;T@@ [I"structure;T@O@ [I"structuredtext;T@@ [I"structured_warnings;T@6@ [I"structuremap;TU;[I"2.6.2.0.20100731;T@ [I"structuremap.automocking;T@r@ [@2cU;[I" 2.6.1.1;T@ [I"structuremap.autonotify;T@I@ [I"structure_sql_to_migration;T@E@ [I"struct-validatable;T@'@ [I" strumbar;T@@ [I" stty;T@@ [I" stubb;T@6@ [I" stubber;T@`@ [I" stubble;T@6@ [I" stubborn;T@@ [I"stub_factory;T@'@ [I"stub-ntlm-helper;T@'@ [I" stubs;T@@ [I"stub_shell;T@@ [I" stud;T@V@ [I"studi-budi;T@@ [I" studio54;T@@ [I"studio_api;T@"@ [I"studio_game;T@@ [I"studio_game_2;T@@ [I"studio_game_alan_mccann;T@@ [I"studio_game_ap;T@@ [I"studio_game_ashby;T@@ [I"studio_game_bmr;T@@ [I"studio_game_dilip;T@@ [I"studiogame_ebertj;T@@ [I"Studio_game_KAS;T@8@ [I"studio_game_oas;T@@ [I"studio-game-ortau;T@@ [I"studio_game_pa;T@@ [I"studio_game_rc;T@@ [I"studio_game_ribar;T@@ [I"studio_game_riverron;T@@ [I"studio_game_rjb;T@@ [I"studio_game_rkc05282012;T@@ [I"studio_game_sah;T@@ [I"studio_game_SE;T@@ [I"studio_game_sirenus;T@@ [I"studio_game_tonig;T@@ [I"studio_game_UK;T@@ [I"studio_game_vi;T@@ [I"studio_game_wph;T@@ [I"studio_game_wshaddix;T@@ [I" study;T@'@ [I" stuff;T@'@ [I"stuff_arc;T@V@ [I"stuff-classifier;T@@ [I"stuffed_bunny;T@@ [I"stuff_to_do_plugin;T@x@ [I" stumb;T@`@ [I" stumie;T@@ [I" stunted;T@E@ [I" stupa;T@@ [I"stupid_auth;T@n@ [I"stupid_cache;T@@ [I"stupid_captcha;T@E@ [I"stupidedi;T@@ [I"stupid_formatter;T@@ [I"stupid-git-webhook;T@'@ [I"stupid_password;T@'@ [I"stupid_spam_protection;T@E@ [I"stuzo-recipes;T@@ [I" style;T@E@ [I"styled_input;T@@ [I"styled_inputs;T@@@ [I"styleguide;T@@ [I"style-guide;T@n@ [I"styleguide_rails;T@'@ [I"styleguides;T@@ [I" styler;T@@ [I"style-scanner;T@n@ [I"stylesheet_flipper;T@@ [I"style_train;T@x@ [I" styleus;T@@ [I"stylewithclass;T@@ [I"stylewithclasses;T@@ [I"stylexicon;T@E@ [I" styleyt;T@,@ [I" stylish;T@+@ [I" stylist;T@@@ [I"stylistic;T@@ [I" stylize;T@`@ [I" stylo;T@u!@ [I" stylus;T@@ [I"stylus_assets;T@@ [I" stylusc;T@'@ [I"stylus_rails;T@6@ [I"stylus-source;T@7@ [I" styx;T@@@ [I"su_attr_accessibility;T@@ [I"sub;T@@ [I"subaltern;T@@ [I" subcheat;T@x@ [I"subcommand;T@ @ [I"subcommander;T@@ [I"subcontractor;T@@ [I" subdb;T@1@ [I" sub_diff;T@@ [I"subdomain-fu;T@Y@ [I"subdomainitis;TU;[I" 0.9.32;T@ [I"subdomain_locale;T@`@ [I"subdomain_router;T@@ [I"subdomain_routes;T@@ [I"subdomainz;T@'@ [I" subduino;T@@ [I"subelsky_enhancements;T@@ [I"subelsky_power_tools;T@@ [I" subexec;T@I@ [I" subj3ct;T@E@ [I" subject;T@'@ [I"sublimate;T@@@ [I"sublimevideo_rails;T@@ [I" subload;T@@ [I" subly;T@@ [I"submariner;T@'@ [I" submerge;T@@ [I"submodule;T@`@ [I"sub_orbital;T@'@ [I"subprocess;T@1@ [I" sub_pub;T@@ [I" subrails;T@@ [I" subrip;T@@ [I" subscene;T@'@ [I"subscribed_to;T@@ [I"subscription_fu;T@x@ [I"subset_sum;T@@ [I"sub-setter;T@E@ [I"subset_validator;T@@ [I" subsonic;TU;[I" 3.0.0.4;T@ [I"subsonic-api;T@@ [I"subsonic-rb;T@!@ [I"substitution_solver;T@@ [I"subtitle_it;T@+@ [I"subtitle-library;T@'@ [I"subtitle_shifter;T@@ [I"subtitle_source;T@@ [I"subtitulos_downloader;T@X@ [I" subtle;T@@ [I"subtle-dynamic_icon;T@@ [I"subtle-graph;T@@ [I"subtle-lang;T@"@ [I"subtlepatterns;T@@ [I"subtrigger;T@@ [I" subtype;T@@ [I" subunit;T@I@ [I"subversion;T@@[I"subversion_notifier;T@@ [I" subwayrb;T@'@ [I" subwrap;T@@ [I" suby;T@x@ [I" subzero;T@@ [I" sucka;T@'@ [I" sucker;T@@ [I"sucreries;T@E@ [I"sudden_death;T@@ [I"sudden_motion_sensor;T@@9[@rd@@M[I" sudhir;T@@ [I" sudo;T@`@ [I"sudo_attr_accessibility;T@"@ [I"sudo_attributes;T@@ [I"sudojs-rails;T@,@ [I" sudoku;T@@ [I"sudokuhandler;T@+@ [I" sudokus;T@@ [I"sudokusolver;T@@ [I"sudoku_solver;T@@ [I"sudoku-solver;T@`@ [I"sudothinker-eeepub;T@@ [I" sufia;T@@ [I" sugar;T@5d@ [I" sugarcrm;T@z@ [I"sugarcrm_emp;T@[@ [I"sugarcube;T@C"@ [I"sugarfree-config;T@O@ [I"sugar-high;T@n@ [I"sugar_mama;T@'@ [I"sugar_png;T@x@ [I"sugar-rails;T@s@ [I"sugestio-ruby;T@@ [I"suggest-db-indices;T@@ [I"suggester;T@6@ [I"suggestor;T@@ [I"sugoi-mail;T@@ [I" suhyo;T@@ [I" suicide;T@@ [I" suid;T@@ [I" suit;T@+@ [I" suitcase;T@@ [I" suite;TU;[I" 0.1.4.6;T@ [I"suj_hiya_vakathanam_sujith;T@'@ [I"suj-kana-validator;T@'@ [I"suj_my_string_extend;T@'@ [I"sum;T@@@ [I" sumbur;T@@@[@d@@@ [I"sumdog-geoip;T@n@ [I" sumhash;T@E@ [I" sumitup;T@|@ [I" summa;T@3@ [I"summarize;T@@ [I"summarizer;T@@@ [I" summary;T@n@ [I"summary_judgement;T@}@ [I"summaryse;T@@ [I" summer;T@@ [I"summer_residents;T@@ [I" summon;T@@ [I" summoner;T@+@ [I"summon-refworks;T@'@ [I"sum-notify;T@@ [I" sumo;T@I@ [I" sumodev;T@+@ [I"sumodev_deploy;TU;[I" 0.2.8.1;T@ [I"sumskyi-activesalesforce;T@@ [I"sumskyi-bluepill;TU;[I" 0.0.42.1;T@ [I"sumskyi-google-checkout;T@@ [I" sum_sum;T@@ [I" sundae;T@ @ [I"sundawg_contacts;T@'@ [I"sundawg_country_codes;T@n@ [I"sundawg_geonames_client;T@'@ [I"sundawg_music_rec;T@'@ [I"sundawg_premailer;T@'@ [I"sundbp-dm-polymorphic;T@-/@ [I"sundbp-extlib;T@@ [I"sundbp-whenever;T@@ [I" sundial;T@@ [I"sundysilence;T@"@ [I"sunedison-cap;T@@ [I"sunflower;T@@ [I"sunil_string;T@'@ [I" sunlight;T@@ [I"sunnytrail;T@@ [I" sunraise;T@|@ [I" sunrise;T@`@ [I"sunrise-cms;T@@ [I"sunrise-comments;T@@ [I"sunrise-core;T@I@ [I"sunrise-deploy;T@E@ [I"sunrise-feedbacks;T@@ [I"sunrise-file-upload;T@@ [I"sunrise-locales;T@@ [I"sunrise-posts;T@|@ [I"sunrise-questions;T@@ [I"sunrise-scaffold;T@I@ [I"sunrise-votes;T@@@ [I"sunrise-widgets;T@`@ [I" sunsap;T@@ [I"sunscraper;T@N@ [I" sunset;T@'@ [I" sunshine;T@@ [I"sunshowers;T@@ [I" sunspot;T@ @ [I"sunspot4r;T@'@ [I"sunspot_activerecord;T@@ [I"sunspot_cell;T@@@ [I"sunspot_cell_jars;T@R @ [I"sunspot_index_queue;T@T @ [I"sunspot_matchers;TU;[I" 1.3.0.2;T@ [I"sunspot_matchers_testunit;T@@ [I"sunspot_mongo;T@@ [I"sunspot_mongoid;T@@ [I"sunspot_mongomapper;T@"@ [I"sunspot_mongo_mapper;T@`@ [I"sunspot_plus;T@@ [I"sunspot-queue;T@e@ [I"sunspot_rails;T@ @ [I"sunspot-rails-failover;T@@ [I""sunspot-rails-http-basic-auth;T@E@ [I"sunspot_rails_mongoid;T@u@ [I"sunspot_rails_rbg;T@ @ [I"sunspot-rails-tester;T@"@ [I"sunspot_rbg;T@ @ [I"sunspot_solr;T@ @ [I"sunspot_solr-xaop;T@u@ [I"sunspot_stats;T@@ [I"sunspot_submodel_index;T@"@ [I"sunspot_test;T@x@ [I"sunspot_with_activeuuid;T@"@ [I"sunspot_with_kaminari;T@@ [I"sunteya-soap4r;TU;[I" 1.5.8.0;T@ [I" sun_time;T@E@ [I"sun-times;T@@ [I" suntrack;T@"@ [I" sunzi;T@@ [I"sup;T@~@ [I"superators;T@e@ [I"superators19;T@@ [I"superauther;T@E@ [I"&super_awesome_resource_serializer;T@W@ [I"SuperCaller;T@@ [I"supercharger;T@'@ [I"superclass_hash;T@E@ [I"superconductor;T@"@ [I"super_crud;T@@ [I"superdupe;T@@ [I"super_duper_string;T@@ [I"super-ebs-pruner-9000;T@u@ [I"super_exception_notifier;T@mj@ [I"superfeedee;T@`@ [I"superfeedr-blather;T@I@ [I"superfeedr-em-mysql;T@@ [I"superfeedr-em-redis;T@@ [I"superfeedr-nokogiri;TU;[I"1.4.0.20091116183308;T@ [I"superfeedr-rb;T@@ [I"superfeedr-ruby;T@@ [I"superfeedr-sax-machine;T@K,@ [I"super_finder;T@'@ [I"superhash;T@@ [I"super_hash;T@@ [I"super_list;T@@ [I"super_map;T@@ [I"supermarket;T@@ [@e@@[I"super-mega-slideshare;T@@@ [I"+super_mega_ultra_capistrano_extensions;T@n@ [I"super_migration;T@'@ [I"supermodel;T@1@ [I"super-namecase;T@N@ [I"supernova;T@u/@ [I"supernova-core;T@'@ [I"supernova-ts;T@@ [I"super-poller;T@@ [I"superp-phone;T@u@ [I"super_profile;T@E@ [I"super_proxy;T@@ [I"SuperRewards;T@@ [I"supersave;T@@ [I"super_simple_admin;T@[@ [I"super_stamper;T@@ [I"super_state;T@x@ [I"super_sti;T@@ [I"superstring;T@'@ [I"superstyles;T@@ [I"super_tenant;T@E@ [I"superterm;T@'@ [I"supervise;T@s@ [I"supervisor;T@ @ [I"supply_drop;T@@ [I" support;TU;[I" 0.18;T@ [I"supporting_cast;T@'@ [I" supr;T@@ [I" suprails;T@@ [I" suprdate;T@@ [I" supreme;T@@ [I" sup_tag;T@@ [I"surat-aws-s3;T@'@ [I" surety;T@!@ [I" surface;T@@ [I" surge;T@'@ [I"surgicalstrike;T@@ [I"surgical_strike;T@@ [I"SurgicalStrike;T@'@ [I"suri_password;T@@ [I"suri_password_strength;T@@ [I" surpass;T@@ [I"surrogate;T@7@ [I" surround;T@'@ [I" surus;T@@ [I"surveillance_authority;T@@ [I"survey_builder;T@@ [I"surveygizmo;T@E@ [I"survey-gizmo-ruby;T@Q@ [I" surveyor;T@N@ [I"survey_says;T@E@ [I" survival;T@'@ [I"survivalkit;T@@ [I"suse-git-pulls;T@R @ [I" sushi;T@E@ [I"sushifish;T@Q@ [I"suspenders;T@@ [I"susuwatari;T@@ [I" susy;T@W@ [I"sutto-oauth;T@@ [I"suung-undress;T@[@ [I"svanzoest-aws-s3;TU;[I"0.5.1.1262206620;T@ [I"svanzoest-bj;T@@ [I"svc;T@E@ [I" svdir;T@!@ [I"svenaas-will_paginate;T@@ [I"svenaas-woulda;T@@ [I",svenfuchs-devise_oauth2_authenticatable;T@+@ [I" svengali;T@'@ [I"svg;T@"@ [I"svg2glyph;T@E@ [I" svg2pdf;T@@ [I"svg_graph;T@D@ [I"svg-graph;T@W@ [I"svg-graph19;T@$@ [I"svg-render;T@`@ [I" svicss;T@W@ [I"svlt-ruby-geonames;T@^@ [I" svmlab;T@@ [I"svmredlight;T@`@ [I"svm_toolkit;T@@*[@gf@I"universal-java-1.7;T[I"svn;T@@ [I" svn2git;T@t@ [I" svn2rss;T@@ [I" svnauto;T@@ [I"svn-backup;T@I@ [I"svnbranch;T@@ [I"svn_branch;T@@ [I"svn-campfire-notifier;T@@ [I"svn-command;T@X)@ [I"svn_conf_generator;T@@ [I"svn-fixture;T@@ [I"svn_hooks;T@"@ [I"svn-hook-tools;T@@ [I"svnignore;T@'@ [I" svn_log;T@E@ [I" SvnLog;T@@ [I" svnproj;T@@ [I"svn_project;T@@ [I"svn_tools;T@@ [I"svn-transform;T@@ [I" svnutils;T@`@ [I" svn_wc;T@@ [I"svn_wc_tree;T@@ [I"svp;T@@@ [I" svpply;T@'@ [I"svt-recorder;T@@ [I" svutil;T@@ [I" svxbox;T@@ [I" swack;T@'@ [I" swaf;T@`@ [I" swagger;T@@ [I" swak;T@1@ [I" swallow;T@E@ [I" swap;T@!@ [I" swarm;T@'@ [I" swat;T@@ [I" swatch;T@@ [I"swd;T@@ [I" swe4r;T@'@ [I" swearjar;T@@ [I"swear-jar;T@@ [I"sweatshop;T@ @ [I"sweat_shop;T@@ [I"swedbanker;T@@ [I"SwedishTV;T@@ [I" sweeper;T@@ [I" sweet;T@@ [I" sweetgui;T@"@ [I" sweetie;T@@ [I" sweetjs;T@@ [I"sweet-lang;T@@ [I"sweetloader;T@1@ [I"sweetlogs;T@@ [I" sweetsie;T@`@ [I" sweettea;T@R @ [I" SweetTea;T@@ [I"sweety_backy;T@@ [I"sweph4ruby;T@'@ [I"swf_converter;T@@ [I"swf_ditty;T@@ [I"swf_embed;T@@ [I" swf_file;T@@ [I" swf_fu;T@+@ [I"swfheader;TU;[I" 0.22;T@ [I" swfmill;T@@ [I"swfobject-rails;T@@ [I"swf_recompress;T@@ [I" swf_ruby;T@@ [I"swf_train;T@@ [I" SwfUtil;T@@ [I" swiff;T@'@ [I" swift;T@@ [I" swift_db;T@|@ [I"swift-db-mysql;T@I@ [I"swift-db-postgres;T@@ [I"swift-db-sqlite3;T@6@ [I"swift_file;T@@ [I"swiftiply;TU;[I" 0.6.1.1;T@ [I"swift-manager;T@"@ [I" swiftype;T@"@ [I"swiftype-rb;T@E@ [I" swim;T@E@ [I" swin;TU;[I"2004.03.14;T@1[I"swineherd;T@@ [I"swineherd-fs;T@@ [I" swing;T@. @ [I" swing4rb;T@@ [I" swinger;T@@ [I" swint;T@6@ [I" swiper;T@'@ [I" swirl;T@@ [I" swish;T@@ [I" swishe;T@!@ [I"swiss_knife;T@W@ [I"swissmatch;T@@ [I"swissmatch-directories;T@'@ [I"swissmatch-location;TU;[I"0.0.1.201208;T@ [I"swissmatch-rails;T@@ [I"swissmatch-street;T@'@ [I"swissmedic_diff;T@6@ [I"swissparser;T@@ [I"swistaczek-localtunnel;T@@ [I"swistak-delocalize;T@@ [I"switch_access-rails;T@@ [I"switchblade;T@@ [I"switchboard;T@@ [I" switcher;T@@ [I"switcheroo;T@'@ [I" switches;T@@ [I"switch-exception;T@'@ [I"switch_file;T@@@ [I" switchrb;T@'@ [I"switchtower;T@@ [I"switchtower-ext;T@@ [I"switch_user;T@e@ [I"switchvox;T@@ [I" switchy;T@I@ [I"switzerland;T@'@ [I" swivel;TU;[I" 0.0.175;T@ [I"sword2ruby;T@@ [I" swot;T@^@ [I"sws;T@R @ [I"swt;T@B@[@ng@X@ [I"swt_federation;T@'@ [I"swttt-gem;T@ @ [I"swung-weave-buildr;TU;[I" 1.0.19;T@ [I" swxruby;T@D@ [I" sx12;T@N@ [I"sxp;T@@ [I" sxrb;T@@ [I"syaroushi;T@@ [I" syaso;T@'@ [I" sybil;T@@ [I" syck;T@@ [I" sycl;T@@ [I" syde;T@E@ [I" sydparse;T@N@ [I"syllabify;T@@ [I"syllables;T@@@ [I"syllabs-api;T@@ [I"sylvaing-seer;T@@ [I"sylvester;T@'@ [I" symbiont;T@@ [I" symbolic;T@@ [I"symbolic-math;T@@ [I"symbolism;T@'@ [I"symbolize;T@#@ [I"symbolize_all;T@E@ [I"symbolizify;T@@ [I"symbolmatrix;T@N@ [I" symbols;T@'@ [I"symboltable;T@@ [I" syme;T@'@ [I" symilaa;T@,@ [I"symlink_fast;T@@ [I"symlink-gem;T@ A@ [I"symmetric-encryption;T@e@ [I"symmetric_gpg;T@@ [I" symsym;T@@ [I" synack;T@@ [I" synapse;T@'@ [I"synapse_redis_logger;T@@ [I"synapses-cas;T@ @ [I"'synapses-tinymce-rails-imageupload;T@`@ [I"synapses-validators;T@@ [I" synaptic;T@'@ [I"synaptic4r;T@g@ [I" sync;T@@ [I" syncache;T@@ [I"syncassets_r2;T@@ [I"syncassets_r3;T@@ [I"sync_attr;T@`@ [I"sync-defer;T@ @ [I"sync_enumerator;T@@ [I" syncer;T@'@ [I" syncftp;T@@ [I"synchronicity;T@@ [I"synchroniser;T@@ [I"synchronizable;T@"@ [I"synchronize;T@@ [I"synchrony_sunspot;T@E@ [I"synchrotron;T@"@ [I" syncro;T@@ [I"sync_service;T@@ [I" syncwrap;T@@ [I"syndicate;T@'@ [I"syndication;T@@ [I"synecdoche;T@`@ [I" synergy;T@7@ [I"synergy_bootstrap_theme;T@"@ [I"synergy_default_theme;T@@ [I"synergy_i18n;T@@ [I"synergy_mainpay;TU;[I" 0.70.1;T@ [I"synergy_russian;T@^@ [I" synfeld;T@@ [I"synonym-finder;T@I@ [I" synopsis;T@@ [I" synoptic;T@@ [I" synoptik;T@'@ [I" synqa;T@@ [I" synrp;T@N.@ [I" syntax;T@@ [I" syntaxer;T@@ [I"syntax_file;T@X@ [I"syntax_fix;T@@ [I" syntaxi;T@@ [I"syntax-on;T@@ [I" synth;T@@ [I"synthesis;T@^@ [I"synthesize;T@s@ [I"syoboi_calendar;T@@@ [I" syrup;T@ @ [I"sys;T@[ @ [I" sysadmin;T@6@ [I"sys-admin;T@@[@-h@@[@-h@e@ [@-h@ @ [I" sysaid;T@`@ [I"sysarcana-data;T@@ [I"sysbench-graph;T@E@ [I" syscalls;T@@ [I"syscalls-map;T@@ [I" syscmd;T@@ [I" sys-cpu;T@@dn[@>h@@[@>h@@[@>h@y@ [@>h@y@ [@>h@@[@>h@X@ [@>h@X@[I" sysdog;T@"@ [I" sysexits;T@@ [I"sys-filesystem;T@@[@Kh@@[@Kh@@ [@Kh@@ [I" sys-host;T@@[@Ph@@[@Ph@@ [@Ph@@ [I" sysinfo;T@@ [I"syslog2logan;T@@ [I"syslog_client;T@|@ [I"syslogger;T@@ [I"sys_logger;T@@ [I"syslogger-alex;T@@ [I"syslog_helpers;T@@ [I"syslog-logger;T@1@ [I"SyslogLogger;T@@ [I"syslog-ml-logger;T@<@ [I"syslog_protocol;T@' @ [I"syslog-sd;T@@ [I"syslog-shipper;T@s@ [I"sys-proctable;T@u/@[@oh@u/@v[@oh@u/@dn[@oh@u/@ [@oh@@S[@oh@I"sparc-solaris-2.10;T[@oh@- @ [@oh@- I"x86-solaris-2.10;T[@oh@- @[@oh@- I"x86-freebsd-7;T[@oh@- I"x86-darwin-8;T[@oh@' I"universal-solaris;T[@oh@' @[@oh@' I"universal-freebsd;T[@oh@' I"universal-mingw;T[@oh@' @[@oh@' @M[I" syspy;T@@ [I" system;T@6@ [I"system-bang;T@@ [I"system-builder;T@<<@ [I"system_control;T@@ [I"systemd-journal;T@E@ [I"system-getifaddrs;T@|@ [I"systeminformation;T@`@ [I"system_lock;T@e@ [I"system-metrics;T@,@ [I"system_pay;T@@ [I"system_timer;T@u"@ [I"SystemTimer;T@@ [I"system-timer19;T@@ [I" systemu;T@d@ [I"systemu_j;T@u@ [I"sys-uname;T@@[@h@&@[@h@@[@h@e@ [@h@e@ [I"sys-uptime;T@@dn[@h@@[@h@J@[@h@J@ [@h@Y@[@h@@ [@h@@ [I" sysuuid;T@n@ [I"sys_viewer;T@E@ [I" sysvipc;T@@ [I" SysVIPC;T@B@ [I" szaru;T@`@ [I"szilm-validates_timeliness;T@o@ [I"sztywny-smsonrails;T@@ [I"t;T@ @ [I"t2etranslator;T@@ [I"t2-server;T@' @ [I" t2-web;T@g@ [I"t9n;T@x@ [I"tab_builder;T@'@ [I" tabby;T@@ [I" tabelr;T@V@ [I" tabit;T@x@ [I" tabl;T@@@ [I" table;T@`@ [I" tableasy;T@@ [I"table_builder;T@@ [I"table_cloth;T@@ [I" tablecon;T@'@ [I"table_diff;T@'@ [I"table_display;T@@ [I"tableficate;T@@ [I"table_for;T@@ [I"table-for;T@O@ [I"table_for_collection;T@ @ [I"table_for_helper;T@c@ [I"table-formatter;T@@@ [I"table_form_builder;T@@ [I" table_fu;T@@ [I"table_generator;T@@@ [I"tablegrok;T@@ [I"table_helper;T@I@ [I"table_helpers;T@D@ [I" tableize;T@'@ [I"tableizer;T@@ [I"tableless_model;T@@ [I"tableling;T@@ [I"tableling-rails;T@n@ [I"tablemaker;T@'@ [I"table_maker;T@E@ [I" table_me;T@@ [I"table_parser;T@@ [I"table_print;T@@ [I" tabler;T@@ [I"table_setter;T@@ [I"table_setter_generator;T@@ [I"table_syncer;T@@ [I"tabletastic;T@@ [I" tabletop;T@x@ [I"tableview;T@@ [I"table_warnings;T@@ [I"tablinate;T@@ [I" tablizer;T@@ [I" tabloid;T@'@ [I" tablr;T@@ [I" tab_menu;T@E@ [I" tabnav;T@N@ [I"tabs_on_rails;T@ @ [I" tabster;T@@ [I" tabtab;T@' @ [I" tabula;T@'@ [I" tabular;T@n@ [I"tabularasa;TU;[I" 0.2.4.5;T@ [I"tabular_data;T@@ [I"tabularize;T@ @ [I"tabular-text;T@'@ [I" tabulate;T@@@ [I" tabulatr;T@@ [I" tabulous;T@@ [I"tac;T@@ [I"tacacs_plus;T@@ [I" tac-cli;T@@ [I" tac_gem;T@E@ [I" tach;T@V@ [I" tache;T@+@ [I"tachometer;T@'@ [I" tack;T@'@ [I" taco;T@'@ [I"tactful_tokenizer;T@E@ [I"tactical_fighter;T@@ [I" tactless;T@'@ [I" tadpole;T@@ [I"tag;T@x@ [I" tagalong;T@6@ [I" tagalus;T@@ [I" tagcloud;T@@ [I"tagcloudbase;T@@@ [I"tag_comparer;T@'@ [I"tagcrumbs;T@@ [I"tagelizer;T@+@ [I" tagen;T@@ [I" tagenjs;T@'@ [I"tag-extractor;T@@ [I" tagfile;T@"@ [I" tag-fog;T@@ [I"tag_formatter;T@@ [I" tagfu;T@@ [I" taggable;T@@ [I"taggable_cache;T@@ [I" taggart;T@V@ [I" tagged;T@@ [I"tagged-cache;T@@ [I"tagged_logger;T@@ [I"tagged_logging;T@@@ [I" tagger;T@@@ [I" taggie;T@@ [I"taggregator;T@@@ [I"tag_helper;T@@ [I"tagify_string;T@ @ [I" tagit;T@@ [I" tag_it;T@'@ [I" tag-it;T@@ [I" taglib2;T@|@ [I"taglib-heroku;T@.@ [I"taglib-ruby;T@@ [@i@@ [I" taglish;T@@ [I" taglob;T@x@ [I" taglog;T@E@ [I" tagme4r;T@'@ [I"tagomatic;T@g@ [I"tagometer;T@@ [I"tagregate;T@`@ [I" tags;T@@ [I"tags4free;T@6@ [I" tagstand;T@'@ [I" tagtical;T@l@ [I" tagtools;T@@ [I"tagtreescanner;T@@ [I" tagurit;T@R @ [I" tagz;TU;[I" 9.6.0;T@ [I" tai64;T@@ [I" taifu;T@'@ [I" tailer;T@@ [I"tail_from_sentinel;T@'@ [I" tail-log;T@E@ [I" tailor;T@x@ [I"tailored-etsy;T@I@ [I"tailor-hook;T@@ [I" tails;T@@ [I"ta-indicator;T@@ [I"tainted_hash;T@'@ [I"taipeiHotel;T@E@ [I"taip_parser;T@'@ [I" tairu;T@- @ [I" taka;T@'@ [I"takakura_test;T@'@ [I" takami;T@'@ [I"take-a-look;T@!@ [I"take_a_memo;T@@ [I":take_my_wanky_input_and_make_it_exactly_how_i_want_it;T@'@ [I" takeoff;T@`@ [I" taketo;T@6@ [I"tal;T@@ [I"talaris-right_aws;T@@ [I"!talentbox-delayed_job_sequel;T@@ [I"talentbox-docsplit;T@J@ [I"talentbox-sequel-rails;T@[@ [I"talentbox-unidecoder;T@x@ [I"talentbox-whenever;T@n@ [I"talia_core;T@X@ [I"talib_ruby;T@@ [I" talker;T@"@ [I"talkfilters;T@@ [I"talk_in_irc_channel;T@@ [I" talks;T@x@ [I"tallakt-picopc;T@@@ [I"tallakt-picsort;T@E@ [I"tallakt-plcutil;T@@ [I" tally;T@@ [I"tam;T@u@ [I" Tamar;T@:@ [I"tamarillo;T@@ [I"tambur-client;T@'@ [I"tamed_beast;T@@ [I"tame_the_beast;T@@ [I"tami-client;T@`@ [I" tampon;T@@ [I" tamtam;T@@ [I" tandem;T@,@ [I" tane;T@@ [I"tanga_namespaced_helpers;T@@ [I"tangerine;T@@ [I" tango;T@=@ [I"tango-client;T@@ [I" tank;T@@ [I" tanker;T@@ [I" tankobon;T@@ [I"tanning_bed;T@`@ [I"tanning_bed_solr;T@'@ [I" tannins;T@6@ [I"tanraya-playmo;T@@ [I" tanuki;T@x@ [I"tanzeeb-rufus-scheduler;TU;[I" 2.0.7.2;T@ [I" taobao;T@'@ [I"taobao_api;T@@ [I"taobao_fu_reload;T@x@ [I" taobaorb;T@' @ [I"taotaoruby;T@'@ [I"tap;T@@ [I" tape;T@'@ [I" tap-gen;T@@ [I" tap-http;T@x@ [I" tapi;T@@ [I" tapioca;T@'@ [I"tap-mechanize;T@@ [I" tapout;T@@ [I" tap_out;T@E@ [I" tapp;T@@ [I"tapp-awesome_print;T@@ [I" tappie;T@@ [I" tappy;T@ @ [I" taps;TU;[I" 0.3.24;T@ [I"tap-server;T@@ [I" tapsilog;T@@ [I"taps-jruby;T@v+@ [I"tap-suite;T@@ [I"tap-tasks;T@@ [I" tap-test;T@X@ [I"tap-ubiquity;T@x@ [I"taq-sitemapper;T@"@ [I"taqtile-bootstrap-rails;T@@ [I"tar2rubyscript;T@@ [I" tarai;T@@ [I"tarantool;TU;[I" 0.4.3.3;T@ [I"tarantool-record;T@@ [I"tarantula;T@@ [I"tarantula-rails3;T@@ [I" tardis;T@'@ [I" target;T@'@ [I"target_api;T@'@ [I"target_practice;T@@ [I"target_weight;T@@ [I"tarikjn-railroad;T@@ [I" tarot;T@1@ [I"tarpaulin;T@@ [I" tarpipe;T@`@ [I" tarruby;T@|@ [@j@|@[I"'tarsolya-declarative_authorization;T@JZ@ [I" tart;T@@ [I" tartan;T@@ [I" tartarus;T@f<@ [I" tarte;T@@@ [I" task;T@'@ [I" taskbot;T@@@ [I"taskclient;T@@ [I" tasker;T@@ [I" taskish;T@R @ [I"taskjuggler;T@c@ [I" tasklet;T@@ [I" tasklist;T@@ [I"task-list;T@!@ [I"tasklogger;T@E@ [I"task_manager;T@@ [I"task-manager;T@|@ [I"taskmapper;T@@ [I"taskmapper-basecamp;T@X@ [I"taskmapper-bugherd;T@@ [I"taskmapper-bugzilla;T@@ [I"taskmapper-fogbugz;T@x@ [I"taskmapper-github;T@D@ [I"taskmapper-jira;T@@ [I"taskmapper-kanbanpad;T@@ [I"taskmapper-lighthouse;T@- @ [I"taskmapper-mingle;T@@ [I"taskmapper-pivotal;T@@ [I"taskmapper-rally;T@@ [I"taskmapper-redmine;T@@ [I"taskmapper-trac;T@@ [I"taskmapper-unfuddle;T@X@ [I"taskmapper-zendesk;T@@ [I"taskmaster;T@@ [I"task-orchestrator;T@n@ [I"task-orchestrator.gemspec;T@'@ [I" taskr;T@x@ [I"taskrabbit;T@@ [I" tasks;T@@ [I"task_tempest;T@@ [I"taskwarrior;T@@ [I"taskwarrior-web;T@@ [I"task_with_airbrake;T@@ [I" tassadar;T@@ [I"tassadar-server;T@@ [I"tasteful_routes;T@1@ [I" tasty;T@@ [I"tasty-cucumber-client;T@ @ [I" tastyrb;T@@@ [I"tatango-sms;T@@ [I" ta-te-ti;T@E@ [I" tattle;T@@ [I"tattletail;T@@ [I"tattletale;T@@ [I" tattoo;T@@@ [I"tau;T@@ [I" taulukko;T@@ [I" taunt;T@@ [I" tavern;T@@ [I"taverna-baclava;T@@ [I"taverna-scufl;T@@ [I"taverna-t2flow;T@@ [I"tavern-history;T@'@ [I"tavern-redis;T@E@ [I"taxamatch_rb;T@ @ [I"tax_cloud;T@@ [I" TaxCloud;T@@ [I" taxedo;T@"@ [I" taxi;T@'@ [I" taxis;T@'@ [I" taxman;T@'@ [I" taxonifi;T@@ [I" taxonomy;T@'@ [I"tay;T@@ [I" tayu;T@E@ [I"taz;T@'@ [I" taza;TU;[I" 0.9.1.2;T@ [I"tb;T@D@ [I"tb_branch_db;T@'@ [I" tb-cli;T@@ [I"tbh-scaffolds;T@"@ [I" tbikc;T@E@ [I"tbm;T@@@ [I" tbone;T@@ [I"tbone-devise;T@@ [I" tbooster;T@@ [I"tb_release;T@@ [I"tc;T@@ [I" tc4r;T@@ [I"tccbuilder;T@@ [I"tc-client;T@"@ [I""tchandy-machinist_mongomapper;T@MM@ [I"tchandy-minion;T@@ [I"tckimlikdogrulama;T@[@ [I"tcl;T@'@ [I" tclog;T@@ [I" tclone;T@@ [I" tconsole;T@N'@ [I" tcorps;T@`@ [I"tcpsocket-wait;T@@ [I"tcp_syslog;T@@ [I"tcravit_ruby_lib;T@V@ [I"td;TU;[I" 0.10.65;T@ [I"td2planet;T@@ [I"tdb;T@@ [I"td-client;TU;[I" 0.8.41;T@ [I"tdd;T@@ [I"tdd_deploy;T@@ [I" tddium;T@l@ [I"tddium_client;T@@ [I"tddium-linecache19;T@(@ [I"tddium-old;T@@ [I"tddium-preview;T@[@ [I"tddium_reporting;T@@ [I"tddium-ruby-debug-base19;T@~@ [I"tddium_status;T@@ [I"tddium-sys-proctable;T@' @%N[@k@' @ [@k@' @S[@k@' @([I"tdev_kiwi;T@@ [I"tdev_metrics;T@'@ [I"tdev_shortener;T@@ [I" tdiff;T@@ [I"td-logger;T@ @ [I"tdo;T@@ [I" tdoc;T@ @ [I" tdp4r;T@@ [I" te2ak;T@'@ [I"tea;T@@ [I" teabag;T@_@ [I"teachmehowtomakearubygem;T@'@ [I"teachstreet;T@@ [I" teacup;T@@ [I"teacup-rails;T@@ [I"tealeaves;T@'@ [I"teambox-client;T@@ [I"teambox-permalink_fu;T@@ [I"teambox-things-sync;T@6@ [I"teamcity-client;T@@ [I"teamcity-rest-client;T@@ [I"teamcity_service_messages;T@E@ [I"team-cymru;T@6@ [I" teamocil;T@@ [I"team_page;T@'@ [I" teapot;T@@ [I"teascript;T@@ [I" teaspoon;T@'@ [I" tecepe;T@'@ [I" tech-angels-resque-throttle;T@}@ [I"tech-angels-typhoeus;T@@ [I"techarch-newrelic_rpm;TU;[I" 2.10.2.3;T@ [I" techcor;T@@ [I"technical_graph;T@@ [I"technorati;T@'@ [I"tec_upload;T@'@ [I" ted2srt;T@E@ [I" ted_api;T@@ [I"tedkulp-freshbooks.rb;TU;[I" 3.0.24;T@ [I"tee;T@@ [I"teejayvanslyke-gruff;T@@ [I"teejayvanslyke-twitter;T@A@ [I" teeth;T@@ [I" tefil;T@@ [I" teien;T@E@ [I" teienlib;T@"@ [I" teius;T@@[@k@@ [I" tekeya;T@n@ [I" telapi;T@@ [I"telasi-ruby;T@'@ [I" tele;T@@ [I" TeleAuth;T@@ [I"telecaster;T@6@ [I"telegraph;T@@ [I"telenorsms;T@@ [I" teleport;T@@ [I"teleportd;T@`@ [I" telesign;T@E@ [I"telesocial;T@@ [I"telewatts_sender_support;T@@ [I" teliaxr;T@E@ [I" tell;T@'@ [I" tellme;T@@ [I"tell_me_about_it;T@"@ [I"tellmewhen;T@@ [I" telnet_q;T@@ [I" temaki;T@'@ [I" temando;T@+@ [I" tem_drm;T@'@ [I"tem_mr_search;T@@ [I"tem_multi_proxy;T@@ [I"tem_multi_updater;T@R @ [I"tem_openssl;T@@ [I" temp;T@"@ [I" tempatra;T@@ [I" tempdir;T@'@ [I" temper;T@@ [I"temperature;T@@ [I" tempest;T@'@ [I"tempestas;T@E@ [I"tempfile_for;T@"@ [I" tempgit;T@@ [I" temping;T@z@ [I" templar;T@@ [I" template;T@O@ [I"template_builder;T@@ [I"template_configurator;T@@ [I"template-inheritance;T@[ @ [I"template_parser;T@@ [I"templater;T@@ [I"template_refi;T@@ [I"template_rider;T@E@ [I"templates;T@I@ [I"templates_for;T@'@ [I"template_streaming;T@@ [I"template-switcher;T@'@ [I"template-test;T@@ [I"template_wrapper;T@`@ [I"templator;T@I@ [I" temple;T@u @ [I"templebars;T@I@ [I"templette;T@@ [I" tempo;T@'@ [I" tempodb;T@J@ [I" temporal;T@@ [I"temporal_object;T@1@ [I"temporal-rails;T@@ [I"temporals;T@@ [I"temporaries;T@@ [I"temporary-wirble;T@+@ [I" tempr;T@+@ [I" tempus;T@@ [I" tem_ruby;T@ @ [I" tenacity;T@@ [I"tenantable;T@'@ [I" tencent;T@E@ [I"tencentpay;T@'@ [I" tender;T@R @ [I"tender-api;T@'@ [I"tender_import;T@n@ [I"tenderloin;T@"@ [I"tenderlove-usb;T@@ [I"tender_summary;T@N@ [I"tendersync;T@G @ [I" tending;T@@ [I" tendril;T@E@ [I"teneo_client;T@@ [I"tengine_core;T@@ [I"tengine_event;T@@ [I"tengine_job;T@@ [I"tengine_job_agent;T@@ [I"tengine_rails_plugin;T@@ [I"tengine_resource;T@@ [I"tengine_support;T@@ [I"ten_hs_server;T@@ [I" tenjin;T@@ [I" tenpay;T@@ [I" tens3;T@@ [I" tentacle;T@6@ [I"tent-apidoc;T@'@ [I"tent-client;T@'@ [I"tent-client-joebadmo;T@'@ [I" tentd;T@'@ [I"tentd-admin;T@'@ [I"tentjs-rails;T@@ [I"tent-schemas;T@'@ [I"tent-status;T@'@ [I"tent_steak;T@@ [I"%teonimesic-translated_attributes;T@M+@ [I"tepco_usage_api;T@x@ [I" tequila;T@I@ [I"terc_parser;T@@ [I" terdes;T@'@ [I" teriyaki;T@O@ [I"term-ansicolor;T@ @ [I"term-ansicolor-hi;T@ @ [I"term-ansicolor-logger;T@@ [I"termcolor;T@@ [I"term-extract;T@@ [I"term_extraction;T@@ [I"term-extraction;T@+@ [I"term-extractor;T@@ [I"terminal_color;T@'@ [I"terminal-color;T@@ [I"terminal-display-colors;T@E@ [I"terminal_helpers;T@@ [I"terminal_markup;T@@ [I"terminal_multiplexer;T@@ [I"terminal-notifier;T@@ [I"terminal-notifier-guard;T@@ [I"terminal-progress_bar;T@E@ [I"terminal-share;T@@@ [I"terminal-size;T@@ [I"terminal-table;T@Q%@ [I"terminal_velocity;T@"@ [I"terminator;T@"@ [I"terminitor;T@@ [I" terminus;T@@ [I"terminus_spec;T@@ [I" termios;T@@ [I"termistat;T@E@ [I" termite;T@@ [I"termitter;TU;[I"2010.11.16;T@ [I" termnote;T@@ [I" termtter;T@ё@ [I" term_ui;T@'@ [I" termular;T@+@ [I" termup;T@+@ [I" tern;T@@ [I"ternary_logic;T@@ [I" terra;T@'@ [I"terracycle;T@@ [I"terraform;T@@ [I"terraformation;T@I@ [I" terrarum;T@@@ [I"terrible_timeout;T@@ [I"terrimporter;T@!@ [I"terrys-spec-helpers;T@@ [I" tesco;T@@ [I" tesla;T@'@ [I" tesler;T@@ [I" tess;T@E@ [I"tesseract;T@@ [I"tesseract_bin;T@@ [I"tesseract-ocr;T@|@ [I" test;T@@ [I" test123;T@@ [I"test16_gem;T@@ [I"test4requirements;T@@ [I"testability-driver;T@;@ [I"%testability-driver-qt-sut-plugin;T@;@ [I"testability-driver-runner;T@;@ [I"testable_examples;T@'@ [I"test_after_commit;T@'@ [I"test-align-centaur;T@@ [I"testament;T@@ [I"test_app_as_gem;T@@ [I" testasia;T@@ [I"testautoa;T@x@ [I"testautoi;T@@ [I"test_balancer;T@'@ [I"test_battery;T@E@ [I" testbed;T@@ [I"test-belt;T@O@ [I"test_benchmark;T@@ [I"test_benchmarker;T@u@ [I" testbot;T@@ [I"testbot_cloud;T@@@ [I"test_bundle_dependency;T@E@ [I"test_console;T@n@ [I"test-construct;T@N@ [I" testdata;T@@ [I"!testdata_generater_for_mysql;T@@ [I"testdata_text;T@`@ [I"test_declarative;T@@ [I"test-declare;T@@ [I"testdependencies;T@@ [I" testdoc;T@@ [I"testdrive;T@!@ [I"test_dummy;T@@ [I" testem;T@@ [I"test_engine;T@"@ [I"testengineer;T@@ [I" test_env;T@`@ [I"test_equality_with_lcs;T@`@ [I" tester;T@+@ [I"test_error;T@@ [I"test_extensions;T@6@ [I"test-factory;T@`@ [I"testflight;T@+@ [I"test_frame;T@@ [I"test_friendly;T@@ [I" test-fs;T@`@ [I" testgem;T@@ [I" test_gem;T@@ [I"TestGem101;T@@ [I"TestGem102;T@@ [I"testgem2332;T@E@ [I"test_gemeroni;T@@ [I"test-gem-install;T@E@ [I"test-gem-trol;T@9i@ [I" testgen;T@6@ [I"test-harness;T@@ [I"testicles;T@@ [I" testify;T@@ [I"testingbot;T@+@ [I"testing-celluloid;T@E@ [I"testing_gem;T@E@ [I"testingmachine;T@ @ [I"testing_please_ignore;T@@ [I"testing_please_ignore2;T@@ [I"testing_rails;T@@ [I"!testing_rubygems_credentials;T@'@ [I"test_inline;T@@ [I"test_internals;T@@ [I"test_kicker;T@@ [I"test-kitchen;T@X@ [I"testlink-api-client;T@'@ [I"TestLinkClient;T@"@ [I"test_linker;T@@ [I"test-loop;T@u@ [I"test_mail_interceptor;T@@@ [I" testme;T@y@ [I"test_metrics;T@@ [I" testml;T@'@ [I"testml-lite;T@'@ [I"test-mysqld;T@'@ [I"test_notifier;T@@ [I"testoaster;T@'@ [I" testopia;T@@@ [I"testosterone;T@@ [I" testowl;T@`@ [I"test-page;T@E@ [I"test_parser;T@"@ [I"test-parser;T@*@ [I"test-patient-generator;T@@ [I"testpilot;T@'@ [I"test_pivotal_workstation;T@'@ [I"testquest;T@@ [I" testr;TU;[I" 14.3.0;T@ [I" testrail;T@'@ [I"test_rails_js;T@@@ [I"test_rb_bug;T@'@ [I" testrbl;T@$@ [I"test-redis;T@'@ [I"test_reloaded;T@@ [I" test_rig;T@@ [I" test-rig;T@@ [I"test_right;T@@ [I"testrocket;T@'@ [I"testrocketplus;T@E@ [I" testrus;T@"@ [I"test_seeds;T@"@ [I"test_sinatra_app;T@@ [I"test-spec;T@ @ [I"test_spec_on_rails;T@@ [I"test_startup;T@`@ [I"test-subset;T@'@ [I"testswarm-client;T@@ [I"testtesttesttest;T@E@ [I"test_timer;T@'@ [I"test_track;T@"@ [I"testu_gem;T@'@ [I"test-unit;T@ @ [I"test-unit-activesupport;T@@ [I"test-unit-around;T@E@ [I"test-unit-capybara;T@@ [I"test-unit-context;T@@ [I"test-unit-coverage;T@`@ [I"test-unit-ext;T@@ [I"test_unit_extend;T@@ [I"test-unit-fasterskip;T@@ [I"test-unit-full;T@@ [I"test_unit-given;T@@ [I"test_unit_helper;T@E@ [I"test-unit-mock;T@@ [I"test-unit-must;T@@ [I"test-unit-notify;T@@ [I"test-unit-rails;T@@ [I"test-unit-rr;T@@ [I"test-unit-runner-failfast;T@E@ [I"test-unit-runner-fox;T@'@ [I"test-unit-runner-gtk2;T@E@ [I"test-unit-runner-html;T@"@ [I"test-unit-runner-tap;T@@ [I"test-unit-runner-tk;T@'@ [I"testunitxml;T@|@ [I" test_xml;T@@@ [I" testy;T@@ [I"tetya-asya;T@E@ [I" tex2wiki;T@'@ [I"texas_holdem;T@@ [I"tex-codeborne;T@@ [I"texel-lighthouse-api;T@@ [I"tex-hyphen;T@@ [I" texlab;T@@ [I"texmailer;T@!@ [I" texml;T@@ [I" texp;T@n@ [I" texplay;T@[@[@xnU;[I" 0.2.710;T@[@xn@@y;[@xn@@1[@xn@@ [@xn@@ [I" text;T@u@ [I" Text;T@;@ [I" texta;T@I@ [I"textamerica;T@@ [I"text-analysis-utils;T@[ @ [I"textanywhere_ruby;T@`@ [I"textcaptcha;T@E@ [I"text_captcha;T@`@ [I"textcaptchasolver;T@'@ [I"text_cleaner;T@'@ [I" texter;T@@ [I" texterb;T@+@ [I"textext-rails;T@@ [I"text_ferry;T@E@ [I"textfilter;T@`@ [I"text-format;T@@ [I"text-formatter;T@E@ [I"#textgoeshere-capistrano_mailer;T@@ [I"textgoeshere-daemon-kit;TU;[I" 0.1.8.31;T@ [I"textgraph;T@@ [I"texthelpers;T@@ [I"text-highlight;T@@ [I"text_hyphen;T@@ [I"text-hyphen;T@@ [I" texticle;T@+@ [I" textify;T@@ [I"textigniter;T@T/@ [I"textile2html;T@6@ [I"textile2pdf;T@@ [I"textile_editor;T@@ [I"textile_editor_helper;T@1@ [I"textile_extension_pack;T@@ [I"textile_toolbar;T@@ [I"textilize;T@"@ [I" textilr;T@@ [I"text-invoice;T@'@ [I"text_layout;T@@ [I"textmagic;T@@ [I"textmarks;T@'@ [I" textmate;T@Q@ [I"textmate_backtracer;T@@ [I"textmate_fcsh;T@@ [I" text_nlp;T@@ [I" textools;T@E@ [I"textorize;T@@ [I"textorize-mr;T@@ [I"text_parser;T@g@ [I" textpow;T@@ [I"textpow19;T@*@ [I"textpow1x;T@@ [I"textquery;T@g@ [I" textr;T@@ [I"textractor;T@@ [I"text_record;T@@ [I"text-reform;T@@ [I"text_sanitizer;T@E@ [I"text_spec;T@V@ [I"textstats;T@E@ [I"text-table;T@@ [I"text_to_epub;T@@@ [I"text-to-noise;T@@ [I"TextTractor;T@@ [I"text_tunnel;T@@ [I"TextualRegexp;T@v@ [I"textutils;T@@ [I"textweaver;T@7@ [I" textwrap;T@@@ [I" texvc;T@@ [I" texzip;T@@ [I"tf;T@@ [I"tfe-broach;T@|@ [I"tfe-cache-money;T@[@ [I"tfe-cloudfiles;T@)@ [I"tfe-phone;T@/L@ [I"tfe-pox_paginate;T@@ [I"tfe-remotipart;T@@ [I" tfidf;T@E@ [I" tf_idf;T@E@ [I" tf-idf;T@@ [I"tf-idf_csv;T@@ [I" tfidf_ja;T@@ [I"tf-idf-similarity;T@@ [I"tfl_journey_planner;T@@ [I" tftpplus;T@R @ [I"tft_rails;T@@ [I"tft_rails_dbc;T@6@ [I"tf_uploader;T@V@ [I"tg;T@'@ [I" tg4rb;T@@ [I"%tgbyte-activerecord-jdbc-adapter;TU;[I" 1.2.2.5;T@ [I"*tgbyte-activerecord-jdbcderby-adapter;T@8o@ [I"'tgbyte-activerecord-jdbch2-adapter;T@8o@ [I"+tgbyte-activerecord-jdbchsqldb-adapter;T@8o@ [I"*tgbyte-activerecord-jdbcmssql-adapter;T@8o@ [I"*tgbyte-activerecord-jdbcmysql-adapter;T@8o@ [I"/tgbyte-activerecord-jdbcpostgresql-adapter;T@8o@ [I",tgbyte-activerecord-jdbcsqlite3-adapter;T@8o@ [I"tg-can-controls-gateway;T@6@ [I" tg_cli;T@"@ [I"tg_config;T@+@ [I" tgem;T@@ [I"tg-firefly;T@- @ [I"th;T@'@ [I"thaold-bullet;T@@ [I" thartm;T@1@ [I" thartmx;T@I@ [I"that_old_cache;T@'@ [I"thaumaturgy;T@@ [I"thbar-hpricot;T@M@ [I"th-bbcode;T@@ [I" thbrk;T@@ [I"the;T@@ [I"the_1_hiya;T@'@ [I"the86-client;T@@ [I"theaboutbox-foreigner;T@@ [I"the_adult_company;T@@ [I" theatre;T@@ [I" thebes;T@@ [I" the-blob;T@@ [I"the_captcha;T@6@ [I"the_castle_client;T@@ [I"the-city-admin;T@x@ [I" thecount;T@!@ [I"the_country_identity;T@'@ [I" theduke;T@,@[I"the_encryptor;T@E@ [I"!the-experimenters-rdf-rdfxml;T@@ [I"thefacebook;T@`@ [I"the_force;T@@ [I"the_gambler;T@N@ [I" the_game;TU;[I"0.1.0.20120112;T@ [I"the_games_db;T@'@ [I"the_heist;T@@ [I" thehenster-resque-scheduler;T@@ [I"thekeystone;T@J@ [I"thelinuxlich-aegis;T@9@ [I"thelinuxlich-pdfkit;T@_@ [I"the_little_streamer;T@@ [I"the-maestro;T@@ [I" theman;T@6@ [I" themedoc;T@!@ [I"theme_generator;T@@ [I" themekit;T@`@ [I"themes_for_rails;T@@ [I"themes_rails_custom;T@'@ [I"theme_support;T@|@ [I"the_metric_system;T@@ [I"themockerpush;T@@ [I" then;T@@ [I"-the-official-groupme-ab-testing-solution;T@'@ [I""theorician-sinatra-respond_to;T@@ [I"the-perfect-gem;T@~@ [I"thepiratebay;T@@ [I"the_pirate_bay;T@n@ [I"theplatform-cli;T@@ [I"the_police;T@E@ [I" thepub;T@E@ [I" thera;T@V@ [I"therapist;T@@ [I" therapy;T@@ [I"TheresNoBox;T@'@ [I" thermal;T@`@ [I"thermostat;T@N@ [I" the_role;T@@ [I"therubyracer;T@@ [@o@@S[@o@@[@o@@%N[@o@[@ [I"therubyracer-freebsd;T@[@ [I"therubyrhino;TU;[I" 1.72.6;T@[@o@@ [I"therubyrhino_jar;T@1@ [I" THERuSH;T@B@ [I" theseus;T@@ [I"thesilverspoon;T@@ [I"the_silver_spoon;T@E@ [I"the_sortable_tree;T@:!@ [I"the_sortable_tree_mongoid;T@T@ [I" thespian;T@@ [I" theta;T@+@ [I"the-testing-gem;T@@ [I" the_tvdb;T@|@ [I"the_tv_db;T@n@ [I"theyoweme;T@@ [I"they-savon;T@w@ [I"they-yahoo_stock;T@@ [I" thick;T@n@[I" thimbl;T@@ [I" Thimblr;T@@ [I" thin;T@@[@p@k@ [@p@k@[@p@@ [I"thin_async;T@`@ [I"thin-async-test;T@@ [I"thin-attach_socket;T@@ [I"thin-auth-ntlm;T@"@ [I"thin_balance;T@@ [I"thincloud-auth;T@@@ [I"thincloud-authentication;T@@ [I"thincloud-postmark;T@x@ [I"thincloud-resque;T@`@ [I"thincloud-test;T@@ [I"thin-fun_embed;T@@ [I"thingiverse;T@E@ [I"thin-glazed;T@@ [I" things;T@@[I"things-client;T@,@ [I"things-fetcher;T@6@ [I"things-rb;T@x@ [I"thingtank;T@@ [I"thin_http;T@`@ [I"thinking-sphinx;T@@ [I"thinking-sphinx-099;T@@ [I"thinking-sphinx-allen;TU;[I" 1.3.18.4;T@ [I"thinking-sphinx-raspell;T@x@ [I"#thinking-sphinx-rspec-matchers;T@E@ [I"%thinking-sphinx-shoulda-matchers;T@E@ [I"thinkingtank;T@@ [I"thinknear;T@@@ [I"0thinlayer-chef-boundary-annotations-handler;T@@@ [I"thin_models;T@+@ [I" thinner;T@+@ [I" thinning;T@`@ [I"thin-preforker;T@"@ [I"thin-rails;T@@ [I"thinreports;T@u/@ [I"thinreports-handler;T@@@ [I"thinreports-rails;T@6@ [I"thin_service;T@@ [I"Thin_Upstart;T@u@ [I"Thin_Upstreams;T@@ [I"third_base;T@@ [I" thirst;T@E@ [I"thirtysixthspan-magent;T@@ [I"thirtythirty;T@@ [I" this;T@@ [I" thisfile;T@'@ [I"thisisbad;T@E@ [I"thisiskun-test;T@'@ [I"thisisstable;T@@ [I" thistle;T@[@ [I"this_will_rm_rf_your_shit;T@E@ [I" thomas;T@1@ [I" thor;T@ @ [I"thor_250mm_cannon;T@E@ [I"thor-cheese;T@@ [I" thorero;TU;[I" 0.9.4.5;T@ [I"thorero-action-args;T@@ [I"thorero-assets;T@@ [I"thorero-builder;T@@ [I"thorero-cache;T@c@ [I"thorero-core;TU;[I" 0.9.4.6;T@ [I"thorero-freezer;T@@ [I"thorero-gen;T@@ [I"thorero-haml;T@@ [I"thorero-helpers;T@@ [I"thorero-jquery;T@@ [I"thorero-mailer;T@@ [I"thorero-parts;T@@ [I"thorero-slices;T@@ [I" thor-ext;T@@@ [I"thor-foodcritic;T@@ [I" thorgem;T@6@ [I"thor-install-gist;T@@ [I"thor-levenshtein;T@'@ [I" thornbed;T@@ [I"thor-package;T@@ [I"thor_plus;T@x@ [I"thor-scmversion;T@@ [I" thor-ssh;T@^@ [I"thorsson_carrierwave;T@4@ [I"thorsson_cups;T@6@ [I"thorsson-mongo_mapper;T@@ [I"thorsson_thinking-sphinx;T@@ [I"thor_subtree;T@@ [I"thor_tasks;T@`@ [I" thoth;T@@ [I"thoth_delicious;T@@ [I"thoth_flickr;T@@ [I"thoughtafter-lockfile;T@O@ [I"thoughtafter-nntp;TU;[I" 1.0.0.3;T@ [I"thoughtafter-simple-rss;TU;[I" 1.2.3.3;T@ [I"thoughtafter-vpim;T@@ [I"thoughtbot-shoulda;TU;[I" 2.11.1;T@ [I"thoughtful;T@V@ [I"thoughtless-moneta;T@s@ [I" thoughts;T@'@ [I" thounds;T@E@ [I" thrash;T@@ [I" threach;T@@ [I" thread;T@ @ [I"thread_backtrace;T@`@ [I"threadded_enumerator;T@E@ [I"thread-dump;T@@ [I"threaded_processor;T@@@ [I"thread-extra;T@'@ [I"threadify;T@@ [I"threadless;T@6@ [I"threadlimiter;T@@ [I"thread_local_accessor;T@`@ [I"thread_man;T@'@ [I"threadpool;T@@@ [I"thread_pool;T@@ [I"thread-pool;T@'@ [I"thread_safe;T@@ [I"threadsafe_benchmark;T@@ [I"threadsafe-lru;T@E@ [I"thread_so_safe;T@!@ [I"thread_storm;T@@ [I"thread_tools;TU;[I" 0.28;T@ [I"thread_variable;T@@ [I"thread_variables;T@@ [I" thready;T@@ [I" threadz;T@@ [I"threatexpert;T@@ [I" three141;T@@ [I"threejs-rails;T@E@ [I"threepwood;T@@ [I"three_sixty;T@@ [I"ThreeStore;T@'@ [I"threetaps-client;T@@ [I" threetee-capistrano-offroad;T@@@ [I"threetee-rightscale-api;T@@ [I"threetee-roart;T@+@ [I"three-usage;T@E@ [I"threez-rack-rpc;T@@ [I" thrift;T@- @ [I"thrift_amqp_transport;T@@ [I"thrift_client;T@&@ [I"thrift-json;T@@ [I"thrift-rack-middleware;T@'@ [I"thrillcall-api;T@@ [I"throat-punch;T@@ [I" throne;T@@ [I" throttle;T@E@ [I"throttled_object;T@@ [I"throttler;T@@ [I"throttling;T@@ [I"throughcheckboxes;T@@ [I"throwthegame;T@'@ [I" thumb_fu;T@+@ [I" thumbit;T@@ [I" thumbkit;T@6@ [I"thumbnail;T@I@ [I"thumbnailer;T@@ [I"thumbnailer-ruby;T@@@ [I"thumbnail_on_demand;T@@ [I"thumbnail_scraper;T@E@ [I" thumbo;T@@ [I" thumbs;T@@ [I"thumbshooter;T@|@ [I"thumbs_up;T@@ [I" thunder;T@@ [I"thunder-1.8.7;T@@ [I"thunder_punch;T@@ [I"thundersnow;T@@ [I" thunk;T@@ [I"thuss-shift_subtitle;T@x@ [I"thuva-t-minus;T@@ [I" thwart;T@"@ [I" thwomp;T@@ [I"thyone_creator;T@@ [I" thyrgrim;T@'@ [I"ti;T@@ [I" tiamat;T@@ [I" ticgit;T@@ [I"TicGit-ng;TU;[I" 1.0.2.17;T@ [I" tick;T@6@ [I" ticker;T@"@ [I"ticker_fetcher;T@@ [I"ticketee-forem;T@'@ [I"ticketevolution-ruby;TU;[I" 0.7.26;T@ [I"ticketfly;T@,@ [I"ticketfly-api;T@@ [I"ticketmaster;T@X@ [I"ticketmaster-basecamp;T@x@ [I"ticketmaster-bugherd;T@`@ [I"ticketmaster-bugshelf;T@"@ [I"ticketmaster-bugzilla;T@ @ [I"ticketmaster-codaset;T@@ [I"ticketmaster-fogbugz;T@@ [I"ticketmaster-github;T@- @ [I"ticketmaster-jira;T@^@ [I"ticketmaster-kanbanpad;T@@ [I"ticketmaster-lighthouse;T@@ [I"ticketmaster-mingle;T@+@ [I"ticketmaster-pivotal;T@X@ [I"ticketmaster-rally;T@,@ [I"ticketmaster-redmine;T@@ [I"ticketmaster-teambox;T@+@ [I"ticketmaster-trac;T@@ [I"ticketmaster-unfuddle;T@@ [I"ticketmaster-zendesk;T@@ [I"ticket_network;T@@ [I"ticket_sharing;T@"@ [I"ticketutils;T@@@ [I" tickle;T@@ [I" tickspot;T@@ [I"tickspot_api;T@@ [I"tickspot-rb;T@@ [I"tickspot-ruby;T@@ [I"tick_tacker;T@6@ [I"tick-tock;T@@ [I"tictactien-gem;T@@ [I"tictactoe;T@"@ [I"tic_tac_toe;T@I@ [I"tic-tac-toe;T@@ [I"tictactoe_alu3286;T@'@ [I"Tictactoe-alu4116;T@'@ [I"tic_tac_toe_engine;T@'@ [I" tictoc;T@E@ [I"tictoc-savon;T@@ [I"tida_sina_weibo;T@@ [I"tiddlywiki_cp;T@J@ [I" tide;T@|@ [I" tidtools;T@I@ [I" tidy;T@x@ [I" tidy-ext;T@N$@ [I" tidy_ffi;T@|@ [I"tidyflash;T@<@ [I"tidy-fork;T@;@ [I"tidy-fork-fork;T@;@ [I"tidy_table;T@@ [I" tidyup;T@- @ [I"tie;T@@ [I" ties;T@@ [I" tiff;T@@ [I"tigerblood;T@O@ [I"tigerlily-solid;T@@ [I"tigerpants;T@+@ [I"tiger-payment;T@)@ [I" tigger;T@@ [I" tigon;T@'@ [I"tigre-client;T@@ [I" tikas;T@E@ [I"tikh-klarlack;T@@ [I"til;T@@@ [I"tilecache;T@"@ [I" tilt;T@ @ [I"tilt-importantcss;T@'@ [I"tilting_mustache;T@'@ [I"tilt-jade;T@x@ [I"tilt-jadeite;T@@ [I"tilt-jbuilder;T@@ [I"tilt-mustache;T@E@ [I" tiltout;T@@ [I"tim;T@@@ [I" timber;T@6@ [I"timberline;T@@ [I"timbl_client;T@'@ [I" timcharper-beanstalk-client;T@@ [I")timcharper-declarative_authorization;TU;[I" 0.4.1.6;T@ [I"timcharper-jruby-poi;T@e@ [I"timchen-cache-money;TU;[I" 0.2.25.1;T@ [I"time_accessor;T@E@ [I" timeago;T@@ [I"time-ago-in-words;T@@@ [I"timeago-rails;T@@ [I"time_bandits;T@@ [I" timebomb;T@@ [I"time_calculations;T@@ [I"timecapsule;T@@ [I"time_capsule;T@T @ [I" timecard;T@E@ [I"timechunker;T@`@ [I"timeclock;T@@ [I" timecode;T@x@ [I"time_constants;T@!@ [I" timecop;T@@ [I"timecop-console;T@@ [I"time_crisis;T@@ [I" timecube;T@@ [I"time_date_helpers;T@E@ [I"timedcache;T@x@ [I"timed_config;T@`@ [I"timed_fragment_cache;T@'@ [I"time_diff;T@@ [I"timed_rest_for_chef;T@@ [I"timed_specs;T@E@ [I"time_elapser;T@'@ [I" time_ext;T@ @ [I"timeformatter;T@@ [I"timeframe;T@@ [I"timeframes;T@'@ [I"time_freeze;T@`@ [I"time-freezer;T@"@ [I"time_helper;T@@ [I"time-helper;T@@ [I"time_interval;T@@@ [I"timekeeper;T@I@ [I"time_keeper;T@@ [I"time_left;T@@@ [I"time_limits;T@E@ [I" timeline;T@@ [I"timeline_fu;T@@ [I"timelineJS-rails;T@@ [I"timeline_setter;T@@ [I"timeliness;T@@ [I"timeline_word_frequency;T@E@ [I"timelog4r;T@@ [I"TimeLogger;T@E@ [I" timelord;T@@ [I"time-lord;T@[@ [I" timely;T@E@ [I"time_machine;T@E@ [I"time_machine_tools;T@@ [I"timemaster;T@@ [I"time_of_day;T@`@ [I"time_only;T@@ [I"timeout_cache;T@E@ [I" timeoutx;T@@ [I" timepad;T@6@ [I"timeparser;T@@ [I"time_parse_to_utc;T@'@ [I"time_period;T@'@ [I" timer;T@1@ [I"timerator;T@`@ [I"time_recurrence;T@'@ [I"time_remaining;T@V@ [I"timerizer;T@+@ [I" timerr;T@@ [I" timer.rb;T@[ @ [I"timer_refi;T@@ [I" timers;T@@ [I"timescale;T@@@ [I"time_scopes;T@`@ [I"time_sentence;T@@ [I"timesheet;T@@ [I"timesheet_plugin;T@@ [I"timeshifter;T@`@ [I" timespan;T@J@ [I"time_span;T@@ [I"timespeople;T@@ [I"timestamped_column;T@@ [I"timestamped_logger;T@@ [I"timestamped-logger;T@@ [I"timestamped-scenarios;T@@ [I"timestamper;T@E@ [I"times_topics;T@@ [I"timestream;T@@ [I"timestreamapp;T@@ [I"times_wire;T@@ [I"timetabler;T@@ [I"time_tag_in_words;T@'@ [I" time_tap;T@@ [I"timetastic;T@6@ [I"timetoday;T@`@ [I"timetracker;T@@ [I"time_tracker;T@`@ [I"time-tracker;T@@ [I"timetrackr;T@@ [I" timetrap;T@@ [I"time_travel;T@@ [I"timetress;T@"@ [I"time-unit;T@n@ [I"timeunits;T@E@ [I"time_units;T@@ [I"time-value-of-money;T@@ [I"time-warp;T@ @ [I"time_window_drop_collector;T@@ [I" timezone;T@|@ [I"timezone_detection;T@`@ [I"time_zone_ext;T@@ [I"timezone_field;T@@ [I"timezone_local;T@|@ [I"time-zone-warp;T@@ [I"timfel-active_cmis;T@@ [I"timfel-ci_reporter;T@@ [I"timfel-krb5-auth;T@W9@ [I" timl;T@@ [I"timsjoberg-ecriso4217;T@@ [I"tin;T@@ [I" tinami;T@@ [I" tinatra;T@@ [I" tinder;T@{@ [I"tinderbox;T@@ [I" tineye;T@@ [I" ting;T@@ [I" tinia;T@n>@ [I"tinkerbell;T@@ [I" tinkit;T@@ [I" tinman;T@@ [I" tinnef;T@@@ [I" tins;T@@ [I" tinspitz;T@@ [I" tint;T@@ [I" tiny;T@@ [I"tiny_apns;T@"@ [I" tinyatom;T@@ [I"tiny_cache;T@'@ [I" tinychat;T@@ [I" tinychef;T@@ [I" tiny_cms;T@ @ [I" tiny-cms;T@@ [I"tiny_core;T@E@ [I"tiny_core_accounts;T@E@ [I"tiny_core_users;T@'@ [I" tiny_css;T@6@ [I" tiny_ds;T@E@ [I"tinyembedly;T@E@ [I" tinyext;T@@ [I"tiny_fb_graph;T@`@ [I" tinygem;T@@ [I"tiny_http;T@`@ [I"tiny_i18n;T@'@ [I" tiny_mce;T@@ [I"tiny_mce_curblyadvimage;T@I@ [I"tinymce_fm;T@E@ [I"tinymce_hammer;T@I@ [I"tiny_mce_helper;T@@ [I""tiny_mce_plugin_imageselector;T@V@ [I"tinymce_rails;TU;[I" 3.4.6;T@ [I"tinymce-rails;TU;[I" 3.5.8;T@ [I"!tinymce-rails-config-manager;T@n@ [I"tinymce-rails-imageupload;TU;[I" 3.5.6.4;T@ [I"tinymce-rails-langs;T@@ [I"tinymce_spellcheck;T@@ [I"tinymce_splitblockquote;T@@ [I"tinymongo;T@g@ [I"tiny_navigation;T@@ [I" tinypng;T@'@ [I" tiny_png;T@@ [I" tinyq;T@@ [I"tiny-rails;T@`@ [I"tiny_science;T@'@ [I"TinyScience;T@'@ [I"tinyscrobbler;T@@ [I"tiny_segmenter;T@E@ [I"tiny_site;T@I@ [I"tiny_song;T@@ [I"tiny_spider;T@'@ [I" tinyssh;T@V@ [I"tinytable;T@@ [I" tiny_tds;T@@ [@s@@ [I"tiny-template;T@'@ [I" tinytest;T@'@ [I"tiny_thomas;T@'@ [I"tinytimer;T@'@ [I" tinyurl;T@@ [I" tiny_url;T@"@ [I"tiny_xml_builder;T@"@ [I"tiny_xpath_helper;T@@ [I" tioga;T@>@ [I"tipcsocket;T@@ [I" tipjoy;T@@ [I" tippr;T@'@ [I" tipster;T@@ [I" tipsy;T@6@ [I"tipsy-rails;T@@ [I"tipsy_svg;T@"@ [I" tiqav;T@@ [I" tiqbi;T@E@ [I" tire;T@Y@ [I"tire-contrib;T@`@ [I"tire-mock_client;T@'@ [I"tism-will_paginate;T@@ [I" tissue;T@@ [I" tissues;T@'@ [I"tit;T@O7@ [I" titan;T@x@ [I" titanium;T@'@ [I"titanium_cli;T@E@ [I"titanous-garb;T@u!@ [I"titech-pubnet-auth;T@@ [I" titi;T@@ [I"titlecase;T@`@ [I"title_estuary;T@N@ [I" titlefy;T@@ [I"title_helper;T@x@ [I" titleize;T@u@ [I"titleizePTBR;T@O@ [I"titlepage;T@@ [I" titlify;T@@ [I" titov;T@'@ [I" tivoli;T@@ [I"tj_bootstrap_helper;T@@ [I" TJNGram;T@@ [I"tjplurker;T@ @ [I" tkar;T@~<@ [I"tk_as_gem;T@@ [I"tk-double-slider;T@@ [I" tkellem;T@@ [I"tkh_admin_panel;T@@ [I"tkh_authentication;T@3@ [I"tkh_content;T@ @ [I"tkh_illustrations;T@@ [I"tkh_inline_editor;T@@ [I"tkh_menus;T@`@ [I"tk-parallel-coordinates;T@@ [I"tkregreplace;T@`@ [I" tkri;T@@ [I" tk-win;T@I@ [I" tkxml;T@@ [I"tlattr_accessors;T@@ [I" tlb-core;T@@ [I"tlb-cucumber;T@@ [I"tlb-rspec1;T@@ [I"tlb-rspec2;T@@ [I"tlb-testunit;T@@ [I"tlb-testunit18;T@@ [I"tlb-testunit19;T@@ [I"tlconnor-activemerchant;TU;[I" 1.23.3;T@ [I"tlconnor-scruffy;T@ZB@ [I"tlconnor-spawn;T@@ [I"tld;T@y@ [I"tld-cookies;T@@ [I" tlearn;T@V@ [I" tlhelper;T@@ [I" tlist;T@'@ [I" tlsmail;T@'@ [I"tlspretense;T@@ [I" tlux;T@'@ [I"tlv;T@@ [I"tm;T@-!@ [I"tm2sublime_snippets;T@'@ [I" tmail;TU;[I" 1.2.7.1;T@ [I"tmail_metas;T@@ [I"tmayad-formtastic;T@ @ [I"tmb;T@ @ [I"tm_backtrace;T@+@ [I" tmclean;T@`@ [I" tmdas;T@3@ [I" tmdb;T@ @ [I"tmdb-easy;T@@ [I"tmdb_party;T@- @ [I"tmdb_trailer;T@ @ [I"tm_helper;T@@ [I" tmin;T@1@ [I"tmin_test;T@@ [I" t-minus;T@@ [I" tminusit;T@'@ [I"tmp8-snailgun;T@u@ [I"tmp_cache;T@@ [I"tmpdir_block;T@@ [I"tmptation;T@@ [I" tmrb;T@N'@ [I"tms;T@@I[@{t@ @ [I"tm_syntax_highlighting;T@'@ [I"tmuxification;T@E@ [I"tmuxinator;T@@ [I" tmuxite;T@E@ [I"tmux-ruby;T@E@ [I"tmx;T@'@ [I" tmxed;T@'@ [I" tnef;T@@ [I" tnet;T@E@ [I"tnetstring;T@@ [I"tnetstrings;T@@ [I" tnnl;T@'@ [I" tn_pdf;T@E@ [I"tns_payments;T@@ [I"to_2d_hash;T@E@ [I"to_activerecord;T@@ [I"toadhopper;T@f!@ [I"toadhopper-sinatra;T@f!@ [I" toadie;T@"@ [I"toad_spawn;T@'@ [I"toadstool;T@N@ [I" toamqp;T@@ [I" to_api;T@T @ [I" toast;T@u!@ [I" toaster;T@'@ [I"toastr-rails;T@@ [I" tobacco;T@n@ [I" tobi;T@@ [I"tobias-jmx;T@W9@ [I"tobias-jmxjr;T@R @ [I"tobias-rack-webconsole;T@|@ [I"tobias-railroad;T@ @ [I"tobias-sinatra-respond_to;T@@ [I"tobias-sinatra-url-for;T@@ [I" to_bool;T@@ [I" toby;T@@ [I"tobytripp-git-pair;T@@ [I"to_camel_case;T@@ [I"to_chitanda;T@'@ [I" to-class;T@@ [I" toclip;T@@ [I" tocolist;T@'@ [I" to_csv;T@@ [I" to-csv;T@@ [I"to_csv_rails;T@!@ [I"to_csv-rails;T@`@ [I"tod;T@@ [I"todayilearned;T@`@ [I" todd;T@@ [I" toddify;T@'@ [I"toddistrano;T@'@ [I" toddler;T@@ [I" todo;T@@ [I" to-do;T@ @ [I" Todo;T@!@ [I" todofind;T@@ [I"todo-gist;T@6@ [I" todoist;T@@ [I"todoist-api;T@E@ [I"todoist_date_time;T@I@ [I" todoly;T@E@ [I"todo_manager;T@@ [I" todone;T@@ [I"todo_next;T@E@ [I"todonotes;T@`@ [I"todo-notify;T@@ [I" todorb;T@@ [I" todo.rb;T@,@ [I" todos;T@'@ [I" todotask;T@@ [I" todotxt;T@@ [I" todo-txt;T@@ [I"todo-void;T@@@ [I"toe;T@x@ [I" to_erb;T@E@ [I" to_excel;T@@ [I"to_factory;T@@ [I"toferboy-contacts;T@@ [I" toffee;T@E@ [I" toft;T@ @ [I"toft-puppet;T@@ [I" tofuhash;T@@ [I"tog;T@Y@ [I" toga;T@@ [I" togg;T@@ [I" toggl;T@@ [I"toggledots;T@'@ [I" toggler;T@,@ [I" togglify;T@@ [I" togist;T@@ [I" togman;T@@ [I" togo;T@X@ [I"to_google_spreadsheet;T@`@ [I"to_gravatar;T@@ [I" to_gunma;T@E@ [I" to_h;T@'@ [I" to_hash;T@@@ [I" to_html;T@@ [I"to_html_fraction;T@@ [I" toil;T@@ [I"to_insane;T@I@ [I"to-javascript;T@@ [I" to_js;T@E@ [I"to_js_date;T@E@ [I"to_json_fix;T@E@ [I"tokak_engine;T@@ [I" tokamak;T@u@ [I" tokboxer;T@+@ [I"token_action;T@'@ [I"token_attribute;T@`@ [I" tokener;T@@ [I"token_field;T@@ [I" tokenie;T@@ [I"tokenifier;T@@@ [I" tokenize;T@@ [I"tokenizer;T@`@ [I"$tokenizer_project_uni-trier_j-v;T@'@ [I"TokenizerProjectUT;T@'@ [I"tokenizes;T@`@ [I" tokenr;T@V@ [I" tokens;T@@ [I" tokiyomi;T@@ [I"tokyocabinet;T@@ [I"tokyo_cache_cow;T@@ [I"tokyocafe;T@E@ [I"tokyomessenger;T@@ [I"tokyo_store;T@@ [I"tokyotyrant;TU;[I" 1.13;T@ [I"tokyo_wrapper;T@!@ [I"to_lambda;T@'@ [I" to_lang;T@@ [I" to_latex;T@x@ [I"tolerances;T@@ [I" tolk;T@@ [I"toll_booth;T@@ [I"tom;T@@ [I" tomcap;T@u@ [I"tomcat-manager;T@@ [I" tomdoc;T@[@ [I"tomdz-jira4r;TU;[I"0.5.0.20120202102048;T@ [I"tomdz-soap4r;TU;[I"1.5.8.20120202093209;T@ [I" tome;T@@ [I"tomk32-flickr_fu;T@5 @ [I"tomk32-yahoo-weather;T@f@@ [I" tommygun;TU;[I" 0.4.01;T@ [I" tomparse;T@@ [I"tomriley-active_merchant;TU;[I" 1.4.2.11;T@ [I" toname;T@@@ [I" tongo;T@E@ [I" tonic;T@@ [I"tonic-cms;T@E@ [I" to_nil;T@'@ [I" tonto;T@@ [I" tony;T@X@ [I"tonyla-paypal_adaptive;T@+@ [I"tony_time;T@@ [I" toodledo;T@@ [I"tooky-database_cleaner;T@@ [I" tool;T@`@ [I" toolbar;T@@ [I" toolbox;T@+@ [I" toolkit;T@I@ [I"ToolParade;T@E@ [I"tools_for_locales;T@'@ [I"tool-shed;T@@ [I"toomuchsupport;T@z@ [I"toopher_api;T@@ [I"too_rendermonkey;T@@ [I"too_short;T@|@ [I"toothbrush;T@@@ [I" tootsie;TU;[I" 0.9.29;T@ [I"to_output;T@@ [I"top;T@'@ [I" top4r;T@@ [I"to_parsed_obj;T@@ [I" to_pass;T@@ [I" topaz;T@@ [I" to_pdf;T@1@ [I"to_permalink;T@@ [I" top_gun;T@@ [I" tophat;T@@ [I" topico;T@'@ [I" toPinyin;T@@ [I"top_notify;T@'@ [I"topological_sort;T@`@ [I" toppr;T@@ [I"topprospect-delayed_job;T@Sg@ [I" topprospect-pivotal-tracker;T@`@ [I" topsdk;T@n@ [I" topsy;T@@ [I"top_tests;T@@ [I"tor;T@@@ [I" torch;T@'@ [I"to_regexp;T@`@ [I" to_repl;T@+@ [I"tor_extend;T@O@ [I" torgo;T@'@ [I"torii-core;T@'@ [I" torii-db;T@@ [I"torii-server;T@@ [I" tork;TU;[I" 19.2.0;T@ [I" tornado;T@'@ [I" to_roman;T@@ [I" torpedo;T@C@ [I"tor-privoxy;T@`@ [I"tor_proxy;T@@ [I"torquebox;T@ @ [I"torquebox-backstage;T@ @ [I"torquebox-base;T@@[I"torquebox-cache;T@ @[I"!torquebox-capistrano-support;T@ @ [I"torquebox-configure;T@ @[I"torquebox-console;T@I@ [I"#torquebox-container-foundation;T@@[I"torquebox-core;T@ @[I"torquebox_faker;T@E@ [I"torquebox-generators;T@I@ [I"torquebox-lite;T@@ [I" torquebox-message-encodings;T@'@ [I"torquebox-messaging;T@ @[I""torquebox-messaging-container;T@@[I"torquebox-naming;T@ @[I"torquebox-naming-container;T@@[I"torquebox-no-op;T@ @ [I"torquebox-rake-support;T@ @ [I"torquebox-remote-deployer;T@`@ [I"torquebox-security;T@ @[I"torquebox-server;T@ @[I"torquebox-stomp;T@ @ [I"torquebox-stompbox;T@@ [I"torquebox-transactions;T@ @ [I"torquebox-vfs;T@@[I"torquebox-web;T@ @[I"torquebox-webconsole;T@`@ [I"torquecheck;T@@@ [I"torquespec;T@@ [I"torque-vpc-toolkit;T@@ [I"torrent_api;T@^@ [I"torrent_crawler;T@@ [I"torrentgem;T@'@ [I"torrent-ruby;T@|@ [I" torrents;T@@ [I"torrentsync;T@@ [I" torrentz;T@E@ [I"tor_requests;T@@ [I" tortard;T@'@ [I" tortoise;T@MM@ [I" to_slug;T@@ [I"to_slug_2;T@@ [I"to_source;T@V@ [I"to_spreadsheet;T@@ [I" toss;T@@ [I" to_sssi;T@`@ [I"totally_tabular;T@@ [I" totalr;T@'@ [I"total_recall;T@@ [I"total-recall;T@@ [I" totito;T@@ [I" toto;T@`@ [I"toto-bongo;T@@ [I"toto-haml;T@@ [I" to_town;T@"@ [I" totsuzen;T@@ [I"totsuzennoshi;T@`@ [I"totty-amqp;T@-@ [I"touchlocal-openx;T@x@ [I"touchpass;T@+@ [I"touchpunch-rails;T@@ [I"touchstone;T@Y@ [I"touch_wrap;T@'@ [I" tounge;T@`@ [I" tourbus;T@@ [I" tourcms;T@@ [I" tourets;T@6@ [I" tourist;T@@ [I"tournament;T@A@ [I" towels;T@@ [I" tower;T@+@ [I" town;T@1@ [I" townhog;T@'@ [I"to_worksheet;T@'@ [I" towsta;T@ @ [I" to_xls;T@@ [I"to_xls-rails;T@x@ [I" to_xml;T@`@ [I" toybox;T@@ [I" toy_lang;T@@ [I"toy-locomotive;T@@ [I" toystore;T@@ [I"toystore-couch;T@@ [I"toystore-mongo;T@&@ [I"tp;T@@ [I"tpb;T@@ [I"tp-blather;T@-@ [I" tpb_wrap;T@@ [I" tpdata;T@@ [I" tphases;T@[@ [I"tpitale-constant_cache;T@@@ [I"tpitale-dm-rails;T@@ [I"tpitale-mongo_mapper;T@Y_@ [I"tpitale-octopi;T@@ [I"tpitale-rack-oauth2-server;T@@ [I"tpitale-rails_datamapper;TU;[I" 0.10.3.1;T@ [I"tpitale-shoulda;T@@ [I" tpkg;T@ @ [I" tplot;T@@ [I" tpool;T@"@ [I"tpp;T@ @ [I"tps_reporter;T@I@ [I" tr8n;T@@ [I" trac4r;T@u"@ [I" trace;T@E@ [I"tracelogger;T@@ [I"tracepoint;T@u@ [I" tracer;T@'@ [I"traceroute;T@I@ [I"traces-vendor;T@"@ [I" traceur;T@'@ [I"trace-util-adv;T@@ [I"trace_viewer;T@@ [I"trac-export-wiki;T@@ [I" tracey;T@@ [I" track;T@x@ [I"trackablaze;T@@ [I"trackable;T@@ [I"trackable_tasks;T@`@ [I"track_changes;T@@ [I"trackduration;T@E@ [I" tracker;T@@ [I" Tracker;T@@ [I"tracker-client;T@;@ [I"tracker_cmd;T@E@ [I"tracker_custom_points;T@@ [I"tracker-git;T@@ [I"tracker-hook-forwarder;T@@ [I"tracker-ical;T@@ [I"trackerific;T@@ [I"tracker_packer;T@@ [I"track_history;T@@ [I"trackinator;T@@ [I" tracking;T@@ [I"tracking_link;T@'@ [I"tracking_number;T@@ [I" trackit;T@`@ [I" trackman;T@ @ [I" track_me;T@"@ [I"track_method;T@'@ [I" trackoid;T@x@ [I"track-plugins;T@'@ [I" trackr;T@'@ [I" track-r;T@{@ [I"trackrepos;T@@ [I" tracks;T@@ [I"tracksperanto;T@ @ [I"tracks_visits;T@@ [I"track_tweets;T@@ [I" trackzor;T@|@ [I" traco;T@@ [I" tractor;T@@ [I"tradeking;T@'@ [I" trades;T@@ [I"tradingrobotdsl;T@E@ [I" tradsim;T@@ [I" Traduire;T@'@ [I" traffic;T@@ [I"traffic_control;T@'@ [I"traffic_cop;T@@ [I"trafficker;T@'@ [I"traffic_light;T@@ [I"traffic_light_controller;T@@ [I"traffic_patterns;T@'@ [I"traffic-scraper;T@'@ [I"trafikanten-travel;T@,@ [I" trail;T@'@ [I" trailers;T@'@ [I"trail-ruby;T@E@ [I" trails;T@@ [I" train;T@'@ [I"trainbbcode;T@N@ [I"trainbbcodeeditor;T@@ [I"trainingwheels;T@"@ [I"training_wheels;T@'@ [I" traipse;T@@ [I" traited;T@@ [I" traitor;T@'@ [I" traits;T@ @ [I" trak;T@"@ [I" trakt;T@E@ [I" traktor;T@R @ [I" tramp;T@!@ [I" trample;T@@ [I" trance;T@@ [I" tranexp;T@@ [I" tranny;T@X@ [I"transactional-factories;T@@ [I"transactionata;T@@ [I"transaction_isolation;T@@ [I" transaction_isolation_level;T@@ [I"transaction_retry;T@@ [I"transaction-simple;T@@ [I"transbank;T@'@ [I"transbarf;T@Nn@ [I"transceiver;T@'@ [I"transcoder;T@@ [I"transcribe;T@@ [I"transcriber;T@<<@ [I"transcriptic;T@6@ [I"transdifflation;T@@ [I"transender;T@X)@ [I" transfer;T@'@ [I"transfigr;T@@ [I"transform;T@`@ [I"transformable;T@@ [I"transformer;T@@ [I"transformers;T@E@ [I"transient;T@O@ [I"transient_objects;T@@ [I" transip;T@@ [I"transis_logger;T@x@ [I" transit;T@E@ [I"transit_in_ua;T@'@ [I"transition_events_js;T@@ [I"transition-events-js;T@@ [I"transitions;T@+@ [I"transition_validator;T@@ [I"translatable;T@I@ [I"translatable_attributes;T@E@ [I"translate;T@'@ [I"*translate_acts_as_translatable_models;T@@ [I"translate_columns;T@@ [I"translated_attr;T@@ [I"translated_attributes;T@@ [I"translate-hq;T@'@ [I"translate-rails3;T@@ [I"translate-rails3-plus;T@n@ [I"translate_routes;T@i@ [I"translate_routes_rails_2_3;T@i@ [I"translates_fields;T@"@ [I"translate_with_scope;T@'@ [I"translate_yaml;T@E@ [I"translation_manager;T@`@ [I"translation_panel;T@,@ [I"translations_ennder;T@@ [I"translations_sync;T@x@ [I"translator;T@@ [I"translatr;T@@@ [I"translink;T@@ [I" translit;T@@@ [I"transliterate;T@'@ [I"transliterator;T@'@ [I"transloadit;T@@ [I"transloadit-rails;T@@ [I"transmating;T@@ [I"transmission;T@@ [I"transmission_api;T@@ [I"transmission-client;T@@ [I"transmission-connect;T@@ [I"transmission-rpc;T@`@ [I"transmission-rss;T@ @ [I"transmission-simple;T@E@ [I"transmogrify;T@6@ [I"transmuter;T@@ [I"transparency_data;T@"@ [I"transparent_git;T@@ [I"transparent_nil;T@J;@ [I"transplant;T@|@ [I"transport;T@@ [I"transporter;T@@ [I"transporter-campfire;T@@ [I"transpose_chords;T@@ [I" traptcha;T@ @ [I"traquitana;T@ @ [I" trash;T@@ [I"trashable;T@'@ [I" trasto;T@'@ [I" traut;T@@ [I"traveladapter;T@E@ [I"traveller;TU;[I" 1.3.9;T@ [I"traversal;T@@ [I" traverse;T@@ [I"travertine;T@@ [I"travian_bot;T@@ [I" travis;T@@ [I"travis-artifacts;T@E@ [I"travis-ci-em-pusher;T@`@ [I"travis-cli;T@E@ [I"travis-client;T@@ [I"travis-core;T@'@ [I"travis-lint;T@@ [I"travis_reprise;T@|@ [I"travis-ruby;T@@@ [I"travis-stalker;T@"@ [I"travis-surveillance;T@@ [I"tray-checkout;T@@ [I"trazzler-api;T@@ [I"trb;T@@ [I"trd-rails-collector;T@@@ [I"treasure_hunt;T@@@ [I"treasury_bond_yield;T@!@ [I" treat;T@+@ [I" tree;T@@ [I" treebank;T@@ [I" treebis;T@@ [I" treecard;T@@ [I"tree_decorator;T@@ [I"tree_dehugger;T@@ [I"treedisha;T@E@ [I" treehash;T@'@ [I"tree_house;T@@ [I" treeline;T@@ [I"tree_node;T@@ [I" treeoid;T@'@ [I"tree_permute;T@@ [I" treequel;T@Z-@ [I"treequel-shell;T@Z-@ [I" tree.rb;T@[@ [I" treerepl;T@'@ [I" treesl;T@'@ [I" treet;T@@ [I"treetagger-ruby;T@@ [I" treetop;TU;[I" 1.4.12;T@ [I"treetop_css;T@'@ [I"treetop-dcf;T@@ [I"tree_view;T@!@ [I"treevisitor;T@[@ [I" trejo;T@'@ [I" trellis;T@`@ [I" trellish;T@p@ [I"trello_branch;T@@ [I"trello-client;T@@ [I" trema;T@@ [I"trendi18n;T@@ [I" trendy;T@@@ [I" trenni;T@N@ [I"trenni-formatters;T@@ [I" trenza;T@@ [I" trepan8;T@6@[@x@6@[I"trepanning;T@1@ [I" tre-ruby;T@`@ [I" tres;T@+@ [I"tres-raya;T@@ [I"trestle_generator;TU;[I" 1.1.7.3;T@ [I" tretry;T@'@ [I" trevor;T@'@ [I" trex;T@@ [I"treyconnell-ruby-aaws;T@&@ [I" tria;T@@ [I"triangular;T@E@ [I"triathlon;T@3@ [I" tribe;T@@ [I"tribeca_cms;T@`@ [I"tributary;T@"@ [I"trick_serial;T@@ [I"trickster;T@@ [I"tricycle-model_sync;T@@ [I"tricycle-rack-contrib;T@ @ [I" trie;T@'@ [I" tries;T@@ [I" trifle;T@@ [I" trigger;T@'@ [I"triggerhappy;T@@@ [I"trigger-happy;T@@ [I"trigger_switch_d;T@+@ [I" triglav;T@'@ [I"triglav-client;T@'@ [I"trigraph_password;T@@ [I" trim-api;T@[ @ [I"trim_blobs;T@'@ [I"trimetter;T@@ [I" trimify;T@@ [I"trimmable;T@`@ [I" trimmer;T@"@ [I" trimmy;T@@ [I"trim_spaces_for;T@@ [I" trimurti;T@@ [I" trinidad;T@@ [I"trinidad_daemon;T@@ [I"trinidad_daemon_extension;T@@ [I"trinidad_dbpool;T@@ [I"#trinidad_diagnostics_extension;T@@ [I"&trinidad_generic_dbpool_extension;T@@ [I"trinidad_hornetq_extension;T@@@ [I"!trinidad_hotdeploy_extension;T@@ [I"trinidad_init_services;T@@ [I"trinidad_jars;T@@ [I""trinidad_jmx_remote_extension;T@`@ [I"!trinidad_lifecycle_extension;T@x@ [I"trinidad_logging_extension;T@@ [I"$trinidad_mssql_dbpool_extension;T@@ [I"$trinidad_mysql_dbpool_extension;T@@ [I"%trinidad_oracle_dbpool_extension;T@@ [I")trinidad_postgresql_dbpool_extension;T@@ [I"trinidad_rack;T@@ [I"trinidad_resque_extension;T@`@ [I"trinidad_sandbox_extension;T@@ [I"!trinidad_scheduler_extension;T@@@ [I"trinidad_sidekiq_extension;T@'@ [I"%trinidad_sqlite_dbpool_extension;T@@ [I"'trinidad_threaded_resque_extension;T@@ [I"trinidad_valve_extension;T@@ [I"trinidad_worker_extension;T@@ [I" trinity;T@'@ [I"tripalertz;T@`@ [I"triphthong;T@@ [I" tripit;T@x@ [I"triplecheck;T@E@ [I"triplecrypt;T@@ [I"triple_parser;T@t @ [I" tripod;T@@ [I"trip_phrase;T@'@ [I"tripping-tyrion;T@`@ [I" tripwire;T@u@ [I"tripwire_notifier;T@@ [I"tristandunn-acts_as_markup;T@@ [I"%tristandunn-calendar_date_select;T@s@ [I"tristandunn-paperclip;T@r@ [I" trisulrp;T@*@ [I" tritech;T@@ [I" trith;T@"@ [I" triton;T@@ [I" triumph;T@I@ [I" trivia;T@`@ [I" trivial;T@n@ [I"trivialsso;T@@@ [I" trix51db;T@`@ [I"trixy_scopes;T@ @ [I" trlo;T@'@ [I" trocla;T@n@ [I" trofima;T@'@ [I"trogdoro-el4r;T@ @ [I" troles;T@@ [I" troll;T@n@ [I" trollied;T@+@ [I" trollop;T@@ [I"trollop-ghetto;TU;[I" 1.16.3;T@ [I"trollscript;T@E@ [I" tron;T@@ [I"tronprint;T@@ [I" trooper;T@@ [I" troops;T@@ [I" trope;T@@ [I" tropeco;T@@ [I"trophy-scraper;T@@ [I"tropo_message;T@@ [I"tropo-provisioning;T@ @ [I"tropo_rest;T@@@ [I"tropo-rest;T@6@ [I"tropo-webapi-ruby;T@!@ [I" troshka;T@@ [I" trout;T@[ @ [I"trove_oauth;T@'@ [I" trowel;T@@ [I" troy;T@V@ [I"trp_studio_game;T@@ [I"tr_resque;TU;[I" 1.20.1;T@ [I" trriad;TU;[I" 0.0.2.19;T@ [I" trtl;T@'@ [I"truby_license;T@@ [I" trucker;T@@ [I"truenames;T@'@ [I"true_queue;T@@ [I"true-random;T@x@ [I"truesenses;T@@ [I"trueskill;T@@ [I"trueskill-ranked;T@f!@ [I"true_test;T@@ [I" true-web;T@|@ [I"truffle-hog;T@@ [I"trufflepig;T@ @ [I" trufina;T@[@ [I"truly_outrageous;T@'@ [I"truncate_html;T@e@ [I"truncateHTML;T@@ [I"truncate_html_sentence;T@@ [I"truncate_middle;T@'@ [I"truncate_purge;T@@ [I"truncate_with_hover;T@@ [I" truncato;T@@ [I"trunction;T@@ [I" trunkly;T@@ [I" truss;T@'@ [I" trust;T@@ [I"trustcommerce;T@J@ [I"trusted_attributes;T@@ [I"trusted_keys;T@'@ [I"trust_html;T@+@ [I"trustworthy;T@@ [I" tRuTag;T@@ [I" truth;T@n@ [I"truthiness;T@`@ [I"truthtable;T@'@ [I"truth-table;T@@ [I" truthy;T@@ [I" Truveo;T@@ [I"trw;T@@ [I" trxl;T@!@ [I"try_again;T@@ [I"trydefault;T@@ [I" tryit;T@'@ [I" tryout;T@@ [I" tryouts;T@ @ [I"tryphon-pige-client;T@@ [I" ts3query;T@@ [I" tsafe;T@@ [I"ts-datetime-delta;T@@ [I"ts-delayed-delta;T@;@ [I" tsearch;T@W@ [I"tsenart-pivotal-tracker;T@@ [I" tserver;T@@ [I"tsion-jekyll;T@u @ [I"ts_json_api;T@[@ [I"tsm;T@B@ [I"tsm-accounting;T@@ [I"tsm-command;T@@ [I"tsql_shparser;T@'@ [I" tsrails;T@+@ [I"ts-resque-delta;T@@ [I"tst;T@@ [I" tsukuru;T@"@ [I" tsunami;T@x@ [I" tsundere;T@@ [I"tsung_stats_server;T@'@ [I"ts_vector_tags;T@@ [I" ts-xml;T@@ [I"tt;T@'@ [I" ttapi;T@@ [I"ttb-spreadsheet;TU;[I" 0.6.5.8;T@ [I" ttc_feed;T@@ [I" ttc-gps;T@@ [I" ttcp;T@@ [I" ttf2eot;T@@ [I" ttfunk;T@@ [I" ttg-sdk;T@'@ [I"t_time_tracker;T@@ [I"ttk;T@@ [I" ttml;T@@ [I"ttn_helpers;T@@@ [I"ttr;T@@ [I" ttrack;T@@ [I"tts;T@@ [I"tts-acapela;T@`@ [I"tts_based_on_google;T@@ [I"ttt;T@@ [I"tty;T@@ [I" ttycoke;T@@ [I" ttyname;T@@ [I"tty-process-ctl;T@@ [I"tu;T@E@ [I" tuan;T@'@ [I"tub;T@@ [I" tube;T@[@ [I" tuber;T@R@ [I" tubes;T@@ [I" tubular;T@@ [I" tucano;T@@ [I"tu-context;T@M+@ [I" tuenti;T@`@ [I"tuersteher;T@$@ [I" tuev;T@@ [I" tuff;T@E@ [I"tui;T@'@ [I"tuio-ruby;T@[@ [I" tuiter;T@n@ [I"tuk;T@I@ [I" tuktuk;T@@ [I"tulios-brcobranca;T@@ [I"tulios-brcobranca-rails2;T@~T@ [I"tumblargh;T@@ [I" tumble;T@@ [I" tumbler;T@ @ [I" tumblife;T@N@ [I" tumbling;T@@ [I" tumblr;T@ @ [I" tumblr2;T@@ [I" tumblr4r;T@@ [I"tumblr_api;T@@ [I"tumblr-api;T@+@ [I"tumblr-api-v2;T@E@ [I" tumblrb;T@+@ [I" tumbl_rb;T@`@ [I"tumblr_cleanr;T@'@ [I"tumblr_client;T@h@ [I"tumblr-follow;T@'@ [I"tumblr-fu;T@a@ [I"tumblr-oauth;T@`@ [I"tumblr-rb;T@O@ [I"tumblr-ruby;T@@ [I"tumblr-sync;T@`@ [I"tumblr_wrapper;T@@ [I" tumbz;T@@ [I" tuna;T@'@ [I" tune;T@E@ [I"tunecore-announcer;T@@ [I"tunecore_direct;T@`@ [I"tune_my_query;T@@ [I" tunkrank;T@- @ [I" tunl;T@E@ [I" tunnel;T@@ [I"tunnel-dummy-vmc-plugin;T@E@ [I" tunnelr;T@@ [I" tunnels;T@@ [I"tunnel_vision;T@E@ [I"tunnel-vmc-plugin;T@ @ [I" tunnlr;T@`@ [I"tunnlr_connector;T@@ [I"tupalo_api_client;T@@ [I"tupalo-gattica;T@@ [I"tupalo-kdtree;T@@ [I"tupalo-mini_magick;T@"@ [I"tupalo-vanity;T@@ [I" tuple;T@@@ [I"tuplelist;T@,@ [I" tuppari;T@@@ [I" tupper;T@@ [I" turbine;T@'@ [I" turbo;T@'@ [I"turbocharger;T@'@ [I"turbo-generators;T@E@ [I"turbolinks;T@@ [I"turbolinks-analytics;T@'@ [I"turbolinks-js;T@@ [I"turbosass;T@@ [I"turbo-sprockets-rails3;T@@ [I"turbulence;T@@ [I" turing;T@@ [I"turing-machine;T@E@ [I"turing_tarpit;T@@ [I" turkee;T@u@ [I" turn;T@Q@ [I"turner_logs;T@'@ [I" turning;T@E@ [I" turnip;T@@ [I"turnip-kanban;T@'@ [I" turnout;T@I@ [I" turnpike;T@@ [I"turnstile;T@`@ [I"turntable;T@'@ [I"turntable_api;T@E@ [I"turntabler;T@+@ [I"turquoise;T@V@ [I" turtle;T@'@ [I" tusk;T@@ [I" tuwaga;T@@ [I"tuwien_logon;T@@ [I"tux;T@@ [I" tuxdroid;T@@ [I" tuxedo;T@' @ [I" tuxml;T@'@ [I"tux_studio_game;T@@ [I"tvc;T@@ [I"tvd-alpha_omega;T@n@ [I"tv-data-api-clients;T@n@ [I" tvdb;T@@ [I"tvdb_party;T@@ [I" tvdbr;T@I@ [I" tvdb-rb;T@@ [I"tvdb_ruby;T@'@ [I"tvd-bundler;T@V@ [I" tvd-dmg;T@@ [I" tvdeyen_acts-as-taggable-on;T@)@ [I"tvdeyen-ferret;TU;[I" 0.11.8.1;T@ [I"tvdeyen-fleximage;T@N@ [I"tvdeyen_sassy-buttons;T@@@ [I"tvdeyen-sassy_buttons;T@6@ [I" tvd-gem;T@@ [I" tvd-git;T@p@ [I"tvd-microwave;T@@ [I"tv-dot-com;T@[ @ [I"tvd-rubygems;T@n@ [I"tvd-runit;T@@ [I" tvd-ssh;T@@ [I"tvd-unicorn;T@@ [I"tvm;T@'@ [I" tvrage;T@'@ [I"tv-ripper;T@'@ [I"tvshow_renamer;T@@ [I"tw;T@@ [I" twail;T@@ [I" twalk;T@E@ [I" twat;T@ @ [I"twaudio-ruby;T@@ [I"tw_bootstrap_helper;T@@ [I" twdeps;T@E@ [I" twdo;T@E@ [I" tweak;T@`@ [I" tweaks;T@@ [I" tweed;T@@ [I" tweedle;T@@@ [I" tween;T@@@ [I" tweep;T@@ [I" tweepml;T@[ @ [I" tweet;T@6@ [I"tweetable;T@N$@ [I"tweetabout;TU;[I" 0.0.5.0;T@ [I" tweetbot;T@@ [I"tweet-button;T@@ [I"tweetclock;T@'@ [I"tweetdump;T@6@ [I" tweeter;T@@ [I"tweet_frequency;T@@ [I"tweethook;T@@ [I"tweethose;T@E@ [I"tweetline;T@@ [I" tweetlr;T@p@ [I" tweetly;T@`@ [I"tweetminer;T@'@ [I"tweetparser;T@I@ [I" tweets;T@E@ [I"tweetsentiments;T@`@ [I"tweetskim;T@@ [I"tweetspeak;T@@ [I"tweetstream;T@.@ [I"tweettail;T@@ [I"tweetwall;T@@ [I"tweetwine;T@@ [I"tweet-words;T@@ [I" tweety;T@'@ [I" twelve;T@@ [I"twenty3andme;T@@ [I" twfy;T@@ [I" twhois;T@"@ [I" twiauth;T@@ [I" twibot;T@@ [I"twiddler-utils;T@@ [I" twigger;T@@ [I"twiki2markdown;T@@ [I" twilio;T@@ [I"twilioauth;T@@ [I"twilio_contactable;T@@ [I"twiliolib;T@1@ [I"twilio-rb;T@ @ [I"twilio_resource;T@@ [I"twilio-ruby;T@L@ [I"twilio-test-toolkit;T@@ [I"twilio-wrapper;T@@ [I" twilip;T@@ [I" twilter;T@@ [I" twim;T@@ [I" twimage;T@@@ [I" twin;T@6@ [I" twine;T@@ [I"twinfield;T@'@ [I" twinger;T@@ [I" twink;T@@ [I" twinkit;T@E@ [I"twin_turbo;T@'@ [I"twin_validator;T@@ [I" twiq;T@@ [I" twisplay;T@@ [I" twist;T@-!@ [I"twistage_stats_reports;T@@ [I" twisted;T@@ [I"twistream;T@@ [I"twitbookis;T@@ [I" twitchus;T@1@ [I" twithub;T@|@ [I"twitphoto;T@- @ [I" twitpic;T@@ [I"twitpic-full;T@@ [I" twitter;T@P@ [I"twitter2campfire;T@@ [I"twitter2jabber;T@@ [I"twitter2mixivoice;T@@@ [I"twitter2vk;T@R @ [I"twitter2vk_reposter;T@R @ [I"twitter4j4r;T@`@[I"twitter4r;T@X@ [I"twitter_alert;T@`@ [I"twitter_atm;T@@ [I"twitter-auth;T@M@ [I"#twitter-auth-with-mongo-mapper;T@`@ [I"twitter-avatar-update;T@@ [I"twitter_backup;T@@ [I"twitter_bootstrap;T@O@ [I"twitter-bootstrap;T@'@ [I"twitter_bootstrap_builder;T@n@ [I"twitter-bootstrap-calendar;T@E@ [I"!twitter_bootstrap_formalwear;T@e@ [I"#twitter-bootstrap-form-builder;T@ @ [I"twitter_bootstrap_form_for;T@W@ [I"twitter_bootstrap_helper;T@@ [I"twitter_bootstrap_helpers;T@@ [I"twitter_bootstrap-helpers;T@E@ [I"twitter-bootstrap-helpers;T@@@ [I"%twitter_bootstrap-kaminari-views;T@@ [I"twitter_bootstrap_markup;T@@ [I"#twitter-bootstrap-markup-rails;TU;[I" 0.3.2.2;T@ [I"twitter-bootstrapped;T@'@ [I"twitter-bootstrap-rails;T@ @ [I"!twitter-bootstrap-rails-ajax;T@'@ [I"$twitter-bootstrap-rails-confirm;T@@ [I"*twitter-bootstrap-rails-confirm-decaf;T@"@ [I"twitter-bootstrap-ruby;TU;[I" 2.1.1.0;T@ [I"twitter_bootstrap_sass;T@@ [I"twitter-bootstrap-scaffold;T@@ [I"twitter-bootstrap-turbo;T@@ [I"twitter-bootswatch-rails;T@@ [I"%twitter-bootswatch-rails-helpers;TU;[I" 2.2.1.0;T@ [I"twitter_bot;T@E@ [I"twitter_cldr;T@@ [I"twitter_cldr_js;T@O@ [I"twitter_connect;T@6@ [I"twitter-console;T@'@ [I"twittercounter;T@@ [I"twitterdispatch;T@E@ [I"twitterfeed;T@@ [I"twitter_feed;T@@ [I"twitter_friends;T@'@ [I"twitter-friends;T@'@ [I"twitter_hashtag;T@@ [I"twitter_instapaper;T@@ [I"twitterize;T@@ [I"twitter-jruby;TU;[I"0.9.7.2010061001;T@ [I"twitter_kotoba;T@6@ [I"twitterland;T@_@ [I"twitter-lists;T@E@ [I"twitter-lists-cli;T@@ [I"twitter-login;T@@ [I"twitterlost;T@@ [I"twittermotion;T@'@ [I"twitter-multi;TU;[I" 0.9.8.3;T@ [I"twitter_oauth;T@"@ [I"twitter-photos;T@@ [I"twitter_poster;T@'@ [I"twitter-redis-identitymap;T@'@ [I"twitterscour;T@@ [I"twitterscrobble;T@E@ [I"twitter-search-watcher;T@+@ [I"twitter_server;T@@ [I"twitter-stats;T@@ [I"twitterstream;T@@ [I"twitter-stream;T@. @ [I"twitter-text;T@@ [I"twitter_to_csv;T@`@ [I"twittertype;T@@ [I"twitter-userstream;T@@@ [I"twitter_util;T@E@ [I" twix;T@@ [I" twke;T@@ [I"twler-forem;T@E@ [I"twm-cms-bindings;T@ @ [I"twm_paperclip;T@@ [I" twoch;T@'@ [I"twocheckout;T@`@ [I"two_faced;T@E@ [I"two_factor_authentication;T@!@ [I"twoffein-client;T@@@ [I" twofish;T@@ [I" twog;T@@ [I"two-legged-oauth;T@E@ [I"twoproblems;T@'@ [I"tworgy-rails;T@@ [I"tworgy-rails-ext;T@@ [I"tworgy-ruby;T@@ [I"tworgy-spaced-repetition;T@@ [I"twostroke;T@@ [I"twowaysql;T@@ [I" twpipe;T@@ [I" TWSMS;T@@ [I" twss;T@@ [I" twssbot;T@'@ [I"twss-classifier;T@'@ [I"tw-studios-jruby-prof;T@`@ [I"twt;T@@ [I" twtail;T@@ [I" twtest;T@@ [I" twtmore;T@@ [I" twtr;T@+@ [I" twuckoo;T@@ [I" twurl;T@@ [I"tx;T@@ [I" txpadmin;T@"@ [I" txprails;T@@@ [I" txt2img;T@@ [I" txtbook;T@`@ [I" txter;T@+@ [I"txt_file_mutator;T@,@ [I" txtlocal;T@'@ [I" txtspk;T@@ [I"txtweb-ruby;T@@ [I"txus-aversion;T@E@ [I"ty;T@@ [I" tyler;T@@ [I"tyler_gem;T@@ [I"tylerrick-bcms_blog;T@ @ [I"tylerrick-chef;T@d@ [I" tyop;T@E@ [I"type_array;T@[ @ [I"typecaster;T@'@ [I"typecollection;T@@ [I" typed;T@[@ [I"typed_accessors;T@@ [I"typed-array;T@@@ [I"typed_attributes;T@E@ [I"typed-enum;T@'@ [I"typedeploy;T@`@ [I"typed_fields;T@@ [I"typed-matcher;T@@ [I" typedown;T@@ [I"typedown2blog;T@@@ [I"typed_serialize;T@@ [I"typed_set;T@@ [I"typefront;T@@ [I" typekit;T@@ [I" typelib;T@@ [I" typeout;T@Q%@ [I"type_pad_template;T@@ [I" typer;T@@ [I" types;T@6@ [I" typesafe;T@E@ [I"typesafe-ruby;T@E@ [I"typescript;T@`@ [I"typescript-node;T@"@ [I"typescript-rails;T@"@ [I"typescript-source;T@X'@ [I"typescript-src;TU;[I" 0.8.1.1;T@ [I"typesetter;T@'@ [I"typestrict;T@ @ [I"typewriter;T@s@ [I"typhoauth;T@W^@ [I" typhoeus;T@J@ [I"typhoeus_curly;T@N$@ [I"typhoeus-simple;T@@ [I"typhoeus_spec_cache;T@I@ [I" typhon;T@@ [I"typho-twitter;T@@ [I" typie;T@@ [I"typingpool;T@@ [I" typisch;T@1@ [I" typo;T@@ [I"typofixer;T@'@ [I" typograf;T@"@ [I"typograf_ru;T@E@ [I"typographer;T@@ [I"typographer-addons;T@@ [I"typographica;T@@ [I"typographic-unit;T@`@ [I"typography;T@@ [I"typogrify;T@'@ [I"typogruby;T@D@ [I" typrtail;T@@ [I" typus;TU;[I" 3.1.10;T@ [I"typus_treeview;T@`@ [I"tyrantmanager;T@K>@ [I" tyrion;T@@ [I" tyrone;T@ @ [I" tytus;T@@ [I" tzdetect;T@6@ [I" tzinfo;TU;[I" 0.3.35;T@ [I" tzip;T@@ [I" tz_magic;T@'@ [I" tztime;T@@ [I"u;T@@ [I" uaenv;T@@ [I" uagent;T@"@ [I"uagent_rack;T@'@ [I" uaid;T@6@ [I"ua_parser;T@'@ [I"uat_director;T@@ [I" uatu;T@@ [I" ubalo;T@@ [I" ubazu;T@+@ [I"ubc-monitor;T@@ [I"uberbutton;T@`@ [I"uberchronic;T@@ [I"uber_config;T@W@ [I" uberhook;T@"@ [I" uberkit;T@@ [I" uberpass;T@@ [I" uber-s3;T@,@ [I"ubersmith;T@W@ [I"uberspacify;T@@ [I" uberspec;T@@ [I" ubimport;T@@ [I"ubiquitous;T@"@ [I"ubiquitously;T@@ [I"ubiquitous_user;T@@ [I" ubiquo;T@y@ [I"ubistrano;T@N'@ [I"uboost-client;T@@ [I" ubsafe;T@@ [I"ubuntu_ami;T@x@ [I"ubuntu-machine;TU;[I"0.5.3.2.25;T@ [I"ubuntu-machine-rachid;TU;[I"0.5.3.2.24;T@ [I"ubxd_support_rota;T@E@ [I" ubyray;T@@ [I"ucallback;T@E@ [I"ucb_confluence;T@@ [I"ucb_deployer;T@@ [I"ucb_ist_unix;T@T @ [I" ucb_ldap;T@@ [I"ucb_rails_security;T@ @ [I"ucc;T@z@ [I" uc_card;T@@ [I" ucengine;T@J@ [I" uchardet;T@6@ [I"uclassify;T@`@ [I"uclick-mailer;T@@ [I"ucloudstack;T@"@ [I" ucool;T@@ [I" UCSAPI;T@@ [I" UCSCBin;T@I@ [I" ucslib;T@@ [I" udat;T@@ [I" uddi4r;T@B@ [I" udjrb;T@@ [I" UDJrb;T@'@*[@<~@E@ [I" udon;T@"@ [I"uea-stemmer;T@[@ [I"uec_express_api;T@`@ [I" ueditor;T@E@ [I" uencode;T@@ [I"uenf_layout;T@@ [I" ufooar;TU;[I"0.1.1.140;T@ [I"uformatparser;T@@ [I" uformats;T@u@ [I"ugalic_moneta;T@E@ [I"ugalic_yelp;T@'@ [I"ugc;T@- @ [I" ugigi;T@@ [I" uglier;T@@@ [I" uglifier;T@@ [I"ugly.automata;T@@ [I" ugoki;T@@ [I"UG_RRobots;T@@ [I" uhferret;T@ @ [I"uhh;T@@ [I"uhl-cap-recipes;T@ @ [I"ui;T@@ [I"ui_datepicker-rails3;T@@ [I"uid_attribute;T@@ [I"ui_guiders;T@@ [I"ui_helpers;T@'@ [I"ui-helpers;T@E@ [I"uikit-rails;T@E@ [I" uirusu;T@@ [I"uispecrunner;T@_@ [I" uits;T@@ [I" ujsos;T@@ [I"uki;T@T @ [I"uk_phone_numbers;T@@ [I"uk_postcode;T@@ [I"ukrainian;T@@@ [I"uk_ranking;TU;[I" 0.54.0;T@ [I"ukstudio-geokit;T@@ [I"uk_working_days;T@@ [I" ulla;T@/L@ [I"ULL-ETSII-Alu3177-Quiz;T@+@ [I"ull-etsii-alu4214-quiz;T@`@ [I"ull-etsii-alu4237-quiz;T@'@ [I" ullr;T@+@ [I" ulmul;T@@ [I" ulpos;T@6@ [I"ultimate-base;TU;[I" 0.4.0.0;T@ [I"ultimate-flash;T@@ [I"ultimate-helpers;T@W@ [I"ultimate-log-silencer;T@@ [I"ultracache;T@+@ [I"ultradns_updater;T@K,@ [I"ultra_pow_list;T@`@ [I"ultrasphinx;T@L@ [I"ultravault;T@N@ [I"ultraviolet;T@@ [I"ultraviolet1x;T@l5@ [I"umanni-email-contacts;T@@ [I"umanni-multipart-post;T@ @ [I"umanni-picasa;TU;[I" 0.0.0.12;T@ [I" umbrella;T@@ [I"umbrello_scaffold;T@E@ [I"umka_juggernaut;T@'@ [I" umlaut;T@ @ [I" umlify;T@@ [I"umount-many;T@@ [I"un;T@@ [I"unageanu-javaclass;T@x@ [I" uname;T@@ [I" unapi;T@n@ [I"unboxed-less;TU;[I" 1.2.19;T@ [I"unbreakable;T@@ [I" unbutton;T@@ [I"uncertain;T@@ [I"uncharted;T@ @ [I"4unclebilly-activerecord-oracle_enhanced-adapter;T@u"@ [I" uncoil;T@@ [I" uncool;T@@ [I" uncut;T@`@ [I" undantag;T@@ [I" undata;T@@ [I"undelayed_job;T@'@ [I"underglow;T@@ [I"undergroundweather;T@@ [I" underoos;T@@ [I"underpants;T@@ [I"under_rack;T@'@ [I"underscore;T@@ [I"underscore_extensions;T@@ [I"underscore-rails;T@@ [I"underscore-source;T@ @ [I"underscore-string-rails;T@'@ [I"underscore-template;T@'@ [I"underscore-template-rails;T@E@ [I"underscore_win32ole;T@'@ [I"undertaker;T@@ [I"undertexter;T@t @ [I"undestroy;T@`@ [I"undestroyable;T@E@ [I" undies;T@ @ [I" undress;T@`@ [I"unencumbered;T@@ [I"unextendable;T@@ [I"unf;T@@ [@@@[I" unf_ext;T@@ [@@@ [I" unfickle;T@@ [I" unfuddle;T@`@ [I"unfuddle_my_email;T@I@ [I"unfuddler;T@"@ [I" ungulate;T@@ [I"unhaddins;TU;[I"3.0.0.899.20100722;T@ [I"unhappymapper;T@@ [I" unichars;T@@ [I" unicode;T@@ [@5@@ [@5@@[I"unicode-block;T@@ [I"unicodechars;T@E@ [I"unicode-display_width;T@`@ [I"unicode_japanese;T@!@ [I"unicode_madness;T@@ [I"unicode_math;T@@ [I"unicode-multibyte;T@@ [I"unicode_scanner;T@@ [I"unicodetiles;T@@ [I"unicode_utils;T@@ [I" unicolor;T@@ [I" unicorn;T@@ [I"unicorn-directory-watcher;T@|@ [I"unicorn-formatter;T@6@ [I"unicorn-fotopedia;T@(@ [I"unicorn_horn;T@I@ [I"unicorn-rails;T@@ [I"unicorn-worker-killer;T@@ [I" unicron;T@@ [I" unidata;T@V@ [I"unidecode;T@@ [I"unidecoder;T@@ [I" unific;T@Q@ [I" unified2;T@@ [I"unified_db;T@@ [I"unified_diff;T@@ [I"unified-logger;T@|@ [I"unified_matchers;T@n@ [I"unified-queues;T@@ [I"unified-redis;T@E@ [I"uniformjs-rails;T@]?@ [I"uniform_notifier;T@@ [I" uniform_resource_identifier;T@M@ [I" unify;T@@ [I" unigems;T@'@ [I" unigrep;T@@ [I"unigunkan;T@@ [I" unihan;TU;[I"5.0.0.1.1;T@ [I" unihawk;T@E@ [I"unilogger;T@'@ [I" unimidi;T@@y;[@@@ [@@I"x86_64-darwin10.7.0;T[@@@}1[@@@[I" unindent;T@@ [I"unindentable;T@@ [I"unindented-hassle;T@E@ [I"uninhibited;T@@ [I" union;T@@ [I"union_station;T@@ [I"unipass_api;T@E@ [I"uniq-deploy;T@@ [I"uniq-gem-repo;T@@ [I"uniq-red-process;T@@ [I"uniq-registor;T@<@ [I"uniqueable;T@n@ [I"unique_content_set;T@@ [I"unique_delayed_job;T@`@ [I" uniquefy;T@"@ [I"unique_generator;T@@ [I"unique_permutation;T@@ [I"unique_token;T@@ [I" uniquify;T@@ [I"uniquify-uuid;T@@ [I"uni_sender;T@@ [I"unisender-rails;T@@ [I" unistats;T@@ [I" unit;T@@ [I"unit_controller;T@@ [I"unit_converter;T@@ [I" unite;T@N@ [I" unitfy;T@@ [I"unit_hosting;T@E@ [I"unit-hosting;T@@ [I"unit_record;T@e@ [I" units;T@@ [I"units-system;T@@ [I"unittest-colorizer;T@@ [I"unit_validation;T@E@ [I"unit_validator;T@I@ [I" unity;TU;[I"2.0.414.0.20100814;T@ [I" unityapi;T@`@ [I"unity-code-templates;T@@ [I" universal-access-log-parser;T@@ [I"universal_flash_messages;T@6@ [I" universe;T@`@ [I"universe-common;T@`@ [I"universe-core;T@`@ [I"universe-db;T@`@ [I"universe-devtools;T@`@ [I"universe-javascript;T@`@ [I"universe-parsing;T@`@ [I"universe-rack;T@`@ [I"universe-rack-testing;T@`@ [I"universe-rails;T@`@ [I"universe-rails-testing;T@`@ [I"universe-sinatra;T@`@ [I"universe-staticweb;T@`@ [I"universe-templates;T@`@ [I"universe-testing;T@`@ [I"universe-webframeworks;T@`@ [I"universe-webserver;T@`@ [I"university;T@'@ [I"unix_commander;T@1@ [I"unix-crypt;T@@ [I"unix_epoch;T@@ [I" unixinfo;T@@ [I" unix_ugm;T@@ [I"unix_utils;T@@ [I"unix-whereis;T@`@ [I" unknownr;T@@ [I" unko;T@@ [I" unlocket;T@E@ [I" unmac;T@@ [I"unnecessary_censorship;T@6@ [I"unobservable;T@*@ [I"unobtrusive_flash;T@E@ [I" unpack;T@@ [I" unpacker;T@@ [I"unpatched;T@'@ [I" unpickle;T@E@ [I" unread;T@`@ [I" unroller;T@@ [I" unruly;T@'@ [I" unsavory;T@@ [I"unshorten;T@@ [I"unshortme;T@@ [I"unsitemap;T@'@ [I"$unsupervised-language-detection;T@@ [I" untangle;T@'@ [I" untappd;T@@ [I"untappd-api;T@6@ [I" untied;T@@ [I"untied-consumer;T@@ [I"untied-consumer-sync;T@'@ [I"&untied-consumer-sync-activerecord;T@'@ [I"untied-publisher;T@@ [I"untitled37;T@'@ [I"untranslated;T@@ [I"unused_view;T@"@ [I" unveil;T@+@ [I"unveil-ruby;T@"@ [I" unwind;T@ @ [I" unxf;T@@ [I" unzipMe;T@@ [I"uom;T@@ [I" uorm;T@@ [I"up;T@E@ [I"upandrunning;T@@ [I"upc;T@@ [I"upcoming-api;T@!@ [I"upcoming-events;T@'@ [I" update;T@<@ [I"updateafraid;T@@@ [I"&update_attribute_with_validations;T@@@ [I"updatebroker;T@V@ [I"update_cadabra;T@@ [I"update-fields;T@'@ [I"update_filter;T@'@ [I"update_hints;T@@ [I"update_partial;T@@ [I" updater;T@[@ [I"Update_Site_Cookbooks;T@`@ [I"update_status;T@I@ [I" updawg;T@@ [I" updog;T@E@ [I" updraft;T@@ [I" upflickr;T@@ [I" upify;T@E@ [I" uplift;T@'@ [I" upload;T@'@ [I"uploadable;T@E@ [I"uploadable_file;T@'@ [I"upload_cache;T@ @ [I"uploadcare;T@@ [I"uploadcare-api;T@E@ [I"uploadcare-rails;T@I@ [I"uploadcare-widget;T@@ [I"uploadcolumn;T@@ [I" uploader;T@1.@ [I"uploadify;T@@ [I"uploadify-rails;TU;[I" 3.1.1.1;T@ [I"uploadify_rails3;T@@@ [I"upload_juicer;T@@ [I"upload_kit-rails;T@@ [I" upmark;T@+@ [I"upn;T@'@ [I" UPnP;T@N@ [I"UPnP-ConnectionManager;T@@ [I"UPnP-ContentDirectory;T@@ [I" UPnP-IGD;T@@ [I"UPnP-MediaServer;T@@ [I" upoj-rb;T@@ [I" uppercut;T@@ [I"uppercutbuild;TU;[I" 1.4.2.0;T@ [I"uppmax-gadget;T@@ [I"upr;T@@ [I"upscrn-client;T@@ [I" upsert;T@@ [I"ups_pickup;T@E@ [I"ups_shipping;T@@ [I" upstart;T@@ [I"upstart-exporter;T@@ [I"ups_time_in_transit;T@`@ [I"upstream-rails_admin;T@@ [I" upyun;T@@ [I"upyun-paperclip;T@|@ [I"upyun-rainbow;T@@@ [I" uranium;T@'@ [I" urban;T@@ [I"urbanairship;T@ @ [I"urbanairship_on_rails;T@'@ [I"urban_api;T@@ [I"urbandictionary;T@@ [I"urban_dictionary;T@E@ [I" urbane;T@@ [I"urbanesia;T@@ [I"Urbanesia;T@'@ [I"urbanlexicophile;T@@ [I"urban-mapping-api;T@@ [I"urbanterror;T@@ [I"urbanterror_stats;T@'@ [I"urf;T@'@ [I" uric;T@@ [I"uri-component;T@"@ [I" urifetch;T@@ [I"uri-handler;T@@ [I"uri-js-rails;T@1@ [I" uri-meta;T@*@ [I"uri_parser;T@@ [I"uri_pathname;TU;[I" 0.1.1.0;T@ [I"uri-query_params;T@X@ [I"uri-redis;T@@ [I"urirequire;T@@ [I" uri-smb;T@E@ [I"uri-subdomain;T@"@ [I"uri_template;T@@ [I"uri-templates;T@@ [I"uri_validator;T@@ [I"url;T@@ [I" url2png;T@@ [I"url2png-dc;T@@ [I" Url2Yml;T@"@ [I"url_authenticator;T@'@ [I"url_compare;T@@ [I"url_encrypt;T@@ [I"url_escape;T@9@[@3@9@ [I"url_expander;T@|@ [I"url-fetcher;T@@ [I"url_field;T@E@ [I"url_formatter;T@'@ [I" url_hash;T@@ [I"url_hunter;T@E@ [I" urlify;T@I@ [I"url_info_extractor;T@E@ [I" Urlize;T@@ [I" url_job;T@@ [I"url_keyed_object;T@@ [I"url_locale;T@@ [I"url_maker;T@@ [I"url_mount;T@@ [I" urls;T@@ [I"url_safe_base64;T@@ [I"url_session;T@'@ [I" urlshort;T@@ [I"url_shortener;T@n@ [I"url_slicer;T@@ [I"urlsplease-imposter;T@@ [I"url_store;T@@ [I"url_to_contents;T@@ [I"url_to_media_tag;T@+@ [I"url_tracker;T@s@ [I"url_validation;T@@ [I"url_validator;T@@ [I"url-vi0lence;T@'@ [I" urlybird;T@"@ [I"urm;T@@ [I"ur-product;T@ @ [I" ur-sab;T@R @ [I" urss;T@@ [I" urtak;T@ @ [I"urturn-cli;T@@ [I" usage;T@"@ [I" Usage;T@E@ [I" usaidwat;T@6@ [I"usaspending;T@`@ [I"usa_today_books;T@'@ [I"usatoday-census;T@"@ [I"usb-detection-sensor;T@I@ [I"u_s_census;T@"@ [I"uscommerce;T@@ [I" usdo;T@@ [I"use;T@ @ [I" use0mk;T@`@ [I"use-config;T@@ [I" use_db;T@@ [I" useful;T@@ [I"useful_class_extensions;T@@ [I" usefuldb;T@@ [I"useful_functionality;T@@ [I"usefull_extension;T@@ [I"usefull_filter;T@"@ [I"usefull_table;T@@ [I"usefull_tools;T@@ [I"useful_string_extensions;T@@ [I"useful_validators;T@@ [I"use_index;T@@ [I" useless;T@@ [I"useless-doc;T@@ [I"useless_gem;T@'@ [I"useragent;T@@ [I"user_agent;T@@ [I"user-agent;T@@ [I"useragent2css;T@@ [I"useragent-fl;T@@ [I"user_agent_info;T@@ [I"user_agent_parser;T@@ [I"useragent_parser;T@I@ [I"user_agent_sanitizer;T@+@ [I"userapi-ruby;T@'@ [I"user_authentication;T@n@ [I"user-choices;TU;[I" 1.1.6.1;T@ [I"user_config;T@"@ [I"usercycle;T@6@ [I" usergrid;T@@ [I"usergrid_iron;T@@ [I"usergrid_ironhorse;T@@ [I"userharmony-flickr_fu;T@@ [I" userify;T@[@ [I"user_impersonate;T@@ [I"userinfuser;T@' @ [I"user_input;T@@ [I" userl;T@`@ [I"user_list;T@@ [I"usernamecheck;T@@ [I"username_password;T@'@ [I"username_suggester;T@@ [I"user_profile_formatter;T@'@ [I"user_query;T@@ [I"user_redmine;T@'@ [I"user_redmine_client;T@'@ [I" users;T@@ [I"users-and-hashtags;T@@ [I"userscripts_org;T@@ [I"userstamp;T@@ [I"userstamp_basic;T@@ [I"userstamps;T@E@ [I"userstream;T@@ [I"user-stream-receiver;T@J@ [I" usertext;T@@ [I"uservoice;T@@ [I"uservoice-ruby;T@@ [I"uservoice-turbolinks;T@'@ [I" usesguid;T@@ [I"usesguid_migrations;T@@ [I"use_the_forcible;T@E@ [I"use_tinymce;T@@ [I" ushahidi;T@@ [I" usher;T@&@ [I" using;T@|@ [I"using_yaml;T@@ [I" usps;T@@@ [I"USPS-intelligent-barcode;T@,@ [I"usps_standardizer;T@@ [I"uss_monte_carlo;T@@ [I"us_states;T@`@ [I"us_states_select;T@N@ [I"ustate-client;T@V@ [I"usvn-crowd-sync;T@@ [I"utahpollen;T@@ [I" utel;T@,@ [I" utensils;T@@ [I" utest;T@'@ [I" utf8;T@@ [I"utf8cleaner;T@'@ [I"utf8_enforcer_workaround;T@@ [I" utf8proc;T@@ [I"utf8_translatable;T@N@ [I"utf8_utils;T@@ [I"utf8_validator;T@@ [I" utiles;T@"@ [I"utilikilt;T@@ [I" utilio;T@"@ [I"utilities;T@@ [I"utility_belt;T@@ [I"utility_belt_r19;T@'@ [I"utility_drawer;T@|@ [I"utilitypack;T@Y@ [I"utility_scopes;T@@ [I" utilrb;T@X@ [I" utils;TU;[I" 0.0.69;T@ [I"utm-builder;T@@ [I" utochki;T@@ [I" utopia;T@)@ [I"utopia_data;T@'@ [I"utopia-extras;T@*@ [I" utsup;T@1@ [I" uttk;TU;[I" 0.4.6.2;T@ [I" uuid;T@@ [I" uuid4r;T@@@ [I"uuid4r-candy;T@'@ [I" uuiddqd;T@'@ [I"uuid_helper;T@@@ [I" uuid_it;T@|@ [I"uuidtools;T@@ [I"uuid_validator;T@@ [I" uuml;T@@ [I"uunique_ids;T@!@ [I" uureader;T@'@ [I" uusoso;T@'@ [I" uuvula;T@E@ [I"uv;TU;[I" 0.0.7.5;T@ [I"uva-happymapper;T@@ [I"uv_proxmox;T@'@ [I" uvrb;T@@ [I"uv_refactor;T@E@ [I"uwa;T@D@ [I" uwace;T@@ [I"uwa_download;T@!@ [I"uwa_files;T@@ [I"uwa_hello;T@s@ [I"uwa_polaroid;T@@ [I"uwa_syshd;T@[ @ [I"uwa_sysload;T@R @ [I" uw_learn;T@@ [I" uzi-rect;T@@ [I"uzi-soundmanager;T@'@ [I"uzi-timer;T@'@ [I"uzi-vector2;T@'@ [I" uzuuzu;T@@ [I"uzuuzu-cms;T@E@ [I"uzuuzu-core;T@=@ [I"v;T@`@ [I"v2a-deploy;T@@ [I"v2d;T@@ [I" v2ex;T@@ [I" va_cache;T@@ [I" vacation;T@@@ [I" vacuum;T@@ [I"vacuum_cleaner;T@@ [I" vagalume;T@`@ [I" vagrant;T@W@ [I"vagrant-ansible;T@"@ [I"vagrant-apt_cache;T@'@ [I"vagrant-aws;T@'@ [I"vagrant-bindfs;T@g@ [I"vagrant_bootstrap;T@@ [I"vagrantboxes;T@E@ [I"vagrant-bundler;T@`@ [I"vagrant-bundler-tools;T@`@ [I"vagrant-butcher;T@E@ [I"vagrant-butter;T@@ [I"vagrant-cookbook-fetcher;T@@ [I"vagrant-dns;T@@ [I"vagrant-dns-server;T@@ [I"vagrant-dsl;T@@ [I"vagrant-hiera;T@x@ [I"vagrant-hitch;T@@ [I"vagrant-hostmaster;T@@ [I"vagrant-hostruby;T@'@ [I"vagrant-hosts;T@'@ [I"vagrant-kick;T@'@ [I"vagrant-librarian;T@@ [I"vagrant-list;T@@ [I"vagrant-notify;T@'@ [I"vagrant-persistent-storage;T@E@ [I"vagrant-plugins;T@@ [I"vagrant-prison;T@@ [I"vagrant-proxyssh;T@@ [I"vagrant-puppetconf;T@I@ [I"vagrant-putty;T@E@ [I"vagrant-rake;T@@ [I"vagrant-rake-fork;T@@ [I"vagrant-salt;T@@ [I"vagrant-sandbox;T@@ [I"vagrant-screenshot;T@!@ [I"vagrant-serial;T@@ [I"vagrant-snap;T@Q@ [I"vagrant-spatula;T@@ [I"vagrant-sync;T@`@ [I"vagrant-test;T@@@ [I"vagrant-vbguest;T@@ [I"vagrant-vmhosts;T@"@ [I"vagrant-windows;T@@@ [I"vagrant-yaybu;T@n@ [I"vagrant-zentoo;T@6@ [I" vail;T@@ [I" vain;T@`@ [I"vain_routes;T@@ [I" valcro;T@@ [I""valdemaximus-actionwebservice;T@`@ [I"valdemaximus-conduit;T@N@ [I"valdemaximus-xx;T@X@ [I"valentine;T@@ [I" valerii;T@@ [I" valet;T@V@ [I" valhalla;T@'@ [I" valibot;T@^@ [I" valid;T@@ [I"valid8ors;T@@@ [I"#validas-encrypted_cookie_store;T@@ [I"validatable;T@j@ [I"validatable2;T@@ [I"validatable-active_model;T@@ [I"validatable_associations;T@@ [I"validatable_form;T@E@ [I"validate_as_email;T@@ [I"validate_block;T@@ [I"validated_arguments;T@'@ [I"validate_email;T@1@ [I"ValidateEmail;T@@ [I"validate_email_address;T@@ [I"validate_nz_bank_acc;T@@ [I"validate_options;T@E@ [I"validates;T@V@ [I"$validates_against_stopforumspam;T@@ [I"!validates_and_formats_phones;T@@ [I"validates_as_cnpj;T@@ [I"validates_as_cpf;T@@ [I"validates_as_date_time;T@@ [I"validates_as_email;T@@ [I"validates_as_email_address;T@,@ [I" validates_as_hostname_label;T@@ [I"validates_as_mail;T@@ [I"validates_as_mobile;T@E@ [I"validates_as_phone_number;T@!@ [I"validates_as_postal_code;T@@ [I"validates_as_uk_postcode;T@@ [I"validates_as_uri;T@`@ [I"validates_as_vat_number;T@@ [I"validates_belongs_to;T@@ [I"validates-belongs-to;T@E@ [I"validates_blacklist;T@'@ [I"validates_by_schema;T@I@ [I"validates_captcha;T@ @ [I"validates_cnpj;T@;@ [I"validates_constancy;T@@ [I"validates_cpf;T@;@ [I"validates_cpf_cnpj;T@@ [I"validates_date_time;T@@ [I"validates_decency_of;T@@ [I"validates_email;T@E@ [I"validates-email;T@E@ [I"validates_email_address_of;T@@ [I"validates_email_format_of;T@@ [I"validates_email-san;T@`@ [I"!validates_email_whitelist_of;T@@ [I"validates_existence;T@@ [I"validates_for_australia;T@E@ [I"validates-format-of-uri;T@'@ [I"validates_formatting_of;T@@ [I"validates_host;T@@ [I"validates_im;T@@ [I"validates_immutability;T@@ [I"validates_ip_format_of;T@@ [I"$validates_lengths_from_database;T@@ [I"-validates_lengths_from_database_advanced;T@'@ [I"(validates_lengths_from_database_tmp;T@6@ [I" validates_nested_uniqueness;T@e@ [I"validates_not_profane;T@@ [I"validates_overlap;T@@ [I"validate_spanish_vat;T@'@ [I"validates_phone_number;T@@ [I"validates_schema;T@;@ [I"validates_telephone;T@@ [I"validates_timeliness;T@@@ [I"validates_truthiness;T@@@ [I"validates_uri_format_of;T@@ [I"validates_url_format_of;T@@ [I"validates_vat_number;T@!@ [I"validates_xml;T@@ [I"%validate_uniqueness_of_in_memory;T@"@ [I"validate_url;T@@ [I"validate-website;T@@ [I"validating-workflow;T@@ [I"validation;T@<@ [I"validation_group;T@6@ [I"validation_hints;T@@ [I"validation_issues;T@@@ [I"validation_kit;T@@ [I"validation_matcher;T@@ [I"validation_matchers;T@@ [I"validation-mirror;T@@ [I"validation_rage;T@E@ [I"validation_reflection;T@@ [I"'validation_reflection-active_model;T@@ [I"validation_scopes;T@@ [I"validation-scopes;T@x@ [I"validation-sets;T@N@ [I"validation_skipper;T@E@ [I"validations_step_fu;T@E@ [I"validation_tracker_client;TU;[I" 2.4.12;T@ [I"validatious;T@x@ [I"validatious-on-rails;T@@ [I"validator;T@`@ [I"validator_attachment;T@@ [I"validator_generator;T@E@ [I"validator.nu;T@@ [I"validators;T@@ [I"valid_attribute;T@ @ [I"valid-date;T@x@ [I" valideez;T@@ [I"valid_email;T@"@ [I" validus;T@'@ [I" valim;T@"@ [I" valise;T@@ [I" valium;T@@ [I" valkyrie;T@E@ [I" valle;T@@ [I" valuable;T@Q@ [I" Valuable;T@W9@ [I"valuation;T@'@ [I" value;T@@ [I"valuedate;T@@ [I"value_object;T@`@ [I" values;T@u@ [I"values_for;T@@ [I"value_struct;T@X@ [I"value-yard;T@@ [I" valvat;T@"@ [I"valve-cfg-lint;T@@ [I"VanaClock;T@@ [I"vanadiel-time;T@@ [I" vanakam;T@@ [I" VanaTime;T@ @ [I" vandamme;T@E@ [I" vanilla;TU;[I" 1.17.9;T@ [I"vanillicons;T@@ [I" vanities;T@6@ [I" vanity;T@e@ [I"vanity-rails3;T@1@ [I"vanity_slug;T@"@ [I"vanity-source;T@u@ [I"vanntastic-imgur;T@@ [I" vantage;T@V@ [I" vanunits;T@@ [I"vapir-common;T@&|@ [I"vapir-firefox;T@&|@ [I" vapir-ie;T@&|@ [I" vapor;T@"@ [I"vardetect-vc;T@@ [I" variants;T@@ [I" varkek;T@E@ [I"varnish-client;T@'@ [I"varnish_sweeper;T@I@ [I"vas;T@@ [I"vasputils;T@@ [I" vast;T@@ [I" vast_api;T@@ [I" vatbook;T@@ [I" vatid_eu;T@`@ [I" vatman;T@@ [I" vatsim;T@n@ [I"vatsim_metar;T@'@ [I"vatsim_online;T@@ [I"vat_validator;T@@ [I" vault;T@@ [I"vault_client;T@|@ [I"vaulted_billing;T@ @ [I"vaulted_billing-termcap;T@@ [I"vault-rails;T@@ [I"vault-test-tools;T@I@ [I"vault-tools;T@@ [I"vayacondios-client;T@@@ [I"vayacondios-server;T@@@ [I" vbox;T@"@ [I" vbox-ng;T@@ [I"vbulletin;T@V@ [I"vbulletin_rails;T@@ [I"vcap_common;T@,*@ [I"vcap_logging;T@+@ [I" vcard;T@I@ [I"vcard_mate;T@'@ [I"vcard_parser;T@@ [I"vcc;T@'@ [I" vcdiff;T@`@ [I" vcdom;T@@ [I"vcf;T@@ [I"vcita-gcal4ruby;T@@ [I"vcita-gdata4ruby;T@I@ [I" vclog;T@{@ [I" vcloud;T@ @ [I"vcloud-rest;T@@ [I"vcontainer;T@@ [I"vcr;T@.@ [I"vcr_cable;T@@ [I"vcr-remote-controller;T@@ [I"vcs;TU;[I" 0.5.2.4;T@ [I"vcs_client;T@_@ [I"vcx-browser;T@!@ [I"vcx-elements;T@I@ [I"vdf_tools;T@@ [I"ve;T@E@ [I" vebagem;T@'@ [I" vebdew;T@@ [I" vector2d;T@@ [I"vector_space;T@+@ [I" veewee;T@@ [I"veewee-templates-updater;T@@ [I"veezus-vurlify;T@@ [I" vegas;T@!@ [I" vegprice;T@'@ [I" velcro;T@@ [I"velir_identity_engine;T@|@ [I"velir_kaltura-ruby;T@/@ [I"velir_virtualbox;T@@ [I" vellam;T@@@ [I"velociraptor;T@@ [I" velocity;T@'@ [I"VelocityWalkToCSV;T@'@ [I" vend;T@n@ [I"vending-machine;T@@@ [I" vendor;T@|@ [I" vendorer;T@@ [I" veneer;T@x@ [I" venny;T@@ [I" venom;T@n@ [I"ventilation;T@@ [I" ventouse;T@1@ [I" venus;T@@ [I"ver;TU;[I" 2010.08;T@ [I"veracious;T@E@ [I" veratad;T@'@ [I" verb;T@@ [I" verboice;T@@ [I"verborghs-state_machine;T@Q@ [I"verbose_factory_girl;T@@ [I"verbose_hash_fetch;T@'@ [I" verbs;T@@ [I"verbvector;T@E@ [I"ver-command_t;T@@ [I" verge;T@@ [I" verhoeff;T@O@ [I"veridit-vagrant;TU;[I" 1.0.5.1;T@ [I" verifi;T@E@ [I"verifiable;T@'@ [I"verification;T@@ [I" verify;T@@ [I" verilog;T@"@ [I"verilog_rename;T@@ [I"veritable;TU;[I" 0.1.6.36;T@ [I" veritas;T@n@ [I"veritas-do-adapter;T@n@ [I"veritas-optimizer;T@n@ [I"veritas-sql-generator;T@n@ [I"veritrans;T@@ [I" vermic;T@6@ [I"vermonster;T@`@ [I" verneuil;T@@ [I" vero;T@@ [I" versapay;T@|@ [I"versatile_rjs;T@+@ [I" verser;T@E@ [I" verses;T@'@ [I" version;T@@ [I"versionable;T@`@ [I"versionary;T@`@ [I"versionator;T@@ [I"version_bumper;T@@ [I"versioncake;T@@ [I"VersionCheck;T@@ [I"version_deploy;T@E@ [I"versioned;T@@ [I"versioned_seeds;T@@ [I"versioner;T@@ [I"version_fu;T@@ [I"versionifier;T@`@ [I"versionify;T@,@ [I"version_info;T@1@ [I"versionist;T@@ [I"versionius;T@@ [I"versionize;T@@ [I"versionomy;T@"@ [I" versionr;T@"@ [I"version_reader;T@@ [I" versions;T@@ [I"version_sorter;T@@ [I"version_string;T@@ [I"versionub;T@n@ [I"version_view;T@@ [I" verso;T@"@ [I"verstehen;T@@ [I" versus;T@@ [I" vertere;T@E@ [I" vertica;T@@ [I" vertigo;T@@ [I"very_nifty_generators;T@@ [I" veslo;T@@ [I" vespa;T@@ [I" vesper;T@@ [I" vesr;TU;[I" 0.12.7;T@ [I"vestal_versions;T@@ [I"vestel-pony;T@x@ [I"vet;T@`@ [I" vet-ci;T@@ [I"veterinarian;T@@ [I"vex;T@@ [I" veyron;T@@ [I"vfeskov_edu_gem;T@t @ [I" Vflow;T@@ [I"vfnetapis;T@@ [I"vfs;T@@ [I"vfs-momolog;T@'@ [I"vgenerator;T@6@ [I"vgh;T@@@ [I" vghello;T@'@ [I"vh;T@"@ [I"vhdl_doctest;T@@ [I"vhdl_parser;T@!@ [I"vhost_admin;T@'@ [I"vhost_generator;T@@ [I" viaduct;T@@ [I"vianettsms;T@@ [I"vi_api_lib;T@@@ [I"vibedeck-activemerchant;TU;[I" 1.18.2;T@ [I"vibedeck-comma;T@@ [I"vibedeck-youtube_it;T@@ [I" vibes;T@@ [I" vibes-bj;T@@ [I"vic;T@@ [I" vi_cli;T@@@ [I" viddler;T@@ [I"viddlereo;T@+@ [I"viddler-ruby;T@@@ [I"viddler-sitemaps;T@@ [I" viddl-rb;TU;[I" 0.75;T@ [I"videawesome;T@@ [I" video;T@E@ [I"videoclip;T@@ [I"video_data;T@@ [I"video_info;T@@ [I"videojs_rails;T@'@ [I"video_parser;T@@ [I"video_scraper;T@W@ [I"vidibus-api;T@'@ [I"vidibus-asset_cache_buster;T@'@ [I"vidibus-category_tag;T@6@ [I"vidibus-core_extensions;T@@ [I"vidibus-encoder;T@@ [I"vidibus-fileinfo;T@@ [I"vidibus-helpers;T@@ [I"vidibus-inheritance;T@kD@ [I"vidibus-mp4_encoder;T@`@ [I"vidibus-oauth2_server;T@@ [I"vidibus-permalink;T@@ [I"vidibus-pureftpd;T@@ [I"vidibus-realm;T@"@ [I"vidibus-recording;T@@ [I"vidibus-resource;T@@ [I"vidibus-routing_error;T@I@ [I"vidibus-secure;T@|@ [I"vidibus-service;T@6@ [I"vidibus-subdomain;T@'@ [I"vidibus-sysinfo;T@E@ [I"vidibus-tempfile;T@@ [I"vidibus-textile;T@,@ [I"vidibus-timecode;T@@ [I"vidibus-user;T@@ [I"vidibus-uuid;T@@ [I"vidibus-validate_uri;T@I@ [I"vidibus-versioning;T@@@ [I"vidibus-version_scheduler;T@@ [I"vidibus-watch_folder;T@@@ [I"vidibus-words;T@E@ [I"vidibus-xss;T@$@ [I" vidly;T@@ [I" vid-skim;T@'@ [I"vienna_rna;T@@ [I" viewaide;T@@ [I"view_assets;T@@ [I"viewcumber;T@@ [I"view_driver;T@@ [I" viewfu;T@@ [I" viewlet;T@@ [I"view_mapper;T@@ [I"view_marker;T@@ [I"view-model;T@E@ [I"view_models;T@ @ [I"viewpoint;T@@ [I"viewpoint-spws;T@@ [I"view_server;T@E@ [I"views_in_migrations;T@@ [I"view_slots;T@"@ [I"view_something;T@'@ [I"view_source;T@"@ [I"view_source_map;T@@ [I"viewtalitarian;T@'@ [I"viewtastic;T@6@ [I" viewtext;T@E@ [I"view_tracker;T@'@ [I"view_trail;T@@ [I"view_variant_responder;T@@ [I" vigenere;T@@ [I"vigetlabs-routing-filter;T@,@ [I" vigilant;T@@@ [I"vigilante;T@@ [I" viiite;T@@ [I"viitelaskuri;T@@ [I" viki;T@@ [I"viking-bloopsaphone;T@@ [I"viking-copier;T@@ [I"vikinggem;T@@ [I"viking-sequel;T@R@ [I"vilango-acts-as-list;T@|@ [I"vilango-sort_alphabetical;T@@ [I"vileda-generators;T@@ [I"viljushka;T@@ [I" village;T@ @ [I"village_auth;T@@ [I"vim-bundle;T@`@ [I"vim-bundler;T@@ [I"vim_client-ruby;T@`@ [I"vimcolorscheme;T@@ [I" vimdb;T@@ [I" vim_diff;T@'@ [I" vimeo;T@@ [I"vim-epidemic;T@"@ [I"vim-flavor;T@@ [I" vimgem;T@@ [I" vimget;T@6@ [I" vimgolf;T@@ [I"vimilicious;T@|@ [I" vimjar;T@@ [I" vim-jar;TU;[I"0.1.2.0001;T@ [I" vimmate;T@' @ [I" VimMate;T@$@ [I" vimmer;T@@ [I" vimmy;T@@ [I"vim-nerdtree;T@'@ [I"vim-nicktears;T@ @ [I"vimond_api_client;T@,@ [I" vimpack;T@"@ [I"vimrecover;T@@ [I"vimrunner;T@@ [I"vim-surround;T@'@ [I"vim-update-bundles;T@W9@ [I"vinaigrette;T@- @ [I" vinay;T@@ [I""vincecima-acts-as-taggable-on;T@ @ [I"vincentchu-handlersocket;T@'@ [I" vincenty;T@@ [I" vindicia;T@@ [I"vindicia-api;T@@ [I" vine;T@E@ [I" vines;T@@ [I"vines-agent;T@6@ [I" vinesmod;TU;[I" 0.4.5.2;T@ [I"vines-services;T@6@ [I"vin_exploder;T@@ [I" vinova_sunspot_autocomplete;T@@ [I"vinova_sunspot_mongoid;T@@ [I" vinquery;T@@ [I" vint;T@@ [I" vintage;T@@ [I" vintner;T@@ [I" vinyl;T@"@ [I"vio;T@@ [I" viola;T@@ [I" violet;T@'@ [I"vip;T@@ [I" virastar;T@@ [I" virb;T@@ [I" vircs;T@@ [I" virgola;T@@ [I" virility;T@`@ [I" virt;T@@ [I"virtconsole;T@@ [I" virtop;T@|@ [I"virtual_asset_path;T@`@ [I"virtual_attribute;T@@ [I"virtual_attributes;T@'@ [I"virtualbox;T@' @ [I"virtual_box;T@+@ [I"virtualbox-guestcontrol;T@@ [I"virtual_date;T@`@ [I"virtualfs;T@E@ [I"virtual_keywords;T@@ [I"virtualman;T@@ [I"virtualmaster;T@1@ [I"virtual_merchant;T@`@ [I"virtualmonkey;T@'@ [I" virtuoso;T@'@ [I"virtuoso-prototype;T@n@ [I"virtuozzo;T@X@ [I" virtus;T@Y@ [I"virtus-dirty;T@@ [I"virtus-matchers;T@"@ [I"virtusprinter;T@@ [I"virtus-rspec;T@'@ [I" virus;T@E@ [I"virus_blacklist;T@@ [I"virustotal;T@O@ [I"virustotalapi;T@'@ [I" visage;T@[@ [I"visage-app;T@@ [I"visfleet-deprec;TU;[I" 2.1.4.5;T@ [I"vishaks_studio_game;T@@ [I"visibility;T@!@ [I"visibilityjs;T@@ [I"visibility_predicates;T@'@ [I"visible-cukes;T@!@ [I"visilibity;T@'@ [I"visitbench;T@@ [I"visit_card;T@`@ [I"visit-counter;T@`@ [I"visit_counter_updater;T@@ [I" visitor;T@'@ [I" visitors;T@@ [I"visitor_sources;T@'@ [I"visor-auth;T@@ [I"visor-common;T@E@ [I"visor-image;T@"@ [I"visor-meta;T@@ [I"visor-web;T@E@ [I"vistarpc4r;T@@ [I"visual-environments;T@@ [I"visualisation-utils;T@@ [I"visualruby;T@@@ [I"visualtag;T@@ [I" vitae;T@@ [I"vitalish-chargify_api_ares;T@@ [I"vitalish-factory_girl;T@7U@ [I" vitals;T@E@ [I"vitamined-gems;T@@ [I" vito;T@'@ [I"vitobotta-brb;T@@ [I" vitrage;T@'@ [I"vitreous_share;T@1@ [I"vitreous_standalone;T@K,@ [I" vitunes;T@`@ [I"vitunes-10.5;T@@ [I"viva-app_config;T@N@ [I"#viva-declarative_authorization;TU;[I"0.3.2.3.1;T@ [I"viva-php_serialize;T@;@ [I"viva-resource_controller;TU;[I" 0.6.5.3;T@ [I"viva-rubyzip;T@@k@ [I"vivid_seats;T@"@ [I" vixen;T@E@$[@@3@ [I"viximo-cache-money;T@@ [I"viximo-rack-throttle;T@@ [I"vizi_logger;T@@ [I" vizir;T@@ [I"vizi_tracker;T@@ [I"vizi_translator;T@@ [I"vizi_whois;T@x@ [I"'vizjerai-devise_security_extension;T@@ [I"vizjerai-google-checkout;T@x@ [I"vizjerai-query_trace;T@I@ [I"vizzuality-sequel-rails;T@@ [I"vj-player-sdk;T@@ [I" vj-sdk;T@=@ [I"vjt-email_validator;T@;@ [I"vjt-ruby-audioinfo;T@1@ [I"vjt-zendesk;T@N@ [I"vk;T@"@ [I" vk_api;T@@ [I"vk-console;T@@ [I"vkhater-social_stream;TU;[I" 0.16.3.3;T@ [I"vkhater-social_stream-base;T@)@ [I"$vkhater-social_stream-documents;T@@ [I"!vkhater-social_stream-events;T@@ [I""vkhater-social_stream-linkser;T@`@ [I"vkill_gems_methods;T@@@ [I"vkontakte;T@@ [I"vkontakte_api;T@s@ [I"vkontakter;T@@ [I" vk-ruby;T@' @ [I"vl;T@@ [I" vlaah;T@e@ [I" vlad;T@o@ [I"vlad-assets;T@'@ [I"vlad-daemon_kit;T@x@ [I"vlad-extras;T@@ [I"vlad-fjpii;T@@ [I"vlad_freebsd;T@@ [I" vlad-git;T@ @ [I"vlad-helpers;T@@ [I" vlad-hg;T@@ [I"vladimerb;T@@ [I"vlad-merb;T@@ [I"vlad-nginx;T@@ [I"vlad-perforce;T@O@ [I"vlad-push;T@x@ [I"vlad-rainbows;T@|@ [I"vlad-status;T@E@ [I"VladTheEnterprising;T@!@ [I"vlad-thin;T@@ [I"vlad-unicorn;T@ @ [I"vlad-unikorn;T@@ [I"vlad-version;T@E@ [I"vlc-client;T@'@ [I" vlcrc;T@@ [I"vli;T@"@ [I"vlx-multi;T@@ [I" vmail;T@@ [I" vmanage;T@@ [I"vmbuilder;T@E@ [I"vmbuilder_plugins;T@@@ [I"vmc;T@@ [I"vmc-IronFoundry;T@mj@ [I"vmc_knife;T@@ [I" vmc-stic;T@@ [I" vmcu;T@߲@ [I"vmc_virgo;T@E@ [I" vmerize;T@'@ [I"vm_manager;T@`@ [I" vmserver;T@@ [I" vmsim;T@,@ [I" vmstat;T@O@ [I" vmth;T@E@ [I" vmtools;T@I@ [I" vmtouch;T@@ [I"vmware-revert;T@@ [I"vm-watcher;T@@ [I" vnctools;T@n@ [I" vnews;T@_@ [I" vocab;T@`@ [I"vocab_counter;T@@ [I"vocabulary;T@@ [I" vocalist;T@@ [I" vocco;T@@ [I" vodafone;T@'@ [I" vodpod;T@O@ [I"voetbal_nl;T@'@ [I" vogue;T@@ [I"voice_form;T@@ [I"voidtools;T@ @ [I"voight_kampff;T@+@ [I" voir;T@@ [I"volatiledb;T@@ [I"volatile_hash;T@E@ [I"voldemort;T@'@ [I"voldemort-rb;T@g@ [I"volksbanker;T@@ [I" volley;T@$@ [I"volleyball;T@6@ [I" volna;T@@ [I" voltrb;T@@ [I"voluntary;T@@ [I"voluntary_text_creation;T@'@ [I" volute;T@`@ [I" voodoo;T@@ [I"voodoorai2000-ar_mailer;T@O7@ [I"voomify_email_integrator;T@@ [I"voomify_tasks;T@[@ [I"voomify_utility_drawer;T@!@ [I" voorhees;T@@ [I"vorbis_comment;T@@ [I" vorhees;T@E@ [I"vortex_client;T@n@ [I"vortex_utils;T@E@ [I" voruby;T@O@ [I"voruby2-preview;T@@ [I"vos;T@@ [I" vose;T@@ [I" votd;T@@ [I"voteable_mongo;T@@ [I"voteable_mongo_huacnlee;T@' @ [I"voteable_mongoid;T@u/@ [I" vote_fu;T@@ [I"voterable;T@@ [I"voter_love;T@@ [I" votes;T@'@ [I"vote-schulze;T@@ [I"votesmart;T@@ [I" votigoto;T@@ [I" voxbone;T@'@ [I"voxcast_api;T@@ [I"voxel-hapi;T@@ [I" voyager;T@@ [I"voyager_api;T@@ [I"voyager_oracle_api;T@@ [I" voyeur;T@@ [I" VPaypal;T@'@ [I"vpd;T@'@ [I" vpim;T@p@ [I"vpim_icalendar;T@s@ [I"vpim-rails;TU;[I" 0.665;T@ [I"vpim-rails-reinteractive;T@D@ [I"vpk;T@E@ [I"vpm;T@E@ [I" vpnmaker;T@@ [I" vpopmail;T@@ [I"vraptor-scaffold;T@@ [I" vrlib;T@@ [I" vrome;T@@ [I" vrowser;T@|@ [I" vrtx;T@@ [I" vruby;TU;[I"2004.08.07;T@ [I"vrvirtualdesktop;T@'@ [I"vspheremonitor;T@`@ [I"vss;T@g@ [I"vstudioide;T@@ [I"vte;T@9@ [I" vtext;T@@ [I" vtiger;T@@ [I" v_tiger;T@@ [I" vtk-ruby;TU;[I" 5.0.4.0;T@[I" vtools;T@@ [I"vtranscoder;T@@ [I" vulcan;T@@ [I" vulndbhq;T@@ [I"vuzitruby;T@ @ [I"VvanGemert-ar_mailer;T@ @ [I"vworkapp_ruby;T@W9@ [I" vx_crypt;T@'@ [I"vxml-tools;T@@ [I"vyatta-utils;T@'@ [I"vydumschik;T@@ [I"vz;T@@ [I" vzaar;T@@ [I" vzlimit;T@@ [I"w;T@@ [I" w2tags;TU;[I" 0.9.69;T@ [I"w32evol_ruby;T@"@ [I" w3clove;T@W9@ [I"w3c_rspec_validators;T@@ [I"w3c_validators;T@@ [I"w3c-validator-to-rally;T@@ [I"w3m-autopagerize;T@@ [I" w3mrefe;T@@ [I" w3ping;T@ @ [I"w3scraper;T@'@ [I" WAAT;T@@ [I"wa_bcms_blog;T@@ [I"wackamole;T@+@ [I"wackelkoepfe;T@@ [I" wacky;T@E@ [I"wacky_canvas;T@'@ [I"wacky_graph;T@@ [I" wadl;T@@ [I"wadl_generator;T@@@ [I"wadrc-bcp-scripts;T@@ [I" waffle;T@@ [I"waffleiron;T@6@ [I" wagon;T@@ [I" wagons;T@@ [I" wait;T@@ [I"wait_a_minute;T@@ [I" waiter;T@'@ [I" waitfor;T@@ [I" wait_for;T@`@ [I"waitforit;T@'@ [I"waiting_on_rails;T@'@ [I" wait_pid;T@@ [I"waj-ruby-llvm;T@@@ [I" wakame;T@@ [I"wakame-adapters-tengine;T@'@ [I"wakame-vdc-agents;TU;[I" 11.12.0;T@ [I"wakame-vdc-dcmgr;T@O@ [I"wakame-vdc-webui;T@O@ [I" wakari;T@@ [I" wake;T@@ [I"wakeonlan;T@@ [I"wakiki-spork;T@-@ [I"wakizashi;T@@ [I" wakoopa;T@'@ [I"wakoopa-elasticity;T@@ [I"wakoopa-rbfnv;T@@ [I"wakoopa-trample;T@@ [I" walkash;T@@ [I" walker;T@@ [I"walkscore;T@E@ [I" walky;T@'@ [I" wall_e;T@@ [I" wallet;T@@ [I"wall-leecher;T@I@ [I"wallpaper;T@@ [I"wallpapers;T@@ [I" wally;T@)O@ [I"wallyqs-org-ruby;T@@ [I" walnut;T@@ [I" walrat;T@@ [I" walrus;T@R @ [I"walrus-rails;T@E@ [I" walruz;T@ @ [I"walruz-rails;T@@ [I" walt;T@@ [I" Walt;T@`@ [I" walter;T@"@ [I"walterdavis-eeepub;T@y@ [I" waltz;T@'@ [I"wamp-client;T@@ [I" wamupd;T@x@ [I" wand;T@R @ [I"wanew_client_validate;T@ @ [I"wanew-client-validate;T@@ [I" wanikani;T@@ [I"wannabeparser;T@@ [I" wants;T@@ [I" wapiti;T@@ [I" wapl;T@@ [I"wappalyzer_rb;T@@ [I"war;T@'@ [I" warbler;T@@ [I"warbler-exec;T@`@ [I" warcards;T@n@ [I" warchat;T@@ [I"warcorrespondent;T@ @ [I"warcraft-armory;T@`@ [I" ward;T@@ [I"ward-chicago;T@`@ [I" warden;T@u@ [I"warden-bootic;T@'@ [I"warden-browserid;T@@ [I"warden-github;T@&@ [I"warden-googleapps;T@+@ [I"warden-hmac-authentication;T@y@ [I"warden_oauth;T@`@ [I"warden_oauth_provider;T@ @ [I"warden_omniauth;T@@ [I"warden_omniauth-jonrowe;T@@ [I"warden-openid;T@@ [I"warden-redirect;T@'@ [I"warden-salesforce;T@@ [I"warden_strategies;T@@ [I" warekky;T@`@ [I"warming_drawer;T@@ [I" warmup;TU;[I" 0.6.5.0;T@ [I" warnings;T@`@ [I"warningshot;T@@ [I"warning-shot;T@@ [I"warnold-selenium-client;T@~@ [I" warnr;T@@ [I"warouz_server;T@@ [I" warpaint;T@'@ [I"warp-clamav;T@@ [I"warp_drive;T@!@ [I"warp-thinking-sphinx;TU;[I" 1.3.16;T@ [I"warp-ts-delayed-delta;T@@ [I"warranty-check;T@@ [I" warren;T@' @ [I"war_simulator;T@@ [I" warsow;T@@ [I" warthog;T@@ [I" wasabi;T@@ [I"wasabi_pea;T@R @ [I"wase_endpoint;T@'@ [I"wash_away_the_soap;T@@ [I"washoe_polls;T@`@ [I" wash_out;T@@ [I" wasko;T@@ [I"was_new_record;T@E@ [I" wasp;T@@ [I"wasserstand;T@@ [I"wassrfeed;T@'@ [I" Wassruby;T@6@ [I"WasThreadStackProcessor;T@+@ [I"was_tracer;T@E@ [I" watch;T@@ [I"watchable;T@'@ [I"watch_and_do;T@@ [I" watchdir;T@@ [I" watchdog;T@@ [I" watcher;T@N@ [I"watcher_in_the_water;T@@ [I" watchful;T@ @ [I"watchmaker;T@I@ [I" watchman;T@`@ [I" watchme;T@'@ [I"watch-me-now;T@+@ [I"watch_methods;T@@ [I" watchmob;T@@ [I"watch-paths;T@N@ [I" watchr;T@D@ [I"watch_tower;T@@ [I"watch-tower;T@@ [I" water;T@@ [I"watercooling;T@"@ [I"waterfall;T@@ [I"watertower;T@'@ [I" watir;T@w@ [@M@w@ [I"watir-classic;T@c@ [I"watircuke;T@'@ [I"watirgrid;T@@ [I"watir_helper;T@@@ [I"watir-load-tester;T@'@ [I" watirloo;T@V@ [I"watirmark;TU;[I" 5.14.16;T@ [I" watir-or;T@@ [I"watir-page-helper;T@@ [I"watir-proxy;T@E@ [I"watir-rails;T@E@ [I"watir_robot;T@@ [I"watir-rspec;T@@ [I"watirspec;T@kM@ [I"watirsplash;T@@ [I"watir-webdriver;T@@ [I" watir-webdriver-performance;T@I@ [I"watir-webdriver-rails;T@V@ [I"watir-webdriver-utils;T@s@ [I" watnow;T@E@ [I" watobo;T@@ [I" watson;T@E@ [I"watson-acts_as_ferret;T@(@ [I" watts;T@@ [I"watu_table_builder;T@@ [I"waughkevxmas;T@'@ [I" wave;T@'@ [I" wave-box;T@@ [I" wavefile;T@x@ [I" waveform;T@@@ [I" waveinfo;T@E@ [I" waves;T@@ [I"waves-rspec;T@@ [I"WaveSwissKnife;TU;[I"0.1.0.20110830;T@[@U;[I"0.3.1.20130103;T@ [I" wav-file;T@@ [I" wav-mp3;T@"@ [I"waw;T@@ [I"wax;T@ @ [I" waxeye;T@X@ [I"way;T@N@ [I"wayne-friendly;T@@ [I"wayne_uniquify;T@@ [I"ways-and-means;T@'@ [I"waz-blobs;T@`@ [I" waz-cmd;T@@ [I"waz-queues;T@@ [I"waz-storage;T@N@ [I" waz-sync;TU;[I" 0.0.3.8;T@ [I"wbdv_packer;T@!@ [I" wbem;T@@ [I" wbxml;T@'@ [I"wc;T@H@ [I" wcapi;T@'@ [I"wcc;T@o@ [I"wcc-filelog-notificator;T@'@ [I"wcc-rss-notificator;T@`@ [I"wcc-xmpp-notificator;T@E@ [I"wcfrestcontrib;TU;[I"1.0.6.107;T@ [I" wcid;T@'@ [I"wcolorpicker-rails;T@ @ [I" wcwidth;T@ @ [I"wdd-ruby-ext;T@@ [I" wddx;T@@ [I" wdiff;T@@ [I"wdm;T@E@ [@@E@t[@@@ [I"wd_newrelic_rpm;T@@ [I"wd_sinatra;T@W@ [I"wd_sinatra_active_record;T@@ [I"we;T@E@ [I"we5-browsercms;T@@ [I"we5-pickler;T@6@ [I"weak_hash;T@@ [I" weakling;T@@ [@@"@[I"weak_observable;T@@ [I"wearehunted;T@@ [I" weary;T@x@ [I"weasel_diesel;T@N@ [I"weasel-the-memory-watcher;T@@ [I" weather;T@'@ [I"weather-api;T@@ [I"weatherboy;T@@ [I"weatherbug;T@@ [I"weather_by_ip;T@@ [I"weather_checker;T@"@ [I"weather_fetcher;T@ @ [I"weatherfinder;T@@ [I"weather_hacker;T@|@ [I"weatherhacks;T@@ [I"weather_in_poland;T@@ [I"weather_jp;T@@ [I"weatherman;T@@ [I"weather_report;T@"@ [I"weather_underground;T@@ [I"weather-underground;T@@ [I"weatherzone;T@@ [I" weave;T@E@ [I"web;T@@ [I"webapidoc;T@@@ [I" webapp;T@V@ [I"web_app_builder;T@@ [I"webappsword_sdk;T@'@ [I"web-app-theme;T@@ [I"web-app-theme-rails;T@`@ [I"webapp_worker;T@@ [I"web_backend;T@'@ [I" webbed;T@@ [I"webbit-jars;T@8I@[I" webbus;T@@ [I" webby;T@@ [@;@@[I"webbynode;TU;[I" 1.0.5.2;T@ [I"webbynode-mason;T@`@ [I"webbynode-mongo_mapper;T@@ [I"webbynode-rainbow;T@;@ [I"webbynode-safe;T@[@ [I" webcli;T@E@ [I"web_client;T@"@ [I" webcmd;T@'@ [I" webcms;T@E@ [I"web_crawler;T@Y@ [I"webdav-exporter;T@@ [I"webdavtools;T@@ [I"webdevreloader;T@6@ [I"webdriver-user-agent;T@@ [I"$webdriver-user-agent-randomizer;T@'@ [I" web_dump;T@G@ [I" webee;T@@ [I" webern;T@@ [I"web-facter;T@@@ [I" webfeed;T@@ [I"webfinger;T@E@ [I"webfinger-jrd;T@E@ [I"web_fixtures;T@@ [I" webflow;T@'@ [I"webfontloader;T@@ [I"webfontspecimen;T@@ [I"webformsmvp;TU;[I"0.9.7.4.20100820;T@ [I"webformsmvp-unity;T@v@ [I"webformsmvp-windsor;T@v@ [I" webfx;T@V@ [I" webgen;T@n@ [I"webget_commander;T@@ [I"webget_gemini;T@@ [I"webget_netica;TU;[I" 1.0.6.0;T@ [I"webget_ramp;TU;[I" 1.7.1.8;T@ [I"webget_ruby_colorful;T@@ [I"webget_ruby_commander;T@@ [I"webget_ruby_dsl_error;T@@ [I"webget_ruby_dsl_methods;T@@ [I"webget_ruby_dsl_reader;T@@ [I"$webget_ruby_erb_util_extensions;T@@ [I"webget_ruby_hash_more;T@F@ [I"webget_ruby_html;T@@ [I"webget_ruby_password_hash;T@u@ [I"webget_ruby_password_salt;T@u@ [I"webget_ruby_password_text;T@u@ [I"webget_ruby_person_name;T@@ [I"webget_ruby_rails;T@1@ [I"webget_ruby_ramp;T@@ [I"webget_ruby_secure_random;T@u@ [I"webget_ruby_secure_token;T@u@ [I"webget_ruby_spreadsheeting;T@ @ [I"webget_ruby_unaccent;T@@ [I"webget_ruby_vital;T@@ [I"-webget_spreadsheet_import_export_helpers;T@@ [I" webhdfs;T@@ [I" webhook;T@E@ [I"webhook-payload;T@@ [I" webhookr;T@E@ [I"webhookr-mailchimp;T@'@ [I" webidl;T@|@ [I" webify;T@@ [I" webink;T@@ [I"web_invoice;T@E@ [I"webistrano_cli;T@@ [I"webistrano-resource;T@@ [I"webkit_remote;T@@ [I"webkit_remote_unstable;T@@ [I"webkit-rspec-formatter;T@@ [I"weblicate;T@V@ [I" webloc;T@'@ [I" weblog;T@@ [I"webmachine;T@@ [I"webmachine-sprockets;T@@ [I"webmachine-test;T@@ [I"web-magick;T@6@ [I" webmake;T@@ [I"webmaster_tools;T@@ [I" webmeter;T@'@ [I"web_methods;T@@ [I" webminer;T@E@ [I" webmock;T@+@ [I"webmock-disabler;T@E@ [I"webmock-resources;T@n@ [I" webmoney;T@@ [I"web-monitor;T@e@ [I" webpage;T@@ [I"web-page-archiver;T@"@ [I"webpage-archivist;T@@ [I"web-page-parser;T@c@ [I" webpay;TU;[I" 1.7.2.5;T@ [I"web_performo;T@!@ [I" webpilot;T@@@ [I"web_power_switch;T@E@ [I" webproxy;T@`@ [I"webpulser-habtm_list;T@@ [I"webpulser-jrails;T@@ [I"web-puppet;T@@ [I" webr;T@V@ [I" webrat;T@n@ [I"webrat-rspec-rails;T@`@ [I"webrat-scraper;T@+@ [I"web_resource_bundler;T@K,@ [I" webri;T@u@ [I" webrick;T@ @ [I"webrick-high-performance;T@@ [I"#webrick_httpreverseproxyserver;T@@@ [I",webrick_httpreverseproxyserver-FlipPath;T@@@ [I"webricknio;T@@ [I"webrick-webdav;T@@ [I" webroar;T@X@ [I"webrobots;T@ @ [I"web_rules;T@E@ [I" webs;T@ @ [I"websautotest;T@6@ [I" webscale;T@O@ [I" webscour;T@`@ [I"web-scraper;T@@ [I" web_server_config_generator;T@6@ [I"web_service_documenter;T@"@ [I"webservice_tester;T@"@ [I"webshellruby;T@'@ [I"webshims-rails;T@@ [I"websitary;T@@ [I" website;T@'@ [I"website_builder_engine;T@@ [I"website_screenshot;T@@ [I"websitiary;T@@ [I" websnap;T@|@ [I"websnapshot;T@@ [I"websocker;T@@ [I"websocket;T@ @ [I"WEBSocket;T@'@ [I"websocket-client;T@@ [I" websocket-eventmachine-base;T@@ [I""websocket-eventmachine-client;T@@ [I""websocket-eventmachine-server;T@@ [I"websocket-native;T@@ [@_@@[I"websocket_parser;T@`@ [I"websocket-rack;T@x@ [I"websocket-rails;T@@ [I"web-socket-ruby;T@@ [I" websolr;T@@ [I"websolr-acts_as_solr;TU;[I" 1.3.3.1;T@ [I"websolr-rails;T@.@ [I"websolr-sunspot_rails;TU;[I" 1.2.1.0;T@ [I""websolr-sunspot_rails_geoding;T@@ [I" webspeak;T@'@ [I" webspec;T@`@ [I"webspinne;T@'@ [I"webstalker;T@@ [I" webstats;T@@ [I" webster;T@@ [I" webstub;T@@ [I"webtagger;T@@ [I" webtail;T@"@ [I" webtopay;T@u@ [I"web_translate_it;T@z@ [I"web_translate_it_server;T@@ [I"web_tsunami;T@'@ [I"web_video;T@N@ [I" webvtt;T@'@ [I" wedge;T@@ [I"wee;T@@ [I" weechat;T@@ [I" week;T@@ [I" weekday;T@@ [I"weekday_calculator;T@@ [I" weekdays;T@@ [I"weekend_warrior;T@@ [I" weekling;T@@ [I"week_of_month;T@u@ [I" weel;T@@ [I" WEEL;T@@ [I"weeping_angel;T@'@ [I" wee-pm;T@@ [I" weeter;T@l5@ [I" weft-qda;T@@ [I"wego-friendly;T@@ [I" wegolint;T@"@ [I" weibo;T@@ [I"weibo_17up;T@_@ [I" weibo2;T@@ [I" weibo_2;T@`@ [I"weibo2_plugins;T@@ [I" weibo2s;T@`@ [I"weibo_focus;T@@ [I"weibo_oauth2;T@@ [I"weighted_average;T@@ [I"weightedpicker;T@E@ [I"weighted_random;T@`@ [I"weighted_randomizer;T@@@ [I"weighted_sample;T@@ [I"WeightedSelection;T@@ [I"weinre-rails;T@@ [I" weird;T@"@ [I"welcome_cycle;T@"@ [I" welcu;T@E@ [I"weld-js-rails;T@E@ [I"welements;T@@@ [I"well_rested;T@@ [I"well_rested-core;T@@ [I"wells_fargo;T@@ [I"welltreat-store-framework;T@@ [I"wellwellwell;T@'@ [I" welo;T@`@ [I" wendy;T@E@ [I"wenlin_db_scanner;T@@ [I" wepawet;T@6@ [I" wepay;T@'@ [I"wepay_client;T@"@ [I"wepay-rails;T@@ [I"wepredict;T@@ [I" we-rack;T@@ [I" werewolf;T@@ [I" werk;T@@ [I" we-rspec;T@@ [I" wesabe;T@@ [I" wesabot;T@x@ [I" wesi;T@@ [I"we-sinatra;T@@ [I" weskit;T@@ [I"westarete-skylinecms;TU;[I"3.0.8.20100330;T@ [I"westarete-tracker-tools;T@@ [I"wested-rack-bug;T@@ [I"wet-winobj;T@@[I"wf;T@'@ [I""wf4ever-transformation-client;T@@ [I"wfarr-github;T@6S@ [I" wformat;T@@ [I""wf-rails3-jquery-autocomplete;T@@ [I" wfrmls;T@@ [I"wgibbs-rest-client;T@W@ [I"wgibbs-trample;T@`@ [I"wgibbs-xpath;T@+@ [I"whack-a-node;T@E@ [I" what;T@@ [I" whatcd;T@|@ [I"#what_does_this_error_mean-merb;T@@ [I" whatever;T@@ [I"whatismyip;T@@ [I"&what-is-your-programming-language;T@@ [I"whatlanguage;T@@ [I"what_methods;T@@ [I" whats;T@@ [I" whatser;T@@ [I" whats_up;T@@ [I"whats-up-adhearsion;T@g@ [I" what_the;T@@ [I" wheel;T@@ [I"wheelhouse-blog;T@@ [I"wheelhouse-forms;T@@ [I" wheelhouse-google-analytics;T@@ [I" wheels;T@@ [I"wheels_routes;T@'@ [I" when;T@@ [I"whenauser;T@@ [I"when_easter;T@@ [I" whenever;T@@ [I"whenever_roles;T@'@ [I" when_sun;T@@ [I"whenyouneedme-handsoap;T@T @ [I" where;T@'@ [I"whereabouts;T@- @ [I"where-am-i;T@E@ [I" whereis;T@T @ [I"whereistand;T@"@ [I" whereuat;T@@ [I" wherever;T@'@ [I"wherever-positions;T@@ [I"wherewolf;T@@ [I" wherex;T@ @ [I" which;T@E@ [I"which_browser;T@I@ [I"which_command;T@E@ [I"which_osx;T@W@ [I" whichr;T@@ [I"which_ruby;T@@ [I"which_works;T@@ [I"whiny_attr_accessible;T@@ [I"whiny_destruction;T@'@ [I"whiny_hash;T@E@ [I"whiny-mass-assignment;T@I@ [I"whiny_rendering;T@`@ [I"whinytasks;T@@ [I"whiplash_api;T@`@ [I" whirl;T@"@ [I"whirlwind;T@1@ [I" whisk;T@@ [I"whisk_deploy;TU;[I" 0.6.26;T@ [I"whiskey_disk;T@0@ [I" whisper;T@'@ [I"whisperblog;T@6@ [I"whispler-signature;T@@@ [I" whispr;T@E@ [I" whistle;T@`@ [I"whistlepig;T@@ [I" whistler;T@'@ [I"$whitby3001-paperclip-cloudfiles;T@1@ [I" white;T@@ [I"white_castle;T@`@ [I"WhiteCloth;T@@ [I"white_horseman;T@@ [I"whiteknight;T@@ [I"white-knight;T@'@ [I"whitelabel;T@@ [I"whitelist;T@'@ [I"whitelist_mail_proxy;T@@ [I"white_list_model;T@@ [I"whitelist_params_for;T@`@ [I" whiteout;T@@ [I"whitepages;T@'@ [I"white_pages;T@'@ [I"white_rabbit;T@E@ [I"whitespace;T@z@ [I"whitestone;T@@ [I"whitewash;T@@ [I" whit_li;T@'@ [I" whittle;T@V@ [I" whizbang;T@@ [I"whmcs-ruby;T@'@ [I" whm_xml;T@@ [I" whoa;T@- @ [I" whoaz;T@@ [I"who_called_me;T@`@ [I" who_can;T@@ [I" whodump;T@@ [I" whois;T@1@ [I"whois-arin;T@@ [I"who_is_it;T@'@ [I"whoisthis;T@@ [I"whole_history_rating;T@@@ [I"who-needs-wp;T@X@ [I" whoops;T@Y@ [I"whoops_logger;T@+@ [I"whoops_notifier;T@"@ [I"whoops_rails_logger;T@=@ [I"whoops_rails_notifier;T@E@ [I" whorm;T@x@ [I" whos;T@@ [I"whos_using_what;T@T @ [I" whotowho;T@@ [I"whowish_word;T@7@ [I"whtml_sprockets;T@@ [I"whtt-eric-beet;T@A@ [I"whuffiebank;T@@ [I"whurl_engine;T@ @ [I"why-hpricot;TU;[I" 0.7.229;T@ [I" why_not;T@"@ [I"whysoslow;T@E@ [I" why_test;T@'@ [I"whyvalidationssuckin96;T@-@ [I"wice_grid;T@@ [I"wice_grid_mongo;TU;[I" 6.2.4;T@ [I"wice_grid_mongoid;TU;[I" 6.2.3;T@ [I" wichr;T@'@ [I" wicked;T@@ [I"wicked-focused;T@I@ [I"wicked_pdf;T@' @ [I"wicked_pdf_rails_2;T@4@ [I"!wicked-with-previous-support;T@!@ [I"'wideopenspaces-acts-as-taggable-on;T@@ [I"wideopenspaces-flickraw;T@J@ [I"wideopenspaces-flickry;T@@ [I"wideopenspaces-gstats;T@@@ [I"wideopenspaces-wicked;T@@ [I"widescreen;T@`@ [I" widget;T@@ [I"widgetify;T@'@ [I"widget_list;T@@ [I"widget_wrapper;T@'@ [I" widgetz;T@E@ [I"wifi_location;T@@ [I"wifi_login;T@"@ [I"wigle_api;T@@ [I"WII;T@'@ [I" wii4r;T@@ [I"wiimagickcam;T@6@ [I"wii-robotic-arm;T@@@ [I"wijet-bluepill;T@@ [I"wijet-launchy;T@@ [I"wijet-thor;T@4@ [I" wiki;T@'@ [I" Wiki2Go;TU;[I" 1.24.0;T@ [I"Wiki2GoEditor;T@@ [I" wikibot;T@@ [I"wikicloth;T@@ [I"WikiCreole;T@6@ [I" WiKID;T@@ [I"wikidot-api;T@@ [I" wiki_lib;T@@ [I"wikilink-converter;T@,@ [I" wikiloc;T@@ [I"wikimovia;T@@ [I"wikipedia-api-fork;T@@@ [I"wikipedia-client;T@@ [I" wikiplex;TU;[I"1.4.0.232.1;T@ [I"wikiquote;T@@ [I" wikitext;T@ @ [I" wikitop;T@@ [I" wikiwah;T@@ [I"wikyd-fancy-buttons;T@u @ [I"wilco-datetimespan;T@`@ [I" wildcard;T@'@ [I"wildcard_matchers;T@@@ [I"wildcard_scopes;T@@ [I"wildcloud-agent;T@@ [I"wildcloud-configuration;T@'@ [I"wildcloud-git;T@'@ [I"wildcloud-keeper;T@@ [I"wildcloud-logeen;T@'@ [I"wildcloud-logger;T@@ [I"wildcloud-router;T@@ [I"wildcloud-runner;T@'@ [I" wildmat;T@- @ [I"wildnet-jackson;TU;[I" 1.7.3.1;T@[I"wildnet-netty;TU;[I" 3.2.4.2;T@[I"wildnet-server;T@@[I"wildsonet-hazelcast;T@@[I"wildsonet-mongodb;T@9@ [I"wildsonet-netty;TU;[I" 3.2.3.1;T@[I"wildsonet-server;T@@[I"wildsonet-streamer;T@E@[I"willb-mazegen;T@@ [I"willbryant-scruffy;T@3@ [I"will_cache;T@@ [I"will_filter;T@@ [I" william;T@@ [I"williamhill;T@'@ [I"will_it_dial;T@@ [I"will_mostly_paginate;T@J@ [I"willnet_ssl_requirement;T@`@ [I" willow;T@@ [I"will_paginate;T@i@ [I"will_paginate-bootstrap;T@I@ [I"will_paginate_couchrest;T@@ [I"will-paginate-i18n;T@!@ [I"will_paginate_mongoid;T@@ [I"will_paginate_renderers;T@@ [I"$will_paginate_twitter_bootstrap;T@@ [I"will_paypal;T@@@ [I"will_scan_string;T@@@ [I"WillsItunesProject;T@@ [I" wilson;T@@ [I"win;TU;[I" 0.3.27;T@ [I"win32-api;T@@[@@I"x86-mswin32-80;T[@@*@[@@@ [@@@ [I"win32-autogui;T@@ [I"win32-captureie;T@@ [I"win32-changejournal;T@@ [I"win32-changenotify;T@@ [I"win32-clipboard;T@@ [I"win32console;T@@1[@@@ [@@@ [@@@[I"win32-dir;T@@ [I"win32-event;T@@ [I"win32-eventlog;T@J@ [I"win32-file;T@^%@ [I"win32-file-attributes;T@@ [I"win32-file-security;T@@ [I"win32-file-stat;T@@ [I"win32-input_device;T@'@ [I"win32-ipc;T@@ [I"win32-mmap;T@,@ [I"win32-mutex;T@x@ [I"win32-nio;T@@ [I"win32ole-pp;T@N@ [I"win32olerot;T@"@[@@@ [I"win32-open3;T@[@[@"@@[@"@@ [@"@@ [I"win32-open3-19;T@E@ [I"win32-pipe;T@@ [I"win32-process;T@@ [I" win32rc;T@@ [I"win32-sapi;T@6@[@/@1@ [I"win32screenshot;T@ @ [I"win32-security;T@+@ [I"win32-semaphore;T@x@ [I"win32-service;T@@[@8@@[@8@@ [@8@@ [I"win32_service_manager;T@6@ [I"win32-shortcut;T@,@ [I"win32-sound;T@I"universal-mswin32;T[@A@@ [I"win32-taskscheduler;T@@[@E@I@ [I"win32-thread;T@@ [I" winch;T@@ [I" winci;T@@ [I"winci-updater;T@@ [I" windbag;T@'@ [I" windmill;T@e@ [I"window_rails;T@R@ [I"windows-api;T@@ [I"#windows_backport_process_spawn;T@`@ [I"windows_ionice;T@`@ [I"windows-pr;T@@[@\@@ [I"windowstate;T@'@ [I" windoze;T@@ [I" windsor;T@V@ [I"windstorm;T@@ [I" windy;T@@@ [I"wine_dot_com_api_request;T@@ [I"wineskins;T@I@ [I" winexcel;T@'@ [I"wingalingding;T@x@ [I"win-gdi32-ruby;T@6@ [I" wingman;T@'@ [I"wingman_rails;T@ @ [I" wings;T@'@ [I" win_gui;T@@ [I" winner;T@'@ [I" winnie;T@@ [I"winprofile;T@@ [I" winrm;T@x@ [I"winrm-cli;T@@ [I"win-service;T@`@ [I" winsize;T@@ [I"winsome_wolverine;T@'@ [I" winstone;T@@ [I"winston_mongodb_rails;T@@ [I" wintr;T@@ [I"win_user32_ruby;T@@ [I"win-user32-ruby;T@@ [I"winwindow;T@@ [I"wio;T@E@ [I"wip;T@@ [I"wip-bootstrap;T@s@ [I" wipit;T@`@ [I" wirb;T@@ [I" wirble;T@6@ [I" wire;T@@@ [I" wire2air;T@@ [I" WireAPI;T@@ [I"wirecardmapper;T@- @ [I"wire-edit;T@@ [I"wireframe;T@@ [I"wireframe-apn_on_rails;TU;[I"0.3.0.20110214201719;T@ [I"wireframe-jira4r;T@@ [I"wireframe-rack-bug;T@@ [I"wireframe-resque_unit;T@]5@ [I"wireframe-rpm_contrib;TU;[I" 2.1.8.2;T@ [I"wireframe-sass-rails;T@@ [I"wireless_model;T@`@ [I" wirer;T@@ [I" wiretap;T@"@ [I" wire_tap;T@@ [I" wiringpi;T@I"armv6l-linux;T[@ɏ@@ [I" wiscale;T@@ [I"wiselinks;T@@ [I"wiseml-ruby;T@@ [I" wisepdf;T@@ [I"wiserespond;T@@ [I" wishlist;T@@ [I"WIshMailer;T@4@ [I"wishsimple;T@'@ [I" wiskey;T@n@ [I" wisp;T@@ [I"wistia-api;T@@ [I"wistia-uploader;T@+@ [I" with;T@@ [I"with_action;T@@ [I"withardry;T@I@ [I"with_filled_field_scope;T@@ [I"with_filters;T@@@ [I"withings-api;T@@ [I"with_locking;T@@ [I"with_model;T@@ [I"with_object;T@'@ [I"with_order;T@@ [I"with-or-without-www;T@E@ [I"without_accents;T@e@ [I"without_instanciation;T@@ [I" with_pid;T@|@ [I"with_reverse_lookup;T@'@ [I"with_statement;T@@ [I"with_validations;T@@ [I" witness;T@ @ [I" wix-apps;T@@ [I" wizard;T@'@ [I"wizard_controller;T@@ [I" wizardly;TU;[I" 0.1.8.9;T@ [I"wizardly_gt;T@@ [I"wizard_machine;T@@ [I"wizard_of_awes;T@E@ [I" wizardry;T@@ [I" wizardz;T@@ [I" wizdog;T@E@ [I"wiziq-ruby;T@"@ [I" wizport;T@6@ [I"wkhtmltoimg_binary;T@'@ [I"wkhtmltopdf;T@@@ [I"wkhtmltopdf_32_amd64;T@'@ [I"wkhtmltopdf-amd64;T@@ [I"wkhtmltopdf-binary;T@/L@ [I"wkhtmltopdf_for_rails;T@"@ [I"wkhtmltopdf-heroku;T@@ [I"wkhtmltopdf-hooks;T@E@ [I"wkhtmltopdf-osx;T@`@ [I" wkpdf;T@"@M[I" wlang;T@ @ [I" wlapi;T@@ [I" wlbs;T@E@ [I"wmainfo-rb;T@6@ [I" wmata;T@@ [I"wmci-viewpoint;T@@ [I"wmd-rails;T@n@ [I" wmls;T@=@ [I"wms_getcapabilities;TU;[I" 0.1.0.6;T@ [I" wnck;T@@ [I"wnm_support;T@@ [I" wnw_show;T@'@ [I" wobbie;T@E@ [I" wobble;T@@ [I" woccur;T@@ [I"wod;T@"@ [I" wode;T@'@ [I" wode2;T@'@ [I" woefoo;T@@ [I"wojtekmach-cli;T@@ [I"wol;T@x@ [I"wolcanus-simple_captcha;T@1@ [I" wolf;T@@ [I" wolfram;T@@@ [I"wolframalpha;T@'@ [I"wolfram_alpha;T@'@ [I"wolfram-alpha;T@!@ [I"*wolframarnold-google-spreadsheet-ruby;T@+@ [I" woli;T@'@ [I"wolverine;T@@ [I"womanizer;T@@ [I" wombat;T@@ [I"wombleton-holidays;T@<@ [I"wonderdog;T@E@ [I" wonderfl;T@@ [I"wongi-engine;T@@ [I"wonkavision;T@@ [I" wonki;T@@ [I"wontomedia;T@ @ [I"woodchuck;T@'@ [I" woody;T@@ [I"woof_util;T@ @ [I"wooga-kafka-rb;T@V@ [I"wookie-translator;T@`@ [I" wool;T@@ [I"wo_oo_util;T@@ [I"woople-session;T@"@ [I"woople-theme;T@ @ [I" woopy;T@@ [I" woot;T@@ [I" woothee;T@@ [I" wopen3;T@[ @ [I" word;T@!@ [I"word2html;T@'@ [I" wordai;T@@ [I"word-bloom;T@@ [I"wordchuck;T@ @ [I"wordcount;T@@ [I"word-count-validator;T@@ [I" wordcram;T@@ [I"wordfinder;T@E@ [I" wordfreq;T@+@ [I" wordgrid;T@@ [I"word-guesser;T@@ [I" wordify;T@`@ [I" wordini;T@@@ [I" wordless;T@@ [I" wordlist;T@`@ [I" word_mix;T@@@ [I" wordmove;T@@ [I"wordmove-sshbump;T@I@ [I" wordnet;T@@ [I"wordnet-defaultdb;T@@ [I" wordnik;TU;[I" 4.11;T@ [I"wordnik_ruby_helpers;T@g@ [I"word_parsing;T@'@ [I"wordpress;T@@ [I"wordpress_api;T@;:@ [I"wordpress-com;T@'@ [I"wordpress_config_parser;T@- @ [I"wordpress_resource;T@'@ [I"wordpress-starter;T@[ @ [I"wordpressto;T@@ [I"wordpress_tools;T@'@ [I"wordpress-xmlrpc;T@@ [I"wordpress-xmlrpc-api;T@'@ [I"word_reference;T@'@ [I" words;T@_@ [I"word_salad;T@O@ [I"word-salad;T@@ [I"word_scoop;T@@ [I"word_scramble;T@@ [I"wordsmith;T@'@ [I"word_stats;T@'@ [I"wordstream;T@@ [I"wordstream_client;T@@ [I"words-wordnet;T@_@ [I"word-tokens;T@'@ [I" word_up;T@"@ [I"word_wrapper;T@@ [I" wordy;T@@ [I"wordy-ruby;T@@ [I" wordze;T@I@ [I" work;T@@ [I"workaholic;T@'@ [I"workbench;T@@ [I"work-bench;T@@ [I" workbook;T@@ [I"work_days;T@@ [I" worked;T@@ [I" worker;T@`@ [I"worker_pool;T@'@ [I" workflow;T@@ [I"workflow_on_mongoid;TU;[I" 0.8.0.7;T@ [I"workflow-to-galaxy;T@@ [I"workforce;T@@ [I" workify;T@'@ [I" working;T@V@ [I"working_days;T@E@ [I"working_man;T@@ [I"working-rails;T@E@ [I"working-time;T@@ [I" workiq;T@@ [I" workit;T@E@ [I" workless;T@@ [I" workling;TU;[I" 0.4.9.9;T@ [I"workling_delta_indexer;T@@@ [I" work_log;T@@ [I" workmate;T@@@ [I" workon;T@@@ [I" work-on;T@6@ [I"workparty;T@E@ [I"workpattern;T@@ [I" workpile;T@"@ [I"workqueue;T@+@ [I"work_queue;T@d@ [I"work_smarter;T@@ [I" world;T@'@ [I"world_bank;T@- @ [I"world_bank_fetcher;T@6@ [I" worldcat;T@'@ [I" worlddb;T@@ [I"worldfactbook;T@"@ [I"world-flags;T@y@ [I"worldpay_iadmin;T@@ [I"worldtimeengine;T@"@ [I" wormhole;T@`@ [I" wormly;T@`@ [I"wow_armory;T@E@ [I"wow_community_api;T@@ [I" wowecon;T@[@ [I" wowget;T@@ [I" wowheadr;T@@ [I" wowr;T@x@ [I"wox;T@V@ [I" wp2txt;T@@ [I" wparser;T@6@ [I"wpb;T@@ [I"wp_backup;T@|@ [I" WPBDC;TU;[I" 2013.1.1;T@ [I" wpcap;T@,@ [I"wp-capistrano;T@@ [I" wpdoc;T@a@ [I" wp-fire;T@@ [I"wp-generate;T@@ [I" wpify;T@V@ [I" wping;T@@[I" wpmake;T@@ [I" wp-move;T@@ [I" wpmu;T@'@ [I" wpns;T@E@ [I" wpplugin;T@!@ [I" wproot;T@E@ [I" wp_rpc;T@E@ [I"wps;T@@@ [I"wp_validators;T@'@ [I"wpxml_parser;T@'@ [I" wraithdb;T@@ [I" wrangler;T@;:@ [I" wrap;T@@ [I"wrap_excel;T@@ [I"wrap_in_module;T@@ [I"wrap_method;T@@ [I"wrappable;T@@ [I" wrapped;T@E@ [I" wrapper;T@@ [I" wrapr;T@'@ [I" wrapt;T@@ [I" wraptext;T@|@ [I" wrapup;T@'@ [I"wrapybara;T@@ [I" wr_b;T@@ [I"wreckster;T@@ [I" wref;T@@ [I" wren;T@`@ [I"wresque_wrapper;T@6@ [I" wrest;T@@@[@ϑ@@*[@ϑ@@ [I"wri;T@@ [I" wriggle;T@@ [I"wristband;T@J@ [I"wristwatch;T@E@ [I" write;T@I@ [I"writecast;T@'@ [I"writeexcel;TU;[I" 0.6.16;T@ [I"WriteExcel;T@@ [I" writer;T@@ [I" writev;T@@ [I"write_xlsx;TU;[I" 0.51.0;T@ [I"wroc_love;T@[@ [I" wrong;T@X@ [@@X@[I"wrong_answer;T@@ [I" wrongdoc;T@Q@ [I"wrtranslate;T@!@ [I"ws;T@x@ [I"ws-aboutme;T@@ [I"ws_discovery;T@'@ [I"wsdl-reader;T@@ [I" wsdsl;T@@ [I" ws-dummy;T@@ [I"ws-foreigner;T@@ [I" wsio;T@@ [I" ws-io;T@@ [I"wsl;T@1@ [I" wsoc;T@+@ [I" wss4r;T@@ [I" wsse;T@E@ [I"wsugg_gem;T@'@ [I"wtc;T@'@ [I" wtch;T@E@ [I"wt-commit;T@E@ [I" wtex;T@@@ [I"wtf;T@'@ [I" wtfcm;T@'@ [I" wtf_lang;T@x@ [I" wthr;T@@ [I"wti_gettext_i18n_rails;T@@ [I"wti_tasks;T@`@ [I" wtth;T@@ [I" wubmail;T@@ [I" wuclan;T@@ [I" wufoo;T@@ [I"wufoo_party;T@@ [I" wukong;T@@ [I"wukong-deploy;T@E@ [I"wukong-hadoop;T@E@ [I"wukong-load;T@E@ [I"wukong-storm;T@E@ [I"wulffeld_authlogic;T@@ [I"wulffeld-capistrano;TU;[I" 2.5.8.2;T@ [I" wulffeld_capistrano_recipes;T@'@ [I"wulffeld_kaminari;TU;[I" 0.12.4.2;T@ [I"wulffeld_slug;T@^]@ [I"wunderbar;T@ 9@ [I"wunderground;T@@ [I"wunderground-api;T@@ [I"wunderground_ruby;T@@ [I"wunderlist-rb;T@'@ [I" wuparty;T@u@ [I" wurfl;T@@ [I"wurfl_client;T@@ [I"wurfl_device;T@,@ [I"wurfl-lite;T@@ [I"wurfl-lite-middleware;T@ @ [I"wurfl_store;T@@ [I"wurlinc-rice;TU;[I" 1.4.0.4;T@ [I"wu_string_extend;T@'@ [I" wutiger;T@'@ [I"ww;T@@ [I" wwine;T@I@ [I" wwmd;TU;[I" 0.2.20.3;T@ [I"wwood-rarff;T@[@ [I"wwood-reach;T@@ [I"WWT;T@@ [I"www;T@"@ [I"www-delicious;T@x@ [I"www-favicon;T@@ [I"www_redirect;T@'@ [I"www-tvtropes;T@E@ [I" wxgtk;T@@ [I"wxianfeng_simple_captcha;T@@ [I"wxm;T@@ [I" wxmn-acts_as_mongo_taggable;T@E@ [I"wx-nobbie;T@E@ [I" wx-pac;T@'@ [I" wxrcg;T@@ [I" wxruby;T@ I"i686-darwin8.4.1;T[@@ I"powerpc-darwin8.3.0;T[@@{I"i686-darwin8.8.2;T[@@{I"powerpc-darwin8.10.0;T[@@{@}1[@@ @M[@U;[I" 1.9.7;T@1[@@O@S[@@@[@@@ [@@@ [@@@9[I"wxruby-ruby19;T@O@S[@@@ [@@@ [@@@[I"wx_runner;T@'@ [I" wx_sugar;T@M@ [I"WxVanaClock;T@@ [I"wye;T@`@ [I"wymeditor-rails;T@'@ [I"wymeditor-simple_form;T@"@ [I" wysia;T@@ [I"wysihat-engine;T@@ [I"wysihtml5_gem;T@@ [I"wysihtml5n-rails;T@'@ [I"wysihtml5_rails;TU;[I" 0.1.03;T@ [I"wysihtml5-rails;T@"@ [I"wysihtml5_with_ps;T@'@ [I" wysiwyg;T@'@ [I"x;T@@ [I"x10-cm17a;T@@1[@В@@ [I"x11_client;T@"@ [I"x12;T@@ [I"X12;T@@ [I"x2c;T@@ [I" x2cs;T@@ [I" x86dis;T@@ [I" xagemu;T@E@ [I" xail;T@@ [I" xamplr;TU;[I" 1.9.20;T@ [I"xamplr-gen;TU;[I" 1.9.16;T@ [I"xamplr-pp;T@N@ [I"xan_markup;T@`@ [I" xaop-exception_notification;T@@ [I"xaop-ntlm-http;T@H@ [I"xapian-core;T@Ot@ [I"xapian_db;T@?@ [I"xapian-fu;T@@ [I"xapian-full;T@@ [I"xapian-full-alaveteli;TU;[I" 1.2.9.5;T@ [I"xapian-indexer;TU;[I" 1.2.3.4;T@ [I"xapian-rack;T@p@ [I"xapian-ruby;T@T @ [I" xapit;T@@ [I" xapor;T@I@ [I" xapper;T@@ [I" xarf;T@J@ [I" xargs;T@'@ [I" xarray;T@E@ [I" xattr;T@@ [I"xaviershay-dm-rails;TU;[I" 0.10.3.8;T@ [I" xbar;T@@ [I"xbd;T@@ [I" xbel;T@@ [I" xbmc;T@'@ [I"xbmc-client;T@@@ [I"xbmc-jsonrpc;T@@ [I" xbm_ruby;T@@ [I"xboxleaders;T@@ [I"xbox_live;T@@ [I"xbrlware-ce;T@x@ [I"xbrlware-extras;TU;[I"1.1.2.19.2;T@ [I"xbrlware-ruby19;T@3@ [I" xbuilder;T@B@ [I"xcapclient;T@@ [I"xcb;T@'@ [I"xcharts_rails;T@'@ [I" xcider;T@`@ [I" xcli;T@E@ [I" xcode;T@|@ [I"xcodebuild-rb;T@@ [I" xcodeide;T@`@ [I"xcode_make;T@E@ [I"XcodePages;T@@ [I"xcodeproj;T@x@ [I"xcodeproject;T@J%@ [I"xcode-project-renamer;T@'@ [I" xcoder;T@=@ [I"xcoderake;T@[ @ [I"xcodesnippets;T@@ [I"xcode_template_maker;T@@ [I"xcode-yamlizer;T@"@ [I" xcselect;T@1@ [I"XDCC-Fetch;TU;[I" 1.409;T@ [I"xdg;T@9 @ [I"xdo;T@@ [@h@@S[@h@"@ [I" x_do;T@@@ [I" xdojava;T@@ [I" xdry;T@@@ [I"xdt;T@W@ [I"xduration;T@9 @ [I" xebec;T@1@ [I"x-editable-rails;T@@ [I"xen;T@@ [I" xenapi;T@@ [I"xenapi-ruby;T@'@ [I"xenda-nifty-generators;T@@ [I"xenda-typhoeus;T@,@ [I"xendeploy;T@&@ [I" xenrec;T@6@ [I" xen-ruby;T@@ [I" xero;T@@ [I"xero_gateway;T@@ [I"xero_gateway-float;T@:@ [I"xero_gateway-n8vision;TU;[I" 2.0.20;T@ [I" xeroizer;TU;[I" 2.15.3;T@ [I" xero-min;T@@ [I"xes;T@`@ [I"xf-generators;T@E@ [I"xfn_stone;T@V@ [I" xforge;T@x@ [I" xforms;T@"@ [I" xftdim;T@'@ [I" xgem;T@E@ [I"xh5-tweetstream;T@@ [I"xh5-twitter-stream;T@@ [I" xheditor;T@@ [I" xhive;T@Q@ [I"xhr;T@@ [I"xhr-blackbook;T@vg@ [I"xhr_flash;T@'@ [I"xhr-ifconfig;T@@ [I"xhr-president-news;T@@ [I"xhr-starling;T@ @ [I"xhtmldiff;T@@ [I"xi;TU;[I" 99.99;T@ [I" xiacc;T@@ [I"xian-test-jasmine;T@6@ [I"xiaohuangji;T@E@ [I" xiaonei;T@"@ [I" xiaoXbao;TU;[I" 9.5.6;T@ [I" xibdiff;T@@ [I" xibe;T@'@ [I" xibtoti;T@E@ [I"xid;T@@ [I" xidle;T@@ [I"xig_installer;T@E@ [I" xignite;T@@@ [I" xiki;T@7@ [I"xilinx-provision;T@@ [I" xilo;T@'@ [I"xim;T@'@ [I" ximate;T@,@ [I" xing;T@@ [I"xing-cap_gun;T@@ [I"xinuc-indofaker;T@@ [I" xisbn;T@"@ [I" xkcd;T@@ [I"xlib_ruby;T@@ [I" xls2csv;T@@ [I" xls2odat;T@@ [I"xls_html_cleaner;T@E@ [I"xls_porter;T@`@ [I"#xls_to_csv-paperclip-processor;T@"@ [I" xlsx;T@[ @ [I"xlsx_writer;T@x@ [I"xlymian-cijoe;T@@ [I"xlymian-redis-store;T@@ [I" xmapper;T@@ [I" xmatch;T@@ [I"xml_active;T@@ [I"xmlblog-acts_as_versioned;T@7@ [I"xmlcanonicalizer;T@@@ [I"XMLCanonicalizer;T@@ [I"xmlcellent;T@@ [I" xmlcodec;T@6@ [I" xmlconv;T@@ [I" xmlconv2;T@O@ [I"xml_convert;T@@ [I"xml_data_builder;T@@ [I" xmldsign;T@|@ [I" XmlEasy;T@E@ [I"xmlelements;T@@@ [I"xml_fixtures;T@`@ [I" xml-fu;T@@ [I" xmlhash;T@q@ [I" xml_hate;T@@@ [I" xmlize;T@`@ [I"xml-magic;T@`@ [I"xml_mapper;T@M+@ [I"xml-mapping;T@e@ [I" xml_mini;T@@ [I"xml-motor;T@1@ [I"xml_node_stream;T@@ [I"xmlobject;T@!@ [I"xml-object;TU;[I" 0.9.93;T@ [I"xmlparsable;T@;@ [I"xmlparser;T@u4@ [I"xmlpipe2_indexer;T@E@ [I"xmlpretty;T@@ [I"xml-purifier;T@@@ [I"xml-registry;T@ @ [I"xml_resource;T@@ [I"xmlresume2x;T@@ [I" XMLROCS;T@'@ [I"xmlrpc-endpoint;T@@ [I"xmlrpc-rack_server;T@'@ [I" xmlrpcs;T@6@ [I"xmlrpc-streaming;T@@ [I"xml-sax-machines;T@@ [I" xmlscan;T@@ [I"xml_schema;T@6@ [I"xml_schema_mapper;T@@ [I" xmlsec;T@@ [I"xmlsec-ruby;T@n@ [I"xmlsec-shim;TU;[I" 1.2.18.2;T@ [I"xml_serialization;T@@@ [I" xmlsig;T@@ [I"xml_signature;T@@ [I"xml-simple;T@x@ [I"xml-sitemap;T@@ [I"xml-smart;T@@ [I" xml_spec;T@@ [I"xml_split;T@E@ [I" xmlss;T@@ [I"xmlstreamin;T@'@ [I"xml_stream_parser;T@@ [I"xmlstruct;T@@ [I"xml-to-haml;T@|@ [I"xml_to_json;T@E@ [I" xmltv;T@u!@ [I"xmltv2html;T@@ [I"xmlvalidate;T@@ [I"xmp;T@@ [I" xmpfixed;T@@ [I"xmp_fixed;T@,@ [I"xmp-fixed_prefix;T@I@ [I" xmpleton;T@@@ [I" xmpp4em;T@@ [I" xmpp4log;T@E@ [I" xmpp4r;T@@ [I"xmpp4r_facebook;T@`@ [I"xmpp4r-observable;T@Y@ [I"xmpp4r-simple;T@@ [I"xmpp-agent;T@@ [I" xmppbot;T@@ [I"xmpp_gateway;T@<@ [I"xmpp_server;T@'@ [I" xmvc;T@t @ [I"xn-octokit;T@@ [I"xommelier;T@$@ [I"xot;T@6@ [I" xoxo;T@u@ [I" xp5k;T@'@ [I" xpain;T@'@ [I" xparams;T@@ [I" xpath;T@@ [I" xpather;T@@@ [I" xpay;T@@ [I"xpcomcore-rubygem;T@@ [I" xpgrep;T@@ [I" xplanner;T@@@ [I" xpool;T@@ [I" xproxy;T@@ [I" xqruby;T@@[I" xrails;T@@ [I" xrandrb;T@E@ [I" xray;T@s@ [I" XRay;T@@ [I"xrb;T@@ [I"xrd;T@@ [I"xrefresh-server;T@@ [I" xrono;T@@ [I"x_runtime;T@@ [I" xrvg;TU;[I" 0.0.82;T@ [I"xs;T@'@ [I"xscreen_usb_unlocker;TU;[I" 0.91.0;T@ [I" xsltgem;T@'@ [I"xslt-morpheus;T@@ [I" xspf;T@]5@ [I" xspf2m3u;T@@ [I"xspond-delayed_job;T@@ [I" xspree;T@@ [I"xss_shield;T@O@ [I"xss_terminate;T@!@ [I"xstreamly;T@@ [I" xstring;T@n@ [I" xtdo;T@I@ [I"xteam_schedule;T@@ [I" xtendr;T@@ [I" xthread;TU;[I"0.1.4.001;T@ [I" xthreads;T@@ [I"x_to_json;T@'@ [I" xtotxt;T@W9@ [I" xtrace;T@@ [I" xtrn;T@+@ [I" xttc;T@@ [I"xultestrunner;T@@ [I" xunitnet;T@ @ [I" xunlei;T@ @ [I"xupa_emec;T@W@ [I" xurrency;T@ `@ [I"xvp;T@@ [I"xws_breadcrumbs;T@'@ [I"xx;T@@ [I" xxhash;T@'@ [I"xxx;T@@@ [I"y;T@'@ [I"ya;T@@ [I" ya2yaml;TU;[I" 0.31;T@ [I"ya2yaml-jomz;T@@ [I" ya_acl;T@n@ [I" yab62;T@@ [I" yabmi;T@E@ [I"yac;T@Q%@ [I" yacan;T@`@ [I"yacc-vanity;T@@ [I" yacht;T@@ [I" yack;T@E@ [I" yacl;T@@ [I"yad;T@"@ [I"yada_yada;T@@ [I" yadic;T@@@ [I" yadirect;T@'@ [I" yads;T@@ [I"ya_email_validator;T@@ [I"yaestraier;T@@ [I" yafin;T@@ [I" yaggy;T@@ [I" yagni;T@@ [I" yahoo;T@O@ [I"yahoo_ads_estimates;T@|@ [I"yahoo-answers;T@@ [I"yahoo_currency;T@@ [I"yahoofinance;T@@ [I"yahoo_finance;T@E@ [I"yahoo-finance;T@E@ [I"yahoo_finance_currency;T@+@ [I"yahoo_finance_scraper;T@@ [I"yahoofinance-typhoeus;T@@ [I" yahoofx;T@`@ [I"yahoo-geocode;T@@ [I"yahoo-geoplanet;T@@ [I"yahoo-group-data;T@@ [I"yahoo-japan-api;T@@ [I"yahoo-japanese-analysis;T@`@ [I"yahoo_jp_transit;T@@@ [I"yahoo-local;T@+@ [I"yahoo-music;T@@ [I"yahoo_nba;T@"@ [I"yahoo-placemaker;T@n@ [I"yahoo_quote;T@@ [I" yahoo-se;T@@ [I"yahoo-search;T@O@ [I"yahoo_site_explorer;T@E@ [I"yahoo_sports;T@@ [I"yahoo_sports19;T@@ [I"yahoo_stock;T@@ [I"yahoo_stock_splits;T@@ [I"yahoosuggest;T@@ [I"yahoo_term_extraction;T@@ [I"yahoo-video;T@@ [I"yahoo-weather;T@N@ [I"yahoo_weatherman;T@@ [I"yahoo_weatherman_extended;T@N@ [I"yahoo_web_api;T@I@ [I" yahw;T@@ [I" yaib;T@'@ [I" yaih;T@@ [I" yaji;T@@ [@@@ [I"yajl-ruby;T@@ [@@@ [@@@[I"yajl-ruby-maglev-;T@@ [I"yajl-ruby-zenjoy;T@@ [I"yak;T@@ [I" yakg;T@E@ [I" yakka;T@E@ [I" yakr;T@I@ [I"yalab-ruby-ods;T@@ [I"yam;T@@ [I" yam2g;T@'@ [I" yamato;T@E@ [I"yam-aws-s3;TU;[I" 0.6.2.3;T@ [I"yam-contacts;TU;[I" 1.2.4.1;T@ [I"yam-db-charmer;TU;[I" 1.7.4.14;T@ [I" yamdi;T@@@ [I" yami;T@@ [I" yaml2csv;T@@ [I" yaml2env;T@@ [I"yaml_adapter;T@'@ [I" yamlade;T@E@ [I"yamlclass;T@'@ [I"yaml_command;T@@ [I"yaml_conditions;TU;[I" 0.0.0.5;T@ [I"yaml_conf;T@`@ [I"yamlconfig;T@I@ [I"yaml_config;T@@ [I"yaml_config_file;T@@ [I"yaml-config-parser;T@6@ [I"yaml_configuration;T@@ [I"yaml_converters;T@@ [I" yaml_db;T@@ [I"yaml_db_anonymizer;T@@ [I"yaml_db_arel;T@I@ [I" yamldiff;T@V@ [I" yamldoc;T@'@ [I"yamled_acl;T@@ [I" yamler;T@@ [I"yaml_form_helper;T@@ [I" YAMLiner;T@@ [I" yamljam;T@@ [I"yaml_model;T@"@ [I"yaml-model;T@q@ [I"yaml_properties;T@@ [I" yamlrc;T@@ [I"yaml_record;T@@ [I" yamlrpc;T@@ [I"yaml_seeder;T@@ [I"yaml_store;T@@ [I"yaml_strings;T@@ [I" yamltest;T@@ [I"yamltestrubygemsorg;T@E@ [I"yaml_translate;T@@ [I"yaml_waml;T@@ [I" yammer;T@@@ [I" yammer4r;T@|@ [I"yammer_api;T@@ [I"yammer-cli;T@I@ [I"yammerstats;T@@ [I" yamo;T@@ [I"yam-redis-with-retries;T@@ [I"yam-ruby-metrics;T@@ [I" yanapi;T@@ [I"yandex-api;T@@ [I"yandex-api-direct;T@'@ [I"yandex_cleanweb;T@@ [I"yandex_detector;T@E@ [I"yandex-fucking-machine;T@@ [I"yandex_inflect;T@@@ [I"yandex_market;T@@ [I"yandex_metric;T@`@ [I"yandex_metrika;T@E@ [I"yandex_mystem;T@E@ [I"yandex-pdd;T@@ [I"yandex_uslugi_wrapper;T@`@ [I"yang-bark;T@@ [I"yannp-capybara;T@x@ [I" yanser;T@@ [I" yaop;T@@ [I" yaparc;T@@ [I" yapp;T@'@ [I" yapra;T@I@ [I" yapv;T@@ [I" yara;T@ @ [I"yara-normalize;T@@ [I" yarb;T@"@ [I" yard;T@&@ [I" yard-amp;T@x@ [I"yard_ast_editable;T@+@ [I"yard-bird;T@@@ [I"yard-blame;T@'@ [I"yard-components;T@E@ [I"yard-contextify;T@@ [I"yard-cucumber;T@t@ [I"yard-defaultreturn;T@@ [I"yard-delegate;T@'@ [I"yard-different-rspec;T@`@ [I" yard-dm;T@`@ [I"yard-dm-is-predefined;T@@ [I"yard-dm-predefined;T@@ [I"yard-docco;T@@ [I"yard-doc-core;T@ @ [I" yarder;T@'@ [I"yard-examples-from-rspec;T@'@ [I"yard_gems;T@@ [I"yard-gobject;T@@ [I"yard-heuristics;T@@ [I"yard_klippstein_template;T@Դ@ [I"yard-kramdown;T@'@ [I"yard-method-decorators;T@'@ [I"yard-method-overrides;T@`@ [I"yard-mongoid;T@E@ [I"yard-notes;T@@ [I"yard-nowpunk;TU;[I" 0.2.34;T@ [I" yardocco;T@@ [I"yard-parameters;T@`@ [I"yard-pygments;T@`@ [I"yard-pygmentsrb;T@E@ [I" yard-qed;T@@ [I"yard-rails;T@@ [I"yard-rest;T@T @ [I"yard-restful;T@@ [I"yard-rest-plugin;T@[@ [I"yard-rspec;T@@ [I"yard-rubicle;T@`@ [I" yard-sd;T@E@ [I"yard-sinatra;T@@ [I"yard-slipstream;T@@ [I"yard-spellcheck;T@|@ [I"yard-state_machine;T@'@ [I"yardstick;T@@ [I"yard-struct;T@@ [I"yard-thor;T@'@ [I"yard-thunder;T@@ [I"yard-tomdoc;T@@ [I"yard-value;T@@ [I"yard-web-plugin;T@@@ [I" yard-xml;T@@@ [I" yarel;T@'@ [I" yarg;T@6@ [I" yargi;T@@ [I" yarjuf;T@W@ [I" yarlisp;T@@ [I" yarn;T@`@ [I" yasarg;T@>@ [I" yasc;T@'@ [I" yasf;T@@ [I" yash;T@O@ [I" yasha;T@@ [I" yasm;T@@ [I" yast;T@'@ [I" yatch;T@'@ [I" yatran;T@6@ [I"yattr_encrypted;T@@ [I" yauth;T@@ [I" yawn;T@@ [I"yax;T@@ [I" yaxml;T@@ [I"yay;T@V@ [I"ya_yahoo_geocode;T@"@ [I"ya_yahoo_weather;T@@ [I" yayimdbs;T@@ [I"ybk;T@@ [I"ycn;T@@ [I" ycode;T@@ [I"ycurrency;T@@ [I"ydb;T@'@ [I"ydd;T@I@ [I" ydim;T@@ [I"ydim_html;T@@ [I" ydocx;T@@ [I"year_after_year;T@@ [I"yehezkielbs-contacts;T@S@ [I"yehezkielbs-gdata;T@x@ [I" yell;T@u@ [I"yell-adapters-gelf;T@N@ [I"yell-adapters-syslog;T@N@ [I"yellow_api;T@E@ [I"yellow-brick-road;T@[@ [I"yellowlab-akephalos;T@@ [I"yellowlab-pdf-inspector;T@@ [I"yell-rails;T@u@ [I" yelp;T@@ [I" yelp2;T@@ [I" yelp4r;T@N@ [I" yelped;T@`@ [I"yelp-hack;T@@ [I" yelpme;T@@ [I" yelpr;T@E@ [I" yelpster;T@@ [I" yEnc;T@<@ [I" yepnope;T@@ [I"yeqs_jquery;T@V@ [I"yeqs_sexybuttons;T@n@ [I" yerb;T@'@ [I"yes;T@'@ [I" yesman;T@@ [I" yesno;T@@ [I" yesradio;T@6@ [I"yesterday;T@6@ [I"$yetanothernguyen-activemerchant;TU;[I" 1.21.2;T@ [I")yetanothernguyen-acts-as-taggable-on;T@@ [I"!yetanothernguyen-delayed_job;T@'@ [I" yeti;T@@ [I" yettings;T@`@ [I" yfrog;T@@ [I"ygg;T@ @ [I"yggdrasil;T@@ [I"yibs_commission_junction;T@N@ [I"yieldmanager;T@' @ [I"yield_star_client;T@@ [I" yiifony;T@@ [I" yilp;T@@ [I" yinspire;T@@ [I" yinum;T@@ [I"yinxiangma;T@@ [I"yip;T@@ [I" yipit;T@E@ [I"yipit_n4l;T@E@ [I"yi_string_extend;T@'@ [I"ykk;T@N@ [I" ym4r;T@@ [I"ym4r-anonymizer;T@E@ [I" ym4r_gm;T@@ [I"ym4r-mapstraction;T@'@ [I" ymaps;T@V@ [I" ymdp;T@)@ [I"ymdp_generator;T@"@ [I" ymdt;T@@ [I" ymldot;T@@ [I"yml_reader;T@!@ [I" ymule;T@"@ [I"ynw-ar_mailer;T@@ [I"yo;T@'@ [I"yob;T@@ [I"yob-roxml;T@ @ [I"yockeries;T@@ [I" yoda;T@@ [I" yodaism;T@@ [I" yo_dawg;T@'@ [I" yodel;T@n@ [I"yodel_admin;T@n@ [I"yodel_blog;T@n@ [I""yodel_development_environment;T@n@ [I"!yodel_production_environment;T@n@ [I"yodel_queue;T@n@ [I"yodel_shop;T@n@ [I" yodlee;T@'@ [I"yoga_pants;T@@ [I"yogo-datamapper;T@@ [I" yogo-db;T@@ [I"yogo-framework;T@@ [I"yogo-operation;T@@@ [I"yogo-project;T@@ [I"yogo-support;T@`@ [I" yomu;T@+@ [I""yoomee-acts_as_mongo_taggable;T@@ [I"yoomee-decent_exposure;T@u@ [I"yoomee-mongosphinx;T@,@ [I"yoomee-rwebthumb;T@"@ [I"yoomee-searchlogic;TU;[I" 2.4.27;T@ [I"yo_quiero;T@@ [I" yore;T@@ [I"yorkcmarker;T@@@ [I" yoshida;T@`@ [I" youandme;T@,@ [I"youdao_fanyi;T@ @ [I"youdao-fanyi;T@E@ [I"you_got_listed;T@@ [I"younker-blog;T@'@ [I"younker-generators;T@@ [I"younker-ssl_requirement;T@'@ [I"younker-string-extensions;T@E@ [I" yourdsl;T@@ [I"youre_doing_it_wrong;T@@ [I" yourgem;T@'@ [I" yourinal;T@'@ [I" yourls;T@`@ [I" your_mom;T@@ [I"youroom_api;T@+@ [I"your_platform;T@'@ [I"youthtree-capistrano;T@@ [I"youthtree-controller-ext;T@@@ [I"youthtree-helpers;T@@ [I"youthtree-js;T@@ [I"youthtree-settings;T@@ [I" youtube;T@@ [I"youtube_addy;T@@ [I"youtube_analytics;T@'@ [I"youtube-downloader;T@@ [I"youtube-g;T@@ [I"youtube_id;T@@ [I"youtube_it;T@ @ [I"youtube_pop;T@@ [I" youtuber;TU;[I" 1.13.0;T@ [I"youtube-ripper;T@'@ [I"youtubescraper;T@@ [I"youtube_search;T@@ [I"youtubesearchresultscraper;T@@ [I"YoutubeTools;T@"@ [I"youtube_utils;T@@@ [I" yowl;T@R @ [I"yp;T@E@ [I"yql;T@E@ [I"yql-query;T@@ [I"yql_simple;T@E@ [I"yr;T@@ [I"yrb;T@'@ [I" ysm4r;T@@ [I"yspassenger;T@@ [I"YSRedCloth;TU;[I" 4.2.15;T@ [I" ystock;T@@ [I" ytag;T@'@ [I"yt_analytics;T@"@ [I"yt_data_api;T@E@ [I"ytemplate;T@'@ [I"ytl;T@@ [I" ytljit;T@@ [I" yt_mp3;T@@ [I" ytools;T@@ [I" yubikey;T@u@ [I"%yubikey_database_authenticatable;T@@ [I"yubinbang;T@'@ [I" YubiRuby;T@@ [I" yuedu123;T@'@ [I"yui;T@@ [I"yui-compass-plugin;T@[ @ [I"yuicompressor;T@N@ [I"yui-compressor;T@Q@ [I"yui-compressor-ext;T@"@ [I"yuicssmin;T@@ [I"yui-on-rails;T@. @ [I"yui-rails;T@@ [I"yui_reset_rails;T@@ [I" yuki;T@@@ [I" yumlcmd;T@"@ [I" yummi;T@@ [I" yummy;T@E@ [I" yumrepo;T@@ [I"yun;T@@ [I"yunicorn_mixins;T@@ [I" yuno;T@'@ [I" yunoe;T@E@ [I"yup;T@6@ [I"yuris-timer;T@@ [I" YurtCMS;T@@ [I"yus;T@@ [I" yweather;T@'@ [I"ywen-actionwebservice;TU;[I" 2.3.4.1;T@ [I"ywx;T@6@ [I"yyuu-capistrano-chef-solo;T@n@ [I"yyyc514-httparty;T@@ [I"z;T@@ [I"z2monitor;T@@ [I" z404;T@'@ [I"zaarly-sinatra-sprockets;T@@ [I"zaarly-swearjar;T@I@ [I"zaarly-urbanairship;T@@ [I" zabbix;T@x@ [I"zabbix_agent;T@`@ [I"zabbixapi;T@@ [I"zabbixapi-fotonsi;T@|@ [I"zabbix_nudge;T@g@ [I"zabbix_pusher;T@@ [I"zabbix_send;T@E@ [I" zabby;T@@@ [I" zabcon;TU;[I" 0.0.392;T@ [I" zable;T@@ [I"zacharyw-ruby-aaws;T@@ [I" zack;T@@ [I" zactor;T@V@ [I" zafu;T@@ [I"za-id-validator;T@@@ [I" zake;T@6@ [I" zalgo;T@"@ [I" zaml;T@6@ [I" zandu;T@@ [I" zanox;T@@ [I"zap;T@'@ [I" zapi;T@@ [I" zapt_in;T@E@ [I"zas-client;T@@ [I"zas-service;T@@ [I" zassets;T@t @ [I" zayin;T@@ [I" zaypay;T@@ [I" zazz;T@V@ [I" zazzle;T@'@ [I" zbar;T@`@ [I" zbase32;T@@ [I" zbatery;T@I@ [I" zbox;T@"@ [I" zbxapi;TU;[I" 0.2.415;T@ [I"zcc;T@@ [I"zclip-rails;T@'@ [I" zcore;T@'@ [I"zd;T@'@ [I" ZDevice;T@@ [I" zeal;T@@ [I" zebra;T@@ [I"zebra_zpl;T@'@ [I" zedbeans;T@@ [I" zeddb;T@T @ [I" zedkit;T@N@ [I"zedlocales;T@;@ [I"zeevex_concurrency;T@E@ [I"zeevex_delayed;T@- @ [I"zeevex_proxy;T@' @ [I"zeevex_reliability;T@6@ [I"zeevex_threadsafe;T@@ [I" zeit;T@@ [I" zelda;T@@ [I" zemanta;T@'@ [I" zemax;T@@ [I"zen;T@@ [I" zena;T@@ [I" zenapi;T@'@ [I" zenbox;T@V@ [I"zencodable;T@@ [I" zencoder;T@J@ [I"zencoder-cli;T@@ [I"zencoder-fetcher;T@^@ [I"zen_config;T@"@ [I" zendesk;T@g@ [I" zendesk2;T@@@ [I"zendesk_api;T@I@ [I"zendesk-api;T@@ [I"zendesk-api-naoya;T@@ [I"zendesk-ar_mailer;T@O7@ [I"zendesk-populator;T@@ [I"zendesk_remote_auth;T@N@ [I""zendesk_remote_authentication;T@- @ [I"zend-framework-deploy;T@@ [I" zenfolio;T@'@ [I" zeng;T@E@ [I"zen-grids;T@@ [I" ZenHacks;T@@ [I"Zenity.rb;T@@@ [I"zenoss_client;T@Y@ [I"zenprofile;T@@ [I" zenpush;T@@ [I" zenra;T@@ [I" zenslap;T@@ [I"zenStache;T@'@ [I" zentask;T@E@ [I" ZenTest;TU;[I" 4.8.3;T@ [I"zentest-goodies;T@@ [I"zentest-without-autotest;T@0@ [I" zentradi;T@E@ [I"zenturio_batteries;T@@ [I" zenweb;T@@ [I"zenweb-autolink;T@'@ [I"zenweb-haml;T@'@ [I"zenweb-template;T@@ [I"zenweb-textile;T@'@ [I" zephyr;T@u@ [I" zeppelin;T@@ [I"zepto-rails;T@@ [I" zerbo;T@@ [I" zerenity;T@@ [I" zerg;T@@ [I" zergling;T@'@ [I"zerg_support;T@1@ [I"zerg_xcode;T@@ [I"zerigo-designate;T@@@ [I"zerigo_dns;T@e@ [I" zero;T@@@ [I"zerobearing-hashie;T@g@ [I" zerobuf;T@'@ [I"zero-clipboard-rails;T@@ [I"zeroclipboard-rails;T@E@ [I"zero-fix18;T@@ [I"zero_generators;T@'@ [I" zeromq;T@'@ [I" zerost;T@'@ [I"zerostruct;T@'@ [I" zerp;T@'@ [I" zester;T@@ [I" zeus;T@o@ [I" zeus-api;T@`@ [I"zeus-edge;T@~@ [I"zeus-rails23;T@@ [I"zfben_capistrano;T@'@ [I"zfben_extend;T@@ [I"zfben_hanoi;T@"@ [I"zfben_libjs;T@<@ [I"zfben_rails_assets;T@ @ [I"zfben_rails_jobs;T@n@ [I"zfben_rails_jqgrid;T@'@ [I"zfben_rails_rake;T@K,@ [I" zferral;T@I@ [I"zff;T@'@ [I"zfinifile;T@@ [I"zfs;T@`@ [I"zfs-mysql-backup;T@@ [I"zfs-snapshot;T@@ [I" zfstools;T@@ [I" zgomot;T@6@ [I" zgrid;T@'@ [I"zhangbanger;T@E@ [I"zhanghd_kaminari;TU;[I" 0.10.4.1;T@ [I" zhangmen;T@@ [I"zhaorong-mm-sluggable;T@@ [I" zhconv;T@`@ [I"zh_kostev_ext;T@@ [I" zh-lorem;T@@ [I" zidian;T@@ [I"zig;T@@ [I" ziggy;T@@ [I"zik;T@)@ [I" zillow4r;T@`@ [I"zillow_demographics;T@@ [I"zillow_ruby;T@@ [I" zim2epub;T@@ [I" zimbra;T@"@ [I"zimbra_wsdl;T@@ [I" zimdb;T@@ [I" zimki;T@'@ [I" zim-ruby;T@@ [I" zimt;T@@ [I" zinbei;TU;[I" 0.1.2.3;T@ [I"zinfinit-actionwebservice;TU;[I" 2.3.4.2;T@ [I" zing;T@@ [I" zint;T@@ [I" zinx;T@@ [I"zip;T@@ [I"zip64writer;T@E@ [I" zipcode;T@@ [I"zipcodecoords;T@C@ [I"zip-code-info;T@`@ [I"zipcodematch;T@@ [I" zipcodr;T@E@ [I"zip_content_comparator;T@@ [I" zip_dsl;T@G @ [I" zipfian;T@@ [I"zipfinder;T@'@ [I" zipit;T@@ [I"zipkin-query;T@@ [I"zipkin-tracer;T@'@ [I" ziplist;T@'@ [I"ziplookup;T@@ [I"zipme-thinking-sphinx;TU;[I" 1.3.14;T@ [I" zipper;T@|@ [I" zipply;T@'@ [I" zippy;T@@ [I"zip_recruiter;T@@ [I" zipruby;T@@[@&@@ [I"zipruby1.8;T@@[I"zipruby1.9;T@@[I" zipster;T@@ [I"zipstream;T@@@ [I"ziptastic;T@@ [I" zip_tax;T@@ [I"zip_to_timezone;T@@ [I" zircon;T@"@ [I"zitdunyet;T@@ [I" ziya;T@9@ [I"zk;T@@ [I"zk-eventmachine;T@@ [I" zk-group;T@`@ [I" zknrg;T@"@ [I" zkruby;T@_=@ [I"zk-server;T@@ [I"zk_service;T@'@ [I"zlainsw-simple-rss;T@@ [I"zlib-crc32_combine;T@@ [I" zliby;T@@ [I" Zliby;T@@ [I"zlx;T@@ [I"zlx_hacker_term;T@@ [I"zmack-ultraviolet;T@-/@ [I"zmb;T@@ [I" zmeygo;T@@ [I"zmeygo_sync;T@f@ [I" zmonitor;T@@ [I"zmq;T@i6@ [I"zmqmachine;T@@ [I" zmqp;T@'@ [I"zobjinspect;T@@ [I" zocial;T@@ [I"zocial-rails;T@@ [I" zodiac;T@[@ [I" zohax;T@@ [I" zoho;T@'@ [I" zohoho;TU;[I" 0.2.5.4;T@ [I" zomato;T@'@ [I" zombie;T@'@ [I"zombie_apocalypse;T@E@ [I"zombie-chaser;T@@ [I"zombie_passenger_killer;T@[@ [I" zombify;T@@ [I" zomg;T@@ [I"zomgjeweler;T@@ [I" zomgrss;T@@ [I" zonebie;T@"@ [I" zonefile;T@e@ [I"zoneless_time;T@@ [I" zonify;T@@ [I" zonomi;T@'@ [I"zoo;T@'@ [I"zoo-generators;T@|@ [I"zookeeper;T@@[@@@ [I" zool;T@+@ [I"zoolander;T@@ [I" zooline;T@@ [I" zoom;T@@ [I"zoomifier;T@@ [I" zoominfo;T@@ [I" zoomit;T@E@ [I" zoo_pass;T@E@ [I" zoopla;T@@ [I" zootool;T@@ [I" zooz;T@@ [I" zorglub;T@@ [I" zoro;T@'@ [I"zorros-deploy;T@"@ [I" zozo;T@@ [I" zpng;T@@ [I" z-rqr;T@,@ [I"zscaffold_admin;T@"@ [I" zsff;T@@ [I" zsh_dots;T@@ [I" zsteg;T@@ [I"ztk;T@@ [I" ztodo;T@u@ [I" ztrening;T@&@ [I"zu;T@@ [I"zubi-test;T@'@ [I" zucchini;T@'@ [I"zucchini-ios;T@@ [I" zuck;T@"@ [I" zucker;TU;[I" 12.1;T@ [I" zueribad;T@@ [I" zui53;T@E@ [I" zunnit;T@@ [I" zuora;T@1@ [I" zuora4r;T@@ [I"zuora-client;T@@ [I"zurb-awesome-buttons;T@@ [I"zurb-foundation;T@@ [I"ZURB-foundation;TU;[I" 2.2.1.4;T@ [I"zurb-rush;T@'@ [I"zurui-sass-rails;T@'@ [I" zuul;T@`@ [I" zvent;T@@ [I"zwaldowski-brewbygems;T@@ [I" zweikopf;T@@ [I" zwite;T@@ [I"zxcvbn-ruby;T@'@ [I" zxing;T@@ [I" zymurgy;T@ @ [I" zync-gen;T@@ [I" zypper;T@@ [I" zyps;T@u/@ [I" zzdeploy;T@@ [I" zzf-core;T@E@ [I"zzsharedlib;T@n@ [I" zzutil;T@"@ [I" zzzzzz;T@@ mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/specs000066400000000000000000000000531446701454400247300ustar00rootroot00000000000000[[" nexusU:Gem::Version[" 0.1.0" rubymavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/zip-release-metadata.xml000066400000000000000000000003251446701454400304120ustar00rootroot00000000000000 rubygems zip 2.0.2 2014 mavengem-mavengem-2.0.1/rubygems-tools/src/test/resources/zip.pom000066400000000000000000000034001446701454400252060ustar00rootroot00000000000000 4.0.0 rubygems zip 2.0.2 gem zip is a Ruby library for reading and writing Zip files http://github.com/postmodern/rubyzip2 zip is a Ruby library for reading and writing Zip files. Unlike the official rubyzip, zip is compatible with Ruby 1.9.1. Postmodern Thomas Sondergaard Sam Lown https://github.com/postmodern/rubyzip2.git http://github.com/postmodern/rubyzip2 utf-8 3.0.0 2.0.0 org.jruby.maven mavengem-wagon ${mavengem.wagon.version} org.jruby.maven gem-extension ${jruby.plugins.version} ${basedir}/pkg org.jruby.maven gem-maven-plugin ${jruby.plugins.version} zip-2.0.2.gemspec mavengem-mavengem-2.0.1/rubygems-tools/src/test/second-2.gem000066400000000000000000000100001446701454400237530ustar00rootroot00000000000000metadata.gz0000444000000000000000000000071100000000000013376 0ustar00wheelwheel00000000000000hSS0 +^¥N\Uni6IIRvVig@+!JMg~~-{xSl|H5&N9@$Q)D16#hߩit6#i!6!pLS.AS;á*M!z@(I.E]AU5[V!FQR[c" ho-:í'DjaF]}6qBDJEymǛ{JCx\f g̶ ZOvK slO5Zv18b\~iq :NѴy"#]\$ y^m><6UT2[?WQe.-Iʂ_}Y wm6fYͪEO 9 Rd ~s^data.tar.gz0000444000000000000000000000004300000000000013312 0ustar00wheelwheel00000000000000hSb``T.checksums.yaml.gz0000444000000000000000000000041500000000000014545 0ustar00wheelwheel00000000000000hSe;N@ D"ZwsT4(gC -Yo3 ^5z$dE'sX;hy/6F+ YpS3@lOWt rP\ZJĂ2YO\՛YBTub>$`֎1 *7 7τE 8b3f9¶*Gk$/fQzƚx.uQܣIEX`9ISr5<a[Yf