rhet-butler 0.11.1 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +8 -8
  2. data/default-configuration/assets/javascript/sockjs-0.3.4.js +2379 -0
  3. data/default-configuration/assets/stylesheets/rhet.css.sass +4 -3
  4. data/default-configuration/common/templates/header-javascript.html +1 -1
  5. data/default-configuration/common/templates/presentation.html.erb +1 -1
  6. data/default-configuration/common/templates/presenter-qr.html.erb +1 -1
  7. data/default-configuration/presenter/templates/stylesheets.html.erb +1 -0
  8. data/lib/rhet-butler/command-line.rb +2 -0
  9. data/lib/rhet-butler/filter-resolver.rb +10 -1
  10. data/lib/rhet-butler/messaging.rb +24 -7
  11. data/lib/rhet-butler/resource-localizer.rb +1 -1
  12. data/lib/rhet-butler/slide-contents/embed.rb +39 -0
  13. data/lib/rhet-butler/slide-contents.rb +40 -0
  14. data/lib/rhet-butler/slide-loader.rb +8 -7
  15. data/lib/rhet-butler/slide-rendering.rb +17 -6
  16. data/lib/rhet-butler/slide.rb +9 -78
  17. data/lib/rhet-butler/stasis/rack-loader.rb +3 -1
  18. data/lib/rhet-butler/stasis/transform-queue.rb +23 -13
  19. data/lib/rhet-butler/static-generator.rb +1 -1
  20. data/lib/rhet-butler/web/main-app.rb +12 -12
  21. data/lib/rhet-butler/web/presentation-app.rb +5 -1
  22. data/lib/rhet-butler/yaml-schema.rb +1 -1
  23. data/spec/slide-loader.rb +11 -1
  24. metadata +8 -12
  25. data/lib/rhet-butler/arrangement-finder.rb +0 -71
  26. data/lib/rhet-butler/arrangement.rb +0 -78
  27. data/lib/rhet-butler/layout-rule.rb +0 -61
  28. data/lib/rhet-butler/slide-arranger.rb +0 -39
  29. data/lib/rhet-butler/slide-processor.rb +0 -27
  30. data/spec/arrangements.rb +0 -76
  31. data/spec/slide-processing.rb +0 -76
@@ -1,6 +1,8 @@
1
1
  require 'rhet-butler/stasis'
2
2
  module RhetButler
3
3
  module Stasis
4
+ class LoadFailed < StandardError; end
5
+
4
6
  class RackLoader
5
7
  def initialize(url, app)
6
8
  require 'stringio'
@@ -46,7 +48,7 @@ module RhetButler
46
48
  code, headers, body = *response
47
49
 
48
50
  unless code == 200
49
- raise "Bad response from local server: #{response[0..1].inspect} body: #{response[2].to_a.join.length}"
51
+ raise LoadFailed, "Bad response from local server for #{source_uri}:\n#{response[0..1].inspect} body: #{response[2].to_a.join.length}"
50
52
  end
51
53
  doc.type = headers["Content-Type"]
52
54
  doc.body = body.to_a.join("")
@@ -4,9 +4,9 @@ module RhetButler
4
4
  class TranformationOrder
5
5
  attr_accessor :source_link, :target_link, :storage_target
6
6
 
7
- def initialize(source_link, target_link, storage_target)
8
- @source_link, @target_link, @storage_target =
9
- source_link, target_link, storage_target
7
+ def initialize(document, source_link, target_link, storage_target)
8
+ @document, @source_link, @target_link, @storage_target =
9
+ document, source_link, target_link, storage_target
10
10
  end
11
11
  end
12
12
 
@@ -33,16 +33,16 @@ module RhetButler
33
33
  end
34
34
  attr_accessor :loader, :writer, :mapping
35
35
 
36
- def add(source)
36
+ def add(document, source)
37
37
  store_to = mapping.storage_for(source)
38
38
  link_target = mapping.target_link_for(source)
39
- add_mapping(source, link_target, store_to)
39
+ add_mapping(document, source, link_target, store_to)
40
40
  return link_target
41
41
  end
42
42
 
43
- def add_mapping(source_uri, target_uri, target_path)
43
+ def add_mapping(document, source_uri, target_uri, target_path)
44
44
  @hash[source_uri] = target_uri
45
- @list << TranformationOrder.new(source_uri, target_uri, target_path)
45
+ @list << TranformationOrder.new(document, source_uri, target_uri, target_path)
46
46
  end
47
47
 
48
48
  def transform_class(type)
@@ -50,9 +50,15 @@ module RhetButler
50
50
  end
51
51
 
52
52
  def target_for(document, link)
