awestruct 0.5.6.beta8 → 0.5.6.beta9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -4
  3. data/Rakefile +1 -1
  4. data/awestruct.gemspec +22 -18
  5. data/lib/awestruct/cli/auto.rb +25 -21
  6. data/lib/awestruct/cli/generate.rb +3 -2
  7. data/lib/awestruct/cli/init.rb +2 -1
  8. data/lib/awestruct/cli/invoker.rb +4 -3
  9. data/lib/awestruct/cli/manifest.rb +41 -0
  10. data/lib/awestruct/cli/options.rb +10 -1
  11. data/lib/awestruct/cli/server.rb +36 -6
  12. data/lib/awestruct/config/default-site.yml +3 -0
  13. data/lib/awestruct/context.rb +17 -0
  14. data/lib/awestruct/context_helper.rb +25 -21
  15. data/lib/awestruct/deploy/s3_deploy.rb +41 -3
  16. data/lib/awestruct/engine.rb +64 -33
  17. data/lib/awestruct/extensions/disqus.rb +2 -2
  18. data/lib/awestruct/extensions/flattr.rb +1 -1
  19. data/lib/awestruct/extensions/pipeline.rb +30 -8
  20. data/lib/awestruct/extensions/relative.rb +3 -1
  21. data/lib/awestruct/extensions/sitemap.rb +6 -0
  22. data/lib/awestruct/extensions/sitemap.xml.haml +2 -1
  23. data/lib/awestruct/extensions/tagger.rb +7 -6
  24. data/lib/awestruct/extensions/template.atom.haml +1 -1
  25. data/lib/awestruct/frameworks/base_Gemfile +12 -1
  26. data/lib/awestruct/frameworks/bootstrap/base_index.html.haml +22 -20
  27. data/lib/awestruct/frameworks/bootstrap/base_layout.html.haml +9 -7
  28. data/lib/awestruct/handlers/asciidoctor_handler.rb +1 -1
  29. data/lib/awestruct/handlers/base_tilt_handler.rb +3 -1
  30. data/lib/awestruct/pipeline.rb +57 -7
  31. data/lib/awestruct/rack/generate.rb +43 -0
  32. data/lib/awestruct/util/exception_helper.rb +3 -0
  33. data/lib/awestruct/version.rb +1 -1
  34. data/spec/awestruct/cli/invoker_spec.rb +1 -1
  35. data/spec/awestruct/cli/options_spec.rb +14 -13
  36. data/spec/awestruct/cli/server_spec.rb +15 -0
  37. data/spec/awestruct/context_helper_spec.rb +5 -5
  38. data/spec/awestruct/engine_spec.rb +110 -1
  39. data/spec/awestruct/extensions/relative_spec.rb +22 -0
  40. data/spec/awestruct/handlers/asciidoc_handler_spec.rb +7 -1
  41. data/spec/awestruct/handlers/layout_handler_spec.rb +7 -7
  42. data/spec/awestruct/handlers/tilt_handler_spec.rb +1 -1
  43. data/spec/awestruct/pipeline_spec.rb +27 -2
  44. data/spec/awestruct/scm/git_spec.rb +4 -4
  45. data/spec/spec_helper.rb +6 -1
  46. data/spec/support/emmet_matchers.rb +1 -1
  47. data/spec/support/nokogiri_matchers.rb +1 -1
  48. data/spec/support/shared_handler_example.rb +66 -71
  49. data/spec/support/test-data/engine-generate-no-errors/_config/site.yml +26 -0
  50. data/spec/support/test-data/engine-generate-no-errors/_ext/pipeline.rb +8 -0
  51. data/spec/support/test-data/engine-generate-no-errors/_layouts/base.html.slim +6 -0
  52. data/spec/support/test-data/engine-generate-no-errors/index.html.slim +5 -0
  53. data/spec/support/test-data/engine-generate-with-errors/_config/site.yml +26 -0
  54. data/spec/support/test-data/engine-generate-with-errors/_ext/pipeline.rb +8 -0
  55. data/spec/support/test-data/engine-generate-with-errors/_layouts/base.html.slim +6 -0
  56. data/spec/support/test-data/engine-generate-with-errors/index.html.slim +6 -0
  57. data/spec/support/test-data/engine-yaml/_config/site.yml +9 -0
  58. data/spec/support/test-data/pipeline/_ext/extensions.rb +26 -0
  59. data/spec/support/test-data/pipeline/_ext/pipeline.rb +12 -0
  60. metadata +229 -72
