neocities 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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