53
- link = canonicalize_uri(mapping.absolute_uri(document.source_uri).join(link))
54
- @hash.fetch(link) do
55
- add(link)
53
+ link = Addressable::URI.parse(link)
54
+ case link.scheme
55
+ when 'data'
56
+ link
57
+ else
58
+ link = canonicalize_uri(mapping.absolute_uri(document.source_uri).join(link))
59
+ @hash.fetch(link) do
60
+ add(document, link)
61
+ end
56
62
  end
57
63
  end
58
64
 
@@ -62,8 +68,12 @@ module RhetButler
62
68
  uri
63
69
  end
64
70
 
65
- def load_document(source_path)
66
- loader.load(canonicalize_uri(source_path))
71
+ def load_document(order)
72
+ loader.load(canonicalize_uri(order.source_link))
73
+ rescue LoadFailed
74
+ require 'pp'
75
+ puts "Problem loading #{order.pretty_inspect}"
76
+ raise
67
77
  end
68
78
 
69
79
  def write_document(target_path, document_body)
@@ -74,7 +84,7 @@ module RhetButler
74
84
  until @list.empty?
75
85
  order = @list.pop
76
86
 
77
- doc = load_document(order.source_link)
87
+ doc = load_document(order)
78
88
  transformer = transform_class(doc.type).new
79
89
  transformer.queue = self
80
90
  transformer.document = doc
@@ -29,7 +29,7 @@ module RhetButler
29
29
  transform_queue.writer = Stasis::ValiseWriter.new(@target_valise)
30
30
  transform_queue.writer.store_log = store_log
31
31
 
32
- transform_queue.add("/")
32
+ transform_queue.add(nil, "/")
33
33
  transform_queue.go
34
34
  end
35
35
  end
@@ -77,7 +77,7 @@ module RhetButler
77
77
 
78
78
  def builder
79
79
  sockjs_options = {
80
- :sockjs_url => "/assets/javascript/sockjs-0.2.1.js",
80
+ :sockjs_url => "/assets/javascript/sockjs-0.3.4.js",
81
81
  :queue => SlideMessageQueue.new
82
82
  }
83
83
 
@@ -127,25 +127,25 @@ module RhetButler
127
127
  end
128
128
  end
129
129
 
130
- def start
130
+ def build_server
131
131
  configuration = @file_manager.base_config
132
132
 
133
- puts "Starting server. Try one of these:"
133
+ Thin::Logging.log_info "Starting server. Try one of these:"
134
134
  require 'system/getifaddrs'
135
135
  System.get_all_ifaddrs.each do |interface|
136
- puts " http://#{interface[:inet_addr].to_s}:#{configuration.serve_port}/"
137
- puts " http://#{interface[:inet_addr].to_s}:#{configuration.serve_port}/qr"
136
+ Thin::Logging.log_info " http://#{interface[:inet_addr].to_s}:#{configuration.serve_port}/"
137
+ Thin::Logging.log_info " http://#{interface[:inet_addr].to_s}:#{configuration.serve_port}/qr"
138
138
  end
139
139
  server = Thin::Server.new(builder.to_app, configuration.serve_port)
140
140
  server.threaded = true
141
- server.start
142
- # EM.run do
143
- # thin = Rack::Handler.get("thin")
144
- # thin.run(builder.to_app, :Host => "0.0.0.0", :Port => configuration.serve_port) do |server|
145
- # server.threaded = true
146
- # end
147
- # end
141
+ server
142
+ end
143
+
144
+ #:nocov:
145
+ def start
146
+ build_server.start
148
147
  end
148
+ #:nocov:
149
149
  end
150
150
  end
151
151
  end
@@ -25,8 +25,12 @@ module RhetButler
25
25
  @file_manager.slide_files
26
26
  end
27
27
 
28
+ def assets_valise
29
+ @file_manager.base_assets(configuration.template_cache)
30
+ end
31
+
28
32
  def root_step
29
- slide_loader = SlideLoader.new(slides_valise, configuration)
33
+ slide_loader = SlideLoader.new(slides_valise, assets_valise, configuration)
30
34
  slide_loader.load_slides
31
35
  end
32
36
 
@@ -2,7 +2,7 @@ require 'yaml'
2
2
  require 'rhet-butler/slide'
3
3
  require 'rhet-butler/slide-group'
4
4
  require 'rhet-butler/slide-includer'
5
- require 'rhet-butler/layout-rule'
5
+ require 'rhet-butler/slide-contents'
6
6
 
7
7
  #YAML.add_tag('!slide', RhetButler::Slide)
8
8
  #YAML.add_tag('!group', RhetButler::SlideGroup)
data/spec/slide-loader.rb CHANGED
@@ -14,12 +14,16 @@ describe RhetButler::SlideLoader do
14
14
  end
15
15
  end
