briefing 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,19 @@
1
1
  require 'sinatra/base'
2
2
  require 'sinatra/reloader'
3
3
  require 'briefing/slides'
4
+ require 'pathname'
4
5
 
5
6
  module Briefing
6
7
  class App < Sinatra::Base
8
+ configure do
9
+ set :briefing_dir, Pathname(File.dirname(__FILE__))
10
+ set :public_folder, briefing_dir + 'public'
11
+ set :views, briefing_dir + 'views'
12
+ end
13
+
7
14
  configure :development do
8
15
  register Sinatra::Reloader
9
- dir = File.dirname(__FILE__)
10
- set :public_folder, File.join(dir, 'public')
11
- set :views, File.join(dir, 'views')
16
+ also_reload(briefing_dir + 'slides.rb')
12
17
  end
13
18
 
14
19
  get '/' do
@@ -16,5 +21,11 @@ module Briefing
16
21
  @options = @slides.options
17
22
  erb :index
18
23
  end
24
+
25
+ get '/assets/:file.:ext' do |file, ext|
26
+ content_type ext
27
+ slides_file = Pathname(File.join(Dir::pwd, settings.slides_source))
28
+ send_file(slides_file.dirname + 'assets' + "#{file}.#{ext}")
29
+ end
19
30
  end
20
31
  end
@@ -1,10 +1,43 @@
1
1
  require 'yaml'
2
+ require 'cgi'
2
3
 
3
4
  module Briefing
4
5
  class Slides
5
6
  attr_reader :sections, :options
7
+
8
+ def initialize(filepath)
9
+ @sections = []
10
+ buffer = []
11
+ File.open(filepath).read.each_line {|line|
12
+ if line.match /^-{3,}(.*)$/
13
+ @sections << buffer.join('') if buffer.length > 0
14
+ buffer = []
15
+ else
16
+ buffer << modify_assets_path(line)
17
+ end
18
+ }
19
+ @sections << buffer.join('') if buffer.length > 0
20
+ @options = Options.new(@sections.shift) if @sections.length > 0
21
+ end
22
+
23
+ def modify_assets_path(line)
24
+ ## ![](hoge.jpg) => ![](assets/hoge.jpg)
25
+ line.gsub(/!\[(.*)\]\((.+)\)/) {|matched|
26
+ alt = $1
27
+ path = $2
28
+ if path.match /^https?:\/\//
29
+ matched
30
+ elsif path.match /^assets\//
31
+ matched
32
+ else
33
+ "![#{alt}](assets/#{CGI.escape(path)})"
34
+ end
35
+ }
36
+ end
37
+ end
6
38
 
7
- DEFAULTS = {
39
+ class Options < Hash
40
+ REVEALJS_DEFAULTS = {
8
41
  'controls' => false,
9
42
  'progress' => true,
10
43
  'history' => true,
@@ -18,23 +51,18 @@ module Briefing
18
51
  'rollingLinks' => false
19
52
  }
20
53
 
21
- def initialize(filepath)
22
- @sections = []
23
- buffer = []
24
- File.open(filepath).read.each_line {|line|
25
- if line.match /^-{3,}(.*)$/
26
- if buffer.length > 0
27
- @sections << buffer.join("")
28
- end
29
- buffer = []
30
- else
31
- buffer << line
32
- end
33
- }
34
- if buffer.length > 0
35
- @sections << buffer.join("")
54
+ def initialize(yaml_text)
55
+ if options = YAML.load(yaml_text)
56
+ self.merge! options
36
57
  end
37
- @options = DEFAULTS.merge(YAML.load(@sections.shift))
58
+ end
59
+
60
+ def revealjs
61
+ options = {}
62
+ REVEALJS_DEFAULTS.each_pair {|key, value|
63
+ options[key] = self[key] || value
64
+ }
65
+ options
38
66
  end
39
67
  end
40
68
  end
@@ -1,3 +1,3 @@
1
1
  module Briefing
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -57,8 +57,8 @@
57
57
 
58
58
  <script>
59
59
  Reveal.initialize({
60
- <% Briefing::Slides::DEFAULTS.each_key {|key| %>
61
- <%= key.to_s %>: <%= @options[key] %>,
60
+ <% @options.revealjs.each_pair {|key, value| %>
61
+ <%= key.to_s %>: <%= value.to_s %>,
62
62
  <% } %>
63
63
  theme: '<%= @options['theme'] || 'default' %>', // available themes are in /css/theme
64
64
  transition: '<%= @options['transition'] || 'default' %>', // default/cube/page/concave/zoom/linear/none
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: briefing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-05 00:00:00.000000000 Z
12
+ date: 2012-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra