revealize 0.0.1
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.
- data/.gitignore +17 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/Guardfile +11 -0
- data/LICENSE.txt +22 -0
- data/README.md +53 -0
- data/Rakefile +5 -0
- data/bin/revealize +5 -0
- data/lib/revealize.rb +2 -0
- data/lib/revealize/commands.rb +14 -0
- data/lib/revealize/deck_list.rb +19 -0
- data/lib/revealize/deck_template.rb +14 -0
- data/lib/revealize/file_system_store.rb +68 -0
- data/lib/revealize/server.rb +19 -0
- data/lib/revealize/slide.rb +39 -0
- data/lib/revealize/slide_deck.rb +24 -0
- data/lib/revealize/slide_deck_dsl.rb +11 -0
- data/lib/revealize/version.rb +3 -0
- data/revealize.gemspec +33 -0
- data/spec/revealize/deck_list_spec.rb +15 -0
- data/spec/revealize/file_system_store_spec.rb +71 -0
- data/spec/revealize/integration_spec.rb +68 -0
- data/spec/revealize/slide_deck_spec.rb +32 -0
- data/spec/revealize/slide_spec.rb +46 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/files.rb +28 -0
- metadata +248 -0
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
# Capybara features specs
|
9
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
10
|
+
end
|
11
|
+
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Rob Westgeest
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Revealize
|
2
|
+
|
3
|
+
Creates serves and compiles slide decks using reveal js markdown and
|
4
|
+
haml
|
5
|
+
|
6
|
+
In my company we use one repository for all training slide decks. In the
|
7
|
+
process of migrating from OpenOffice to revealjs I needed something that
|
8
|
+
allowed me to
|
9
|
+
|
10
|
+
* manage several slide decks (for different presentations) using one
|
11
|
+
pile of slides
|
12
|
+
* use different templates for the decks
|
13
|
+
* write slides in haml or markdown
|
14
|
+
* use revealjs as slideshow engine
|
15
|
+
|
16
|
+
## Installation
|
17
|
+
|
18
|
+
Add this line to your application's Gemfile:
|
19
|
+
|
20
|
+
gem 'revealize'
|
21
|
+
|
22
|
+
And then execute:
|
23
|
+
|
24
|
+
$ bundle
|
25
|
+
|
26
|
+
Or install it yourself as:
|
27
|
+
|
28
|
+
$ gem install revealize
|
29
|
+
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
This gem is very much work in progress.
|
33
|
+
|
34
|
+
TODO
|
35
|
+
|
36
|
+
To start the server
|
37
|
+
|
38
|
+
```bash
|
39
|
+
revealize server
|
40
|
+
```
|
41
|
+
|
42
|
+
You might want to use rerun to make sure the server reruns when a file
|
43
|
+
changes
|
44
|
+
|
45
|
+
open a browser and type localhost:8080 to view the sameple presentation
|
46
|
+
|
47
|
+
## Contributing
|
48
|
+
|
49
|
+
1. Fork it
|
50
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
51
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
52
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
53
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/bin/revealize
ADDED
data/lib/revealize.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'sinatra'
|
3
|
+
require 'revealize/server'
|
4
|
+
module Revealize
|
5
|
+
class Commands < Thor
|
6
|
+
desc "server", "start the revealize server"
|
7
|
+
def server
|
8
|
+
app = Rack::Builder.new do
|
9
|
+
run Server
|
10
|
+
end
|
11
|
+
Rack::Server.start :app => app
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Revealize
|
2
|
+
class DeckList
|
3
|
+
attr_reader :deck_names
|
4
|
+
def initialize(*deck_names)
|
5
|
+
@deck_names = deck_names
|
6
|
+
end
|
7
|
+
|
8
|
+
def render
|
9
|
+
deck_names.map {|deck_name| "<a href=\"/#{deck_name}\">#{deck_name}</a>" }.join($/)
|
10
|
+
end
|
11
|
+
def ==(other)
|
12
|
+
return false unless other.is_a?(DeckList)
|
13
|
+
return other.deck_names == deck_names
|
14
|
+
end
|
15
|
+
def to_s
|
16
|
+
"DeckList(#{deck_names.join(', ')})"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'revealize/deck_template'
|
2
|
+
require 'revealize/slide_deck_dsl'
|
3
|
+
require 'revealize/slide_deck'
|
4
|
+
require 'revealize/slide'
|
5
|
+
require 'revealize/deck_list'
|
6
|
+
|
7
|
+
module Revealize
|
8
|
+
class SlideError < Exception
|
9
|
+
def self.does_no_exist(slide_name)
|
10
|
+
self.new("Slide #{slide_name} does not exist")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
class FileSystemStore
|
16
|
+
SLIDE_DECKS_DIR='slide_decks'
|
17
|
+
SLIDES_DIR='slides'
|
18
|
+
LAYOUTS_DIR='layouts'
|
19
|
+
|
20
|
+
attr_reader :root_path, :deck
|
21
|
+
|
22
|
+
def initialize(root_path, slide_deck=nil)
|
23
|
+
@root_path = root_path
|
24
|
+
@deck = slide_deck
|
25
|
+
end
|
26
|
+
|
27
|
+
def decks
|
28
|
+
DeckList.new *deck_names
|
29
|
+
end
|
30
|
+
|
31
|
+
def read_deck(deck_name)
|
32
|
+
SlideDeckDsl.new(self).instance_eval(deck_file(deck_name))
|
33
|
+
@deck
|
34
|
+
end
|
35
|
+
|
36
|
+
def read_layout(layout_name)
|
37
|
+
@deck = SlideDeck.new(DeckTemplate.new(layout_file(layout_name)))
|
38
|
+
end
|
39
|
+
|
40
|
+
def read_slide(slide_name)
|
41
|
+
@deck.add_slide(create_slide(slide_name))
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def deck_file(deck_name)
|
47
|
+
File.read(File.join(root_path, SLIDE_DECKS_DIR, deck_name + '.deck'))
|
48
|
+
end
|
49
|
+
|
50
|
+
def layout_file(layout_name)
|
51
|
+
File.read(File.join(root_path, LAYOUTS_DIR, layout_name + '.haml'))
|
52
|
+
end
|
53
|
+
|
54
|
+
def deck_names
|
55
|
+
Dir[File.join(root_path, SLIDE_DECKS_DIR, '*.deck') ].map {|f| File.basename(f,'.deck')}
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_slide(slide_name)
|
59
|
+
file_name = Dir[File.join(root_path, SLIDES_DIR, slide_name + '.*')].first
|
60
|
+
raise SlideError.does_no_exist(slide_name) unless file_name
|
61
|
+
if File.extname(file_name) == '.md'
|
62
|
+
MarkdownSlide.new(File.read(file_name))
|
63
|
+
else
|
64
|
+
HamlSlide.new(File.read(file_name))
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'haml'
|
2
|
+
require 'revealize/file_system_store'
|
3
|
+
|
4
|
+
module Revealize
|
5
|
+
class Server < Sinatra::Base
|
6
|
+
set :public_folder, '.'
|
7
|
+
get %r{.*favicon.*} do
|
8
|
+
''
|
9
|
+
end
|
10
|
+
|
11
|
+
get '/' do
|
12
|
+
FileSystemStore.new('.').decks.render
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/:slide_deck' do
|
16
|
+
FileSystemStore.new('.').read_deck(params[:slide_deck]).render
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'haml'
|
2
|
+
require 'kramdown'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module Revealize
|
6
|
+
class HamlSlide < Struct.new(:content)
|
7
|
+
def render
|
8
|
+
Haml::Engine.new(content).render
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
class MarkdownSlide < Struct.new(:raw_content)
|
14
|
+
def render
|
15
|
+
render_markdown
|
16
|
+
Haml::Engine.new("%section#{section_options}\n =rendered_markdown").render(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def render_markdown
|
20
|
+
@rendered_markdown = Kramdown::Document.new(content_without_preamble, :auto_ids => false).to_html
|
21
|
+
end
|
22
|
+
def rendered_markdown
|
23
|
+
@rendered_markdown
|
24
|
+
end
|
25
|
+
|
26
|
+
def content_without_preamble
|
27
|
+
return raw_content unless raw_content.start_with?("---")
|
28
|
+
raw_content = self.raw_content.sub("---\n", '')
|
29
|
+
pre_amble, content = raw_content.split("---\n")
|
30
|
+
@options = YAML.load(pre_amble)
|
31
|
+
return content
|
32
|
+
end
|
33
|
+
|
34
|
+
def section_options
|
35
|
+
return '' unless @options
|
36
|
+
return %Q{(#{@options.to_a.map {|option| "data-#{ option.first }='#{option.last}'" }.join(' ')})}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'revealize/file_system_store'
|
2
|
+
|
3
|
+
module Revealize
|
4
|
+
class SlideDeck
|
5
|
+
attr_reader :slides
|
6
|
+
def initialize(template)
|
7
|
+
@slides = []
|
8
|
+
@template = template
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_slide(renderable)
|
12
|
+
@slides << renderable
|
13
|
+
end
|
14
|
+
|
15
|
+
def render
|
16
|
+
@template.render(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def render_slides
|
20
|
+
@slides.map { |slide| slide.render }.join()
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
data/revealize.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'revealize/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "revealize"
|
8
|
+
spec.version = Revealize::VERSION
|
9
|
+
spec.authors = ["Rob Westgeest"]
|
10
|
+
spec.email = ["rob@qwan.it"]
|
11
|
+
spec.description = %q{A server and slide deck generator for revealjs}
|
12
|
+
spec.summary = %q{Utility for managing slide decks using revealjs
|
13
|
+
revealize server serves slide decks
|
14
|
+
revealize build [slide deck] generates the slide deck given or all if slide deck ommitted}
|
15
|
+
spec.homepage = ""
|
16
|
+
spec.license = "MIT"
|
17
|
+
|
18
|
+
spec.files = `git ls-files`.split($/)
|
19
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rerun"
|
26
|
+
spec.add_development_dependency "rspec"
|
27
|
+
spec.add_development_dependency "guard-rspec"
|
28
|
+
spec.add_development_dependency "capybara"
|
29
|
+
spec.add_dependency "thor"
|
30
|
+
spec.add_dependency "sinatra"
|
31
|
+
spec.add_dependency "haml"
|
32
|
+
spec.add_dependency "kramdown"
|
33
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'revealize/deck_list'
|
4
|
+
|
5
|
+
module Revealize
|
6
|
+
describe DeckList do
|
7
|
+
describe "render" do
|
8
|
+
it "creates a list of links to decks" do
|
9
|
+
DeckList.new('deck1', 'deck2').render.should include '<a href="/deck1">deck1</a>'
|
10
|
+
DeckList.new('deck1', 'deck2').render.should include '<a href="/deck2">deck2</a>'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'revealize/file_system_store'
|
3
|
+
|
4
|
+
module Revealize
|
5
|
+
describe FileSystemStore do
|
6
|
+
include Files
|
7
|
+
after(:each) { rm_r 'spec/fixtures/root' if File.exists? 'spec/fixtures/root' }
|
8
|
+
|
9
|
+
let(:file_system_store) { FileSystemStore.new('spec/fixtures/root', deck) }
|
10
|
+
|
11
|
+
describe "#decks" do
|
12
|
+
let(:deck) { nil }
|
13
|
+
|
14
|
+
context 'without deck files' do
|
15
|
+
it "contains an emtpy deck lisy" do
|
16
|
+
file_system_store.decks.should == DeckList.new
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'with deck files' do
|
22
|
+
it "contains a deck list" do
|
23
|
+
a_file("spec/fixtures/root/#{FileSystemStore::SLIDE_DECKS_DIR}/first_deck.deck").with_content ""
|
24
|
+
a_file("spec/fixtures/root/#{FileSystemStore::SLIDE_DECKS_DIR}/second_deck.deck").with_content ""
|
25
|
+
file_system_store.decks.should == DeckList.new('first_deck',
|
26
|
+
'second_deck')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "read a slide" do
|
32
|
+
let(:deck) { SlideDeck.new(EmptyTemplate.new) }
|
33
|
+
let(:slides) { deck.slides }
|
34
|
+
|
35
|
+
context "when slide does not exist" do
|
36
|
+
it "raises an error" do
|
37
|
+
expect { file_system_store.read_slide("the_slide") }.to raise_exception(SlideError)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when slide is a haml file" do
|
42
|
+
before { a_file("spec/fixtures/root/#{FileSystemStore::SLIDES_DIR}/the_slide.haml").with_content "%section" }
|
43
|
+
|
44
|
+
it "creates a HamlSlide" do
|
45
|
+
file_system_store.read_slide('the_slide')
|
46
|
+
slides.should == [HamlSlide.new("%section")]
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
context "when slide is a markdown file" do
|
52
|
+
before { a_file("spec/fixtures/root/#{FileSystemStore::SLIDES_DIR}/the_slide.md").with_content "# title" }
|
53
|
+
|
54
|
+
it "creates a MarkdownSlide" do
|
55
|
+
file_system_store.read_slide('the_slide')
|
56
|
+
slides.should == [MarkdownSlide.new("# title")]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when slide is both a markdown and a haml file" do
|
61
|
+
before { a_file("spec/fixtures/root/#{FileSystemStore::SLIDES_DIR}/the_slide.haml").with_content "%section" }
|
62
|
+
before { a_file("spec/fixtures/root/#{FileSystemStore::SLIDES_DIR}/the_slide.md").with_content "# title" }
|
63
|
+
|
64
|
+
it "prefers the haml one" do
|
65
|
+
file_system_store.read_slide('the_slide')
|
66
|
+
slides.should == [HamlSlide.new("%section")]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'capybara/rspec'
|
3
|
+
|
4
|
+
require 'revealize'
|
5
|
+
|
6
|
+
module Revealize
|
7
|
+
describe "integration" do
|
8
|
+
include Files
|
9
|
+
before(:all) do
|
10
|
+
mkdir_p "spec/fixtures/root/#{FileSystemStore::SLIDE_DECKS_DIR}"
|
11
|
+
mkdir_p "spec/fixtures/root/#{FileSystemStore::SLIDES_DIR}"
|
12
|
+
mkdir_p "spec/fixtures/root/#{FileSystemStore::LAYOUTS_DIR}"
|
13
|
+
a_file("spec/fixtures/root/#{FileSystemStore::SLIDE_DECKS_DIR}/deck_1.deck") do
|
14
|
+
%Q{layout 'qwan'
|
15
|
+
slide 'slide_1'
|
16
|
+
slide 'slide_2'}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after(:all) do
|
21
|
+
rm_r "spec/fixtures/root"
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'reading a deck' do
|
25
|
+
it "renders a list of slides" do
|
26
|
+
a_file("spec/fixtures/root/#{FileSystemStore::SLIDES_DIR}/slide_1.haml") do
|
27
|
+
haml_content %Q{%section
|
28
|
+
..%h2 slide 1}
|
29
|
+
end
|
30
|
+
a_file("spec/fixtures/root/#{FileSystemStore::SLIDES_DIR}/slide_2.haml") do
|
31
|
+
haml_content %Q{%section
|
32
|
+
..%h2 slide 2}
|
33
|
+
end
|
34
|
+
a_file("spec/fixtures/root/#{FileSystemStore::LAYOUTS_DIR}/qwan.haml") do
|
35
|
+
haml_content %q{%html
|
36
|
+
..%body
|
37
|
+
....= render_slides}
|
38
|
+
end
|
39
|
+
deck_1 = FileSystemStore.new('spec/fixtures/root').read_deck('deck_1')
|
40
|
+
deck_1.render.should == Haml::Engine.new(haml_content %Q{%html
|
41
|
+
..%body
|
42
|
+
....%section
|
43
|
+
......%h2 slide 1
|
44
|
+
....%section
|
45
|
+
......%h2 slide 2}).render
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'listing decks' do
|
50
|
+
context "without decks" do
|
51
|
+
it 'renders a list of links to a deck' do
|
52
|
+
decks = FileSystemStore.new('spec/fixtures/root').decks
|
53
|
+
Capybara.string(decks.render).should_not have_selector("a[href='/#{FileSystemStore::SLIDE_DECKS_DIR}/deck_1']")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "with decks" do
|
58
|
+
it 'renders a list of links to a deck' do
|
59
|
+
a_file("spec/fixtures/root/#{FileSystemStore::SLIDE_DECKS_DIR}/deck_1.deck").with_content ""
|
60
|
+
decks = FileSystemStore.new('spec/fixtures/root').decks
|
61
|
+
Capybara.string(decks.render).should_not have_selector("a[href='/#{FileSystemStore::SLIDE_DECKS_DIR}/deck_1']")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'revealize/slide_deck'
|
4
|
+
|
5
|
+
module Revealize
|
6
|
+
describe SlideDeck do
|
7
|
+
describe "render" do
|
8
|
+
let(:slide_deck) { SlideDeck.new(EmptyTemplate.new) }
|
9
|
+
let(:mock_renderable1) { double('slide') }
|
10
|
+
let(:mock_renderable2) { double('subdeck') }
|
11
|
+
|
12
|
+
before do
|
13
|
+
slide_deck.add_slide mock_renderable1
|
14
|
+
slide_deck.add_slide mock_renderable2
|
15
|
+
end
|
16
|
+
|
17
|
+
it "renders all slides through using template" do
|
18
|
+
mock_renderable1.should_receive :render
|
19
|
+
mock_renderable2.should_receive :render
|
20
|
+
|
21
|
+
slide_deck.render
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns the rendered result" do
|
25
|
+
mock_renderable1.stub(:render).and_return "slide 1"
|
26
|
+
mock_renderable2.stub(:render).and_return "slide 2"
|
27
|
+
|
28
|
+
slide_deck.render.should == "slide 1slide 2"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'revealize/slide'
|
3
|
+
|
4
|
+
module Revealize
|
5
|
+
module HamlHelper
|
6
|
+
def haml(content)
|
7
|
+
Haml::Engine.new(content).render
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe HamlSlide do
|
12
|
+
include HamlHelper
|
13
|
+
describe "#render" do
|
14
|
+
it "returns the rendered slide" do
|
15
|
+
HamlSlide.new("%section(data-transition='fade')").render.should == haml("%section(data-transition='fade')")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe MarkdownSlide do
|
21
|
+
include HamlHelper
|
22
|
+
describe "#render" do
|
23
|
+
let(:slide) { MarkdownSlide.new(markdown_content) }
|
24
|
+
let(:markdown_content) { "# Cool presentation" }
|
25
|
+
subject { slide.render }
|
26
|
+
|
27
|
+
it { should == haml("%section\n %h1 Cool presentation") }
|
28
|
+
|
29
|
+
context "with an empty preamble" do
|
30
|
+
let(:markdown_content) { %Q{---
|
31
|
+
---
|
32
|
+
# Cool presentation}.gsub(/^ */, '') }
|
33
|
+
it { should == haml("%section\n %h1 Cool presentation") }
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with a preamble with attributes" do
|
37
|
+
let(:markdown_content) { %Q{---
|
38
|
+
transition : flow
|
39
|
+
state : blackout
|
40
|
+
---
|
41
|
+
# Cool presentation}.gsub(/^ */, '') }
|
42
|
+
it { should == haml("%section(data-state='blackout' data-transition='flow')\n %h1 Cool presentation") }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Files
|
2
|
+
include FileUtils
|
3
|
+
def a_file(filepath, &block)
|
4
|
+
file_writer = FileWriter.new(filepath)
|
5
|
+
file_writer.with_content(yield) if block_given?
|
6
|
+
file_writer
|
7
|
+
end
|
8
|
+
|
9
|
+
def haml_content(content)
|
10
|
+
content.gsub(/^ */,'').gsub('.',' ')
|
11
|
+
end
|
12
|
+
|
13
|
+
class FileWriter < Struct.new(:filepath)
|
14
|
+
include FileUtils
|
15
|
+
def with_content(content)
|
16
|
+
make_dir
|
17
|
+
File.open(filepath, "w+") { |f| f.write(content) }
|
18
|
+
end
|
19
|
+
def make_dir
|
20
|
+
mkdir_p(directory) unless File.exists?(directory)
|
21
|
+
end
|
22
|
+
def directory
|
23
|
+
@directory ||= File.dirname(filepath)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
metadata
ADDED
@@ -0,0 +1,248 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: revealize
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Rob Westgeest
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-08-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rerun
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: capybara
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: thor
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: sinatra
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: haml
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: kramdown
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :runtime
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
description: A server and slide deck generator for revealjs
|
175
|
+
email:
|
176
|
+
- rob@qwan.it
|
177
|
+
executables:
|
178
|
+
- revealize
|
179
|
+
extensions: []
|
180
|
+
extra_rdoc_files: []
|
181
|
+
files:
|
182
|
+
- .gitignore
|
183
|
+
- .ruby-version
|
184
|
+
- Gemfile
|
185
|
+
- Guardfile
|
186
|
+
- LICENSE.txt
|
187
|
+
- README.md
|
188
|
+
- Rakefile
|
189
|
+
- bin/revealize
|
190
|
+
- lib/revealize.rb
|
191
|
+
- lib/revealize/commands.rb
|
192
|
+
- lib/revealize/deck_list.rb
|
193
|
+
- lib/revealize/deck_template.rb
|
194
|
+
- lib/revealize/file_system_store.rb
|
195
|
+
- lib/revealize/server.rb
|
196
|
+
- lib/revealize/slide.rb
|
197
|
+
- lib/revealize/slide_deck.rb
|
198
|
+
- lib/revealize/slide_deck_dsl.rb
|
199
|
+
- lib/revealize/version.rb
|
200
|
+
- revealize.gemspec
|
201
|
+
- spec/revealize/deck_list_spec.rb
|
202
|
+
- spec/revealize/file_system_store_spec.rb
|
203
|
+
- spec/revealize/integration_spec.rb
|
204
|
+
- spec/revealize/slide_deck_spec.rb
|
205
|
+
- spec/revealize/slide_spec.rb
|
206
|
+
- spec/spec_helper.rb
|
207
|
+
- spec/support/files.rb
|
208
|
+
homepage: ''
|
209
|
+
licenses:
|
210
|
+
- MIT
|
211
|
+
post_install_message:
|
212
|
+
rdoc_options: []
|
213
|
+
require_paths:
|
214
|
+
- lib
|
215
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
216
|
+
none: false
|
217
|
+
requirements:
|
218
|
+
- - ! '>='
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: '0'
|
221
|
+
segments:
|
222
|
+
- 0
|
223
|
+
hash: 547100435
|
224
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
|
+
none: false
|
226
|
+
requirements:
|
227
|
+
- - ! '>='
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
segments:
|
231
|
+
- 0
|
232
|
+
hash: 547100435
|
233
|
+
requirements: []
|
234
|
+
rubyforge_project:
|
235
|
+
rubygems_version: 1.8.23
|
236
|
+
signing_key:
|
237
|
+
specification_version: 3
|
238
|
+
summary: Utility for managing slide decks using revealjs revealize server serves slide
|
239
|
+
decks revealize build [slide deck] generates the slide deck given or all if slide
|
240
|
+
deck ommitted
|
241
|
+
test_files:
|
242
|
+
- spec/revealize/deck_list_spec.rb
|
243
|
+
- spec/revealize/file_system_store_spec.rb
|
244
|
+
- spec/revealize/integration_spec.rb
|
245
|
+
- spec/revealize/slide_deck_spec.rb
|
246
|
+
- spec/revealize/slide_spec.rb
|
247
|
+
- spec/spec_helper.rb
|
248
|
+
- spec/support/files.rb
|