@@ -1,5 +1,6 @@
1
1
  require 'awestruct/cli/options'
2
2
  require 'awestruct/engine'
3
+ require 'logger'
3
4
 
4
5
  require 'hashery/open_cascade'
5
6
 
@@ -68,6 +69,18 @@ describe Awestruct::Engine do
68
69
  engine.site.intl_name.should == "Intern\u00e9\u0161nl"
69
70
  end
70
71
 
72
+ it "should be able to handle erb in site.yaml" do
73
+ opts = Awestruct::CLI::Options.new
74
+ opts.source_dir = test_data_dir 'engine-yaml'
75
+ config = Awestruct::Config.new( opts )
76
+
77
+ engine = Awestruct::Engine.new(config)
78
+ engine.load_default_site_yaml
79
+ engine.load_user_site_yaml( 'development' )
80
+ engine.site.date.should be_a Date
81
+ engine.site.date.iso8601.should eql '2015-04-13'
82
+ end
83
+
71
84
 
72
85
  it "should be able to load arbitrary _config/*.yml files" do
73
86
  opts = Awestruct::CLI::Options.new
@@ -119,7 +132,103 @@ describe Awestruct::Engine do
119
132
  expect( Compass.configuration.output_style ).to eq :expanded
120
133
  end
121
134
 
122
- it "wip should accept site.compass_line_comments and site.compass_output_style to configure behavior" do
135
+ it "should cleanly generate page output, using threads" do
136
+ output_dir = Dir.mktmpdir 'engine-generate-no-errors'
137
+
138
+ begin
139
+ log = StringIO.new
140
+ $LOG = Logger.new(log)
141
+ $LOG.level = Logger::DEBUG
142
+
143
+ opts = Awestruct::CLI::Options.new
144
+ opts.source_dir = test_data_dir 'engine-generate-no-errors'
145
+ opts.output_dir = output_dir
146
+ config = Awestruct::Config.new( opts )
147
+ engine = Awestruct::Engine.new(config)
148
+ begin
149
+ engine.run('development', 'http://localhost:4242', 'http://localhost:4242')
150
+ rescue SystemExit => e
151
+ e.status.should eql 0
152
+ end
153
+ ensure
154
+ FileUtils.remove_entry_secure output_dir
155
+ end
156
+ end
157
+
158
+ it "should cleanly generate page output, using processes" do
159
+ output_dir = Dir.mktmpdir 'engine-generate-no-errors'
160
+
161
+ begin
162
+ log = StringIO.new
163
+ $LOG = Logger.new(log)
164
+ $LOG.level = Logger::DEBUG
165
+
166
+ opts = Awestruct::CLI::Options.new
167
+ opts.source_dir = test_data_dir 'engine-generate-no-errors'
168
+ opts.output_dir = output_dir
169
+ config = Awestruct::Config.new( opts )
170
+ engine = Awestruct::Engine.new(config)
171
+ engine.site.generation = [:in_processes => 2]
172
+ begin
173
+ engine.run('development', 'http://localhost:4242', 'http://localhost:4242')
174
+ rescue SystemExit => e
175
+ e.status.should eql 0
176
+ end
177
+ ensure
178
+ FileUtils.remove_entry_secure output_dir
179
+ end
180
+ end
181
+
182
+ it "should exit unsuccessfully if generate page output fails, using threads" do
183
+ output_dir = Dir.mktmpdir 'engine-generate-with-errors'
184
+
185
+ begin
186
+ log = StringIO.new
187
+ $LOG = Logger.new(log)
188
+ $LOG.level = Logger::DEBUG
189
+
190
+ opts = Awestruct::CLI::Options.new
191
+ opts.source_dir = test_data_dir 'engine-generate-with-errors'
192
+ opts.output_dir = output_dir
193
+ config = Awestruct::Config.new( opts )
194
+ engine = Awestruct::Engine.new(config)
195
+ begin
196
+ engine.run('development', 'http://localhost:4242', 'http://localhost:4242')
197
+ fail('Expected generation error')
198
+ rescue SystemExit => e
199
+ e.status.should eql Awestruct::ExceptionHelper::EXITCODES[:generation_error]
200
+ end
201
+ ensure
202
+ FileUtils.remove_entry_secure output_dir, true
203
+ end
204
+ end
205
+
206
+ it "should exit unsuccessfully if generate page output fails, using processes" do
207
+ output_dir = Dir.mktmpdir 'engine-generate-with-errors'
208
+
209
+ begin
210
+ log = StringIO.new
211
+ $LOG = Logger.new(log)
212
+ $LOG.level = Logger::DEBUG
213
+
214
+ opts = Awestruct::CLI::Options.new
215
+ opts.source_dir = test_data_dir 'engine-generate-with-errors'
216
+ opts.output_dir = output_dir
217
+ config = Awestruct::Config.new( opts )
218
+ engine = Awestruct::Engine.new(config)
219
+ engine.site.generation = [:in_processes => 2]
220
+ begin
221
+ engine.run('development', 'http://localhost:4242', 'http://localhost:4242')
222
+ fail('Expected generation error')
223
+ rescue SystemExit => e
224
+ e.status.should eql Awestruct::ExceptionHelper::EXITCODES[:generation_error]
225
+ end
226
+ ensure
227
+ FileUtils.remove_entry_secure output_dir, true
228
+ end
229
+ end
230
+
231
+ it "should accept site.compass_line_comments and site.compass_output_style to configure behavior" do
123
232
  opts = Awestruct::CLI::Options.new
