pastee 2.0.3 → 3.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 +5 -5
- data/CHANGELOG.md +4 -0
- data/lib/pastee.rb +145 -42
- data/lib/pastee/errors.rb +61 -0
- data/lib/pastee/paste.rb +127 -0
- data/lib/pastee/syntax.rb +23 -0
- metadata +10 -8
- data/lib/errors.rb +0 -100
- data/lib/pastee_beta.rb +0 -190
- data/lib/syntax.rb +0 -422
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 066d69e5b280295c48bbd53cf7660c61b80a6036465e6c2f38a7a4fa5805e1d3
|
4
|
+
data.tar.gz: 120891e5742804d8add5d9d938ec61f9105e10e78b17e1fa04d3d3a28e6e36f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d16b22f8a8b135ac6be68c8a9a5fcca6f10328661dd43d47a5b0dd47c2a744414693c8e8f51b475d9cb105832fe6e612e3f4b97c8ce955c9ba605a89cc720edd
|
7
|
+
data.tar.gz: 9173147b1cf006c63ecf2963b40b152f635ea3ea4f5a18efad12c76264022378b50c4d1ea759457868db22d6f7a7e6244f56af15ad600158beef9eb2f5603fc3
|
data/CHANGELOG.md
CHANGED
data/lib/pastee.rb
CHANGED
@@ -1,55 +1,158 @@
|
|
1
1
|
require 'httpclient'
|
2
2
|
require 'json'
|
3
|
-
require_relative 'errors'
|
3
|
+
require_relative 'pastee/errors'
|
4
|
+
require_relative 'pastee/paste'
|
5
|
+
require_relative 'pastee/syntax'
|
4
6
|
|
5
|
-
# This class contains interfaces to the standard Pastee API. For the beta API,
|
6
|
-
# use the PasteeBeta class.
|
7
7
|
class Pastee
|
8
|
+
BASE_URL = 'https://api.paste.ee/v1'.freeze
|
8
9
|
# Creates a new instance of Pastee.
|
9
|
-
# @param api_key
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
#
|
20
|
-
# @param
|
21
|
-
# @
|
22
|
-
# @
|
10
|
+
# @param api_key [String] The API key for this application.
|
11
|
+
def initialize(api_key)
|
12
|
+
@client = HTTPClient.new(
|
13
|
+
default_header: {
|
14
|
+
'X-Auth-Token' => api_key,
|
15
|
+
'Content-Type' => 'application/json'
|
16
|
+
}
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Obtains information for a Pastee syntax from its integer ID.
|
21
|
+
# @param id [Integer] The ID for this syntax.
|
22
|
+
# @return [Pastee::Syntax] The syntax object representative of this integer ID.
|
23
|
+
# @raise (see #throw_error)
|
24
|
+
def get_syntax(id)
|
25
|
+
uri = URI.parse("#{BASE_URL}/syntaxes/#{id}")
|
26
|
+
response = JSON.parse(@client.get(uri).body)
|
27
|
+
return Pastee::Syntax.new(response['syntax']) if response['success']
|
28
|
+
|
29
|
+
throw_error(response)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Obtains a list of valid Pastee syntaxes.
|
33
|
+
# @return [Array<Pastee::Syntax>] A list of syntax objects.
|
34
|
+
# @raise (see #throw_error)
|
35
|
+
def list_syntaxes
|
36
|
+
uri = URI.parse("#{BASE_URL}/syntaxes")
|
37
|
+
response = JSON.parse(@client.get(uri).body)
|
38
|
+
return response['syntaxes'].map { |obj| Pastee::Syntax.new(obj) } if response['success']
|
39
|
+
|
40
|
+
throw_error(response)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Gets paste information from its string ID.
|
44
|
+
# @param id [String] The paste ID to obtain information for.
|
45
|
+
# @return [Pastee::Paste] The paste that is tied to the provided ID.
|
46
|
+
# @raise (see #throw_error)
|
47
|
+
def get_paste(id)
|
48
|
+
uri = URI.parse("#{BASE_URL}/pastes/#{id}")
|
49
|
+
response = JSON.parse(@client.get(uri).body)
|
50
|
+
return Pastee::Paste.new(response['paste']) if response['success']
|
51
|
+
|
52
|
+
throw_error(response)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Submits a new paste to Pastee. Build a paste using Pastee::Paste and Pastee::Section and submit it. This new way of
|
56
|
+
# creating and submitting pastes is a little more convoluted than with the legacy (non-sectional) API, so use the
|
57
|
+
# following example as a guideline. {#submit_simple} is simpler and should be used for simple single-section pastes.
|
58
|
+
# @example
|
59
|
+
# section1 = Pastee::Paste::Section.new(
|
60
|
+
# name: 'section 1', # syntax defaults to autodetect
|
61
|
+
# contents: 'Some text!'
|
62
|
+
# )
|
63
|
+
# section2 = Pastee::Paste::Section.new(
|
64
|
+
# name: 'section 2',
|
65
|
+
# syntax: 'ruby',
|
66
|
+
# contents: File.read('lib/pastee.rb')
|
67
|
+
# )
|
68
|
+
# section3 = Pastee::Paste::Section.new(
|
69
|
+
# name: 'section 3',
|
70
|
+
# syntax: 'markdown',
|
71
|
+
# contents: File.read('README.md')
|
72
|
+
# )
|
73
|
+
# paste = Pastee::Paste.new(
|
74
|
+
# encrypted: true,
|
75
|
+
# description: 'super secret paste',
|
76
|
+
# sections: [
|
77
|
+
# section1,
|
78
|
+
# section2,
|
79
|
+
# section3
|
80
|
+
# ]
|
81
|
+
# )
|
82
|
+
# pastee.submit(paste)
|
83
|
+
# @param paste [Pastee::Paste] The paste (see example)
|
23
84
|
# @return [String] The paste ID.
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
85
|
+
# @raise (see #throw_error)
|
86
|
+
# @see #submit_simple
|
87
|
+
def submit(paste)
|
88
|
+
uri = URI.parse("#{BASE_URL}/pastes")
|
89
|
+
response = JSON.parse(@client.request(:post, uri, body: JSON.dump(paste.to_h)).body)
|
90
|
+
return response['id'] if response['success']
|
91
|
+
|
92
|
+
throw_error(response)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Simple submission method. Transforms a name and text into a proper single-Section Paste object and submits it.
|
96
|
+
# @param name [String] The paste's name.
|
97
|
+
# @param text [String] The paste text.
|
98
|
+
# @param encrypted [Boolean] Whether this paste should be treated as encrypted by pastee.
|
99
|
+
# @return (see #submit)
|
100
|
+
# @raise (see #throw_error)
|
101
|
+
def submit_simple(name, text, encrypted = false)
|
102
|
+
section = Pastee::Paste::Section.new(name: name, contents: text)
|
103
|
+
paste = Pastee::Paste.new(description: name, sections: [section], encrypted: encrypted)
|
104
|
+
submit(paste)
|
105
|
+
end
|
106
|
+
|
107
|
+
# Delete a paste.
|
108
|
+
# @param id [String] The paste ID to delete.
|
109
|
+
# @return [Boolean] True if it was successfully deleted.
|
110
|
+
# @raise (see #throw_error)
|
111
|
+
def delete(id)
|
112
|
+
uri = URI.parse("#{BASE_URL}/pastes/#{id}")
|
113
|
+
response = JSON.parse(@client.delete(uri).body)
|
114
|
+
return true if response['success']
|
115
|
+
|
116
|
+
throw_error(response)
|
117
|
+
end
|
118
|
+
|
119
|
+
# Get the user type for the currently authenticated user.
|
120
|
+
# @return [String] The user type.
|
121
|
+
# @raise (see #throw_error)
|
122
|
+
def get_user_type
|
123
|
+
uri = URI.parse("#{BASE_URL}/users/info")
|
124
|
+
response = JSON.parse(@client.get(uri).body)
|
125
|
+
return response['type'] if response['success']
|
126
|
+
|
127
|
+
throw_error(response)
|
43
128
|
end
|
44
129
|
|
45
130
|
private
|
46
131
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
132
|
+
# Determines and raises the right error according to the error code provided by the pastee API.
|
133
|
+
# @param response [Hash] The response object returned by the pastee API and parsed.
|
134
|
+
# @raise [Pastee::Errors::BadRequestError] on 400, 404, 405, and 406.
|
135
|
+
# @raise [Pastee::Errors::InvalidKeyError] on 401.
|
136
|
+
# @raise [Pastee::Errors::RequiresUserApplicationError] on 403.
|
137
|
+
# @raise [Pastee::Errors::TooManyRequestsError] on 429.
|
138
|
+
# @raise [Pastee::Errors::InternalServerError] on 500.
|
139
|
+
# @raise [Pastee::Errors::ServiceUnavailableError] on 503.
|
140
|
+
# @raise [Pastee::Errors::UnknownError] if the error code is not recognized.
|
141
|
+
def throw_error(response)
|
142
|
+
error = response['errors'][0]
|
143
|
+
error_code = error['code']
|
144
|
+
error_msg = error['message']
|
145
|
+
case error_code
|
146
|
+
when 400 then raise Pastee::Errors::BadRequestError.new(error_code)
|
147
|
+
when 401 then raise Pastee::Errors::InvalidKeyError
|
148
|
+
when 403 then raise Pastee::Errors::RequiresUserApplicationError
|
149
|
+
when 404 then raise Pastee::Errors::BadRequestError.new(error_code)
|
150
|
+
when 405 then raise Pastee::Errors::BadRequestError.new(error_code)
|
151
|
+
when 406 then raise Pastee::Errors::BadRequestError.new(error_code)
|
152
|
+
when 429 then raise Pastee::Errors::TooManyRequestsError
|
153
|
+
when 500 then raise Pastee::Errors::InternalServerError
|
154
|
+
when 503 then raise Pastee::Errors::ServiceUnavailableError
|
155
|
+
else raise Pastee::Errors::UnknownError.new(error_code, error_msg)
|
53
156
|
end
|
54
157
|
end
|
55
158
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class Pastee
|
2
|
+
class Errors
|
3
|
+
# Error for an unrecognized error code from the API.
|
4
|
+
class UnknownError < StandardError
|
5
|
+
def initialize(error_code, error_msg)
|
6
|
+
@error_code = error_code
|
7
|
+
@error_msg = error_msg
|
8
|
+
end
|
9
|
+
|
10
|
+
def message
|
11
|
+
"Error code #{@error_code} (unknown): #{@error_msg}. Please report this unknown error to the developers of the pastee gem."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Error for error codes 400, 404, 405, and 406.
|
16
|
+
class BadRequestError < StandardError
|
17
|
+
def initialize(code)
|
18
|
+
@code = code
|
19
|
+
end
|
20
|
+
|
21
|
+
def message
|
22
|
+
"Error code #{@code}: Bad request."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Error for error code 401.
|
27
|
+
class InvalidKeyError < StandardError
|
28
|
+
def message
|
29
|
+
'Error code 401: The key provided was invalid.'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Error for error code 403.
|
34
|
+
class RequiresUserApplicationError < StandardError
|
35
|
+
def message
|
36
|
+
'Error code 403: This resource requires a UserApplication.'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Error for error code 429.
|
41
|
+
class TooManyRequestsError < StandardError
|
42
|
+
def message
|
43
|
+
'Error code 429: Too many pastes have been submitted with the given API key.'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Error for error code 500.
|
48
|
+
class InternalServerError < StandardError
|
49
|
+
def message
|
50
|
+
'Error code 500: There was a problem with the Pastee server.'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Error for error code 503.
|
55
|
+
class ServiceUnavailableError < StandardError
|
56
|
+
def message
|
57
|
+
'Error code 503: The service is temporarily offline for maintenance.'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/pastee/paste.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
class Pastee
|
2
|
+
# Wrapper class for pastes.
|
3
|
+
class Paste
|
4
|
+
# @return [Integer] The paste's ID.
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
# @return [String] The paste's description.
|
8
|
+
attr_reader :description
|
9
|
+
|
10
|
+
# @return [Integer] How many views the paste has.
|
11
|
+
attr_reader :views
|
12
|
+
|
13
|
+
# @return [DateTime] When this paste was created.
|
14
|
+
attr_reader :created_at
|
15
|
+
|
16
|
+
# @return [DateTime, NilClass] When this paste will expire, or nil if it never expires.
|
17
|
+
attr_reader :expires_at
|
18
|
+
|
19
|
+
# @return [Array<Pastee::Section>] An array of Sections for this paste.
|
20
|
+
attr_reader :sections
|
21
|
+
|
22
|
+
# Create a new Paste object. Used when creating new pastes and when getting existing pastes. For creating new
|
23
|
+
# pastes, you only need to provide the description and sections, and optionally encrypted (defaults to false). The
|
24
|
+
# rest will be created automatically by the pastee API. ID, views, created_at, and expires_at are created by pastee,
|
25
|
+
# they are only here for receiving paste objects.
|
26
|
+
# @param opts [Hash] Options hash. Keys can either be strings or symbols — they will be converted to symbols.
|
27
|
+
# @option opts [String] :id Paste ID.
|
28
|
+
# @option opts [Boolean] :encrypted Whether this paste is treated as encrypted. Pastee does not actually encrypt
|
29
|
+
# pastes, this only affects how it appears on the website.
|
30
|
+
# @option opts [String] :description The paste's description or name.
|
31
|
+
# @option opts [Integer] :views How many times this paste has been viewed.
|
32
|
+
# @option opts [String] :created_at When this paste was created, in string form. Is parsed into a DateTime.
|
33
|
+
# @option opts [String] :expires_at When this paste expires, in string form. Is parsed into a DateTime.
|
34
|
+
# @option opts [Array] :sections An array either of Section objects (if you are creating a new paste) or a hash
|
35
|
+
# object (returned by the pastee API) to be turned into a Section object.
|
36
|
+
def initialize(opts = {})
|
37
|
+
# Standardize keys so that both the pastee API (which uses strings) and pastee-rb consumers (who use symbols) can
|
38
|
+
# both use this method.
|
39
|
+
opts = Hash[opts.map { |k, v| [k.to_sym, v] }]
|
40
|
+
|
41
|
+
@id = opts[:id]
|
42
|
+
@encrypted = opts[:encrypted] || false
|
43
|
+
@description = opts[:description]
|
44
|
+
@views = opts[:views]
|
45
|
+
@created_at = DateTime.parse(opts[:created_at]) if opts[:created_at]
|
46
|
+
@expires_at = DateTime.parse(opts[:expires_at]) if opts[:expires_at]
|
47
|
+
# For creating our own pastes
|
48
|
+
@sections = opts[:sections][0].is_a?(Section) ? opts[:sections] : opts[:sections].map { |o| Section.new(o) }
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean] Whether this paste is encrypted.
|
52
|
+
def encrypted?
|
53
|
+
@encrypted
|
54
|
+
end
|
55
|
+
|
56
|
+
# Converts this to a hash object. Used in submitting pastes.
|
57
|
+
# @return [Hash]
|
58
|
+
def to_h
|
59
|
+
hash = {
|
60
|
+
description: description,
|
61
|
+
sections: sections.map(&:to_h)
|
62
|
+
}
|
63
|
+
hash[:id] = id if id
|
64
|
+
hash[:encrypted] = encrypted?
|
65
|
+
hash[:views] = views if views
|
66
|
+
hash[:created_at] = created_at if created_at
|
67
|
+
hash[:expires_at] = expires_at if expires_at
|
68
|
+
|
69
|
+
hash
|
70
|
+
end
|
71
|
+
|
72
|
+
# Wrapper class for paste sections.
|
73
|
+
class Section
|
74
|
+
# @return [Integer] The ID for this section.
|
75
|
+
attr_reader :id
|
76
|
+
|
77
|
+
# @return [String] The short name of the syntax used in this section.
|
78
|
+
attr_reader :syntax
|
79
|
+
|
80
|
+
# @return [String] The name of the section.
|
81
|
+
attr_reader :name
|
82
|
+
|
83
|
+
# @return [String] Contents of the section.
|
84
|
+
attr_reader :contents
|
85
|
+
|
86
|
+
# @return [Integer] Size of the section in bytes.
|
87
|
+
attr_reader :size
|
88
|
+
|
89
|
+
# Create a new Section object. Used when creating new pastes and when getting existing pastes. For creating new
|
90
|
+
# pastes, you only need to provide the name and contents and optionally syntax. The rest will be created
|
91
|
+
# automatically by the pastee API or by our {#to_h} method (syntax defaults to "autodetect"). ID and size are
|
92
|
+
# created by pastee, they are only here for receiving paste objects.
|
93
|
+
# @param opts [Hash] Options hash. Keys can either be strings or symbols — they will be converted to symbols.
|
94
|
+
# @option opts [Integer] :id Section ID.
|
95
|
+
# @option opts [String] :syntax The syntax short name for this section.
|
96
|
+
# @option opts [String] :name The name of this section.
|
97
|
+
# @option opts [String] :contents The contents of this section.
|
98
|
+
# @option opts [Integer] :size The size of this section.
|
99
|
+
def initialize(opts = {})
|
100
|
+
# Standardize keys so that both the pastee API (which uses strings) and pastee-rb consumers (who use symbols) can
|
101
|
+
# both use this method.
|
102
|
+
opts = Hash[opts.map { |k, v| [k.to_sym, v] }]
|
103
|
+
|
104
|
+
@id = opts[:id]
|
105
|
+
@syntax = opts[:syntax]
|
106
|
+
@name = opts[:name]
|
107
|
+
@contents = opts[:contents]
|
108
|
+
@size = opts[:size]
|
109
|
+
end
|
110
|
+
|
111
|
+
# Converts this to a hash object. Used in submitting pastes.
|
112
|
+
# @return [Hash]
|
113
|
+
def to_h
|
114
|
+
hash = {
|
115
|
+
name: name,
|
116
|
+
contents: contents
|
117
|
+
}
|
118
|
+
hash[:id] = id if id
|
119
|
+
hash[:syntax] = syntax || 'autodetect'
|
120
|
+
hash[:size] = size if size
|
121
|
+
|
122
|
+
hash
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Pastee
|
2
|
+
class Syntax
|
3
|
+
# @return [Integer]
|
4
|
+
attr_reader :id
|
5
|
+
|
6
|
+
# @return [String]
|
7
|
+
attr_reader :short_name
|
8
|
+
|
9
|
+
# @return [String]
|
10
|
+
attr_reader :full_name
|
11
|
+
|
12
|
+
# Creates a new object representing a Syntax on the Pastee website.
|
13
|
+
# @param opts [Hash<String, Object>] The options hash. This is usually obtained by the Pastee API.
|
14
|
+
# @option opts [Integer] 'id' The integer ID for this syntax.
|
15
|
+
# @option opts [String] 'short' The shortened name for the syntax.
|
16
|
+
# @option opts [String] 'name' The full name for the syntax.
|
17
|
+
def initialize(opts = {})
|
18
|
+
@id = opts['id']
|
19
|
+
@short_name = opts['short']
|
20
|
+
@full_name = opts['name']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pastee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eli Foster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
@@ -32,15 +32,18 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- CHANGELOG.md
|
35
|
-
- lib/errors.rb
|
36
35
|
- lib/pastee.rb
|
37
|
-
- lib/
|
38
|
-
- lib/
|
36
|
+
- lib/pastee/errors.rb
|
37
|
+
- lib/pastee/paste.rb
|
38
|
+
- lib/pastee/syntax.rb
|
39
39
|
homepage: https://github.com/elifoster/pasteee-rb
|
40
40
|
licenses:
|
41
41
|
- MIT
|
42
42
|
metadata:
|
43
|
-
|
43
|
+
bug_tracker_uri: https://github.com/elifoster/pastee-rb/issues
|
44
|
+
changelog_uri: https://elifoster.github.io/pastee-rb/file.CHANGELOG.html
|
45
|
+
documentation_uri: https://elifoster.github.io/pastee-rb
|
46
|
+
source_code_uri: https://github.com/elifoster/pastee-rb
|
44
47
|
post_install_message:
|
45
48
|
rdoc_options: []
|
46
49
|
require_paths:
|
@@ -56,8 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
59
|
- !ruby/object:Gem::Version
|
57
60
|
version: '0'
|
58
61
|
requirements: []
|
59
|
-
|
60
|
-
rubygems_version: 2.5.1
|
62
|
+
rubygems_version: 3.1.3
|
61
63
|
signing_key:
|
62
64
|
specification_version: 4
|
63
65
|
summary: A simple interface to the paste.ee API
|
data/lib/errors.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
class Pastee
|
2
|
-
class Errors
|
3
|
-
class NoKeyError < StandardError
|
4
|
-
def message
|
5
|
-
'Error code 1: No key was provided.'
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class NoPasteError < StandardError
|
10
|
-
def message
|
11
|
-
'Error code 2: No paste content was provided.'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class InvalidKeyError < StandardError
|
16
|
-
def message
|
17
|
-
'Error code 3: The key provided was invalid.'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class InvalidLanguageError < StandardError
|
22
|
-
def message
|
23
|
-
'Error code 4: The syntax highlighting language provided was invalid.'
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Beta
|
28
|
-
class MustUseBetaError < StandardError
|
29
|
-
def message
|
30
|
-
'You must be using the Beta API for this action.'
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class UnauthorizedError < StandardError
|
35
|
-
def message
|
36
|
-
'The provided API key is incorrect.'
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
class UndefinedApplicationKeyError < StandardError
|
41
|
-
def message
|
42
|
-
'You must provide an application key.'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class InvalidAppKeyError < StandardError
|
47
|
-
def message
|
48
|
-
'The application key provided is invalid.'
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
class InvalidFieldError < StandardError
|
53
|
-
def initialize(msg, field)
|
54
|
-
super(msg)
|
55
|
-
@field = field
|
56
|
-
end
|
57
|
-
|
58
|
-
def message
|
59
|
-
msg
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
class RequiresUserApplicationError < StandardError
|
64
|
-
def message
|
65
|
-
'This resource requires a UserApplication.'
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class InvalidMethodError < StandardError
|
70
|
-
def message
|
71
|
-
'The endpoint was requested with an invalid method.'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
class InvalidFormatError < StandardError
|
76
|
-
def message
|
77
|
-
'The request was in a format other than XML or JSON.'
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
class TooManyRequestsError < StandardError
|
82
|
-
def message
|
83
|
-
'Too many pastes have been submitted with the given API key.'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
class InternalServerError < StandardError
|
88
|
-
def message
|
89
|
-
'There was a problem with the Pastee server.'
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
class ServiceUnavailableError < StandardError
|
94
|
-
def message
|
95
|
-
'The service is temporarily offline for maintenance.'
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
data/lib/pastee_beta.rb
DELETED
@@ -1,190 +0,0 @@
|
|
1
|
-
require 'httpclient'
|
2
|
-
require 'json'
|
3
|
-
require_relative 'syntax'
|
4
|
-
|
5
|
-
# Base class for the Pastee Beta API. Provides interfaces to all of the beta
|
6
|
-
# APIs. Will eventually be transferred to the Pastee class once the API is
|
7
|
-
# out of beta.
|
8
|
-
# @author Eli Clemente Gordillo Foster
|
9
|
-
# @since 2.0.0
|
10
|
-
class PasteeBeta
|
11
|
-
URL = 'https://api.beta.paste.ee'.freeze
|
12
|
-
|
13
|
-
# Initializes the PasteeBeta instance.
|
14
|
-
# @author Eli Clemente Gordillo Foster
|
15
|
-
# @param [String] The Application or UserApplication key. This can be changed
|
16
|
-
# with #set_new_key.
|
17
|
-
# @return [void]
|
18
|
-
def initialize(api_key)
|
19
|
-
@key = api_key
|
20
|
-
@client = HTTPClient.new
|
21
|
-
@client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
22
|
-
end
|
23
|
-
|
24
|
-
# Resets the API key to a new value. Useful for when, for example, the
|
25
|
-
# UserApplication key is needed and not the base Application key.
|
26
|
-
# @author Eli Clemente Gordillo Foster
|
27
|
-
# @param [String] The new key to use.
|
28
|
-
# @return [void]
|
29
|
-
def set_new_key(new_key)
|
30
|
-
@key = new_key
|
31
|
-
end
|
32
|
-
|
33
|
-
# Submits a new paste to the Pastee Beta website.
|
34
|
-
# @author Eli Clemente Gordillo Foster
|
35
|
-
# @param [String] The paste contents.
|
36
|
-
# @param [String] The paste description.
|
37
|
-
# @param [String] The paste's name.
|
38
|
-
# @param [Boolean] Whether the paste is encrypted.
|
39
|
-
# @param [String] The syntax highlight language. It is recommended to use the
|
40
|
-
# constants in PasteeBeta::Constants::Syntax in order to avoid errors.
|
41
|
-
# @return [String] The new paste's ID.
|
42
|
-
def submit(paste, description, name, encrypted = false,
|
43
|
-
language = PasteeBeta::Constants::Syntax::AUTODETECT)
|
44
|
-
params = {
|
45
|
-
description: description,
|
46
|
-
sections: [
|
47
|
-
{
|
48
|
-
name: name,
|
49
|
-
syntax: language,
|
50
|
-
contents: paste
|
51
|
-
}
|
52
|
-
]
|
53
|
-
}
|
54
|
-
params[:encrypted] = encrypted ? 1 : 0
|
55
|
-
json = post('pastes'.freeze, params)
|
56
|
-
json['id']
|
57
|
-
end
|
58
|
-
|
59
|
-
# Gets the UserApplication key for the provided user.
|
60
|
-
# @author Eli Clemente Gordillo Foster
|
61
|
-
# @param [String] The user's login handle.
|
62
|
-
# @param [String] The password for that user.
|
63
|
-
# @return [String] The user's UserApplication key.
|
64
|
-
def get_user_key(username, password)
|
65
|
-
params = {
|
66
|
-
username: username,
|
67
|
-
password: password
|
68
|
-
}
|
69
|
-
post('users/authenticate', params)['key']
|
70
|
-
end
|
71
|
-
|
72
|
-
# Gets the current API type.
|
73
|
-
# @return [String] Either "Application" or "UserApplication".
|
74
|
-
def get_api_key_type
|
75
|
-
get('users/info')['type']
|
76
|
-
end
|
77
|
-
|
78
|
-
# Gets a list of paste IDs.
|
79
|
-
# @author Eli Clemente Gordillo Foster
|
80
|
-
# @param [Integer] The number of entries to get per page.
|
81
|
-
# @param [Integer] The page number to begin at.
|
82
|
-
# @return [Array<String>] All paste IDs in that page.
|
83
|
-
def list_pastes(perpage = 25, page = 1)
|
84
|
-
params = {
|
85
|
-
perpage: perpage,
|
86
|
-
page: page,
|
87
|
-
key: @key
|
88
|
-
}
|
89
|
-
json = get('pastes', params)
|
90
|
-
ret = []
|
91
|
-
json['data'].each do |h|
|
92
|
-
ret << h['id']
|
93
|
-
end
|
94
|
-
ret
|
95
|
-
end
|
96
|
-
|
97
|
-
# Gets information about a paste.
|
98
|
-
# @author Eli Clemente Gordillo Foster
|
99
|
-
# @param [String] The paste ID.
|
100
|
-
# @return [Hash] The information for the paste, including id,
|
101
|
-
# encryption (boolean), description, view count, creation date, expiration
|
102
|
-
# date, and the sections.
|
103
|
-
def get_paste(id)
|
104
|
-
get("pastes/#{id}")['paste']
|
105
|
-
end
|
106
|
-
|
107
|
-
# Deletes a paste permanently.
|
108
|
-
# @author Eli Clemente Gordillo Foster
|
109
|
-
# @param [String] The paste ID.
|
110
|
-
# @return [void]
|
111
|
-
def delete_paste(id)
|
112
|
-
uri = URI.parse(URI.encode("#{URL}/v1/pastes/#{id}"))
|
113
|
-
response = @client.delete(uri, key: @key)
|
114
|
-
json = JSON.parse(response.body)
|
115
|
-
throw_error(json['errors'][0]['message']) unless json['success']
|
116
|
-
end
|
117
|
-
|
118
|
-
private
|
119
|
-
|
120
|
-
# Throws the according error based on the error message provided by the API.
|
121
|
-
# @author Eli Clemente Gordillo Foster
|
122
|
-
# @private
|
123
|
-
# @param [String] The error message provided by the API.
|
124
|
-
# @param [String] The field error parameter.
|
125
|
-
# @raise [UndefinedApplicationKeyError] When the application key is nil.
|
126
|
-
# @return [void]
|
127
|
-
def fail_with(message, field = nil)
|
128
|
-
case message
|
129
|
-
when 'No application key supplied.'
|
130
|
-
fail Pastee::Errors::Beta::UndefinedApplicationKeyError
|
131
|
-
when "The selected #{field} is invalid." && !field.nil?
|
132
|
-
fail Pastee::Errors::Beta::InvalidFieldError.new("The field #{field} is" \
|
133
|
-
' invalid.', field)
|
134
|
-
when 'No application key supplied.'
|
135
|
-
fail Pastee::Errors::Beta::UndefinedApplicationKeyError
|
136
|
-
when 'NotUserApplication'
|
137
|
-
fail Pastee::Errors::Beta::RequiresUserApplicationError
|
138
|
-
when 'Invalid application key.'
|
139
|
-
fail Pastee::Errors::Beta::InvalidAppKeyError
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
# Throws an error based on the error hash provided by the Pastee API.
|
144
|
-
# @author Eli Clemente Gordillo Foster
|
145
|
-
# @see #fail_with.
|
146
|
-
# @private
|
147
|
-
# @param [Hash] The error field provided by the API.
|
148
|
-
# @return [void]
|
149
|
-
def throw_error(errors)
|
150
|
-
message = errors[0]['message']
|
151
|
-
field = errors[0]['field'] if defined? errors[0]['field']
|
152
|
-
fail_with(message, field)
|
153
|
-
end
|
154
|
-
|
155
|
-
# Performs a generic GET request. Authentication is handled automatically.
|
156
|
-
# @param url_suffix [String] Everything after v1/ for the particular API.
|
157
|
-
# @param params [Hash] The HTTP parameters.
|
158
|
-
# @param header [Hash] Non-Auth header key/value pairs.
|
159
|
-
# @return [JSON] The successful response as a JSON.
|
160
|
-
def get(url_suffix, params = {}, header = {})
|
161
|
-
uri = URI.parse(URI.encode("#{URL}/v1/#{url_suffix}"))
|
162
|
-
header['X-Auth-Token'] = @key
|
163
|
-
response = @client.get(uri, params, header)
|
164
|
-
json = JSON.parse(response.body)
|
165
|
-
if json['success']
|
166
|
-
return json
|
167
|
-
else
|
168
|
-
throw_error(json['errors'])
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
# Performs a generic POST requests. Authentication and content-types are
|
173
|
-
# handled automatically.
|
174
|
-
# @param url_suffix [String] See #get
|
175
|
-
# @param params [Hash] See #get
|
176
|
-
# @param header [Hash] See #get
|
177
|
-
# @return [JSON] See #get
|
178
|
-
def post(url_suffix, params = {}, header = {})
|
179
|
-
uri = URI.parse(URI.encode("#{URL}/v1/#{url_suffix}"))
|
180
|
-
header['X-Auth-Token'] = @key
|
181
|
-
header['Content-Type'] = 'application/json'
|
182
|
-
response = @client.post(uri, params.to_json, header)
|
183
|
-
json = JSON.parse(response.body)
|
184
|
-
if json['success']
|
185
|
-
return json
|
186
|
-
else
|
187
|
-
throw_error(json['errors'])
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
data/lib/syntax.rb
DELETED
@@ -1,422 +0,0 @@
|
|
1
|
-
class PasteeBeta
|
2
|
-
module Constants
|
3
|
-
module Syntax
|
4
|
-
# 1C
|
5
|
-
ONEC = '1c'.freeze
|
6
|
-
|
7
|
-
# Access log
|
8
|
-
ACCESS_LOG = 'accesslog'.freeze
|
9
|
-
|
10
|
-
# Apache
|
11
|
-
APACHE = 'apache'.freeze
|
12
|
-
|
13
|
-
# AppleScript
|
14
|
-
APPLESCRIPT = 'applescript'.freeze
|
15
|
-
|
16
|
-
# ARM Assembly
|
17
|
-
ARM_ASSEMBLY = 'armasm'.freeze
|
18
|
-
|
19
|
-
# AsciiDoc
|
20
|
-
ASCIIDOC = 'asciidoc'.freeze
|
21
|
-
|
22
|
-
# AspectJ
|
23
|
-
ASPECTJ = 'aspectj'.freeze
|
24
|
-
|
25
|
-
# Auto Detect
|
26
|
-
AUTODETECT = 'autodetect'.freeze
|
27
|
-
|
28
|
-
# AutoHotkey
|
29
|
-
AUTOHOTKEY = 'autohotkey'.freeze
|
30
|
-
|
31
|
-
# AutoIt
|
32
|
-
AUTOIT = 'autoit'.freeze
|
33
|
-
|
34
|
-
# AVR Assembler
|
35
|
-
AVRASM = 'avrasm'.freeze
|
36
|
-
|
37
|
-
# Axapta
|
38
|
-
AXAPTA = 'axapta'.freeze
|
39
|
-
|
40
|
-
# Bash
|
41
|
-
BASH = 'bash'.freeze
|
42
|
-
|
43
|
-
# Brainfuck
|
44
|
-
BRAINFUCK = 'brainfuck'.freeze
|
45
|
-
|
46
|
-
# C#
|
47
|
-
CSHARP = 'cs'.freeze
|
48
|
-
|
49
|
-
# C++
|
50
|
-
CPLUSPLUS = 'cpp'.freeze
|
51
|
-
|
52
|
-
# C/AL
|
53
|
-
CAL = 'cal'.freeze
|
54
|
-
|
55
|
-
# Cap'n Proto
|
56
|
-
CAPNPROTO = 'capnproto'.freeze
|
57
|
-
|
58
|
-
# Ceylon
|
59
|
-
CEYLON = 'ceylon'.freeze
|
60
|
-
|
61
|
-
# Clojure
|
62
|
-
CLOJURE = 'clojure'.freeze
|
63
|
-
|
64
|
-
# Clojure REPL
|
65
|
-
CLOJURE_REPL = 'clojure-repl'.freeze
|
66
|
-
|
67
|
-
# CMake
|
68
|
-
CMAKE = 'cmake'.freeze
|
69
|
-
|
70
|
-
# CoffeeScript
|
71
|
-
COFFEESCRIPT = 'coffeescript'.freeze
|
72
|
-
|
73
|
-
# crmsh
|
74
|
-
CRMSH = 'crmsh'.freeze
|
75
|
-
|
76
|
-
# Crystal
|
77
|
-
CRYSTAL = 'crystal'.freeze
|
78
|
-
|
79
|
-
# CSS
|
80
|
-
CSS = 'css'.freeze
|
81
|
-
|
82
|
-
# D
|
83
|
-
D = 'd'.freeze
|
84
|
-
|
85
|
-
# Dart
|
86
|
-
DART = 'dart'.freeze
|
87
|
-
|
88
|
-
# Delphi
|
89
|
-
DELPHI = 'delphi'.freeze
|
90
|
-
|
91
|
-
# Diff
|
92
|
-
DIFF = 'diff'.freeze
|
93
|
-
|
94
|
-
# Django
|
95
|
-
DJANGO = 'django'.freeze
|
96
|
-
|
97
|
-
# DNS Zone file
|
98
|
-
DNS = 'dns'.freeze
|
99
|
-
|
100
|
-
# Dockerfile
|
101
|
-
DOCKERFILE = 'dockerfile'.freeze
|
102
|
-
|
103
|
-
# DOS .bat
|
104
|
-
DOSBAT = 'dos'.freeze
|
105
|
-
|
106
|
-
# Dust
|
107
|
-
DUST = 'dust'.freeze
|
108
|
-
|
109
|
-
# Elixir
|
110
|
-
ELIXIR = 'elixir'.freeze
|
111
|
-
|
112
|
-
# Elm
|
113
|
-
ELM = 'elm'.freeze
|
114
|
-
|
115
|
-
# ERB (Embedded Ruby)
|
116
|
-
ERB = 'erb'.freeze
|
117
|
-
|
118
|
-
# Erlang
|
119
|
-
ERLANG = 'erlang'.freeze
|
120
|
-
|
121
|
-
# Erlang REPL
|
122
|
-
ERLANG_REPL = 'erlang-repl'.freeze
|
123
|
-
|
124
|
-
# F#
|
125
|
-
FSHARP = 'fsharp'.freeze
|
126
|
-
|
127
|
-
# FIX
|
128
|
-
FIX = 'fix'.freeze
|
129
|
-
|
130
|
-
# Fortran
|
131
|
-
FORTRAN = 'fortran'.freeze
|
132
|
-
|
133
|
-
# GAMS
|
134
|
-
GAMS = 'gams'.freeze
|
135
|
-
|
136
|
-
# G-Code (ISO 6983)
|
137
|
-
GCODE = 'gcode'.freeze
|
138
|
-
|
139
|
-
# Gherkin
|
140
|
-
GHERKIN = 'gherkin'.freeze
|
141
|
-
|
142
|
-
# GLSL
|
143
|
-
GLSL = 'glsl'.freeze
|
144
|
-
|
145
|
-
# Go
|
146
|
-
GO = 'go'.freeze
|
147
|
-
|
148
|
-
# Golo
|
149
|
-
GOLO = 'golo'.freeze
|
150
|
-
|
151
|
-
# Gradle
|
152
|
-
GRADLE = 'gradle'.freeze
|
153
|
-
|
154
|
-
# Groovy
|
155
|
-
GROOVY = 'groovy'.freeze
|
156
|
-
|
157
|
-
# Haml
|
158
|
-
HAML = 'haml'.freeze
|
159
|
-
|
160
|
-
# Handlebars
|
161
|
-
HANDLEBARS = 'handlebars'.freeze
|
162
|
-
|
163
|
-
# Haskell
|
164
|
-
HASKELL = 'haskell'.freeze
|
165
|
-
|
166
|
-
# Haxe
|
167
|
-
HAXE = 'haxe'.freeze
|
168
|
-
|
169
|
-
# HTML, XML
|
170
|
-
XML = 'xml'.freeze
|
171
|
-
|
172
|
-
# HTTP
|
173
|
-
HTTP = 'http'.freeze
|
174
|
-
|
175
|
-
# Inform 7
|
176
|
-
INFORM7 = 'inform7'.freeze
|
177
|
-
|
178
|
-
# Ini
|
179
|
-
INI = 'ini'.freeze
|
180
|
-
|
181
|
-
# Intel x86 Assembly
|
182
|
-
INTEL_X86_ASSEMBLY = 'x86asm'.freeze
|
183
|
-
|
184
|
-
# IRPF90
|
185
|
-
IRPF90 = 'irpf90'.freeze
|
186
|
-
|
187
|
-
# Java
|
188
|
-
JAVA = 'java'.freeze
|
189
|
-
|
190
|
-
# JavaScript
|
191
|
-
JAVASCRIPT = 'javascript'.freeze
|
192
|
-
|
193
|
-
# JSON
|
194
|
-
JSON = 'json'.freeze
|
195
|
-
|
196
|
-
# Julia
|
197
|
-
JULIA = 'julia'.freeze
|
198
|
-
|
199
|
-
# Kotlin
|
200
|
-
KOTLIN = 'kotlin'.freeze
|
201
|
-
|
202
|
-
# Lasso
|
203
|
-
LASSO = 'lasso'.freeze
|
204
|
-
|
205
|
-
# Less
|
206
|
-
LESS = 'less'.freeze
|
207
|
-
|
208
|
-
# Lisp
|
209
|
-
LISP = 'lisp'.freeze
|
210
|
-
|
211
|
-
# LiveCode
|
212
|
-
LIVECODE = 'livecodeserver'.freeze
|
213
|
-
|
214
|
-
# LiveScript
|
215
|
-
LIVESCRIPT = 'livescript'.freeze
|
216
|
-
|
217
|
-
# Lua
|
218
|
-
LUA = 'lua'.freeze
|
219
|
-
|
220
|
-
# Makefile
|
221
|
-
MAKEFILE = 'makefile'.freeze
|
222
|
-
|
223
|
-
# Markdown
|
224
|
-
MARKDOWN = 'markdown'.freeze
|
225
|
-
|
226
|
-
# Mathematica
|
227
|
-
MATHEMATICA = 'mathematica'.freeze
|
228
|
-
|
229
|
-
# Matlab
|
230
|
-
MATLAB = 'matlab'.freeze
|
231
|
-
|
232
|
-
# MEL
|
233
|
-
MEL = 'mel'.freeze
|
234
|
-
|
235
|
-
# Mercury
|
236
|
-
MERCURY = 'mercury'.freeze
|
237
|
-
|
238
|
-
# Mizar
|
239
|
-
MIZAR = 'mizar'.freeze
|
240
|
-
|
241
|
-
# Mojolicious
|
242
|
-
MOJO = 'mojolicious'.freeze
|
243
|
-
|
244
|
-
# Monkey
|
245
|
-
MONKEY = 'monkey'.freeze
|
246
|
-
|
247
|
-
# Nginx
|
248
|
-
NGINX = 'nginx'.freeze
|
249
|
-
|
250
|
-
# Nimrod
|
251
|
-
NIMROD = 'nimrod'.freeze
|
252
|
-
|
253
|
-
# Nix
|
254
|
-
NIX = 'nix'.freeze
|
255
|
-
|
256
|
-
# NSIS
|
257
|
-
NSIS = 'nsis'.freeze
|
258
|
-
|
259
|
-
# Objective C
|
260
|
-
OBJECTIVE_C = 'objectivec'.freeze
|
261
|
-
|
262
|
-
# OCaml
|
263
|
-
OCAML = 'ocaml'.freeze
|
264
|
-
|
265
|
-
# OpenSCAD
|
266
|
-
OPENSCAD = 'openscad'.freeze
|
267
|
-
|
268
|
-
# Oracle Rules Language
|
269
|
-
ORACLE_RULES = 'ruleslanguage'.freeze
|
270
|
-
|
271
|
-
# Oxygene
|
272
|
-
OXYGENE = 'oxygene'.freeze
|
273
|
-
|
274
|
-
# Parser3
|
275
|
-
PARSER3 = 'parser3'.freeze
|
276
|
-
|
277
|
-
# Perl
|
278
|
-
PERL = 'perl'.freeze
|
279
|
-
|
280
|
-
# pf
|
281
|
-
PF = 'pf'.freeze
|
282
|
-
|
283
|
-
# PHP
|
284
|
-
PHP = 'php'.freeze
|
285
|
-
|
286
|
-
# PowerShell
|
287
|
-
POWERSHELL = 'powershell'.freeze
|
288
|
-
|
289
|
-
# Processing
|
290
|
-
PROCESSING = 'processing'.freeze
|
291
|
-
|
292
|
-
# Prolog
|
293
|
-
PROLOG = 'prolog'.freeze
|
294
|
-
|
295
|
-
# Protocol Buffers
|
296
|
-
PROTOCOL_BUFFERS = 'protobuf'.freeze
|
297
|
-
|
298
|
-
# Puppet
|
299
|
-
PUPPET = 'puppet'.freeze
|
300
|
-
|
301
|
-
# Python
|
302
|
-
PYTHON = 'python'.freeze
|
303
|
-
|
304
|
-
# Python profile
|
305
|
-
PYTHON_PROFILE = 'profile'.freeze
|
306
|
-
|
307
|
-
# Q
|
308
|
-
Q = 'q'.freeze
|
309
|
-
|
310
|
-
# R
|
311
|
-
R = 'r'.freeze
|
312
|
-
|
313
|
-
# RenderMan RIB
|
314
|
-
RENDERMAN_RIB = 'rib'.freeze
|
315
|
-
|
316
|
-
# RenderMan RSL
|
317
|
-
RENDERMAN_RSL = 'rsl'.freeze
|
318
|
-
|
319
|
-
# Roboconf
|
320
|
-
ROBOCONF = 'roboconf'.freeze
|
321
|
-
|
322
|
-
# Ruby
|
323
|
-
RUBY = 'ruby'.freeze
|
324
|
-
|
325
|
-
# Rust
|
326
|
-
RUST = 'rust'.freeze
|
327
|
-
|
328
|
-
# Scala
|
329
|
-
SCALA = 'scala'.freeze
|
330
|
-
|
331
|
-
# Scheme
|
332
|
-
SCHEME = 'scheme'.freeze
|
333
|
-
|
334
|
-
# Scilab
|
335
|
-
SCILAB = 'scilab'.freeze
|
336
|
-
|
337
|
-
# SCSS
|
338
|
-
SCSS = 'scss'.freeze
|
339
|
-
|
340
|
-
# Smali
|
341
|
-
SMALI = 'smali'.freeze
|
342
|
-
|
343
|
-
# Smalltalk
|
344
|
-
SMALLTALK = 'smalltalk'.freeze
|
345
|
-
|
346
|
-
# SML
|
347
|
-
SML = 'sml'.freeze
|
348
|
-
|
349
|
-
# SQF
|
350
|
-
SQF = 'sqf'.freeze
|
351
|
-
|
352
|
-
# SQL
|
353
|
-
SQL = 'sql'.freeze
|
354
|
-
|
355
|
-
# Stata
|
356
|
-
STATA = 'stata'.freeze
|
357
|
-
|
358
|
-
# STEP Part 21 (ISO 10303-21)
|
359
|
-
STEP = 'step21'.freeze
|
360
|
-
|
361
|
-
# Stylus
|
362
|
-
STYLUS = 'stylus'.freeze
|
363
|
-
|
364
|
-
# Swift
|
365
|
-
SWIFT = 'swift'.freeze
|
366
|
-
|
367
|
-
# Tcl
|
368
|
-
TCL = 'tcl'.freeze
|
369
|
-
|
370
|
-
# TeX
|
371
|
-
TEX = 'tex'.freeze
|
372
|
-
|
373
|
-
# Text
|
374
|
-
TEXT = 'text'.freeze
|
375
|
-
|
376
|
-
# Thrift
|
377
|
-
THRIFT = 'thrift'.freeze
|
378
|
-
|
379
|
-
# TP
|
380
|
-
TP = 'tp'.freeze
|
381
|
-
|
382
|
-
# Twig
|
383
|
-
TWIG = 'twig'.freeze
|
384
|
-
|
385
|
-
# TypeScript
|
386
|
-
TYPESCRIPT = 'typescript'.freeze
|
387
|
-
|
388
|
-
# Vala
|
389
|
-
VALA = 'vala'.freeze
|
390
|
-
|
391
|
-
# VB.NET
|
392
|
-
VB = 'vbnet'.freeze
|
393
|
-
|
394
|
-
# VBScript
|
395
|
-
VBSCRIPT = 'vbscript'.freeze
|
396
|
-
|
397
|
-
# VBScript in HTML
|
398
|
-
VBSCRIPT_HTML = 'vbscript-html'.freeze
|
399
|
-
|
400
|
-
# Verilog
|
401
|
-
VERILOG = 'verilog'.freeze
|
402
|
-
|
403
|
-
# VHDL
|
404
|
-
VHDL = 'vhdl'.freeze
|
405
|
-
|
406
|
-
# Vim Script
|
407
|
-
VIM = 'vim'.freeze
|
408
|
-
|
409
|
-
# XL
|
410
|
-
XL = 'xl'.freeze
|
411
|
-
|
412
|
-
# XQuery
|
413
|
-
XQUERY = 'xquery'.freeze
|
414
|
-
|
415
|
-
# YAML
|
416
|
-
YAML = 'yaml'.freeze
|
417
|
-
|
418
|
-
# Zephir
|
419
|
-
ZEPHIR = 'zephir'.freeze
|
420
|
-
end
|
421
|
-
end
|
422
|
-
end
|