pastr_it 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/pastr_it.rb +55 -25
- metadata +2 -2
data/lib/pastr_it.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "optparse"
|
2
2
|
class PastrIt
|
3
|
-
VERSION = '0.1.
|
3
|
+
VERSION = '0.1.6'
|
4
4
|
REALM = 'Pastr Registered User'
|
5
5
|
PasteLink = "http://pastr.it/new"
|
6
6
|
attr_accessor :password, :filename, :title, :network, :channel, :language, :username
|
@@ -10,6 +10,12 @@ class PastrIt
|
|
10
10
|
parse_args
|
11
11
|
end
|
12
12
|
|
13
|
+
def self.pastr_it(args)
|
14
|
+
me = PastrIt.new(args)
|
15
|
+
me.parse_args
|
16
|
+
me.pastr_it
|
17
|
+
end
|
18
|
+
|
13
19
|
def parse_args
|
14
20
|
return @opts if @opts
|
15
21
|
@opts = OptionParser.new
|
@@ -22,12 +28,19 @@ class PastrIt
|
|
22
28
|
@opts.on("-t", "--title TITLE", "Title of this paste (Default: Filename or 'Pastr by #{username}')") { |foo| @title = foo }
|
23
29
|
#@opts.on("-f", "--file FILENAME", "Read paste_body from FILENAME (otherwise reads from stdin)") { |foo| @filename = foo }
|
24
30
|
@opts.separator "\tTo paste from STDIN (instead of a file), leave off FILE, and you'll need to auth with a ~/.netrc"
|
31
|
+
@opts.separator "\n---------------\n"
|
32
|
+
@opts.on("-L", "--list", "List supported languages") { |foo| @list_langs = true }
|
25
33
|
|
26
34
|
@opts.on_tail("-h", "--help", "Show this message") do
|
27
35
|
puts @opts
|
28
36
|
exit
|
29
37
|
end
|
30
38
|
@opts.parse!(@args)
|
39
|
+
if @list_langs
|
40
|
+
puts http_request(:url => "http://pastr.it/languages").content
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
|
31
44
|
@filename = ARGV.shift if ARGV.size == 1 and File.file?(ARGV.first)
|
32
45
|
@title ||= File.basename(@filename) if @filename
|
33
46
|
@channel ||= @username
|
@@ -38,6 +51,43 @@ class PastrIt
|
|
38
51
|
end
|
39
52
|
|
40
53
|
def pastr_it
|
54
|
+
form = {'network' => network, 'channel' => channel, 'paste_body' => paste_body}
|
55
|
+
form["title"] = title if title
|
56
|
+
form["language"] = language if language
|
57
|
+
puts http_request(:form => form).content
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
def http_request(args)
|
62
|
+
form = args[:form] || nil
|
63
|
+
url = args[:url] || PasteLink
|
64
|
+
require "httpclient"
|
65
|
+
check_netrc
|
66
|
+
check_password
|
67
|
+
client = HTTPClient.new(ENV["HTTP_PROXY"] ? ENV["HTTP_PROXY"] : ENV["http_proxy"])
|
68
|
+
# Have to do this to get a valid cookie with the server before we auth (lame)
|
69
|
+
res = client.get("http://pastr.it")
|
70
|
+
if res.status != 200
|
71
|
+
puts "Cannot access http://pastr.it. Webserver said Status: #{res.status} -> #{res.reason}"
|
72
|
+
exit 1
|
73
|
+
end
|
74
|
+
if form
|
75
|
+
# Now set auth and post
|
76
|
+
client.set_auth(url, username.strip, password.strip)
|
77
|
+
res = client.post(url, form)
|
78
|
+
else
|
79
|
+
# Or set auth and get
|
80
|
+
client.set_auth(url, username.strip, password.strip)
|
81
|
+
res = client.get(url)
|
82
|
+
end
|
83
|
+
if res.status != 200
|
84
|
+
puts "An error occurred posting to#{PasteLink}. Webserver said Status: #{res.status} -> #{res.reason}"
|
85
|
+
exit 1
|
86
|
+
end
|
87
|
+
res
|
88
|
+
end
|
89
|
+
|
90
|
+
def check_netrc
|
41
91
|
if File.file?(netrc = ENV["HOME"] + "/.netrc")
|
42
92
|
if p_auth = File.readlines(netrc).detect { |line| line.match(/^machine\s+pastr\.it/) }
|
43
93
|
if uname = p_auth.match(/login\s+(\S+)/)
|
@@ -54,6 +104,9 @@ class PastrIt
|
|
54
104
|
end
|
55
105
|
end
|
56
106
|
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def check_password
|
57
110
|
unless @password
|
58
111
|
if STDIN.isatty
|
59
112
|
begin
|
@@ -71,27 +124,9 @@ class PastrIt
|
|
71
124
|
exit 1
|
72
125
|
end
|
73
126
|
end
|
74
|
-
form = {'network' => network, 'channel' => channel, 'paste_body' => paste_body}
|
75
|
-
form["title"] = title if title
|
76
|
-
form["language"] = language if language
|
77
|
-
require "httpclient"
|
78
|
-
client = HTTPClient.new(ENV["HTTP_PROXY"])
|
79
|
-
# Have to do this to get a valid cookie with the server before we auth (lame)
|
80
|
-
res = client.get("http://pastr.it")
|
81
|
-
if res.status != 200
|
82
|
-
puts "Cannot access http://pastr.it. Webserver said Status: #{res.status} -> #{res.reason}"
|
83
|
-
exit 1
|
84
|
-
end
|
85
|
-
# Now set auth and post
|
86
|
-
client.set_auth(PasteLink, username.strip, password.strip)
|
87
|
-
res = client.post(PasteLink, form)
|
88
|
-
if res.status != 200
|
89
|
-
puts "An error occurred posting to#{PasteLink}. Webserver said Status: #{res.status} -> #{res.reason}"
|
90
|
-
exit 1
|
91
|
-
end
|
92
|
-
puts res.content
|
93
127
|
end
|
94
128
|
|
129
|
+
|
95
130
|
def paste_body
|
96
131
|
return @paste_body if @paste_body
|
97
132
|
if filename
|
@@ -102,10 +137,5 @@ class PastrIt
|
|
102
137
|
end
|
103
138
|
end
|
104
139
|
|
105
|
-
def self.pastr_it(args)
|
106
|
-
me = PastrIt.new(args)
|
107
|
-
me.parse_args
|
108
|
-
me.pastr_it
|
109
|
-
end
|
110
140
|
end
|
111
141
|
#:et;ts=2;sw=2;foldmethod=indent
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pastr_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jayson Vaughn
|
@@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements: []
|
59
59
|
|
60
60
|
rubyforge_project:
|
61
|
-
rubygems_version: 1.
|
61
|
+
rubygems_version: 1.3.1
|
62
62
|
signing_key:
|
63
63
|
specification_version: 2
|
64
64
|
summary: A command line program to paste text to http://pastr.it
|