124
233
  opts.source_dir = test_data_dir 'engine'
125
234
  config = Awestruct::Config.new( opts )
@@ -0,0 +1,22 @@
1
+ require 'awestruct/extensions/relative'
2
+ require 'ostruct'
3
+
4
+ describe Awestruct::Extensions::Relative do
5
+ let(:dummy_class) { Class.new { extend Awestruct::Extensions::Relative } }
6
+
7
+ context 'with file extension' do
8
+ let (:page) { OpenStruct.new(:output_path => 'site/base/path/file.html') }
9
+
10
+ it "should should not have '/' at the end if there is a file extension" do
11
+ expect(dummy_class.relative('site/base/path/another_file.html', page)).to eql 'another_file.html'
12
+ end
13
+ end
14
+
15
+ context 'without file extension' do
16
+ let (:page) { OpenStruct.new(:output_path => 'site/base/path/file.html') }
17
+
18
+ it "should should not have '/' at the end if there is a file extension" do
19
+ expect(dummy_class.relative('site/base/path/some_directory', page)).to eql 'some_directory/'
20
+ end
21
+ end
22
+ end
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
2
  require 'rspec/matchers.rb'
3
+ require 'tilt'
3
4
 
4
5
  verify = lambda { |output|
5
6
  include EmmetMatchers
6
7
  # clean whitespace to make comparison easier
7
- output.should have_structure('div#preamble>div.sectionbody>div.paragraph>p>strong')
8
+ output.should have_structure('div.paragraph>p>strong')
8
9
  }
9
10
 
