flatrack 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.rubocop.yml +0 -3
- data/flatrack.gemspec +1 -0
- data/lib/flatrack/asset_extensions.rb +5 -1
- data/lib/flatrack/cli.rb +20 -4
- data/lib/flatrack/request.rb +9 -0
- data/lib/flatrack/response.rb +22 -16
- data/lib/flatrack/site.rb +3 -0
- data/lib/flatrack/template/erubis/handler.rb +14 -15
- data/lib/flatrack/template/erubis.rb +4 -1
- data/lib/flatrack/template/html.rb +4 -1
- data/lib/flatrack/template/rb.rb +4 -1
- data/lib/flatrack/template.rb +23 -6
- data/lib/flatrack/version.rb +3 -1
- data/lib/flatrack/view/capture_helper.rb +1 -0
- data/lib/flatrack/view/link_helper.rb +41 -12
- data/lib/flatrack/view/output_buffer.rb +8 -0
- data/lib/flatrack/view/render_helper.rb +4 -0
- data/lib/flatrack/view/request_helper.rb +5 -0
- data/lib/flatrack/view/tag_helper.rb +32 -0
- data/lib/flatrack/view.rb +4 -1
- data/lib/flatrack.rb +37 -13
- data/lib/rake/asset_tasks/asset.rb +37 -0
- data/lib/rake/asset_tasks/tasks.rb +25 -0
- data/lib/rake/asset_tasks.rb +18 -50
- data/spec/support/fixture_helper.rb +1 -0
- data/spec/support/site_helper.rb +1 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0aec0d226a3b1fbf6614fdd772325b2d393a58a
|
4
|
+
data.tar.gz: c066f48a3047e11b32a7df82e5ad544bf8d7390f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57a09c2d7aae4bfab7c95450a5a5a41b4ed1f34abf5a345d90a8f444d4e301b0e7fdb81c2de6c9e9cc3d26a9fa7b86f772cbefde2eb500755a3b277f0f21e603
|
7
|
+
data.tar.gz: 61804f644c5f4c5bfece7bf8974ebbdca4707a06c8196ae32b214cc18d758b0c5ea5dbdadd66b5b4fca6806a687665fceaf215f1ae257d884b551dcc2b0009bb
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/flatrack.gemspec
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
class Flatrack
|
2
|
+
# Provides asset helpers to various parts of a flatrack site.
|
2
3
|
module AssetExtensions
|
3
|
-
|
4
|
+
# The path to a given asset
|
5
|
+
# @param path [String] the asset name or path
|
6
|
+
# @return [String]
|
7
|
+
def asset_path(path, _ = {})
|
4
8
|
File.join('/assets', path.to_s)
|
5
9
|
end
|
6
10
|
end
|
data/lib/flatrack/cli.rb
CHANGED
@@ -2,10 +2,12 @@ require 'thor'
|
|
2
2
|
require 'flatrack'
|
3
3
|
|
4
4
|
class Flatrack
|
5
|
+
# The command line interface for flatrack
|
5
6
|
class CLI < Thor
|
6
7
|
include FileUtils
|
7
8
|
include Thor::Actions
|
8
9
|
|
10
|
+
# @private
|
9
11
|
SRC_ROOT = File.join Flatrack.gem_root, 'flatrack/cli/templates'
|
10
12
|
source_root SRC_ROOT
|
11
13
|
|
@@ -14,7 +16,8 @@ class Flatrack
|
|
14
16
|
|
15
17
|
desc 'new NAME', 'create a new flatrack site with the given name'
|
16
18
|
|
17
|
-
|
19
|
+
# @private
|
20
|
+
KEEP_DIRS = [
|
18
21
|
'assets/stylesheets',
|
19
22
|
'assets/javascripts',
|
20
23
|
'assets/images',
|
@@ -23,7 +26,8 @@ class Flatrack
|
|
23
26
|
'partials'
|
24
27
|
]
|
25
28
|
|
26
|
-
|
29
|
+
# @private
|
30
|
+
FILES = {
|
27
31
|
'.gitignore' => '.gitignore',
|
28
32
|
'boot.rb' => 'boot.rb',
|
29
33
|
'Rakefile' => 'Rakefile',
|
@@ -35,10 +39,13 @@ class Flatrack
|
|
35
39
|
'javascript.js.coffee' => 'assets/javascripts/main.js.coffee'
|
36
40
|
}
|
37
41
|
|
42
|
+
# @private
|
38
43
|
BIN_COPY_FILES = {
|
39
44
|
'logo.png' => 'assets/images/logo.png'
|
40
45
|
}
|
41
46
|
|
47
|
+
# Create a new app
|
48
|
+
# @param path [String]
|
42
49
|
def new(path)
|
43
50
|
mkdir_p path
|
44
51
|
full_path = File.expand_path path
|
@@ -52,8 +59,8 @@ class Flatrack
|
|
52
59
|
method_option :verbose, type: :boolean, default: true, aliases: :v
|
53
60
|
method_option :port, type: :numeric, default: 5959, aliases: :p
|
54
61
|
|
55
|
-
desc 'start PORT', 'run the site on the given port'
|
56
|
-
|
62
|
+
desc 'start --port PORT', 'run the site on the given port'
|
63
|
+
# Start the app
|
57
64
|
def start
|
58
65
|
require './boot'
|
59
66
|
run_opts = {}
|
@@ -64,6 +71,15 @@ class Flatrack
|
|
64
71
|
Rack::Server.start run_opts
|
65
72
|
end
|
66
73
|
|
74
|
+
method_option :version, type: :boolean, default: false, aliases: :v
|
75
|
+
desc '--version', 'flatrack version'
|
76
|
+
# Info about flatrack
|
77
|
+
def __default__
|
78
|
+
puts 'Flatrack ' + Flatrack::VERSION and return if options[:version]
|
79
|
+
end
|
80
|
+
|
81
|
+
default_task :__default__
|
82
|
+
|
67
83
|
private
|
68
84
|
|
69
85
|
def bundle!
|
data/lib/flatrack/request.rb
CHANGED
@@ -1,26 +1,35 @@
|
|
1
1
|
class Flatrack
|
2
|
+
# parses an incoming flatrack request and provides a method to render a
|
3
|
+
# response
|
2
4
|
class Request
|
5
|
+
# @private
|
3
6
|
DEFAULT_FORMAT = 'html'
|
4
7
|
|
5
8
|
attr_reader :env, :rack_request
|
6
9
|
|
10
|
+
# Initializes a response
|
11
|
+
# @param env [Hash] the rack env
|
7
12
|
def initialize(env)
|
8
13
|
@rack_request = Rack::Request.new(env)
|
9
14
|
@env = env
|
10
15
|
end
|
11
16
|
|
17
|
+
# the path of the incoming request
|
12
18
|
def path
|
13
19
|
env['PATH_INFO']
|
14
20
|
end
|
15
21
|
|
22
|
+
# the params on the incoming request
|
16
23
|
def params
|
17
24
|
rack_request.params.with_indifferent_access
|
18
25
|
end
|
19
26
|
|
27
|
+
# the format on the incoming request
|
20
28
|
def format
|
21
29
|
(ext = File.extname path).empty? ? DEFAULT_FORMAT : ext.sub(/\./, '')
|
22
30
|
end
|
23
31
|
|
32
|
+
# the processed response for an inbound request
|
24
33
|
def response
|
25
34
|
Response.new(self).render
|
26
35
|
rescue TemplateNotFound
|
data/lib/flatrack/response.rb
CHANGED
@@ -1,25 +1,23 @@
|
|
1
1
|
class Flatrack
|
2
|
+
# Handles flatrack responses
|
2
3
|
class Response
|
3
|
-
|
4
|
-
|
5
|
-
html: 'text/html',
|
6
|
-
rb: 'text/html'
|
7
|
-
}
|
4
|
+
# @private
|
5
|
+
DEFAULT_FILE = 'index'
|
8
6
|
|
9
7
|
attr_reader :request
|
10
8
|
|
9
|
+
# Initializes a response
|
10
|
+
# @param request [Flatrack::Request]
|
11
11
|
def initialize(request)
|
12
12
|
@request = request
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
|
15
|
+
# Renders a response
|
16
|
+
# @param opts [Hash]
|
17
|
+
# @option opts [String] :file
|
18
|
+
# @option opts [Fixnum] :status
|
19
|
+
# @option opts [Symbol] :layout
|
20
|
+
# @return [Array] the rack response
|
23
21
|
def render(file: file_for(request.path), status: 200, layout: :layout)
|
24
22
|
page_content = proc { renderer_for_page(file).render(view) }
|
25
23
|
set_content_type
|
@@ -31,11 +29,19 @@ class Flatrack
|
|
31
29
|
[status, headers, body]
|
32
30
|
end
|
33
31
|
|
34
|
-
|
35
|
-
|
32
|
+
private
|
33
|
+
|
34
|
+
def body
|
35
|
+
@body ||= []
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
def headers
|
39
|
+
@headers ||= {}
|
40
|
+
end
|
41
|
+
|
42
|
+
def set_content_type
|
43
|
+
headers['Content-Type'] = FORMATS[request.format.to_sym]
|
44
|
+
end
|
39
45
|
|
40
46
|
def file_for(path)
|
41
47
|
if File.directory?(File.join 'pages', path)
|
data/lib/flatrack/site.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'erubis'
|
2
2
|
|
3
3
|
class Flatrack
|
4
|
-
|
4
|
+
class Template
|
5
5
|
class Erubis < Tilt::ErubisTemplate
|
6
|
+
# The default ERB handler for rendering erb files in flatrack
|
6
7
|
class Handler < ::Erubis::Eruby
|
8
|
+
private
|
9
|
+
|
7
10
|
def add_preamble(src)
|
8
11
|
@newline_pending = 0
|
9
12
|
end
|
@@ -24,31 +27,27 @@ class Flatrack
|
|
24
27
|
# Erubis toggles <%= and <%== behavior when escaping is enabled.
|
25
28
|
# We override to always treat <%== as escaped.
|
26
29
|
def add_expr(src, code, indicator)
|
27
|
-
|
28
|
-
|
29
|
-
add_expr_escaped(src, code)
|
30
|
-
else
|
31
|
-
super
|
32
|
-
end
|
30
|
+
return super unless indicator == '=='
|
31
|
+
add_expr_escaped(src, code)
|
33
32
|
end
|
34
33
|
|
35
34
|
BLOCK_EXPR = /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/
|
36
35
|
|
37
36
|
def add_expr_literal(src, code)
|
38
|
-
|
39
|
-
if code =~ BLOCK_EXPR
|
40
|
-
src << '@output_buffer.append= ' << code
|
41
|
-
else
|
42
|
-
src << '@output_buffer.append=(' << code << ');'
|
43
|
-
end
|
37
|
+
add_expr_with_type(src, code)
|
44
38
|
end
|
45
39
|
|
46
40
|
def add_expr_escaped(src, code)
|
41
|
+
add_expr_with_type(src, code, :safe)
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_expr_with_type(src, code, type = nil)
|
45
|
+
setter = [type, :append].compact.join('_')
|
47
46
|
flush_newline_if_pending(src)
|
48
47
|
if code =~ BLOCK_EXPR
|
49
|
-
src <<
|
48
|
+
src << "@output_buffer.#{setter}= " << code
|
50
49
|
else
|
51
|
-
src <<
|
50
|
+
src << "@output_buffer.#{setter}=(" << code << ');'
|
52
51
|
end
|
53
52
|
end
|
54
53
|
|
@@ -1,9 +1,12 @@
|
|
1
1
|
class Flatrack
|
2
|
-
|
2
|
+
class Template
|
3
|
+
# The tilt template for rendering ERB in flatrack
|
3
4
|
class Erubis < Tilt::ErubisTemplate
|
4
5
|
extend ActiveSupport::Autoload
|
5
6
|
autoload :Handler
|
6
7
|
|
8
|
+
private
|
9
|
+
|
7
10
|
def self.engine_initialized?
|
8
11
|
defined? Handler
|
9
12
|
end
|
data/lib/flatrack/template/rb.rb
CHANGED
data/lib/flatrack/template.rb
CHANGED
@@ -4,9 +4,28 @@ require 'flatrack/template/rb'
|
|
4
4
|
require 'flatrack/template/html'
|
5
5
|
|
6
6
|
class Flatrack
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
# The default template parser/finder
|
8
|
+
class Template
|
9
|
+
attr_reader :type, :file
|
10
|
+
|
11
|
+
# Creates a new template instance and invokes find
|
12
|
+
# @param type [Symbol] the type of template
|
13
|
+
# @param file [String] the location of the file
|
14
|
+
def self.find(type, file)
|
15
|
+
new(type, file).find
|
16
|
+
end
|
17
|
+
|
18
|
+
# Creates a new template instance
|
19
|
+
# @param type [Symbol] the type of template
|
20
|
+
# @param file [String] the location of the file
|
21
|
+
def initialize(type, file)
|
22
|
+
@type, @file = type, file
|
23
|
+
end
|
24
|
+
|
25
|
+
# Finds a given template
|
26
|
+
# @return [Tilt::Template]
|
27
|
+
def find
|
28
|
+
template = find_by_type
|
10
29
|
fail FileNotFound, "could not find #{file}" unless template
|
11
30
|
Tilt.new template, options
|
12
31
|
rescue RuntimeError
|
@@ -22,14 +41,12 @@ class Flatrack
|
|
22
41
|
local_options
|
23
42
|
end
|
24
43
|
|
25
|
-
def find_by_type
|
44
|
+
def find_by_type
|
26
45
|
if File.exist?(file)
|
27
46
|
file
|
28
47
|
else
|
29
48
|
Dir[File.join type.to_s.pluralize, "#{file}*"].first
|
30
49
|
end
|
31
50
|
end
|
32
|
-
|
33
|
-
module_function :find, :find_by_type, :options
|
34
51
|
end
|
35
52
|
end
|
data/lib/flatrack/version.rb
CHANGED
@@ -1,25 +1,54 @@
|
|
1
1
|
class Flatrack
|
2
2
|
class View
|
3
|
+
# View helpers to render link tags
|
3
4
|
module LinkHelper
|
4
5
|
include TagHelper
|
5
6
|
|
6
|
-
|
7
|
+
# Creates an HTML link tag
|
8
|
+
#
|
9
|
+
# @overload link_to(href, options={})
|
10
|
+
# Creates an html link tag to URL, using the URL as the content
|
11
|
+
# of the tag.
|
12
|
+
#
|
13
|
+
# @param href [String] the link
|
14
|
+
# @param options [Hash] html options for the tag
|
15
|
+
# @return [String]
|
16
|
+
#
|
17
|
+
# @overload link_to(content, href, options={})
|
18
|
+
# Creates an html link tag to URL, using the provided content as the
|
19
|
+
# content of the tag.
|
20
|
+
#
|
21
|
+
# @param content [String] the content to be displayed for the link tag
|
22
|
+
# @param href [String] the link
|
23
|
+
# @param options [Hash] html options for the tag
|
24
|
+
# @return [String]
|
25
|
+
#
|
26
|
+
# @overload link_to(href, options={}, &block)
|
27
|
+
# Creates an html link tag to URL, using the provided return value of
|
28
|
+
# the block as the content of the tag.
|
29
|
+
#
|
30
|
+
# @param href [String] the link
|
31
|
+
# @yield the content of the tag
|
32
|
+
# @return [String]
|
33
|
+
def link_to(*args, &block)
|
34
|
+
href, options, block = link_to_options(*args, &block)
|
35
|
+
html_tag :a, link_to_tag_options(href, options || {}), &block
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def link_to_options(content_or_href = nil, href_or_options = nil,
|
41
|
+
options = nil, &block)
|
7
42
|
if block_given?
|
8
|
-
|
9
|
-
elsif
|
10
|
-
|
43
|
+
[content_or_href, href_or_options, block]
|
44
|
+
elsif href_or_options.is_a?(Hash) || href_or_options.blank?
|
45
|
+
[content_or_href, href_or_options, proc { content_or_href }]
|
11
46
|
else
|
12
|
-
|
47
|
+
[href_or_options, options, proc { content_or_href }]
|
13
48
|
end
|
14
|
-
|
15
|
-
block ||= proc { name }
|
16
|
-
|
17
|
-
html_tag :a, link_to_options(href, options || {}), &block
|
18
49
|
end
|
19
50
|
|
20
|
-
|
21
|
-
|
22
|
-
def link_to_options(link, opts = {})
|
51
|
+
def link_to_tag_options(link, opts = {})
|
23
52
|
link << '?' + opts.delete(:params).to_param if opts[:params].present?
|
24
53
|
{ href: link }.merge(opts)
|
25
54
|
end
|
@@ -1,11 +1,16 @@
|
|
1
1
|
class Flatrack
|
2
2
|
class View
|
3
|
+
# A modified output buffer for block evaluation
|
3
4
|
class OutputBuffer < ActiveSupport::SafeBuffer #:nodoc:
|
5
|
+
# Initializes and encodes the buffer
|
4
6
|
def initialize(*)
|
5
7
|
super
|
6
8
|
encode!
|
7
9
|
end
|
8
10
|
|
11
|
+
# appends text to the buffer
|
12
|
+
# @param value [String] the value to be appended
|
13
|
+
# @return [OutputBuffer]
|
9
14
|
def <<(value)
|
10
15
|
return self if value.nil?
|
11
16
|
super(value.to_s)
|
@@ -13,6 +18,9 @@ class Flatrack
|
|
13
18
|
|
14
19
|
alias_method :append=, :<<
|
15
20
|
|
21
|
+
# safely concatenates value to the buffer
|
22
|
+
# @param value [String] the value to be concatenated
|
23
|
+
# @return [OutputBuffer]
|
16
24
|
def safe_concat(value)
|
17
25
|
return self if value.nil?
|
18
26
|
super(value.to_s)
|
@@ -1,10 +1,15 @@
|
|
1
1
|
class Flatrack
|
2
2
|
class View
|
3
|
+
# View helpers to access the params and path
|
3
4
|
module RequestHelper
|
5
|
+
# Returns the query parameters
|
6
|
+
# @return [Hash]
|
4
7
|
def params
|
5
8
|
@response.request.params
|
6
9
|
end
|
7
10
|
|
11
|
+
# Returns the path
|
12
|
+
# @return [String]
|
8
13
|
def path
|
9
14
|
@response.request.path
|
10
15
|
end
|
@@ -1,13 +1,16 @@
|
|
1
1
|
class Flatrack
|
2
2
|
class View
|
3
|
+
# View helpers for rendering various html tags
|
3
4
|
module TagHelper
|
4
5
|
include CaptureHelper
|
5
6
|
include ERB::Util
|
6
7
|
|
8
|
+
# @private
|
7
9
|
PRE_CONTENT_STRINGS = {
|
8
10
|
textarea: "\n"
|
9
11
|
}
|
10
12
|
|
13
|
+
# @private
|
11
14
|
BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked autobuffer
|
12
15
|
autoplay controls loop selected hidden scoped
|
13
16
|
async defer reversed ismap seamless muted
|
@@ -15,6 +18,25 @@ class Flatrack
|
|
15
18
|
pubdate itemscope allowfullscreen default inert
|
16
19
|
sortable truespeed typemustmatch).to_set
|
17
20
|
|
21
|
+
# Creates an HTML tag
|
22
|
+
#
|
23
|
+
# @overload html_tag(name, content, options={})
|
24
|
+
# Creates an html tag using the provided content as the content of the
|
25
|
+
# tag.
|
26
|
+
#
|
27
|
+
# @param name [String] the name of the tag (i.e. a, img, style)
|
28
|
+
# @param content [String] the content of the tag
|
29
|
+
# @param options [Hash] the html options for the tag
|
30
|
+
# @return [String]
|
31
|
+
#
|
32
|
+
# @overload html_tag(name, options={}, &block)
|
33
|
+
# Creates an html tag using the provided content as the content of the
|
34
|
+
# tag.
|
35
|
+
#
|
36
|
+
# @param name [String] the name of the tag (i.e. a, img, style)
|
37
|
+
# @param options [Hash] the html options for the tag
|
38
|
+
# @yield the tag content
|
39
|
+
# @return [String]
|
18
40
|
def html_tag(name, content_or_options_with_block = nil, options = nil,
|
19
41
|
escape = true, &block)
|
20
42
|
if block_given?
|
@@ -27,17 +49,27 @@ class Flatrack
|
|
27
49
|
end
|
28
50
|
end
|
29
51
|
|
52
|
+
# Returns an HTML image tag
|
53
|
+
# @param uri [String] location of the image
|
54
|
+
# @param options [Hash] the html options for the tag
|
55
|
+
# @return [String]
|
30
56
|
def image_tag(uri, options = {})
|
31
57
|
uri = asset_path(uri) unless uri =~ %r{^(http)?(s)?:?\/\/}
|
32
58
|
options.merge! src: uri
|
33
59
|
html_tag(:img, nil, options)
|
34
60
|
end
|
35
61
|
|
62
|
+
# Returns an HTML script tag for javascript
|
63
|
+
# @param uri [String] location of the javascript file
|
64
|
+
# @return [String]
|
36
65
|
def javascript_tag(uri)
|
37
66
|
uri = asset_path(uri) + '.js' if uri.is_a? Symbol
|
38
67
|
html_tag(:script, '', src: uri, type: 'application/javascript')
|
39
68
|
end
|
40
69
|
|
70
|
+
# Returns an HTML link tag for css
|
71
|
+
# @param uri [String] location of the css file
|
72
|
+
# @return [String]
|
41
73
|
def stylesheet_tag(uri)
|
42
74
|
uri = asset_path(uri) + '.css' if uri.is_a? Symbol
|
43
75
|
html_tag(:link, nil, rel: 'stylesheet', type: 'text/css', href: uri)
|
data/lib/flatrack/view.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
class Flatrack
|
2
|
+
# The flatrack view
|
2
3
|
class View
|
3
4
|
extend ActiveSupport::Autoload
|
4
5
|
|
@@ -19,8 +20,10 @@ class Flatrack
|
|
19
20
|
|
20
21
|
attr_accessor :output_buffer
|
21
22
|
|
23
|
+
# initializes a flatrack view
|
24
|
+
# @param response [Flatrack::Response]
|
22
25
|
def initialize(response)
|
23
|
-
@response
|
26
|
+
@response = response
|
24
27
|
@output_buffer = OutputBuffer.new
|
25
28
|
super(response)
|
26
29
|
rescue ArgumentError
|
data/lib/flatrack.rb
CHANGED
@@ -6,6 +6,7 @@ require 'coffee-script'
|
|
6
6
|
require 'sass'
|
7
7
|
require 'rack'
|
8
8
|
|
9
|
+
# A static site generator with a little sprinkle of ruby magic
|
9
10
|
class Flatrack
|
10
11
|
extend ActiveSupport::Autoload
|
11
12
|
|
@@ -17,41 +18,57 @@ class Flatrack
|
|
17
18
|
autoload :AssetExtensions
|
18
19
|
autoload :CLI
|
19
20
|
|
21
|
+
# @private
|
20
22
|
TemplateNotFound = Class.new StandardError
|
23
|
+
# @private
|
21
24
|
FileNotFound = Class.new StandardError
|
22
|
-
|
25
|
+
# @private
|
23
26
|
FORMATS = {}
|
24
27
|
|
25
28
|
delegate :gem_root, :site_root, to: self
|
26
29
|
|
27
|
-
def self.gem_root
|
28
|
-
File.expand_path File.join __FILE__, '..'
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.site_root
|
32
|
-
File.expand_path Dir.pwd
|
33
|
-
end
|
34
|
-
|
35
30
|
class << self
|
36
|
-
|
37
|
-
|
31
|
+
# The root of the flatrack gem
|
32
|
+
# @!attribute [r] gem_root
|
33
|
+
# @return [String]
|
34
|
+
def gem_root
|
35
|
+
File.expand_path File.join __FILE__, '..'
|
38
36
|
end
|
39
37
|
|
38
|
+
# The site root
|
39
|
+
# @!attribute [r] site_root
|
40
|
+
# @return [String]
|
41
|
+
def site_root
|
42
|
+
File.expand_path Dir.pwd
|
43
|
+
end
|
44
|
+
|
45
|
+
# Reset the state of flatrack and its configuration
|
40
46
|
def reset!
|
41
47
|
@delegate_instance = nil
|
42
48
|
end
|
43
49
|
|
44
50
|
private
|
45
51
|
|
52
|
+
def delegate_instance
|
53
|
+
@delegate_instance ||= new
|
54
|
+
end
|
55
|
+
|
46
56
|
def method_missing(m, *args, &block)
|
47
57
|
delegate_instance.public_method(m).call(*args, &block)
|
48
58
|
end
|
49
59
|
end
|
50
60
|
|
61
|
+
# Configure the flatrack instance
|
62
|
+
# @yield [Flatrack] configuration for the flatrack instance
|
63
|
+
# @return [Flatrack]
|
51
64
|
def config(&block)
|
52
65
|
yield self
|
66
|
+
self
|
53
67
|
end
|
54
68
|
|
69
|
+
# The flatrack sprockets environment
|
70
|
+
# @!attribute [r] assets
|
71
|
+
# @return [Sprockets::Environment]
|
55
72
|
def assets
|
56
73
|
@assets ||= begin
|
57
74
|
Sprockets::Environment.new.tap do |environment|
|
@@ -63,16 +80,23 @@ class Flatrack
|
|
63
80
|
end
|
64
81
|
end
|
65
82
|
|
83
|
+
# register a format extension by its mime type
|
84
|
+
# @param ext [String] the extension
|
85
|
+
# @param mime [String] the mime type
|
66
86
|
def register_format(ext, mime)
|
67
87
|
FORMATS[ext.to_s] = mime
|
68
88
|
end
|
69
89
|
|
90
|
+
# The middleware stack for flatrack
|
70
91
|
def middleware
|
71
92
|
@middleware ||= []
|
72
93
|
end
|
73
94
|
|
74
|
-
|
75
|
-
|
95
|
+
# Insert a rack middleware at the end of the stack
|
96
|
+
# @param middleware [Class] the middleware class
|
97
|
+
# @param options [Hash] the options for the middleware
|
98
|
+
def use(middleware, options = nil)
|
99
|
+
self.middleware << [middleware, options].compact
|
76
100
|
end
|
77
101
|
|
78
102
|
# By default we know how to render 'text/html'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Rake Extensions
|
2
|
+
module Rake
|
3
|
+
# Asset class for sprockets pre-compilation
|
4
|
+
class AssetTasks::Asset
|
5
|
+
# Returns a sprockets asset
|
6
|
+
# @param env [Sprockets::Environment]
|
7
|
+
# @param file [String]
|
8
|
+
def initialize(env, file)
|
9
|
+
@env = env
|
10
|
+
@file = file
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns the path of an asset
|
14
|
+
# @return [String]
|
15
|
+
def path
|
16
|
+
File.expand_path(file).sub(/(#{@env.paths.join('|')})\//, '')
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def basename
|
22
|
+
File.basename @file
|
23
|
+
end
|
24
|
+
|
25
|
+
def parts
|
26
|
+
basename.split('.').size
|
27
|
+
end
|
28
|
+
|
29
|
+
def file
|
30
|
+
if parts > 2
|
31
|
+
@file.split('.').tap(&:pop).join('.')
|
32
|
+
else
|
33
|
+
@file
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# The tasks defined for pre-compilation of assets
|
2
|
+
Rake::AssetTasks::TASKS = proc do
|
3
|
+
namespace :assets do
|
4
|
+
desc 'precompile assets'
|
5
|
+
task :precompile do
|
6
|
+
with_logger do
|
7
|
+
manifest.compile(assets)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Remove all assets'
|
12
|
+
task :clobber do
|
13
|
+
with_logger do
|
14
|
+
manifest.clobber
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Clean old assets'
|
19
|
+
task :clean do
|
20
|
+
with_logger do
|
21
|
+
manifest.clean(keep)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/rake/asset_tasks.rb
CHANGED
@@ -4,11 +4,12 @@ require 'flatrack'
|
|
4
4
|
require 'logger'
|
5
5
|
|
6
6
|
module Rake
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# Rake::AssetTasks.new
|
10
|
-
#
|
7
|
+
# helps define asset tasks
|
11
8
|
class AssetTasks < Rake::TaskLib
|
9
|
+
extend ActiveSupport::Autoload
|
10
|
+
autoload :Asset
|
11
|
+
autoload :TASKS
|
12
|
+
|
12
13
|
attr_accessor :output
|
13
14
|
attr_reader :environment
|
14
15
|
attr_reader :index
|
@@ -17,39 +18,9 @@ module Rake
|
|
17
18
|
|
18
19
|
delegate :paths, to: :environment
|
19
20
|
|
20
|
-
DEFINED_TASKS = proc do
|
21
|
-
|
22
|
-
namespace :assets do
|
23
|
-
desc 'precompile assets'
|
24
|
-
task :precompile do
|
25
|
-
with_logger do
|
26
|
-
manifest.compile(assets)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
desc 'Remove all assets'
|
31
|
-
task :clobber do
|
32
|
-
with_logger do
|
33
|
-
manifest.clobber
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
desc 'Clean old assets'
|
38
|
-
task :clean do
|
39
|
-
with_logger do
|
40
|
-
manifest.clean(keep)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
21
|
# Number of old assets to keep.
|
48
22
|
|
49
23
|
# Logger to use during rake tasks. Defaults to using stderr.
|
50
|
-
#
|
51
|
-
# t.logger = Logger.new($stdout)
|
52
|
-
#
|
53
24
|
attr_accessor :logger
|
54
25
|
|
55
26
|
# Returns logger level Integer.
|
@@ -58,10 +29,7 @@ module Rake
|
|
58
29
|
end
|
59
30
|
|
60
31
|
# Set logger level with constant or symbol.
|
61
|
-
#
|
62
|
-
# t.log_level = Logger::INFO
|
63
|
-
# t.log_level = :debug
|
64
|
-
#
|
32
|
+
# @param level [Symbol, const] the logger level
|
65
33
|
def log_level=(level)
|
66
34
|
if level.is_a?(Integer)
|
67
35
|
@logger.level = level
|
@@ -70,6 +38,7 @@ module Rake
|
|
70
38
|
end
|
71
39
|
end
|
72
40
|
|
41
|
+
# Initialize the rake task-builder
|
73
42
|
def initialize
|
74
43
|
@environment = Flatrack.assets
|
75
44
|
@logger = Logger.new($stderr)
|
@@ -82,25 +51,24 @@ module Rake
|
|
82
51
|
define
|
83
52
|
end
|
84
53
|
|
54
|
+
private
|
55
|
+
|
56
|
+
def define
|
57
|
+
instance_eval(&TASKS)
|
58
|
+
end
|
59
|
+
|
85
60
|
def assets
|
86
|
-
files = paths.reduce([]) do |ary, path|
|
87
|
-
ary + Dir[File.join path, '**', '*']
|
88
|
-
end
|
89
61
|
files.map do |file|
|
90
|
-
|
91
|
-
parts = file_basename.split('.').size
|
92
|
-
file = file.split('.').tap(&:pop).join('.') if parts > 2
|
93
|
-
File.expand_path(file).sub(/(#{environment.paths.join('|')})\//, '')
|
62
|
+
Asset.new(environment, file).path
|
94
63
|
end
|
95
64
|
end
|
96
65
|
|
97
|
-
|
98
|
-
|
99
|
-
|
66
|
+
def files
|
67
|
+
paths.reduce([]) do |ary, path|
|
68
|
+
ary + Dir[File.join path, '**', '*']
|
69
|
+
end
|
100
70
|
end
|
101
71
|
|
102
|
-
private
|
103
|
-
|
104
72
|
# Sub out environment logger with our rake task logger that
|
105
73
|
# writes to stderr.
|
106
74
|
def with_logger
|
data/spec/support/site_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flatrack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Waldrip
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -288,6 +288,20 @@ dependencies:
|
|
288
288
|
- - "~>"
|
289
289
|
- !ruby/object:Gem::Version
|
290
290
|
version: '0.3'
|
291
|
+
- !ruby/object:Gem::Dependency
|
292
|
+
name: yard
|
293
|
+
requirement: !ruby/object:Gem::Requirement
|
294
|
+
requirements:
|
295
|
+
- - "~>"
|
296
|
+
- !ruby/object:Gem::Version
|
297
|
+
version: '0.3'
|
298
|
+
type: :development
|
299
|
+
prerelease: false
|
300
|
+
version_requirements: !ruby/object:Gem::Requirement
|
301
|
+
requirements:
|
302
|
+
- - "~>"
|
303
|
+
- !ruby/object:Gem::Version
|
304
|
+
version: '0.3'
|
291
305
|
description: |+
|
292
306
|
A rack based static site builder with templates, layouts and project structure
|
293
307
|
based routing.
|
@@ -345,6 +359,8 @@ files:
|
|
345
359
|
- lib/flatrack/view/request_helper.rb
|
346
360
|
- lib/flatrack/view/tag_helper.rb
|
347
361
|
- lib/rake/asset_tasks.rb
|
362
|
+
- lib/rake/asset_tasks/asset.rb
|
363
|
+
- lib/rake/asset_tasks/tasks.rb
|
348
364
|
- public/assets/manifest-6d7e78baa6d2c0670a82be957315fcbc.json
|
349
365
|
- spec/fixtures/assets/sample.css.scss
|
350
366
|
- spec/fixtures/assets/sample.js.coffee
|