kaizen-cli 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/kzn +59 -18
- data/build.sh +4 -0
- data/kaizen-cli.gemspec +2 -1
- data/lib/kaizen.rb +148 -25
- metadata +22 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bfce8103422dd725fcb537887a2acb86e947b9c
|
4
|
+
data.tar.gz: 72f9dbc794beb8b9552a75277fa83ff0dbd7ed04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 402a1b355383b84c8cb49dc9113997541149872a1e82a6c54a77e666a2dc7b928f0da7177a7380d99572b66484013a98dd52645e0604822ef06e73ef7b6fa40e
|
7
|
+
data.tar.gz: 181d33bb797feba23c9e6c7ecd72b19c5ec6859b90ff04c277787480847aafa40767bd3be50a175f7eab64bbac9bdd5e1d1555118f6c54dc57798fbfaa50eb6a
|
data/bin/kzn
CHANGED
@@ -1,21 +1,39 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'rubygems'
|
3
4
|
require 'optparse'
|
4
|
-
require 'kaizen'
|
5
5
|
require 'date'
|
6
|
+
require 'thread'
|
7
|
+
require File.expand_path('../lib/kaizen', File.dirname(__FILE__))
|
8
|
+
|
9
|
+
def render_banner!
|
10
|
+
Kaizen::CLI.pout(:default, '> kzn [optional path] [options]')
|
11
|
+
Kaizen::CLI.pout(:default, '> kzn --help')
|
12
|
+
end
|
13
|
+
|
14
|
+
threads = []
|
6
15
|
|
7
16
|
begin
|
8
17
|
options = {
|
9
|
-
watch: false,
|
10
18
|
overwrite: false,
|
11
|
-
verbose: false
|
19
|
+
verbose: false,
|
20
|
+
serve: false,
|
21
|
+
mode: nil
|
12
22
|
}
|
13
23
|
|
14
24
|
OptionParser.new do |opts|
|
15
25
|
opts.banner = 'Usage: kzn [optional path] [options]'
|
16
26
|
|
17
|
-
opts.on('-
|
18
|
-
options[:
|
27
|
+
opts.on('-w', '--watch', 'Watch the specified directory for Sass changes and compile them automatically') do |v|
|
28
|
+
options[:mode] = :watch
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on('-n', '--new', 'Create a new Kaizen project in the specified directory') do |v|
|
32
|
+
options[:mode] = :new
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on('-s', '--serve', 'Start serving the specified directory from the built-in web server') do |v|
|
36
|
+
options[:serve] = v
|
19
37
|
end
|
20
38
|
|
21
39
|
opts.on('-f', '--force', 'Overwrite files that already exist in the target directory') do |v|
|
@@ -34,27 +52,50 @@ begin
|
|
34
52
|
Kaizen::CLI.pout(:default, "============================================")
|
35
53
|
Kaizen::CLI.pout(:default, "+ #{Paint[kanji, :cyan]} Kaizen Framework ")
|
36
54
|
Kaizen::CLI.pout(:default, "+ Copyright © #{year} Wixel Software Solutions ")
|
37
|
-
Kaizen::CLI.pout(:default, "+
|
55
|
+
Kaizen::CLI.pout(:default, "+ http://wixel.github.io/Kaizen/ ")
|
38
56
|
Kaizen::CLI.pout(:default, "============================================")
|
39
57
|
|
40
|
-
|
41
|
-
|
58
|
+
path = Dir.pwd
|
59
|
+
|
60
|
+
if !ARGV.empty?
|
61
|
+
path = ARGV[0]
|
62
|
+
end
|
42
63
|
|
43
|
-
|
44
|
-
|
64
|
+
serving = false
|
65
|
+
|
66
|
+
case options[:mode]
|
67
|
+
when :new
|
68
|
+
Kaizen::CLI.new(ARGV[0], options[:overwrite], options[:verbose])
|
69
|
+
when :watch
|
70
|
+
if options[:serve]
|
71
|
+
serving = true
|
72
|
+
|
73
|
+
threads << Thread.new do
|
74
|
+
Kaizen::CLI.serve(path)
|
75
|
+
end
|
45
76
|
end
|
46
77
|
|
47
78
|
Kaizen::CLI.watch(path)
|
79
|
+
else
|
80
|
+
if !options[:serve]
|
81
|
+
render_banner!
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
if options[:serve] && !serving
|
86
|
+
serving = true
|
87
|
+
Kaizen::CLI.serve(path)
|
48
88
|
end
|
49
89
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
90
|
+
rescue SignalException, Exception => e
|
91
|
+
|
92
|
+
if threads.size > 0
|
93
|
+
Kaizen::CLI.pout(:info, "Cleaning up worker threads")
|
94
|
+
|
95
|
+
threads.each do |t|
|
96
|
+
Thread.kill(t)
|
56
97
|
end
|
57
98
|
end
|
58
|
-
|
59
|
-
Kaizen::CLI.pout(:debug, "
|
99
|
+
|
100
|
+
Kaizen::CLI.pout(:debug, "otsukaresama deshita! (Good Bye)")
|
60
101
|
end
|
data/build.sh
ADDED
data/kaizen-cli.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'kaizen-cli'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.1'
|
4
4
|
s.date = '2016-06-06'
|
5
5
|
s.summary = 'Kaizen CLI is the command line tool for the Kaizen framework'
|
6
6
|
s.description = 'Kaizen is a simple-as-possible responsive Sass framework.'
|
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.executables << 'kzn'
|
13
13
|
s.require_paths = ['lib']
|
14
14
|
|
15
|
+
s.add_runtime_dependency 'rack', '~> 1.6', '>= 1.6.4'
|
15
16
|
s.add_runtime_dependency 'minitest', '~> 5.7', '>= 5.7.0'
|
16
17
|
s.add_runtime_dependency 'rake', '~> 10.4', '>= 10.4.2'
|
17
18
|
s.add_runtime_dependency 'bundler', '~> 1.7'
|
data/lib/kaizen.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'yaml'
|
2
3
|
require 'tmpdir'
|
3
4
|
require 'net/http'
|
@@ -6,7 +7,7 @@ require 'tempfile'
|
|
6
7
|
require 'zip'
|
7
8
|
require 'paint'
|
8
9
|
require 'bourbon'
|
9
|
-
require '
|
10
|
+
require 'rack'
|
10
11
|
|
11
12
|
module Kaizen
|
12
13
|
class CLI
|
@@ -158,17 +159,17 @@ module Kaizen
|
|
158
159
|
# Output helper
|
159
160
|
#
|
160
161
|
def self.pout(optn, msg)
|
161
|
-
|
162
|
+
date_format = '%d/%m/%Y %H:%M'
|
162
163
|
|
163
164
|
case optn
|
164
165
|
when :error
|
165
|
-
puts "#{Time.now.strftime(
|
166
|
+
puts "#{Time.now.strftime(date_format)} #{Paint[msg, :red]}"
|
166
167
|
when :info
|
167
|
-
puts "#{Time.now.strftime(
|
168
|
+
puts "#{Time.now.strftime(date_format)} #{Paint[msg, :green]}"
|
168
169
|
when :warn
|
169
|
-
puts "#{Time.now.strftime(
|
170
|
+
puts "#{Time.now.strftime(date_format)} #{Paint[msg, :yellow]}"
|
170
171
|
when :debug
|
171
|
-
puts "#{Time.now.strftime(
|
172
|
+
puts "#{Time.now.strftime(date_format)} #{Paint[msg, :cyan]}"
|
172
173
|
when :default
|
173
174
|
puts msg
|
174
175
|
end
|
@@ -180,7 +181,7 @@ module Kaizen
|
|
180
181
|
def self.watch(path)
|
181
182
|
path = File.expand_path(path)
|
182
183
|
|
183
|
-
|
184
|
+
CLI.path_exists?(path) do
|
184
185
|
Kaizen::CLI.pout(:info, "Watching: #{path}")
|
185
186
|
|
186
187
|
options = {
|
@@ -202,32 +203,154 @@ module Kaizen
|
|
202
203
|
|
203
204
|
has_error = false
|
204
205
|
|
205
|
-
|
206
|
-
css = Sass::Engine.new(
|
207
|
-
File.read("#{path}/scss/main.scss"), options
|
208
|
-
)
|
206
|
+
main_file = "#{path}/scss/main.scss"
|
209
207
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
end
|
208
|
+
CLI.path_exists?(main_file) do
|
209
|
+
loop do
|
210
|
+
css = Sass::Engine.new(File.read(main_file), options)
|
214
211
|
|
215
|
-
|
216
|
-
|
217
|
-
|
212
|
+
begin
|
213
|
+
File.open("#{css_directory}/main.css", "w") do |f|
|
214
|
+
f.write css.render
|
215
|
+
end
|
216
|
+
|
217
|
+
if has_error
|
218
|
+
Kaizen::CLI.pout(:debug, "You fixed the issue, thanks :)")
|
219
|
+
has_error = false
|
220
|
+
end
|
221
|
+
|
222
|
+
sleep 3
|
223
|
+
rescue Sass::SyntaxError => e
|
224
|
+
Kaizen::CLI.pout(:error, e.message)
|
225
|
+
has_error = true
|
226
|
+
sleep 10
|
218
227
|
end
|
219
|
-
|
220
|
-
sleep 3
|
221
|
-
rescue Sass::SyntaxError => e
|
222
|
-
Kaizen::CLI.pout(:error, e.message)
|
223
|
-
has_error = true
|
224
|
-
sleep 10
|
225
228
|
end
|
226
229
|
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
##
|
234
|
+
# Serve the specified path via the web server
|
235
|
+
#
|
236
|
+
def self.serve(path)
|
237
|
+
path = File.expand_path(path)
|
238
|
+
|
239
|
+
CLI.path_exists?(path) do
|
240
|
+
Kaizen::KZNServer.set_load_path(path)
|
241
|
+
|
242
|
+
Rack::Server.start({
|
243
|
+
:app => Kaizen::KZNServer,
|
244
|
+
:Port => 9191
|
245
|
+
})
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
##
|
250
|
+
# Helper to clean up path checking
|
251
|
+
#
|
252
|
+
def self.path_exists?(path)
|
253
|
+
if File.exist? path
|
254
|
+
yield
|
227
255
|
else
|
228
|
-
Kaizen::CLI.pout(:error, "
|
256
|
+
Kaizen::CLI.pout(:error, "'#{path}' does not exist")
|
229
257
|
end
|
230
258
|
end
|
259
|
+
end
|
260
|
+
|
261
|
+
class KZNServer
|
262
|
+
|
263
|
+
def self.set_load_path(p)
|
264
|
+
@@server_path = p
|
265
|
+
end
|
266
|
+
|
267
|
+
def self.request_path(path)
|
268
|
+
parts = path.split('/')
|
269
|
+
|
270
|
+
if parts.size == 0
|
271
|
+
parts << "index.html"
|
272
|
+
end
|
273
|
+
|
274
|
+
return "#{@@server_path}/#{parts.join('/')}"
|
275
|
+
end
|
276
|
+
|
277
|
+
def self.mime_for(file)
|
278
|
+
supported_mimes = {
|
279
|
+
".avi" => :"video/x-msvideo",
|
280
|
+
".bmp" => :"image/bmp",
|
281
|
+
".css" => :"text/css",
|
282
|
+
".csv" => :"text/csv",
|
283
|
+
".doc" => :"application/msword",
|
284
|
+
".docm" => :"application/vnd.ms-word.document.macroEnabled.12",
|
285
|
+
".docx" => :"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
286
|
+
".flv" => :"video/x-flv",
|
287
|
+
".gz" => :"application/x-gzip",
|
288
|
+
".htm" => :"text/html",
|
289
|
+
".html" => :"text/html",
|
290
|
+
".ico" => :"image/x-icon",
|
291
|
+
".jpe" => :"image/jpeg",
|
292
|
+
".jpeg" => :"image/jpeg",
|
293
|
+
".jpg" => :"image/jpeg",
|
294
|
+
".js" => :"application/x-javascript",
|
295
|
+
".m4a" => :"audio/m4a",
|
296
|
+
".m4v" => :"video/x-m4v",
|
297
|
+
".mov" => :"video/quicktime",
|
298
|
+
".movie" => :"video/x-sgi-movie",
|
299
|
+
".mp2" => :"video/mpeg",
|
300
|
+
".mp2v" => :"video/mpeg",
|
301
|
+
".mp3" => :"audio/mpeg",
|
302
|
+
".mp4" => :"video/mp4",
|
303
|
+
".mp4v" => :"video/mp4",
|
304
|
+
".mpa" => :"video/mpeg",
|
305
|
+
".mpeg" => :"video/mpeg",
|
306
|
+
".mpg" => :"video/mpeg",
|
307
|
+
".png" => :"image/png",
|
308
|
+
".rar" => :"application/octet-stream",
|
309
|
+
".tar" => :"application/x-tar",
|
310
|
+
".tif" => :"image/tiff",
|
311
|
+
".tiff" => :"image/tiff",
|
312
|
+
".ttf" => :"application/octet-stream",
|
313
|
+
".tts" => :"video/vnd.dlna.mpeg-tts",
|
314
|
+
".txt" => :"text/plain",
|
315
|
+
".wav" => :"audio/wav",
|
316
|
+
".wsdl" => :"text/xml",
|
317
|
+
".xhtml" => :"application/xhtml+xml",
|
318
|
+
".xml" => :"text/xml",
|
319
|
+
".xsd" => :"text/xml",
|
320
|
+
".xsf" => :"text/xml",
|
321
|
+
".xsl" => :"text/xml",
|
322
|
+
".xslt" => :"text/xml",
|
323
|
+
".xsn" => :"application/octet-stream",
|
324
|
+
".zip" => :"application/x-zip-compressed"
|
325
|
+
}
|
326
|
+
|
327
|
+
ext = File.extname(file)
|
328
|
+
|
329
|
+
if supported_mimes.key?(ext)
|
330
|
+
supported_mimes[ext].to_s
|
331
|
+
else
|
332
|
+
'text/html'
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
def self.call(env)
|
337
|
+
requested_file = request_path(Rack::Request.new(env).path)
|
338
|
+
|
339
|
+
response = Rack::Response.new
|
231
340
|
|
341
|
+
response['Content-Type'] = mime_for(requested_file)
|
342
|
+
response['Cache-Control'] = "no-cache, no-store, must-revalidate"
|
343
|
+
response['Pragma'] = "no-cache"
|
344
|
+
response['Expires'] = "0"
|
345
|
+
|
346
|
+
if File.file?(requested_file)
|
347
|
+
response.write(File.read(requested_file))
|
348
|
+
response.status = 200
|
349
|
+
else
|
350
|
+
response.status = 404
|
351
|
+
end
|
352
|
+
|
353
|
+
response.finish
|
354
|
+
end
|
232
355
|
end
|
233
356
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kaizen-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nico Van Zyl
|
@@ -11,6 +11,26 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2016-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rack
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.6'
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.6.4
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - "~>"
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.6'
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.6.4
|
14
34
|
- !ruby/object:Gem::Dependency
|
15
35
|
name: minitest
|
16
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,6 +213,7 @@ files:
|
|
193
213
|
- README.md
|
194
214
|
- Rakefile
|
195
215
|
- bin/kzn
|
216
|
+
- build.sh
|
196
217
|
- install.sh
|
197
218
|
- kaizen-cli.gemspec
|
198
219
|
- lib/kaizen.rb
|