10
11
  verify_front_matter = lambda { |output, page|
@@ -121,4 +122,9 @@ describe Awestruct::Handlers::AsciidoctorHandler do
121
122
  end
122
123
 
123
124
  it_should_behave_like 'a handler', theories
125
+
126
+ it 'should be registered as our implementation for tilt' do
127
+ puts ::Tilt.default_mapping['adoc']
128
+ ::Tilt.default_mapping['adoc'].should eql ::Awestruct::Tilt::AsciidoctorTemplate
129
+ end
124
130
  end
@@ -19,21 +19,21 @@ describe Awestruct::Handlers::LayoutHandler do
19
19
  @site = Awestruct::Site.new( @engine, @config )
20
20
  layout_loader = Awestruct::PageLoader.new( @site, :layouts )
21
21
  layout = layout_loader.load_page( File.join( @config.dir, 'haml-layout.html.haml' ) )
22
- layout.class.should == Awestruct::Page
23
- layout.should_not be_nil
22
+ expect(layout.class).to eql Awestruct::Page
23
+ expect(layout).to_not be_nil
24
24
 
25
25
  @site.layouts << layout
26
26
 
27
27
  layout = layout_loader.load_page( File.join( @config.dir, 'haml-layout-two.html.haml' ) )
28
- layout.class.should == Awestruct::Page
29
- layout.should_not be_nil
28
+ expect(layout.class).to eql Awestruct::Page
29
+ expect(layout).to_not be_nil
30
30
 
31
31
  @site.layouts << layout
32
32
  end
33
33
 
34
34
  it "should be able to find layouts by simple name" do
35
35
  layout = @site.layouts.find_matching( 'haml-layout', '.html' )
36
- layout.class.should == Awestruct::Page
36
+ expect(layout.class).to eql Awestruct::Page
37
37
  end
38
38
 
39
39
  it "should apply the layout to its delegate's content" do
@@ -45,7 +45,7 @@ describe Awestruct::Handlers::LayoutHandler do
45
45
  context = page.create_context
46
46
  context.page.layout = 'haml-layout'
47
47
 
48
- @site.layouts.find_matching( 'haml-layout', '.html' ).should_not be_nil
48
+ expect(@site.layouts.find_matching( 'haml-layout', '.html' )).to_not be_nil
49
49
  rendered = layout_handler.rendered_content( context )
50
50
 
51
51
  end
@@ -59,7 +59,7 @@ describe Awestruct::Handlers::LayoutHandler do
59
59
 
60
60
  context = page.create_context
61
61
 
62
- @site.layouts.find_matching('haml-layout', '.html').should_not be_nil
62
+ expect(@site.layouts.find_matching('haml-layout', '.html')).to_not be_nil
63
63
  rendered = layout_handler.rendered_content( context )
64
64
 
65
65
  haml_index = ( rendered =~ %r(This is a haml layout) )
@@ -115,7 +115,7 @@ describe Awestruct::Handlers::TiltHandler do
115
115
  $LOG.level = Logger::DEBUG
116
116
  @site.dir = Pathname.new( test_data_dir 'handlers' )
117
117
  path = handler_file( "hello.bogus" )
118
- expect(Awestruct::Handlers::TiltMatcher.new().match(path)).to be_false
118
+ expect(Awestruct::Handlers::TiltMatcher.new().match(path)).to be_falsey
119
119
  expect(log.string).to include('Copying')
120
120
 
121
121
  # we don't even want to process a file if we cannot load its Tilt template
@@ -1,8 +1,33 @@
1
+ require 'awestruct/engine'
2
+ require 'awestruct/pipeline'
1
3
 
2
- require 'awestruct/pipeline'
4
+ describe Awestruct::Pipeline do
5
+ before do
6
+ dir = Pathname.new( test_data_dir 'pipeline' )
7
+ opts = Awestruct::CLI::Options.new
8
+ opts.source_dir = dir
3
9
 
10
+ @site = Hashery::OpenCascade[ { :encoding=>false, :dir=>dir, :config=>Awestruct::Config.new( opts ), :pages => [] } ]
11
+ @engine = Awestruct::Engine.new(@site.config)
4
12
 
5
- describe Awestruct::Pipeline do
13
+ log = StringIO.new
14
+ $LOG = Logger.new(log)
15
+ $LOG.level = Logger::DEBUG
16
+
17
+ @engine.load_pipeline
18
+ @pipeline = @engine.pipeline
19
+ end
20
+
21
+ context "after pipeline is loaded" do
22
+ specify "should have all specified extension points" do
23
+ expect(@pipeline.before_all_extensions.size).to eql 1
24
+ expect(@pipeline.extensions.size).to eql 1
25
+ expect(@pipeline.after_all_extensions.size).to eql 1
26
+ expect(@pipeline.helpers.size).to eql 1
27
+ expect(@pipeline.transformers.size).to eql 1
28
+ expect(@pipeline.after_generation_extensions.size).to eql 1
29
+ end
30
+ end
6
31
 
7
32
  it "should provide a way to find a matching handler chain for a given path" do
8
33
  pipeline = Awestruct::Pipeline.new
@@ -8,22 +8,22 @@ describe Awestruct::Scm::Git do
8
8
  context "#uncommitted_changes?('.')" do
9
9
  specify 'when there are no changes, returns false' do
10
10
  Open3.should_receive(:popen3).with('git status --porcelain', :chdir => '.').and_yield(nil, StringIO.new(''), StringIO.new(''), nil)
11
- expect(subject.uncommitted_changes? '.').to be_false
11
+ expect(subject.uncommitted_changes? '.').to be_falsey
12
12
  end
13
13
 
14
14
  specify 'when there are changes to untracked files, returns true' do
15
15
  Open3.should_receive(:popen3).with('git status --porcelain', :chdir => '.').and_yield(nil, StringIO.new('?? test.rb'), StringIO.new(''), nil)
16
- expect(subject.uncommitted_changes? '.').to be_true
16
+ expect(subject.uncommitted_changes? '.').to be_truthy
17
17
  end
18
18
 
19
19
  specify 'when there are modifications, returns true' do
20
20
  Open3.should_receive(:popen3).with('git status --porcelain', :chdir => '.').and_yield(nil, StringIO.new(' M test.rb'), StringIO.new(''), nil)
21
- expect(subject.uncommitted_changes? '.').to be_true
21
+ expect(subject.uncommitted_changes? '.').to be_truthy
22
22
  end
23
23
 
24
24
  specify 'when there are additions and modifications, returns true' do
25
25
  Open3.should_receive(:popen3).with('git status --porcelain', :chdir => '.').and_yield(nil, StringIO.new('AM test.rb'), StringIO.new(''), nil)
26
- expect(subject.uncommitted_changes? '.').to be_true
26
+ expect(subject.uncommitted_changes? '.').to be_truthy
27
27
  end
28
28
  end
29
29
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,13 @@
1
1
  require 'rubygems'
2
2
  require 'rspec'
3
+ require 'simplecov'
4
+
5
+ SimpleCov.start
3
6
 
4
7
  Dir["./spec/support/**/*.rb"].each {|f| require f}
5
8
 
6
9
  RSpec.configure do |config|
7
- config.mock_framework = :rspec
10
+ config.mock_with :rspec do |mocks|
11
+ mocks.verify_doubled_constant_names = true
12
+ end
8
13
  end
@@ -40,7 +40,7 @@ module EmmetMatchers
40
40
  @emmet_string == @test_string
41
41
  end
42
42
 
43
- def failure_message_for_should
43
+ def failure_message
44
44
  "expected to match #{@test_string} against #{@emmet_string}, but they are not equal"
45
45
  end
46
46
  end
@@ -10,7 +10,7 @@ module NokogiriMatchers
10
10
  !@document.search(@tag).nil?
11
11
  end
12
12
 
13
- def failure_message_for_should
13
+ def failure_message
14
14
  "expected to find #{@tag} within #{@document.to_s} but was not found"
15
15
  end
16
16
  end
@@ -7,103 +7,98 @@ require 'hashery'
7
7
  REQUIRED_VARIABLES = [:page, :simple_name, :syntax, :extension]
8
8
  ALL_VARIABLES = REQUIRED_VARIABLES + [:format, :matcher, :unless, :site_overrides]
9
9
 
10
- shared_examples 'a handler' do |theories|
10
+ shared_examples_for 'a handler' do |theories|
11
11
 
12
12
  def handler_file(path)
13
13
  "#{@site.config.dir}/#{path}"
14
14
  end
15
15
 
16
16
  def create_context
17
- Hashery::OpenCascade[{ :site => @site }]
17
+ Hashery::OpenCascade[{:site => @site}]
18
18
  end
19
19
 
20
- describe Awestruct::Handlers do
20
+ before :each do
21
+ @engine = init
22
+ @site = @engine.site
23
+ end
21
24
 
22
- before :each do
23
- @engine = init
24
- @site = @engine.site
25
- end
25
+ def init
26
+ opts = Awestruct::CLI::Options.new
27
+ opts.source_dir = test_data_dir 'handlers'
28
+ config = Awestruct::Config.new(opts)
26
29
 
27
- def init
28
- opts = Awestruct::CLI::Options.new
29
- opts.source_dir = test_data_dir 'handlers'
30
- config = Awestruct::Config.new( opts )
30
+ engine = Awestruct::Engine.new(config)
31
+ engine.load_default_site_yaml
32
+ engine
33
+ end
31
34
 
32
- engine = Awestruct::Engine.new( config )
33
- engine.load_default_site_yaml
34
- engine
35
- end
35
+ def create_handler(page)
36
+ @engine.load_page File.join(@engine.config.dir, page)
37
+ end
36
38
 
37
- def create_handler(page)
38
- @engine.load_page File.join(@engine.config.dir, page)
39
- end
39
+ def merge_site_overrides(overrides)
40
+ @site.update overrides
41
+ end
40
42
 
41
- def merge_site_overrides(overrides)
42
- @site.update overrides
43
- end
43
+ theories.each do |theory|
44
44
 
45
- theories.each do |theory|
45
+ # Validate input
46
+ missing = []
47
+ REQUIRED_VARIABLES.each do |key|
48
+ missing << key unless theory.has_key? key
49
+ end
50
+ raise "Missing required variable(s) '#{missing.join(', ')}'. Requires all '#{REQUIRED_VARIABLES.join(', ')}'" if missing.size > 0
46
51
 
47
- # Validate input
48
- missing = []
49
- REQUIRED_VARIABLES.each do |key|
50
- missing << key unless theory.has_key? key
51
- end
52
- raise "Missing required variable(s) '#{missing.join(', ')}'. Requires all '#{REQUIRED_VARIABLES.join(', ')}'" if missing.size > 0
52
+ unknown = theory.keys-ALL_VARIABLES
53
+ raise "Unknown theory variable(s) '#{unknown.join(', ')}'. Supported variables '#{ALL_VARIABLES.join(', ')}'" if unknown.size > 0
53
54
 
54
- unknown = theory.keys-ALL_VARIABLES
55
- raise "Unknown theory variable(s) '#{unknown.join(', ')}'. Supported variables '#{ALL_VARIABLES.join(', ')}'" if unknown.size > 0
55
+ # Prove the theory
56
56
 
57
- # Prove the theory
57
+ it "should provide simple name '#{theory[:simple_name]}' for page '#{theory[:page]}'" do
58
+ handler = create_handler theory[:page]
59
+ expect(handler.simple_name).to eql theory[:simple_name]
60
+ end
58
61
 
59
- it "should provide simple name '#{theory[:simple_name]}' for page '#{theory[:page]}'" do
60
- handler = create_handler theory[:page]
61
- handler.simple_name.should == theory[:simple_name]
62
- end
62
+ it "should provide content syntax '#{theory[:syntax]}' for page '#{theory[:page]}'" do
63
+ handler = create_handler theory[:page]
64
+ expect(handler.content_syntax).to eql theory[:syntax]
65
+ end
63
66
 
64
- it "should provide content syntax '#{theory[:syntax]}' for page '#{theory[:page]}'" do
65
- handler = create_handler theory[:page]
66
- handler.content_syntax.should == theory[:syntax]
67
- end
67
+ it "should provide output extension '#{theory[:extension]}' for page '#{theory[:page]}'" do
68
+ handler = create_handler theory[:page]
69
+ expect(handler.output_extension).to eql theory[:extension]
70
+ end
68
71
 
69
- it "should provide output extension '#{theory[:extension]}' for page '#{theory[:page]}'" do
70
- handler = create_handler theory[:page]
71
- handler.output_extension.should == theory[:extension]
72
+ unless theory[:format].nil?
73
+ it "should set the engine format '#{theory[:format]}' for page '#{theory[:page]}'" do
74
+ page = create_handler theory[:page]
75
+ handler = page.handler
76
+ begin
77
+ handler = handler.delegate
78
+ end while handler.delegate and !handler.kind_of?(Awestruct::Handlers::TiltHandler)
79
+ expect(handler).to_not be_nil
80
+ expect(handler.options[:format]).to eql theory[:format]
72
81
  end
82
+ end
73
83
 
74
- unless theory[:format].nil?
75
- it "should set the engine format '#{theory[:format]}' for page '#{theory[:page]}'" do
76
- page = create_handler theory[:page]
77
- handler = page.handler
78
- begin
79
- handler = handler.delegate
80
- end while handler.delegate and !handler.kind_of?(Awestruct::Handlers::TiltHandler)
81
- handler.should_not be_nil
82
- handler.options[:format].should == theory[:format]
83
- end
84
- end
84
+ unless theory[:matcher].nil?
85
85
 
86
- unless theory[:matcher].nil?
87
-
88
- it "should render page '#{theory[:page]}'" do
89
- if theory[:unless].nil? or !theory[:unless][:exp].call()
90
- if theory.has_key? :site_overrides
91
- merge_site_overrides(theory[:site_overrides])
92
- end
93
- handler = create_handler theory[:page]
94
- handler.update(additional_config_page) { |k, oldval, newval| oldval } if respond_to?('additional_config_page')
95
- output = handler.rendered_content(handler.create_context)
96
- output.should_not be_nil
97
-
98
- theory[:matcher].call(output, handler) if theory[:matcher].arity == 2
99
- theory[:matcher].call(output) if theory[:matcher].arity == 1
100
- else
101
- pending theory[:unless][:message]
86
+ it "should render page '#{theory[:page]}'" do
87
+ if theory[:unless].nil? or !theory[:unless][:exp].call()
88
+ if theory.has_key? :site_overrides
89
+ merge_site_overrides(theory[:site_overrides])
102
90
  end
91
+ handler = create_handler theory[:page]
92
+ handler.update(additional_config_page) { |k, oldval, newval| oldval } if respond_to?('additional_config_page')
93
+ output = handler.rendered_content(handler.create_context)
94
+ expect(output).to_not be_nil
95
+
96
+ theory[:matcher].call(output, handler) if theory[:matcher].arity == 2
97
+ theory[:matcher].call(output) if theory[:matcher].arity == 1
98
+ else
99
+ pending theory[:unless][:message]
103
100
  end
104
-
105
101
  end
106
-
107
102
  end
108
103
  end
109
104
  end