16
16
 
17
+ let :assets do
18
+ files.templates("assets")
19
+ end
20
+
17
21
  let :configuration do
18
22
  RhetButler::Configuration.new(files)
19
23
  end
20
24
 
21
25
  let :loader do
22
- described_class.new(files, configuration)
26
+ described_class.new(files, assets, configuration)
23
27
  end
24
28
 
25
29
  let :slides do
@@ -37,6 +41,12 @@ describe RhetButler::SlideLoader do
37
41
  end.should_not be_nil
38
42
  end
39
43
 
44
+ it "should have the embedded text" do
45
+ slides.find do |slide|
46
+ slide.content =~ /which I embedded/ if slide.respond_to? :content
47
+ end.should_not be_nil
48
+ end
49
+
40
50
  it "should have the slide group" do
41
51
  slides.each_slide.find do |slide|
42
52
  slide.content =~ /grouped/
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhet-butler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Judson Lester
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-14 00:00:00.000000000 Z
11
+ date: 2014-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: compass-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0.alpha
19
+ version: 1.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0.alpha
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: compass-import-once
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -225,20 +225,17 @@ files:
225
225
  - lib/rhet-butler/command-line.rb
226
226
  - lib/rhet-butler/html-generator.rb
227
227
  - lib/rhet-butler/slide-group.rb
228
- - lib/rhet-butler/arrangement.rb
229
228
  - lib/rhet-butler/yaml-schema.rb
230
229
  - lib/rhet-butler/slide-loader.rb
231
230
  - lib/rhet-butler/slide.rb
232
231
  - lib/rhet-butler/slide-includer.rb
233
232
  - lib/rhet-butler/static-generator.rb
234
233
  - lib/rhet-butler/yaml-type.rb
235
- - lib/rhet-butler/layout-rule.rb
236
- - lib/rhet-butler/arrangement-finder.rb
237
234
  - lib/rhet-butler/file-loading.rb
238
235
  - lib/rhet-butler/filter-resolver.rb
239
236
  - lib/rhet-butler/include-processor.rb
240
- - lib/rhet-butler/slide-arranger.rb
241
- - lib/rhet-butler/slide-processor.rb
237
+ - lib/rhet-butler/slide-contents.rb
238
+ - lib/rhet-butler/slide-contents/embed.rb
242
239
  - lib/rhet-butler/slide-renderer.rb
243
240
  - lib/rhet-butler/slide-renderers/code.rb
244
241
  - lib/rhet-butler/slide-renderers/cues.rb
@@ -259,11 +256,9 @@ files:
259
256
  - lib/rhet-butler/stasis/writer.rb
260
257
  - bin/rhet-butler
261
258
  - spec/slide-loader.rb
262
- - spec/slide-processing.rb
263
259
  - spec/html-generation.rb
264
260
  - spec/rhet-butler.rb
265
261
  - spec/presentation-view.rb
266
- - spec/arrangements.rb
267
262
  - default-configuration/assets/favicon.ico
268
263
  - default-configuration/assets/apple-touch-icon-precomposed.png
269
264
  - default-configuration/assets/apple-touch-icon.png
@@ -357,6 +352,7 @@ files:
357
352
  - default-configuration/assets/stylesheets/setup.css
358
353
  - default-configuration/assets/stylesheets/presentation.css
359
354
  - default-configuration/assets/javascript/sockjs-0.2.1.js
355
+ - default-configuration/assets/javascript/sockjs-0.3.4.js
360
356
  - default-configuration/assets/javascript/keyboard-nav.js
361
357
  - default-configuration/assets/javascript/highlight.pack.js
362
358
  - default-configuration/assets/javascript/highlight.js/LICENSE
@@ -394,7 +390,7 @@ rdoc_options:
394
390
  - --main
395
391
  - doc/README
396
392
  - --title
397
- - rhet-butler-0.11.1 Documentation
393
+ - rhet-butler-0.12.1 Documentation
398
394
  require_paths:
399
395
  - lib/
