weeb 0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9d900a7f70e3ae873dbb55e26a6f24feeef6981f
4
+ data.tar.gz: 5af3916cb1ded4612981e94edb9e99a46763e029
5
+ SHA512:
6
+ metadata.gz: 5a596fd7ec93ff32b3182a89439a5576b7f82192c70c87d0515ecd6719a87a7f000ff7f9f47524c2afc883c27c8a6236c89d8aba4ae5efa49e58bcc323bb0042
7
+ data.tar.gz: f6e6029ed3a7a0cf1d7e63fb556356494ccd81196692cc5208e78bf90583e2256da9c18b1aa419d1d7a2ba29b0047c507816e5f7a622c467c1a8ee0ffa993892
@@ -0,0 +1 @@
1
+ require 'weeb/interfaces/client'
@@ -0,0 +1,54 @@
1
+ require 'weeb/err'
2
+ require 'weeb/ver'
3
+ require 'uri'
4
+ require 'json'
5
+ require 'rest-client'
6
+
7
+ module WeebSh
8
+ module API
9
+
10
+ module_function
11
+
12
+ def request(type, *attributes)
13
+ parse_json(RestClient.send(type, *attributes))
14
+ rescue RestClient::RequestEntityTooLarge
15
+ raise WeebSh::Err::TooLarge, 'Requested files are too large!'
16
+ rescue RestClient::Unauthorized => e
17
+ json = parse_json(e.response)
18
+ if json.is_a?(Hash)
19
+ raise WeebSh::Err::BadAuth, 'Token is invalid!' if json['message'] == 'Unauthorized'
20
+ end
21
+ rescue RestClient::BadRequest => e
22
+ json = parse_json(e.response)
23
+ if json.is_a?(Hash)
24
+ raise WeebSh::Err::InvalidMIME, json['message'] if json['message'].start_with? 'The mimetype' and json['message'].end_with? 'is not supported'
25
+ raise WeebSh::Err::TagExists, json['message'] if json['message'] == 'Tags existed already or had no content'
26
+ raise WeebSh::Err::ImagePrivate, json['message'] if json['message'] == 'This image is private'
27
+ raise WeebSh::Err::InvalidImage, json['message'] if json['message'] == 'No image found for your query'
28
+ end
29
+ raise e
30
+ rescue RestClient::Forbidden => e
31
+ json = parse_json(e.response)
32
+ if json.is_a?(Hash)
33
+ raise WeebSh::Err::MissingScope, json['message'] if json['message'].start_with? 'missing scope'
34
+ end
35
+ raise e
36
+ rescue RestClient::InternalServerError
37
+ raise WeebSh::Err::ServerFail, 'Server Error!'
38
+ rescue RuntimeError => e
39
+ raise e
40
+ end
41
+
42
+ def format_user_agent(user_agent)
43
+ user_agent = "#{user_agent['botname']}/#{user_agent['version']}#{"/#{user_agent['env']}" if user_agent['env']}" if user_agent.is_a?(Hash)
44
+ return nil unless user_agent.is_a?(String) && !user_agent.empty?
45
+ user_agent
46
+ end
47
+
48
+ def parse_json(raw)
49
+ JSON.parse(raw)
50
+ rescue JSON::ParserError
51
+ raw
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,13 @@
1
+ require 'weeb/api'
2
+ require 'uri'
3
+
4
+ module WeebSh
5
+ module API
6
+ module Korra
7
+ BASE = '/auto-image'.freeze
8
+
9
+ module_function
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'weeb/api'
2
+ require 'uri'
3
+
4
+ module WeebSh
5
+ module API
6
+ module Shimakaze
7
+ BASE = '/reputation'.freeze
8
+
9
+ module_function
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'weeb/api'
2
+ require 'uri'
3
+
4
+ module WeebSh
5
+ module API
6
+ module Tama
7
+ BASE = '/settings'.freeze
8
+
9
+ module_function
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,147 @@
1
+ require 'weeb/api'
2
+ require 'uri'
3
+
4
+ module WeebSh
5
+ module API
6
+ module Toph
7
+ BASE = '/images'.freeze
8
+
9
+ module_function
10
+
11
+ def upload(i, resource, type, hidden, tags, nsfw, source)
12
+ resource.is_a?(File) ? WeebSh::API.request(
13
+ :post,
14
+ "#{i.api_url}#{BASE}/upload",
15
+ {
16
+ 'file'.to_sym => resource,
17
+ 'baseType'.to_sym => type,
18
+ 'hidden'.to_sym => hidden,
19
+ 'tags'.to_sym => tags,
20
+ 'nsfw'.to_sym => nsfw,
21
+ 'source'.to_sym => source
22
+ },
23
+ {
24
+ Authorization: i.auth,
25
+ 'User-Agent': i.user_agent
26
+ }
27
+ ) : WeebSh::API.request(
28
+ :post,
29
+ "#{i.api_url}#{BASE}/upload",
30
+ {
31
+ url: resource,
32
+ baseType: type,
33
+ hidden: hidden,
34
+ tags: tags,
35
+ nsfw: nsfw,
36
+ source: source
37
+ }.to_json,
38
+ {
39
+ Authorization: i.auth,
40
+ 'User-Agent': i.user_agent
41
+ }
42
+ )
43
+ end
44
+
45
+ def types(i, query)
46
+ WeebSh::API.request(
47
+ :get,
48
+ "#{i.api_url}#{BASE}/types?#{URI.encode_www_form(query)}",
49
+ {
50
+ Authorization: i.auth,
51
+ 'User-Agent': i.user_agent
52
+ }
53
+ )
54
+ end
55
+
56
+ def tags(i, query)
57
+ WeebSh::API.request(
58
+ :get,
59
+ "#{i.api_url}#{BASE}/tags?#{URI.encode_www_form(query)}",
60
+ {
61
+ Authorization: i.auth,
62
+ 'User-Agent': i.user_agent
63
+ }
64
+ )
65
+ end
66
+
67
+ def random(i, query)
68
+ WeebSh::API.request(
69
+ :get,
70
+ "#{i.api_url}#{BASE}/random?#{URI.encode_www_form(query)}",
71
+ {
72
+ Authorization: i.auth,
73
+ 'User-Agent': i.user_agent
74
+ }
75
+ )
76
+ end
77
+
78
+ def image(i, id)
79
+ WeebSh::API.request(
80
+ :get,
81
+ "#{i.api_url}#{BASE}/info/#{id}",
82
+ {
83
+ Authorization: i.auth,
84
+ 'User-Agent': i.user_agent
85
+ }
86
+ )
87
+ end
88
+
89
+ def add_tags_to_image(i, id, tags)
90
+ WeebSh::API.request(
91
+ :post,
92
+ "#{i.api_url}#{BASE}/info/#{id}",
93
+ { tags: tags }.to_json,
94
+ {
95
+ Authorization: i.auth,
96
+ 'User-Agent': i.user_agent
97
+ }
98
+ )
99
+ end
100
+
101
+ def remove_tags_to_image(i, id, tags)
102
+ WeebSh::API.request(
103
+ :delete,
104
+ "#{i.api_url}#{BASE}/info/#{id}",
105
+ { tags: tags }.to_json,
106
+ {
107
+ Authorization: i.auth,
108
+ 'User-Agent': i.user_agent
109
+ }
110
+ )
111
+ end
112
+
113
+ def remove_image(i, id)
114
+ WeebSh::API.request(
115
+ :delete,
116
+ "#{i.api_url}#{BASE}/info/#{id}",
117
+ {
118
+ Authorization: i.auth,
119
+ 'User-Agent': i.user_agent
120
+ }
121
+ )
122
+ end
123
+
124
+ def list(i, query)
125
+ WeebSh::API.request(
126
+ :get,
127
+ "#{i.api_url}#{BASE}/list?#{URI.encode_www_form(query)}",
128
+ {
129
+ Authorization: i.auth,
130
+ 'User-Agent': i.user_agent
131
+ }
132
+ )
133
+ end
134
+
135
+ def list_user(i, id, query)
136
+ WeebSh::API.request(
137
+ :get,
138
+ "#{i.api_url}#{BASE}/list/#{id}?#{URI.encode_www_form(query)}",
139
+ {
140
+ Authorization: i.auth,
141
+ 'User-Agent': i.user_agent
142
+ }
143
+ )
144
+ end
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,177 @@
1
+ require 'weeb/api'
2
+
3
+ module WeebSh
4
+ # Mixin for objects with IDs
5
+ module IDObject
6
+ # @return [String] the ID which uniquely identifies this object in toph.
7
+ attr_reader :id
8
+ alias_method :resolve_id, :id
9
+ alias_method :hash, :id
10
+
11
+ # ID based comparison
12
+ def ==(other)
13
+ other.respond_to?(:resolve_id) ? (@id.resolve_id == other.resolve_id) : (@id == other)
14
+ end
15
+ end
16
+
17
+ # Represents a generic interface
18
+ class Interface
19
+ # @return [String] the authorization used in weeb.sh.
20
+ attr_accessor :auth
21
+
22
+ # @return [String] the user agent used in weeb.sh.
23
+ attr_accessor :user_agent
24
+
25
+ # @return [String] the URL being used for weeb.sh.
26
+ attr_reader :api_url
27
+
28
+ # @param token [String] the token required to use weeb.sh.
29
+ # @param user_agent [String, Hash] the user agent to use on endpoints.
30
+ # @param api_url [String] the URL to use when using the weeb.sh API.
31
+ def initialize(auth, user_agent = nil, api_url: 'https://api.weeb.sh', client: nil)
32
+ @user_agent = WeebSh::API.format_user_agent(user_agent)
33
+ @auth = auth
34
+ @api_url = api_url
35
+ @client = client
36
+
37
+ return if client
38
+ raise WeebSh::Err::BadAuth, 'Authorization is empty!' if auth.empty?
39
+ puts "[#{self.class.name}] Your User Agent is empty. Please consider adding a user agent to help identify issues easier." if user_agent.nil?
40
+ puts "[#{self.class.name}] Your User Agent is not ideal. Please consider adding a user agent to help identify issues easier." if !user_agent.nil? && user_agent.split('/').count < 2
41
+ end
42
+
43
+ def inspect
44
+ "#<#{self.class.name} @api_url=#{@api_url.inspect} @user_agent=#{@user_agent.inspect}>"
45
+ end
46
+ end
47
+
48
+ # Represents a preview image for toph
49
+ class PreviewImage
50
+ include IDObject
51
+
52
+ # @return [Symbol] the type of image this is
53
+ attr_reader :type
54
+
55
+ # @return [String] the file extension of the image
56
+ attr_reader :file_type
57
+
58
+ # @return [String] the url of the image
59
+ attr_reader :url
60
+
61
+ # @!visibility private
62
+ def initialize(data, interface)
63
+ @interface = interface
64
+ @id = data['id']
65
+ @type = data['type']
66
+ @file_type = data['fileType']
67
+ @url = data['url']
68
+ end
69
+
70
+ def inspect
71
+ "#<WeebSh::PreviewImage @url=#{@url.inspect} @type=#{@type.inspect}>"
72
+ end
73
+ end
74
+
75
+ # Represents an image for toph
76
+ class WeebImage < PreviewImage
77
+
78
+ # @return [true, false] whether or not this image is nsfw
79
+ attr_reader :nsfw
80
+ alias_method :nsfw?, :nsfw
81
+
82
+ # @return [String] the mime type of the image
83
+ attr_reader :mime_type
84
+
85
+ # @return [Array<String>] the tags on image
86
+ attr_reader :tags
87
+
88
+ # @return [true, false] whether or not this image can only be seen by the uploader
89
+ attr_reader :hidden
90
+ alias_method :hidden?, :hidden
91
+
92
+ # @return [String, nil] the source of the image
93
+ attr_reader :source
94
+
95
+ # @return [String] the ID of the uploader
96
+ attr_reader :account
97
+ alias_method :uploader, :account
98
+ alias_method :author, :account
99
+
100
+ # @!visibility private
101
+ def initialize(data, interface)
102
+ @interface = interface
103
+ @id = data['id']
104
+ @type = data['type']
105
+ @nsfw = data['nsfw']
106
+ @file_type = data['fileType']
107
+ @mime_type = data['mimeType']
108
+ @url = data['url']
109
+ @hidden = data['hidden']
110
+ @file_type = data['fileType']
111
+ @source = data['source'] || nil
112
+ @account = data['account']
113
+ @tags = data['tags'].map { |r| Tag.new(r, interface) }
114
+ end
115
+
116
+ # Add tags to the image
117
+ # @param tags [Array<String, Tag>] the affected tags
118
+ def add_tags(tags)
119
+ @interface.add_tags_to_image(self, tags)
120
+ end
121
+
122
+ # Remove tags from the image
123
+ # @param tags [Array<String, Tag>] the affected tags
124
+ def remove_tags(tags)
125
+ @interface.remove_tags_to_image(self, tags)
126
+ end
127
+
128
+ # Add a tag to the image
129
+ # @param tag [String, Tag] the affected tag
130
+ def add_tag(tag)
131
+ @interface.add_tags_to_image(self, [tag])
132
+ end
133
+
134
+ # Remove a tag to the image
135
+ # @param tags [String, Tag] the affected tag
136
+ def remove_tag(tag)
137
+ @interface.remove_tags_to_image(self, [tag])
138
+ end
139
+
140
+ # Delete this image
141
+ def delete()
142
+ @interface.delete_image(self)
143
+ end
144
+ alias_method :remove, :delete
145
+
146
+ def inspect
147
+ "#<WeebSh::WeebImage @url=#{@url.inspect} @type=#{@type.inspect} @nsfw=#{@nsfw.inspect}>"
148
+ end
149
+ end
150
+
151
+ # Represents an Image tag for toph
152
+ class Tag
153
+ # @return [String] the name of the tag
154
+ attr_reader :name
155
+
156
+ # @return [true, false] whether or not this tag can only be seen by the uploader
157
+ attr_reader :hidden
158
+ alias_method :hidden?, :hidden
159
+
160
+ # @return [String] the ID of the creator
161
+ attr_reader :account
162
+ alias_method :creator, :account
163
+ alias_method :author, :account
164
+
165
+ # @!visibility private
166
+ def initialize(data, interface)
167
+ @interface = interface
168
+ @name = data['name']
169
+ @hidden = data['hidden']
170
+ @account = data['account']
171
+ end
172
+
173
+ def inspect
174
+ "#<WeebSh::Tag @name=#{@name.inspect} @hidden=#{@hidden.inspect} @account=#{@account.inspect}>"
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,60 @@
1
+ module WeebSh
2
+ # Custom errors raised in various places
3
+ module Err
4
+ # Raised when a token is invalid or incorrect.
5
+ class BadAuth < RuntimeError
6
+ def message
7
+ 'Token invalid'
8
+ end
9
+ end
10
+
11
+ # Raised when too many files were uploaded.
12
+ class MissingScope < RuntimeError
13
+ def message
14
+ 'Too many files requested!'
15
+ end
16
+ end
17
+
18
+ # Raised when a server error occurs
19
+ class ServerFail < RuntimeError
20
+ def message
21
+ 'Server tried to do a thing and borked!'
22
+ end
23
+ end
24
+
25
+ # Raised when requested file(s) have too much bytes.
26
+ class TooLarge < RuntimeError
27
+ def message
28
+ 'File(s) are too large!'
29
+ end
30
+ end
31
+
32
+ # Raised when an invalid mime type was given.
33
+ class InvalidMIME < RuntimeError
34
+ def message
35
+ 'You gave an unsupported MIME type!'
36
+ end
37
+ end
38
+
39
+ # Raised when trying to add an existing tag to an image
40
+ class TagExists < RuntimeError
41
+ def message
42
+ 'Tags existed already or had no content!'
43
+ end
44
+ end
45
+
46
+ # Raised when trying to interact with a non-existant image
47
+ class InvalidImage < RuntimeError
48
+ def message
49
+ 'Non-existant image!'
50
+ end
51
+ end
52
+
53
+ # Raised when loading a file recieves an error
54
+ class FileError < RuntimeError
55
+ def message
56
+ 'Unknown'
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,82 @@
1
+ require 'weeb/interfaces/toph'
2
+ require 'weeb/interfaces/korra'
3
+ require 'weeb/interfaces/shimakaze'
4
+ require 'weeb/interfaces/tama'
5
+
6
+ module WeebSh
7
+ class Client
8
+ # @return [String] the authorization used in weeb.sh.
9
+ attr_reader :auth
10
+
11
+ # @return [String] the user agent used in weeb.sh.
12
+ attr_reader :user_agent
13
+
14
+ # @return [String] the URL being used for weeb.sh.
15
+ attr_reader :api_url
16
+
17
+ # @return [Topc] the toph class tied with the client.
18
+ attr_reader :toph
19
+ alias_method :image, :toph
20
+ alias_method :images, :toph
21
+
22
+ # @return [String] the korra class tied with the client.
23
+ attr_reader :korra
24
+ alias_method :image_gen, :korra
25
+ alias_method :auto_image, :korra
26
+
27
+ # @return [String] the shimakaze class tied with the client.
28
+ attr_reader :shimakaze
29
+ alias_method :reputation, :shimakaze
30
+ alias_method :rep, :shimakaze
31
+
32
+ # @return [String] the tama class tied with the client.
33
+ attr_reader :tama
34
+ alias_method :settings, :tama
35
+
36
+ # Groups all interfaces into one.
37
+ # @param token [String] the token required to use weeb.sh.
38
+ # @param user_agent [String, Hash] the user agent to use with requests.
39
+ def initialize(auth, user_agent = nil, api_url: 'https://api.weeb.sh')
40
+ @user_agent = WeebSh::API.format_user_agent(user_agent)
41
+ @auth = auth
42
+ @api_url = api_url
43
+
44
+ raise WeebSh::Err::BadAuth, 'Authorization is empty!' if auth.empty?
45
+ puts '[WeebSh::Client] Your User Agent is empty. Please consider adding a user agent to help identify issues easier.' if user_agent.nil?
46
+ puts '[WeebSh::Client] Your User Agent is not ideal. Please consider adding a user agent to help identify issues easier.' if !user_agent.nil? && user_agent.split('/').count < 2
47
+
48
+ @toph = WeebSh::Toph.new(auth, user_agent, api_url: api_url, client: self)
49
+ @korra = WeebSh::Korra.new(auth, user_agent, api_url: api_url, client: self)
50
+ @shimakaze = WeebSh::Shimakaze.new(auth, user_agent, api_url: api_url, client: self)
51
+ @tama = WeebSh::Tama.new(auth, user_agent, api_url: api_url, client: self)
52
+ end
53
+
54
+ def user_agent=(user_agent)
55
+ @user_agent = user_agent
56
+ @toph.user_agent = user_agent
57
+ @korra.user_agent = user_agent
58
+ @shimakaze.user_agent = user_agent
59
+ @tama.user_agent = user_agent
60
+ end
61
+
62
+ def auth=(auth)
63
+ @auth = auth
64
+ @toph.auth = auth
65
+ @korra.auth = auth
66
+ @shimakaze.auth = auth
67
+ @tama.auth = auth
68
+ end
69
+
70
+ def api_url=(api_url)
71
+ @api_url = api_url
72
+ @toph.api_url = api_url
73
+ @korra.api_url = api_url
74
+ @shimakaze.api_url = api_url
75
+ @tama.api_url = api_url
76
+ end
77
+
78
+ def inspect
79
+ "#<WeebSh::Client @api_url=#{@api_url.inspect} @user_agent=#{@user_agent.inspect}>"
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,9 @@
1
+ require 'weeb/api/korra'
2
+ require 'weeb/data'
3
+
4
+ module WeebSh
5
+ # Image Generation API
6
+ class Korra < Interface
7
+
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'weeb/api/shimakaze'
2
+ require 'weeb/data'
3
+
4
+ module WeebSh
5
+ # Reputation API
6
+ class Shimakaze < Interface
7
+
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'weeb/api/tama'
2
+ require 'weeb/data'
3
+
4
+ module WeebSh
5
+ # Settings API
6
+ class Tama < Interface
7
+
8
+ end
9
+ end
@@ -0,0 +1,144 @@
1
+ require 'weeb/api/toph'
2
+ require 'weeb/data'
3
+
4
+ module WeebSh
5
+ # Image API
6
+ class Toph < Interface
7
+
8
+ # Uploads an image.
9
+ # @param resource [File, String] the file to upload, this can either be a File, a URL or a path.
10
+ # @param type [String] the type of image this is in.
11
+ # @param hidden [true, false] whether or not this image will be only seen to the uploader.
12
+ # @param tags [Array<String, Tag>] the tags that this image applies to.
13
+ # @param nsfw [true, false] whether or not this image is NSFW.
14
+ # @param source [String] the source URL of the image
15
+ # @return [Image] Returns image that was uploaded.
16
+ def upload(resource, type, hidden: false, tags: [], nsfw: false, source: nil)
17
+ tags = tags.map { |t| t.name if t.is_a(Tag) }
18
+ if resource.is_a?(String) and URI(resource).host.nil?
19
+ begin
20
+ resource = File.new(File.absolute_path(resource), 'rb')
21
+ rescue Errno::ENOENT, Errno::EACCES, Errno::ENAMETOOLONG => e
22
+ errstring = 'Unknown'
23
+ case e.class.name
24
+ when 'Errno::ENOENT'
25
+ errstring = 'File Not Found'
26
+ when 'Errno::EACCES'
27
+ errstring = 'Permission Denied'
28
+ when 'Errno::ENAMETOOLONG'
29
+ errstring = 'Name Too Long'
30
+ end
31
+ raise WeebSh::Err::FileError, "Error initializing file '${resource}' | #{errstring} | #{e.class.name}"
32
+ end
33
+ end
34
+
35
+ Image.new(API::Toph.upload(self, resource, type, hidden, tags, nsfw, source)['file'], self)
36
+ end
37
+
38
+ # Gets a list of available types of images.
39
+ # @param preview [true, false] whether or not to return an array ofpreview images instead of and array of strings
40
+ # @param hidden [true, false] if true, you only get back hidden preview images you uploaded
41
+ # @param nsfw [true, false, String] whether or not preview images could be NSFW. Setting this to "only" restricts it to NSFW images.
42
+ # @return [Array<String>, Array<PreviewImage>] Returns all available types.
43
+ def types(hidden: false, nsfw: false, preview: false)
44
+ response = API::Toph.types(self, {
45
+ hidden: hidden,
46
+ nsfw: nsfw,
47
+ preview: preview
48
+ })
49
+ preview ? response['preview'].map { |p| PreviewImage.new(p, self) } : response['types']
50
+ end
51
+
52
+ # Gets a list of available types of images.
53
+ # @param hidden [true, false] if true, you only get back hidden tags you added
54
+ # @param nsfw [true, false, String] whether or not preview images could be NSFW. Setting this to "only" restricts it to NSFW images.
55
+ # @return [Array<String>, Array<PreviewImage>] Returns all available tags.
56
+ def tags(hidden: false, nsfw: false)
57
+ API::Toph.types(self, {
58
+ hidden: hidden,
59
+ nsfw: nsfw
60
+ })['tags']
61
+ end
62
+
63
+ # Get a random image based on type or a set of tags.
64
+ # @param type [String] the type of images to recieve
65
+ # @param tags [Array<String, Tag>] the tags a image should require to be for selection
66
+ # @param hidden [true, false] if true, you can only get back hidden tags you added
67
+ # @param nsfw [true, false, String] whether or not preview images could be NSFW. Setting this to "only" restricts it to NSFW images.
68
+ # @param file_type [String] the file type an image is required to be for selection
69
+ # @return [WeebImage] Returns image that was randomly selected.
70
+ def random(type: nil, tags: [], hidden: false, nsfw: false, file_type: nil)
71
+ tags = tags.map { |t| t.name if t.is_a(Tag) }
72
+ WeebImage.new(API::Toph.random(self, {
73
+ type: type,
74
+ tags: tags,
75
+ hidden: hidden,
76
+ nsfw: nsfw,
77
+ file_type: file_type
78
+ }), self)
79
+ end
80
+
81
+ # Get an image.
82
+ # @param id [String, WeebImage, PreviewImage, #resolve_id] the image's ID to recieve
83
+ # @return [WeebImage] Returns the image with the given ID.
84
+ def image(id)
85
+ id = id.resolve_id if id.respond_to?(:resolve_id)
86
+ WeebImage.new(API::Toph.image(self, id), self)
87
+ end
88
+
89
+ # Delete an image.
90
+ # @param id [String, WeebImage, PreviewImage, #resolve_id] the image's ID to delete
91
+ # @return [WeebImage] Returns the image with the given ID.
92
+ def delete_image(id)
93
+ id = id.resolve_id if id.respond_to?(:resolve_id)
94
+ WeebImage.new(API::Toph.delete_image(self, id), self)
95
+ end
96
+ alias_method :remove_image, :delete_image
97
+
98
+ # Add tags to an image.
99
+ # @param image [String, WeebImage, PreviewImage, #resolve_id] the image being referred
100
+ # @param tags [Array<String, Tag>] the affected tags
101
+ # @return [WeebImage] Returns the image with the given ID.
102
+ def add_tags_to_image(image, tags)
103
+ id = id.resolve_id if id.respond_to?(:resolve_id)
104
+ tags = tags.map { |t| t.name if t.is_a(Tag) }
105
+ WeebImage.new(API::Toph.add_tags_to_image(self, image, tags), self)
106
+ end
107
+
108
+ # Remove tags off of an image.
109
+ # @param image [String, WeebImage, PreviewImage, #resolve_id] the image being referred
110
+ # @param tags [Array<String, Tag>] the affected tags
111
+ # @return [WeebImage] Returns the image with the given ID.
112
+ def remove_tags_to_image(image, tags)
113
+ id = id.resolve_id if id.respond_to?(:resolve_id)
114
+ tags = tags.map { |t| t.name if t.is_a(Tag) }
115
+ WeebImage.new(API::Toph.remove_tags_to_image(self, image, tags), self)
116
+ end
117
+
118
+ # Get a list of images based on arguments.
119
+ # @param type [String] the type of images to recieve
120
+ # @param tags [Array<String, Tag>] the tags a image should require to be for selection
121
+ # @param hidden [true, false] if true, you can only get back hidden tags you added
122
+ # @param nsfw [true, false, String] whether or not preview images could be NSFW. Setting this to "only" restricts it to NSFW images.
123
+ # @param file_type [String] the file type an image is required to be for selection
124
+ # @param page [Number] the page number of images to use
125
+ # @param account [String] the account ID to get images from
126
+ # @return [WeebImage] Returns image that was randomly selected.
127
+ def list(type: nil, tags: [], hidden: false, nsfw: false, file_type: nil, page: 0, account: nil)
128
+ tags = tags.map { |t| t.name if t.is_a(Tag) }
129
+ object = {
130
+ type: type,
131
+ tags: tags,
132
+ hidden: hidden,
133
+ nsfw: nsfw,
134
+ file_type: file_type,
135
+ page: page
136
+ }
137
+ repsonse = account ? API::Toph.list_user(self, account, object) : API::Toph.list(self, object)
138
+ repsonse.map { |i| WeebImage.new(i, self) }
139
+ end
140
+ end
141
+
142
+ # Alias for the class {Toph}
143
+ Image = Toph
144
+ end
@@ -0,0 +1,3 @@
1
+ module WeebSh
2
+ VERSION = '0.0.1'.freeze
3
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: weeb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Snazzah
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-05 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 weeb.sh API.
56
+ email: suggesttosnazzy@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/weeb.rb
62
+ - lib/weeb/api.rb
63
+ - lib/weeb/api/korra.rb
64
+ - lib/weeb/api/shimakaze.rb
65
+ - lib/weeb/api/tama.rb
66
+ - lib/weeb/api/toph.rb
67
+ - lib/weeb/data.rb
68
+ - lib/weeb/err.rb
69
+ - lib/weeb/interfaces/client.rb
70
+ - lib/weeb/interfaces/korra.rb
71
+ - lib/weeb/interfaces/shimakaze.rb
72
+ - lib/weeb/interfaces/tama.rb
73
+ - lib/weeb/interfaces/toph.rb
74
+ - lib/weeb/ver.rb
75
+ homepage: https://github.com/Snazzah/weeb.rb
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.5.1
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: A gem that utilizes the weeb.sh API.
99
+ test_files: []