pastr_it 0.1.7 → 1.0.0

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.
Files changed (2) hide show
  1. data/lib/pastr_it.rb +60 -22
  2. metadata +2 -2
data/lib/pastr_it.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  require "optparse"
2
2
  class PastrIt
3
- VERSION = '0.1.7'
3
+ VERSION = '1.0.0'
4
4
  REALM = 'Pastr Registered User'
5
- PasteLink = "http://pastr.it/new"
6
- attr_accessor :password, :filename, :title, :network, :channel, :language, :username
5
+ PastrHome = "http://pastr.it"
6
+ PastrNew = "%s/%s" % [PastrHome, :new]
7
+ PastrEdit = "%s/%s" % [PastrHome, :edit]
8
+ PastrNote = "%s/%s" % [PastrHome, :annotate]
9
+ attr_accessor :password, :filename, :title, :network, :channel, :language, :username, :annotate_id, :pastr_id, :no_body
7
10
  def initialize(args = nil)
8
11
  @network, @username = "Freenode", ENV["USER"]
9
12
  @args = args || ARGV
@@ -13,26 +16,38 @@ class PastrIt
13
16
  def self.pastr_it(args)
14
17
  me = PastrIt.new(args)
15
18
  me.parse_args
16
- me.pastr_it
19
+ if me.annotate_id
20
+ me.annotate_it
21
+ elsif me.pastr_id
22
+ me.edit_it
23
+ else
24
+ me.pastr_it
25
+ end
17
26
  end
18
27
 
19
28
  def parse_args
20
29
  return @opts if @opts
21
30
  @opts = OptionParser.new
22
- @opts.banner = "\nUsage: pastr-it [options] FILE\n"
23
- @opts.separator "\tTo paste from STDIN (instead of a file), leave off FILE, and you'll need to auth with a ~/.netrc"
31
+ @opts.banner = "\nUsage: pastr-it [options] FILE"
32
+
33
+ @opts.separator "--- Common Pastr Options"
34
+ @opts.separator " To paste from STDIN (instead of a file), leave off FILE, and you'll need to auth with a ~/.netrc"
24
35
  @opts.on("-u", "--username USERNAME", "Your username (Default: #{@username})") { |foo| @username = foo }
25
36
  @opts.on("-c", "--channel CHANNEL", "IRC Channel for this Pastr (Default: same as username)") { |foo| @channel = foo }
26
37
  @opts.separator "\tWhen using your username as the channel argument, the paste will be private"
27
38
  @opts.on("-n", "--network NETWORK", "IRC Network for this Pastr (Default: #{network})") { |foo| @network = foo }
28
39
  @opts.on("-l", "--language LANGUAGE", "Language to use for syntax highlighting") { |foo| @language = foo }
29
40
  @opts.on("-t", "--title TITLE", "Title of this paste (Default: Filename or 'Pastr by #{username}')") { |foo| @title = foo }
30
- # coming soon
31
- #@opts.on("-i", "--id PID", "ID Of paste to edit (instead of making a new paste)") { |foo| @pastr_id = foo }
32
- #@opts.on("-a", "--annotate PID", "ID Of paste to annotate (incompatible with -i)") { |foo| @annotate_id = foo }
33
- @opts.separator "\n---------------\n"
34
- @opts.on("-L", "--list", "List supported languages") { |foo| @list_langs = true }
35
41
 
42
+ @opts.separator "--- Editing"
43
+ @opts.on("-e", "--edit PASTR_ID", "ID Of paste to edit (instead of making a new paste)") { |foo| @pastr_id = foo }
44
+ @opts.on("-N", "--no-body", "Just edit metadata (channel, language, etc), not the paste body") { |foo| @no_body = true }
45
+
46
+ @opts.separator "--- Annotate"
47
+ @opts.on("-a", "--annotate PASTR_ID", "ID Of paste to annotate (incompatible with -e/--edit. -n/--network, and -c/--channel ignored.)") { |foo| @annotate_id = foo }
48
+
49
+ @opts.separator "--- Informational"
50
+ @opts.on("-L", "--list", "List supported languages") { |foo| @list_langs = true }
36
51
  @opts.on("-v", "--version", "Print pastr version") { |foo| @version_only = true }
