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.
@@ -1,34 +1,29 @@
1
- require 'tau/projecter'
2
- require 'tau/renderer'
3
-
4
- module Tau
5
- class Builder
6
- class << self
7
-
8
- def build
9
- raise "You are not in the project directory" unless Projecter.project_dir?(Dir.pwd)
10
-
11
- FileUtils.rm_rf('build')
12
- Dir['code/**/*'].each do |filename|
13
- if File.directory?(filename)
14
- FileUtils.mkdir_p filename.sub('code/', 'build/')
15
- elsif not Renderer.need_render? filename
16
- FileUtils.cp filename, destination_for(filename)
17
- else
18
- Renderer.render_to_file destination_for(filename), filename
19
- end
20
- end
21
- end
22
-
23
- private
24
-
25
- def destination_for(filename)
26
- filename.sub('code/', 'build/').sub(/\.sass$/, '.css')
27
- .sub(/\.scss$/, '.css')
28
- .sub(/\.haml$/, '.html')
29
- .sub(/\.coffee$/, '.js')
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
@@ -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
@@ -0,0 +1,15 @@
1
+ module Tau
2
+ module Defaults
3
+ PORT = 15000
4
+ end
5
+
6
+ CODE_DIR = 'code'
7
+ BUILD_DIR = 'build'
8
+ CONFIG_FILE = 'tau.yml'
9
+
10
+ PROJECT_NAME_EXP = /^[[:word:]\.-]+$/
11
+
12
+ SERVER = %w(thin webrick)
13
+
14
+ FILE_PATH_EXP = /^([[:word:]\.-\/]+)$/
15
+ end
@@ -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 'haml'
3
+
4
+ module Tau
5
+ module Engines
6
+ class Haml < AbstractEngine
7
+ render_to 'html'
8
+ from 'haml'
9
+
10
+ def self.render(content)
11
+ ::Haml::Engine.new(content).render
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 Sass < AbstractEngine
7
+ render_to 'css'
8
+ from 'sass'
9
+
10
+ def self.render(content)
11
+ ::Sass::Engine.new(content).render
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
@@ -1,30 +1,43 @@
1
- module Tau
2
- class Projecter
3
- def self.new_project(directory, project_name)
4
- Dir.chdir(directory)
5
-
6
- raise "This already is the project directory" if project_dir?(directory)
7
- raise "Wrong project name" unless project_name =~ /^[[:word:]\.-]+$/
8
- raise "Directory exists" if Dir.exist?(project_name)
9
-
10
- Dir.mkdir(project_name)
11
- Dir.chdir(project_name) do
12
- puts("\tcreate\tcode")
13
- Dir.mkdir('code')
14
- puts("\tcreate\tcode/js")
15
- Dir.mkdir('code/js')
16
- puts("\tcreate\tcode/css")
17
- Dir.mkdir('code/css')
18
- puts("\tcreate\tcode/img")
19
- Dir.mkdir('code/img')
20
- puts("\tcreate\ttau.yaml")
21
- File.new('tau.yml', 'w')
22
- end
23
- end
24
-
25
- def self.project_dir?(directory)
26
- Dir.chdir(directory)
27
- Dir.exist?('code') and File.exist?('tau.yml')
28
- end
29
- end
30
- end
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
@@ -1,52 +1,33 @@
1
1
  require 'sinatra/base'
2
- require 'haml'
3
- require 'coffee-script'
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
- def self.start
9
- set :port, 15000 # TODO: it should be changeable
7
+ helpers Tau::ServerHelpers::FileListing
10
8
 
11
- # TODO: / route should return list of all files
12
- get '/' do
13
- "There should be list of all files."
14
- end
9
+ def self.start
10
+ set :server, SERVER
11
+ set :port, Defaults::PORT # TODO: it should be changeable
15
12
 
16
- # html
17
- get /([\/\.\w-]+)\.html/ do |filename|
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
- # javascript
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
- # css
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
- # images
42
- get /img\/([\/\.\w-]+)/ do |filename|
43
- filename = "code/img/#{filename}"
44
- send_file filename if File.exist?(filename)
45
- raise Sinatra::NotFound
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!