Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Revert "README update"

This reverts commit a37578a.
  • Loading branch information...
commit 6b611f2962adfacb3db01aeab7cf29b323bc38b6 1 parent a37578a
@tim-smart authored
View
19 Cakefile
@@ -0,0 +1,19 @@
+fs = require 'fs'
+{ exec } = require 'child_process'
+
+run = (command, cb) ->
+ child = exec command, cb
+ child.stdout.on 'data', (data) -> process.stdout.write data
+ child.stderr.on 'data', (data) -> process.stderr.write data
+
+task 'build', 'Create the ecmascript', ->
+ invoke 'docs'
+
+ run 'coffee -cb -o bin src/gista.coffee && mv bin/gista.js bin/gista', ->
+ fs.readFile 'bin/gista', 'utf8', (error, code) ->
+ throw error if error
+ fs.writeFile 'bin/gista', "#!/usr/bin/env node\n#{code}", ->
+ run 'chmod 0755 bin/gista'
+
+task 'docs', 'Use docco to create HTML docs', ->
+ run 'docco src/*.coffee'
View
8 README
@@ -4,7 +4,7 @@
\__, /_/____/\__/\__,_/
/____/
-The cli gist client writen with Node.js.
+The cli gist client writen in CoffeeScript for Node.js.
Install
=======
@@ -14,11 +14,9 @@ $ npm install -g gista
Usage
=====
-# Set your password etc.
-# Github has dropped the API token for API v3 auth.
-# So we have to use our password :(
+# Set your token etc.
git config --global github.user Tim-Smart
-git config --global github.password xxx
+git config --global github.token xxx
# Create a Public gist
$ echo "test" | gista
View
159 bin/gista
@@ -1 +1,160 @@
#!/usr/bin/env node
+var Gist, Task, createGist, exec, files, fromFiles, fromStdin, fs, gist, help, id, is_stdin, known_opts, loadConfig, nopt, options, path, short_opts;
+Gist = require('node-gist');
+nopt = require('nopt');
+path = require('path');
+fs = require('fs');
+Task = require('parallel').Task;
+exec = require('child_process').exec;
+help = "Create a Gist from a file or stdin using node-gist.\n\ngista -pd \"My cool gist\" [file.ext]\n\nOptions:\n -f, --fetch Fetch a gist by id or url\n -p, --private Mark the gist private\n -n, --name Manually set the file name\n -d, --desc Add a description\n -t, --type Manually set file extension\n -u, --user Manually set Github username\n -a, --token Manually set Github api token\n -h, --help You looking at it\n";
+known_opts = {
+ private: Boolean,
+ fetch: String,
+ meta: Boolean,
+ name: String,
+ desc: String,
+ type: String,
+ token: String,
+ user: String,
+ help: Boolean
+};
+short_opts = {
+ f: '--fetch',
+ p: ['--private', 'true'],
+ t: '--type',
+ u: '--user',
+ a: '--token',
+ h: '--help',
+ n: '--name',
+ d: '--desc'
+};
+options = nopt(known_opts, short_opts);
+if (options.help) {
+ console.log(help);
+ return process.exit();
+}
+if (options.fetch) {
+ id = options.fetch.split('/').pop();
+ if (!id) {
+ return process.exit();
+ }
+ gist = new Gist({
+ id: id
+ });
+ gist.load(function(error, meta) {
+ var content, filename, files, output, _i, _len;
+ files = Object.keys(this.data);
+ if (files.length === 0) {
+ return process.exit();
+ }
+ output = [];
+ for (_i = 0, _len = files.length; _i < _len; _i++) {
+ filename = files[_i];
+ content = this.data[filename];
+ output.push(content);
+ }
+ return process.stdout.write(output.join('\n----------\n'));
+ });
+ return;
+}
+files = options.argv.remain;
+is_stdin = options.argv.remain.length === 0;
+loadConfig = function(callback) {
+ var has_error, task;
+ if (!options.user) {
+ options.user = process.env.GITHUB_USER;
+ }
+ if (!options.token) {
+ options.token = process.env.GITHUB_TOKEN;
+ }
+ if (options.user && options.token) {
+ return callback();
+ }
+ task = new Task;
+ if (!options.user) {
+ task.add('user', [exec, 'git config --global github.user']);
+ }
+ if (!options.token) {
+ task.add('token', [exec, 'git config --global github.token']);
+ }
+ has_error = null;
+ return task.run(function(name, error, stdout) {
+ if (name === null) {
+ if (has_error || options.user === null || options.token === null) {
+ options.user = options.token = null;
+ }
+ return callback(has_error);
+ }
+ if (error) {
+ return has_error = error;
+ }
+ return options[name] = stdout.trim() || null;
+ });
+};
+loadConfig(function(error) {
+ if (error) {
+ throw error;
+ }
+ if (is_stdin) {
+ return fromStdin();
+ }
+ return fromFiles();
+});
+fromStdin = function() {
+ var data;
+ data = '';
+ process.stdin.resume();
+ process.stdin.setEncoding('utf8');
+ process.stdin.on('data', function(chunk) {
+ return data += chunk;
+ });
+ return process.stdin.on('end', function() {
+ return createGist([
+ {
+ name: options.name || null,
+ content: data
+ }
+ ]);
+ });
+};
+fromFiles = function() {
+ var file, gist_files, task, _i, _len;
+ if (files.length > 10) {
+ throw new Error('Over 10 files.');
+ }
+ task = new Task;
+ gist_files = [];
+ for (_i = 0, _len = files.length; _i < _len; _i++) {
+ file = files[_i];
+ task.add(path.basename(file), [fs.readFile, file, 'utf8']);
+ }
+ return task.run(function(name, error, content) {
+ if (name === null) {
+ return createGist(gist_files);
+ }
+ if (error) {
+ throw error;
+ }
+ return gist_files.push({
+ name: name,
+ content: content
+ });
+ });
+};
+createGist = function(files) {
+ var file, type, _i, _len;
+ gist = new Gist({
+ private: options.private || false,
+ user: options.user,
+ token: options.token,
+ description: options.desc
+ });
+ type = options.type ? '.' + options.type || null : void 0;
+ for (_i = 0, _len = files.length; _i < _len; _i++) {
+ file = files[_i];
+ gist.addFile(file.name, file.content, type);
+ }
+ return gist.save(function(error) {
+ return console.log("https://gist.github.com/" + this.id);
+ });
+};
View
186 docs/docco.css
@@ -0,0 +1,186 @@
+/*--------------------- Layout and Typography ----------------------------*/
+body {
+ font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
+ font-size: 15px;
+ line-height: 22px;
+ color: #252519;
+ margin: 0; padding: 0;
+}
+a {
+ color: #261a3b;
+}
+ a:visited {
+ color: #261a3b;
+ }
+p {
+ margin: 0 0 15px 0;
+}
+h1, h2, h3, h4, h5, h6 {
+ margin: 0px 0 15px 0;
+}
+ h1 {
+ margin-top: 40px;
+ }
+#container {
+ position: relative;
+}
+#background {
+ position: fixed;
+ top: 0; left: 525px; right: 0; bottom: 0;
+ background: #f5f5ff;
+ border-left: 1px solid #e5e5ee;
+ z-index: -1;
+}
+#jump_to, #jump_page {
+ background: white;
+ -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777;
+ -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px;
+ font: 10px Arial;
+ text-transform: uppercase;
+ cursor: pointer;
+ text-align: right;
+}
+#jump_to, #jump_wrapper {
+ position: fixed;
+ right: 0; top: 0;
+ padding: 5px 10px;
+}
+ #jump_wrapper {
+ padding: 0;
+ display: none;
+ }
+ #jump_to:hover #jump_wrapper {
+ display: block;
+ }
+ #jump_page {
+ padding: 5px 0 3px;
+ margin: 0 0 25px 25px;
+ }
+ #jump_page .source {
+ display: block;
+ padding: 5px 10px;
+ text-decoration: none;
+ border-top: 1px solid #eee;
+ }
+ #jump_page .source:hover {
+ background: #f5f5ff;
+ }
+ #jump_page .source:first-child {
+ }
+table td {
+ border: 0;
+ outline: 0;
+}
+ td.docs, th.docs {
+ max-width: 450px;
+ min-width: 450px;
+ min-height: 5px;
+ padding: 10px 25px 1px 50px;
+ overflow-x: hidden;
+ vertical-align: top;
+ text-align: left;
+ }
+ .docs pre {
+ margin: 15px 0 15px;
+ padding-left: 15px;
+ }
+ .docs p tt, .docs p code {
+ background: #f8f8ff;
+ border: 1px solid #dedede;
+ font-size: 12px;
+ padding: 0 0.2em;
+ }
+ .pilwrap {
+ position: relative;
+ }
+ .pilcrow {
+ font: 12px Arial;
+ text-decoration: none;
+ color: #454545;
+ position: absolute;
+ top: 3px; left: -20px;
+ padding: 1px 2px;
+ opacity: 0;
+ -webkit-transition: opacity 0.2s linear;
+ }
+ td.docs:hover .pilcrow {
+ opacity: 1;
+ }
+ td.code, th.code {
+ padding: 14px 15px 16px 25px;
+ width: 100%;
+ vertical-align: top;
+ background: #f5f5ff;
+ border-left: 1px solid #e5e5ee;
+ }
+ pre, tt, code {
+ font-size: 12px; line-height: 18px;
+ font-family: Monaco, Consolas, "Lucida Console", monospace;
+ margin: 0; padding: 0;
+ }
+
+
+/*---------------------- Syntax Highlighting -----------------------------*/
+td.linenos { background-color: #f0f0f0; padding-right: 10px; }
+span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
+body .hll { background-color: #ffffcc }
+body .c { color: #408080; font-style: italic } /* Comment */
+body .err { border: 1px solid #FF0000 } /* Error */
+body .k { color: #954121 } /* Keyword */
+body .o { color: #666666 } /* Operator */
+body .cm { color: #408080; font-style: italic } /* Comment.Multiline */
+body .cp { color: #BC7A00 } /* Comment.Preproc */
+body .c1 { color: #408080; font-style: italic } /* Comment.Single */
+body .cs { color: #408080; font-style: italic } /* Comment.Special */
+body .gd { color: #A00000 } /* Generic.Deleted */
+body .ge { font-style: italic } /* Generic.Emph */
+body .gr { color: #FF0000 } /* Generic.Error */
+body .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+body .gi { color: #00A000 } /* Generic.Inserted */
+body .go { color: #808080 } /* Generic.Output */
+body .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+body .gs { font-weight: bold } /* Generic.Strong */
+body .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+body .gt { color: #0040D0 } /* Generic.Traceback */
+body .kc { color: #954121 } /* Keyword.Constant */
+body .kd { color: #954121; font-weight: bold } /* Keyword.Declaration */
+body .kn { color: #954121; font-weight: bold } /* Keyword.Namespace */
+body .kp { color: #954121 } /* Keyword.Pseudo */
+body .kr { color: #954121; font-weight: bold } /* Keyword.Reserved */
+body .kt { color: #B00040 } /* Keyword.Type */
+body .m { color: #666666 } /* Literal.Number */
+body .s { color: #219161 } /* Literal.String */
+body .na { color: #7D9029 } /* Name.Attribute */
+body .nb { color: #954121 } /* Name.Builtin */
+body .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+body .no { color: #880000 } /* Name.Constant */
+body .nd { color: #AA22FF } /* Name.Decorator */
+body .ni { color: #999999; font-weight: bold } /* Name.Entity */
+body .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+body .nf { color: #0000FF } /* Name.Function */
+body .nl { color: #A0A000 } /* Name.Label */
+body .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+body .nt { color: #954121; font-weight: bold } /* Name.Tag */
+body .nv { color: #19469D } /* Name.Variable */
+body .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+body .w { color: #bbbbbb } /* Text.Whitespace */
+body .mf { color: #666666 } /* Literal.Number.Float */
+body .mh { color: #666666 } /* Literal.Number.Hex */
+body .mi { color: #666666 } /* Literal.Number.Integer */
+body .mo { color: #666666 } /* Literal.Number.Oct */
+body .sb { color: #219161 } /* Literal.String.Backtick */
+body .sc { color: #219161 } /* Literal.String.Char */
+body .sd { color: #219161; font-style: italic } /* Literal.String.Doc */
+body .s2 { color: #219161 } /* Literal.String.Double */
+body .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+body .sh { color: #219161 } /* Literal.String.Heredoc */
+body .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+body .sx { color: #954121 } /* Literal.String.Other */
+body .sr { color: #BB6688 } /* Literal.String.Regex */
+body .s1 { color: #219161 } /* Literal.String.Single */
+body .ss { color: #19469D } /* Literal.String.Symbol */
+body .bp { color: #954121 } /* Name.Builtin.Pseudo */
+body .vc { color: #19469D } /* Name.Variable.Class */
+body .vg { color: #19469D } /* Name.Variable.Global */
+body .vi { color: #19469D } /* Name.Variable.Instance */
+body .il { color: #666666 } /* Literal.Number.Integer.Long */
View
138 docs/gista.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html> <html> <head> <title>gista.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> gista.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">&#182;</a> </div> <h1>The Node Gist CLI Tool</h1>
+
+<p>A handy little tool that allows you to use Gist like a unix pro.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">Gist = </span><span class="nx">require</span> <span class="s1">&#39;node-gist&#39;</span>
+<span class="nv">nopt = </span><span class="nx">require</span> <span class="s1">&#39;nopt&#39;</span>
+<span class="nv">path = </span><span class="nx">require</span> <span class="s1">&#39;path&#39;</span>
+<span class="nv">fs = </span><span class="nx">require</span> <span class="s1">&#39;fs&#39;</span>
+<span class="nv">Task = </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;parallel&#39;</span><span class="p">).</span><span class="nx">Task</span>
+<span class="p">{</span> <span class="nx">exec</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;child_process&#39;</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">&#182;</a> </div> <p>HELP</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">help = </span><span class="s2">&quot;&quot;&quot;</span>
+<span class="s2">Create a Gist from a file or stdin using node-gist.</span>
+
+<span class="s2">gista -pd &quot;</span><span class="nx">My</span> <span class="nx">cool</span> <span class="nx">gist</span><span class="s2">&quot; [file.ext]</span>
+
+<span class="s2">Options:</span>
+<span class="s2"> -f, --fetch Fetch a gist by id or url</span>
+<span class="s2"> -p, --private Mark the gist private</span>
+<span class="s2"> -n, --name Manually set the file name</span>
+<span class="s2"> -d, --desc Add a description</span>
+<span class="s2"> -t, --type Manually set file extension</span>
+<span class="s2"> -u, --user Manually set Github username</span>
+<span class="s2"> -a, --token Manually set Github api token</span>
+<span class="s2"> -h, --help You looking at it</span>
+
+<span class="s2">&quot;&quot;&quot;</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">&#182;</a> </div> <p>Option parsing is done with <code>nopt</code> - a handy library sculpted by
+Isaac Schlueter</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">known_opts =</span>
+ <span class="nv">private: </span><span class="nb">Boolean</span>
+ <span class="nv">fetch: </span> <span class="nb">String</span>
+ <span class="nv">meta: </span> <span class="nb">Boolean</span>
+ <span class="nv">name: </span> <span class="nb">String</span>
+ <span class="nv">desc: </span> <span class="nb">String</span>
+ <span class="nv">type: </span> <span class="nb">String</span>
+ <span class="nv">token: </span> <span class="nb">String</span>
+ <span class="nv">user: </span> <span class="nb">String</span>
+ <span class="nv">help: </span> <span class="nb">Boolean</span>
+
+<span class="nv">short_opts =</span>
+ <span class="nv">f: </span><span class="s1">&#39;--fetch&#39;</span>
+ <span class="nv">p: </span><span class="p">[</span><span class="s1">&#39;--private&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#39;</span><span class="p">]</span>
+ <span class="nv">t: </span><span class="s1">&#39;--type&#39;</span>
+ <span class="nv">u: </span><span class="s1">&#39;--user&#39;</span>
+ <span class="nv">a: </span><span class="s1">&#39;--token&#39;</span>
+ <span class="nv">h: </span><span class="s1">&#39;--help&#39;</span>
+ <span class="nv">n: </span><span class="s1">&#39;--name&#39;</span>
+ <span class="nv">d: </span><span class="s1">&#39;--desc&#39;</span>
+
+<span class="nv">options = </span><span class="nx">nopt</span> <span class="nx">known_opts</span><span class="p">,</span> <span class="nx">short_opts</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">&#182;</a> </div> <p>Show the help?</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">help</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="nx">help</span>
+ <span class="k">return</span> <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">&#182;</a> </div> <p>Fetch mode? Fetch mode precedes gist creation.
+We parse out the id from the value given to us, then use
+<code>Gist#load</code> to fetch the files.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">fetch</span>
+ <span class="nv">id = </span><span class="nx">options</span><span class="p">.</span><span class="nx">fetch</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">).</span><span class="nx">pop</span><span class="p">()</span>
+ <span class="k">return</span> <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span><span class="p">()</span> <span class="nx">unless</span> <span class="nx">id</span>
+
+ <span class="nv">gist = </span><span class="k">new</span> <span class="nx">Gist</span>
+ <span class="nv">id: </span><span class="nx">id</span>
+
+ <span class="nx">gist</span><span class="p">.</span><span class="nx">load</span> <span class="nf">(error, meta) -&gt;</span>
+ <span class="nv">files = </span><span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span> <span class="nx">@data</span>
+ <span class="k">return</span> <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span><span class="p">()</span> <span class="k">if</span> <span class="nx">files</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">0</span>
+
+ <span class="nv">output = </span><span class="p">[]</span>
+
+ <span class="k">for</span> <span class="nx">filename</span> <span class="k">in</span> <span class="nx">files</span>
+ <span class="nv">content = </span><span class="nx">@data</span><span class="p">[</span><span class="nx">filename</span><span class="p">]</span>
+ <span class="nx">output</span><span class="p">.</span><span class="nx">push</span> <span class="nx">content</span>
+
+ <span class="nx">process</span><span class="p">.</span><span class="nx">stdout</span><span class="p">.</span><span class="nx">write</span> <span class="nx">output</span><span class="p">.</span><span class="nx">join</span> <span class="s1">&#39;\n----------\n&#39;</span>
+
+ <span class="k">return</span>
+
+<span class="nv">files = </span><span class="nx">options</span><span class="p">.</span><span class="nx">argv</span><span class="p">.</span><span class="nx">remain</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">&#182;</a> </div> <p>Are we reading from stdin, or reading from a list of files?</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">is_stdin = </span><span class="nx">options</span><span class="p">.</span><span class="nx">argv</span><span class="p">.</span><span class="nx">remain</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">0</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">&#182;</a> </div> <p>We need to exhaust all the cases where the github user and token
+could be stored.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">loadConfig = </span><span class="nf">(callback) -&gt;</span>
+ <span class="nv">options.user = </span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">GITHUB_USER</span> <span class="nx">unless</span> <span class="nx">options</span><span class="p">.</span><span class="nx">user</span>
+ <span class="nv">options.token = </span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">GITHUB_TOKEN</span> <span class="nx">unless</span> <span class="nx">options</span><span class="p">.</span><span class="nx">token</span>
+
+ <span class="k">return</span> <span class="nx">callback</span><span class="p">()</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">user</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">token</span>
+
+ <span class="nv">task = </span><span class="k">new</span> <span class="nx">Task</span>
+
+ <span class="nx">task</span><span class="p">.</span><span class="nx">add</span> <span class="s1">&#39;user&#39;</span><span class="p">,</span> <span class="p">[</span><span class="nx">exec</span><span class="p">,</span> <span class="s1">&#39;git config --global github.user&#39;</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">options</span><span class="p">.</span><span class="nx">user</span>
+ <span class="nx">task</span><span class="p">.</span><span class="nx">add</span> <span class="s1">&#39;token&#39;</span><span class="p">,</span> <span class="p">[</span><span class="nx">exec</span><span class="p">,</span> <span class="s1">&#39;git config --global github.token&#39;</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">options</span><span class="p">.</span><span class="nx">token</span>
+
+ <span class="nv">has_error = </span><span class="kc">null</span>
+
+ <span class="nx">task</span><span class="p">.</span><span class="nx">run</span> <span class="nf">(name, error, stdout) -&gt;</span>
+ <span class="k">if</span> <span class="nx">name</span> <span class="o">is</span> <span class="kc">null</span>
+ <span class="k">if</span> <span class="nx">has_error</span> <span class="o">or</span> <span class="nx">options</span><span class="p">.</span><span class="nx">user</span> <span class="o">is</span> <span class="kc">null</span> <span class="o">or</span> <span class="nx">options</span><span class="p">.</span><span class="nx">token</span> <span class="o">is</span> <span class="kc">null</span>
+ <span class="nv">options.user = options.token = </span><span class="kc">null</span>
+ <span class="k">return</span> <span class="nx">callback</span> <span class="nx">has_error</span>
+
+ <span class="k">return</span> <span class="nv">has_error = </span><span class="nx">error</span> <span class="k">if</span> <span class="nx">error</span>
+
+ <span class="nx">options</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nx">stdout</span><span class="p">.</span><span class="nx">trim</span><span class="p">()</span> <span class="o">or</span> <span class="kc">null</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">&#182;</a> </div> <p>Load the user and token then either load the stdin data
+or parse out the files.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">loadConfig</span> <span class="nf">(error) -&gt;</span>
+ <span class="k">throw</span> <span class="nx">error</span> <span class="k">if</span> <span class="nx">error</span>
+
+ <span class="k">return</span> <span class="nx">fromStdin</span><span class="p">()</span> <span class="k">if</span> <span class="nx">is_stdin</span>
+ <span class="nx">fromFiles</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">&#182;</a> </div> <p>Collect data on stdin as it comes in, buffer it, and then pass it
+on to <code>createGist</code>.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">fromStdin = </span><span class="o">-&gt;</span>
+ <span class="nv">data = </span><span class="s1">&#39;&#39;</span>
+ <span class="nx">process</span><span class="p">.</span><span class="nx">stdin</span><span class="p">.</span><span class="nx">resume</span><span class="p">()</span>
+ <span class="nx">process</span><span class="p">.</span><span class="nx">stdin</span><span class="p">.</span><span class="nx">setEncoding</span> <span class="s1">&#39;utf8&#39;</span>
+ <span class="nx">process</span><span class="p">.</span><span class="nx">stdin</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;data&#39;</span><span class="p">,</span> <span class="nf">(chunk) -&gt;</span>
+ <span class="nx">data</span> <span class="o">+=</span> <span class="nx">chunk</span>
+ <span class="nx">process</span><span class="p">.</span><span class="nx">stdin</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;end&#39;</span><span class="p">,</span> <span class="o">-&gt;</span>
+ <span class="nx">createGist</span> <span class="p">[</span><span class="nv">name: </span><span class="nx">options</span><span class="p">.</span><span class="nx">name</span> <span class="o">or</span> <span class="kc">null</span><span class="p">,</span> <span class="nv">content: </span><span class="nx">data</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">&#182;</a> </div> <p>Iterate over every file and grab the contents, ready to pass
+onto <code>createGist</code>.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">fromFiles = </span><span class="o">-&gt;</span>
+ <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s1">&#39;Over 10 files.&#39;</span> <span class="k">if</span> <span class="nx">files</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">10</span>
+
+ <span class="nv">task = </span><span class="k">new</span> <span class="nx">Task</span>
+ <span class="nv">gist_files = </span><span class="p">[]</span>
+
+ <span class="k">for</span> <span class="nx">file</span> <span class="k">in</span> <span class="nx">files</span>
+ <span class="nx">task</span><span class="p">.</span><span class="nx">add</span> <span class="nx">path</span><span class="p">.</span><span class="nx">basename</span><span class="p">(</span><span class="nx">file</span><span class="p">),</span> <span class="p">[</span><span class="nx">fs</span><span class="p">.</span><span class="nx">readFile</span><span class="p">,</span> <span class="nx">file</span><span class="p">,</span> <span class="s1">&#39;utf8&#39;</span><span class="p">]</span>
+
+ <span class="nx">task</span><span class="p">.</span><span class="nx">run</span> <span class="nf">(name, error, content) -&gt;</span>
+ <span class="k">if</span> <span class="nx">name</span> <span class="o">is</span> <span class="kc">null</span>
+ <span class="k">return</span> <span class="nx">createGist</span> <span class="nx">gist_files</span>
+
+ <span class="k">throw</span> <span class="nx">error</span> <span class="k">if</span> <span class="nx">error</span>
+
+ <span class="nx">gist_files</span><span class="p">.</span><span class="nx">push</span>
+ <span class="nv">name: </span> <span class="nx">name</span>
+ <span class="nv">content: </span><span class="nx">content</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">&#182;</a> </div> <p>Now that we have all the content we need, we can now create the gist
+and post back the link.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">createGist = </span><span class="nf">(files) -&gt;</span>
+ <span class="nv">gist = </span><span class="k">new</span> <span class="nx">Gist</span>
+ <span class="nv">private: </span> <span class="nx">options</span><span class="p">.</span><span class="nx">private</span> <span class="o">or</span> <span class="kc">no</span>
+ <span class="nv">user: </span> <span class="nx">options</span><span class="p">.</span><span class="nx">user</span>
+ <span class="nv">token: </span> <span class="nx">options</span><span class="p">.</span><span class="nx">token</span>
+ <span class="nv">description: </span><span class="nx">options</span><span class="p">.</span><span class="nx">desc</span>
+
+ <span class="nv">type = </span><span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">type</span> <span class="k">then</span> <span class="s1">&#39;.&#39;</span> <span class="o">+</span> <span class="nx">options</span><span class="p">.</span><span class="nx">type</span> <span class="o">or</span> <span class="kc">null</span>
+
+ <span class="nx">gist</span><span class="p">.</span><span class="nx">addFile</span> <span class="nx">file</span><span class="p">.</span><span class="nx">name</span><span class="p">,</span> <span class="nx">file</span><span class="p">.</span><span class="nx">content</span><span class="p">,</span> <span class="nx">type</span> <span class="k">for</span> <span class="nx">file</span> <span class="k">in</span> <span class="nx">files</span>
+
+ <span class="nx">gist</span><span class="p">.</span><span class="nx">save</span> <span class="nf">(error) -&gt;</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="s2">&quot;https://gist.github.com/#{@id}&quot;</span>
+
+</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
View
6 package.json
@@ -1,15 +1,15 @@
{
"name": "gista",
"description": "Simple cli utility for using gist.github.com like a unix pro.",
- "version": "0.2.0",
+ "version": "0.0.4",
"author": "Tim Smart",
"repository": {
"type": "git",
"url": "http://github.com/Tim-Smart/gista.git"
},
- "engine": [ "node 0.4.x" ],
+ "engine": [ "node >=0.4.4" ],
"dependencies": {
- "node-gist": "0.2.x",
+ "node-gist": ">=0.0.2",
"nopt": ">=1.0.4",
"parallel": ">=0.2.1"
},
View
2  src/gista.coffee
@@ -2,7 +2,7 @@
# ======================
#
# A handy little tool that allows you to use Gist like a unix pro.
-gist = require 'node-gist'
+Gist = require 'node-gist'
nopt = require 'nopt'
path = require 'path'
fs = require 'fs'
Please sign in to comment.
Something went wrong with that request. Please try again.