mikedamage-gistr 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +19 -0
- data/VERSION.yml +4 -0
- data/bin/gistr.rb +25 -0
- data/lib/gist.rb +24 -0
- data/lib/gistr.rb +60 -0
- data/test/gistr_test.rb +7 -0
- data/test/test_helper.rb +10 -0
- metadata +60 -0
data/README.textile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
h1. Gistr
|
2
|
+
|
3
|
+
_The *other* Ruby command line gister_
|
4
|
+
|
5
|
+
by Mike Green
|
6
|
+
|
7
|
+
h2. Summary
|
8
|
+
|
9
|
+
I decided to create Gistr after using the pretty schnazzy "Snipplr":http://snipplr.com command line client. The existing "gist.rb":http://github.com/defunkt/gist/tree is cool and I've relied on it as a blueprint for Gistr, but I wanted to include some extra functionality based on the Snipplr gem:
|
10
|
+
|
11
|
+
* Ability to list your gists, along with descriptions
|
12
|
+
* Download a gist to file, STDOUT, or the clipboard
|
13
|
+
* Create a new public/private gist from clipboard data
|
14
|
+
* Open/edit gists in your editor of choice and transparently update them when you save.
|
15
|
+
* Wrap the whole thing up as a Rubygem for easy installation
|
16
|
+
|
17
|
+
h2. Usage
|
18
|
+
|
19
|
+
Coming soon
|
data/VERSION.yml
ADDED
data/bin/gistr.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'optparse'
|
3
|
+
require File.join(File.dirname(__FILE__), '../lib/gistr')
|
4
|
+
|
5
|
+
SUBCOMMANDS = %w(list new get)
|
6
|
+
opts = OptionParser.new do |opt|
|
7
|
+
opt.banner = <<EOF
|
8
|
+
Gistr
|
9
|
+
command line gist client for os x
|
10
|
+
-------------------------------------
|
11
|
+
Usage: gistr [-chvp] action [INPUT]
|
12
|
+
|
13
|
+
Commands:
|
14
|
+
get GIST_ID - Gets specified Gist
|
15
|
+
|
16
|
+
Options:
|
17
|
+
EOF
|
18
|
+
opt.on('-c', '--clipboard', "Use the OS X clipboard as input source or output destination, depending on operation.") do
|
19
|
+
clipboard = true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.parse!(ARGV)
|
24
|
+
|
25
|
+
|
data/lib/gist.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
class Gist
|
2
|
+
|
3
|
+
include Gistr
|
4
|
+
attr_accessor :content, :options, :name, :description
|
5
|
+
|
6
|
+
def initialize(content, options={:filename => "gist.txt", :private => false, :description => nil})
|
7
|
+
@content = content
|
8
|
+
@options = options
|
9
|
+
@name = @options[:filename]
|
10
|
+
@private = @options[:private]
|
11
|
+
@description = @options[:description]
|
12
|
+
end
|
13
|
+
|
14
|
+
def save
|
15
|
+
url = URI.parse($base_uri + '/new')
|
16
|
+
files = { "files[#{@name}]" => @content }
|
17
|
+
desc = @description ? {'description' => @description} : {}
|
18
|
+
priv = @private ? {'private' => 'on'} : {}
|
19
|
+
data = files.merge(desc).merge(priv).merge(auth)
|
20
|
+
res = Net::HTTP.post_form(url, data)
|
21
|
+
return YAML.load(res.body)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/gistr.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
module Gistr
|
7
|
+
$base_uri = 'http://gist.github.com/api/v1/yaml'
|
8
|
+
|
9
|
+
def copy(content)
|
10
|
+
IO.popen('pbcopy', 'r+') {|clipboard| clipboard.write(content) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def paste
|
14
|
+
IO.popen('pbpaste', 'r') {|clipboard| clipboard.read }
|
15
|
+
end
|
16
|
+
|
17
|
+
def auth
|
18
|
+
user = `git config --global github.user`.strip
|
19
|
+
token = `git config --global github.token`.strip
|
20
|
+
|
21
|
+
user.empty? ? {} : { :login => user, :token => token }
|
22
|
+
end
|
23
|
+
|
24
|
+
def new_from_clipboard(*args)
|
25
|
+
content = paste
|
26
|
+
name = args[0] if args.size > 0
|
27
|
+
pvt = args[1] if args.size >= 2
|
28
|
+
desc = args[2] if args.size >= 3
|
29
|
+
name ||= "gist.txt"
|
30
|
+
pvt ||= false
|
31
|
+
desc ||= nil
|
32
|
+
gist = Gist.new(content, :filename => name, :private => pvt, :description => desc)
|
33
|
+
response = gist.save
|
34
|
+
gist_url = "http://gist.github.com/" + response['gists'][0][:repo]
|
35
|
+
copy gist_url
|
36
|
+
gist_url
|
37
|
+
end
|
38
|
+
|
39
|
+
def my_gists
|
40
|
+
user = auth[:login]
|
41
|
+
url = URI.parse($base_uri + '/gists/' + user)
|
42
|
+
res = Net::HTTP.start(url.host, url.port) {|http| http.get(url.path) }
|
43
|
+
if res.is_a?(Net::HTTPOK)
|
44
|
+
return YAML.load(res.body)
|
45
|
+
else
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_gist(id)
|
51
|
+
url = URI.parse("http://gist.github.com/" + id.to_s + ".txt")
|
52
|
+
res = Net::HTTP.start(url.host, url.port) {|http| http.get(url.path) }
|
53
|
+
res.body
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
Pathname.new(File.dirname(__FILE__)).children.reverse.each do |file|
|
59
|
+
require file.to_s unless file.basename.to_s == __FILE__
|
60
|
+
end
|
data/test/gistr_test.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mikedamage-gistr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Green
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-02 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Command line client for Github Gists, built for Mac OS X.
|
17
|
+
email: mike.is.green@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- README.textile
|
26
|
+
- VERSION.yml
|
27
|
+
- bin/gistr.rb
|
28
|
+
- lib/gist.rb
|
29
|
+
- lib/gistr.rb
|
30
|
+
- test/gistr_test.rb
|
31
|
+
- test/test_helper.rb
|
32
|
+
has_rdoc: true
|
33
|
+
homepage: http://github.com/mikedamage/gistr
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options:
|
36
|
+
- --inline-source
|
37
|
+
- --charset=UTF-8
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
45
|
+
version:
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: "0"
|
51
|
+
version:
|
52
|
+
requirements: []
|
53
|
+
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 1.2.0
|
56
|
+
signing_key:
|
57
|
+
specification_version: 2
|
58
|
+
summary: Command line client for Github Gists, built for Mac OS X.
|
59
|
+
test_files: []
|
60
|
+
|