awestruct 0.5.3 → 0.5.4.beta1

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.
Files changed (48) hide show
  1. data/lib/awestruct/cli/init.rb +35 -34
  2. data/lib/awestruct/cli/invoker.rb +4 -4
  3. data/lib/awestruct/cli/manifest.rb +57 -55
  4. data/lib/awestruct/cli/options.rb +11 -0
  5. data/lib/awestruct/config.rb +17 -14
  6. data/lib/awestruct/deploy/base_deploy.rb +13 -7
  7. data/lib/awestruct/deploy/github_pages_deploy.rb +14 -9
  8. data/lib/awestruct/engine.rb +17 -12
  9. data/lib/awestruct/extensions/intense_debate.rb +1 -1
  10. data/lib/awestruct/extensions/minify.rb +1 -1
  11. data/lib/awestruct/extensions/pipeline.rb +2 -2
  12. data/lib/awestruct/extensions/relative.rb +7 -1
  13. data/lib/awestruct/frameworks/base_Gemfile +5 -1
  14. data/lib/awestruct/frameworks/bootstrap/base_layout.html.haml +2 -2
  15. data/lib/awestruct/handler_chains.rb +2 -2
  16. data/lib/awestruct/handlers/asciidoctor_handler.rb +22 -4
  17. data/lib/awestruct/handlers/base_tilt_handler.rb +34 -10
  18. data/lib/awestruct/handlers/file_handler.rb +8 -12
  19. data/lib/awestruct/handlers/front_matter_handler.rb +1 -1
  20. data/lib/awestruct/handlers/interpolation_handler.rb +1 -6
  21. data/lib/awestruct/handlers/tilt_handler.rb +1 -7
  22. data/lib/awestruct/handlers/verbatim_file_handler.rb +12 -0
  23. data/lib/awestruct/scm/git.rb +14 -0
  24. data/lib/awestruct/version.rb +1 -1
  25. data/man/awestruct.1 +14 -3
  26. data/spec/asciidoc_handler_spec.rb +43 -40
  27. data/spec/awestruct/scm/git_spec.rb +29 -0
  28. data/spec/config_spec.rb +8 -2
  29. data/spec/engine_spec.rb +31 -9
  30. data/spec/erb_handler_spec.rb +33 -31
  31. data/spec/front_matter_handler_spec.rb +17 -6
  32. data/spec/github_pages_deploy_spec.rb +13 -7
  33. data/spec/haml_handler_spec.rb +62 -59
  34. data/spec/interpolation_handler_spec.rb +4 -8
  35. data/spec/javascript_handler_spec.rb +16 -13
  36. data/spec/minify_spec.rb +3 -1
  37. data/spec/mustache_handler_spec.rb +11 -7
  38. data/spec/options_spec.rb +20 -11
  39. data/spec/page_loader_spec.rb +3 -1
  40. data/spec/page_loader_spec_for_layouts.rb +3 -1
  41. data/spec/redirect_handler_spec.rb +21 -17
  42. data/spec/slim_handler_spec.rb +51 -49
  43. data/spec/support/shared_handler_example.rb +12 -8
  44. data/spec/test-data/front-matter-file-utf8.txt +5 -0
  45. data/spec/test-data/handlers/haml-error.html.haml +4 -0
  46. data/spec/test-data/handlers/hello.bogus +1 -0
  47. data/spec/tilt_handler_spec.rb +70 -3
  48. metadata +16 -25
@@ -0,0 +1,14 @@
1
+ require 'open3'
2
+
3
+ module Awestruct
4
+ module Scm
5
+ class Git
6
+ def uncommitted_changes?(source_dir)
7
+ result = Open3.popen3('git status --porcelain', :chdir => source_dir) do |stdin, stdout, stderr, wait_thr|
8
+ stdout.read.chomp =~ /^\s*([AM?]+)/
9
+ end
10
+ !result.nil?
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Awestruct
3
- VERSION='0.5.3'
3
+ VERSION='0.5.4.beta1'
4
4
  end
@@ -1,13 +1,13 @@
1
1
  '\" t
2
2
  .\" Title: awestruct
3
3
  .\" Author: [see the "AUTHORS" section]
4
- .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
5
- .\" Date: 03/29/2013
4
+ .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
5
+ .\" Date: 07/30/2013
6
6
  .\" Manual: \ \&
7
7
  .\" Source: \ \&
8
8
  .\" Language: English
9
9
  .\"