37
52
  @opts.on_tail("-h", "--help", "Show this message") do
38
53
  puts @opts
@@ -53,13 +68,34 @@ class PastrIt
53
68
  @channel ||= @username
54
69
  if @filename.nil? and STDIN.isatty
55
70
  $stderr.puts "No Input on STDIN and no filename given, what am I supposed to paste?"
71
+ puts @opts
56
72
  exit 1
57
- end
73
+ end unless @pastr_id
74
+ end
75
+
76
+ def annotate_it
77
+ aid = "annotation_#{@annotate_id}"
78
+ form = {"#{aid}[paste_body]" => paste_body}
79
+ form["#{aid}[title]"] = title if title
80
+ form["language"] = language if language
81
+ puts http_request(:form => form, :url => "%s/%s" % [PastrNote, @annotate_id]).content
82
+ end
83
+
84
+ def edit_it
85
+ pid = "pastr_#{@paste_id}"
86
+ form = {"#{pid}[network]" => network, "#{pid}[channel]" => channel, "#{pid}[paste_body]" => paste_body}
87
+ form = {}
88
+ form["#{pid}[network]"] = network if network
89
+ form["#{pid}[channel]"] = channel if channel
90
+ form["#{pid}[title]"] = title if title
91
+ form["language"] = language if language
92
+ form["#{pid}[paste_body]"] = paste_body unless no_body
93
+ puts http_request(:form => form, :url => "%s/%s" % [PastrEdit, @pastr_id]).content
58
94
  end
59
95
 
60
96
  def pastr_it
61
97
  form = {'network' => network, 'channel' => channel, 'paste_body' => paste_body}
62
- form["title"] = title if title
98
+ form["title"] = title if title
63
99
  form["language"] = language if language
64
100
  puts http_request(:form => form).content
65
101
  end
@@ -67,28 +103,31 @@ class PastrIt
67
103
  private
68
104
  def http_request(args)
69
105
  form = args[:form] || nil
70
- url = args[:url] || PasteLink
106
+ url = args[:url] || PastrNew
107
+ auth = args[:auth] || true
71
108
  require "httpclient"
72
- check_netrc
73
- check_password
109
+ if auth
110
+ check_netrc
111
+ check_password
112
+ end
74
113
  client = HTTPClient.new(ENV["HTTP_PROXY"] ? ENV["HTTP_PROXY"] : ENV["http_proxy"])
75
114
  # Have to do this to get a valid cookie with the server before we auth (lame)
76
- res = client.get("http://pastr.it")
115
+ res = client.get(PastrHome)
77
116
  if res.status != 200
78
- puts "Cannot access http://pastr.it. Webserver said Status: #{res.status} -> #{res.reason}"
117
+ puts "Cannot access #{PastrHome}. Webserver said Status: #{res.status} -> #{res.reason}"
79
118
  exit 1
80
119
  end
81
120
  if form
82
121
  # Now set auth and post
83
- client.set_auth(url, username.strip, password.strip)
122
+ client.set_auth(url, username.strip, password.strip) if auth
84
123
  res = client.post(url, form)
85
124
  else
86
125
  # Or set auth and get
87
- client.set_auth(url, username.strip, password.strip)
126
+ client.set_auth(url, username.strip, password.strip) if auth
88
127
  res = client.get(url)
89
128
  end
90
129
  if res.status != 200
91
- puts "An error occurred posting to#{PasteLink}. Webserver said Status: #{res.status} -> #{res.reason}"
130
+ puts "An error occurred posting to #{url}. Webserver said Status: #{res.status} -> #{res.reason}"
92
131
  exit 1
93
132
  end
94
133
  res
@@ -135,7 +174,6 @@ class PastrIt
135
174
  end
136
175
  end
137
176
 
138
-
139
177
  def paste_body
140
178
  return @paste_body if @paste_body
141
179
  if filename
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.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jayson Vaughn
@@ -12,7 +12,7 @@ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
14
 
15
- date: 2009-04-11 00:00:00 -05:00
15
+ date: 2009-04-12 00:00:00 -05:00
16
16
  default_executable:
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency