neocities 0.0.1 → 0.0.2
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 +4 -4
- data/.gitignore +1 -16
- data/Gemfile +0 -2
- data/bin/neocities +4 -0
- data/lib/neocities.rb +3 -0
- data/lib/neocities/cli.rb +341 -0
- data/lib/neocities/client.rb +55 -0
- data/lib/neocities/version.rb +1 -1
- data/neocities.gemspec +19 -7
- metadata +85 -18
- data/LICENSE.txt +0 -22
- data/README.md +0 -29
- data/Rakefile +0 -1
- data/lib/neocities/neocities.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91023e44cb2b6df2ed6014513a925da7b00420f7
|
4
|
+
data.tar.gz: 728a534ab0854def9a92ce9397aca1b5b07ca80b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c9e360c1d69af9f34d5ba7be22dc87944e827e781a2f689212d39e75d5520cf08767510c9f590b28ab1213ed510b427e218c8cccbb9f9ecf86f26de866942c4
|
7
|
+
data.tar.gz: 40f7d15988184963237693961b240ad5467eb231eb2bee559fa7d5ec527f585526573fef66936bc46ad1a1e098ea002727020929b87707f69c8ea609a5fd34d8
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/bin/neocities
ADDED
data/lib/neocities.rb
ADDED
@@ -0,0 +1,341 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'pastel'
|
3
|
+
require 'tty/table'
|
4
|
+
require 'tty/prompt'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'buff/ignore'
|
7
|
+
|
8
|
+
module Neocities
|
9
|
+
class CLI
|
10
|
+
API_KEY_PATH = ENV['HOME']+'/.neocities/api_key'
|
11
|
+
SUBCOMMANDS = %w{upload delete list info sync pizza}
|
12
|
+
HELP_SUBCOMMANDS = ['-h', '--help', 'help']
|
13
|
+
PENELOPE_MOUTHS = %w{^ o ~ - v U}
|
14
|
+
PENELOPE_EYES = %w{o ~ O}
|
15
|
+
|
16
|
+
def initialize(argv)
|
17
|
+
@argv = argv.dup
|
18
|
+
@pastel = Pastel.new eachline: "\n"
|
19
|
+
@subcmd = @argv.first
|
20
|
+
@subargs = @argv[1..@argv.length]
|
21
|
+
@prompt = TTY::Prompt.new
|
22
|
+
@api_key = ENV['NEOCITIES_API_KEY'] || nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def display_response(resp)
|
26
|
+
if resp[:result] == 'success'
|
27
|
+
puts "#{@pastel.green.bold 'SUCCESS:'} #{resp[:message]}"
|
28
|
+
else
|
29
|
+
out = "#{@pastel.red.bold 'ERROR:'} #{resp[:message]}"
|
30
|
+
out += " (#{resp[:error_type]})" if resp[:error_type]
|
31
|
+
puts out
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def run
|
36
|
+
if @argv[0] == 'version'
|
37
|
+
puts Neocities::VERSION
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
|
41
|
+
display_help_and_exit if @subcmd.nil? || @argv.include?(HELP_SUBCOMMANDS) || !SUBCOMMANDS.include?(@subcmd)
|
42
|
+
send "display_#{@subcmd}_help_and_exit" if @subargs.empty?
|
43
|
+
|
44
|
+
begin
|
45
|
+
@api_key = File.read API_KEY_PATH
|
46
|
+
rescue Errno::ENOENT
|
47
|
+
@api_key = nil
|
48
|
+
end
|
49
|
+
|
50
|
+
if @api_key.nil?
|
51
|
+
puts "Please login to get your API key:"
|
52
|
+
|
53
|
+
if !@sitename && !@password
|
54
|
+
@sitename = @prompt.ask('sitename:', default: ENV['NEOCITIES_SITENAME'])
|
55
|
+
@password = @prompt.mask('password:', default: ENV['NEOCITIES_PASSWORD'])
|
56
|
+
end
|
57
|
+
|
58
|
+
@client = Neocities::Client.new sitename: @sitename, password: @password
|
59
|
+
|
60
|
+
res = @client.key
|
61
|
+
if res[:api_key]
|
62
|
+
FileUtils.mkdir_p Pathname(API_KEY_PATH).dirname
|
63
|
+
File.write API_KEY_PATH, res[:api_key]
|
64
|
+
puts "The api key for #{@pastel.bold @sitename} has been stored in #{@pastel.bold API_KEY_PATH}."
|
65
|
+
else
|
66
|
+
display_response resp
|
67
|
+
exit
|
68
|
+
end
|
69
|
+
else
|
70
|
+
@client = Neocities::Client.new api_key: @api_key
|
71
|
+
end
|
72
|
+
|
73
|
+
send @subcmd
|
74
|
+
end
|
75
|
+
|
76
|
+
def delete
|
77
|
+
@subargs.each do |file|
|
78
|
+
puts @pastel.bold("Deleting #{file} ...")
|
79
|
+
resp = @client.delete file
|
80
|
+
|
81
|
+
display_response resp
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def info
|
86
|
+
resp = @client.info(@subargs[0] || @sitename)
|
87
|
+
|
88
|
+
if resp[:result] == 'error'
|
89
|
+
display_response resp
|
90
|
+
exit
|
91
|
+
end
|
92
|
+
|
93
|
+
out = []
|
94
|
+
|
95
|
+
resp[:info].each do |k,v|
|
96
|
+
v = Time.parse(v).localtime if k == :created_at || k == :last_updated
|
97
|
+
out.push [@pastel.bold(k), v]
|
98
|
+
end
|
99
|
+
|
100
|
+
puts TTY::Table.new(out).to_s
|
101
|
+
exit
|
102
|
+
end
|
103
|
+
|
104
|
+
def list
|
105
|
+
if @subargs.delete('-d') == '-d'
|
106
|
+
@detail = true
|
107
|
+
end
|
108
|
+
|
109
|
+
if @subargs.delete('-a')
|
110
|
+
@subargs[0] = nil
|
111
|
+
end
|
112
|
+
|
113
|
+
resp = @client.list @subargs[0]
|
114
|
+
|
115
|
+
if resp[:result] == 'error'
|
116
|
+
display_response resp
|
117
|
+
exit
|
118
|
+
end
|
119
|
+
|
120
|
+
if @detail
|
121
|
+
out = [
|
122
|
+
[@pastel.bold('Path'), @pastel.bold('Size'), @pastel.bold('Updated')]
|
123
|
+
]
|
124
|
+
resp[:files].each do |file|
|
125
|
+
out.push([
|
126
|
+
@pastel.send(file[:is_directory] ? :blue : :green).bold(file[:path]),
|
127
|
+
file[:size] || '',
|
128
|
+
Time.parse(file[:updated_at]).localtime
|
129
|
+
])
|
130
|
+
end
|
131
|
+
puts TTY::Table.new(out).to_s
|
132
|
+
exit
|
133
|
+
end
|
134
|
+
|
135
|
+
resp[:files].each do |file|
|
136
|
+
puts @pastel.send(file[:is_directory] ? :blue : :green).bold(file[:path])
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def sync
|
141
|
+
@no_gitignore = false
|
142
|
+
@excluded_files = []
|
143
|
+
loop {
|
144
|
+
case @subargs[0]
|
145
|
+
when '--no-gitignore' then @subargs.shift; @no_gitignore = true
|
146
|
+
when '-e' then @subargs.shift; @excluded_files.push(@subargs.shift)
|
147
|
+
when /^-/ then puts(@pastel.red.bold("Unknown option: #{@subargs[0].inspect}")); display_sync_help_and_exit
|
148
|
+
else break
|
149
|
+
end
|
150
|
+
}
|
151
|
+
|
152
|
+
root_path = Pathname @subargs[0]
|
153
|
+
|
154
|
+
if !root_path.exist?
|
155
|
+
display_response result: 'error', message: "path #{root_path} does not exist"
|
156
|
+
display_sync_help_and_exit
|
157
|
+
end
|
158
|
+
|
159
|
+
if !root_path.directory?
|
160
|
+
display_response result: 'error', message: 'provided path is not a directory'
|
161
|
+
display_sync_help_and_exit
|
162
|
+
end
|
163
|
+
|
164
|
+
Dir.chdir(root_path) do
|
165
|
+
paths = Dir.glob(File.join('**', '*'))
|
166
|
+
|
167
|
+
if @no_gitignore == false
|
168
|
+
begin
|
169
|
+
ignore = Buff::Ignore::IgnoreFile.new '.gitignore'
|
170
|
+
ignore.apply! paths
|
171
|
+
puts "Not syncing .gitignore entries (--no-gitignore to disable)"
|
172
|
+
rescue Buff::Ignore::IgnoreFileNotFound
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
paths.select! {|p| !@excluded_files.include?(p)}
|
177
|
+
|
178
|
+
paths.collect! {|path| Pathname path}
|
179
|
+
|
180
|
+
paths.each do |path|
|
181
|
+
next if path.directory?
|
182
|
+
print @pastel.bold("Syncing #{path} ... ")
|
183
|
+
resp = @client.upload path, path
|
184
|
+
|
185
|
+
if resp[:result] == 'success'
|
186
|
+
print @pastel.green.bold("SUCCESS") + "\n"
|
187
|
+
else
|
188
|
+
print "\n"
|
189
|
+
display_response resp
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def upload
|
196
|
+
display_upload_help_and_exit if @subargs.empty?
|
197
|
+
@dir = ''
|
198
|
+
|
199
|
+
loop {
|
200
|
+
case @subargs[0]
|
201
|
+
when '-d' then @subargs.shift; @dir = @subargs.shift
|
202
|
+
when /^-/ then puts(@pastel.red.bold("Unknown option: #{@subargs[0].inspect}")); display_upload_help_and_exit
|
203
|
+
else break
|
204
|
+
end
|
205
|
+
}
|
206
|
+
|
207
|
+
@subargs.each do |path|
|
208
|
+
path = Pathname path
|
209
|
+
|
210
|
+
if !path.exist?
|
211
|
+
display_response result: 'error', message: "#{path} does not exist locally."
|
212
|
+
next
|
213
|
+
end
|
214
|
+
|
215
|
+
if path.directory?
|
216
|
+
puts "#{path} is a directory, skipping (see the sync command)"
|
217
|
+
next
|
218
|
+
end
|
219
|
+
|
220
|
+
remote_path = ['/', @dir, path.basename.to_s].join('/').gsub %r{/+}, '/'
|
221
|
+
|
222
|
+
puts @pastel.bold("Uploading #{path} to #{remote_path} ...")
|
223
|
+
resp = @client.upload path, remote_path
|
224
|
+
display_response resp
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def display_pizza_help_and_exit
|
229
|
+
puts "Sorry, we're fresh out of dough today. Try again tomorrow."
|
230
|
+
exit
|
231
|
+
end
|
232
|
+
|
233
|
+
def display_list_help_and_exit
|
234
|
+
display_banner
|
235
|
+
|
236
|
+
puts <<HERE
|
237
|
+
#{@pastel.green.bold 'list'} - List files on your Neocities site
|
238
|
+
|
239
|
+
#{@pastel.dim 'Examples:'}
|
240
|
+
|
241
|
+
#{@pastel.green '$ neocities list /'} List files in your root directory
|
242
|
+
|
243
|
+
#{@pastel.green '$ neocities list -a'} Recursively display all files and directories
|
244
|
+
|
245
|
+
#{@pastel.green '$ neocities list -d /mydir'} Show detailed information on /mydir
|
246
|
+
|
247
|
+
HERE
|
248
|
+
exit
|
249
|
+
end
|
250
|
+
|
251
|
+
def display_delete_help_and_exit
|
252
|
+
display_banner
|
253
|
+
|
254
|
+
puts <<HERE
|
255
|
+
#{@pastel.green.bold 'delete'} - Delete files on your Neocities site
|
256
|
+
|
257
|
+
#{@pastel.dim 'Examples:'}
|
258
|
+
|
259
|
+
#{@pastel.green '$ neocities delete myfile.jpg'} Delete myfile.jpg
|
260
|
+
|
261
|
+
#{@pastel.green '$ neocities delete myfile.jpg myfile2.jpg'} Delete myfile.jpg and myfile2.jpg
|
262
|
+
|
263
|
+
HERE
|
264
|
+
exit
|
265
|
+
end
|
266
|
+
|
267
|
+
def display_upload_help_and_exit
|
268
|
+
display_banner
|
269
|
+
|
270
|
+
puts <<HERE
|
271
|
+
#{@pastel.green.bold 'upload'} - Upload individual files to your Neocities site
|
272
|
+
|
273
|
+
#{@pastel.dim 'Examples:'}
|
274
|
+
|
275
|
+
#{@pastel.green '$ neocities upload img.jpg img2.jpg'} Upload images to the root of your site
|
276
|
+
|
277
|
+
#{@pastel.green '$ neocities upload -d images img.jpg'} Upload img.jpg to the 'images' directory on your site
|
278
|
+
|
279
|
+
HERE
|
280
|
+
exit
|
281
|
+
end
|
282
|
+
|
283
|
+
def display_sync_help_and_exit
|
284
|
+
display_banner
|
285
|
+
|
286
|
+
puts <<HERE
|
287
|
+
#{@pastel.green.bold 'sync'} - Upload a local directory to your Neocities site
|
288
|
+
|
289
|
+
#{@pastel.dim 'Examples:'}
|
290
|
+
|
291
|
+
#{@pastel.green '$ neocities sync .'} Recursively upload current directory
|
292
|
+
|
293
|
+
#{@pastel.green '$ neocities sync -e node_modules -e secret.txt .'} Exclude certain files from sync
|
294
|
+
|
295
|
+
#{@pastel.green '$ neocities sync --no-gitignore .'} Don't use .gitignore to exclude files
|
296
|
+
|
297
|
+
HERE
|
298
|
+
exit
|
299
|
+
end
|
300
|
+
|
301
|
+
def display_info_help_and_exit
|
302
|
+
display_banner
|
303
|
+
|
304
|
+
puts <<HERE
|
305
|
+
#{@pastel.green.bold 'info'} - Get site info
|
306
|
+
|
307
|
+
#{@pastel.dim 'Examples:'}
|
308
|
+
|
309
|
+
#{@pastel.green '$ neocities info fauux'} Gets info for 'fauux' site
|
310
|
+
|
311
|
+
HERE
|
312
|
+
exit
|
313
|
+
end
|
314
|
+
|
315
|
+
def display_banner
|
316
|
+
puts <<HERE
|
317
|
+
|
318
|
+
|\\---/|
|
319
|
+
| #{PENELOPE_EYES.sample}_#{PENELOPE_EYES.sample} | #{@pastel.on_cyan.bold ' Neocities '}
|
320
|
+
\\_#{PENELOPE_MOUTHS.sample}_/
|
321
|
+
|
322
|
+
HERE
|
323
|
+
end
|
324
|
+
|
325
|
+
def display_help_and_exit
|
326
|
+
display_banner
|
327
|
+
puts <<HERE
|
328
|
+
#{@pastel.dim 'Subcommands:'}
|
329
|
+
sync Recursively upload a local directory to your site
|
330
|
+
upload Upload individual files to your Neocities site
|
331
|
+
delete Delete files from your Neocities site
|
332
|
+
list List files from your Neocities site
|
333
|
+
info Information and stats for your site
|
334
|
+
version Unceremoniously display version and self destruct
|
335
|
+
pizza Order a free pizza
|
336
|
+
|
337
|
+
HERE
|
338
|
+
exit
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'http'
|
2
|
+
require 'json'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
module Neocities
|
6
|
+
class Client
|
7
|
+
API_URI = 'https://neocities.org/api/'
|
8
|
+
|
9
|
+
def initialize(opts={})
|
10
|
+
if opts[:api_key]
|
11
|
+
@http = HTTP.auth "Bearer #{opts[:api_key]}"
|
12
|
+
elsif opts[:sitename] && opts[:password]
|
13
|
+
@http = HTTP.basic_auth user: opts[:sitename], pass: opts[:password]
|
14
|
+
else
|
15
|
+
raise ArgumentError, 'client requires a login (sitename/password) or an api_key'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def list(path=nil)
|
20
|
+
run :get, 'list', params: {path: path}
|
21
|
+
end
|
22
|
+
|
23
|
+
def key
|
24
|
+
run :get, 'key', {}
|
25
|
+
end
|
26
|
+
|
27
|
+
def upload(path, remote_path=nil)
|
28
|
+
path = Pathname path
|
29
|
+
|
30
|
+
unless path.exist?
|
31
|
+
raise ArgumentError, "#{path.to_s} does not exist."
|
32
|
+
end
|
33
|
+
|
34
|
+
run :post, 'upload', form: {
|
35
|
+
(remote_path || path.basename) => HTTP::FormData::File.new(path.to_s)
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete(*paths)
|
40
|
+
run :post, 'delete', form: {'filenames[]' => paths}
|
41
|
+
end
|
42
|
+
|
43
|
+
def info(sitename)
|
44
|
+
run :get, 'info', params: {sitename: sitename}
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def run(meth, path, args)
|
50
|
+
resp = @http.send(meth, API_URI+path, args)
|
51
|
+
JSON.parse resp.body, symbolize_names: true
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
data/lib/neocities/version.rb
CHANGED
data/neocities.gemspec
CHANGED
@@ -7,15 +7,27 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "neocities"
|
8
8
|
spec.version = Neocities::VERSION
|
9
9
|
spec.authors = ["Kyle Drake"]
|
10
|
-
spec.email = ["
|
11
|
-
spec.summary = %q{
|
10
|
+
spec.email = ["contact@neocities.org"]
|
11
|
+
spec.summary = %q{Neocities.org CLI and API client}
|
12
12
|
spec.homepage = "https://neocities.org"
|
13
13
|
spec.license = "MIT"
|
14
|
-
spec.files = `git ls-files -
|
15
|
-
spec.executables =
|
16
|
-
spec.test_files = spec.files.grep(%r{^(
|
14
|
+
spec.files = `git ls-files | grep -Ev '^(test)'`.split("\n")
|
15
|
+
spec.executables = ['neocities']
|
16
|
+
spec.test_files = spec.files.grep(%r{^(tests)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
-
spec.
|
20
|
-
spec.
|
19
|
+
spec.add_dependency 'tty-table', '~> 0.8', '>= 0.8.0'
|
20
|
+
spec.add_dependency 'tty-prompt', '~> 0.12', '>= 0.12.0'
|
21
|
+
spec.add_dependency 'pastel', '~> 0.7', '>= 0.7.1'
|
22
|
+
spec.add_dependency 'http', '~> 2.2', '>= 2.2.2'
|
23
|
+
spec.add_dependency 'buff-ignore', '~> 1.2'
|
24
|
+
|
25
|
+
# spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
+
# spec.add_development_dependency 'faker'
|
27
|
+
# spec.add_development_dependency 'minitest'
|
28
|
+
# spec.add_development_dependency 'minitest-reporters'
|
29
|
+
# spec.add_development_dependency 'rack-test'
|
30
|
+
# spec.add_development_dependency 'mocha'
|
31
|
+
# spec.add_development_dependency 'webmock'
|
32
|
+
# spec.add_development_dependency 'simplecov'
|
21
33
|
end
|
metadata
CHANGED
@@ -1,56 +1,123 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neocities
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Drake
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: tty-table
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
|
19
|
+
version: '0.8'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.8.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.8'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.8.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: tty-prompt
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.12'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.12.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.12'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.12.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: pastel
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.7'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.7.1
|
63
|
+
type: :runtime
|
21
64
|
prerelease: false
|
22
65
|
version_requirements: !ruby/object:Gem::Requirement
|
23
66
|
requirements:
|
24
67
|
- - "~>"
|
25
68
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
69
|
+
version: '0.7'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 0.7.1
|
27
73
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
74
|
+
name: http
|
29
75
|
requirement: !ruby/object:Gem::Requirement
|
30
76
|
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '2.2'
|
31
80
|
- - ">="
|
32
81
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :
|
82
|
+
version: 2.2.2
|
83
|
+
type: :runtime
|
35
84
|
prerelease: false
|
36
85
|
version_requirements: !ruby/object:Gem::Requirement
|
37
86
|
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.2'
|
38
90
|
- - ">="
|
39
91
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
92
|
+
version: 2.2.2
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: buff-ignore
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.2'
|
100
|
+
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '1.2'
|
41
107
|
description:
|
42
108
|
email:
|
43
|
-
-
|
44
|
-
executables:
|
109
|
+
- contact@neocities.org
|
110
|
+
executables:
|
111
|
+
- neocities
|
45
112
|
extensions: []
|
46
113
|
extra_rdoc_files: []
|
47
114
|
files:
|
48
115
|
- ".gitignore"
|
49
116
|
- Gemfile
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
- lib/neocities/
|
117
|
+
- bin/neocities
|
118
|
+
- lib/neocities.rb
|
119
|
+
- lib/neocities/cli.rb
|
120
|
+
- lib/neocities/client.rb
|
54
121
|
- lib/neocities/version.rb
|
55
122
|
- neocities.gemspec
|
56
123
|
homepage: https://neocities.org
|
@@ -73,8 +140,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
140
|
version: '0'
|
74
141
|
requirements: []
|
75
142
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
143
|
+
rubygems_version: 2.6.11
|
77
144
|
signing_key:
|
78
145
|
specification_version: 4
|
79
|
-
summary:
|
146
|
+
summary: Neocities.org CLI and API client
|
80
147
|
test_files: []
|
data/LICENSE.txt
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 Kyle Drake
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# Neocities
|
2
|
-
|
3
|
-
TODO: Write a gem description
|
4
|
-
|
5
|
-
## Installation
|
6
|
-
|
7
|
-
Add this line to your application's Gemfile:
|
8
|
-
|
9
|
-
gem 'neocities'
|
10
|
-
|
11
|
-
And then execute:
|
12
|
-
|
13
|
-
$ bundle
|
14
|
-
|
15
|
-
Or install it yourself as:
|
16
|
-
|
17
|
-
$ gem install neocities
|
18
|
-
|
19
|
-
## Usage
|
20
|
-
|
21
|
-
TODO: Write usage instructions here
|
22
|
-
|
23
|
-
## Contributing
|
24
|
-
|
25
|
-
1. Fork it ( http://github.com/<my-github-username>/neocities/fork )
|
26
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
-
5. Create new Pull Request
|
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
data/lib/neocities/neocities.rb
DELETED