10
- .TH "AWESTRUCT" "1" "03/29/2013" "\ \&" "\ \&"
10
+ .TH "AWESTRUCT" "1" "07/30/2013" "\ \&" "\ \&"
11
11
  .\" -----------------------------------------------------------------
12
12
  .\" * Define some portability stuff
13
13
  .\" -----------------------------------------------------------------
@@ -110,6 +110,17 @@ Serve the generated site from an embedded server\&.
110
110
  .RS 4
111
111
  Set the site\&.base_url property\&.
112
112
  .RE
113
+ .PP
114
+ \fB\-\-output\-dir\fR=\fIDIR\fR
115
+ .RS 4
116
+ The location of the output directory\&. Defaults to
117
+ \fI\&./_site\fR\&. Must either be absolute or relative to the current directory\&.
118
+ .RE
119
+ .PP
120
+ \fB\-\-source\-dir\fR=\fIDIR\fR
121
+ .RS 4
122
+ The location of the director containing (or will contain) site sources\&. Defaults to the current directory\&. Must either be absolute or relative to the current directory\&.
123
+ .RE
113
124
  .SS "Site Deployment"
114
125
  .PP
115
126
  \fB\-\-deploy\fR
@@ -4,7 +4,7 @@ require 'rspec/matchers.rb'
4
4
  verify = lambda { |output|
5
5
  include EmmetMatchers
6
6
  # clean whitespace to make comparison easier
7
- output.should have_structure("div#preamble>div.sectionbody>div.paragraph>p>strong")
7
+ output.should have_structure('div#preamble>div.sectionbody>div.paragraph>p>strong')
8
8
  }
9
9
 
