usmu 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -13
- data/CHANGELOG.md +21 -0
- data/Gemfile +2 -5
- data/README.md +14 -1
- data/Rakefile +9 -13
- data/bin/usmu +0 -0
- data/lib/usmu/configuration.rb +1 -1
- data/lib/usmu/plugin/core.rb +13 -4
- data/lib/usmu/plugin/core_hooks.rb +8 -0
- data/lib/usmu/plugin.rb +25 -6
- data/lib/usmu/site_generator.rb +13 -21
- data/lib/usmu/template/generated_file.rb +30 -0
- data/lib/usmu/version.rb +1 -1
- data/lib/usmu.rb +0 -3
- data/share/init-site/layouts/html.slim +1 -1
- data/share/init-site/{source → src}/index.md +0 -0
- data/share/init-site/{source → src}/index.meta.yml +0 -0
- data/spec/mock/usmu/mock_commander.rb +31 -0
- data/spec/plugin/core_spec.rb +116 -0
- data/spec/usmu/configuration_spec.rb +5 -9
- data/spec/usmu/site_generator_spec.rb +1 -27
- data/usmu.gemspec +2 -2
- metadata +13 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 415fda7fa65950566050fe558aff9697e8df2b96
|
4
|
+
data.tar.gz: 6c92092df34a7adc1d5e9131195c44da183f3aeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc70d6d676bf29b4337dbf7983f5ed5c5abf0a3f42e2394d590dd4495291f16257ee119778b4d40e5a6e3a25ef99babad13561c148c0043e78704faca1cd78ec
|
7
|
+
data.tar.gz: 0297b97ea1638910ff4729206d7835bc48d66de9d7d32a2655215e216b80900f3a4886d77b01fd94bcdabb34f4e4ab9994a903af3ceece8e40b5be79d2d29950
|
data/.travis.yml
CHANGED
@@ -1,18 +1,13 @@
|
|
1
1
|
language: ruby
|
2
|
+
before_install: gem update bundler
|
3
|
+
install: bundle install --jobs 3 --retry 3 --without mutant
|
2
4
|
script: rake ci
|
3
5
|
rvm:
|
4
|
-
- 1.9.3
|
5
6
|
- 2.0
|
6
7
|
- 2.1
|
7
8
|
- 2.2
|
8
9
|
- ruby-head
|
9
|
-
|
10
|
-
#- rbx-2.1
|
11
|
-
#- rbx-2.2
|
12
|
-
#- rbx-2.3
|
13
|
-
- rbx-2.4
|
14
|
-
- jruby
|
15
|
-
- jruby-head
|
10
|
+
- rbx
|
16
11
|
matrix:
|
17
12
|
include:
|
18
13
|
- rvm: jruby
|
@@ -20,14 +15,10 @@ matrix:
|
|
20
15
|
- rvm: jruby-head
|
21
16
|
env: JRUBY_OPTS='--2.0'
|
22
17
|
allow_failures:
|
23
|
-
- rvm: 1.9.3
|
24
18
|
- rvm: jruby
|
25
19
|
- rvm: jruby-head
|
26
20
|
- rvm: mruby-head
|
27
|
-
- rvm: rbx
|
28
|
-
- rvm: rbx-2.2
|
29
|
-
- rvm: rbx-2.3
|
30
|
-
- rvm: rbx-2.4
|
21
|
+
- rvm: rbx
|
31
22
|
addons:
|
32
23
|
code_climate:
|
33
24
|
repo_token: 5ac0735331c1749a461eae94f89cd2011cc001979f9941d7241f97caeff7bde1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# Usmu Change Log
|
2
2
|
|
3
|
+
## 1.1.0
|
4
|
+
|
5
|
+
Matthew Scharley <matt.scharley@gmail.com>
|
6
|
+
|
7
|
+
* [\[\#21\]][GH-21] Cleanup Usmu::Configuration (1bc417de24e34c8694be4a2e8bf83d18898eec56)
|
8
|
+
* [\[\#21\]][GH-21] Properly stub out tests for SiteGenerator (503233c7eab33f7d98714d185a1aefb70f02c73b)
|
9
|
+
* [\[\#21\]][GH-21] Cover SiteGenerator (e91d4e2b42738f7107ed0ed3e03aa7ed6abfe17d)
|
10
|
+
* Bump dependency modules (df1559e8ef3931e1c64530937d3361cbc330aafe)
|
11
|
+
* [\[#5\]][GH-5] WIP initial pass at allowing alter hooks (6a474db9032974bdac53870a3e690c983af434ff)
|
12
|
+
* [\[\#21\]][GH-21] Add an initial suite of tests for CorePlugin (d02e14aceaa24ac5708fb51bab5254f016bafa71)
|
13
|
+
* Update usage information with basic info in the README (86f525f861d4e80aea4a54e9a7f8fbbfbf472125)
|
14
|
+
* [\[#31\]][GH-31] Move source folder of init-site (b2e56277591468b57c45976506df603d6d7ed7d1)
|
15
|
+
* [\[#32\]][GH-32] Fix issues with the init-site (f4c577f4b25855e3ccc928c004edc3d924ba66b5)
|
16
|
+
* Cache the list of renderables and allow that list to be altered (990cf0bdf4353638af8b5f2f6f89a5f6338182ea)
|
17
|
+
* Fix tests (c4089e426abc24d399f352483fab5aa61657b3ab)
|
18
|
+
|
19
|
+
[GH-5]: https://github.com/usmu/usmu/issues/5
|
20
|
+
[GH-21]: https://github.com/usmu/usmu/issues/21
|
21
|
+
[GH-31]: https://github.com/usmu/usmu/issues/31
|
22
|
+
[GH-32]: https://github.com/usmu/usmu/issues/32
|
23
|
+
|
3
24
|
## 1.0.0
|
4
25
|
|
5
26
|
Matthew Scharley <matt.scharley@gmail.com>
|
data/Gemfile
CHANGED
@@ -13,8 +13,5 @@ end
|
|
13
13
|
gemspec name: 'usmu'
|
14
14
|
|
15
15
|
gem 'codeclimate-test-reporter', group: :test, require: nil
|
16
|
-
|
17
|
-
|
18
|
-
gem 'mutant', '~> 0.7', :group => :development
|
19
|
-
gem 'mutant-rspec', '~> 0.7', :group => :development
|
20
|
-
end
|
16
|
+
gem 'mutant', '~> 0.8', group: 'mutant'
|
17
|
+
gem 'mutant-rspec', '~> 0.8', group: 'mutant'
|
data/README.md
CHANGED
@@ -23,7 +23,20 @@ to generate locally if you don't wish to use the web-based editor.
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
|
26
|
+
You can generate a new basic website using `usmu init`.
|
27
|
+
|
28
|
+
$ usmu init site-name
|
29
|
+
|
30
|
+
This will create a new site in the `site-name` folder. You can now use `usmu generate` to build the test site.
|
31
|
+
|
32
|
+
$ cd site-name
|
33
|
+
$ usmu generate
|
34
|
+
|
35
|
+
You can also use `usmu serve` to get a live server that you can use to test changes you make. This will not modify any
|
36
|
+
files in your output folder but will instead dynamically generate and serve content directly from your files. Note,
|
37
|
+
this is in no way secure and it is highly recommended to only deploy static versions of your website.
|
38
|
+
|
39
|
+
$ usmu serve
|
27
40
|
|
28
41
|
## Compatibility
|
29
42
|
|
data/Rakefile
CHANGED
@@ -27,19 +27,15 @@ task :test => [:clean, :spec, :mutant]
|
|
27
27
|
desc 'Run mutation tests'
|
28
28
|
task :mutant, [:target] => [:clean] do |t,args|
|
29
29
|
old = ENV.delete('CODECLIMATE_REPO_TOKEN')
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
'--ignore-subject', 'Usmu::Deployment::RemoteFileInterface*',
|
40
|
-
'--ignore-subject', 'Usmu::Plugin::CoreHooks*',
|
41
|
-
args[:target] || 'Usmu*'
|
42
|
-
end
|
30
|
+
sh 'bundle', 'exec', 'mutant',
|
31
|
+
'--include', 'lib',
|
32
|
+
'--require', 'usmu',
|
33
|
+
'--require', 'usmu/deployment',
|
34
|
+
'--use', 'rspec',
|
35
|
+
# Interfaces and documentation classes
|
36
|
+
'--ignore-subject', 'Usmu::Deployment::RemoteFileInterface*',
|
37
|
+
'--ignore-subject', 'Usmu::Plugin::CoreHooks*',
|
38
|
+
args[:target] || 'Usmu*'
|
43
39
|
ENV['CODECLIMATE_REPO_TOKEN'] = old unless old.nil?
|
44
40
|
end
|
45
41
|
|
data/bin/usmu
CHANGED
File without changes
|
data/lib/usmu/configuration.rb
CHANGED
@@ -141,7 +141,7 @@ module Usmu
|
|
141
141
|
def excluded?(filename)
|
142
142
|
exclude.each do |f|
|
143
143
|
f += '**/*' if f.end_with? '/'
|
144
|
-
return true if File.fnmatch(f, filename,
|
144
|
+
return true if File.fnmatch(f, filename, File::FNM_EXTGLOB | File::FNM_PATHNAME)
|
145
145
|
end
|
146
146
|
false
|
147
147
|
end
|
data/lib/usmu/plugin/core.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'rack'
|
3
|
+
require 'usmu/ui/rack_server'
|
2
4
|
|
3
5
|
module Usmu
|
4
6
|
class Plugin
|
@@ -30,7 +32,7 @@ module Usmu
|
|
30
32
|
end
|
31
33
|
|
32
34
|
c.command(:serve) do |command|
|
33
|
-
command.syntax = 'usmu
|
35
|
+
command.syntax = 'usmu serve'
|
34
36
|
command.description = 'Serve files processed files directly. This won\'t update files on disk, but you will be able to view your website as rendered.'
|
35
37
|
command.action &method(:command_serve)
|
36
38
|
end
|
@@ -41,6 +43,9 @@ module Usmu
|
|
41
43
|
# @param [Array<String>] args arguments passed by the user.
|
42
44
|
# @param [Hash] options options parsed by Commander
|
43
45
|
def command_generate(args, options)
|
46
|
+
raise 'This command does not take arguments' unless args.empty?
|
47
|
+
raise 'Invalid options' unless options.inspect.start_with? '<Commander::Command::Options '
|
48
|
+
|
44
49
|
@ui.configuration.generator.generate
|
45
50
|
end
|
46
51
|
|
@@ -52,6 +57,7 @@ module Usmu
|
|
52
57
|
@log.info("Usmu v#{Usmu::VERSION}")
|
53
58
|
@log.info('')
|
54
59
|
|
60
|
+
raise 'Invalid options' unless options.inspect.start_with? '<Commander::Command::Options '
|
55
61
|
if args.length > 1
|
56
62
|
@log.fatal('Only one path allowed to be initialised at a time.')
|
57
63
|
raise
|
@@ -65,18 +71,21 @@ module Usmu
|
|
65
71
|
end
|
66
72
|
|
67
73
|
def command_serve(args, options)
|
74
|
+
raise 'This command does not take arguments' unless args.empty?
|
75
|
+
raise 'Invalid options' unless options.inspect.start_with? '<Commander::Command::Options '
|
76
|
+
|
68
77
|
configuration = @ui.configuration
|
69
78
|
@log.info('Starting webserver...')
|
70
|
-
require 'rack'
|
71
|
-
require 'usmu/ui/rack_server'
|
72
79
|
|
73
80
|
Rack::Handler::WEBrick.run Ui::RackServer.new(configuration),
|
74
|
-
host: configuration['serve', 'host', default: '
|
81
|
+
host: configuration['serve', 'host', default: 'localhost'],
|
75
82
|
port: configuration['serve', 'port', default: 8080]
|
76
83
|
end
|
77
84
|
|
78
85
|
private
|
79
86
|
|
87
|
+
attr_accessor :ui
|
88
|
+
|
80
89
|
# Helper to copy a file.
|
81
90
|
#
|
82
91
|
# @param [String] from
|
@@ -9,6 +9,14 @@ module Usmu
|
|
9
9
|
# @param [Usmu::Ui::Console] ui The UI instance for this session.
|
10
10
|
# @param [Commander::Runner] c The Commander instance to add commands to.
|
11
11
|
def commands(ui, c); end
|
12
|
+
|
13
|
+
# Hook to allow altering the list of files that are in the site.
|
14
|
+
#
|
15
|
+
# @param [Array<Usmu::Template::StaticFile>] renderables An array of renderables.
|
16
|
+
# @param [Usmu::SiteGenerator] generator The site generator being used.
|
17
|
+
#
|
18
|
+
# @return [Array<Usmu::Template::StaticFile>] The altered list of renderables.
|
19
|
+
def renderables_alter(renderables, generator); end
|
12
20
|
end
|
13
21
|
end
|
14
22
|
end
|
data/lib/usmu/plugin.rb
CHANGED
@@ -27,8 +27,9 @@ module Usmu
|
|
27
27
|
@plugins ||= []
|
28
28
|
end
|
29
29
|
|
30
|
-
# Call all plugins and collate any data returned.
|
31
|
-
#
|
30
|
+
# Call all plugins and collate any data returned.
|
31
|
+
#
|
32
|
+
# nil can be returned explicitly to say this plugin has nothing to return.
|
32
33
|
#
|
33
34
|
# @param [Symbol] method The name of the method to call. This should be namespaced somehow. For example, a plugin
|
34
35
|
# called `usmu-s3` could use the method namespace `s3` and have a hook called `:s3_upload`
|
@@ -46,6 +47,27 @@ module Usmu
|
|
46
47
|
end.select {|i| i}
|
47
48
|
end
|
48
49
|
|
50
|
+
# Call all plugins and allow for altering a value.
|
51
|
+
#
|
52
|
+
# The return value of each hook is passed into the next alter function, hence all implementations must always
|
53
|
+
# return a value. If the hook doesn't wish to modify data this call then it should return the original value.
|
54
|
+
#
|
55
|
+
# @param [Symbol] method The name of the method to call. This should be namespaced somehow. For example, a plugin
|
56
|
+
# called `usmu-s3` could use the method namespace `s3` and have a hook called `:s3_upload`
|
57
|
+
# @param [Object] value The value to modify.
|
58
|
+
# @param [Array] context Optional extra parameters to provide.
|
59
|
+
# @return [Object] The modified value.
|
60
|
+
def alter(method, value, *context)
|
61
|
+
@log.debug("Invoking plugin alter API #{method}")
|
62
|
+
plugins.each do |p|
|
63
|
+
if p.respond_to? "#{method}_alter"
|
64
|
+
@log.debug("Sending message to #{p.class.name}")
|
65
|
+
value = p.public_send "#{method}_alter", value, *context
|
66
|
+
end
|
67
|
+
end
|
68
|
+
value
|
69
|
+
end
|
70
|
+
|
49
71
|
private
|
50
72
|
|
51
73
|
# Helper function to load and instantiate plugin classes
|
@@ -53,10 +75,7 @@ module Usmu
|
|
53
75
|
# @param [String] klass The name of the class to load
|
54
76
|
# @return [Object] A plugin object
|
55
77
|
def plugin_get(klass)
|
56
|
-
|
57
|
-
rescue NameError
|
58
|
-
# Ruby 1.9.3, dowp
|
59
|
-
klass.split('::').reduce(Object) {|memo, o| memo.const_get o }.new
|
78
|
+
Object.const_get(klass).new
|
60
79
|
end
|
61
80
|
|
62
81
|
# Helper function to load a plugin from a gem specification
|
data/lib/usmu/site_generator.rb
CHANGED
@@ -29,28 +29,18 @@ module Usmu
|
|
29
29
|
# The only guarantee made for individual files is that they will conform to the interface defined by
|
30
30
|
# Usmu::Template::StaticFile and thus be renderable, however most files will be one of the subclasses of that class.
|
31
31
|
def renderables
|
32
|
-
@
|
33
|
-
|
34
|
-
|
35
|
-
Template::
|
36
|
-
|
37
|
-
|
32
|
+
@renderables ||= begin
|
33
|
+
rs = @configuration.source_files.map do |filename|
|
34
|
+
metadata = @configuration.source_metadata.metadata(filename)
|
35
|
+
if Template::Layout.is_valid_file?('source', filename) && (!metadata['static'])
|
36
|
+
Template::Page.new(@configuration, filename, metadata)
|
37
|
+
else
|
38
|
+
Template::StaticFile.new(@configuration, filename, metadata)
|
39
|
+
end
|
38
40
|
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# @!attribute [r] pages
|
43
|
-
# @return [Array<Usmu::Template::Page>]
|
44
|
-
# a list of pages from the source folder. This is any file in the source folder which is not static.
|
45
|
-
def pages
|
46
|
-
renderables.select {|r| r.class <= Template::Layout }
|
47
|
-
end
|
48
41
|
|
49
|
-
|
50
|
-
|
51
|
-
# a list of static files from the source folder.
|
52
|
-
def files
|
53
|
-
renderables - pages
|
42
|
+
Usmu.plugins.alter(:renderables, rs, self)
|
43
|
+
end
|
54
44
|
end
|
55
45
|
|
56
46
|
# Generate the website according to the configuration given.
|
@@ -95,7 +85,9 @@ module Usmu
|
|
95
85
|
end
|
96
86
|
|
97
87
|
File.write file, page.render
|
98
|
-
|
88
|
+
|
89
|
+
mtime = page.input_path.nil? ? Time.now.to_i : File.stat(page.input_path).mtime
|
90
|
+
FileUtils.touch file, mtime: mtime
|
99
91
|
nil
|
100
92
|
end
|
101
93
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'usmu/template/static_file'
|
2
|
+
|
3
|
+
module Usmu
|
4
|
+
module Template
|
5
|
+
class GeneratedFile < StaticFile
|
6
|
+
def initialize(configuration, name, metadata = {}, type = nil, content = nil)
|
7
|
+
super(configuration, name, metadata, type, content)
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
unless @content
|
12
|
+
raise 'Render not implemented'
|
13
|
+
end
|
14
|
+
@content
|
15
|
+
end
|
16
|
+
|
17
|
+
def input_path
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def metadata
|
22
|
+
@metadata
|
23
|
+
end
|
24
|
+
|
25
|
+
def inspect
|
26
|
+
"\#<#{self.class}:#{'0x%08x' % __id__} #{@name} => #{output_filename}>"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/usmu/version.rb
CHANGED
data/lib/usmu.rb
CHANGED
@@ -25,9 +25,6 @@ module Usmu
|
|
25
25
|
),
|
26
26
|
)
|
27
27
|
|
28
|
-
# Globbing flags. Correct across 1.9.3 and 2.0+, enabling as many features as available
|
29
|
-
FILE_GLOB_FLAGS = defined?(File::FNM_EXTGLOB) ? File::FNM_EXTGLOB | File::FNM_PATHNAME : File::FNM_PATHNAME
|
30
|
-
|
31
28
|
# Enable logging of all events to the console
|
32
29
|
#
|
33
30
|
# @return [void]
|
File without changes
|
File without changes
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
module Usmu
|
3
|
+
class MockCommander
|
4
|
+
def initialize
|
5
|
+
@commands = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def get_command(name)
|
9
|
+
@commands[name]
|
10
|
+
end
|
11
|
+
|
12
|
+
def command(name, &block)
|
13
|
+
@current_command = name
|
14
|
+
@commands[name] = {}
|
15
|
+
|
16
|
+
block.yield(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def syntax=(value)
|
20
|
+
@commands[@current_command][:syntax] = value
|
21
|
+
end
|
22
|
+
|
23
|
+
def description=(value)
|
24
|
+
@commands[@current_command][:description] = value
|
25
|
+
end
|
26
|
+
|
27
|
+
def action(&block)
|
28
|
+
@commands[@current_command][:action] = block
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'usmu/plugin/core'
|
2
|
+
require 'usmu/configuration'
|
3
|
+
require 'usmu/mock_commander'
|
4
|
+
require 'ostruct'
|
5
|
+
require 'rack'
|
6
|
+
require 'usmu/ui/rack_server'
|
7
|
+
|
8
|
+
RSpec.describe Usmu::Plugin::Core do
|
9
|
+
let (:plugin) { described_class.new }
|
10
|
+
let (:configuration) { Usmu::Configuration.from_hash({}) }
|
11
|
+
let (:ui) { OpenStruct.new configuration: configuration }
|
12
|
+
let (:commander) { Usmu::MockCommander.new }
|
13
|
+
let (:options) { Commander::Command::Options.new }
|
14
|
+
|
15
|
+
context '#commands' do
|
16
|
+
it 'stores a the UI given to it' do
|
17
|
+
plugin.commands(ui, commander)
|
18
|
+
|
19
|
+
expect(plugin.send :ui).to eq(ui)
|
20
|
+
expect(@log_output.readline).to eq(" DEBUG Usmu::Plugin::Core : Adding core console commands...\n")
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'defines a "generate" command' do
|
24
|
+
plugin.commands(ui, commander)
|
25
|
+
|
26
|
+
command = commander.get_command :generate
|
27
|
+
expect(command[:syntax]).to eq('usmu generate')
|
28
|
+
expect(command[:description]).to eq('Generates your website using the configuration specified.')
|
29
|
+
expect(command[:action]).to be_a(Proc)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'defines a "init" command' do
|
33
|
+
plugin.commands(ui, commander)
|
34
|
+
|
35
|
+
command = commander.get_command :init
|
36
|
+
expect(command[:syntax]).to eq('usmu init [path]')
|
37
|
+
expect(command[:description]).to eq('Initialise a new website in the given path, or the current directory if none given.')
|
38
|
+
expect(command[:action]).to be_a(Proc)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'defines a "serve" command' do
|
42
|
+
plugin.commands(ui, commander)
|
43
|
+
|
44
|
+
command = commander.get_command :serve
|
45
|
+
expect(command[:syntax]).to eq('usmu serve')
|
46
|
+
expect(command[:description]).to eq('Serve files processed files directly. This won\'t update files on disk, but you will be able to view your website as rendered.')
|
47
|
+
expect(command[:action]).to be_a(Proc)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context '#command_generate' do
|
52
|
+
it 'raises an error when arguments are specified' do
|
53
|
+
expect { plugin.command_generate(['foo'], options) }.to raise_error('This command does not take arguments')
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'raises an error when invalid options are specified' do
|
57
|
+
expect { plugin.command_generate([], []) }.to raise_error('Invalid options')
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should generate a site' do
|
61
|
+
expect(configuration.generator).to receive(:generate)
|
62
|
+
|
63
|
+
plugin.send :ui=, ui
|
64
|
+
plugin.command_generate [], options
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context '#command_init' do
|
69
|
+
it 'should do something'
|
70
|
+
end
|
71
|
+
|
72
|
+
context '#command_serve' do
|
73
|
+
let (:empty_configuration) { Usmu::Configuration.from_hash({}) }
|
74
|
+
let (:configuration) {
|
75
|
+
Usmu::Configuration.from_hash(
|
76
|
+
{
|
77
|
+
'serve' => {
|
78
|
+
'host' => '0.0.0.0',
|
79
|
+
'port' => 8008,
|
80
|
+
}
|
81
|
+
}
|
82
|
+
)
|
83
|
+
}
|
84
|
+
let (:rs) { OpenStruct.new }
|
85
|
+
|
86
|
+
before do
|
87
|
+
allow(Usmu::Ui::RackServer).to receive(:new).with(empty_configuration).and_return(rs)
|
88
|
+
allow(Usmu::Ui::RackServer).to receive(:new).with(configuration).and_return(rs)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'raises an error when arguments are specified' do
|
92
|
+
expect { plugin.command_serve(['foo'], options) }.to raise_error('This command does not take arguments')
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'raises an error when invalid options are specified' do
|
96
|
+
expect { plugin.command_serve([], []) }.to raise_error('Invalid options')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should start a WEBrick Rack handler with a new RackServer UI' do
|
100
|
+
plugin.send :ui=, OpenStruct.new(configuration: empty_configuration)
|
101
|
+
expect(Rack::Handler::WEBrick).to receive(:run).with(rs, host: 'localhost', port: 8080)
|
102
|
+
plugin.command_serve [], options
|
103
|
+
expect(@log_output.readline).to eq(" INFO Usmu::Plugin::Core : Starting webserver...\n")
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should take hostname and ports from the configuration file' do
|
107
|
+
plugin.send :ui=, OpenStruct.new(configuration: configuration)
|
108
|
+
expect(Rack::Handler::WEBrick).to receive(:run).with(rs, host: '0.0.0.0', port: 8008)
|
109
|
+
plugin.command_serve [], options
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context '#init_copy_file' do
|
114
|
+
it 'should do something'
|
115
|
+
end
|
116
|
+
end
|
@@ -264,15 +264,11 @@ RSpec.describe Usmu::Configuration do
|
|
264
264
|
expect(configuration.send :excluded?, 'index.md').to eq(false)
|
265
265
|
end
|
266
266
|
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
expect(configuration.send :excluded?, 'a.md').to eq(true)
|
273
|
-
expect(configuration.send :excluded?, 'b.md').to eq(true)
|
274
|
-
expect(configuration.send :excluded?, 'index.md').to eq(false)
|
275
|
-
end
|
267
|
+
it 'should honor {a,b}' do
|
268
|
+
configuration = Usmu::Configuration.from_hash({'exclude' => ['{a,b}.md']})
|
269
|
+
expect(configuration.send :excluded?, 'a.md').to eq(true)
|
270
|
+
expect(configuration.send :excluded?, 'b.md').to eq(true)
|
271
|
+
expect(configuration.send :excluded?, 'index.md').to eq(false)
|
276
272
|
end
|
277
273
|
|
278
274
|
it 'should honor \\ as an escape' do
|
@@ -59,33 +59,7 @@ RSpec.describe Usmu::SiteGenerator do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'should not list directories' do
|
62
|
-
expect(generator.
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context '#pages' do
|
67
|
-
it 'should list pages' do
|
68
|
-
expect(generator).to receive(:renderables).and_return(
|
69
|
-
[
|
70
|
-
instance_double('Usmu::Template::StaticFile', class: Usmu::Template::StaticFile, name: 'robots.txt'),
|
71
|
-
instance_double('Usmu::Template::Layout', class: Usmu::Template::Layout, name: 'layout.slim'),
|
72
|
-
instance_double('Usmu::Template::Page', class: Usmu::Template::Page, name: 'page.md'),
|
73
|
-
]
|
74
|
-
)
|
75
|
-
expect(generator.pages.map {|p| p.name}.sort).to eq(%w{layout.slim page.md})
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context '#files' do
|
80
|
-
it 'should list static files' do
|
81
|
-
expect(generator).to receive(:renderables).at_least(1).times.and_return(
|
82
|
-
[
|
83
|
-
instance_double('Usmu::Template::StaticFile', class: Usmu::Template::StaticFile, name: 'robots.txt'),
|
84
|
-
instance_double('Usmu::Template::Layout', class: Usmu::Template::Layout, name: 'layout.slim'),
|
85
|
-
instance_double('Usmu::Template::Page', class: Usmu::Template::Page, name: 'page.md'),
|
86
|
-
]
|
87
|
-
)
|
88
|
-
expect(generator.files.map {|f| f.name}.sort).to eq(%w{robots.txt})
|
62
|
+
expect(generator.renderables.select {|f| f.name == 'posts'}.length).to eq(0)
|
89
63
|
end
|
90
64
|
end
|
91
65
|
|
data/usmu.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.test_files = spec.files.grep(%r{^(test-site|spec)/})
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
|
-
spec.required_ruby_version = Gem::Requirement.new('>=
|
24
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.0')
|
25
25
|
|
26
26
|
spec.add_dependency 'slim', '~> 3.0'
|
27
27
|
spec.add_dependency 'tilt', '~> 2.0'
|
@@ -42,7 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
|
43
43
|
case ENV['BUILD_PLATFORM']
|
44
44
|
when 'ruby'
|
45
|
-
spec.add_dependency 'redcarpet', '~> 3.
|
45
|
+
spec.add_dependency 'redcarpet', '~> 3.3'
|
46
46
|
spec.add_development_dependency 'libnotify', '~> 0.9'
|
47
47
|
when 'java'
|
48
48
|
spec.platform = 'java'
|
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: 1.0
|
4
|
+
version: 1.1.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: 2015-
|
11
|
+
date: 2015-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slim
|
@@ -226,20 +226,14 @@ dependencies:
|
|
226
226
|
requirements:
|
227
227
|
- - "~>"
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version: '3.
|
230
|
-
- - ">="
|
231
|
-
- !ruby/object:Gem::Version
|
232
|
-
version: 3.2.1
|
229
|
+
version: '3.3'
|
233
230
|
type: :runtime
|
234
231
|
prerelease: false
|
235
232
|
version_requirements: !ruby/object:Gem::Requirement
|
236
233
|
requirements:
|
237
234
|
- - "~>"
|
238
235
|
- !ruby/object:Gem::Version
|
239
|
-
version: '3.
|
240
|
-
- - ">="
|
241
|
-
- !ruby/object:Gem::Version
|
242
|
-
version: 3.2.1
|
236
|
+
version: '3.3'
|
243
237
|
- !ruby/object:Gem::Dependency
|
244
238
|
name: libnotify
|
245
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -288,6 +282,7 @@ files:
|
|
288
282
|
- lib/usmu/plugin/core.rb
|
289
283
|
- lib/usmu/plugin/core_hooks.rb
|
290
284
|
- lib/usmu/site_generator.rb
|
285
|
+
- lib/usmu/template/generated_file.rb
|
291
286
|
- lib/usmu/template/helpers.rb
|
292
287
|
- lib/usmu/template/include.rb
|
293
288
|
- lib/usmu/template/layout.rb
|
@@ -300,14 +295,16 @@ files:
|
|
300
295
|
- share/init-site/.gitignore
|
301
296
|
- share/init-site/Gemfile
|
302
297
|
- share/init-site/layouts/html.slim
|
303
|
-
- share/init-site/
|
304
|
-
- share/init-site/
|
298
|
+
- share/init-site/src/index.md
|
299
|
+
- share/init-site/src/index.meta.yml
|
305
300
|
- share/init-site/usmu.yml
|
306
301
|
- spec/acceptance/full_site_build.feature
|
307
302
|
- spec/acceptance/steps/full_site_build_steps.rb
|
303
|
+
- spec/mock/usmu/mock_commander.rb
|
308
304
|
- spec/mock/usmu/mock_metadata_configuration.rb
|
309
305
|
- spec/mock/usmu/mock_plugin.rb
|
310
306
|
- spec/mock/usmu/mock_remote_files.rb
|
307
|
+
- spec/plugin/core_spec.rb
|
311
308
|
- spec/spec_helper.rb
|
312
309
|
- spec/support/shared_layout.rb
|
313
310
|
- spec/usmu/configuration_spec.rb
|
@@ -368,7 +365,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
368
365
|
requirements:
|
369
366
|
- - ">="
|
370
367
|
- !ruby/object:Gem::Version
|
371
|
-
version:
|
368
|
+
version: '2.0'
|
372
369
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
373
370
|
requirements:
|
374
371
|
- - ">="
|
@@ -376,16 +373,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
376
373
|
version: '0'
|
377
374
|
requirements: []
|
378
375
|
rubyforge_project:
|
379
|
-
rubygems_version: 2.4.
|
376
|
+
rubygems_version: 2.4.8
|
380
377
|
signing_key:
|
381
378
|
specification_version: 4
|
382
379
|
summary: A static site generator with a web-based frontend for editing.
|
383
380
|
test_files:
|
384
381
|
- spec/acceptance/full_site_build.feature
|
385
382
|
- spec/acceptance/steps/full_site_build_steps.rb
|
383
|
+
- spec/mock/usmu/mock_commander.rb
|
386
384
|
- spec/mock/usmu/mock_metadata_configuration.rb
|
387
385
|
- spec/mock/usmu/mock_plugin.rb
|
388
386
|
- spec/mock/usmu/mock_remote_files.rb
|
387
|
+
- spec/plugin/core_spec.rb
|
389
388
|
- spec/spec_helper.rb
|
390
389
|
- spec/support/shared_layout.rb
|
391
390
|
- spec/usmu/configuration_spec.rb
|