munge 0.18.0 → 0.19.0
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/lib/munge.rb +32 -31
- data/lib/munge/application.rb +7 -7
- data/lib/munge/bootloader.rb +0 -11
- data/lib/munge/cli.rb +3 -3
- data/lib/munge/cli/commands/build.rb +17 -21
- data/lib/munge/cli/commands/clean.rb +28 -33
- data/lib/munge/cli/commands/init.rb +1 -1
- data/lib/munge/cli/commands/server.rb +3 -3
- data/lib/munge/cli/dispatch.rb +56 -13
- data/lib/munge/config.rb +2 -2
- data/lib/munge/{system.rb → conglomerate.rb} +21 -14
- data/lib/munge/{system → conglomerate}/collection.rb +5 -26
- data/lib/munge/{system → conglomerate}/item_factory.rb +1 -1
- data/lib/munge/{system → conglomerate}/item_factory/content_parser.rb +1 -1
- data/lib/munge/{system → conglomerate}/item_factory/item_identifier.rb +1 -1
- data/lib/munge/conglomerate/processor.rb +138 -0
- data/lib/munge/conglomerate/reader.rb +33 -0
- data/lib/munge/{system → conglomerate}/router.rb +3 -3
- data/lib/munge/{system → conglomerate}/router/itemish.rb +1 -1
- data/lib/munge/{errors.rb → error.rb} +1 -25
- data/lib/munge/{extras → extra}/livereload.rb +5 -5
- data/lib/munge/{extras → extra}/livereload/messaging.rb +1 -1
- data/lib/munge/{extras → extra}/livereload/server.rb +1 -1
- data/lib/munge/{extras → extra}/livereload/update_client.rb +1 -1
- data/lib/munge/{extras → extra}/livereload/update_server.rb +1 -1
- data/lib/munge/{extras → extra}/livereload/vendor/livereload.js +0 -0
- data/lib/munge/{formatters → formatter}/default.rb +1 -1
- data/lib/munge/{formatters → formatter}/dots.rb +1 -1
- data/lib/munge/{formatters → formatter}/silent.rb +1 -1
- data/lib/munge/function/clean.rb +18 -0
- data/lib/munge/function/write.rb +68 -0
- data/lib/munge/go/sass.rb +5 -5
- data/lib/munge/go/sass/asset_urls.rb +2 -2
- data/lib/munge/{helpers → helper}/asset_paths.rb +1 -1
- data/lib/munge/{helpers → helper}/asset_tags.rb +1 -1
- data/lib/munge/{helpers → helper}/capture.rb +1 -1
- data/lib/munge/helper/data.rb +21 -0
- data/lib/munge/helper/define_module.rb +13 -0
- data/lib/munge/{helpers → helper}/find.rb +3 -3
- data/lib/munge/{helpers → helper}/link.rb +3 -3
- data/lib/munge/{helpers → helper}/livereload.rb +1 -1
- data/lib/munge/helper/rendering.rb +51 -0
- data/lib/munge/{helpers → helper}/tag.rb +4 -8
- data/lib/munge/item.rb +4 -5
- data/lib/munge/load.rb +60 -0
- data/lib/munge/pre_init.rb +10 -7
- data/lib/munge/{routers → router}/add_directory_index.rb +1 -1
- data/lib/munge/{routers → router}/auto_add_extension.rb +1 -1
- data/lib/munge/{routers → router}/fingerprint.rb +1 -1
- data/lib/munge/{routers → router}/remove_index_basename.rb +1 -1
- data/lib/munge/version.rb +1 -1
- data/lib/munge/vfs/dry_run.rb +28 -0
- data/lib/munge/vfs/filesystem.rb +44 -0
- data/lib/munge/vfs/memory.rb +33 -0
- data/lib/munge/write_manager/all.rb +11 -11
- data/lib/munge/write_manager/only_needed.rb +9 -9
- data/munge.gemspec +25 -17
- data/seeds/boot.rb +21 -0
- data/seeds/boot.yml +10 -0
- data/seeds/config.rb +7 -0
- data/seeds/layouts/blog_archives.html.erb +1 -1
- data/seeds/layouts/blog_index.html.erb +1 -1
- data/seeds/layouts/default.html.erb +1 -1
- data/seeds/lib/routing.rb +8 -8
- data/seeds/lib/sass.rb +1 -1
- data/seeds/lib/view_helpers.rb +3 -11
- data/seeds/rules.rb +1 -1
- data/seeds/src/home/index.html.erb +1 -1
- metadata +64 -46
- data/lib/munge/cleaner.rb +0 -31
- data/lib/munge/helpers/rendering.rb +0 -100
- data/lib/munge/init.rb +0 -45
- data/lib/munge/io/dry_run.rb +0 -31
- data/lib/munge/io/filesystem.rb +0 -38
- data/lib/munge/io/noop.rb +0 -27
- data/lib/munge/runner.rb +0 -68
- data/lib/munge/system/processor.rb +0 -52
- data/lib/munge/system/readers/filesystem.rb +0 -52
- data/lib/munge/transformers/tilt_transformer.rb +0 -40
- data/lib/munge/util/import.rb +0 -15
- data/seeds/setup.rb +0 -3
data/lib/munge/cleaner.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
class Cleaner
|
3
|
-
def initialize(path_to_clean:, paths_to_write:, io:)
|
4
|
-
@path_to_clean = path_to_clean
|
5
|
-
@paths_to_write = paths_to_write
|
6
|
-
@io = io
|
7
|
-
end
|
8
|
-
|
9
|
-
def orphans
|
10
|
-
existing_files - @paths_to_write
|
11
|
-
end
|
12
|
-
|
13
|
-
def delete
|
14
|
-
orphans.each { |orphan| @io.rm(orphan) }
|
15
|
-
|
16
|
-
Dir.glob(File.join(@path_to_clean, "**", "*")).reverse_each do |dir|
|
17
|
-
if !File.directory?(dir)
|
18
|
-
next
|
19
|
-
end
|
20
|
-
|
21
|
-
@io.rmdir(dir)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def existing_files
|
28
|
-
Dir.glob(File.join(@path_to_clean, "**", "*")).select { |path| File.file?(path) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,100 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
module Helpers
|
3
|
-
module Rendering
|
4
|
-
def render(item, engines: nil, data: {}, content_override: nil)
|
5
|
-
content = content_override || item.content
|
6
|
-
renderers = tilt_renderer_list(item, engines)
|
7
|
-
mdata = merged_data(item.frontmatter, data, self_item: item)
|
8
|
-
item_path = item.relpath
|
9
|
-
|
10
|
-
render_string(content, data: mdata, engines: renderers, template_name: item_path)
|
11
|
-
end
|
12
|
-
|
13
|
-
def layout(item_or_string, data: {}, &block)
|
14
|
-
layout_item = resolve_layout(item_or_string)
|
15
|
-
renderers = tilt_renderer_list(layout_item, nil)
|
16
|
-
mdata = merged_data(layout_item.frontmatter, data, self_layout: layout_item)
|
17
|
-
layout_path = "(layout) #{layout_item.relpath}"
|
18
|
-
|
19
|
-
render_string(layout_item.content, data: mdata, engines: renderers, template_name: layout_path, &block)
|
20
|
-
end
|
21
|
-
|
22
|
-
def render_string(content, data: {}, engines: [], template_name: nil, &block)
|
23
|
-
inner =
|
24
|
-
if block_given?
|
25
|
-
capture(&block)
|
26
|
-
end
|
27
|
-
|
28
|
-
output =
|
29
|
-
engines
|
30
|
-
.reduce(content) do |memoized_content, engine|
|
31
|
-
options = tilt_options[engine]
|
32
|
-
template = engine.new(template_name, options) { memoized_content }
|
33
|
-
|
34
|
-
template.render(self, data) { inner }
|
35
|
-
end
|
36
|
-
|
37
|
-
if block_given?
|
38
|
-
append_to_erbout(block.binding, output)
|
39
|
-
end
|
40
|
-
|
41
|
-
output
|
42
|
-
end
|
43
|
-
|
44
|
-
def render_with_layout(item, content_engines: nil, data: {}, content_override: nil)
|
45
|
-
inner = render(item, engines: content_engines, data: data, content_override: content_override)
|
46
|
-
mdata = merged_data(item.frontmatter, data, self_item: item)
|
47
|
-
|
48
|
-
if item.layout
|
49
|
-
layout(item.layout, data: mdata) do
|
50
|
-
inner
|
51
|
-
end
|
52
|
-
else
|
53
|
-
inner
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
def merged_data(*data)
|
60
|
-
hash_with_string_and_symbol_keys =
|
61
|
-
data.reduce(system.global_data) do |merged, datum|
|
62
|
-
merged.merge(datum)
|
63
|
-
end
|
64
|
-
|
65
|
-
Munge::Util::SymbolHash.deep_convert(hash_with_string_and_symbol_keys)
|
66
|
-
end
|
67
|
-
|
68
|
-
def resolve_layout(item_or_string)
|
69
|
-
if item_or_string.is_a?(String)
|
70
|
-
system.layouts[item_or_string]
|
71
|
-
else
|
72
|
-
item_or_string
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def tilt_renderer_list(item, preferred_engine)
|
77
|
-
if preferred_engine
|
78
|
-
tilt_renderers_from_preferred(preferred_engine)
|
79
|
-
else
|
80
|
-
tilt_renderers_from_path(item.relpath)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def tilt_renderers_from_path(path)
|
85
|
-
::Tilt.templates_for(path)
|
86
|
-
end
|
87
|
-
|
88
|
-
def tilt_renderers_from_preferred(preferred_engines)
|
89
|
-
preferred =
|
90
|
-
if preferred_engines.is_a?(Array)
|
91
|
-
preferred_engines.flatten.join(".")
|
92
|
-
else
|
93
|
-
preferred_engines
|
94
|
-
end
|
95
|
-
|
96
|
-
::Tilt.templates_for(preferred)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
data/lib/munge/init.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
# This class loads the user rules, as well as provides some useful methods
|
3
|
-
# for setup.
|
4
|
-
class Init
|
5
|
-
include Munge::Util::Import
|
6
|
-
|
7
|
-
# Initializing loads up the user's `setup.rb` and `rules.rb`.
|
8
|
-
def initialize(root_path:,
|
9
|
-
config:,
|
10
|
-
setup_path:,
|
11
|
-
rules_path:)
|
12
|
-
@root_path = root_path
|
13
|
-
@setup_path = setup_path
|
14
|
-
@rules_path = rules_path
|
15
|
-
@binding = binding
|
16
|
-
|
17
|
-
system = Munge::System.new(root_path, config)
|
18
|
-
|
19
|
-
import(setup_path)
|
20
|
-
|
21
|
-
@app = Munge::Application.new(system)
|
22
|
-
|
23
|
-
import(rules_path)
|
24
|
-
|
25
|
-
@app.items.each(&:freeze)
|
26
|
-
@app.items.freeze
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [String] path to user's `lib/` directory
|
30
|
-
def lib_path
|
31
|
-
File.join(root_path, "lib")
|
32
|
-
end
|
33
|
-
|
34
|
-
# Loads file into current scope. Similar to `load "filename.rb"`
|
35
|
-
#
|
36
|
-
# @return [void]
|
37
|
-
def import(file_path)
|
38
|
-
absolute_file_path = File.expand_path(file_path, root_path)
|
39
|
-
import_to_context(absolute_file_path, @binding)
|
40
|
-
end
|
41
|
-
|
42
|
-
attr_reader :app
|
43
|
-
attr_reader :root_path
|
44
|
-
end
|
45
|
-
end
|
data/lib/munge/io/dry_run.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
module Io
|
3
|
-
# NoOp driver for writing files. This is used to compute dry-runs.
|
4
|
-
class DryRun
|
5
|
-
def initialize(driver)
|
6
|
-
@driver = driver
|
7
|
-
end
|
8
|
-
|
9
|
-
# Pretends to write, but actually does nothing
|
10
|
-
#
|
11
|
-
# @param _abspath [String]
|
12
|
-
# @param _content [String]
|
13
|
-
def write(_abspath, _content)
|
14
|
-
end
|
15
|
-
|
16
|
-
def exist?(path)
|
17
|
-
@driver.exist?(path)
|
18
|
-
end
|
19
|
-
|
20
|
-
def read(path)
|
21
|
-
@driver.read(path)
|
22
|
-
end
|
23
|
-
|
24
|
-
def rm(_path)
|
25
|
-
end
|
26
|
-
|
27
|
-
def rmdir(_path)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/munge/io/filesystem.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
module Io
|
3
|
-
# Filesystem driver for writing files. These drivers can be defined however
|
4
|
-
# you wish, as long as the `#write` method accepts an abspath and content.
|
5
|
-
class Filesystem
|
6
|
-
# Writes content to abspath. Nonexistent directories will be created
|
7
|
-
# automatically.
|
8
|
-
#
|
9
|
-
# @param abspath [String]
|
10
|
-
# @param content [String]
|
11
|
-
def write(abspath, content)
|
12
|
-
FileUtils.mkdir_p(File.dirname(abspath))
|
13
|
-
|
14
|
-
File.write(abspath, content)
|
15
|
-
end
|
16
|
-
|
17
|
-
def exist?(path)
|
18
|
-
File.exist?(path)
|
19
|
-
end
|
20
|
-
|
21
|
-
def read(path)
|
22
|
-
File.read(path)
|
23
|
-
end
|
24
|
-
|
25
|
-
def rm(path)
|
26
|
-
File.delete(path)
|
27
|
-
end
|
28
|
-
|
29
|
-
def rmdir(path)
|
30
|
-
contents = Dir.entries(path) - %w(. ..)
|
31
|
-
|
32
|
-
if contents.empty?
|
33
|
-
Dir.rmdir(path)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/munge/io/noop.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
module Io
|
3
|
-
# NoOp driver for writing files. This is used to compute dry-runs.
|
4
|
-
class Noop
|
5
|
-
# Pretends to write, but actually does nothing
|
6
|
-
#
|
7
|
-
# @param _abspath [String]
|
8
|
-
# @param _content [String]
|
9
|
-
def write(_abspath, _content)
|
10
|
-
end
|
11
|
-
|
12
|
-
def exist?(_path)
|
13
|
-
false
|
14
|
-
end
|
15
|
-
|
16
|
-
def read(_path)
|
17
|
-
""
|
18
|
-
end
|
19
|
-
|
20
|
-
def rm(_path)
|
21
|
-
end
|
22
|
-
|
23
|
-
def rmdir(_path)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/munge/runner.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
class Runner
|
3
|
-
def initialize(items:, router:, processor:, io:, reporter:, destination:, manager:)
|
4
|
-
@items = items
|
5
|
-
@router = router
|
6
|
-
@processor = processor
|
7
|
-
@io = io
|
8
|
-
@reporter = reporter
|
9
|
-
@destination = destination
|
10
|
-
@manager = manager
|
11
|
-
@written_paths = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def write
|
15
|
-
@reporter.start
|
16
|
-
|
17
|
-
@items
|
18
|
-
.reject { |item| item.route.nil? }
|
19
|
-
.each { |item| render_and_write(item) }
|
20
|
-
|
21
|
-
@reporter.done
|
22
|
-
|
23
|
-
@manager.written_routes
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def render_and_write(item)
|
29
|
-
relpath = @router.filepath(item)
|
30
|
-
abspath = File.join(@destination, relpath)
|
31
|
-
route = @router.route(item)
|
32
|
-
content = @processor.transform(item)
|
33
|
-
|
34
|
-
write_status = status(abspath, content)
|
35
|
-
|
36
|
-
case write_status
|
37
|
-
when :new
|
38
|
-
@manager.on_new(route, abspath, content)
|
39
|
-
when :changed
|
40
|
-
@manager.on_changed(route, abspath, content)
|
41
|
-
when :identical
|
42
|
-
@manager.on_identical(route, abspath, content)
|
43
|
-
when :double_write_error
|
44
|
-
raise Errors::DoubleWriteError, item.route
|
45
|
-
end
|
46
|
-
|
47
|
-
@reporter.call(item, relpath, write_status)
|
48
|
-
end
|
49
|
-
|
50
|
-
def status(path, content)
|
51
|
-
if @written_paths.include?(path)
|
52
|
-
return :double_write_error
|
53
|
-
end
|
54
|
-
|
55
|
-
@written_paths.push(path)
|
56
|
-
|
57
|
-
if !@io.exist?(path)
|
58
|
-
return :new
|
59
|
-
end
|
60
|
-
|
61
|
-
if @io.read(path) == content
|
62
|
-
return :identical
|
63
|
-
end
|
64
|
-
|
65
|
-
:changed
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
class System
|
3
|
-
class Processor
|
4
|
-
def initialize
|
5
|
-
@registry = {}
|
6
|
-
end
|
7
|
-
|
8
|
-
# Register tranformer
|
9
|
-
#
|
10
|
-
# @see Munge::Transformers::Tilt
|
11
|
-
def register(transformer)
|
12
|
-
register_manually(transformer.name, transformer)
|
13
|
-
end
|
14
|
-
|
15
|
-
# Register transformer manually
|
16
|
-
#
|
17
|
-
# @see Munge::Transformers::Tilt
|
18
|
-
# @param name [Symbol] Snake case name
|
19
|
-
# @param transformer [#call]
|
20
|
-
def register_manually(name, transformer)
|
21
|
-
if @registry.key?(name)
|
22
|
-
raise Errors::DuplicateTransformerError, name
|
23
|
-
else
|
24
|
-
@registry[name] = transformer
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Transforms the given item's content
|
29
|
-
#
|
30
|
-
# @param item [Item]
|
31
|
-
def transform(item)
|
32
|
-
item.transforms
|
33
|
-
.map { |name, args| [get_transformer(name), args] }
|
34
|
-
.reduce(item.content) do |content, params|
|
35
|
-
transformer, args = params
|
36
|
-
|
37
|
-
transformer.call(item, content, *args)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def get_transformer(name)
|
44
|
-
if @registry.key?(name)
|
45
|
-
@registry[name]
|
46
|
-
else
|
47
|
-
raise Errors::TransformerNotFoundError, name
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
module Munge
|
2
|
-
class System
|
3
|
-
module Readers
|
4
|
-
# Enumerable list of {Munge::Item}s
|
5
|
-
class Filesystem
|
6
|
-
include Enumerable
|
7
|
-
|
8
|
-
# @param source_path [String]
|
9
|
-
def initialize(source_path)
|
10
|
-
@source_path = source_path
|
11
|
-
end
|
12
|
-
|
13
|
-
# @yield [Item]
|
14
|
-
# @return [Enumerator]
|
15
|
-
def each
|
16
|
-
return enum_for(:each) unless block_given?
|
17
|
-
|
18
|
-
filepaths =
|
19
|
-
Dir.glob(File.join(@source_path, "**", "*"))
|
20
|
-
.select { |path| File.file?(path) }
|
21
|
-
|
22
|
-
filepaths.each do |abspath|
|
23
|
-
filehash = Hash[
|
24
|
-
relpath: compute_relpath(abspath),
|
25
|
-
content: compute_content(abspath),
|
26
|
-
stat: compute_stat(abspath)
|
27
|
-
]
|
28
|
-
|
29
|
-
yield filehash
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def compute_stat(abspath)
|
36
|
-
File.stat(abspath)
|
37
|
-
end
|
38
|
-
|
39
|
-
def compute_relpath(abspath)
|
40
|
-
folder = Pathname.new(@source_path)
|
41
|
-
file = Pathname.new(abspath)
|
42
|
-
|
43
|
-
file.relative_path_from(folder).to_s
|
44
|
-
end
|
45
|
-
|
46
|
-
def compute_content(abspath)
|
47
|
-
File.read(abspath)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|