magic_reveal 2.4.0.1 → 2.4.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/lib/magic_reveal/app.rb +2 -8
- data/lib/magic_reveal/cli.rb +52 -3
- data/lib/magic_reveal/cli/options.rb +5 -3
- data/lib/magic_reveal/creator.rb +6 -0
- data/lib/magic_reveal/index_libber.rb +2 -0
- data/lib/magic_reveal/slide_renderer.rb +10 -0
- data/lib/magic_reveal/version.rb +1 -1
- data/spec/magic_reveal/cli/options_spec.rb +12 -0
- data/spec/magic_reveal/cli_spec.rb +37 -2
- data/spec/magic_reveal/creator_spec.rb +8 -2
- data/spec/magic_reveal/index_libber_spec.rb +8 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef3ebbd0e2d2b2310a04a204fa9d180b256bc2a6
|
4
|
+
data.tar.gz: 83ca908557fa7b2444abd666d86f64fa674ab0af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f8f146b2ae5377270f5a5a3bdafb798e99860d92f90b18eb466a98bbaa6070e38b91527c4eb3a56019277077be64455fc961c6d73c8b441935e4abaa8dd6a01
|
7
|
+
data.tar.gz: 65e1377de6d882644bf01d8b6708a585cec9970bb0a8f520cb34e1f8d716235943091a15cb352d8a2c5cfe63d27288afa9212f552092e4e08769e0ce9f206d32
|
data/README.md
CHANGED
@@ -39,10 +39,16 @@ Feel free to replace [vim](http://vim.org/) with the editor of your choice.
|
|
39
39
|
|
40
40
|
### Viewing the presentation
|
41
41
|
|
42
|
-
$
|
42
|
+
$ magic-reveal start
|
43
43
|
|
44
44
|
Then open your browser to [`http://localhost:9292`](http://localhost:9292).
|
45
45
|
|
46
|
+
### Write a static index.html
|
47
|
+
|
48
|
+
$ magic-reveal static
|
49
|
+
|
50
|
+
This generates a static `index.html` suitable for committing to git.
|
51
|
+
|
46
52
|
### The format of slides.md
|
47
53
|
|
48
54
|
Magic Reveal uses [github-flavored
|
data/lib/magic_reveal/app.rb
CHANGED
@@ -19,17 +19,11 @@ module MagicReveal
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
set :public_folder,
|
22
|
+
set :public_folder, Dir.getwd
|
23
23
|
|
24
24
|
helpers do
|
25
25
|
def markdown
|
26
|
-
@markdown ||=
|
27
|
-
MagicReveal::SlideRenderer.new,
|
28
|
-
:space_after_headers => true,
|
29
|
-
:filter_html => true,
|
30
|
-
:fenced_code_blocks => true,
|
31
|
-
:no_intra_emphasis => true,
|
32
|
-
)
|
26
|
+
@markdown ||= SlideRenderer.markdown_renderer
|
33
27
|
end
|
34
28
|
|
35
29
|
def index_html_path
|
data/lib/magic_reveal/cli.rb
CHANGED
@@ -2,6 +2,8 @@ require 'forwardable'
|
|
2
2
|
|
3
3
|
require 'magic_reveal/cli/options'
|
4
4
|
require 'magic_reveal/creator'
|
5
|
+
require 'magic_reveal/slide_renderer'
|
6
|
+
require 'magic_reveal/index_libber'
|
5
7
|
|
6
8
|
module MagicReveal
|
7
9
|
class Cli
|
@@ -19,10 +21,53 @@ module MagicReveal
|
|
19
21
|
end
|
20
22
|
|
21
23
|
# Action Classes
|
24
|
+
def show_help
|
25
|
+
puts "Usage: #{program_name} <command>"
|
26
|
+
puts
|
27
|
+
puts " new <name>"
|
28
|
+
puts " Creates new presentation in directory <name>"
|
29
|
+
puts
|
30
|
+
puts " start [options]"
|
31
|
+
puts " Starts serving the presentation in the current directory"
|
32
|
+
puts
|
33
|
+
puts " static"
|
34
|
+
puts " Creates a static index.html file from your slides"
|
35
|
+
puts
|
36
|
+
exit
|
37
|
+
end
|
38
|
+
|
22
39
|
def creator
|
23
40
|
@creator ||= Creator.new(Dir.getwd)
|
24
41
|
end
|
25
42
|
|
43
|
+
def start_server
|
44
|
+
require 'rack'
|
45
|
+
ARGV.shift
|
46
|
+
Rack::Server.start
|
47
|
+
exit
|
48
|
+
end
|
49
|
+
|
50
|
+
def create_static
|
51
|
+
slides = Pathname.pwd + 'slides.md'
|
52
|
+
reveal_js_html = Pathname.pwd + 'reveal.js' + 'index.html'
|
53
|
+
index_html = Pathname.pwd + 'index.html'
|
54
|
+
|
55
|
+
markdown = SlideRenderer.markdown_renderer
|
56
|
+
slides = markdown.render slides.read
|
57
|
+
libber = IndexLibber.new reveal_js_html.read
|
58
|
+
libber.update_author Identifier.name
|
59
|
+
libber.update_description "A Magical Presentiation"
|
60
|
+
libber.update_slides slides
|
61
|
+
|
62
|
+
index_html.open('w') { |f| f.print libber.to_s }
|
63
|
+
end
|
64
|
+
|
65
|
+
def avenge_programmer
|
66
|
+
puts "The programmer messed up."
|
67
|
+
puts "Please file a bug at https://github.com/docwhat/magic_reveal"
|
68
|
+
exit 13
|
69
|
+
end
|
70
|
+
|
26
71
|
def options
|
27
72
|
@options ||= Options.new
|
28
73
|
end
|
@@ -33,10 +78,14 @@ module MagicReveal
|
|
33
78
|
case command
|
34
79
|
when :new
|
35
80
|
creator.create_project(project)
|
81
|
+
when :start
|
82
|
+
start_server
|
83
|
+
when :static
|
84
|
+
create_static
|
85
|
+
when :help
|
86
|
+
show_help
|
36
87
|
else
|
37
|
-
|
38
|
-
puts
|
39
|
-
puts "This isn't written yet."
|
88
|
+
avenge_programmer
|
40
89
|
end
|
41
90
|
end
|
42
91
|
end
|
data/lib/magic_reveal/creator.rb
CHANGED
@@ -33,6 +33,7 @@ module MagicReveal
|
|
33
33
|
top_dir.mkdir
|
34
34
|
|
35
35
|
reveal_js_fetcher.save_to(reveal_dir)
|
36
|
+
|
36
37
|
FileUtils.copy_file template_slides.to_s, (top_dir + 'slides.md').to_s
|
37
38
|
FileUtils.copy_file template_config_ru.to_s, (top_dir + 'config.ru').to_s
|
38
39
|
gemfile.open('w') do |f|
|
@@ -41,6 +42,11 @@ module MagicReveal
|
|
41
42
|
f.puts "gem 'magic_reveal', '~> #{VERSION}'"
|
42
43
|
end
|
43
44
|
|
45
|
+
reveal_dir.children.each do |subdir|
|
46
|
+
next unless subdir.directory?
|
47
|
+
(top_dir + subdir.basename).make_symlink(subdir.relative_path_from(top_dir))
|
48
|
+
end
|
49
|
+
|
44
50
|
Dir.chdir(top_dir.to_s) do
|
45
51
|
system 'bundle install'
|
46
52
|
end
|
@@ -28,6 +28,8 @@ module MagicReveal
|
|
28
28
|
if container = html.at_css('div.reveal div.slides')
|
29
29
|
container.children = slides
|
30
30
|
end
|
31
|
+
headers = slides.css('h1', 'h2', 'h3', 'h4', 'h5', 'h6')
|
32
|
+
html.title = headers.first.text unless headers.nil? || headers.empty?
|
31
33
|
end
|
32
34
|
|
33
35
|
def to_s
|
@@ -12,6 +12,16 @@ module MagicReveal
|
|
12
12
|
super(no_styles: true)
|
13
13
|
end
|
14
14
|
|
15
|
+
def self.markdown_renderer
|
16
|
+
Redcarpet::Markdown.new(
|
17
|
+
self.new,
|
18
|
+
:space_after_headers => true,
|
19
|
+
:filter_html => true,
|
20
|
+
:fenced_code_blocks => true,
|
21
|
+
:no_intra_emphasis => true,
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
15
25
|
def doc_header
|
16
26
|
@has_shown_slides = false
|
17
27
|
"<!-- generated by magic_reveal v#{VERSION} on #{Time.now} -->"
|
data/lib/magic_reveal/version.rb
CHANGED
@@ -19,6 +19,18 @@ describe MagicReveal::Cli::Options do
|
|
19
19
|
its(:project) { should be_nil }
|
20
20
|
end
|
21
21
|
|
22
|
+
context "given 'start'" do
|
23
|
+
let(:args) { %w[start] }
|
24
|
+
|
25
|
+
its(:command) { should be(:start) }
|
26
|
+
end
|
27
|
+
|
28
|
+
context "given 'static'" do
|
29
|
+
let(:args) { %w[static] }
|
30
|
+
|
31
|
+
its(:command) { should be(:static) }
|
32
|
+
end
|
33
|
+
|
22
34
|
context "given 'help'" do
|
23
35
|
let(:args) { %w{help} }
|
24
36
|
|
@@ -7,7 +7,11 @@ describe MagicReveal::Cli do
|
|
7
7
|
context "with a null options" do
|
8
8
|
let(:options) { double(MagicReveal::Cli::Options).as_null_object }
|
9
9
|
let(:args) { double("ARGV") }
|
10
|
-
before
|
10
|
+
before do
|
11
|
+
subject.stub(:show_help)
|
12
|
+
subject.stub(:avenge_programmer)
|
13
|
+
subject.stub(:options).and_return(options)
|
14
|
+
end
|
11
15
|
|
12
16
|
context "command=nil" do
|
13
17
|
before { subject.run args }
|
@@ -19,6 +23,10 @@ describe MagicReveal::Cli do
|
|
19
23
|
it "fetches the command" do
|
20
24
|
expect(options).to have_received(:command)
|
21
25
|
end
|
26
|
+
|
27
|
+
it "avenges the programmer" do
|
28
|
+
expect(subject).to have_received(:avenge_programmer)
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
32
|
context "command=new" do
|
@@ -39,11 +47,38 @@ describe MagicReveal::Cli do
|
|
39
47
|
with(options.project)
|
40
48
|
end
|
41
49
|
end
|
50
|
+
|
51
|
+
context "command=help" do
|
52
|
+
it "shows help" do
|
53
|
+
subject.stub(:show_help)
|
54
|
+
subject.should_receive(:show_help).and_return(nil)
|
55
|
+
options.stub(:command).and_return(:help)
|
56
|
+
subject.run args
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "command=start" do
|
61
|
+
it "starts the server" do
|
62
|
+
subject.stub(:start_server)
|
63
|
+
subject.should_receive(:start_server).and_return(nil)
|
64
|
+
options.stub(:command).and_return(:start)
|
65
|
+
subject.run args
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "command=static" do
|
70
|
+
it "creates a static file" do
|
71
|
+
subject.stub(:create_static)
|
72
|
+
subject.should_receive(:create_static).and_return(nil)
|
73
|
+
options.stub(:command).and_return(:static)
|
74
|
+
subject.run args
|
75
|
+
end
|
76
|
+
end
|
42
77
|
end
|
43
78
|
end
|
44
79
|
|
45
80
|
describe ".creator" do
|
46
|
-
it "
|
81
|
+
it "sends new to creator" do
|
47
82
|
MagicReveal::Creator.should_receive(:new).with(Dir.getwd)
|
48
83
|
subject.creator
|
49
84
|
end
|
@@ -3,8 +3,11 @@ require 'magic_reveal/creator'
|
|
3
3
|
require 'pathname'
|
4
4
|
|
5
5
|
describe MagicReveal::Creator do
|
6
|
-
before { subject.reveal_js_fetcher = fetcher }
|
7
6
|
let(:fetcher) { double(MagicReveal::RevealJsFetcher).as_null_object }
|
7
|
+
before do
|
8
|
+
subject.stub(:system) # This is an integration test thingy.
|
9
|
+
subject.reveal_js_fetcher = fetcher
|
10
|
+
end
|
8
11
|
|
9
12
|
context "with a temporary directory" do
|
10
13
|
subject { described_class.new @tmpdir }
|
@@ -14,7 +17,10 @@ describe MagicReveal::Creator do
|
|
14
17
|
|
15
18
|
describe "create_project" do
|
16
19
|
let(:project) { "project#{rand 99}" }
|
17
|
-
before
|
20
|
+
before do
|
21
|
+
FileUtils.stub(:copy_file)
|
22
|
+
Pathname.any_instance.stub(:children).and_return([])
|
23
|
+
end
|
18
24
|
|
19
25
|
it "makes the project directory" do
|
20
26
|
subject.create_project(project)
|
@@ -26,11 +26,16 @@ describe MagicReveal::IndexLibber do
|
|
26
26
|
|
27
27
|
describe ".update_slides" do
|
28
28
|
let(:slides) { '<section><h2>life with Joe</h2><p>…is good</section>' * 2 }
|
29
|
-
let(:html_text) { '<!DOCTYPE html><div class="reveal"><div class="slides"><section>text</section></div></div>' }
|
29
|
+
let(:html_text) { '<!DOCTYPE html><title>bogus</title><div class="reveal"><div class="slides"><section>text</section></div></div>' }
|
30
30
|
|
31
|
-
it "
|
31
|
+
it "inserts the slides" do
|
32
32
|
subject.update_slides slides
|
33
|
-
|
33
|
+
expect(subject.to_s).to include('life with Joe')
|
34
|
+
end
|
35
|
+
|
36
|
+
it "sets the title from the first Hx item" do
|
37
|
+
subject.update_slides slides
|
38
|
+
expect(subject.html.at_css('title').text).to eq('life with Joe')
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magic_reveal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.0.
|
4
|
+
version: 2.4.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Höltje
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|