10
10
  verify_front_matter = lambda { |output, page|
@@ -27,46 +27,49 @@ verify_headers = lambda { |output, page|
27
27
  }
28
28
 
29
29
  theories =
30
- [
31
- {
32
- :page => "asciidoc-page.ad",
33
- :simple_name => "asciidoc-page",
34
- :syntax => :asciidoc,
35
- :extension => '.html',
36
- :matcher => verify
37
- },
38
- {
39
- :page => "asciidoc-page.adoc",
40
- :simple_name => "asciidoc-page",
41
- :syntax => :asciidoc,
42
- :extension => '.html',
43
- :matcher => verify
44
- },
45
- {
46
- :page => "asciidoc-page.asciidoc",
47
- :simple_name => "asciidoc-page",
48
- :syntax => :asciidoc,
49
- :extension => '.html',
50
- :matcher => verify
51
- },
52
- {
53
- :page => "asciidoctor_with_front_matter.ad",
54
- :simple_name => "asciidoctor_with_front_matter",
55
- :syntax => :asciidoc,
56
- :extension => '.html' ,
57
- :matcher => verify_front_matter
58
- },
59
- {
60
- :page => "asciidoctor_with_headers.ad",
61
- :simple_name => "asciidoctor_with_headers",
62
- :syntax => :asciidoc,
63
- :extension => '.html',
64
- :matcher => verify_headers
65
- }
66
- ]
30
+ [
31
+ {
32
+ :page => 'asciidoc-page.ad',
33
+ :simple_name => 'asciidoc-page',
34
+ :syntax => :asciidoc,
35
+ :extension => '.html',
36
+ :matcher => verify
37
+ },
38
+ {
39
+ :page => 'asciidoc-page.adoc',
40
+ :simple_name => 'asciidoc-page',
41
+ :syntax => :asciidoc,
42
+ :extension => '.html',
43
+ :matcher => verify
44
+ },
45
+ {
46
+ :page => 'asciidoc-page.asciidoc',
47
+ :simple_name => 'asciidoc-page',
48
+ :syntax => :asciidoc,
49
+ :extension => '.html',
50
+ :matcher => verify
51
+ },
52
+ {
53
+ :page => 'asciidoctor_with_front_matter.ad',
54
+ :simple_name => 'asciidoctor_with_front_matter',
55
+ :syntax => :asciidoc,
56
+ :extension => '.html',
57
+ :matcher => verify_front_matter
58
+ },
59
+ {
60
+ :page => 'asciidoctor_with_headers.ad',
61
+ :simple_name => 'asciidoctor_with_headers',
62
+ :syntax => :asciidoc,
63
+ :extension => '.html',
64
+ :matcher => verify_headers
65
+ }
66
+ ]
67
+
67
68
 
68
69
  describe Awestruct::Handlers::AsciidoctorHandler do
69
- let(:additional_config_page) { {:name => 'Awestruct', :test => 10, :layout => 'empty-layout'} }
70
- it_should_behave_like "a handler", theories
70
+ def additional_config_page
71
+ { :name => 'Awestruct', :test => 10, :layout => 'empty-layout' }
72
+ end
71
73
 
74
+ it_should_behave_like 'a handler', theories
72
75
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'awestruct/scm/git'
3
+
4
+ describe Awestruct::Scm::Git do
5
+ specify 'should respond_to :uncommitted_changes?' do
6
+ expect(subject).to respond_to :uncommitted_changes?
7
+ end
8
+ context "#uncommitted_changes?('.')" do
9
+ specify 'when there are no changes, returns false' do
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
12
+ end
13
+
14
+ specify 'when there are changes to untracked files, returns true' do
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
17
+ end
18
+
19
+ specify 'when there are modifications, returns true' do
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
22
+ end
23
+
24
+ specify 'when there are additions and modifications, returns true' do
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
27
+ end
28
+ end
29
+ end
@@ -1,20 +1,26 @@
1
1
  require 'awestruct/config'
2
2
  require 'spec_helper'
3
3
  require 'awestruct/config'
4
+ require 'awestruct/cli/options'
4
5
 
5
6
  describe Awestruct::Config do
6
7
 
7
8
  it "should accept a list of files in .awestruct_ignore to ignore on site generation" do
8
9
  site_dir = File.join(File.dirname(__FILE__), 'test-data')
9
- config = Awestruct::Config.new(site_dir)
10
+ opts = Awestruct::CLI::Options.new
11
+ opts.source_dir = site_dir
12
+
13
+ config = Awestruct::Config.new(opts)
10
14
  config.ignore.should == ["Rakefile", "Gemfile"]
11
15
  end
12
16
 
13
17
  it "should handle an empty .awestruct_ignore file without barfing" do
14
18
  site_dir = File.join(File.dirname(__FILE__), 'test-data')
15
19
  config_file = File.join(site_dir, ".awestruct_ignore")
20
+ opts = Awestruct::CLI::Options.new
21
+ opts.source_dir = site_dir
16
22
  File.open(config_file, "w")
17
- config = Awestruct::Config.new(site_dir)
23
+ config = Awestruct::Config.new(opts)
18
24
  config.ignore.should == []
19
25
  File.open(config_file, "w") { |f| f.write("Rakefile\nGemfile\n") }
20
26
  end
@@ -1,4 +1,4 @@
1
-
1
+ require 'awestruct/cli/options'
2
2
  require 'awestruct/engine'
3
3
 
4
4
  require 'hashery/open_cascade'
@@ -6,7 +6,9 @@ require 'hashery/open_cascade'
6
6
  describe Awestruct::Engine do
7
7
 
8
8
  it "should be able to load default-site.yml" do
9
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
9
+ opts = Awestruct::CLI::Options.new
10
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
11
+ config = Awestruct::Config.new( opts )
10
12
 
11
13
  engine = Awestruct::Engine.new(config)
12
14
  engine.load_default_site_yaml
@@ -17,7 +19,9 @@ describe Awestruct::Engine do
17
19
  end
18
20
 
19
21
  it "should be able to override default with site" do
20
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
22
+ opts = Awestruct::CLI::Options.new
23
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
24
+ config = Awestruct::Config.new( opts )
21
25
 
22
26
  engine = Awestruct::Engine.new(config)
23
27
  engine.load_default_site_yaml
@@ -30,7 +34,9 @@ describe Awestruct::Engine do
30
34
  end
31
35
 
32
36
  it "should be able to load site.yml with the correct profile" do
33
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
37
+ opts = Awestruct::CLI::Options.new
38
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
39
+ config = Awestruct::Config.new( opts )
34
40
 
35
41
  engine = Awestruct::Engine.new(config)
36
42
  engine.load_default_site_yaml
@@ -48,7 +54,9 @@ describe Awestruct::Engine do
48
54
  end
49
55
 
50
56
  it "should be able to load arbitrary _config/*.yml files" do
51
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
57
+ opts = Awestruct::CLI::Options.new
58
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
59
+ config = Awestruct::Config.new( opts )
52
60
 
53
61
  engine = Awestruct::Engine.new(config)
54
62
  engine.load_yaml( File.join( config.dir, '_config/arbitrary.yml' ) )
@@ -56,7 +64,9 @@ describe Awestruct::Engine do
56
64
  end
57
65
 
58
66
  it "should be able to load all arbitary yamls" do
59
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
67
+ opts = Awestruct::CLI::Options.new
68
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
69
+ config = Awestruct::Config.new( opts )
60
70
 
61
71
  engine = Awestruct::Engine.new(config)
62
72
  engine.load_yamls
@@ -67,7 +77,9 @@ describe Awestruct::Engine do
67
77
 
68
78
  it "should exclude line comments and minify in compass by default in production mode" do
69
79
  compass = compass_config
70
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
80
+ opts = Awestruct::CLI::Options.new
81
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
82
+ config = Awestruct::Config.new( opts )
71
83
  engine = Awestruct::Engine.new(config)
72
84
  engine.load_site_yaml( 'production' )
73
85
  Compass.stub(:configuration).and_return(compass)
@@ -75,6 +87,8 @@ describe Awestruct::Engine do
75
87
  compass.stub(:line_comments).and_return(false)
76
88
  compass.should_receive(:output_style=).with(:compressed)
77
89
  compass.stub(:output_style).and_return(:compressed)
90
+ compass.stub(:http_path=).with(nil)
91
+ compass.stub(:relative_assets=).with(false)
78
92
  engine.configure_compass
79
93
  engine.site.sass.line_numbers.should == false
80
94
  engine.site.sass.style.should == :compressed
@@ -84,7 +98,9 @@ describe Awestruct::Engine do
84
98
 
85
99
  it "should include line comments in compass by default in development mode" do
86
100
  compass = compass_config
87
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
101
+ opts = Awestruct::CLI::Options.new
102
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
103
+ config = Awestruct::Config.new( opts )
88
104
  engine = Awestruct::Engine.new(config)
89
105
  engine.load_site_yaml( 'development' )
90
106
  Compass.stub(:configuration).and_return(compass)
@@ -92,6 +108,8 @@ describe Awestruct::Engine do
92
108
  compass.stub(:line_comments).and_return(true)
93
109
  compass.should_receive(:output_style=).with(:expanded)
94
110
  compass.stub(:output_style).and_return(:expanded)
111
+ compass.stub(:http_path=).with(nil)
112
+ compass.stub(:relative_assets=).with(false)
95
113
  engine.configure_compass
96
114
  engine.site.sass.line_numbers.should == true
97
115
  engine.site.sass.style.should == :expanded
@@ -101,7 +119,9 @@ describe Awestruct::Engine do
101
119
 
102
120
  it "wip should accept site.compass_line_comments and site.compass_output_style to configure behavior" do
103
121
  compass = compass_config
104
- config = Awestruct::Config.new( File.dirname(__FILE__) + '/test-data/engine' )
122
+ opts = Awestruct::CLI::Options.new
123
+ opts.source_dir = File.dirname(__FILE__) + '/test-data/engine'
124
+ config = Awestruct::Config.new( opts )
105
125
  engine = Awestruct::Engine.new(config)
106
126
  engine.load_site_yaml( 'staging' )
107
127
  Compass.stub(:configuration).and_return(compass)
@@ -109,6 +129,8 @@ describe Awestruct::Engine do
109
129
  compass.stub(:line_comments).and_return(false)
110
130
  compass.should_receive(:output_style=).with(:compact)
111
131
  compass.stub(:output_style).and_return(:compact)
132
+ compass.stub(:http_path=).with(nil)
133
+ compass.stub(:relative_assets=).with(false)
112
134
  engine.configure_compass
113
135
  engine.site.sass.line_numbers.should == false
114
136
  engine.site.sass.style.should == :compact
@@ -3,17 +3,17 @@ require 'spec_helper'
3
3
  require 'rbconfig'
4
4
 
5
5
  verify = lambda { |output|
6
- output.should =~ %r(<h1>This is an ERB page</h1>)
7
- output.should =~ %r(<h2>The fruit of the day is: apples</h2>)
8
- output.should =~ %r(<h3>bacon</h3>) ## interpolated
6
+ output.should =~ %r(<h1>This is an ERB page</h1>)
7
+ output.should =~ %r(<h2>The fruit of the day is: apples</h2>)
8
+ output.should =~ %r(<h3>bacon</h3>) ## interpolated
9
9
  }
10
10
 
11
11
  verify_with_xml = lambda { |output|
12
- output.should =~ %r(<h>bacon</h>) ## interpolated
12
+ output.should =~ %r(<h>bacon</h>) ## interpolated
13
13
  }
14
14
 
15
15
  verify_with_utf8 = lambda { |output|
16
- if(RbConfig::CONFIG['target_os'] !~ /mswin|mingw/)
16
+ if RbConfig::CONFIG['target_os'] !~ /mswin|mingw/
17
17
  output.should == "Besøg fra Danmark\n"
18
18
  else
19
19
  output.should == "\r\nBesøg fra Danmark\r\n"
@@ -21,32 +21,34 @@ verify_with_utf8 = lambda { |output|
21
21
  }
22
22
 
23
23
  theories =
24
- [
25
- {
26
- :page => "erb-page.html.erb",
27
- :simple_name => "erb-page",
28
- :syntax => :erb,
29
- :extension => '.html',
30
- :matcher => verify
31
- },
32
- {
33
- :page => "erb-page.xml.erb",
34
- :simple_name => "erb-page",
35
- :syntax => :erb,
36
- :extension => '.xml',
37
- :matcher => verify_with_xml
38
- },
39
- {
40
- :page => "erb-utf-page.html.erb",
41
- :simple_name => "erb-utf-page",
42
- :syntax => :erb,
43
- :extension => '.html',
44
- :matcher => verify_with_utf8
45
- }
46
- ]
24
+ [
25
+ {
26
+ :page => 'erb-page.html.erb',
27
+ :simple_name => 'erb-page',
28
+ :syntax => :erb,
29
+ :extension => '.html',
30
+ :matcher => verify
31
+ },
32
+ {
33
+ :page => 'erb-page.xml.erb',
34
+ :simple_name => 'erb-page',
35
+ :syntax => :erb,
36
+ :extension => '.xml',
37
+ :matcher => verify_with_xml
38
+ },
39
+ {
40
+ :page => 'erb-utf-page.html.erb',
41
+ :simple_name => 'erb-utf-page',
42
+ :syntax => :erb,
43
+ :extension => '.html',
44
+ :matcher => verify_with_utf8
45
+ }
46
+ ]
47
47
 
48
- describe Awestruct::Handlers::TiltHandler.to_s + "-Erb" do
49
- let(:additional_config) { {:crunchy => 'bacon'} }
50
- it_should_behave_like "a handler", theories
48
+ describe Awestruct::Handlers::TiltHandler.to_s + '-Erb' do
49
+ def additional_config
50
+ { :crunchy => 'bacon' }
51
+ end
52
+ it_should_behave_like 'a handler', theories
51
53
 
52
54
  end
@@ -1,4 +1,7 @@
1
+ # -*- coding: UTF-8 -*-
2
+
1
3
  require 'fileutils'
4
+ require 'spec_helper'
2
5
 
3
6
  require 'awestruct/handlers/file_handler'
4
7
  require 'awestruct/handlers/front_matter_handler'
@@ -18,26 +21,34 @@ describe Awestruct::Handlers::FrontMatterHandler do
18
21
  Awestruct::Handlers::FileHandler.new( @site, filename )
19
22
  end
20
23
 
21
- it "should be able to split front-matter from content" do
22
- handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input( "front-matter-file.txt" ) )
24
+ it 'should be able to split front-matter from content' do
25
+ handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input('front-matter-file.txt') )
23
26
  handler.front_matter.should_not be_nil
