jist 1.3.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +12 -0
- data/bin/jist +22 -8
- data/lib/jist.rb +30 -25
- data/spec/clipboard_spec.rb +8 -2
- data/spec/shorten_spec.rb +1 -1
- metadata +11 -11
data/README.md
CHANGED
@@ -28,6 +28,12 @@ $ jist a.rb
|
|
28
28
|
https://gist.github.com/0d07bc98c139810a4075
|
29
29
|
```
|
30
30
|
|
31
|
+
Upload multiple files :
|
32
|
+
```shell
|
33
|
+
$ jist a b c
|
34
|
+
$ jist *.rb
|
35
|
+
```
|
36
|
+
|
31
37
|
By default it reads from STDIN, and you can set a filename with `-f`.
|
32
38
|
|
33
39
|
```shell
|
@@ -62,6 +68,12 @@ $ jist -c <a.rb
|
|
62
68
|
https://gist.github.com/7db51bb5f4f35c480fc8
|
63
69
|
```
|
64
70
|
|
71
|
+
If you'd like to copy the resulting embeddable URL to your clipboard, use `--copy-js`.
|
72
|
+
|
73
|
+
```shell
|
74
|
+
$ jist --copy-js <a.rb
|
75
|
+
<script src="https://gist.github.com/7db51bb5f4f35c480fc8"></script>
|
76
|
+
```
|
65
77
|
And you can just ask jist to open a browser window directly with `-o`.
|
66
78
|
|
67
79
|
```shell
|
data/bin/jist
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'optparse'
|
4
|
-
|
5
|
-
require 'jist'
|
4
|
+
require File.expand_path('../../lib/jist', __FILE__)
|
6
5
|
|
7
6
|
# For the holdings of options.
|
8
7
|
options = {}
|
@@ -33,14 +32,15 @@ If you would like to shorten the resulting gist URL, use the -s flag. This will
|
|
33
32
|
use GitHub's URL shortener, git.io.
|
34
33
|
|
35
34
|
To copy the resulting URL to your clipboard you can use the -c option, or to just
|
36
|
-
open it directly in your browser, use -o.
|
37
|
-
your shell's rc file to configure this
|
35
|
+
open it directly in your browser, use -o. Using the -e option will copy the embeddable
|
36
|
+
URL to the clipboard. You can add `alias jist='jist -c'` to your shell's rc file to configure this
|
37
|
+
behaviour by default.
|
38
38
|
|
39
39
|
Instead of creating a new jist, you can update an existing one by passing its ID
|
40
40
|
or URL with "-u". For this to work, you must be logged in, and have created the
|
41
41
|
original gist with the same GitHub account.
|
42
42
|
|
43
|
-
Usage: #{executable_name} [-o|-c] [-p] [-s] [-d DESC] [-t TOKEN|-a] [-u URL] [-P] [-f NAME]* FILE*
|
43
|
+
Usage: #{executable_name} [-o|-c|-e] [-p] [-s] [-d DESC] [-t TOKEN|-a] [-u URL] [-P] [-f NAME]* FILE*
|
44
44
|
#{executable_name} --login
|
45
45
|
|
46
46
|
EOS
|
@@ -82,6 +82,10 @@ Usage: #{executable_name} [-o|-c] [-p] [-s] [-d DESC] [-t TOKEN|-a] [-u URL] [-P
|
|
82
82
|
opts.on("-c", "--copy", "Copy the resulting URL to the clipboard") do
|
83
83
|
options[:copy] = true
|
84
84
|
end
|
85
|
+
opts.on("-e", "--embed", "Copy the embed code for the gist to the clipboard") do
|
86
|
+
options[:embed] = true
|
87
|
+
options[:copy] = true
|
88
|
+
end
|
85
89
|
|
86
90
|
opts.on("-o", "--open", "Open the resulting URL in a browser") do
|
87
91
|
options[:open] = true
|
@@ -105,11 +109,21 @@ end
|
|
105
109
|
opts.parse!
|
106
110
|
|
107
111
|
begin
|
112
|
+
options[:output] = if options[:embed] && options[:shorten]
|
113
|
+
raise Jist::Error, "--embed does not make sense with --shorten"
|
114
|
+
elsif options[:embed]
|
115
|
+
:javascript
|
116
|
+
elsif options[:shorten]
|
117
|
+
:short_url
|
118
|
+
else
|
119
|
+
:html_url
|
120
|
+
end
|
121
|
+
|
108
122
|
if options[:paste]
|
109
|
-
puts Jist.gist(Jist.paste, options)
|
123
|
+
puts Jist.gist(Jist.paste, options)
|
110
124
|
elsif ARGV.size == 0
|
111
125
|
$stderr.puts "(type a gist. <ctrl-c> to cancel, <ctrl-d> when done)" if $stdin.tty?
|
112
|
-
puts Jist.gist(ARGF.read, options)
|
126
|
+
puts Jist.gist(ARGF.read, options)
|
113
127
|
else
|
114
128
|
files = {}
|
115
129
|
ARGV.zip(filenames).each do |(file, name)|
|
@@ -120,7 +134,7 @@ begin
|
|
120
134
|
end
|
121
135
|
end
|
122
136
|
|
123
|
-
puts Jist.multi_gist(files, options)
|
137
|
+
puts Jist.multi_gist(files, options)
|
124
138
|
end
|
125
139
|
rescue Jist::Error => e
|
126
140
|
puts "Error: #{e.message}"
|
data/lib/jist.rb
CHANGED
@@ -7,7 +7,7 @@ require 'uri'
|
|
7
7
|
module Jist
|
8
8
|
extend self
|
9
9
|
|
10
|
-
VERSION = '1.
|
10
|
+
VERSION = '1.4.0'
|
11
11
|
|
12
12
|
# A list of clipboard commands with copy and paste support.
|
13
13
|
CLIPBOARD_COMMANDS = {
|
@@ -21,26 +21,18 @@ module Jist
|
|
21
21
|
GIT_IO_URL = URI("http://git.io")
|
22
22
|
|
23
23
|
# Exception tag for errors raised while gisting.
|
24
|
-
module Error;
|
24
|
+
module Error;
|
25
|
+
def self.exception(*args)
|
26
|
+
RuntimeError.new(*args).extend(self)
|
27
|
+
end
|
28
|
+
end
|
25
29
|
class ClipboardError < RuntimeError; include Error end
|
26
30
|
|
27
31
|
# Upload a gist to https://gist.github.com
|
28
32
|
#
|
29
33
|
# @param [String] content the code you'd like to gist
|
30
|
-
# @param [Hash] options more detailed options
|
31
|
-
#
|
32
|
-
# @option options [String] :description the description
|
33
|
-
# @option options [String] :filename ('a.rb') the filename
|
34
|
-
# @option options [Boolean] :public (false) is this gist public
|
35
|
-
# @option options [Boolean] :anonymous (false) is this gist anonymous
|
36
|
-
# @option options [Boolean] :shorten (false) Shorten the resulting URL using git.io.
|
37
|
-
# @option options [String] :access_token (`File.read("~/.jist")`) The OAuth2 access token.
|
38
|
-
# @option options [String] :update the URL or id of a gist to update
|
39
|
-
# @option options [Boolean] :copy (false) Copy resulting URL to clipboard, if successful.
|
40
|
-
# @option options [Boolean] :open (false) Open the resulting URL in a browser.
|
41
|
-
#
|
42
|
-
# @return [Hash] the decoded JSON response from the server
|
43
|
-
# @raise [Jist::Error] if something went wrong
|
34
|
+
# @param [Hash] options more detailed options, see
|
35
|
+
# the documentation for {multi_gist}
|
44
36
|
#
|
45
37
|
# @see http://developer.github.com/v3/gists/
|
46
38
|
def gist(content, options = {})
|
@@ -56,13 +48,17 @@ module Jist
|
|
56
48
|
# @option options [String] :description the description
|
57
49
|
# @option options [Boolean] :public (false) is this gist public
|
58
50
|
# @option options [Boolean] :anonymous (false) is this gist anonymous
|
59
|
-
# @option options [Boolean] :shorten (false) Shorten the resulting URL using git.io.
|
60
51
|
# @option options [String] :access_token (`File.read("~/.jist")`) The OAuth2 access token.
|
61
52
|
# @option options [String] :update the URL or id of a gist to update
|
62
53
|
# @option options [Boolean] :copy (false) Copy resulting URL to clipboard, if successful.
|
63
54
|
# @option options [Boolean] :open (false) Open the resulting URL in a browser.
|
55
|
+
# @option options [Symbol] :output (:all) The type of return value you'd like:
|
56
|
+
# :html_url gives a String containing the url to the gist in a browser
|
57
|
+
# :short_url gives a String contianing a git.io url that redirects to html_url
|
58
|
+
# :javascript gives a String containing a script tag suitable for embedding the gist
|
59
|
+
# :all gives a Hash containing the parsed json response from the server
|
64
60
|
#
|
65
|
-
# @return [Hash] the
|
61
|
+
# @return [String, Hash] the return value as configured by options[:output]
|
66
62
|
# @raise [Jist::Error] if something went wrong
|
67
63
|
#
|
68
64
|
# @see http://developer.github.com/v3/gists/
|
@@ -207,18 +203,27 @@ module Jist
|
|
207
203
|
|
208
204
|
# Called after an HTTP response to gist to perform post-processing.
|
209
205
|
#
|
210
|
-
# @param [String] body the
|
211
|
-
# @param [Hash] options
|
212
|
-
#
|
213
|
-
# @return [Hash] the parsed JSON response from the server
|
206
|
+
# @param [String] body the text body from the github api
|
207
|
+
# @param [Hash] options more detailed options, see
|
208
|
+
# the documentation for {multi_gist}
|
214
209
|
def on_success(body, options={})
|
215
210
|
json = JSON.parse(body)
|
216
211
|
|
217
|
-
|
218
|
-
|
212
|
+
output = case options[:output]
|
213
|
+
when :javascript
|
214
|
+
%Q{<script src="#{json['html_url']}.js"></script>}
|
215
|
+
when :html_url
|
216
|
+
json['html_url']
|
217
|
+
when :short_url
|
218
|
+
shorten(json['html_url'])
|
219
|
+
else
|
220
|
+
json
|
221
|
+
end
|
222
|
+
|
223
|
+
Jist.copy(output.to_s) if options[:copy]
|
219
224
|
Jist.open(json['html_url']) if options[:open]
|
220
225
|
|
221
|
-
|
226
|
+
output
|
222
227
|
end
|
223
228
|
|
224
229
|
# Copy a string to the clipboard.
|
data/spec/clipboard_spec.rb
CHANGED
@@ -9,10 +9,10 @@ describe '...' do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def ask_for_copy
|
12
|
-
Jist.on_success({'html_url' => @bobo_url}.to_json, :copy => true )
|
12
|
+
Jist.on_success({'html_url' => @bobo_url}.to_json, :copy => true, :output => :html_url)
|
13
13
|
end
|
14
14
|
def jist_but_dont_ask_for_copy
|
15
|
-
Jist.on_success({'html_url' => 'http://example.com/'}.to_json)
|
15
|
+
Jist.on_success({'html_url' => 'http://example.com/'}.to_json, :output => :html_url)
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should try to copy the url when the clipboard option is passed' do
|
@@ -20,6 +20,12 @@ describe '...' do
|
|
20
20
|
ask_for_copy
|
21
21
|
end
|
22
22
|
|
23
|
+
it 'should try to copy the embed url when the clipboard-js option is passed' do
|
24
|
+
js_link = %Q{<script src="#{@bobo_url}.js"></script>}
|
25
|
+
Jist.should_receive(:copy).with(js_link)
|
26
|
+
Jist.on_success({'html_url' => @bobo_url}.to_json, :copy => true, :output => :javascript)
|
27
|
+
end
|
28
|
+
|
23
29
|
it "should not copy when not asked to" do
|
24
30
|
Jist.should_not_receive(:copy).with(@bobo_url)
|
25
31
|
jist_but_dont_ask_for_copy
|
data/spec/shorten_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe '...' do
|
|
5
5
|
end
|
6
6
|
|
7
7
|
it "should return a shortened version of the URL" do
|
8
|
-
Jist.gist("Test gist", :
|
8
|
+
Jist.gist("Test gist", :output => :short_url).should == "http://git.io/XXXXXX"
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
metadata
CHANGED
@@ -1,24 +1,25 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.0
|
4
5
|
prerelease:
|
5
|
-
version: 1.3.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Conrad Irwin
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
15
|
+
name: json
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0'
|
22
|
+
type: :runtime
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
none: false
|
@@ -26,15 +27,15 @@ dependencies:
|
|
26
27
|
- - ! '>='
|
27
28
|
- !ruby/object:Gem::Version
|
28
29
|
version: '0'
|
29
|
-
name: json
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
|
31
|
+
name: rake
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: '0'
|
38
|
+
type: :development
|
38
39
|
prerelease: false
|
39
40
|
version_requirements: !ruby/object:Gem::Requirement
|
40
41
|
none: false
|
@@ -42,15 +43,15 @@ dependencies:
|
|
42
43
|
- - ! '>='
|
43
44
|
- !ruby/object:Gem::Version
|
44
45
|
version: '0'
|
45
|
-
name: rake
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
|
47
|
+
name: rspec
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
51
|
- - ! '>='
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
|
+
type: :development
|
54
55
|
prerelease: false
|
55
56
|
version_requirements: !ruby/object:Gem::Requirement
|
56
57
|
none: false
|
@@ -58,15 +59,15 @@ dependencies:
|
|
58
59
|
- - ! '>='
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '0'
|
61
|
-
name: rspec
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
|
63
|
+
name: webmock
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
67
|
- - ! '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
|
+
type: :development
|
70
71
|
prerelease: false
|
71
72
|
version_requirements: !ruby/object:Gem::Requirement
|
72
73
|
none: false
|
@@ -74,7 +75,6 @@ dependencies:
|
|
74
75
|
- - ! '>='
|
75
76
|
- !ruby/object:Gem::Version
|
76
77
|
version: '0'
|
77
|
-
name: webmock
|
78
78
|
description: Provides a single function (Jist.gist) that uploads a gist.
|
79
79
|
email: conrad.irwin@gmail.com
|
80
80
|
executables:
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
118
|
rubyforge_project:
|
119
|
-
rubygems_version: 1.8.
|
119
|
+
rubygems_version: 1.8.23
|
120
120
|
signing_key:
|
121
121
|
specification_version: 3
|
122
122
|
summary: Just allows you to upload gists
|