owo 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.
- checksums.yaml +7 -0
- data/lib/owo.rb +64 -0
- data/lib/owo/api.rb +69 -0
- data/lib/owo/err.rb +61 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dadc9074b3638029d6ddcb693d4ba6dccbafaed9
|
4
|
+
data.tar.gz: 472b5659f8d11ae77500aa0e18afb5f4b7bfc00f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ab721cb20581d3889a65af077540d1e78db19a88cd571f108664abacd7d4355ec291462082dce896fc4e91b6d8dfab53044c08ec107acbf158a44135b67c7c43
|
7
|
+
data.tar.gz: 3429c847244cc54558d85843ba16f4fb9477b24bed44b3966e640a41e448aeab3c2b74d3ff29a44e40792ede4ddbba9fe49b4e31d34ac4c4c7dec509c1d47c43
|
data/lib/owo.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'owo/err'
|
2
|
+
require 'owo/api'
|
3
|
+
require 'rest-client'
|
4
|
+
|
5
|
+
# OwO base module
|
6
|
+
module OwO
|
7
|
+
# The main module for interaction
|
8
|
+
class WhatsThis
|
9
|
+
# The token to the module
|
10
|
+
attr_accessor :token
|
11
|
+
|
12
|
+
# The domain to use when returning upload URLs
|
13
|
+
attr_accessor :upload_url
|
14
|
+
|
15
|
+
# The domain to use when returning shortener URLs
|
16
|
+
attr_accessor :shorten_url
|
17
|
+
|
18
|
+
def initialize(token, upload_url: "owo.whats-th.is", shorten_url: "uwu.whats-th.is")
|
19
|
+
@token = token
|
20
|
+
@upload_url = upload_url
|
21
|
+
@shorten_url = shorten_url
|
22
|
+
end
|
23
|
+
|
24
|
+
def opts()
|
25
|
+
{'t' => @token, 'u' => @upload_url, 's' => @shorten_url}
|
26
|
+
end
|
27
|
+
|
28
|
+
# Upload a single file or multiple files to OwO.
|
29
|
+
# @param files [File, String, Array<File, String>] Files to upload
|
30
|
+
# @return [String, Array<String>] Returns the URLs of the uploaded files
|
31
|
+
def upload(files)
|
32
|
+
if not files.length == 0
|
33
|
+
was_string = false
|
34
|
+
if files.is_a?(String)
|
35
|
+
files = [ files ]
|
36
|
+
was_string = true
|
37
|
+
end
|
38
|
+
files.map { |x| File.new(x, 'rb') }
|
39
|
+
result = OwO::API.upload(opts(), files)
|
40
|
+
if was_string
|
41
|
+
result = result[0]
|
42
|
+
end
|
43
|
+
return result
|
44
|
+
else
|
45
|
+
raise OwO::Err::NoContent, "Theres no files provided!"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Shortens a link with OwO.
|
50
|
+
# @param urls [String, Array<String>] URLs to sharten
|
51
|
+
# @return [String, Array<String>] Returns the URLs of the shortened URLs
|
52
|
+
def shorten(urls)
|
53
|
+
if not urls.length == 0
|
54
|
+
if urls.is_a?(Array)
|
55
|
+
return urls.map { |x| OwO::API.shorten(opts(), x) }
|
56
|
+
else
|
57
|
+
return OwO::API.shorten(opts(), urls)
|
58
|
+
end
|
59
|
+
else
|
60
|
+
raise OwO::Err::NoContent, "Theres no URL provided!"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/owo/api.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'owo/err'
|
2
|
+
require 'uri'
|
3
|
+
require 'rest-client'
|
4
|
+
|
5
|
+
module OwO
|
6
|
+
# List of methods representing endpoints in OwO's API
|
7
|
+
module API
|
8
|
+
UPLOAD_URL = "https://api.awau.moe/upload/pomf"
|
9
|
+
SHORTEN_URL = "https://api.awau.moe/shorten/polr"
|
10
|
+
|
11
|
+
module_function
|
12
|
+
|
13
|
+
def request(type, *attributes)
|
14
|
+
raw = RestClient.send(type, *attributes, :'User-Agent' => "OwO.rb (https://github.com/whats-this/owo.rb)", :'Content-Type' => "multipart/form-data; boundary=XXX")
|
15
|
+
json = parse_json(raw);
|
16
|
+
return json
|
17
|
+
rescue RestClient::RequestEntityTooLarge
|
18
|
+
raise OwO::Err::TooLarge, "Requested files are too large!"
|
19
|
+
rescue RestClient::Unauthorized
|
20
|
+
raise OwO::Err::BadToken, "Token is invalid!"
|
21
|
+
rescue RestClient::BadRequest => e
|
22
|
+
raw = e.response
|
23
|
+
json = parse_json(raw)
|
24
|
+
if json.is_a?(Hash)
|
25
|
+
if json['description'] == 'too many files'
|
26
|
+
raise OwO::Err::TooManyFiles, "You requested too many files!"
|
27
|
+
end
|
28
|
+
else
|
29
|
+
if raw == 'invalid URL'
|
30
|
+
raise OwO::Err::BadURL, "Your URL is invalid!"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
err = if json.is_a?(Hash)
|
34
|
+
json['description']
|
35
|
+
else
|
36
|
+
raw
|
37
|
+
end
|
38
|
+
raise err
|
39
|
+
rescue RestClient::InternalServerError
|
40
|
+
raise OwO::Err::BadToken, "Server Error!"
|
41
|
+
rescue Exception => e
|
42
|
+
raise e
|
43
|
+
end
|
44
|
+
|
45
|
+
def parse_json(raw)
|
46
|
+
JSON.parse(raw)
|
47
|
+
rescue JSON::ParserError
|
48
|
+
raw
|
49
|
+
end
|
50
|
+
|
51
|
+
def upload(opts, files)
|
52
|
+
# "https://#{opts['u']}/" +
|
53
|
+
request(
|
54
|
+
:post,
|
55
|
+
"#{UPLOAD_URL}?key=#{opts['t']}",
|
56
|
+
{:'files[]' => files}
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
def shorten(opts, url)
|
61
|
+
request(
|
62
|
+
:get,
|
63
|
+
"#{SHORTEN_URL}?action=shorten&url=#{URI.escape(url)}&key=#{opts['t']}"
|
64
|
+
).sub(/awau\.moe/, opts['s'])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# gem build owo.gemspec && gem install owo-1.0.0.gem && ruby test/upload.rb
|
data/lib/owo/err.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
module OwO
|
2
|
+
# Custom errors raised in various places
|
3
|
+
module Err
|
4
|
+
|
5
|
+
# Raised when a token is invalid or incorrect.
|
6
|
+
class BadToken < RuntimeError
|
7
|
+
# Default message for this exception
|
8
|
+
def message
|
9
|
+
'Token invalid'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Raised when too many files were uploaded.
|
14
|
+
class TooManyFiles < RuntimeError
|
15
|
+
# Default message for this exception
|
16
|
+
def message
|
17
|
+
'Too many files requested!'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Raised when no files were sent.
|
22
|
+
class NoContent < RuntimeError
|
23
|
+
# Default message for this exception
|
24
|
+
def message
|
25
|
+
'No content found!'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Raised when requested URL is bad.
|
30
|
+
class BadURL < RuntimeError
|
31
|
+
# Default message for this exception
|
32
|
+
def message
|
33
|
+
'Your URL is invalid!'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Raised when requested file(s) have too much bytes.
|
38
|
+
class TooLarge < RuntimeError
|
39
|
+
# Default message for this exception
|
40
|
+
def message
|
41
|
+
'File(s) are too large!'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Raised when a server error occurs
|
46
|
+
class ServerFail < RuntimeError
|
47
|
+
# Default message for this exception
|
48
|
+
def message
|
49
|
+
'Server tried to do a thing and borked!'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Raised when the error is unhandled
|
54
|
+
class Unhandled < RuntimeError
|
55
|
+
# Default message for this exception
|
56
|
+
def message
|
57
|
+
'Unhandled'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: owo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Snazzah
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: A gem that utilizes the OwO API.
|
56
|
+
email: suggesttosnazzy@gmail.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/owo.rb
|
62
|
+
- lib/owo/api.rb
|
63
|
+
- lib/owo/err.rb
|
64
|
+
homepage: https://github.com/whats-this/owo.rb
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.4.5.1
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: A gem that utilizes the OwO API.
|
88
|
+
test_files: []
|