tau 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +99 -93
- data/Rakefile +7 -0
- data/bin/tau +1 -1
- data/features/builder.feature +41 -41
- data/features/making_projects.feature +20 -20
- data/features/step_definitions/fs.rb +20 -20
- data/features/support/env.rb +9 -9
- data/lib/tau/builder.rb +29 -34
- data/lib/tau/cli.rb +35 -35
- data/lib/tau/config.rb +15 -0
- data/lib/tau/enginer.rb +42 -0
- data/lib/tau/engines/abstract_engine.rb +71 -0
- data/lib/tau/engines/coffee.rb +15 -0
- data/lib/tau/engines/haml.rb +15 -0
- data/lib/tau/engines/sass.rb +15 -0
- data/lib/tau/engines/scss.rb +15 -0
- data/lib/tau/projecter.rb +43 -30
- data/lib/tau/server.rb +18 -37
- data/lib/tau/server/file_listing.rb +58 -0
- data/lib/tau/server/views/file_listing.haml +20 -0
- data/lib/tau/version.rb +1 -1
- data/tau.gemspec +2 -2
- metadata +75 -52
- data/lib/tau/renderer.rb +0 -55
data/lib/tau/builder.rb
CHANGED
@@ -1,34 +1,29 @@
|
|
1
|
-
require 'tau/projecter'
|
2
|
-
require 'tau/
|
3
|
-
|
4
|
-
module Tau
|
5
|
-
class Builder
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
1
|
+
require 'tau/projecter'
|
2
|
+
require 'tau/enginer'
|
3
|
+
|
4
|
+
module Tau
|
5
|
+
class Builder
|
6
|
+
def self.build
|
7
|
+
raise "You are not in the project directory" unless Projecter.project_dir?(Dir.pwd)
|
8
|
+
|
9
|
+
FileUtils.rm_rf(BUILD_DIR)
|
10
|
+
Dir["#{CODE_DIR}/**/*"].each do |filename|
|
11
|
+
if File.directory?(filename)
|
12
|
+
FileUtils.mkdir_p destination_for(filename)
|
13
|
+
elsif Enginer.can_render_from? filename
|
14
|
+
engine = Enginer.engine_for_render_from filename
|
15
|
+
File.write destination_for(filename, engine), engine.render_file(filename)
|
16
|
+
else
|
17
|
+
FileUtils.cp filename, destination_for(filename)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def self.destination_for(filename, engine = nil)
|
25
|
+
filename = engine.dst_for filename if engine != nil
|
26
|
+
filename.sub(CODE_DIR, BUILD_DIR)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/tau/cli.rb
CHANGED
@@ -1,35 +1,35 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'tau/projecter'
|
3
|
-
require 'tau/server'
|
4
|
-
require 'tau/version'
|
5
|
-
require 'tau/builder'
|
6
|
-
|
7
|
-
module Tau
|
8
|
-
class Cli < Thor
|
9
|
-
map '-v' => :version
|
10
|
-
|
11
|
-
desc "new PROJECT_NAME", "Making new project"
|
12
|
-
def new(project_name)
|
13
|
-
begin
|
14
|
-
Tau::Projecter.new_project(Dir.pwd, project_name)
|
15
|
-
rescue Exception => e
|
16
|
-
puts e.message
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
desc :server, "Starting server for development"
|
21
|
-
def server
|
22
|
-
Tau::Server.start
|
23
|
-
end
|
24
|
-
|
25
|
-
desc :build, "Building project"
|
26
|
-
def build
|
27
|
-
Tau::Builder.build
|
28
|
-
end
|
29
|
-
|
30
|
-
desc :version, "Show tau version"
|
31
|
-
def version
|
32
|
-
puts "Tau #{Tau::VERSION}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
1
|
+
require 'thor'
|
2
|
+
require 'tau/projecter'
|
3
|
+
require 'tau/server'
|
4
|
+
require 'tau/version'
|
5
|
+
require 'tau/builder'
|
6
|
+
|
7
|
+
module Tau
|
8
|
+
class Cli < Thor
|
9
|
+
map '-v' => :version
|
10
|
+
|
11
|
+
desc "new PROJECT_NAME", "Making new project"
|
12
|
+
def new(project_name)
|
13
|
+
begin
|
14
|
+
Tau::Projecter.new_project(Dir.pwd, project_name)
|
15
|
+
rescue Exception => e
|
16
|
+
puts e.message
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc :server, "Starting server for development"
|
21
|
+
def server
|
22
|
+
Tau::Server.start
|
23
|
+
end
|
24
|
+
|
25
|
+
desc :build, "Building project"
|
26
|
+
def build
|
27
|
+
Tau::Builder.build
|
28
|
+
end
|
29
|
+
|
30
|
+
desc :version, "Show tau version"
|
31
|
+
def version
|
32
|
+
puts "Tau #{Tau::VERSION}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/tau/config.rb
ADDED
data/lib/tau/enginer.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'tau/engines/haml'
|
2
|
+
require 'tau/engines/sass'
|
3
|
+
require 'tau/engines/scss'
|
4
|
+
require 'tau/engines/coffee'
|
5
|
+
|
6
|
+
module Tau
|
7
|
+
class Enginer
|
8
|
+
ENGINES = [Engines::Haml, Engines::Sass, Engines::Scss, Engines::Coffee]
|
9
|
+
|
10
|
+
def self.can_render_to?(filename)
|
11
|
+
ENGINES.each do |engine|
|
12
|
+
return true if engine.can_render_to? filename
|
13
|
+
end
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.can_render_from?(filename)
|
18
|
+
ENGINES.each do |engine|
|
19
|
+
return true if engine.can_render_from? filename
|
20
|
+
end
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.engine_for_render_to(filename)
|
25
|
+
ENGINES.select {|engine| engine.can_render_to? filename}.first
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.engine_for_render_from(filename)
|
29
|
+
ENGINES.select {|engine| engine.can_render_from? filename}.first
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.dst_for(source)
|
33
|
+
engine = engine_for_render_from source
|
34
|
+
engine != nil ? engine.dst_for(source) : source
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.source_for(dst)
|
38
|
+
engine = engine_for_render_to dst
|
39
|
+
engine != nil ? engine.source_for(dst) : dst_for
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Tau
|
2
|
+
module Engines
|
3
|
+
class AbstractEngine
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def render_file(filename)
|
7
|
+
render File.read(filename)
|
8
|
+
end
|
9
|
+
|
10
|
+
def source_exist?(dst)
|
11
|
+
File.exist? source_for(dst)
|
12
|
+
end
|
13
|
+
|
14
|
+
def source_for(dst)
|
15
|
+
dst.sub(/\.#{render_to}\z/, ".#{render_from}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def dst_exist?(source)
|
19
|
+
File.exist? dst_for(source)
|
20
|
+
end
|
21
|
+
|
22
|
+
def dst_for(source)
|
23
|
+
source.sub(/\.#{render_from}\z/, ".#{render_to}")
|
24
|
+
end
|
25
|
+
|
26
|
+
def can_render_to?(filename)
|
27
|
+
filename.end_with?(render_to) and source_exist?(filename)
|
28
|
+
end
|
29
|
+
|
30
|
+
def can_render_from?(filename)
|
31
|
+
filename.end_with?(render_from) and File.exist?(filename)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def render_to(format)
|
37
|
+
self.instance_eval %{
|
38
|
+
def render_to?(format)
|
39
|
+
format == "#{format}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def render_to
|
43
|
+
"#{format}"
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def to(format)
|
49
|
+
render_to format
|
50
|
+
end
|
51
|
+
|
52
|
+
def render_from(format)
|
53
|
+
self.instance_eval %{
|
54
|
+
def render_from?(format)
|
55
|
+
format == "#{format}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def render_from
|
59
|
+
"#{format}"
|
60
|
+
end
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
def from(format)
|
65
|
+
render_from format
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'tau/engines/abstract_engine'
|
2
|
+
require 'coffee-script'
|
3
|
+
|
4
|
+
module Tau
|
5
|
+
module Engines
|
6
|
+
class Coffee < AbstractEngine
|
7
|
+
render_to 'js'
|
8
|
+
from 'coffee'
|
9
|
+
|
10
|
+
def self.render(content)
|
11
|
+
CoffeeScript.compile(content)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'tau/engines/abstract_engine'
|
2
|
+
require 'sass'
|
3
|
+
|
4
|
+
module Tau
|
5
|
+
module Engines
|
6
|
+
class Scss < AbstractEngine
|
7
|
+
render_to 'css'
|
8
|
+
from 'scss'
|
9
|
+
|
10
|
+
def self.render(content)
|
11
|
+
::Sass::Engine.new(content, syntax: :scss).render
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/tau/projecter.rb
CHANGED
@@ -1,30 +1,43 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
raise "
|
9
|
-
|
10
|
-
Dir.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
1
|
+
require 'tau/config'
|
2
|
+
|
3
|
+
module Tau
|
4
|
+
class Projecter
|
5
|
+
def self.new_project(parent_directory, project_name)
|
6
|
+
Dir.chdir(parent_directory)
|
7
|
+
|
8
|
+
raise "This already is the project directory" if project_dir?(parent_directory)
|
9
|
+
raise "Wrong project name" unless project_name =~ PROJECT_NAME_EXP
|
10
|
+
raise "Directory exists" if Dir.exist?(project_name)
|
11
|
+
|
12
|
+
Dir.mkdir(project_name)
|
13
|
+
Dir.chdir(project_name) do
|
14
|
+
create_dir(CODE_DIR)
|
15
|
+
create_dir(CODE_DIR, 'js')
|
16
|
+
create_dir(CODE_DIR, 'css')
|
17
|
+
create_dir(CODE_DIR, 'img')
|
18
|
+
create_file(CONFIG_FILE)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.project_dir?(directory)
|
23
|
+
Dir.chdir(directory)
|
24
|
+
Dir.exist?(CODE_DIR) and File.exist?(CONFIG_FILE)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def self.create_dir(*directory)
|
30
|
+
directory = File.join directory
|
31
|
+
|
32
|
+
Dir.mkdir(directory)
|
33
|
+
puts("\tcreate\t#{directory}")
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.create_file(*filename)
|
37
|
+
filename = File.join filename
|
38
|
+
|
39
|
+
File.new(filename, 'w')
|
40
|
+
puts("\tcreate\t#{filename}")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/tau/server.rb
CHANGED
@@ -1,52 +1,33 @@
|
|
1
1
|
require 'sinatra/base'
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require 'sass'
|
2
|
+
require 'tau/enginer'
|
3
|
+
require 'tau/server/file_listing'
|
5
4
|
|
6
5
|
module Tau
|
7
6
|
class Server < Sinatra::Base
|
8
|
-
|
9
|
-
set :port, 15000 # TODO: it should be changeable
|
7
|
+
helpers Tau::ServerHelpers::FileListing
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
9
|
+
def self.start
|
10
|
+
set :server, SERVER
|
11
|
+
set :port, Defaults::PORT # TODO: it should be changeable
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
filename = "code/#{filename}"
|
19
|
-
return haml File.read("#{filename}.haml") if File.exist?("#{filename}.haml")
|
20
|
-
send_file "#{filename}.html" if File.exist?("#{filename}.html")
|
21
|
-
raise Sinatra::NotFound
|
22
|
-
end
|
13
|
+
get FILE_PATH_EXP do |path|
|
14
|
+
path = File.expand_path File.join(CODE_DIR, path) # we are currently in project dir
|
23
15
|
|
24
|
-
|
25
|
-
get /js\/([\/\.\w-]+)\.js/ do |filename|
|
26
|
-
filename = "code/js/#{filename}"
|
27
|
-
return coffee File.read("#{filename}.coffee") if File.exist?("#{filename}.coffee")
|
28
|
-
send_file "#{filename}.js" if File.exist?("#{filename}.js")
|
29
|
-
raise Sinatra::NotFound
|
30
|
-
end
|
16
|
+
show_list_of_files_on path if File.directory? path
|
31
17
|
|
32
|
-
|
33
|
-
get /css\/([\/\.\w-]+)\.css/ do |filename|
|
34
|
-
filename = "code/css/#{filename}"
|
35
|
-
return sass File.read("#{filename}.sass") if File.exist?("#{filename}.sass")
|
36
|
-
return scss File.read("#{filename}.scss") if File.exist?("#{filename}.scss")
|
37
|
-
send_file "#{filename}.css" if File.exist?("#{filename}.css")
|
38
|
-
raise Sinatra::NotFound
|
39
|
-
end
|
18
|
+
send_file path if File.exist? path
|
40
19
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
20
|
+
# render file by one of engine if path isn't a directory or real file
|
21
|
+
engine = Enginer.engine_for_render_to path
|
22
|
+
if engine != nil
|
23
|
+
engine.render_file engine.source_for(path)
|
24
|
+
else
|
25
|
+
raise Sinatra::NotFound
|
26
|
+
end
|
46
27
|
end
|
47
28
|
|
48
29
|
not_found do
|
49
|
-
"No such file or directory"
|
30
|
+
show_list_of_files_on File.expand_path(CODE_DIR), "No such file or directory"
|
50
31
|
end
|
51
32
|
|
52
33
|
run!
|