usmu 0.2.2 → 0.3.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/.gitignore +2 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +63 -3
- data/lib/usmu/configuration.rb +5 -3
- data/lib/usmu/site_generator.rb +2 -0
- data/lib/usmu/template/layout.rb +62 -6
- data/lib/usmu/template/page.rb +17 -0
- data/lib/usmu/template/static_file.rb +3 -2
- data/lib/usmu/ui/console.rb +5 -0
- data/lib/usmu/version.rb +1 -1
- data/share/init-site/usmu.yml +3 -0
- data/test/expected-site/css/app.css +2 -0
- data/test/expected-site/index.html +1 -1
- data/test/expected-site/posts/test-post.html +18 -0
- data/test/site/content/css/_partial.scss +1 -0
- data/test/site/content/css/app.scss +5 -0
- data/test/site/content/posts/test-post.md +3 -0
- data/test/site/layouts/html.slim +1 -1
- data/test/site/usmu.yml +4 -1
- data/test/spec/acceptance/steps/full_site_build_steps.rb +1 -1
- data/test/spec/site_generator_spec.rb +7 -2
- data/test/spec/support/shared_layout.rb +9 -0
- data/test/spec/template/layout_spec.rb +21 -0
- data/test/spec/ui/console_spec.rb +5 -0
- data/usmu.gemspec +3 -0
- metadata +41 -5
- data/test/site/layouts/html.meta.yml +0 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ed2e494db784cf3a3c1eb959eb36cd23460e9f4e
|
|
4
|
+
data.tar.gz: 300f0c268563caa186ade7f41d84a12a2d72c4fe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e338182d6654d55cd1495d12702b3dbdac35a48fa9c79ebec0c846fb75bf01cbcbdbd230a2fa279c56eb01ccca9d0dd64e3aa92a996ec2d826debeb54e9b70ad
|
|
7
|
+
data.tar.gz: b528d3ccb26688545f2c3ea277edfab575abe72d266be8fc361d8fb1a1762c360d30cc905a8842da20232a8b2ab85d530a898f67804f9b8517f3e81527a0ec97
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,56 @@
|
|
|
1
1
|
# Usmu Change Log
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
Matthew Scharley <matt.scharley@gmail.com>
|
|
6
|
+
|
|
7
|
+
* Ignore vendored gems (5ed00eda230ad69d727d61197a2eff6269bcc640)
|
|
8
|
+
* Bump CHANGELOG to 0.2.2 (daea8c79c04acfd7048aa7f801c9e34462e4a06d)
|
|
9
|
+
* Fix a bug with #load_configuration (ab08a884c346fcbca784bf229b42e65bbff2b63a)
|
|
10
|
+
* Enable rvm 2.2 for the latest and greatest (e28532f0fe25f46c03e18fd9e6a2dd05c388647e)
|
|
11
|
+
* [\[\#12\]][GH-12] Fix layout loop issues finally (b3164c5bd0374837c56c1cab6554a2a7b7b207ef)
|
|
12
|
+
* Add libnotify for guard (e51971a22b7d57bcb892e90fa2feb89571b2311b)
|
|
13
|
+
* [\[\#14\]][GH-14] Don't list directories in Configuration#get_files (e56d81d7bfeae9d3312c84f2cfe3d03e268ca738)
|
|
14
|
+
* [\[\#17\]][GH-17] Fix Sass processing (5b00cc3f29e32ce31d8a13c2979d953509b3a334)
|
|
15
|
+
* [\[\#13\]][GH-13] Add page metadata to parent layouts (c2da294e1f19e6404df178ee650c3818cc0f3846)
|
|
16
|
+
* Add a Sass partials exclude to default init site (4f70d5b1b5958b6c56338b8d077711c780c85763)
|
|
17
|
+
|
|
18
|
+
## 0.2.2
|
|
19
|
+
|
|
20
|
+
Matthew Scharley <matt.scharley@gmail.com>
|
|
21
|
+
|
|
22
|
+
* Bump version to 0.3.0.dev for further dev (896cbde8191b8123a280b5a2c96af524d8055d07)
|
|
23
|
+
* Ignore CR's in generated site to tame diff on Windows (839ab4bfea0bea1a1932b569b636540172d3e633)
|
|
24
|
+
* Setup logging properly in Usmu::Plugin::Core (6b4f6cbc133830dc93248d3bc4fb71a2c2aab5a9)
|
|
25
|
+
* Allow --trace from commander to function properly (815bb4f12ef7128cb404fe93745c130b990e073d)
|
|
26
|
+
* [\[GH-8\]][GH-8] Add an init command (feb3fd659c0180b572449dbdc186d4ada5fb6c61)
|
|
27
|
+
* [\[GH-8\]][GH-8] Add tests for the init command (5bbf4031708278b27b7779d170a2a54ca708dd9f)
|
|
28
|
+
* Clean up the tmp folder with `rake clean` (2efe4a713fe75569d292bc17801dcd9b1ea2aa02)
|
|
29
|
+
* Always use --trace with the acceptance tests (cf9cacccb9faef248d52053c90a0be92f60b7704)
|
|
30
|
+
* Fix bug in init command where directories could be uncreated before usage (c53cf247923c48a6d6f84581fdf3e8845ad9d4da)
|
|
31
|
+
* Update Rubinius runs for Travis (688f32a76a08a95f261fa6f35f12bce23a0daa39)
|
|
32
|
+
* Remove the rbx-head exclude (6ded194e282909f9e7672e645f6c7b626f2ebb1c)
|
|
33
|
+
* Remove rbx-2.0 from Travis again - unsupported (de6d536ac04f16352878e92cc7561c0f9a145f54)
|
|
34
|
+
* Allow rbx-2.3 (7de8f4ca7fc27647edf9ac1e59d138ec2cd8ff1e)
|
|
35
|
+
* Add jruby 2.0 runs (e865e35445ccffb91e20aebf5c17a948ab38f336)
|
|
36
|
+
* Fix matrix excludes for jruby (9fa82f64cddb6096e891c418790aadddb00d58a8)
|
|
37
|
+
* Fix matrix excludes (again) (hopefully) (4b3dd6370369310219cdc38d9c2ed1169ee28eca)
|
|
38
|
+
* Last run at fixing the jruby 2.0 stuff (febb399e8cc5facd29cc1d164a0bddf75c953741)
|
|
39
|
+
* Greatly simplify travis.yml using matrix include instead of exclude (5ad500f8ec428be5d86c400006735f8b4cf1c61f)
|
|
40
|
+
* Fix gemfile name because I'm a derp (10e73938565049e8ff323da99fca35d024a34134)
|
|
41
|
+
* Add a changelog (ea82ed9826517920c7e39d73a5e3df167f9512b4)
|
|
42
|
+
* Enable rbx-2.4 build for testing (34fd5415af64ce0fafad3805188b34b99119f37e)
|
|
43
|
+
* Track mruby compatibility (163cd5a5956f39a1e46fdf9c381c961d2d21e52d)
|
|
44
|
+
* Officially support Rubinius 2.3 (2abe1da65e4f65d065d9d8f084bffae607045043)
|
|
45
|
+
* Update compatibility information (1be9e1cee10f3aab20f514195dfbc17deb8138f4)
|
|
46
|
+
* Bump slim to 3.0 (f258e53bb3f04187406a1ba0736c53be4105ee09)
|
|
47
|
+
* Massive refactor to create the Usmu::Template namespace (425956dd04b199e5ac32582ed5856d01b6251e35)
|
|
48
|
+
* Add an irb task to rake (e7506c686696344b506da2df8705d918bf1b0ba0)
|
|
49
|
+
* [\[\#9\]][GH-9] Add tests for includes in slim (95f4c4992e4984fcdd95c0ba66805714da215cfc)
|
|
50
|
+
* [\[\#9\]][GH-9] Implement includes (5a4e69aa8b45fac4a697d56814177023f052c585)
|
|
51
|
+
* Remove RBX 2.3 again. (b8675c07d0fe066c466144c27e690f1863a88888)
|
|
52
|
+
* Release 0.2.2 (986f611b167a0503108d41ac0a115e38d6aac2f9)
|
|
53
|
+
|
|
3
54
|
## 0.2.1
|
|
4
55
|
|
|
5
56
|
Matthew Scharley <matt.scharley@gmail.com>
|
|
@@ -27,10 +78,10 @@ Matthew Scharley <matt.scharley@gmail.com>
|
|
|
27
78
|
* Remove cucumber from the CI task (d4094db005db5205542eb8256e86f01d9cd49d05)
|
|
28
79
|
* Allow the rspec rake task to find it's own spec files (35d6f7e4486f14034544884090b5cccfd7bd82ad)
|
|
29
80
|
* Use Redcarpet 3.2! (5c7a9d34f5ec2c12089b1e045e174f26f34877f2)
|
|
30
|
-
* [GH-7] Allow for excluding files via usmu.conf (da0f1123316ce1cede23a63cea8e6c46c3a17a01)
|
|
81
|
+
* [\[GH-7\]][GH-7] Allow for excluding files via usmu.conf (da0f1123316ce1cede23a63cea8e6c46c3a17a01)
|
|
31
82
|
* Add one more guard test on exclude globs (143460ea5f5427845e01119a8aba039207382a1b)
|
|
32
|
-
* [GH-5] Add an initial pass at a plugin system (73588da4bfaf03fa27a47747b56f6e31d95c8704)
|
|
33
|
-
* [GH-5] Transition to commander instead of trollop and make `generate` an official command (1aaaf43c0884c70980af3b7e6fcaa8ce57f7474c)
|
|
83
|
+
* [\[GH-5\]][GH-5] Add an initial pass at a plugin system (73588da4bfaf03fa27a47747b56f6e31d95c8704)
|
|
84
|
+
* [\[GH-5\]][GH-5] Transition to commander instead of trollop and make `generate` an official command (1aaaf43c0884c70980af3b7e6fcaa8ce57f7474c)
|
|
34
85
|
* 1.9.3 compatibility (cba51ad465576ac542111d200cfcbb62835c097c)
|
|
35
86
|
* Re-enable 1.9.3 CI and add some compat notes to the readme (cf34053aaaf6a85752ec8be70f7c9969a89990d9)
|
|
36
87
|
* Bump to 0.2.0 release (7e7dde04c180b5ae63268db647ba45ef63a6b3f3)
|
|
@@ -80,3 +131,12 @@ Matthew Scharley <matt.scharley@gmail.com>
|
|
|
80
131
|
* Small stylistic change (ae008aa5492b2463774e4e4659d90666059b45e0)
|
|
81
132
|
* Add new custom rake tasks for building gems and fix a few small issues with the specs (5b1a4241cd9f31f39179ffaad49f7155617c0e6f)
|
|
82
133
|
* Bump to full 0.1.0 release (fb91c2b54f79eeaeb615f98f874c990e4cdddfd3)
|
|
134
|
+
|
|
135
|
+
[GH-5]: https://github.com/usmu/usmu/issues/5
|
|
136
|
+
[GH-7]: https://github.com/usmu/usmu/issues/7
|
|
137
|
+
[GH-8]: https://github.com/usmu/usmu/issues/8
|
|
138
|
+
[GH-9]: https://github.com/usmu/usmu/issues/9
|
|
139
|
+
[GH-12]: https://github.com/usmu/usmu/issues/12
|
|
140
|
+
[GH-13]: https://github.com/usmu/usmu/issues/13
|
|
141
|
+
[GH-14]: https://github.com/usmu/usmu/issues/14
|
|
142
|
+
[GH-17]: https://github.com/usmu/usmu/issues/17
|
data/lib/usmu/configuration.rb
CHANGED
|
@@ -126,9 +126,11 @@ module Usmu
|
|
|
126
126
|
# @param [Boolean] layout is this directory a layouts_path
|
|
127
127
|
# @return [Array<Usmu::Layout>, Array<Usmu::StaticFile>] Either an array of Layouts or StaticFiles in the directory
|
|
128
128
|
def get_files(directory)
|
|
129
|
-
Dir["#{directory}/**/{*,.??*}"].
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
Dir["#{directory}/**/{*,.??*}"].
|
|
130
|
+
select {|f| not File.directory? f }.
|
|
131
|
+
select {|f| !f.match(/\.meta.yml$/) }.
|
|
132
|
+
map {|f| f[(directory.length + 1)..f.length] }.
|
|
133
|
+
select {|f| not excluded? f }
|
|
132
134
|
end
|
|
133
135
|
end
|
|
134
136
|
end
|
data/lib/usmu/site_generator.rb
CHANGED
|
@@ -56,9 +56,11 @@ module Usmu
|
|
|
56
56
|
def generate
|
|
57
57
|
@log.info("Source: #{@configuration.source_path}")
|
|
58
58
|
@log.info("Destination: #{@configuration.destination_path}")
|
|
59
|
+
@log.info('')
|
|
59
60
|
|
|
60
61
|
renderables.each do |page|
|
|
61
62
|
@log.success("creating #{page.output_filename}...")
|
|
63
|
+
@log.debug("Rendering #{page.output_filename} from #{page.name}")
|
|
62
64
|
file = File.join(@configuration.destination_path, page.output_filename)
|
|
63
65
|
directory = File.dirname(file)
|
|
64
66
|
|
data/lib/usmu/template/layout.rb
CHANGED
|
@@ -46,6 +46,12 @@ module Usmu
|
|
|
46
46
|
|
|
47
47
|
@parent = nil
|
|
48
48
|
@parent = Layout.find_layout(configuration, self.metadata['layout'])
|
|
49
|
+
|
|
50
|
+
# Don't use the parent if it would result in weirdness
|
|
51
|
+
unless @parent.nil?
|
|
52
|
+
@parent = nil unless
|
|
53
|
+
output_extension == @parent.output_extension || output_extension.nil? || @parent.output_extension.nil?
|
|
54
|
+
end
|
|
49
55
|
end
|
|
50
56
|
|
|
51
57
|
# @!attribute [r] metadata
|
|
@@ -62,13 +68,22 @@ module Usmu
|
|
|
62
68
|
end
|
|
63
69
|
end
|
|
64
70
|
|
|
71
|
+
# This is a shortcut to accessing metadata.
|
|
72
|
+
#
|
|
73
|
+
# @see #metadata
|
|
74
|
+
def [](index)
|
|
75
|
+
metadata[index]
|
|
76
|
+
end
|
|
77
|
+
|
|
65
78
|
# Renders the file with any templating language required and returns the result
|
|
66
79
|
#
|
|
67
80
|
# @param variables [Hash] Variables to be used in the template.
|
|
68
81
|
# @return [String] The rendered file.
|
|
69
82
|
def render(variables = {})
|
|
70
|
-
|
|
83
|
+
template_config = add_template_defaults(@configuration[provider_name] || {}, provider_name)
|
|
84
|
+
content = template_class.new("#{@name}", 1, template_config) { @content }.
|
|
71
85
|
render(helpers, get_variables(variables))
|
|
86
|
+
|
|
72
87
|
has_cr = content.index("\r")
|
|
73
88
|
content += (has_cr ? "\r\n" : "\n") if content[-1] != "\n"
|
|
74
89
|
if @parent.nil?
|
|
@@ -122,19 +137,33 @@ module Usmu
|
|
|
122
137
|
# that name is nilable and can also be passed in as an Usmu::Template::Layout already for testing purposes.
|
|
123
138
|
# @return [Usmu::Layout]
|
|
124
139
|
def self.find_layout(configuration, name)
|
|
125
|
-
if name
|
|
126
|
-
|
|
140
|
+
return nil if name.nil?
|
|
141
|
+
|
|
142
|
+
@layout_history = @layout_history || {}
|
|
143
|
+
@layout_history[configuration] = @layout_history[configuration] || {}
|
|
144
|
+
if @layout_history[configuration][name]
|
|
145
|
+
Logging.logger[self].debug("Layout loop detected. Current loaded layouts: #{@layout_history[configuration].inspect}")
|
|
146
|
+
return nil
|
|
147
|
+
else
|
|
148
|
+
Logging.logger[self].debug("Loading layout '#{name}'")
|
|
149
|
+
@layout_history[configuration][name] = true
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
ret = nil
|
|
153
|
+
if name === 'none' || name.nil?
|
|
127
154
|
elsif name.class.name == 'String'
|
|
128
155
|
Dir["#{configuration.layouts_path}/#{name}.*"].each do |f|
|
|
129
156
|
filename = File.basename(f)
|
|
130
157
|
if filename != "#{name}.meta.yml"
|
|
131
|
-
|
|
158
|
+
ret = new(configuration, f[(configuration.layouts_path.length + 1)..f.length])
|
|
132
159
|
end
|
|
133
160
|
end
|
|
134
|
-
nil
|
|
135
161
|
else
|
|
136
|
-
name
|
|
162
|
+
ret = name
|
|
137
163
|
end
|
|
164
|
+
|
|
165
|
+
@layout_history[configuration][name] = nil
|
|
166
|
+
return ret
|
|
138
167
|
end
|
|
139
168
|
|
|
140
169
|
# Tests if a given file is a valid Tilt template based on the filename.
|
|
@@ -151,6 +180,17 @@ module Usmu
|
|
|
151
180
|
|
|
152
181
|
protected
|
|
153
182
|
|
|
183
|
+
# @!attribute [r] parent
|
|
184
|
+
# @return [Usmu::Template::Layout] The template acting as a wrapper for this template, if any
|
|
185
|
+
attr_reader :parent
|
|
186
|
+
|
|
187
|
+
# Allows for protected level direct access to the metadata store.
|
|
188
|
+
#
|
|
189
|
+
# @see #metadata
|
|
190
|
+
def []=(index, value)
|
|
191
|
+
@metadata[index] = value
|
|
192
|
+
end
|
|
193
|
+
|
|
154
194
|
# @!attribute [r] template_class
|
|
155
195
|
# @return [Tilt::Template] the Tilt template engine for this layout
|
|
156
196
|
def template_class
|
|
@@ -185,6 +225,22 @@ module Usmu
|
|
|
185
225
|
@helpers ||= Usmu::Template::Helpers.new(@configuration)
|
|
186
226
|
end
|
|
187
227
|
|
|
228
|
+
# Adds defaults for the given generator engine
|
|
229
|
+
#
|
|
230
|
+
# @param [Hash] overrides A hash of options provided by the user
|
|
231
|
+
# @param [String] engine The name of the rendering engine
|
|
232
|
+
# @return [Hash] Template options to pass into the engine
|
|
233
|
+
def add_template_defaults(overrides, engine)
|
|
234
|
+
case engine
|
|
235
|
+
when 'sass'
|
|
236
|
+
{
|
|
237
|
+
:load_paths => [@configuration.source_path + '/' + File.dirname(@name)]
|
|
238
|
+
}.deep_merge!(overrides)
|
|
239
|
+
else
|
|
240
|
+
overrides
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
188
244
|
private
|
|
189
245
|
|
|
190
246
|
# Utility function which collates variables to pass to the template engine.
|
data/lib/usmu/template/page.rb
CHANGED
|
@@ -4,6 +4,23 @@ module Usmu
|
|
|
4
4
|
module Template
|
|
5
5
|
# Represents a page in the source directory of the website.
|
|
6
6
|
class Page < Layout
|
|
7
|
+
|
|
8
|
+
# @param configuration [Usmu::Configuration] The configuration for the website we're generating.
|
|
9
|
+
# @param name [String] The name of the file in the source directory.
|
|
10
|
+
# @param type [String] The type of template to use with the file. Used for testing purposes.
|
|
11
|
+
# @param content [String] The content of the file. Used for testing purposes.
|
|
12
|
+
# @param metadata [String] The metadata for the file. Used for testing purposes.
|
|
13
|
+
def initialize(configuration, name, type = nil, content = nil, metadata = nil)
|
|
14
|
+
super(configuration, name, type, content, metadata)
|
|
15
|
+
|
|
16
|
+
current_parent = parent
|
|
17
|
+
until current_parent.nil?
|
|
18
|
+
@log.debug("Injecting page #{name} into #{current_parent.name}")
|
|
19
|
+
current_parent['page'] = self
|
|
20
|
+
current_parent = current_parent.parent
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
7
24
|
protected
|
|
8
25
|
|
|
9
26
|
# @!attribute [r] content_path
|
|
@@ -5,8 +5,6 @@ module Usmu
|
|
|
5
5
|
# Represents a static file which should be transferred to the destination unchanged. This also acts as the base
|
|
6
6
|
# class for all layouts and page types. The basic interface defined here is used to process all types of files.
|
|
7
7
|
class StaticFile
|
|
8
|
-
@log = Logging.logger[self]
|
|
9
|
-
|
|
10
8
|
# @!attribute [r] name
|
|
11
9
|
# @return [String] the name of the file in the source directory
|
|
12
10
|
attr_reader :name
|
|
@@ -18,6 +16,9 @@ module Usmu
|
|
|
18
16
|
# @param content [String] The content of the file. Used for testing purposes.
|
|
19
17
|
# @param metadata [String] The metadata for the file. Used for testing purposes.
|
|
20
18
|
def initialize(configuration, name, type = nil, content = nil, metadata = nil)
|
|
19
|
+
@log = Logging.logger[self]
|
|
20
|
+
@log.debug("Creating <##{self.class.name} @name=\"#{name}\">")
|
|
21
|
+
|
|
21
22
|
@configuration = configuration
|
|
22
23
|
@name = name
|
|
23
24
|
@type = type
|
data/lib/usmu/ui/console.rb
CHANGED
|
@@ -37,6 +37,10 @@ module Usmu
|
|
|
37
37
|
@commander.run!
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
# Load a configuration from a file
|
|
41
|
+
#
|
|
42
|
+
# @param [String] config Name of configuration file to load
|
|
43
|
+
# @return [Usmu::Configuration] the configuration for the site we will generate.
|
|
40
44
|
def load_configuration(config)
|
|
41
45
|
@log.info("Usmu v#{Usmu::VERSION}")
|
|
42
46
|
@log.info('')
|
|
@@ -48,6 +52,7 @@ module Usmu
|
|
|
48
52
|
@log.fatal("Unable to find configuration file at #{config}")
|
|
49
53
|
raise
|
|
50
54
|
end
|
|
55
|
+
@configuration
|
|
51
56
|
end
|
|
52
57
|
end
|
|
53
58
|
end
|
data/lib/usmu/version.rb
CHANGED
data/share/init-site/usmu.yml
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Default Title | Testing website</title>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<div id="content">
|
|
8
|
+
<h1>Hello world!</h1>
|
|
9
|
+
|
|
10
|
+
<p>This is my first post.</p>
|
|
11
|
+
|
|
12
|
+
</div>
|
|
13
|
+
<footer>
|
|
14
|
+
Copyright © Testers Inc.
|
|
15
|
+
</footer>
|
|
16
|
+
|
|
17
|
+
</body>
|
|
18
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$color: #000;
|
data/test/site/layouts/html.slim
CHANGED
data/test/site/usmu.yml
CHANGED
|
@@ -15,7 +15,7 @@ step 'I run usmu with the arguments :args' do |args|
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
step 'the directory :destination should match :test_folder' do |destination, test_folder|
|
|
18
|
-
run = %W{diff -
|
|
18
|
+
run = %W{diff -ur --strip-trailing-cr #{test_folder} #{destination}}
|
|
19
19
|
Open3.popen2e(*run) do |i, o, t|
|
|
20
20
|
output = run.join(' ') + "\n" + o.read
|
|
21
21
|
fail output if t.value != 0
|
|
@@ -11,12 +11,12 @@ RSpec.describe Usmu::SiteGenerator do
|
|
|
11
11
|
|
|
12
12
|
it 'should have a list of renderable items' do
|
|
13
13
|
expect(generator.respond_to? :renderables).to eq(true)
|
|
14
|
-
expect(generator.renderables.map {|r| r.name}.sort).to eq(%w{.dotfiletest.txt default.md embedded.md index.md robots.txt})
|
|
14
|
+
expect(generator.renderables.map {|r| r.name}.sort).to eq(%w{.dotfiletest.txt css/app.scss default.md embedded.md index.md posts/test-post.md robots.txt})
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it 'should have pages' do
|
|
18
18
|
expect(generator.respond_to? :pages).to eq(true)
|
|
19
|
-
expect(generator.pages.map {|p| p.name}.sort).to eq(%w{default.md embedded.md index.md})
|
|
19
|
+
expect(generator.pages.map {|p| p.name}.sort).to eq(%w{css/app.scss default.md embedded.md index.md posts/test-post.md})
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
it 'should have files' do
|
|
@@ -24,6 +24,11 @@ RSpec.describe Usmu::SiteGenerator do
|
|
|
24
24
|
expect(generator.files.map {|f| f.name}.sort).to eq(%w{.dotfiletest.txt robots.txt})
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
it 'should not list directories' do
|
|
28
|
+
expect(generator.respond_to? :files).to eq(true)
|
|
29
|
+
expect(generator.files.select {|f| f.name == 'posts'}.length).to eq(0)
|
|
30
|
+
end
|
|
31
|
+
|
|
27
32
|
it 'should be able to generate a site' do
|
|
28
33
|
expect(generator.respond_to? :generate).to eq(true)
|
|
29
34
|
end
|
|
@@ -173,6 +173,15 @@ RSpec.shared_examples 'an embeddable layout' do
|
|
|
173
173
|
EOF
|
|
174
174
|
end
|
|
175
175
|
|
|
176
|
+
it 'only uses a wrapper layout if the output types match' do
|
|
177
|
+
parent = described_class.new(empty_configuration, 'html.slim', 'slim', wrapper, {})
|
|
178
|
+
layout = described_class.new(empty_configuration, 'app.scss', 'scss', 'body { color: #000; }', {'layout' => parent})
|
|
179
|
+
expect(layout.render({'content' => ''})).to eq(<<-EOF)
|
|
180
|
+
body {
|
|
181
|
+
color: #000; }
|
|
182
|
+
EOF
|
|
183
|
+
end
|
|
184
|
+
|
|
176
185
|
context 'and prioritises' do
|
|
177
186
|
it 'metadata over parent metadata' do
|
|
178
187
|
parent = described_class.new(empty_configuration, 'html.slim', 'slim', wrapper, {'title' => 'title'})
|
|
@@ -16,4 +16,25 @@ RSpec.describe Usmu::Template::Layout do
|
|
|
16
16
|
expect(layout.respond_to? :input_path).to eq(true)
|
|
17
17
|
expect(layout.input_path).to eq('layouts/html.slim')
|
|
18
18
|
end
|
|
19
|
+
|
|
20
|
+
it 'should not allow circular references with #find_layout' do
|
|
21
|
+
# This will also get tested during the acceptance tests, though we test here explicitly to help aid narrow where
|
|
22
|
+
# the bug actually is.
|
|
23
|
+
configuration = Usmu::Configuration.from_file('test/site/usmu.yml')
|
|
24
|
+
layout = Usmu::Template::Layout.new(configuration, 'html.slim')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'should add a default load_path for sass templates' do
|
|
28
|
+
configuration = Usmu::Configuration.from_hash({'source' => 'src'}, 'test/usmu.yml')
|
|
29
|
+
layout = Usmu::Template::Layout.new(configuration, 'css/app.scss', 'scss', "body{color: #000;}", {})
|
|
30
|
+
defaults = layout.send :add_template_defaults, {}, 'sass'
|
|
31
|
+
expect(defaults[:load_paths]).to eq(['test/src/css'])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'should merge load_path\'s for sass templates' do
|
|
35
|
+
configuration = Usmu::Configuration.from_hash({'source' => 'src'}, 'test/usmu.yml')
|
|
36
|
+
layout = Usmu::Template::Layout.new(configuration, 'css/app.scss', 'scss', "body{color: #000;}", {})
|
|
37
|
+
defaults = layout.send :add_template_defaults, {load_paths: ['test/src/assets/scss']}, 'sass'
|
|
38
|
+
expect(defaults[:load_paths].sort).to eq(['test/src/assets/scss', 'test/src/css'])
|
|
39
|
+
end
|
|
19
40
|
end
|
|
@@ -17,4 +17,9 @@ RSpec.describe Usmu::Ui::Console do
|
|
|
17
17
|
expect(Usmu).to receive(:verbose_logging)
|
|
18
18
|
Usmu::Ui::Console.new(%w{--verbose --config test/site/usmu.yml})
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
it '#load_configuration returns a configuration' do
|
|
22
|
+
config = Usmu::Ui::Console.new(%w{--config test/site/usmu.yml}).load_configuration('test/site/usmu.yml')
|
|
23
|
+
expect(config.class.name).to eq('Usmu::Configuration')
|
|
24
|
+
end
|
|
20
25
|
end
|
data/usmu.gemspec
CHANGED
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.add_dependency 'deep_merge', '~> 1.0'
|
|
28
28
|
spec.add_dependency 'commander', '~> 4.2'
|
|
29
29
|
spec.add_dependency 'logging', '~> 1.8'
|
|
30
|
+
#spec.add_dependency 'pry'
|
|
30
31
|
|
|
31
32
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
|
32
33
|
spec.add_development_dependency 'rake', '~> 10.0'
|
|
@@ -36,5 +37,7 @@ Gem::Specification.new do |spec|
|
|
|
36
37
|
spec.add_development_dependency 'simplecov', '~> 0.9'
|
|
37
38
|
spec.add_development_dependency 'guard', '~> 2.8'
|
|
38
39
|
spec.add_development_dependency 'guard-rspec', '~> 4.3'
|
|
40
|
+
spec.add_development_dependency 'libnotify', '~> 0.9'
|
|
39
41
|
spec.add_development_dependency 'turnip', '~> 1.2'
|
|
42
|
+
spec.add_development_dependency 'sass', '~> 3.4'
|
|
40
43
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: usmu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew Scharley
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2015-01-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: slim
|
|
@@ -212,6 +212,20 @@ dependencies:
|
|
|
212
212
|
- - "~>"
|
|
213
213
|
- !ruby/object:Gem::Version
|
|
214
214
|
version: '4.3'
|
|
215
|
+
- !ruby/object:Gem::Dependency
|
|
216
|
+
name: libnotify
|
|
217
|
+
requirement: !ruby/object:Gem::Requirement
|
|
218
|
+
requirements:
|
|
219
|
+
- - "~>"
|
|
220
|
+
- !ruby/object:Gem::Version
|
|
221
|
+
version: '0.9'
|
|
222
|
+
type: :development
|
|
223
|
+
prerelease: false
|
|
224
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
225
|
+
requirements:
|
|
226
|
+
- - "~>"
|
|
227
|
+
- !ruby/object:Gem::Version
|
|
228
|
+
version: '0.9'
|
|
215
229
|
- !ruby/object:Gem::Dependency
|
|
216
230
|
name: turnip
|
|
217
231
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -226,6 +240,20 @@ dependencies:
|
|
|
226
240
|
- - "~>"
|
|
227
241
|
- !ruby/object:Gem::Version
|
|
228
242
|
version: '1.2'
|
|
243
|
+
- !ruby/object:Gem::Dependency
|
|
244
|
+
name: sass
|
|
245
|
+
requirement: !ruby/object:Gem::Requirement
|
|
246
|
+
requirements:
|
|
247
|
+
- - "~>"
|
|
248
|
+
- !ruby/object:Gem::Version
|
|
249
|
+
version: '3.4'
|
|
250
|
+
type: :development
|
|
251
|
+
prerelease: false
|
|
252
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
253
|
+
requirements:
|
|
254
|
+
- - "~>"
|
|
255
|
+
- !ruby/object:Gem::Version
|
|
256
|
+
version: '3.4'
|
|
229
257
|
description: |2
|
|
230
258
|
Usmu is a static site generator built in Ruby that leverages the Tilt API to support many different template
|
|
231
259
|
engines. It supports local generation but is designed to be used with the web-based editor.
|
|
@@ -271,22 +299,26 @@ files:
|
|
|
271
299
|
- share/init-site/source/index.md
|
|
272
300
|
- share/init-site/usmu.yml
|
|
273
301
|
- test/expected-site/.dotfiletest.txt
|
|
302
|
+
- test/expected-site/css/app.css
|
|
274
303
|
- test/expected-site/default.html
|
|
275
304
|
- test/expected-site/embedded.html
|
|
276
305
|
- test/expected-site/index.html
|
|
306
|
+
- test/expected-site/posts/test-post.html
|
|
277
307
|
- test/expected-site/robots.txt
|
|
278
308
|
- test/site/content/.dotfiletest.txt
|
|
309
|
+
- test/site/content/css/_partial.scss
|
|
310
|
+
- test/site/content/css/app.scss
|
|
279
311
|
- test/site/content/default.md
|
|
280
312
|
- test/site/content/embedded.md
|
|
281
313
|
- test/site/content/embedded.meta.yml
|
|
282
314
|
- test/site/content/index.md
|
|
283
315
|
- test/site/content/index.meta.yml
|
|
316
|
+
- test/site/content/posts/test-post.md
|
|
284
317
|
- test/site/content/robots.txt
|
|
285
318
|
- test/site/includes/footer.meta.yml
|
|
286
319
|
- test/site/includes/footer.slim
|
|
287
320
|
- test/site/layouts/embedded.meta.yml
|
|
288
321
|
- test/site/layouts/embedded.slim
|
|
289
|
-
- test/site/layouts/html.meta.yml
|
|
290
322
|
- test/site/layouts/html.slim
|
|
291
323
|
- test/site/usmu.yml
|
|
292
324
|
- test/spec/acceptance/full_site_build.feature
|
|
@@ -324,28 +356,32 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
324
356
|
version: '0'
|
|
325
357
|
requirements: []
|
|
326
358
|
rubyforge_project:
|
|
327
|
-
rubygems_version: 2.
|
|
359
|
+
rubygems_version: 2.2.2
|
|
328
360
|
signing_key:
|
|
329
361
|
specification_version: 4
|
|
330
362
|
summary: A static site generator with a web-based frontend for editing.
|
|
331
363
|
test_files:
|
|
332
364
|
- test/expected-site/.dotfiletest.txt
|
|
365
|
+
- test/expected-site/css/app.css
|
|
333
366
|
- test/expected-site/default.html
|
|
334
367
|
- test/expected-site/embedded.html
|
|
335
368
|
- test/expected-site/index.html
|
|
369
|
+
- test/expected-site/posts/test-post.html
|
|
336
370
|
- test/expected-site/robots.txt
|
|
337
371
|
- test/site/content/.dotfiletest.txt
|
|
372
|
+
- test/site/content/css/_partial.scss
|
|
373
|
+
- test/site/content/css/app.scss
|
|
338
374
|
- test/site/content/default.md
|
|
339
375
|
- test/site/content/embedded.md
|
|
340
376
|
- test/site/content/embedded.meta.yml
|
|
341
377
|
- test/site/content/index.md
|
|
342
378
|
- test/site/content/index.meta.yml
|
|
379
|
+
- test/site/content/posts/test-post.md
|
|
343
380
|
- test/site/content/robots.txt
|
|
344
381
|
- test/site/includes/footer.meta.yml
|
|
345
382
|
- test/site/includes/footer.slim
|
|
346
383
|
- test/site/layouts/embedded.meta.yml
|
|
347
384
|
- test/site/layouts/embedded.slim
|
|
348
|
-
- test/site/layouts/html.meta.yml
|
|
349
385
|
- test/site/layouts/html.slim
|
|
350
386
|
- test/site/usmu.yml
|
|
351
387
|
- test/spec/acceptance/full_site_build.feature
|