gist 4.3.0 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/bin/gist +3 -3
- data/gist.gemspec +4 -3
- data/lib/gist.rb +59 -14
- data/spec/auth_token_file_spec.rb +61 -0
- data/spec/ghe_spec.rb +1 -1
- data/spec/gist_spec.rb +4 -4
- data/spec/spec_helper.rb +7 -3
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a00795d0cd699dec7993e7b371e70dc3387c7a91
|
4
|
+
data.tar.gz: f8dd93ec358f2193f5764f4bb567b3189d76cfdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 814b45808c5aea3d9d5d35117c706f38d956f96f20c394bcb28b68fd331fed0d8ba709bafc5c47aad90362e198abb14d96f7ebf36fa2ad0a12496ba838f0bf93
|
7
|
+
data.tar.gz: 14b0f241463232cfc679fac45a6e932031b21d4fdc94c56dc72228eb56d4c4a280fd2558e2b09f90ec28d8666d0361581840a26edf3cbe899928466943f43768
|
data/README.md
CHANGED
@@ -50,7 +50,8 @@ upload content to https://gist.github.com/.
|
|
50
50
|
|
51
51
|
You can update existing gists with `-u`:
|
52
52
|
|
53
|
-
gist
|
53
|
+
gist -u GIST_ID FILE_NAME
|
54
|
+
gist -u 42f2c239d2eb57299408 test.txt
|
54
55
|
|
55
56
|
If you'd like to copy the resulting URL to your clipboard, use `-c`.
|
56
57
|
|
@@ -84,7 +85,7 @@ an OAuth2 token (with the "gist" permission).
|
|
84
85
|
2-factor auth code:
|
85
86
|
Success! https://github.com/settings/applications
|
86
87
|
|
87
|
-
You can read the 2-factor auth code from an sms or the
|
88
|
+
You can read the 2-factor auth code from an sms or the authentication app,
|
88
89
|
depending on how you [set your account up](https://github.com/settings/admin).
|
89
90
|
|
90
91
|
Note: 2-factor authentication
|
data/bin/gist
CHANGED
@@ -106,7 +106,7 @@ Usage: #{executable_name} [-o|-c|-e] [-p] [-s] [-R] [-d DESC] [-a] [-u URL] [-P]
|
|
106
106
|
options[:paste] = true
|
107
107
|
end
|
108
108
|
|
109
|
-
opts.on("-R", "--raw", "
|
109
|
+
opts.on("-R", "--raw", "Display raw URL of the new gist") do
|
110
110
|
options[:raw] = true
|
111
111
|
end
|
112
112
|
|
@@ -145,9 +145,9 @@ begin
|
|
145
145
|
|
146
146
|
if options.key? :list
|
147
147
|
if options[:list]
|
148
|
-
Gist.
|
148
|
+
Gist.list_all_gists(options[:list])
|
149
149
|
else
|
150
|
-
Gist.
|
150
|
+
Gist.list_all_gists
|
151
151
|
end
|
152
152
|
exit
|
153
153
|
end
|
data/gist.gemspec
CHANGED
@@ -14,7 +14,8 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.executables << 'gist'
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
s.add_development_dependency 'rake'
|
18
|
+
s.add_development_dependency 'ronn'
|
19
|
+
s.add_development_dependency 'webmock'
|
20
|
+
s.add_development_dependency 'rspec', '>3'
|
20
21
|
end
|
data/lib/gist.rb
CHANGED
@@ -12,12 +12,12 @@ end
|
|
12
12
|
module Gist
|
13
13
|
extend self
|
14
14
|
|
15
|
-
VERSION = '4.
|
15
|
+
VERSION = '4.4.0'
|
16
16
|
|
17
17
|
# A list of clipboard commands with copy and paste support.
|
18
18
|
CLIPBOARD_COMMANDS = {
|
19
19
|
'xclip' => 'xclip -o',
|
20
|
-
'xsel -i'
|
20
|
+
'xsel -i' => 'xsel -o',
|
21
21
|
'pbcopy' => 'pbpaste',
|
22
22
|
'putclip' => 'getclip'
|
23
23
|
}
|
@@ -40,11 +40,32 @@ module Gist
|
|
40
40
|
end
|
41
41
|
class ClipboardError < RuntimeError; include Error end
|
42
42
|
|
43
|
+
# helper module for authentication token actions
|
44
|
+
module AuthTokenFile
|
45
|
+
def self.filename
|
46
|
+
if ENV.key?(URL_ENV_NAME)
|
47
|
+
File.expand_path "~/.gist.#{ENV[URL_ENV_NAME].gsub(/[^a-z.]/, '')}"
|
48
|
+
else
|
49
|
+
File.expand_path "~/.gist"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.read
|
54
|
+
File.read(filename).chomp
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.write(token)
|
58
|
+
File.open(filename, 'w', 0600) do |f|
|
59
|
+
f.write token
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
43
64
|
# auth token for authentication
|
44
65
|
#
|
45
66
|
# @return [String] string value of access token or `nil`, if not found
|
46
67
|
def auth_token
|
47
|
-
@token ||=
|
68
|
+
@token ||= AuthTokenFile.read rescue nil
|
48
69
|
end
|
49
70
|
|
50
71
|
# Upload a gist to https://gist.github.com
|
@@ -160,6 +181,40 @@ module Gist
|
|
160
181
|
end
|
161
182
|
end
|
162
183
|
|
184
|
+
def list_all_gists(user = "")
|
185
|
+
url = "#{base_path}"
|
186
|
+
|
187
|
+
if user == ""
|
188
|
+
access_token = auth_token()
|
189
|
+
if access_token.to_s != ''
|
190
|
+
url << "/gists?access_token=" << CGI.escape(access_token)
|
191
|
+
get_gist_pages(url)
|
192
|
+
else
|
193
|
+
raise Error, "Not authenticated. Use 'gist --login' to login or 'gist -l username' to view public gists."
|
194
|
+
end
|
195
|
+
|
196
|
+
else
|
197
|
+
url << "/users/#{user}/gists"
|
198
|
+
get_gist_pages(url)
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
def get_gist_pages(url)
|
204
|
+
|
205
|
+
request = Net::HTTP::Get.new(url)
|
206
|
+
response = http(api_url, request)
|
207
|
+
pretty_gist(response)
|
208
|
+
|
209
|
+
link_header = response.header['link']
|
210
|
+
|
211
|
+
if link_header
|
212
|
+
links = Hash[ link_header.gsub(/(<|>|")/, "").split(',').map { |link| link.split('; rel=') } ].invert
|
213
|
+
get_gist_pages(links['next']) if links['next']
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
163
218
|
# return prettified string result of response body for all gists
|
164
219
|
#
|
165
220
|
# @params [Net::HTTPResponse] response
|
@@ -258,9 +313,7 @@ module Gist
|
|
258
313
|
end
|
259
314
|
|
260
315
|
if Net::HTTPCreated === response
|
261
|
-
|
262
|
-
f.write JSON.parse(response.body)['token']
|
263
|
-
end
|
316
|
+
AuthTokenFile.write JSON.parse(response.body)['token']
|
264
317
|
puts "Success! #{ENV[URL_ENV_NAME] || "https://github.com/"}settings/applications"
|
265
318
|
return
|
266
319
|
elsif Net::HTTPUnauthorized === response
|
@@ -441,14 +494,6 @@ Could not find copy command, tried:
|
|
441
494
|
ENV.key?(URL_ENV_NAME) ? URI(ENV[URL_ENV_NAME]) : GITHUB_API_URL
|
442
495
|
end
|
443
496
|
|
444
|
-
def auth_token_file
|
445
|
-
if ENV.key?(URL_ENV_NAME)
|
446
|
-
File.expand_path "~/.gist.#{ENV[URL_ENV_NAME].gsub(/[^a-z.]/, '')}"
|
447
|
-
else
|
448
|
-
File.expand_path "~/.gist"
|
449
|
-
end
|
450
|
-
end
|
451
|
-
|
452
497
|
def legacy_private_gister?
|
453
498
|
return unless which('git')
|
454
499
|
`git config --global gist.private` =~ /\Ayes|1|true|on\z/i
|
@@ -0,0 +1,61 @@
|
|
1
|
+
describe Gist::AuthTokenFile do
|
2
|
+
subject { Gist::AuthTokenFile }
|
3
|
+
|
4
|
+
before(:each) do
|
5
|
+
stub_const("Gist::URL_ENV_NAME", "STUBBED_GITHUB_URL")
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "::filename" do
|
9
|
+
let(:filename) { double() }
|
10
|
+
|
11
|
+
context "with default GITHUB_URL" do
|
12
|
+
it "is ~/.gist" do
|
13
|
+
File.should_receive(:expand_path).with("~/.gist").and_return(filename)
|
14
|
+
subject.filename.should be filename
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with custom GITHUB_URL" do
|
19
|
+
before do
|
20
|
+
ENV[Gist::URL_ENV_NAME] = github_url
|
21
|
+
end
|
22
|
+
let(:github_url) { "gh.custom.org" }
|
23
|
+
|
24
|
+
it "is ~/.gist.{custom_github_url}" do
|
25
|
+
File.should_receive(:expand_path).with("~/.gist.#{github_url}").and_return(filename)
|
26
|
+
subject.filename.should be filename
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "::read" do
|
33
|
+
let(:token) { "auth_token" }
|
34
|
+
|
35
|
+
it "reads file contents" do
|
36
|
+
File.should_receive(:read).and_return(token)
|
37
|
+
subject.read.should eq token
|
38
|
+
end
|
39
|
+
|
40
|
+
it "chomps file contents" do
|
41
|
+
File.should_receive(:read).and_return(token + "\n")
|
42
|
+
subject.read.should eq token
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "::write" do
|
47
|
+
let(:token) { double() }
|
48
|
+
let(:filename) { double() }
|
49
|
+
let(:token_file) { double() }
|
50
|
+
|
51
|
+
before do
|
52
|
+
subject.stub(:filename) { filename }
|
53
|
+
end
|
54
|
+
|
55
|
+
it "writes token to file" do
|
56
|
+
File.should_receive(:open).with(filename, 'w', 0600).and_yield(token_file)
|
57
|
+
token_file.should_receive(:write).with(token)
|
58
|
+
subject.write(token)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/spec/ghe_spec.rb
CHANGED
@@ -63,7 +63,7 @@ describe '...' do
|
|
63
63
|
|
64
64
|
it "uses them" do
|
65
65
|
$stdin = StringIO.new "#{MOCK_USER}_wrong\n#{MOCK_PASSWORD}_wrong\n"
|
66
|
-
Gist.login! username
|
66
|
+
Gist.login! :username => MOCK_USER, :password => MOCK_PASSWORD
|
67
67
|
|
68
68
|
assert_requested(:post, /#{MOCK_AUTHZ_GITHUB_URL}authorizations/)
|
69
69
|
end
|
data/spec/gist_spec.rb
CHANGED
@@ -2,21 +2,21 @@ describe Gist do
|
|
2
2
|
|
3
3
|
describe "should_be_public?" do
|
4
4
|
it "should return false if -p is specified" do
|
5
|
-
Gist.should_be_public?(private
|
5
|
+
Gist.should_be_public?(:private => true).should be_falsy
|
6
6
|
end
|
7
7
|
|
8
8
|
it "should return false if legacy_private_gister?" do
|
9
9
|
Gist.should_receive(:legacy_private_gister?).and_return(true)
|
10
|
-
Gist.should_be_public?.should
|
10
|
+
Gist.should_be_public?.should be_falsy
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should return true if --no-private is specified" do
|
14
14
|
Gist.stub(:legacy_private_gister?).and_return(true)
|
15
|
-
Gist.should_be_public?(private
|
15
|
+
Gist.should_be_public?(:private => false).should be_truthy
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should return true by default" do
|
19
|
-
Gist.should_be_public?.should
|
19
|
+
Gist.should_be_public?.should be_truthy
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
data/spec/spec_helper.rb
CHANGED
@@ -5,11 +5,15 @@
|
|
5
5
|
#
|
6
6
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
7
|
RSpec.configure do |config|
|
8
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
8
|
config.run_all_when_everything_filtered = true
|
10
9
|
config.filter_run :focus
|
10
|
+
config.mock_with :rspec do |mocks|
|
11
|
+
mocks.syntax = :should
|
12
|
+
end
|
13
|
+
config.expect_with :rspec do |expectations|
|
14
|
+
expectations.syntax = :should
|
15
|
+
end
|
11
16
|
end
|
12
17
|
|
13
18
|
require 'webmock/rspec'
|
14
|
-
|
15
|
-
|
19
|
+
require 'gist'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Conrad Irwin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-06-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: ronn
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
@@ -54,19 +54,19 @@ dependencies:
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: rspec
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - "
|
60
|
+
- - ">"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '3'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - "
|
67
|
+
- - ">"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '3'
|
70
70
|
description: Provides a single function (Gist.gist) that uploads a gist.
|
71
71
|
email:
|
72
72
|
- conrad.irwin@gmail.com
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- build/gist.1
|
88
88
|
- gist.gemspec
|
89
89
|
- lib/gist.rb
|
90
|
+
- spec/auth_token_file_spec.rb
|
90
91
|
- spec/clipboard_spec.rb
|
91
92
|
- spec/ghe_spec.rb
|
92
93
|
- spec/gist_spec.rb
|
@@ -115,9 +116,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
116
|
version: '0'
|
116
117
|
requirements: []
|
117
118
|
rubyforge_project:
|
118
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.4.5
|
119
120
|
signing_key:
|
120
121
|
specification_version: 4
|
121
122
|
summary: Just allows you to upload gists
|
122
123
|
test_files: []
|
123
|
-
has_rdoc:
|