reveal-ck 0.4.2 → 0.5.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/bin/reveal-ck +26 -23
- data/features/step_definitions/serve_steps.rb +4 -0
- data/features/support/env.rb +5 -0
- data/files/reveal-ck/Guardfile +5 -0
- data/lib/reveal-ck.rb +1 -0
- data/lib/reveal-ck/commands.rb +8 -0
- data/lib/reveal-ck/commands/generate.rb +30 -0
- data/lib/reveal-ck/commands/listen_to_rebuild_slides.rb +39 -0
- data/lib/reveal-ck/commands/listen_to_reload_browser.rb +20 -0
- data/lib/reveal-ck/commands/print_banner.rb +22 -0
- data/lib/reveal-ck/commands/serve.rb +69 -0
- data/lib/reveal-ck/commands/serve_ui.rb +40 -0
- data/lib/reveal-ck/commands/start_web_server.rb +47 -0
- data/lib/reveal-ck/tilt/config.rb +10 -0
- data/lib/reveal-ck/version.rb +1 -1
- data/spec/lib/reveal-ck/commands/generate_spec.rb +30 -0
- data/spec/lib/reveal-ck/commands/listen_to_rebuild_slides_spec.rb +32 -0
- data/spec/lib/reveal-ck/commands/listen_to_reload_browser_spec.rb +28 -0
- data/spec/lib/reveal-ck/commands/print_banner_spec.rb +25 -0
- data/spec/lib/reveal-ck/commands/serve_spec.rb +126 -0
- data/spec/lib/reveal-ck/commands/serve_ui_spec.rb +61 -0
- data/spec/lib/reveal-ck/commands/start_web_server_spec.rb +22 -0
- metadata +83 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f42ef4712de98dd2c0eb2f39739bc1921f67e1cb
|
4
|
+
data.tar.gz: 551a2fe2ffb941ca3735f127b2cbcd5f99952783
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f214ae25beecfe703cf4cd60b57c138129aadbce87c7f04a0cf11bca0f53ff6c596de1033dee70145629709817098bd3e695f4763f96ca8afaab427518e962db
|
7
|
+
data.tar.gz: 983a83af3ca8da7ced650cd41ddae8dd3a6fb90343b5925bf8ab8838ab6d592cd8b0c8b78105f37f982943c9d0b5aab6152db30ae7d9bf4ffcb8dbdb951e2fe7
|
data/bin/reveal-ck
CHANGED
@@ -37,47 +37,50 @@ class RevealCKExecutable
|
|
37
37
|
msg = 'Create a file matching slides.* to proceed, such as slides.md.'
|
38
38
|
exit_now!(msg)
|
39
39
|
end
|
40
|
-
|
41
|
-
builder_args = {
|
40
|
+
generate_args = {
|
42
41
|
user_dir: Dir.pwd,
|
43
42
|
gem_dir: RevealCK.path,
|
44
43
|
output_dir: options[:dir],
|
45
44
|
slides_file: options[:file]
|
46
45
|
}
|
47
|
-
|
48
|
-
RevealCK::Builders::SlidesBuilder.new(builder_args)
|
49
|
-
slides_builder.prepare
|
50
|
-
slides_builder.build
|
46
|
+
RevealCK::Commands::Generate.new(generate_args).run
|
51
47
|
end
|
52
48
|
end
|
53
49
|
|
54
50
|
desc 'Start webserver so slides are available via http'
|
55
51
|
command :serve, :server do |c|
|
56
52
|
|
53
|
+
slide_files = FileList['slides.*']
|
54
|
+
default_file = slide_files.empty? ? nil : slide_files.first
|
55
|
+
|
56
|
+
c.desc 'The file containing your slide content'
|
57
|
+
c.flag [:f, :file], default_value: default_file
|
58
|
+
|
57
59
|
c.desc 'The directory to serve up'
|
58
60
|
c.flag [:d, :dir], default_value: 'slides'
|
59
61
|
|
60
62
|
c.desc 'The port to serve on'
|
61
63
|
c.flag [:p, :port], default_value: 10_000
|
62
64
|
|
63
|
-
c.
|
64
|
-
|
65
|
-
port = options[:port]
|
65
|
+
c.desc 'Exit after starting + n seconds (for testing only)'
|
66
|
+
c.flag ['test-quit-after-starting'], type: Integer
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
68
|
+
c.action do |_, options, _|
|
69
|
+
serve_args = {
|
70
|
+
doc_root: options[:dir],
|
71
|
+
gem_dir: RevealCK.path,
|
72
|
+
output_dir: options[:dir],
|
73
|
+
port: options[:port],
|
74
|
+
slides_file: options[:file],
|
75
|
+
user_dir: Dir.pwd
|
76
|
+
}
|
77
|
+
if options['test-quit-after-starting']
|
78
|
+
Thread.new do
|
79
|
+
sleep options['test-quit-after-starting']
|
80
|
+
exit
|
81
|
+
end
|
82
|
+
end
|
83
|
+
RevealCK::Commands::Serve.new(serve_args).run
|
81
84
|
end
|
82
85
|
end
|
83
86
|
exit run(ARGV)
|
data/features/support/env.rb
CHANGED
data/lib/reveal-ck.rb
CHANGED
@@ -15,6 +15,7 @@ require_relative 'reveal-ck/templates'
|
|
15
15
|
require_relative 'reveal-ck/builders'
|
16
16
|
require_relative 'reveal-ck/markdown'
|
17
17
|
require_relative 'reveal-ck/tilt/config'
|
18
|
+
require_relative 'reveal-ck/commands'
|
18
19
|
|
19
20
|
# RevealCK::path provides the path where files within the reveal-ck
|
20
21
|
# gem are located on your system.
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require_relative 'commands/generate'
|
2
|
+
|
3
|
+
require_relative 'commands/print_banner'
|
4
|
+
require_relative 'commands/listen_to_rebuild_slides'
|
5
|
+
require_relative 'commands/listen_to_reload_browser'
|
6
|
+
require_relative 'commands/start_web_server'
|
7
|
+
require_relative 'commands/serve_ui'
|
8
|
+
require_relative 'commands/serve'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RevealCK
|
2
|
+
module Commands
|
3
|
+
# This Command is responsible for implementing the idea behind
|
4
|
+
# "reveal-ck generate."
|
5
|
+
class Generate
|
6
|
+
include Retrieve
|
7
|
+
attr_reader :slides_builder, :slides_file, :stdout_prefix
|
8
|
+
def initialize(args)
|
9
|
+
user_dir = retrieve(:user_dir, args)
|
10
|
+
gem_dir = retrieve(:gem_dir, args)
|
11
|
+
output_dir = retrieve(:output_dir, args)
|
12
|
+
@stdout_prefix = args[:stdout_prefix] || ''
|
13
|
+
@slides_file = retrieve(:slides_file, args)
|
14
|
+
@slides_builder =
|
15
|
+
RevealCK::Builders::SlidesBuilder.new(user_dir: user_dir,
|
16
|
+
gem_dir: gem_dir,
|
17
|
+
output_dir: output_dir,
|
18
|
+
slides_file: slides_file)
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
msg = "Generating slides for '#{slides_file}'.."
|
23
|
+
msg = "#{stdout_prefix} #{msg}" unless stdout_prefix.empty?
|
24
|
+
puts msg
|
25
|
+
slides_builder.prepare
|
26
|
+
slides_builder.build
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'listen'
|
2
|
+
|
3
|
+
module RevealCK
|
4
|
+
module Commands
|
5
|
+
# The idea of listening for file system changes and then
|
6
|
+
# rebuilding slides.
|
7
|
+
class ListenToRebuildSlides
|
8
|
+
attr_reader :ui, :rebuild_method
|
9
|
+
def initialize(ui, &block)
|
10
|
+
@ui, @rebuild_method = ui, block
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
::Listen.to('.', ignore: ignored_files_regex) do |mod, add, del|
|
15
|
+
message_and_rebuild(mod, add, del)
|
16
|
+
end.start
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def message_about_files(files, message)
|
22
|
+
return if files.empty?
|
23
|
+
file_names = files.join(', ')
|
24
|
+
ui.message("#{message}: #{file_names}", :rebuild)
|
25
|
+
end
|
26
|
+
|
27
|
+
def ignored_files_regex
|
28
|
+
/^slides\/.+$/
|
29
|
+
end
|
30
|
+
|
31
|
+
def message_and_rebuild(mod, add, del)
|
32
|
+
message_about_files(mod, 'Modified')
|
33
|
+
message_about_files(add, 'Added')
|
34
|
+
message_about_files(del, 'Deleted')
|
35
|
+
rebuild_method.call
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RevealCK
|
2
|
+
module Commands
|
3
|
+
# The idea of listening for file system changes that indicate its
|
4
|
+
# time to tell browsers to reload.
|
5
|
+
class ListenToReloadBrowser
|
6
|
+
attr_reader :prefix
|
7
|
+
|
8
|
+
def initialize(ui)
|
9
|
+
@prefix = ui.prefix_for(:reload)
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
require 'guard'
|
14
|
+
guardfile = RevealCK.path('files/reveal-ck/Guardfile')
|
15
|
+
Guard::UI.options[:template] = "#{prefix} :message"
|
16
|
+
Guard.start guardfile: guardfile, no_interactions: true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module RevealCK
|
2
|
+
module Commands
|
3
|
+
# The idea of displaying a banner via an injected ui. Messages
|
4
|
+
# sent explain everything to do with the serve command (listening,
|
5
|
+
# reloading, and webserving)
|
6
|
+
class PrintBanner
|
7
|
+
attr_reader :doc_root, :port, :slides_file, :ui
|
8
|
+
def initialize(doc_root, port, slides_file, ui)
|
9
|
+
@doc_root, @port, @slides_file = doc_root, port, slides_file
|
10
|
+
@ui = ui
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
ui.separator
|
15
|
+
ui.message "Serving up slide content in '#{doc_root}/'."
|
16
|
+
ui.message "Open your browser to 'http://localhost:#{port}'."
|
17
|
+
ui.message 'Press CTRL-C to stop.'
|
18
|
+
ui.separator
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module RevealCK
|
2
|
+
module Commands
|
3
|
+
# This Command is responsible for implementing the idea behind
|
4
|
+
# "reveal-ck serve."
|
5
|
+
#
|
6
|
+
# This includes taking an action and managing stdout
|
7
|
+
class Serve
|
8
|
+
include Retrieve
|
9
|
+
attr_reader :doc_root, :port
|
10
|
+
attr_reader :slides_file, :user_dir, :gem_dir, :output_dir
|
11
|
+
attr_reader :ui
|
12
|
+
def initialize(args)
|
13
|
+
@doc_root = retrieve(:doc_root, args)
|
14
|
+
@port = retrieve(:port, args)
|
15
|
+
@slides_file = retrieve(:slides_file, args)
|
16
|
+
@gem_dir = retrieve(:gem_dir, args)
|
17
|
+
@output_dir = retrieve(:output_dir, args)
|
18
|
+
@user_dir = retrieve(:user_dir, args)
|
19
|
+
@ui = ServeUI.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def run
|
23
|
+
print_banner
|
24
|
+
listen_to_reload
|
25
|
+
listen_to_rebuild
|
26
|
+
start_web_server
|
27
|
+
end
|
28
|
+
|
29
|
+
def rebuild_slides
|
30
|
+
RevealCK::Commands::Generate.new(rebuild_options).run
|
31
|
+
rescue => error
|
32
|
+
ui.problem('Failed to Generate Slides:', error)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def print_banner
|
38
|
+
PrintBanner.new(doc_root, port, slides_file, ui).run
|
39
|
+
end
|
40
|
+
|
41
|
+
def listen_to_reload
|
42
|
+
ui.message('Getting Ready to Reload Browsers.')
|
43
|
+
ListenToReloadBrowser.new(ui).run
|
44
|
+
end
|
45
|
+
|
46
|
+
def listen_to_rebuild
|
47
|
+
ui.message('Getting Ready to Rebuild Slides.')
|
48
|
+
ListenToRebuildSlides.new(ui) do
|
49
|
+
rebuild_slides
|
50
|
+
end.run
|
51
|
+
end
|
52
|
+
|
53
|
+
def start_web_server
|
54
|
+
ui.message('Starting Webserver.')
|
55
|
+
StartWebServer.new(doc_root, port).run
|
56
|
+
end
|
57
|
+
|
58
|
+
def rebuild_options
|
59
|
+
{
|
60
|
+
slides_file: @slides_file,
|
61
|
+
gem_dir: @gem_dir,
|
62
|
+
output_dir: @output_dir,
|
63
|
+
user_dir: @user_dir,
|
64
|
+
stdout_prefix: ui.prefix_for(:rebuild)
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module RevealCK
|
2
|
+
module Commands
|
3
|
+
# This object represents controls the "User Interface" of the
|
4
|
+
# serve command.
|
5
|
+
class ServeUI
|
6
|
+
PREFIXES = {
|
7
|
+
default: '[ reveal-ck ]',
|
8
|
+
problem: '[ problem ]',
|
9
|
+
rebuild: '[ rebuild ]',
|
10
|
+
reload: '[ reload ]'
|
11
|
+
}
|
12
|
+
|
13
|
+
def problem(general_problem, specific_error)
|
14
|
+
blank :problem
|
15
|
+
message general_problem, :problem
|
16
|
+
blank :problem
|
17
|
+
message specific_error, :problem
|
18
|
+
blank :problem
|
19
|
+
end
|
20
|
+
|
21
|
+
def message(s, type = nil)
|
22
|
+
prefix = prefix_for(type)
|
23
|
+
puts "#{prefix} #{s}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def prefix_for(type = nil)
|
27
|
+
PREFIXES[type] || PREFIXES[:default]
|
28
|
+
end
|
29
|
+
|
30
|
+
def blank(type = nil)
|
31
|
+
prefix = PREFIXES[type] || ''
|
32
|
+
puts "#{prefix}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def separator
|
36
|
+
puts '------------------------------------------------------------'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rack'
|
2
|
+
require 'webrick'
|
3
|
+
require 'rack/livereload'
|
4
|
+
|
5
|
+
module RevealCK
|
6
|
+
module Commands
|
7
|
+
# The idea of starting up a webserver to display slides locally.
|
8
|
+
class StartWebServer
|
9
|
+
attr_reader :doc_root, :port
|
10
|
+
def initialize(doc_root, port)
|
11
|
+
@doc_root, @port = doc_root, port
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
Rack::Server.new(app: build_rack_app(doc_root),
|
16
|
+
Port: port,
|
17
|
+
Logger: server_log,
|
18
|
+
AccessLog: access_log).start
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def build_rack_app(doc_root)
|
24
|
+
Rack::Builder.new do
|
25
|
+
use Rack::LiveReload
|
26
|
+
use Rack::Static, index: "#{doc_root}/index.html"
|
27
|
+
run Rack::Directory.new(doc_root)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def server_log
|
32
|
+
WEBrick::BasicLog.new(temp_log('reveal-ck-server'))
|
33
|
+
end
|
34
|
+
|
35
|
+
def access_log
|
36
|
+
access_log_file = File.open(temp_log('reveal-ck-access'), 'w')
|
37
|
+
[[access_log_file, WEBrick::AccessLog::COMMON_LOG_FORMAT]]
|
38
|
+
end
|
39
|
+
|
40
|
+
def temp_log(name)
|
41
|
+
require 'tempfile'
|
42
|
+
file = Tempfile.new(["#{name}-", '.log'])
|
43
|
+
file.path
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,2 +1,12 @@
|
|
1
1
|
# Direct Tilt to use SlideMarkdownTemplate for "md" files
|
2
2
|
Tilt.register RevealCK::Markdown::SlideMarkdownTemplate, 'md'
|
3
|
+
|
4
|
+
# The following requires are present to avoid warnings such as:
|
5
|
+
#
|
6
|
+
# WARN: tilt autoloading 'tilt/erb' in a non thread-safe way; explicit
|
7
|
+
# require 'tilt/erb' suggested.
|
8
|
+
#
|
9
|
+
# The same goes for tilt/haml, tilt/redcloth
|
10
|
+
require 'tilt/erb'
|
11
|
+
require 'tilt/haml'
|
12
|
+
require 'tilt/redcloth'
|
data/lib/reveal-ck/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RevealCK
|
4
|
+
module Commands
|
5
|
+
describe Generate do
|
6
|
+
describe '#run' do
|
7
|
+
it 'generates a new set of slides' do
|
8
|
+
slides_builder = double
|
9
|
+
allow(RevealCK::Builders::SlidesBuilder)
|
10
|
+
.to receive(:new)
|
11
|
+
.and_return(slides_builder)
|
12
|
+
|
13
|
+
expect(slides_builder).to receive(:prepare)
|
14
|
+
expect(slides_builder).to receive(:build)
|
15
|
+
|
16
|
+
generate =
|
17
|
+
Generate.new(user_dir: 'user_dir',
|
18
|
+
gem_dir: 'gem_dir',
|
19
|
+
output_dir: 'output_dir',
|
20
|
+
slides_file: 'slides_file')
|
21
|
+
|
22
|
+
expect(generate)
|
23
|
+
.to receive(:puts)
|
24
|
+
.with("Generating slides for 'slides_file'..")
|
25
|
+
generate.run
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'listen'
|
3
|
+
|
4
|
+
module RevealCK
|
5
|
+
module Commands
|
6
|
+
describe ListenToRebuildSlides do
|
7
|
+
describe '#run' do
|
8
|
+
|
9
|
+
let :current_directory do
|
10
|
+
'.'
|
11
|
+
end
|
12
|
+
|
13
|
+
let :generated_slides do
|
14
|
+
/^slides\/.+$/
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'sets up ::Listen to run when things change' do
|
18
|
+
listener = double
|
19
|
+
expect(::Listen)
|
20
|
+
.to(receive(:to))
|
21
|
+
.with(current_directory, ignore: generated_slides)
|
22
|
+
.once
|
23
|
+
.and_return(listener)
|
24
|
+
expect(listener)
|
25
|
+
.to(receive(:start))
|
26
|
+
|
27
|
+
ListenToRebuildSlides.new(double('ui')).run
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'guard'
|
3
|
+
|
4
|
+
module RevealCK
|
5
|
+
module Commands
|
6
|
+
describe ListenToReloadBrowser do
|
7
|
+
describe '#run' do
|
8
|
+
it 'works with Guard to setup livereload' do
|
9
|
+
|
10
|
+
serve_ui = double
|
11
|
+
|
12
|
+
expect(serve_ui)
|
13
|
+
.to(receive(:prefix_for))
|
14
|
+
.and_return('[prefix]')
|
15
|
+
|
16
|
+
expect(::Guard)
|
17
|
+
.to(receive(:start))
|
18
|
+
.once
|
19
|
+
|
20
|
+
listen_to_reload_browser = ListenToReloadBrowser.new(serve_ui)
|
21
|
+
listen_to_reload_browser.run
|
22
|
+
|
23
|
+
expect(Guard::UI.options[:template]).to eq '[prefix] :message'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RevealCK
|
4
|
+
module Commands
|
5
|
+
describe PrintBanner do
|
6
|
+
describe '#run' do
|
7
|
+
it 'sends #messages and #separators to the ui' do
|
8
|
+
|
9
|
+
serve_ui = double
|
10
|
+
|
11
|
+
expect(serve_ui)
|
12
|
+
.to(receive(:separator))
|
13
|
+
.at_least :once
|
14
|
+
|
15
|
+
expect(serve_ui)
|
16
|
+
.to(receive(:message))
|
17
|
+
.at_least :once
|
18
|
+
|
19
|
+
banner = PrintBanner.new('doc_root', 'port', 'slides_file', serve_ui)
|
20
|
+
banner.run
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'tmpdir'
|
3
|
+
|
4
|
+
def build_serve
|
5
|
+
RevealCK::Commands::Serve
|
6
|
+
.new(doc_root: 'doc_root',
|
7
|
+
port: 'port',
|
8
|
+
user_dir: 'user_dir',
|
9
|
+
gem_dir: 'gem_dir',
|
10
|
+
output_dir: 'output_dir',
|
11
|
+
slides_file: 'slides_file')
|
12
|
+
end
|
13
|
+
|
14
|
+
def expect_new_and_run(klazz)
|
15
|
+
mock = double
|
16
|
+
expect(klazz)
|
17
|
+
.to(receive(:new))
|
18
|
+
.and_return(mock)
|
19
|
+
expect(mock).to(receive(:run))
|
20
|
+
end
|
21
|
+
|
22
|
+
def allow_new_and_run(klazz)
|
23
|
+
mock = double
|
24
|
+
allow(klazz)
|
25
|
+
.to(receive(:new))
|
26
|
+
.and_return(mock)
|
27
|
+
allow(mock).to(receive(:run))
|
28
|
+
end
|
29
|
+
|
30
|
+
module RevealCK
|
31
|
+
module Commands
|
32
|
+
describe Serve do
|
33
|
+
describe '#rebuild_slides' do
|
34
|
+
it 'relies on Generate' do
|
35
|
+
serve = build_serve
|
36
|
+
expect_new_and_run(RevealCK::Commands::Generate)
|
37
|
+
serve.rebuild_slides
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'reports errors via the ui' do
|
41
|
+
serve_ui = double
|
42
|
+
expect(ServeUI)
|
43
|
+
.to(receive(:new))
|
44
|
+
.and_return(serve_ui)
|
45
|
+
|
46
|
+
expect(serve_ui)
|
47
|
+
.to(receive(:prefix_for))
|
48
|
+
|
49
|
+
expect(serve_ui)
|
50
|
+
.to(receive(:problem))
|
51
|
+
|
52
|
+
generate_command = double
|
53
|
+
expect(Generate)
|
54
|
+
.to(receive(:new))
|
55
|
+
.and_return(generate_command)
|
56
|
+
expect(generate_command)
|
57
|
+
.to(receive(:run))
|
58
|
+
.and_raise('Big Trouble!')
|
59
|
+
|
60
|
+
build_serve.rebuild_slides
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#run' do
|
65
|
+
it 'coordinates a number of objects to serve up slides and reload' do
|
66
|
+
serve_ui = double
|
67
|
+
expect(ServeUI)
|
68
|
+
.to(receive(:new))
|
69
|
+
.and_return(serve_ui)
|
70
|
+
|
71
|
+
allow(serve_ui)
|
72
|
+
.to(receive(:message))
|
73
|
+
|
74
|
+
print_banner = double
|
75
|
+
expect(PrintBanner)
|
76
|
+
.to(receive(:new))
|
77
|
+
.with('doc_root', 'port', 'slides_file', serve_ui)
|
78
|
+
.and_return(print_banner)
|
79
|
+
expect(print_banner)
|
80
|
+
.to(receive(:run))
|
81
|
+
|
82
|
+
expect_new_and_run(RevealCK::Commands::ListenToRebuildSlides)
|
83
|
+
expect_new_and_run(RevealCK::Commands::ListenToReloadBrowser)
|
84
|
+
expect_new_and_run(RevealCK::Commands::StartWebServer)
|
85
|
+
build_serve.run
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'actually listens for file system changes' do
|
89
|
+
serve_ui = double
|
90
|
+
allow(ServeUI)
|
91
|
+
.to(receive(:new))
|
92
|
+
.and_return(serve_ui)
|
93
|
+
allow(serve_ui)
|
94
|
+
.to(receive(:message))
|
95
|
+
|
96
|
+
Dir.mktmpdir do |dir|
|
97
|
+
Dir.chdir(dir) do
|
98
|
+
print_banner = double
|
99
|
+
allow(PrintBanner)
|
100
|
+
.to(receive(:new))
|
101
|
+
.and_return(print_banner)
|
102
|
+
allow(print_banner)
|
103
|
+
.to(receive(:run))
|
104
|
+
|
105
|
+
# Don't stub out ListenToRebuildSlides
|
106
|
+
allow_new_and_run(RevealCK::Commands::ListenToReloadBrowser)
|
107
|
+
allow_new_and_run(RevealCK::Commands::StartWebServer)
|
108
|
+
|
109
|
+
serve = build_serve
|
110
|
+
serve.run
|
111
|
+
expect(serve)
|
112
|
+
.to(receive(:rebuild_slides))
|
113
|
+
File.open('slides.md', 'w') do |file|
|
114
|
+
file.puts('Slides')
|
115
|
+
end
|
116
|
+
# Creating the file will trigger the call back. But need
|
117
|
+
# to wait else the expecation of :rebuild_slides will
|
118
|
+
# fail-- it's not instantaneous
|
119
|
+
sleep 0.25
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RevealCK
|
4
|
+
module Commands
|
5
|
+
describe ServeUI do
|
6
|
+
|
7
|
+
let :serve_ui do
|
8
|
+
ServeUI.new
|
9
|
+
end
|
10
|
+
|
11
|
+
let :separator do
|
12
|
+
'------------------------------------------------------------'
|
13
|
+
end
|
14
|
+
|
15
|
+
let :default_prefix do
|
16
|
+
'[ reveal-ck ]'
|
17
|
+
end
|
18
|
+
|
19
|
+
let :problem_prefix do
|
20
|
+
'[ problem ]'
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#message' do
|
24
|
+
it 'prints the message (preceeded by a prefix) to standard out' do
|
25
|
+
expect(serve_ui).to receive(:puts).with("#{default_prefix} Hello")
|
26
|
+
serve_ui.message('Hello')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#problem' do
|
31
|
+
it 'prints several messages to standard out' do
|
32
|
+
expect(serve_ui).to receive(:puts).with("#{problem_prefix}")
|
33
|
+
expect(serve_ui)
|
34
|
+
.to receive(:puts)
|
35
|
+
.with("#{problem_prefix} Compilation Problem")
|
36
|
+
expect(serve_ui).to receive(:puts).with("#{problem_prefix}")
|
37
|
+
expect(serve_ui)
|
38
|
+
.to receive(:puts)
|
39
|
+
.with("#{problem_prefix} on line 12")
|
40
|
+
expect(serve_ui).to receive(:puts).with("#{problem_prefix}")
|
41
|
+
serve_ui.problem('Compilation Problem', 'on line 12')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#blank' do
|
46
|
+
it 'prints a blank line' do
|
47
|
+
expect(serve_ui).to receive(:puts).with ''
|
48
|
+
serve_ui.blank
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#separator' do
|
53
|
+
it 'prints a bunch of dashes' do
|
54
|
+
expect(serve_ui)
|
55
|
+
.to receive(:puts).with separator
|
56
|
+
serve_ui.separator
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'tmpdir'
|
3
|
+
|
4
|
+
module RevealCK
|
5
|
+
module Commands
|
6
|
+
describe StartWebServer do
|
7
|
+
describe '#run' do
|
8
|
+
it 'works with Rack to start an application' do
|
9
|
+
start_web_server =
|
10
|
+
StartWebServer.new('doc_root', 'port')
|
11
|
+
rack_server = double
|
12
|
+
expect(::Rack::Server)
|
13
|
+
.to(receive(:new))
|
14
|
+
.and_return(rack_server)
|
15
|
+
expect(rack_server)
|
16
|
+
.to(receive(:start))
|
17
|
+
start_web_server.run
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reveal-ck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jed Northridge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: RedCloth
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.7'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-livereload
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.3'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.3'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: haml
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,48 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '1.9'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: listen
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rack
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.5'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.5'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rack-livereload
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.3'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.3'
|
97
153
|
- !ruby/object:Gem::Dependency
|
98
154
|
name: rake
|
99
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -280,8 +336,10 @@ files:
|
|
280
336
|
- features/data/images/ruby100.png
|
281
337
|
- features/step_definitions/file_management_steps.rb
|
282
338
|
- features/step_definitions/html_match_steps.rb
|
339
|
+
- features/step_definitions/serve_steps.rb
|
283
340
|
- features/support/env.rb
|
284
341
|
- features/support/file_management.rb
|
342
|
+
- files/reveal-ck/Guardfile
|
285
343
|
- files/reveal-ck/css/reveal-ck.css
|
286
344
|
- files/reveal-ck/templates/index.html/body.html.erb
|
287
345
|
- files/reveal-ck/templates/index.html/head.html.erb
|
@@ -383,6 +441,14 @@ files:
|
|
383
441
|
- lib/reveal-ck/builders/reveal_js_files.rb
|
384
442
|
- lib/reveal-ck/builders/slides_builder.rb
|
385
443
|
- lib/reveal-ck/builders/user_files.rb
|
444
|
+
- lib/reveal-ck/commands.rb
|
445
|
+
- lib/reveal-ck/commands/generate.rb
|
446
|
+
- lib/reveal-ck/commands/listen_to_rebuild_slides.rb
|
447
|
+
- lib/reveal-ck/commands/listen_to_reload_browser.rb
|
448
|
+
- lib/reveal-ck/commands/print_banner.rb
|
449
|
+
- lib/reveal-ck/commands/serve.rb
|
450
|
+
- lib/reveal-ck/commands/serve_ui.rb
|
451
|
+
- lib/reveal-ck/commands/start_web_server.rb
|
386
452
|
- lib/reveal-ck/config.rb
|
387
453
|
- lib/reveal-ck/filtered_html_string.rb
|
388
454
|
- lib/reveal-ck/markdown.rb
|
@@ -436,6 +502,13 @@ files:
|
|
436
502
|
- spec/lib/reveal-ck/builders/reveal_js_files_spec.rb
|
437
503
|
- spec/lib/reveal-ck/builders/slides_builder_spec.rb
|
438
504
|
- spec/lib/reveal-ck/builders/user_files_spec.rb
|
505
|
+
- spec/lib/reveal-ck/commands/generate_spec.rb
|
506
|
+
- spec/lib/reveal-ck/commands/listen_to_rebuild_slides_spec.rb
|
507
|
+
- spec/lib/reveal-ck/commands/listen_to_reload_browser_spec.rb
|
508
|
+
- spec/lib/reveal-ck/commands/print_banner_spec.rb
|
509
|
+
- spec/lib/reveal-ck/commands/serve_spec.rb
|
510
|
+
- spec/lib/reveal-ck/commands/serve_ui_spec.rb
|
511
|
+
- spec/lib/reveal-ck/commands/start_web_server_spec.rb
|
439
512
|
- spec/lib/reveal-ck/config_spec.rb
|
440
513
|
- spec/lib/reveal-ck/markdown/slide_markdown_spec.rb
|
441
514
|
- spec/lib/reveal-ck/markdown/slide_markdown_template_spec.rb
|
@@ -476,6 +549,7 @@ test_files:
|
|
476
549
|
- features/data/images/ruby100.png
|
477
550
|
- features/step_definitions/file_management_steps.rb
|
478
551
|
- features/step_definitions/html_match_steps.rb
|
552
|
+
- features/step_definitions/serve_steps.rb
|
479
553
|
- features/support/env.rb
|
480
554
|
- features/support/file_management.rb
|
481
555
|
- spec/data/builders/index_html/slides.html
|
@@ -505,6 +579,13 @@ test_files:
|
|
505
579
|
- spec/lib/reveal-ck/builders/reveal_js_files_spec.rb
|
506
580
|
- spec/lib/reveal-ck/builders/slides_builder_spec.rb
|
507
581
|
- spec/lib/reveal-ck/builders/user_files_spec.rb
|
582
|
+
- spec/lib/reveal-ck/commands/generate_spec.rb
|
583
|
+
- spec/lib/reveal-ck/commands/listen_to_rebuild_slides_spec.rb
|
584
|
+
- spec/lib/reveal-ck/commands/listen_to_reload_browser_spec.rb
|
585
|
+
- spec/lib/reveal-ck/commands/print_banner_spec.rb
|
586
|
+
- spec/lib/reveal-ck/commands/serve_spec.rb
|
587
|
+
- spec/lib/reveal-ck/commands/serve_ui_spec.rb
|
588
|
+
- spec/lib/reveal-ck/commands/start_web_server_spec.rb
|
508
589
|
- spec/lib/reveal-ck/config_spec.rb
|
509
590
|
- spec/lib/reveal-ck/markdown/slide_markdown_spec.rb
|
510
591
|
- spec/lib/reveal-ck/markdown/slide_markdown_template_spec.rb
|