pastie-api 0.1
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/bin/pastie +26 -0
- data/lib/pastie.rb +6 -0
- data/lib/pastie/console.rb +11 -0
- data/lib/pastie/paste.rb +33 -0
- data/lib/pastie/pastie.rb +28 -0
- data/lib/pastie/request.rb +12 -0
- metadata +71 -0
data/bin/pastie
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'pastie'
|
7
|
+
require 'pastie/console'
|
8
|
+
|
9
|
+
unless ARGV.empty?
|
10
|
+
ARGV.each do |f|
|
11
|
+
path = File.expand_path(f)
|
12
|
+
if File.exists?(path)
|
13
|
+
p = Pastie.create(File.read(path))
|
14
|
+
unless p.nil?
|
15
|
+
puts p.link.green
|
16
|
+
else
|
17
|
+
puts "Error: Cant create paste at this moment.".red
|
18
|
+
end
|
19
|
+
else
|
20
|
+
puts "Error: \"#{path}\" does not exist!".red
|
21
|
+
end
|
22
|
+
end
|
23
|
+
else
|
24
|
+
puts "Error: Input file(s) required".red
|
25
|
+
end
|
26
|
+
|
data/lib/pastie.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
class String
|
2
|
+
def red; colorize(self, "\e[1m\e[31m"); end
|
3
|
+
def green; colorize(self, "\e[1m\e[32m"); end
|
4
|
+
def dark_green; colorize(self, "\e[32m"); end
|
5
|
+
def yellow; colorize(self, "\e[1m\e[33m"); end
|
6
|
+
def blue; colorize(self, "\e[1m\e[34m"); end
|
7
|
+
def dark_blue; colorize(self, "\e[34m"); end
|
8
|
+
def purple; colorize(self, "\e[1m\e[35m"); end
|
9
|
+
def magenta; colorize(self, "\e[1m\e[36m"); end
|
10
|
+
def colorize(text, color_code) ; "#{color_code}#{text}\e[0m" ; end
|
11
|
+
end
|
data/lib/pastie/paste.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Pastie
|
2
|
+
class Paste
|
3
|
+
attr_reader :id, :key
|
4
|
+
attr_reader :content
|
5
|
+
|
6
|
+
# Initializes a pastie from server html response
|
7
|
+
def initialize(html)
|
8
|
+
url = html.scan(/http:\/\/pastie.org\/([\d]{1,}).txt(\?key=([A-Za-z\d]{1,}))?/)
|
9
|
+
unless url.nil?
|
10
|
+
url.flatten!
|
11
|
+
@id = url[0] ; @key = url[2]
|
12
|
+
@content = Request.fetch(raw_link)
|
13
|
+
else
|
14
|
+
raise 'Invalid html!'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns direct link to paste contents
|
19
|
+
def raw_link
|
20
|
+
BASE_URL + "/#{@id}.txt" + (private? ? "?key=#{@key}" : '')
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return direct link to paste page
|
24
|
+
def link
|
25
|
+
BASE_URL + (private? ? "/private/#{@key}" : "/#{@id}")
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns true if paste is private
|
29
|
+
def private?
|
30
|
+
!@key.nil?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Pastie
|
2
|
+
BASE_URL = 'http://pastie.org'
|
3
|
+
|
4
|
+
# Gets existing paste
|
5
|
+
def self.get(id)
|
6
|
+
id = id.to_s
|
7
|
+
path = id.match(/^[\d]{1,}$/) ? "/#{id}" : "/private/#{id}"
|
8
|
+
html = Request.fetch(BASE_URL + path)
|
9
|
+
return html.nil? ? nil : Paste.new(html)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Creates a new paste
|
13
|
+
def self.create(content, private=true)
|
14
|
+
params = {
|
15
|
+
"paste[body]" => content.to_s,
|
16
|
+
"paste[authorization]" => "burger",
|
17
|
+
"paste[restricted]" => "1"
|
18
|
+
}
|
19
|
+
params["paste[restricted]"] = "0" unless private
|
20
|
+
resp = Net::HTTP.post_form(URI.parse(BASE_URL + "/pastes"), params)
|
21
|
+
if resp.kind_of?(Net::HTTPFound)
|
22
|
+
paste_url = resp.body.scan(/<a href="(.*)">/)[0][0]
|
23
|
+
Paste.new(Request.fetch(paste_url))
|
24
|
+
else
|
25
|
+
raise "Cannot create paste!"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Pastie
|
2
|
+
class Request
|
3
|
+
# Returns response body of specified link
|
4
|
+
def self.fetch(link)
|
5
|
+
url = URI.parse(link)
|
6
|
+
resp = Net::HTTP.start(url.host, url.port) do |http|
|
7
|
+
http.get(url.path + "?" + url.query.to_s)
|
8
|
+
end
|
9
|
+
return resp.body if resp.kind_of?(Net::HTTPOK)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pastie-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 9
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: "0.1"
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Dan Sosedoff
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-09-28 00:00:00 -05:00
|
18
|
+
default_executable: pastie
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Pastie.org simplified API with terminal access
|
22
|
+
email: dan.sosedoff@gmail.com
|
23
|
+
executables:
|
24
|
+
- pastie
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- bin/pastie
|
31
|
+
- lib/pastie.rb
|
32
|
+
- lib/pastie/pastie.rb
|
33
|
+
- lib/pastie/request.rb
|
34
|
+
- lib/pastie/paste.rb
|
35
|
+
- lib/pastie/console.rb
|
36
|
+
has_rdoc: true
|
37
|
+
homepage: http://github.com/sosedoff/pastie
|
38
|
+
licenses: []
|
39
|
+
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
hash: 3
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
requirements: []
|
64
|
+
|
65
|
+
rubyforge_project:
|
66
|
+
rubygems_version: 1.3.7
|
67
|
+
signing_key:
|
68
|
+
specification_version: 3
|
69
|
+
summary: Pastie.org simplified API with terminal access
|
70
|
+
test_files: []
|
71
|
+
|