- Added YARD documentation

- Added description of functions in classyfire_api
This commit is contained in:
djoumbou 2016-03-09 19:26:59 -07:00
parent 7789ed13ff
commit 84e302e665
28 changed files with 4441 additions and 24 deletions

3
.yardoc/checksums Normal file
View File

@ -0,0 +1,3 @@
lib/classyfire_api.rb ed7783c1c688d4ee2a91044082a5ac80c3cd3c3e
lib/query_resource.rb 645cfb1688a5c44e67e5227fc0e9a77589731f24
lib/entity_resource.rb 6c50b4be6a5eb13b44d7080b19c7033b7a37c7cf

BIN
.yardoc/object_types Normal file

Binary file not shown.

BIN
.yardoc/objects/root.dat Normal file

Binary file not shown.

BIN
.yardoc/proxy_types Normal file

Binary file not shown.

4
Gemfile Normal file
View File

@ -0,0 +1,4 @@
source "https://rubygems.org"
gem 'rest-client'
gem 'yard'

27
Gemfile.lock Normal file
View File

@ -0,0 +1,27 @@
GEM
remote: https://rubygems.org/
specs:
domain_name (0.5.20160309)
unf (>= 0.0.5, < 1.0.0)
http-cookie (1.0.2)
domain_name (~> 0.5)
mime-types (2.99.1)
netrc (0.11.0)
rest-client (1.8.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 3.0)
netrc (~> 0.7)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.2)
yard (0.8.7.6)
PLATFORMS
ruby
DEPENDENCIES
rest-client
yard
BUNDLED WITH
1.11.2

View File

@ -29,11 +29,17 @@
> > > >
> >###GET### > >###GET###
> > > >
> >**/entities/{entity_inchikey}** > >**/entities/{entityInchikey}**
> > > >
> >A chemical compound's classification can be retrieved in the JSON or XML format. The compound's information is accessed via the InChIkey as show in the following examples. In this example, the entity has the InChIKey=LABTWGUMFABVFG-ONEGZZNKSA-N. > >A chemical compound's classification can be retrieved in the JSON or XML format. The compound's information is accessed via the InChIkey as show in the following examples. In this example, the entity has the InChIKey=LABTWGUMFABVFG-ONEGZZNKSA-N.
> > > > > >
> > >curl -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://classyfire.wishartlab.com/entities/BDAGIHXWWSANSR-UHFFFAOYSA-N.json > > >ClassyFireAPI.get_entity_classification("BDAGIHXWWSANSR-UHFFFAOYSA-N","json")
> >
> > Where:
> >
> > >The entity's InChIKey is "BDAGIHXWWSANSR-UHFFFAOYSA-N",
> > >
> > >The output format is "json" (JSON).
> ##2. Query## > ##2. Query##
@ -45,25 +51,29 @@
> > > >
> >###POST### > >###POST###
> >A query can be submitted using the POST method as demonstrated in the following example. > >A query can be submitted using the POST method as demonstrated in the following example.
> > >curl -is http://localhost:3000/queries.json -X POST -d '{"label":"curl_test","query_input":"MOL1,CCCOCC\nMOL2,COCC=CCCC"}' -H "Content-Type: application/json" > > >ClassyFireAPI.submit_query("curl_test","MOL1\\tCCCOCC\\nMOL2\\tCOCC=CCCC","STRUCTURE")
> > > >
> >where the parameters are: > >where the parameters are:
> > > >
> > >The query label: curl_test, > > >The query label: curl_test,
> > > > > >
> > >The entity identifiers: ID1,ID2 > > >The entity identifiers: MOL1,MOL2
> > > >
> > >The entity's structure represented in the SMILES format: CCCOCC and COCC=CCCC. > > >The entity's structure represented in the SMILES format: CCCOCC and COCC=CCCC.
> > > >
> > >The query is of type 'STRUCTURE'
> >###GET### > >###GET###
> > > >
> >**/queries/{query_id}** > >**/queries/{queryId}**
> > > >
> >The classification results can be retrieved via a GET method in the JSON or XML format. > >The classification results can be retrieved via a GET method in the JSON or XML format.
> > > > > >
> > >curl -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://classyfire.wishartlab.com/queries/88.json > > >ClassyFireAPI.get_query(443431,"json")
> > > >
> >where the query id is 88. > >where:
> > >The query id is 443431,
> > >The output format is "json" (JSON)
# **Directory Structure** # # **Directory Structure** #

View File

@ -1 +1 @@
djoumbou Yannick Djoumbou Feunang

1928
doc/ClassyFireAPI.html Normal file

File diff suppressed because it is too large Load Diff

123
doc/EntityResource.html Normal file
View File

@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
Class: EntityResource
&mdash; Documentation by YARD 0.8.7.6
</title>
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
<script type="text/javascript" charset="utf-8">
hasFrames = window.top.frames.main ? true : false;
relpath = '';
framesUrl = "frames.html#!EntityResource.html";
</script>
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
</head>
<body>
<div id="header">
<div id="menu">
<a href="_index.html">Index (E)</a> &raquo;
<span class="title">EntityResource</span>
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="class_list.html">
Class List
</a>
<a class="full_list_link" id="method_list_link"
href="method_list.html">
Method List
</a>
<a class="full_list_link" id="file_list_link"
href="file_list.html">
File List
</a>
</div>
<div class="clear"></div>
</div>
<iframe id="search_frame"></iframe>
<div id="content"><h1>Class: EntityResource
</h1>
<dl class="box">
<dt class="r1">Inherits:</dt>
<dd class="r1">
<span class="inheritName">ActiveResource::Base</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">ActiveResource::Base</li>
<li class="next">EntityResource</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
<dt class="r2 last">Defined in:</dt>
<dd class="r2 last">lib/entity_resource.rb</dd>
</dl>
<div class="clear"></div>
</div>
<div id="footer">
Generated on Wed Mar 9 19:25:39 2016 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.8.7.6 (ruby-2.3.0).
</div>
</body>
</html>

192
doc/QueryResource.html Normal file
View File

@ -0,0 +1,192 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
Class: QueryResource
&mdash; Documentation by YARD 0.8.7.6
</title>
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
<script type="text/javascript" charset="utf-8">
hasFrames = window.top.frames.main ? true : false;
relpath = '';
framesUrl = "frames.html#!QueryResource.html";
</script>
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
</head>
<body>
<div id="header">
<div id="menu">
<a href="_index.html">Index (Q)</a> &raquo;
<span class="title">QueryResource</span>
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="class_list.html">
Class List
</a>
<a class="full_list_link" id="method_list_link"
href="method_list.html">
Method List
</a>
<a class="full_list_link" id="file_list_link"
href="file_list.html">
File List
</a>
</div>
<div class="clear"></div>
</div>
<iframe id="search_frame"></iframe>
<div id="content"><h1>Class: QueryResource
</h1>
<dl class="box">
<dt class="r1">Inherits:</dt>
<dd class="r1">
<span class="inheritName">ActiveResource::Base</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">ActiveResource::Base</li>
<li class="next">QueryResource</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
<dt class="r2 last">Defined in:</dt>
<dd class="r2 last">lib/query_resource.rb</dd>
</dl>
<div class="clear"></div>
<h2>
Instance Method Summary
<small>(<a href="#" class="summary_toggle">collapse</a>)</small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#to_param-instance_method" title="#to_param (instance method)">- (Object) <strong>to_param</strong> </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
</ul>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="to_param-instance_method">
- (<tt>Object</tt>) <strong>to_param</strong>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
7
8
9</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/query_resource.rb', line 7</span>
<span class='kw'>def</span> <span class='id identifier rubyid_to_param'>to_param</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_identifier'>identifier</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Wed Mar 9 19:25:39 2016 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.8.7.6 (ruby-2.3.0).
</div>
</body>
</html>

136
doc/_index.html Normal file
View File

@ -0,0 +1,136 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
Documentation by YARD 0.8.7.6
</title>
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
<script type="text/javascript" charset="utf-8">
hasFrames = window.top.frames.main ? true : false;
relpath = '';
framesUrl = "frames.html#!_index.html";
</script>
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
</head>
<body>
<div id="header">
<div id="menu">
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="class_list.html">
Class List
</a>
<a class="full_list_link" id="method_list_link"
href="method_list.html">
Method List
</a>
<a class="full_list_link" id="file_list_link"
href="file_list.html">
File List
</a>
</div>
<div class="clear"></div>
</div>
<iframe id="search_frame"></iframe>
<div id="content"><h1 class="noborder title">Documentation by YARD 0.8.7.6</h1>
<div id="listing">
<h1 class="alphaindex">Alphabetic Index</h1>
<h2>File Listing</h2>
<ul id="files" class="index_inline_list">
<li class="r1"><a href="index.html" title="README">README</a></li>
</ul>
<div class="clear"></div>
<h2>Namespace Listing A-Z</h2>
<table>
<tr>
<td valign='top' width="33%">
<ul id="alpha_C" class="alpha">
<li class="letter">C</li>
<ul>
<li>
<span class='object_link'><a href="ClassyFireAPI.html" title="ClassyFireAPI (module)">ClassyFireAPI</a></span>
</li>
</ul>
</ul>
<ul id="alpha_E" class="alpha">
<li class="letter">E</li>
<ul>
<li>
<span class='object_link'><a href="EntityResource.html" title="EntityResource (class)">EntityResource</a></span>
</li>
</ul>
</ul>
<ul id="alpha_Q" class="alpha">
<li class="letter">Q</li>
<ul>
<li>
<span class='object_link'><a href="QueryResource.html" title="QueryResource (class)">QueryResource</a></span>
</li>
</ul>
</ul>
</td>
</tr>
</table>
</div>
</div>
<div id="footer">
Generated on Wed Mar 9 19:25:38 2016 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.8.7.6 (ruby-2.3.0).
</div>
</body>
</html>

58
doc/class_list.html Normal file
View File

@ -0,0 +1,58 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
<title>Class List</title>
<base id="base_target" target="_parent" />
</head>
<body>
<script type="text/javascript" charset="utf-8">
var hasFrames = false;
try {
hasFrames = window.top.frames.main ? true : false;
} catch (e) { }
if (hasFrames) {
document.getElementById('base_target').target = 'main';
document.body.className = 'frames';
}
</script>
<div id="content">
<h1 id="full_list_header">Class List</h1>
<div id="nav">
<span><a target="_self" href="class_list.html">
Classes
</a></span>
<span><a target="_self" href="method_list.html">
Methods
</a></span>
<span><a target="_self" href="file_list.html">
Files
</a></span>
</div>
<div id="search">Search: <input type="text" /></div>
<ul id="full_list" class="class">
<li><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></li>
<li><span class='object_link'><a href="ClassyFireAPI.html" title="ClassyFireAPI (module)">ClassyFireAPI</a></span><small class='search_info'>Top Level Namespace</small></li><li><span class='object_link'><a href="EntityResource.html" title="EntityResource (class)">EntityResource</a></span> &lt; Base<small class='search_info'>Top Level Namespace</small></li><li><span class='object_link'><a href="QueryResource.html" title="QueryResource (class)">QueryResource</a></span> &lt; Base<small class='search_info'>Top Level Namespace</small></li>
</ul>
</div>
</body>
</html>

1
doc/css/common.css Normal file
View File

@ -0,0 +1 @@
/* Override this file with custom rules */

57
doc/css/full_list.css Normal file
View File

@ -0,0 +1,57 @@
body {
margin: 0;
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
font-size: 13px;
height: 101%;
overflow-x: hidden;
}
h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
.clear { clear: both; }
#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; }
#content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; }
#full_list { padding: 0; list-style: none; margin-left: 0; }
#full_list ul { padding: 0; }
#full_list li { padding: 5px; padding-left: 12px; margin: 0; font-size: 1.1em; list-style: none; }
#noresults { padding: 7px 12px; }
#content.insearch #noresults { margin-left: 7px; }
ul.collapsed ul, ul.collapsed li { display: none; }
ul.collapsed.search_uncollapsed { display: block; }
ul.collapsed.search_uncollapsed li { display: list-item; }
li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; }
li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; }
li { color: #888; cursor: pointer; }
li.deprecated { text-decoration: line-through; font-style: italic; }
li.r1 { background: #f0f0f0; }
li.r2 { background: #fafafa; }
li:hover { background: #ddd; }
li small:before { content: "("; }
li small:after { content: ")"; }
li small.search_info { display: none; }
a:link, a:visited { text-decoration: none; color: #05a; }
li.clicked { background: #05a; color: #ccc; }
li.clicked a:link, li.clicked a:visited { color: #eee; }
li.clicked a.toggle { opacity: 0.5; background-position: bottom right; }
li.collapsed.clicked a.toggle { background-position: top right; }
#search input { border: 1px solid #bbb; -moz-border-radius: 3px; -webkit-border-radius: 3px; }
#nav { margin-left: 10px; font-size: 0.9em; display: none; color: #aaa; }
#nav a:link, #nav a:visited { color: #358; }
#nav a:hover { background: transparent; color: #5af; }
.frames #nav span:after { content: ' | '; }
.frames #nav span:last-child:after { content: ''; }
.frames #content h1 { margin-top: 0; }
.frames li { white-space: nowrap; cursor: normal; }
.frames li small { display: block; font-size: 0.8em; }
.frames li small:before { content: ""; }
.frames li small:after { content: ""; }
.frames li small.search_info { display: none; }
.frames #search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; }
.frames #content.insearch #search { background-position: center right; }
.frames #search input { width: 110px; }
.frames #nav { display: block; }
#full_list.insearch li { display: none; }
#full_list.insearch li.found { display: list-item; padding-left: 10px; }
#full_list.insearch li a.toggle { display: none; }
#full_list.insearch li small.search_info { display: block; }

339
doc/css/style.css Normal file
View File

@ -0,0 +1,339 @@
body {
padding: 0 20px;
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
font-size: 13px;
}
body.frames { padding: 0 5px; }
h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; }
h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; }
h1.title { margin-bottom: 10px; }
h1.alphaindex { margin-top: 0; font-size: 22px; }
h2 {
padding: 0;
padding-bottom: 3px;
border-bottom: 1px #aaa solid;
font-size: 1.4em;
margin: 1.8em 0 0.5em;
}
h2 small { font-weight: normal; font-size: 0.7em; display: block; float: right; }
.clear { clear: both; }
.inline { display: inline; }
.inline p:first-child { display: inline; }
.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; }
.docstring h1 { font-size: 1.2em; }
.docstring h2 { font-size: 1.1em; }
.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; }
.summary_desc .object_link, .docstring .object_link { font-family: monospace; }
.rdoc-term { padding-right: 25px; font-weight: bold; }
.rdoc-list p { margin: 0; padding: 0; margin-bottom: 4px; }
/* style for <table> */
#filecontents table, .docstring table { border-collapse: collapse; }
#filecontents table th, #filecontents table td,
.docstring table th, .docstring table td { border: 1px solid #ccc; padding: 8px; padding-right: 17px; }
#filecontents table tr:nth-child(odd),
.docstring table tr:nth-child(odd) { background: #eee; }
#filecontents table tr:nth-child(even),
.docstring table tr:nth-child(even) { background: #fff; }
#filecontents table th, .docstring table th { background: #fff; }
/* style for <ul> */
#filecontents li > p, .docstring li > p { margin: 0px; }
#filecontents ul, .docstring ul { padding-left: 20px; }
/* style for <dl> */
#filecontents dl, .docstring dl { border: 1px solid #ccc; }
#filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; }
#filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; }
#filecontents dd > p, .docstring dd > p { margin: 0px; }
.note {
color: #222;
-moz-border-radius: 3px; -webkit-border-radius: 3px;
background: #e3e4e3; border: 1px solid #d5d5d5; padding: 7px 10px;
display: block;
}
.note.todo { background: #ffffc5; border-color: #ececaa; }
.note.returns_void { background: #efefef; }
.note.deprecated { background: #ffe5e5; border-color: #e9dada; }
.note.private { background: #ffffc5; border-color: #ececaa; }
.note.title { padding: 1px 5px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; }
.summary_signature + .note.title { margin-left: 7px; }
h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; }
.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; }
.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; }
.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; }
.note.title.private { background: #d5d5d5; border-color: #c5c5c5; }
.note.title.not_defined_here { background: transparent; border: none; font-style: italic; }
.discussion .note { margin-top: 6px; }
.discussion .note:first-child { margin-top: 0; }
h3.inherited {
font-style: italic;
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
font-weight: normal;
padding: 0;
margin: 0;
margin-top: 12px;
margin-bottom: 3px;
font-size: 13px;
}
p.inherited {
padding: 0;
margin: 0;
margin-left: 25px;
}
#filecontents dl.box, dl.box {
border: 0;
width: 520px;
font-size: 1em;
}
#filecontents dl.box dt, dl.box dt {
float: left;
display: block;
width: 100px;
margin: 0;
text-align: right;
font-weight: bold;
background: transparent;
border: 1px solid #aaa;
border-width: 1px 0px 0px 1px;
padding: 6px 0;
padding-right: 10px;
}
#filecontents dl.box dd, dl.box dd {
float: left;
display: block;
width: 380px;
margin: 0;
padding: 6px 0;
padding-right: 20px;
border: 1px solid #aaa;
border-width: 1px 1px 0 0;
}
#filecontents dl.box .last, dl.box .last {
border-bottom: 1px solid #aaa;
}
#filecontents dl.box .r1, dl.box .r1 { background: #eee; }
ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; }
.index_inline_list { padding-left: 0; font-size: 1.1em; }
.index_inline_list li { list-style: none; display: inline; padding: 7px 12px; line-height: 35px; }
dl.constants { margin-left: 40px; }
dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; }
dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; }
.summary_desc { margin-left: 32px; display: block; font-family: sans-serif; }
.summary_desc tt { font-size: 0.9em; }
dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; }
dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; }
dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; }
dl.constants .discussion *:first-child { margin-top: 0; }
dl.constants .discussion *:last-child { margin-bottom: 0; }
.method_details { border-top: 1px dotted #aaa; margin-top: 15px; padding-top: 0; }
.method_details.first { border: 0; }
p.signature, h3.signature {
font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
padding: 6px 10px; margin-top: 18px;
background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
}
p.signature tt,
h3.signature tt { font-family: Monaco, Consolas, Courier, monospace; }
p.signature .overload,
h3.signature .overload { display: block; }
p.signature .extras,
h3.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; }
p.signature .not_defined_here,
h3.signature .not_defined_here,
p.signature .aliases,
h3.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; }
p.signature .aliases .names,
h3.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; }
.tags .tag_title { font-size: 1em; margin-bottom: 0; font-weight: bold; }
.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; }
.tags ul li { margin-bottom: 3px; }
.tags ul .name { font-family: monospace; font-weight: bold; }
.tags ul .note { padding: 3px 6px; }
.tags { margin-bottom: 12px; }
.tags .examples .tag_title { margin-bottom: 10px; font-weight: bold; }
.tags .examples .inline p { padding: 0; margin: 0; margin-left: 15px; font-weight: bold; font-size: 0.9em; }
.tags .overload .overload_item { list-style: none; margin-bottom: 25px; }
.tags .overload .overload_item .signature {
padding: 2px 8px;
background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
}
.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; }
.tags .overload .docstring { margin-top: 15px; }
.defines { display: none; }
#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; }
.showSource { font-size: 0.9em; }
.showSource a:link, .showSource a:visited { text-decoration: none; color: #666; }
#content a:link, #content a:visited { text-decoration: none; color: #05a; }
#content a:hover { background: #ffffa5; }
div.docstring, p.docstring { margin-right: 6em; }
ul.summary {
list-style: none;
font-family: monospace;
font-size: 1em;
line-height: 1.5em;
}
ul.summary a:link, ul.summary a:visited {
text-decoration: none; font-size: 1.1em;
}
ul.summary li { margin-bottom: 5px; }
.summary .summary_signature {
padding: 1px 10px;
background: #eaeaff; border: 1px solid #dfdfe5;
-moz-border-radius: 3px; -webkit-border-radius: 3px;
}
.summary_signature:hover { background: #eeeeff; cursor: pointer; }
ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;}
ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; }
#content .summary_signature:hover a:link,
#content .summary_signature:hover a:visited {
background: transparent;
color: #48f;
}
p.inherited a { font-family: monospace; font-size: 0.9em; }
p.inherited { word-spacing: 5px; font-size: 1.2em; }
p.children { font-size: 1.2em; }
p.children a { font-size: 0.9em; }
p.children strong { font-size: 0.8em; }
p.children strong.modules { padding-left: 5px; }
ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; }
ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; }
ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,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) no-repeat top center; }
ul.fullTree li:first-child { padding-top: 0; background: transparent; }
ul.fullTree li:last-child { padding-bottom: 0; }
.showAll ul.fullTree { display: block; }
.showAll .inheritName { display: none; }
#search { position: absolute; right: 14px; top: 0px; }
#search a:link, #search a:visited {
display: block; float: left; margin-right: 4px;
padding: 8px 10px; text-decoration: none; color: #05a;
border: 1px solid #d8d8e5;
-moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
-webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
background: #eaf0ff;
-webkit-box-shadow: -1px 1px 3px #ddd;
}
#search a:hover { background: #f5faff; color: #06b; }
#search a.active {
background: #568; padding-bottom: 20px; color: #fff; border: 1px solid #457;
-moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;
-webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px;
}
#search a.inactive { color: #999; }
.frames #search { display: none; }
.inheritanceTree, .toggleDefines { float: right; }
#menu { font-size: 1.3em; color: #bbb; top: -5px; position: relative; }
#menu .title, #menu a { font-size: 0.7em; }
#menu .title a { font-size: 1em; }
#menu .title { color: #555; }
#menu a:link, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; }
#menu a:hover { color: #05a; }
#menu .noframes { display: inline; }
.frames #menu .noframes { display: inline; float: right; }
#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; }
#footer a:link, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; }
#footer a:hover { color: #05a; }
#listing ul.alpha { font-size: 1.1em; }
#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; }
#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; }
#listing ul.alpha ul { margin: 0; padding-left: 15px; }
#listing ul small { color: #666; font-size: 0.7em; }
li.r1 { background: #f0f0f0; }
li.r2 { background: #fafafa; }
#search_frame {
z-index: 9999;
background: #fff;
display: none;
position: absolute;
top: 36px;
right: 18px;
width: 500px;
height: 80%;
overflow-y: scroll;
border: 1px solid #999;
border-collapse: collapse;
-webkit-box-shadow: -7px 5px 25px #aaa;
-moz-box-shadow: -7px 5px 25px #aaa;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
}
#content ul.summary li.deprecated .summary_signature a:link,
#content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; }
#toc {
padding: 20px; padding-right: 30px; border: 1px solid #ddd; float: right; background: #fff; margin-left: 20px; margin-bottom: 20px;
max-width: 300px;
-webkit-box-shadow: -2px 2px 6px #bbb;
-moz-box-shadow: -2px 2px 6px #bbb;
z-index: 5000;
position: relative;
overflow-x: auto;
}
#toc.nofloat { float: none; max-width: none; border: none; padding: 0; margin: 20px 0; -webkit-box-shadow: none; -moz-box-shadow: none; }
#toc.nofloat.hidden { padding: 0; background: 0; margin-bottom: 5px; }
#toc .title { margin: 0; }
#toc ol { padding-left: 1.8em; }
#toc li { font-size: 1.1em; line-height: 1.7em; }
#toc > ol > li { font-size: 1.1em; font-weight: bold; }
#toc ol > ol { font-size: 0.9em; }
#toc ol ol > ol { padding-left: 2.3em; }
#toc ol + li { margin-top: 0.3em; }
#toc.hidden { padding: 10px; background: #f6f6f6; -webkit-box-shadow: none; -moz-box-shadow: none; }
#filecontents h1 + #toc.nofloat { margin-top: 0; }
/* syntax highlighting */
.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; }
#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; }
#filecontents pre.code, .docstring pre.code { display: block; }
.source_code .lines { padding-right: 12px; color: #555; text-align: right; }
#filecontents pre.code, .docstring pre.code,
.tags pre.example { padding: 5px 12px; margin-top: 4px; border: 1px solid #eef; background: #f5f5ff; }
pre.code { color: #000; }
pre.code .info.file { color: #555; }
pre.code .val { color: #036A07; }
pre.code .tstring_content,
pre.code .heredoc_beg, pre.code .heredoc_end,
pre.code .qwords_beg, pre.code .qwords_end,
pre.code .tstring, pre.code .dstring { color: #036A07; }
pre.code .fid, pre.code .rubyid_new, pre.code .rubyid_to_s,
pre.code .rubyid_to_sym, pre.code .rubyid_to_f,
pre.code .dot + pre.code .id,
pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; }
pre.code .comment { color: #0066FF; }
pre.code .const, pre.code .constant { color: #585CF6; }
pre.code .label,
pre.code .symbol { color: #C5060B; }
pre.code .kw,
pre.code .rubyid_require,
pre.code .rubyid_extend,
pre.code .rubyid_include { color: #0000FF; }
pre.code .ivar { color: #318495; }
pre.code .gvar,
pre.code .rubyid_backref,
pre.code .rubyid_nth_ref { color: #6D79DE; }
pre.code .regexp, .dregexp { color: #036A07; }
pre.code a { border-bottom: 1px dotted #bbf; }

213
doc/file.README.html Normal file
View File

@ -0,0 +1,213 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>
File: README
&mdash; Documentation by YARD 0.8.7.6
</title>
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
<script type="text/javascript" charset="utf-8">
hasFrames = window.top.frames.main ? true : false;
relpath = '';
framesUrl = "frames.html#!file.README.html";
</script>
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
</head>
<body>
<div id="header">
<div id="menu">
<a href="_index.html">Index</a> &raquo;
<span class="title">File: README</span>
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="class_list.html">
Class List
</a>
<a class="full_list_link" id="method_list_link"
href="method_list.html">
Method List
</a>
<a class="full_list_link" id="file_list_link"
href="file_list.html">
File List
</a>
</div>
<div class="clear"></div>
</div>
<iframe id="search_frame"></iframe>
<div id="content"><div id='filecontents'>
<p><a href="http://classyfire.wishartlab.com">ClassyFire</a> is a resource
that allows you to automatically classify any chemical compound based on
its structure. This is the repository for the ClassyFire API allows you to
send requests to and pull information from the ClassyFire web server.</p>
<h1 id="label-What+is+this+repository+for-3F"><strong>What is this repository for?</strong></h1>
<ul><li>
<p>Quick summary</p>
</li><li>
<p>Version</p>
</li><li>
<p><a href="https://bitbucket.org/tutorials/markdowndemo">Learn Markdown</a></p>
</li></ul>
<h1 id="label-How+do+I+get+set+up-3F"><strong>How do I get set up?</strong></h1>
<ul><li>
<p>Summary of set up</p>
</li><li>
<p>Configuration</p>
</li><li>
<p>Dependencies</p>
</li><li>
<p>Database configuration</p>
</li><li>
<p>How to run tests</p>
</li><li>
<p>Deployment instructions</p>
</li></ul>
<h1 id="label-Contribution+guidelines"><strong>Contribution guidelines</strong></h1>
<ul><li>
<p>Writing tests</p>
</li><li>
<p>Code review</p>
</li><li>
<p>Other guidelines</p>
</li></ul>
<h1 id="label-Endpoints"><strong>Endpoints</strong></h1>
<blockquote>
<h2 id="label-1.+Entity">1. Entity</h2>
<blockquote>
<p>Chemical compounds are represented by the Entity model, through which one
can access the compound&#39;s structure-based classification.</p>
<h3 id="label-GET">GET</h3>
<p><strong>/entities/entityInchikey</strong></p>
<p>A chemical compound&#39;s classification can be retrieved in the JSON or
XML format. The compound&#39;s information is accessed via the InChIkey as
show in the following examples. In this example, the entity has the
InChIKey=LABTWGUMFABVFG-ONEGZZNKSA-N.</p>
<blockquote>
<p>ClassyFireAPI.get_entity_classification(“BDAGIHXWWSANSR-UHFFFAOYSA-N”,“json”)</p>
</blockquote>
<p>Where:</p>
<blockquote>
<p>The entity&#39;s InChIKey is “BDAGIHXWWSANSR-UHFFFAOYSA-N”,</p>
<p>The output format is “json” (JSON).</p>
</blockquote>
</blockquote>
<h2 id="label-2.+Query">2. Query</h2>
<blockquote>
<p>The Query model represents the chemical structure to be classified. Its
attributes are the query label and the query input.</p>
<blockquote>
<p>The query label is an identifier</p>
<p>The query input contains the compound&#39;s identifier (optional) and its
structural representation, separated by a comma. The chemical structure is
represented either in the <a
href="http://www.daylight.com/dayhtml/doc/theory/theory.smiles.html">Daylight
SMILES</a> or the <a
href="http://www.iupac.org/home/publications/e-resources/inchi.html">InChI</a>
format.</p>
</blockquote>
<h3 id="label-POST">POST</h3>
<p>A query can be submitted using the POST method as demonstrated in the
following example.</p>
<blockquote>
<p>ClassyFireAPI.submit_query(“curl_test”,“MOL1tCCCOCCnMOL2tCOCC=CCCC”,“STRUCTURE”)</p>
</blockquote>
<p>where the parameters are:</p>
<blockquote>
<p>The query label: curl_test,</p>
<p>The entity identifiers: MOL1,MOL2</p>
<p>The entity&#39;s structure represented in the SMILES format: CCCOCC and
COCC=CCCC.</p>
<p>The query is of type &#39;STRUCTURE&#39;</p>
</blockquote>
<h3 id="label-GET">GET</h3>
<p><strong>/queries/queryId</strong></p>
<p>The classification results can be retrieved via a GET method in the JSON or
XML format.</p>
<blockquote>
<p>ClassyFireAPI.get_query(443431,“json”)</p>
</blockquote>
<p>where:</p>
<blockquote>
<p>The query id is 443431, The output format is “json” (JSON)</p>
</blockquote>
</blockquote>
</blockquote>
<h1 id="label-Directory+Structure"><strong>Directory Structure</strong></h1>
<ul><li>
<p>lib</p>
</li></ul>
<h1 id="label-Who+do+I+talk+to-3F"><strong>Who do I talk to?</strong></h1>
<ul><li>
<p>Repo owner or admin</p>
</li><li>
<p>Other community or team contact</p>
</li></ul>
</div></div>
<div id="footer">
Generated on Wed Mar 9 19:25:39 2016 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.8.7.6 (ruby-2.3.0).
</div>
</body>
</html>

60
doc/file_list.html Normal file
View File

@ -0,0 +1,60 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
<title>File List</title>
<base id="base_target" target="_parent" />
</head>
<body>
<script type="text/javascript" charset="utf-8">
var hasFrames = false;
try {
hasFrames = window.top.frames.main ? true : false;
} catch (e) { }
if (hasFrames) {
document.getElementById('base_target').target = 'main';
document.body.className = 'frames';
}
</script>
<div id="content">
<h1 id="full_list_header">File List</h1>
<div id="nav">
<span><a target="_self" href="class_list.html">
Classes
</a></span>
<span><a target="_self" href="method_list.html">
Methods
</a></span>
<span><a target="_self" href="file_list.html">
Files
</a></span>
</div>
<div id="search">Search: <input type="text" /></div>
<ul id="full_list" class="file">
<li class="r1"><span class="object_link"><a href="index.html" title="README">README</a></a></li>
</ul>
</div>
</body>
</html>

26
doc/frames.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Documentation by YARD 0.8.7.6</title>
</head>
<script type="text/javascript" charset="utf-8">
window.onload = function() {
var match = unescape(window.location.hash).match(/^#!(.+)/);
var name = match ? match[1] : 'index.html';
name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
document.writeln('<frameset cols="20%,*">' +
'<frame name="list" src="class_list.html" />' +
'<frame name="main" src="' + escape(name) + '" />' +
'</frameset>');
}
</script>
<noscript>
<frameset cols="20%,*">
<frame name="list" src="class_list.html" />
<frame name="main" src="index.html" />
</frameset>
</noscript>
</html>

213
doc/index.html Normal file
View File

@ -0,0 +1,213 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>
File: README
&mdash; Documentation by YARD 0.8.7.6
</title>
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
<script type="text/javascript" charset="utf-8">
hasFrames = window.top.frames.main ? true : false;
relpath = '';
framesUrl = "frames.html#!file.README.html";
</script>
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
</head>
<body>
<div id="header">
<div id="menu">
<a href="_index.html">Index</a> &raquo;
<span class="title">File: README</span>
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="class_list.html">
Class List
</a>
<a class="full_list_link" id="method_list_link"
href="method_list.html">
Method List
</a>
<a class="full_list_link" id="file_list_link"
href="file_list.html">
File List
</a>
</div>
<div class="clear"></div>
</div>
<iframe id="search_frame"></iframe>
<div id="content"><div id='filecontents'>
<p><a href="http://classyfire.wishartlab.com">ClassyFire</a> is a resource
that allows you to automatically classify any chemical compound based on
its structure. This is the repository for the ClassyFire API allows you to
send requests to and pull information from the ClassyFire web server.</p>
<h1 id="label-What+is+this+repository+for-3F"><strong>What is this repository for?</strong></h1>
<ul><li>
<p>Quick summary</p>
</li><li>
<p>Version</p>
</li><li>
<p><a href="https://bitbucket.org/tutorials/markdowndemo">Learn Markdown</a></p>
</li></ul>
<h1 id="label-How+do+I+get+set+up-3F"><strong>How do I get set up?</strong></h1>
<ul><li>
<p>Summary of set up</p>
</li><li>
<p>Configuration</p>
</li><li>
<p>Dependencies</p>
</li><li>
<p>Database configuration</p>
</li><li>
<p>How to run tests</p>
</li><li>
<p>Deployment instructions</p>
</li></ul>
<h1 id="label-Contribution+guidelines"><strong>Contribution guidelines</strong></h1>
<ul><li>
<p>Writing tests</p>
</li><li>
<p>Code review</p>
</li><li>
<p>Other guidelines</p>
</li></ul>
<h1 id="label-Endpoints"><strong>Endpoints</strong></h1>
<blockquote>
<h2 id="label-1.+Entity">1. Entity</h2>
<blockquote>
<p>Chemical compounds are represented by the Entity model, through which one
can access the compound&#39;s structure-based classification.</p>
<h3 id="label-GET">GET</h3>
<p><strong>/entities/entityInchikey</strong></p>
<p>A chemical compound&#39;s classification can be retrieved in the JSON or
XML format. The compound&#39;s information is accessed via the InChIkey as
show in the following examples. In this example, the entity has the
InChIKey=LABTWGUMFABVFG-ONEGZZNKSA-N.</p>
<blockquote>
<p>ClassyFireAPI.get_entity_classification(“BDAGIHXWWSANSR-UHFFFAOYSA-N”,“json”)</p>
</blockquote>
<p>Where:</p>
<blockquote>
<p>The entity&#39;s InChIKey is “BDAGIHXWWSANSR-UHFFFAOYSA-N”,</p>
<p>The output format is “json” (JSON).</p>
</blockquote>
</blockquote>
<h2 id="label-2.+Query">2. Query</h2>
<blockquote>
<p>The Query model represents the chemical structure to be classified. Its
attributes are the query label and the query input.</p>
<blockquote>
<p>The query label is an identifier</p>
<p>The query input contains the compound&#39;s identifier (optional) and its
structural representation, separated by a comma. The chemical structure is
represented either in the <a
href="http://www.daylight.com/dayhtml/doc/theory/theory.smiles.html">Daylight
SMILES</a> or the <a
href="http://www.iupac.org/home/publications/e-resources/inchi.html">InChI</a>
format.</p>
</blockquote>
<h3 id="label-POST">POST</h3>
<p>A query can be submitted using the POST method as demonstrated in the
following example.</p>
<blockquote>
<p>ClassyFireAPI.submit_query(“curl_test”,“MOL1tCCCOCCnMOL2tCOCC=CCCC”,“STRUCTURE”)</p>
</blockquote>
<p>where the parameters are:</p>
<blockquote>
<p>The query label: curl_test,</p>
<p>The entity identifiers: MOL1,MOL2</p>
<p>The entity&#39;s structure represented in the SMILES format: CCCOCC and
COCC=CCCC.</p>
<p>The query is of type &#39;STRUCTURE&#39;</p>
</blockquote>
<h3 id="label-GET">GET</h3>
<p><strong>/queries/queryId</strong></p>
<p>The classification results can be retrieved via a GET method in the JSON or
XML format.</p>
<blockquote>
<p>ClassyFireAPI.get_query(443431,“json”)</p>
</blockquote>
<p>where:</p>
<blockquote>
<p>The query id is 443431, The output format is “json” (JSON)</p>
</blockquote>
</blockquote>
</blockquote>
<h1 id="label-Directory+Structure"><strong>Directory Structure</strong></h1>
<ul><li>
<p>lib</p>
</li></ul>
<h1 id="label-Who+do+I+talk+to-3F"><strong>Who do I talk to?</strong></h1>
<ul><li>
<p>Repo owner or admin</p>
</li><li>
<p>Other community or team contact</p>
</li></ul>
</div></div>
<div id="footer">
Generated on Wed Mar 9 19:25:38 2016 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.8.7.6 (ruby-2.3.0).
</div>
</body>
</html>

219
doc/js/app.js Normal file
View File

@ -0,0 +1,219 @@
function createSourceLinks() {
$('.method_details_list .source_code').
before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
$('.toggleSource').toggle(function() {
$(this).parent().nextAll('.source_code').slideDown(100);
$(this).text("Hide source");
},
function() {
$(this).parent().nextAll('.source_code').slideUp(100);
$(this).text("View source");
});
}
function createDefineLinks() {
var tHeight = 0;
$('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
$('.toggleDefines').toggle(function() {
tHeight = $(this).parent().prev().height();
$(this).prev().show();
$(this).parent().prev().height($(this).parent().height());
$(this).text("(less)");
},
function() {
$(this).prev().hide();
$(this).parent().prev().height(tHeight);
$(this).text("more...");
});
}
function createFullTreeLinks() {
var tHeight = 0;
$('.inheritanceTree').toggle(function() {
tHeight = $(this).parent().prev().height();
$(this).parent().toggleClass('showAll');
$(this).text("(hide)");
$(this).parent().prev().height($(this).parent().height());
},
function() {
$(this).parent().toggleClass('showAll');
$(this).parent().prev().height(tHeight);
$(this).text("show all");
});
}
function fixBoxInfoHeights() {
$('dl.box dd.r1, dl.box dd.r2').each(function() {
$(this).prev().height($(this).height());
});
}
function searchFrameLinks() {
$('.full_list_link').click(function() {
toggleSearchFrame(this, $(this).attr('href'));
return false;
});
}
function toggleSearchFrame(id, link) {
var frame = $('#search_frame');
$('#search a').removeClass('active').addClass('inactive');
if (frame.attr('src') == link && frame.css('display') != "none") {
frame.slideUp(100);
$('#search a').removeClass('active inactive');
}
else {
$(id).addClass('active').removeClass('inactive');
frame.attr('src', link).slideDown(100);
}
}
function linkSummaries() {
$('.summary_signature').click(function() {
document.location = $(this).find('a').attr('href');
});
}
function framesInit() {
if (hasFrames) {
document.body.className = 'frames';
$('#menu .noframes a').attr('href', document.location);
try {
window.top.document.title = $('html head title').text();
} catch(error) {
// some browsers will not allow this when serving from file://
// but we don't want to stop the world.
}
}
else {
$('#menu .noframes a').text('frames').attr('href', framesUrl);
}
}
function keyboardShortcuts() {
if (window.top.frames.main) return;
$(document).keypress(function(evt) {
if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
if (typeof evt.target !== "undefined" &&
(evt.target.nodeName == "INPUT" ||
evt.target.nodeName == "TEXTAREA")) return;
switch (evt.charCode) {
case 67: case 99: $('#class_list_link').click(); break; // 'c'
case 77: case 109: $('#method_list_link').click(); break; // 'm'
case 70: case 102: $('#file_list_link').click(); break; // 'f'
default: break;
}
});
}
function summaryToggle() {
$('.summary_toggle').click(function() {
if (localStorage) {
localStorage.summaryCollapsed = $(this).text();
}
$('.summary_toggle').each(function() {
$(this).text($(this).text() == "collapse" ? "expand" : "collapse");
var next = $(this).parent().parent().nextAll('ul.summary').first();
if (next.hasClass('compact')) {
next.toggle();
next.nextAll('ul.summary').first().toggle();
}
else if (next.hasClass('summary')) {
var list = $('<ul class="summary compact" />');
list.html(next.html());
list.find('.summary_desc, .note').remove();
list.find('a').each(function() {
$(this).html($(this).find('strong').html());
$(this).parent().html($(this)[0].outerHTML);
});
next.before(list);
next.toggle();
}
});
return false;
});
if (localStorage) {
if (localStorage.summaryCollapsed == "collapse") {
$('.summary_toggle').first().click();
}
else localStorage.summaryCollapsed = "expand";
}
}
function fixOutsideWorldLinks() {
$('a').each(function() {
if (window.location.host != this.host) this.target = '_parent';
});
}
function generateTOC() {
if ($('#filecontents').length === 0) return;
var _toc = $('<ol class="top"></ol>');
var show = false;
var toc = _toc;
var counter = 0;
var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
var i;
if ($('#filecontents h1').length > 1) tags.unshift('h1');
for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
var lastTag = parseInt(tags[0][1], 10);
$(tags.join(', ')).each(function() {
if ($(this).parents('.method_details .docstring').length != 0) return;
if (this.id == "filecontents") return;
show = true;
var thisTag = parseInt(this.tagName[1], 10);
if (this.id.length === 0) {
var proposedId = $(this).attr('toc-id');
if (typeof(proposedId) != "undefined") this.id = proposedId;
else {
var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
this.id = proposedId;
}
}
if (thisTag > lastTag) {
for (i = 0; i < thisTag - lastTag; i++) {
var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
}
}
if (thisTag < lastTag) {
for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
}
var title = $(this).attr('toc-title');
if (typeof(title) == "undefined") title = $(this).text();
toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
lastTag = thisTag;
});
if (!show) return;
html = '<div id="toc"><p class="title"><a class="hide_toc" href="#"><strong>Table of Contents</strong></a> <small>(<a href="#" class="float_toc">left</a>)</small></p></div>';
$('#content').prepend(html);
$('#toc').append(_toc);
$('#toc .hide_toc').toggle(function() {
$('#toc .top').slideUp('fast');
$('#toc').toggleClass('hidden');
$('#toc .title small').toggle();
}, function() {
$('#toc .top').slideDown('fast');
$('#toc').toggleClass('hidden');
$('#toc .title small').toggle();
});
$('#toc .float_toc').toggle(function() {
$(this).text('float');
$('#toc').toggleClass('nofloat');
}, function() {
$(this).text('left');
$('#toc').toggleClass('nofloat');
});
}
$(framesInit);
$(createSourceLinks);
$(createDefineLinks);
$(createFullTreeLinks);
$(fixBoxInfoHeights);
$(searchFrameLinks);
$(linkSummaries);
$(keyboardShortcuts);
$(summaryToggle);
$(fixOutsideWorldLinks);
$(generateTOC);

181
doc/js/full_list.js Normal file
View File

@ -0,0 +1,181 @@
var inSearch = null;
var searchIndex = 0;
var searchCache = [];
var searchString = '';
var regexSearchString = '';
var caseSensitiveMatch = false;
var ignoreKeyCodeMin = 8;
var ignoreKeyCodeMax = 46;
var commandKey = 91;
RegExp.escape = function(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
function fullListSearch() {
// generate cache
searchCache = [];
$('#full_list li').each(function() {
var link = $(this).find('.object_link a');
if (link.length === 0) return;
var fullName = link.attr('title').split(' ')[0];
searchCache.push({name:link.text(), fullName:fullName, node:$(this), link:link});
});
$('#search input').keyup(function(event) {
if ((event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax)
|| event.keyCode == commandKey)
return;
searchString = this.value;
caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
regexSearchString = RegExp.escape(searchString);
if (caseSensitiveMatch) {
regexSearchString += "|" +
$.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
join('.+?');
}
if (searchString === "") {
clearTimeout(inSearch);
inSearch = null;
$('ul .search_uncollapsed').removeClass('search_uncollapsed');
$('#full_list, #content').removeClass('insearch');
$('#full_list li').removeClass('found').each(function() {
var link = $(this).find('.object_link a');
if (link.length > 0) link.text(link.text());
});
if (clicked) {
clicked.parents('ul').each(function() {
$(this).removeClass('collapsed').prev().removeClass('collapsed');
});
}
highlight();
}
else {
if (inSearch) clearTimeout(inSearch);
searchIndex = 0;
lastRowClass = '';
$('#full_list, #content').addClass('insearch');
$('#noresults').text('');
searchItem();
}
});
$('#search input').focus();
$('#full_list').after("<div id='noresults'></div>");
}
var lastRowClass = '';
function searchItem() {
for (var i = 0; i < searchCache.length / 50; i++) {
var item = searchCache[searchIndex];
var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
var matchString = regexSearchString;
var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
if (searchName.match(matchRegexp) == null) {
item.node.removeClass('found');
}
else {
item.node.css('padding-left', '10px').addClass('found');
item.node.parents().addClass('search_uncollapsed');
item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
item.link.html(item.name.replace(matchRegexp, "<strong>$&</strong>"));
}
if (searchCache.length === searchIndex + 1) {
searchDone();
return;
}
else {
searchIndex++;
}
}
inSearch = setTimeout('searchItem()', 0);
}
function searchDone() {
highlight(true);
if ($('#full_list li:visible').size() === 0) {
$('#noresults').text('No results were found.').hide().fadeIn();
}
else {
$('#noresults').text('');
}
$('#content').removeClass('insearch');
clearTimeout(inSearch);
inSearch = null;
}
clicked = null;
function linkList() {
$('#full_list li, #full_list li a:last').click(function(evt) {
if ($(this).hasClass('toggle')) return true;
if (this.tagName.toLowerCase() == "li") {
if ($(this).find('.object_link a').length === 0) {
$(this).children('a.toggle').click();
return false;
}
var toggle = $(this).children('a.toggle');
if (toggle.size() > 0 && evt.pageX < toggle.offset().left) {
toggle.click();
return false;
}
}
if (clicked) clicked.removeClass('clicked');
var win;
try {
win = window.top.frames.main ? window.top.frames.main : window.parent;
} catch (e) { win = window.parent; }
if (this.tagName.toLowerCase() == "a") {
clicked = $(this).parents('li').addClass('clicked');
win.location = this.href;
}
else {
clicked = $(this).addClass('clicked');
win.location = $(this).find('a:last').attr('href');
}
return false;
});
}
function collapse() {
if (!$('#full_list').hasClass('class')) return;
$('#full_list.class a.toggle').click(function() {
$(this).parent().toggleClass('collapsed').next().toggleClass('collapsed');
highlight();
return false;
});
$('#full_list.class ul').each(function() {
$(this).addClass('collapsed').prev().addClass('collapsed');
});
$('#full_list.class').children().removeClass('collapsed');
highlight();
}
function highlight(no_padding) {
var n = 1;
$('#full_list li:visible').each(function() {
var next = n == 1 ? 2 : 1;
$(this).removeClass("r" + next).addClass("r" + n);
if (!no_padding && $('#full_list').hasClass('class')) {
$(this).css('padding-left', (10 + $(this).parents('ul').size() * 15) + 'px');
}
n = next;
});
}
function escapeShortcut() {
$(document).keydown(function(evt) {
if (evt.which == 27) {
$('#search_frame', window.top.document).slideUp(100);
$('#search a', window.top.document).removeClass('active inactive');
$(window.top).focus();
}
});
}
$(escapeShortcut);
$(fullListSearch);
$(linkList);
$(collapse);

4
doc/js/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

123
doc/method_list.html Normal file
View File

@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
<title>Method List</title>
<base id="base_target" target="_parent" />
</head>
<body>
<script type="text/javascript" charset="utf-8">
var hasFrames = false;
try {
hasFrames = window.top.frames.main ? true : false;
} catch (e) { }
if (hasFrames) {
document.getElementById('base_target').target = 'main';
document.body.className = 'frames';
}
</script>
<div id="content">
<h1 id="full_list_header">Method List</h1>
<div id="nav">
<span><a target="_self" href="class_list.html">
Classes
</a></span>
<span><a target="_self" href="method_list.html">
Methods
</a></span>
<span><a target="_self" href="file_list.html">
Files
</a></span>
</div>
<div id="search">Search: <input type="text" /></div>
<ul id="full_list" class="method">
<li class="r1 ">
<span class='object_link'><a href="ClassyFireAPI.html#get_entity_classification-class_method" title="ClassyFireAPI.get_entity_classification (method)">get_entity_classification</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r2 ">
<span class='object_link'><a href="ClassyFireAPI.html#get_query-class_method" title="ClassyFireAPI.get_query (method)">get_query</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r1 ">
<span class='object_link'><a href="ClassyFireAPI.html#query_status-class_method" title="ClassyFireAPI.query_status (method)">query_status</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r2 ">
<span class='object_link'><a href="ClassyFireAPI.html#retrieve_classification-class_method" title="ClassyFireAPI.retrieve_classification (method)">retrieve_classification</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r1 ">
<span class='object_link'><a href="ClassyFireAPI.html#retrieve_entities_json-class_method" title="ClassyFireAPI.retrieve_entities_json (method)">retrieve_entities_json</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r2 ">
<span class='object_link'><a href="ClassyFireAPI.html#retrieve_entities_sdf-class_method" title="ClassyFireAPI.retrieve_entities_sdf (method)">retrieve_entities_sdf</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r1 ">
<span class='object_link'><a href="ClassyFireAPI.html#submit_queries_from_directory-class_method" title="ClassyFireAPI.submit_queries_from_directory (method)">submit_queries_from_directory</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r2 ">
<span class='object_link'><a href="ClassyFireAPI.html#submit_query-class_method" title="ClassyFireAPI.submit_query (method)">submit_query</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r1 ">
<span class='object_link'><a href="ClassyFireAPI.html#submit_query_input_in_chunks-class_method" title="ClassyFireAPI.submit_query_input_in_chunks (method)">submit_query_input_in_chunks</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r2 ">
<span class='object_link'><a href="ClassyFireAPI.html#submit_random_subset_of_query_input_in_chunks-class_method" title="ClassyFireAPI.submit_random_subset_of_query_input_in_chunks (method)">submit_random_subset_of_query_input_in_chunks</a></span>
<small>ClassyFireAPI</small>
</li>
<li class="r1 ">
<span class='object_link'><a href="QueryResource.html#to_param-instance_method" title="QueryResource#to_param (method)">#to_param</a></span>
<small>QueryResource</small>
</li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,114 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
Top Level Namespace
&mdash; Documentation by YARD 0.8.7.6
</title>
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
<script type="text/javascript" charset="utf-8">
hasFrames = window.top.frames.main ? true : false;
relpath = '';
framesUrl = "frames.html#!top-level-namespace.html";
</script>
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
</head>
<body>
<div id="header">
<div id="menu">
<a href="_index.html">Index</a> &raquo;
<span class="title">Top Level Namespace</span>
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="class_list.html">
Class List
</a>
<a class="full_list_link" id="method_list_link"
href="method_list.html">
Method List
</a>
<a class="full_list_link" id="file_list_link"
href="file_list.html">
File List
</a>
</div>
<div class="clear"></div>
</div>
<iframe id="search_frame"></iframe>
<div id="content"><h1>Top Level Namespace
</h1>
<dl class="box">
</dl>
<div class="clear"></div>
<h2>Defined Under Namespace</h2>
<p class="children">
<strong class="modules">Modules:</strong> <span class='object_link'><a href="ClassyFireAPI.html" title="ClassyFireAPI (module)">ClassyFireAPI</a></span>
<strong class="classes">Classes:</strong> <span class='object_link'><a href="EntityResource.html" title="EntityResource (class)">EntityResource</a></span>, <span class='object_link'><a href="QueryResource.html" title="QueryResource (class)">QueryResource</a></span>
</p>
</div>
<div id="footer">
Generated on Wed Mar 9 19:25:39 2016 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.8.7.6 (ruby-2.3.0).
</div>
</body>
</html>

View File

@ -1,12 +1,18 @@
require 'JSON' require 'JSON'
require 'RestClient' require 'csv'
module ClassyFireAPI module ClassyFireAPI
URL = 'http://classyfire.wishartlab.com' URL = 'http://classyfire.wishartlab.com'
def ClassyFireAPI.submit_query(label,input) # Submits a ClassyFire query, which should be returned in a specific format.
#
# @param label [String] the label of the query.
# @param input[String] the input of the query.
# @return [Hash] A Ruby Hash with the id (and other attributes) of the Query or nil
# if there is an error.
def ClassyFireAPI.submit_query(label,input, type='STRUCTURE')
begin begin
RestClient.post URL+'/queries', {:label => label, :query_input => input}.to_json, :accept => :json, :content_type => :json q = RestClient.post URL+'/queries', {:label => label, :query_input => input, :query_type => type}.to_json, :accept => :json, :content_type => :json
rescue RestClient::BadRequest => e rescue RestClient::BadRequest => e
e.response e.response
rescue RestClient::InternalServerError => e rescue RestClient::InternalServerError => e
@ -15,18 +21,26 @@ module ClassyFireAPI
e.response e.response
rescue RestClient::RequestTimeout => e rescue RestClient::RequestTimeout => e
e.response e.response
rescue RestClient::UnprocessableEntity => e
e.response
end end
q
end end
# Retrieves the classification results for a given query.
#
# @param query_id [Integer] the ID of the query.
# @param format [String] the format of the query (either JSON, CSV, or SDF)
# @return [Text] A text file displaying the classification results for
# the query's entities in the specified format.
def ClassyFireAPI.get_query(query_id,format="json") def ClassyFireAPI.get_query(query_id,format="json")
# format can be either 'json' or 'sdf'
begin begin
if format == "json" if format == "json"
puts "#{URL}/queries/#{query_id}.json"
RestClient.get "#{URL}/queries/#{query_id}.json", :accept => :json RestClient.get "#{URL}/queries/#{query_id}.json", :accept => :json
elsif format == "sdf" elsif format == "sdf"
puts "#{URL}/queries/#{query_id}.sdf"
RestClient.get "#{URL}/queries/#{query_id}.sdf", :accept => :sdf RestClient.get "#{URL}/queries/#{query_id}.sdf", :accept => :sdf
elsif format == "csv"
RestClient.get "#{URL}/queries/#{query_id}.csv", :accept => :csv
end end
rescue RestClient::ResourceNotFound => e rescue RestClient::ResourceNotFound => e
e.response e.response
@ -39,14 +53,20 @@ module ClassyFireAPI
end end
end end
# Retrieves the classification results for a given entity.
#
# @param inchikey [String] the ID of the query.
# @param format [String] the format of the query, 'text' (either JSON, CSV, or SDF)
# @return [Text] A text file displaying the classification results for the entity in the specified format.
def ClassyFireAPI.get_entity_classification(inchikey,format="json") def ClassyFireAPI.get_entity_classification(inchikey,format="json")
# format can be either 'json' or 'sdf'
inchikey_id = inchikey.to_s.gsub('InChIKey=','') inchikey_id = inchikey.to_s.gsub('InChIKey=','')
begin begin
if format == "json" if format == "json"
RestClient.get "#{URL}/entities/#{inchikey_id}.#{format}", :accept => :json RestClient.get "#{URL}/entities/#{inchikey_id}.#{format}", :accept => :json
elsif format == "sdf" elsif format == "sdf"
RestClient.get "#{URL}/entities/#{inchikey_id}.#{format}", :accept => :sdf RestClient.get "#{URL}/entities/#{inchikey_id}.#{format}", :accept => :sdf
elsif format == "csv"
RestClient.get "#{URL}/entities/#{inchikey_id}.#{format}", :accept => :csv
end end
rescue RestClient::ResourceNotFound => e rescue RestClient::ResourceNotFound => e
e.response e.response
@ -59,12 +79,379 @@ module ClassyFireAPI
end end
end end
# Retrieves the status of a query
# @param query_id [Integer] the ID of the query
# @return [String] the query status, 'Done' or 'In progress', 'string'
def ClassyFireAPI.query_status(query_id) def ClassyFireAPI.query_status(query_id)
s = JSON.parse(get_query(query_id)) begin
if s['error'] RestClient.get "#{URL}/queries/#{query_id}/status.json", :accept => :json
s rescue Exception=>e
elsif s['classification_status:'] $stderr.puts e.message
s['classification_status'] nil
end end
end end
# Takes a tab-separated file and submit the contained structures in bulks of a given size
#
# For 'STRUCTURE' or 'IUPAC_NAME'query types, each line must contain either
# 1) Only a structural represenation: SMILES, InChI for the 'STRUCTURE' query_type or a IUPAC name
# for the 'IUPAC NAME' query type.
# 2) a tab-separated pair of an ID and the corresponding sructure representation: SMILES, InChI for the
# 'STRUCTURE' query_type or a IUPAC name for the 'IUPAC NAME' query type.
#
# For 'FASTA' query type, just submit the query as a standard FASTA text.
# @param input_file [Text] The path to the input file.
# @param: slice_length [Integer] The maximum number of entries for each query input (the whole file
# is fragmented into n part of #slice_length entries each).
# @param: start [Integer] The starting index. Submit framgments from the index 'start'.
def ClassyFireAPI.submit_query_input_in_chunks(input_file,slice_length, start, type='STRUCTURE')
@start_time = Time.now
absolute_path = File.expand_path(input_file)
f = File.open(absolute_path, 'r')
input = []
lines = File.readlines(absolute_path)
lines.uniq.each do |line|
sline = line.strip.split("\t")
if sline.length == 1
input <<"#{sline[0]}"
elsif sline.length >= 2
input <<"#{sline[0]}\t#{sline[2]}"
end
end
query_ids = []
subdivised_groups = input.uniq.each_slice(slice_length).to_a
puts "nr of subdivised_groups: #{subdivised_groups.length}"
puts subdivised_groups[0]
sleeping_time = 120
initial_nr_of_jobs = 60
i = start
while i < initial_nr_of_jobs
title = File.basename(absolute_path).split(".")[0] + "_yannick" + "_part_#{i}"
begin
puts "submitting #{title}"
q = submit_query(title,subdivised_groups[i-1].join("\n"),type)
query_ids << JSON.parse(q)['id']
rescue Exception => e
puts e.message
puts e.backtrace.inspect
end
i = i + 1
end
puts "Going to sleep at #{Time.now - @start_time} for #{sleeping_time} s."
sleep(sleeping_time)
puts "Waking up at #{Time.now - @start_time}"
while i < subdivised_groups.length
k = 0
for k in (i..(i+80))
title = File.basename(absolute_path).split(".")[0] + "_yannick" + "_part_#{k}"
i = i + 1
begin
puts "submitting #{title}"
q = submit_query(title,subdivised_groups[k-1].join("\n"),type)
rescue Exception => e
puts e.message
puts e.backtrace.inspect
end
end
i = k
puts "Going to sleep at #{Time.now - @start_time} for #{sleeping_time} s."
sleep(sleeping_time)
puts "Waking up at #{Time.now - @start_time}"
end
end
# Takes each file in a folder, and submit the contained structures in bluks of a given size.
#
# For 'STRUCTURE' or 'IUPAC_NAME'query types, each line must contain either
# 1) Only a structural represenation: SMILES, InChI for the 'STRUCTURE' query_type or a IUPAC name
# for the 'IUPAC NAME' query type.
# 2) a tab-separated pair of an ID and the corresponding sructure representation: SMILES, InChI for the
# 'STRUCTURE' query_type or a IUPAC name for the 'IUPAC NAME' query type.
#
# For 'FASTA' query type, just submit the query as a standard FASTA text.
# @param: input_file [String] The path to the folder.
# @param: slice_length [Integer] The maximum number of entries for each query input (each file
# is fragmented into n part of #slice_length entries each), 'integer'
# @param type [String] the query_type 'STRUCTURE' (default) or 'IUPAC_NAME' or 'FASTA'
def ClassyFireAPI.submit_queries_from_directory(folder,slice_length,type="STRUCTURE")
if File.directory?(folder)
Dir.foreach(folder) do |filename|
puts "Filename: #{filename}"
ClassyFireAPI.submit_query_input_in_chunks(folder+"/"+filename,slice_length, type) unless filename == "." || filename == ".." || filename == ".DS_Store"
end
else
$stderr.puts "#{folder} is not a folder."
end
end
# Takes a tab-separated file and submit randomly selected structures in bulks of a given size.
#
# For 'STRUCTURE' or 'IUPAC_NAME'query types, each line must contain either
# 1) Only a structural represenation: SMILES, InChI for the 'STRUCTURE' query_type or a IUPAC name
# for the 'IUPAC NAME' query type.
# 2) a tab-separated pair of an ID and the corresponding sructure representation: SMILES, InChI for the
# 'STRUCTURE' query_type or a IUPAC name for the 'IUPAC NAME' query type.
#
# For 'FASTA' query type, just submit the query as a standard FASTA text.
# @param tab_separated_input_file [Text] The path to the input file.
# @param size [Integer] The maximum number of entries for each query input (the whole file
# is fragmented into n part of #slice_length entries each).
# @param type [String] The query_type, 'STRUCTURE' (default) or 'IUPAC_NAME' or 'FASTA'.
def ClassyFireAPI.submit_random_subset_of_query_input_in_chunks(tab_separated_input_file,size, type='STRUCTURE')
@start_time = Time.now
absolute_path = File.expand_path(tab_separated_input_file)
f = File.open(absolute_path, 'r')
input = []
f.each_line do |line|
sline = line.strip.split("\t")
if sline.length == 1
input <<"#{sline[0]}"
elsif sline.length == 2
input <<"#{sline[0]}\t#{sline[1]}"
end
end
query_ids = []
indexes = []
r = 1
while r <= (size)
s = rand(0..(input.length - 1))
unless indexes.include?(s)
indexes<<s
r += 1
end
end
random_subset = indexes.map{|x| input[x]}
subdivised_groups = random_subset.each_slice(100).to_a
sleeping_time = 120
i = 0
while i < subdivised_groups.length
k = 0
for k in (i..(i + 5))
title = File.basename(absolute_path).split(".")[0] + "_yannick" + "_part_#{k+1}"
i = i + 1
begin
puts "submitting #{title}"
q = submit_query(title,subdivised_groups[k].join("\n"),type)
rescue Exception => e
puts e.message
puts e.backtrace.inspect
end
end
i = k
puts "Going to sleep at #{Time.now - @start_time} for #{sleeping_time} s."
sleep(sleeping_time)
puts "Waking up at #{Time.now - @start_time}"
end
end
# Reads a tab separated file, and use the structure representation
#to retrieve the strutcure's classification from ClassyFire.
#
# @param input [String] path to the input file.
# @return [String] path to the output file.
def ClassyFireAPI.retrieve_classification(input,output)
absolute_path = File.expand_path(input)
f_input = File.open(absolute_path, 'r')
h = Hash.new
directory = absolute_path.split('/')[0...-1].join("/")
f_output = File.new(output, 'w')
res = String.new
res += "{"
res += '"id": 1,'
res += '"label":"' + output + '",' + '"classification_status":"Done",' + '"entities":['
f_input.each_line do |line|
sline = line.strip.split("\t")
if sline.length == 1
h[sline[0]] = sline[0]
elsif sline.length == 2
h[sline[0]] = line.strip
end
end
puts h.keys.uniq.length
if h.keys.length > 0
i = 1
h.keys.uniq[0..-1].each do |key|
puts i
puts "#{key} :: #{h[key]}"
begin
qs = submit_query(key,h[key])
qs_decoded = JSON.parse(qs)
qr = JSON.parse(get_query(qs_decoded["id"],format="json"))
res += qr["entities"][0].to_json
res += ","
i += 1
rescue Exception => e
e.message
end
end
key = h.keys[-1]
puts "#{key} :: #{h[key]}"
begin
qs = submit_query(key,h[key])
sleep(0.2)
qs_decoded = JSON.parse(qs)
qr = JSON.parse(get_query(qs_decoded["id"],format="json"))
# puts qr["entities"]
# sleep(0.2)
# f_output.print qr["entities"][0],"\n"
res += qr["entities"][0].to_json
# res += ","
rescue Exception => e
e.message
end
end
res += "]}"
f_output.print res
end
# Reads a tab separated file, and use the structure representation
# to retrieve the strutcure's classification from ClassyFire in a JSON format.
#
# @param input [String] path to the input file
# @return [String] path to the output file
def ClassyFireAPI.retrieve_entities_json(input,output)
absolute_path = File.expand_path(input)
f_input = File.open(absolute_path, 'r')
h = Hash.new
directory = absolute_path.split('/')[0...-1].join("/")
f_output = File.new(output, 'w')
puts
res = String.new
res += "{"
res += '"id": 1,'
res += '"label":"' + output + '",' + '"classification_status":"Done",' + '"entities":['
f_input.each_line do |line|
sline = line.strip.split("\t")
h[sline[0]] = sline[-1]
end
puts h.keys.uniq.length
if h.keys.length > 0
i = 1
h.keys.uniq[0...-1].each do |key|
puts i
# puts "#{key} :: #{h[key]}"
begin
inchikey = %x(/Applications/ChemAxon/JChem/bin/molconvert inchikey -s "#{h[key]}").strip
# puts inchikey
qr = JSON.parse(ClassyFireAPI.get_entity_classification(inchikey,format="json"))
qr['identifier'] = key
res += qr.to_json
res += ","
puts "#{key} :: RETURN NIL" if qr.nil? || qr['direct_parent']['name'].nil?
rescue Exception => e
e.message
end
i += 1
end
key = h.keys[-1]
# puts "#{key} :: #{h[key]}"
begin
inchikey = %x(/Applications/ChemAxon/JChem/bin/molconvert inchikey -s "#{h[key]}").strip
# puts inchikey
qr = JSON.parse(ClassyFireAPI.get_entity_classification(inchikey,format="json"))
qr['identifier'] = key
res += qr.to_json
puts "#{key} :: RETURN NIL" if qr.nil? || qr['direct_parent']['name'].nil?
# res += ","
rescue Exception => e
e.message
end
end
res += "]}"
f_output.print res
end
# Reads a tab separated file, and use the structure representation
# to retrieve the strutcure's classification from ClassyFire in a SDF format.
#
# @param input [String] path to the input file
# @return [String] path to the output file
def ClassyFireAPI.retrieve_entities_sdf(input,output)
absolute_path = File.expand_path(input)
f_input = File.open(absolute_path, 'r')
h = Hash.new
directory = absolute_path.split('/')[0...-1].join("/")
f_output = File.new(output, 'w')
res = String.new
f_input.each_line do |line|
sline = line.strip.split("\t")
h[sline[0]] = sline[-1]
end
puts h.keys.uniq.length
if h.keys.length > 0
i = 1
h.keys.uniq[0...-1].each do |key|
puts i
# puts "#{key} :: #{h[key]}"
begin
inchikey = %x(/Applications/ChemAxon/JChem/bin/molconvert inchikey -s "#{h[key]}").strip
# puts inchikey
qr = ClassyFireAPI.get_entity_classification(inchikey,format="sdf")
if qr.include?("The page you were looking for doesn't exist")
puts "The page you were looking for doesn't exist"
elsif qr.empty?
else
input = qr.split("\n")[1..-1].join("\n")
puts input
f_output.puts "#{key}\n"
f_output.puts input
end
rescue Exception => e
e.message
end
i += 1
end
key = h.keys[-1]
# puts "#{key} :: #{h[key]}"
begin
inchikey = %x(/Applications/ChemAxon/JChem/bin/molconvert inchikey -s "#{h[key]}").strip
# puts inchikey
qr = ClassyFireAPI.get_entity_classification(inchikey,format="sdf")
if qr.include?("The page you were looking for doesn't exist")
puts "The page you were looking for doesn't exist"
elsif qr.empty?
else
input = qr.split("\n")[1..-1].join("\n")
puts input
f_output.puts "#{key}\n"
f_output.puts input
end
rescue Exception => e
e.message
end
end
# f_output.print res
end
end end

View File

@ -1,7 +1,6 @@
require 'active_resource' require 'active_resource'
class EntityResource < ActiveResource::Base class EntityResource < ActiveResource::Base
self.site ='http://localhost:3000' self.site ='http://classyfire.wishartlab.com'
self.element_name = "entity" self.element_name = "entity"
end end

View File

@ -1,7 +1,7 @@
require 'active_resource' require 'active_resource'
class QueryResource < ActiveResource::Base class QueryResource < ActiveResource::Base
self.site ='http://localhost:3000' self.site ='http://classyfire.wishartlab.com'
self.element_name = "query" self.element_name = "query"
has_many :entities, class_name: 'EntityResource' has_many :entities, class_name: 'EntityResource'
def to_param def to_param