400
396
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,71 +0,0 @@
1
- require 'rhet-butler/arrangement'
2
- require 'rhet-butler/slide-traverser'
3
- module RhetButler
4
- class ArrangementFinder < SlideTraverser
5
- attr_accessor :root_arrangement, :root_group, :blueprint
6
-
7
- def initialize
8
- super
9
- end
10
-
11
- def setup
12
- if @blueprint.empty?
13
- raise "Empty blueprint - can't layout slides"
14
- end
15
-
16
- @blueprint.combination(2) do |first, second|
17
- if first.match == second.match
18
- if first.match == {}
19
- raise "Two default rules (default or match: {}) - please fix"
20
- end
21
- warn "Blueprint rules with duplicate rules: will ignore the later one:"
22
- warn second.inspect
23
- end
24
- end
25
-
26
- unless @blueprint.last.match == {}
27
- warn "Last blueprint rule not a default - fixing..."
28
- defaults, rules = @blueprint.partition{|rule| rule.match == {}}
29
- raise "Multiple default blueprint rules" unless defaults.length < 2
30
- raise "No default blueprint rule" unless defaults.length > 0
31
- @blueprint = rules + defaults
32
- end
33
-
34
- default_rule = @blueprint.last
35
- @active_match = default_rule
36
- @root_arrangement = default_rule.layout
37
- descend(@root_group, @root_arrangement)
38
- end
39
-
40
- def on_slide(slide)
41
- target_stack.last.slides << slide
42
- end
43
-
44
- def on_group(group)
45
- arrangement = find_arrangement(group)
46
- if arrangement != target_stack.last
47
- target_stack.last.slides << arrangement
48
- end
49
- descend(group, arrangement)
50
- end
51
-
52
- def match?(filter, value)
53
- return filter === value
54
- end
55
-
56
- def find_arrangement(group)
57
- match = {}
58
- template = nil
59
- match = blueprint.find do |rule|
60
- rule.match?(group)
61
- end
62
-
63
- if !match.nil? and match != @active_match
64
- @active_match = match
65
- return match.layout
66
- else
67
- return target_stack.last
68
- end
69
- end
70
- end
71
- end
@@ -1,78 +0,0 @@
1
- module RhetButler
2
- class Arrangement
3
- include Enumerable
4
-
5
- def initialize(*args)
6
- @slides = []
7
- @slide_width = 1000
8
- @slide_height = 1000
9
- end
10
-
11
- attr_accessor :slides, :slide_width, :slide_height
12
-
13
- def previous_slide
14
- @slides.last
15
- end
16
-
17
- def each
18
- if block_given?
19
- @slides.each{|slide| yield slide}
20
- else
21
- @slides.each
22
- end
23
- end
24
-
25
- class << self
26
- def register(name)
27
- Arrangement.registry[name] = self
28
- end
29
-
30
- def registry
31
- @registry ||= {}
32
- end
33
-
34
- def [](name)
35
- @registry[name]
36
- end
37
- end
38
- end
39
-
40
- class Linear < Arrangement
41
- register "linear"
42
-
43
- def initialize(plus_x, plus_y)
44
- super
45
- @plus_x = plus_x
46
- @plus_y = plus_y
47
- end
48
-
49
- def arrange(slideset)
50
- slide = slideset.current_slide
51
- slide.position.x = slideset.previous_slide.position.x + @plus_x
52
- slide.position.y = slideset.previous_slide.position.y + @plus_y
53
- return slide
54
- end
55
- end
56
-
57
- class LinearDigression < Linear
58
- register "digress-linear"
59
- register "linear-digress"
60
-
61
- def previous_slide
62
- @preceeding
63
- end
64
-
65
- def arrange(slideset)
66
- @preceeding ||= slideset.previous_slide
67
- super
68
- end
69
- end
70
-
71
- class Horizontal < Linear
72
- register "horizontal"
73
-
74
- def initialize
75
- super(1000, 0)
76
- end
77
- end
78
- end
@@ -1,61 +0,0 @@
1
- require 'rhet-butler/yaml-type'
2
-
3
- module RhetButler
4
- class LayoutRule < YamlType
5
- register "layout-rule"
6
-
7
- def initialize
8
- @match = {}
9
- @layout_args = nil
10
- end
11
- attr_accessor :match, :layout_type, :layout_args
12
-
13
- def self.optional_config
14
- %w[match]
15
- end
16
-
17
- def self.required_config
18
- %w[layout]
19
- end
20
-
21
- def setup_defaults
22
-
23
- end
24
-
25
- def normalize_config(coder)
26
- case coder.type
27
- when :seq
28
- { 'match' => coder.seq[0], 'layout' => coder.seq[1] }
29
- when :map
30
- coder.map
31
- else
32
- raise "Tried to configure a layout rule with non-sequence: #{coder.inspect}"
33
- end
34
- end
35
-
36
- def configure
37
- value_from_config("match") do |value|
38
- if value == 'default'
39
- @match = {}
40
- else
41
- @match = value
42
- end
43
- end
44
-
45
- @layout_type, @layout_args = *@config_hash['layout']
46
- end
47
-
48
- def layout
49
- Arrangement[@layout_type].new(*(@layout_args||[]))
50
- end
51
-
52
- def match?(group)
53
- @match.all? do |key, value|
54
- target = group.metadata.fetch(key)
55
- value === target
56
- end
57
- rescue KeyError
58
- false
59
- end
60
- end
61
- end