flatrack 1.2.0 → 1.2.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 +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
|