24
27
  handler.front_matter['foo'].should == 'bar'
25
28
  handler.raw_content.strip.should == 'This is some content'
26
29
  end
27
30
 
28
- it "should be able to split front-matter from content for files without actual front-matter" do
29
- handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input( "front-matter-file-no-front.txt" ) )
31
+ it 'should be able to split front-matter from content for files without actual front-matter' do
32
+ handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input('front-matter-file-no-front.txt') )
30
33
  handler.front_matter.should_not be_nil
31
34
  handler.front_matter.should be_empty
32
35
  handler.raw_content.strip.should == 'This is some content'
33
36
  end
34
37
 
35
- it "should be able to split front-matter from content for files without actual content" do
36
- handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input( "front-matter-file-no-content.txt" ) )
38
+ it 'should be able to split front-matter from content for files without actual content' do
39
+ handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input('front-matter-file-no-content.txt') )
37
40
  handler.front_matter.should_not be_nil
38
41
  handler.front_matter['foo'].should == 'bar'
39
42
  handler.raw_content.should be_nil
40
43
  end
41
44
 
45
+ it 'should be able to handle UTF-8 characters' do
46
+ handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input('front-matter-file-utf8.txt') )
47
+ handler.front_matter.should_not be_nil
48
+ handler.front_matter['foo'].should == 'bar'
49
+ handler.front_matter['utf8-content'].should == 'Μεα ιυδισο μενθιτυμ ετ. Ιυς ευ ποπυλω'
50
+ handler.raw_content.should_not be_nil
51
+ end
52
+
42
53
  end
43
54