awestruct 0.5.4.beta1 → 0.5.4.rc

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 (58) hide show
  1. data/lib/awestruct/cli/deploy.rb +2 -2
  2. data/lib/awestruct/cli/generate.rb +3 -3
  3. data/lib/awestruct/cli/init.rb +1 -1
  4. data/lib/awestruct/cli/invoker.rb +11 -10
  5. data/lib/awestruct/cli/manifest.rb +1 -1
  6. data/lib/awestruct/cli/options.rb +16 -6
  7. data/lib/awestruct/cli/server.rb +4 -1
  8. data/lib/awestruct/compatibility.rb +5 -0
  9. data/lib/awestruct/config/default-site.yml +7 -0
  10. data/lib/awestruct/deploy/base_deploy.rb +74 -7
  11. data/lib/awestruct/deploy/github_pages_deploy.rb +20 -7
  12. data/lib/awestruct/deploy/rsync_deploy.rb +1 -1
  13. data/lib/awestruct/deploy/s3_deploy.rb +1 -1
  14. data/lib/awestruct/engine.rb +34 -30
  15. data/lib/awestruct/frameworks/base_Rakefile +22 -3
  16. data/lib/awestruct/handlers/asciidoctor_handler.rb +38 -10
  17. data/lib/awestruct/handlers/front_matter_handler.rb +18 -13
  18. data/lib/awestruct/handlers/interpolation_handler.rb +1 -1
  19. data/lib/awestruct/handlers/template/asciidoc.rb +22 -1
  20. data/lib/awestruct/page_loader.rb +1 -1
  21. data/lib/awestruct/version.rb +1 -1
  22. data/spec/asciidoc_handler_spec.rb +51 -1
  23. data/spec/awestruct/scm/git_spec.rb +2 -2
  24. data/spec/coffeescript_handler_spec.rb +1 -3
  25. data/spec/deploy_spec.rb +66 -1
  26. data/spec/engine_spec.rb +10 -6
  27. data/spec/erb_handler_spec.rb +4 -6
  28. data/spec/front_matter_handler_spec.rb +14 -0
  29. data/spec/github_pages_deploy_spec.rb +14 -9
  30. data/spec/haml_handler_spec.rb +2 -5
  31. data/spec/invoker_spec.rb +1 -0
  32. data/spec/javascript_handler_spec.rb +3 -6
  33. data/spec/markdown_handler_spec.rb +0 -2
  34. data/spec/mustache_handler_spec.rb +5 -8
  35. data/spec/orgmode_handler_spec.rb +1 -3
  36. data/spec/page_loader_spec.rb +18 -0
  37. data/spec/redirect_handler_spec.rb +2 -6
  38. data/spec/restructuredtext_handler_spec.rb +1 -3
  39. data/spec/sass_handler_spec.rb +1 -3
  40. data/spec/scss_handler_spec.rb +1 -3
  41. data/spec/slim_handler_spec.rb +2 -5
  42. data/spec/support/shared_handler_example.rb +18 -10
  43. data/spec/test-data/engine/_config/site.yml +2 -0
  44. data/spec/test-data/front-matter-file-no-content.txt +1 -0
  45. data/spec/test-data/front-matter-looking.txt +9 -0
  46. data/spec/test-data/front-matter-middle.txt +12 -0
  47. data/spec/test-data/gzip/no.html.gz +0 -0
  48. data/spec/test-data/gzip/no.txt +0 -0
  49. data/spec/test-data/gzip/subdir/yes.css +3 -0
  50. data/spec/test-data/gzip/yes.html +10 -0
  51. data/spec/test-data/gzip/yes.js +1 -0
  52. data/spec/test-data/handlers/asciidoc_with_attributes.ad +3 -0
  53. data/spec/test-data/handlers/asciidoc_with_interpolation.ad +4 -0
  54. data/spec/test-data/handlers/asciidoc_without_interpolation.ad +3 -0
  55. data/spec/test-data/handlers/asciidoctor_with_headers.ad +7 -4
  56. data/spec/test-data/handlers/textile-page.textile +3 -1
  57. data/spec/textile_handler_spec.rb +16 -6
  58. metadata +28 -7
@@ -27,14 +27,16 @@ theories =
27
27
  :simple_name => 'erb-page',
28
28
  :syntax => :erb,
29
29
  :extension => '.html',
30
- :matcher => verify
30
+ :matcher => verify,
31
+ :site_overrides => { :crunchy => 'bacon' }
31
32
  },
32
33
  {
33
34
  :page => 'erb-page.xml.erb',
34
35
  :simple_name => 'erb-page',
35
36
  :syntax => :erb,
36
37
  :extension => '.xml',
37
- :matcher => verify_with_xml
38
+ :matcher => verify_with_xml,
39
+ :site_overrides => { :crunchy => 'bacon' }
38
40
  },
39
41
  {
40
42
  :page => 'erb-utf-page.html.erb',
@@ -46,9 +48,5 @@ theories =
46
48
  ]
47
49
 
48
50
  describe Awestruct::Handlers::TiltHandler.to_s + '-Erb' do
49
- def additional_config
50
- { :crunchy => 'bacon' }
51
- end
52
51
  it_should_behave_like 'a handler', theories
53
-
54
52
  end
@@ -42,6 +42,20 @@ describe Awestruct::Handlers::FrontMatterHandler do
42
42
  handler.raw_content.should be_nil
43
43
  end
44
44
 
45
+ it 'should not match front matter in the middle of a file' do
46
+ handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input('front-matter-middle.txt') )
47
+ handler.front_matter.should_not be_nil
48
+ handler.front_matter.should be_empty
49
+ handler.raw_content.should_not be_nil
50
+ end
51
+
52
+ it 'should not mistake horizontal rule for front matter' do
53
+ handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input('front-matter-looking.txt') )
54
+ handler.front_matter.should_not be_nil
55
+ handler.front_matter.should be_empty
56
+ handler.raw_content.should_not be_nil
57
+ end
58
+
45
59
  it 'should be able to handle UTF-8 characters' do
46
60
  handler = Awestruct::Handlers::FrontMatterHandler.new( @site, file_input('front-matter-file-utf8.txt') )
47
61
  handler.front_matter.should_not be_nil
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'awestruct/scm/git'
3
2
  require 'awestruct/deploy/github_pages_deploy'
4
3
 
5
4
  describe Awestruct::Deploy::GitHubPagesDeploy do
@@ -11,6 +10,7 @@ describe Awestruct::Deploy::GitHubPagesDeploy do
11
10
  @deploy_config = mock
12
11
  @deploy_config.stub(:[]).with('branch').and_return('the-branch')
13
12
  @deploy_config.stub(:[]).with('repository').and_return('the-repo')
13
+ @deploy_config.stub(:[]).with('gzip').and_return('false')
14
14
  @deploy_config.stub(:[]).with('scm').and_return('git')
15
15
  @deploy_config.stub(:[]).with('source_dir').and_return('.')
16
16
  @deploy_config.stub(:[]).with('uncommitted').and_return('false')
@@ -28,35 +28,40 @@ describe Awestruct::Deploy::GitHubPagesDeploy do
28
28
  it "should warn and noop if no changes have been committed" do
29
29
  git_scm = mock()
30
30
  git_scm.stub(:uncommitted_changes?).with('.').and_return true
31
- ::Awestruct::Scm::Git.stub(:new).and_return git_scm
31
+ @deployer.instance_variable_set('@scm', git_scm)
32
32
  $LOG.should_receive(:error).with(Awestruct::Deploy::Base::UNCOMMITTED_CHANGES)
33
- @deployer.run(@deploy_config)
33
+ @deployer.run
34
34
  end
35
35
 
36
36
  it "should save and restore the current branch when publishing" do
37
37
  git_scm = mock()
38
38
  git_scm.stub(:uncommitted_changes?).with('.').and_return false
39
- ::Awestruct::Scm::Git.stub(:new).and_return git_scm
39
+ @deployer.instance_variable_set('@scm', git_scm)
40
40
  @git.should_receive(:current_branch).and_return( 'bacon' )
41
41
  @git.stub_chain(:branch, :checkout)
42
42
  @git.should_receive(:push).with('the-repo', 'the-branch')
43
43
  @git.should_receive(:checkout).with( 'bacon' )
44
44
 
45
45
  @deployer.stub(:add_and_commit_site)
46
- @deployer.run(@deploy_config)
46
+ @deployer.run
47
47
  end
48
48
 
49
49
  it "should save and restore the current detached branch when publishing" do
50
50
  git_scm = mock()
51
51
  git_scm.stub(:uncommitted_changes?).with('.').and_return false
52
- ::Awestruct::Scm::Git.stub(:new).and_return git_scm
52
+ @deployer.instance_variable_set('@scm', git_scm)
53
53
  @git.should_receive(:current_branch).and_return( '(no branch)' )
54
- @git.should_receive(:revparse).with( 'HEAD' ).and_return( '0123456789' )
55
- @git.stub_chain(:branch, :checkout)
54
+ @git.stub_chain(:log, :first, :sha).and_return( '0123456789' )
55
+ @git.should_receive(:branch).with('__awestruct_deploy__').and_return @git
56
+ @git.should_receive(:checkout)
57
+ @git.should_receive(:branch).with('the-branch').and_return @git
58
+ @git.should_receive(:checkout)
56
59
  @git.should_receive(:push).with('the-repo', 'the-branch')
57
60
  @git.should_receive(:checkout).with( '0123456789' )
61
+ @git.should_receive(:branch).with('__awestruct_deploy__').and_return @git
62
+ @git.should_receive(:delete)
58
63
 
59
64
  @deployer.stub(:add_and_commit_site)
60
- @deployer.run(@deploy_config)
65
+ @deployer.run
61
66
  end
62
67
  end
@@ -82,15 +82,12 @@ theories =
82
82
  :simple_name => 'haml-with-variables',
83
83
  :syntax => :haml,
84
84
  :extension => '.html',
85
- :matcher => verify_with_variables
85
+ :matcher => verify_with_variables,
86
+ :site_overrides => { :crunchy => 'bacon' }
86
87
  }
87
88
  ]
88
89
 
89
90
 
90
91
  describe Awestruct::Handlers::TiltHandler.to_s + '-Haml' do
91
- def additional_config
92
- { :crunchy => 'bacon' }
93
- end
94
-
95
92
  it_should_behave_like 'a handler', theories
96
93
  end
data/spec/invoker_spec.rb CHANGED
@@ -64,6 +64,7 @@ describe Awestruct::CLI::Invoker do
64
64
  end
65
65
 
66
66
  it "should return false on failure" do
67
+ require 'awestruct/cli/generate'
67
68
  generator = mock
68
69
  Awestruct::CLI::Generate.should_receive( :new ).and_return( generator )
69
70
  generator.should_receive( :run ).and_return( false )
@@ -12,15 +12,12 @@ theories =
12
12
  :simple_name => 'javascript-page',
13
13
  :syntax => :javascript,
14
14
  :extension => '.js',
15
- :matcher => verify
15
+ :matcher => verify,
16
+ :site_overrides => { :interpolate => true, :crunchy => 'bacon' }
16
17
  }
17
18
  ]
18
19
 
19
20
 
20
21
  describe Awestruct::Handlers::TiltHandler.to_s + '-JavaScript' do
21
- def additional_config
22
- { :interpolate => true, :crunchy => 'bacon' }
23
- end
24
-
25
22
  it_should_behave_like 'a handler', theories
26
- end
23
+ end
@@ -35,7 +35,5 @@ theories =
35
35
  ]
36
36
 
37
37
  describe Awestruct::Handlers::TiltHandler.to_s + "-Markdown" do
38
-
39
38
  it_should_behave_like "a handler", theories
40
-
41
39
  end
@@ -11,23 +11,20 @@ theories =
11
11
  :simple_name => 'mustache-page',
12
12
  :syntax => :mustache,
13
13
  :extension => '.html',
14
- :matcher => verify
14
+ :matcher => verify,
15
+ :site_overrides => { :markup_type => 'Mustache' }
15
16
  },
16
17
  {
17
18
  :page => 'mustache-page.xml.mustache',
18
19
  :simple_name => 'mustache-page',
19
20
  :syntax => :mustache,
20
21
  :extension => '.xml',
21
- :matcher => verify
22
+ :matcher => verify,
23
+ :site_overrides => { :markup_type => 'Mustache' }
22
24
  }
23
25
  ]
24
26
 
25
27
 
26
28
  describe Awestruct::Handlers::TiltHandler.to_s + '-Mustache' do
27
- def additional_config
28
- {:markup_type => 'Mustache'}
29
- end
30
-
31
29
  it_should_behave_like 'a handler', theories
32
-
33
- end
30
+ end
@@ -18,7 +18,5 @@ theories =
18
18
  ]
19
19
 
20
20
  describe Awestruct::Handlers::TiltHandler.to_s + "-OrgMode" do
21
-
22
21
  it_should_behave_like "a handler", theories
23
-
24
- end
22
+ end
@@ -42,4 +42,22 @@ describe Awestruct::PageLoader do
42
42
  @site.pages[1].output_path.should == '/page-two.html'
43
43
  end
44
44
 
45
+ it "should be able to load all site pages (even drafts) if show_drafts is true" do
46
+ @site.show_drafts = true
47
+ @loader.load_all
48
+ @site.pages.size.should == 3
49
+
50
+ @site.pages.sort!{|l,r| l.relative_source_path <=> r.relative_source_path }
51
+
52
+ @site.pages[0].relative_source_path.should == '/page-draft.md'
53
+ @site.pages[0].output_path.should == '/page-draft.html'
54
+
55
+ @site.pages[1].relative_source_path.should == '/page-one.md'
56
+ @site.pages[1].output_path.should == '/page-one.html'
57
+
58
+ @site.pages[2].relative_source_path.should == '/page-two.html.haml'
59
+ @site.pages[2].output_path.should == '/page-two.html'
60
+
61
+ end
62
+
45
63
  end
@@ -21,16 +21,12 @@ theories =
21
21
  :simple_name => "redirect-page",
22
22
  :syntax => :text,
23
23
  :extension => '.html',
24
- :matcher => verify_with_interpol
24
+ :matcher => verify_with_interpol,
25
+ :site_overrides => { :interpolate => true, :crunchy => 'bacon', :base_url => 'http://mysite' }
25
26
  }
26
27
  ]
27
28
 
28
29
 
29
30
  describe Awestruct::Handlers::TiltHandler.to_s + "-Redirect" do
30
- def additional_config
31
- { :interpolate => true, :crunchy => 'bacon', :base_url => 'http://mysite' }
32
- end
33
-
34
31
  it_should_behave_like "a handler", theories
35
-
36
32
  end
@@ -16,7 +16,5 @@ theories =
16
16
  ]
17
17
 
18
18
  describe Awestruct::Handlers::TiltHandler.to_s + "-reStructuredText" do
19
-
20
19
  it_should_behave_like "a handler", theories
21
-
22
- end
20
+ end
@@ -17,7 +17,5 @@ theories =
17
17
  ]
18
18
 
19
19
  describe Awestruct::Handlers::TiltHandler.to_s + "-Sass" do
20
-
21
20
  it_should_behave_like "a handler", theories
22
-
23
- end
21
+ end
@@ -17,7 +17,5 @@ theories =
17
17
  ]
18
18
 
19
19
  describe Awestruct::Handlers::TiltHandler.to_s + "-Scss" do
20
-
21
20
  it_should_behave_like "a handler", theories
22
-
23
- end
21
+ end
@@ -70,14 +70,11 @@ theories =
70
70
  :simple_name => 'slim-with-variables',
71
71
  :syntax => :slim,
72
72
  :extension => '.html',
73
- :matcher => verify_with_variables
73
+ :matcher => verify_with_variables,
74
+ :site_overrides => { :crunchy => 'bacon' }
74
75
  }
75
76
  ]
76
77
 
77
78
  describe Awestruct::Handlers::TiltHandler.to_s + '-Slim' do
78
- def additional_config
79
- { :crunchy => 'bacon' }
80
- end
81
-
82
79
  it_should_behave_like 'a handler', theories
83
80
  end
@@ -5,7 +5,7 @@ require 'rspec'
5
5
  require 'hashery'
6
6
 
7
7
  REQUIRED_VARIABLES = [:page, :simple_name, :syntax, :extension]
8
- ALL_VARIABLES = REQUIRED_VARIABLES + [:format, :matcher, :unless]
8
+ ALL_VARIABLES = REQUIRED_VARIABLES + [:format, :matcher, :unless, :site_overrides]
9
9
 
10
10
  shared_examples 'a handler' do |theories|
11
11
 
@@ -19,24 +19,29 @@ shared_examples 'a handler' do |theories|
19
19
 
20
20
  describe Awestruct::Handlers do
21
21
 
22
- before :all do
23
- @opts = Awestruct::CLI::Options.new
24
- @opts.source_dir = File.dirname(__FILE__) + '/../test-data/handlers'
25
- @config = Awestruct::Config.new( @opts )
26
-
27
- @engine = Awestruct::Engine.new( @config )
28
- @engine.load_default_site_yaml
22
+ before :each do
23
+ @engine = init
29
24
  @site = @engine.site
30
25
  end
31
26
 
32
- before :each do
33
- @site.merge! additional_config if respond_to?("additional_config")
27
+ def init
28
+ opts = Awestruct::CLI::Options.new
29
+ opts.source_dir = File.dirname(__FILE__) + '/../test-data/handlers'
30
+ config = Awestruct::Config.new( opts )
31
+
32
+ engine = Awestruct::Engine.new( config )
33
+ engine.load_default_site_yaml
34
+ engine
34
35
  end
35
36
 
36
37
  def create_handler(page)
37
38
  @engine.load_page File.join(@engine.config.dir, page)
38
39
  end
39
40
 
41
+ def merge_site_overrides(overrides)
42
+ @site.update overrides
43
+ end
44
+
40
45
  theories.each do |theory|
41
46
 
42
47
  # Validate input
@@ -82,6 +87,9 @@ shared_examples 'a handler' do |theories|
82
87
 
83
88
  it "should render page '#{theory[:page]}'" do
84
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
85
93
  handler = create_handler theory[:page]
86
94
  handler.update(additional_config_page) { |k, oldval, newval| oldval } if respond_to?('additional_config_page')
87
95
  output = handler.rendered_content(handler.create_context)
@@ -1,7 +1,9 @@
1
1
  profiles:
2
2
  development:
3
+ show_drafts: false
3
4
  cook: microwave
4
5
  production:
6
+ show_drafts: true
5
7
  cook: oven
6
8
  asciidoctor:
7
9
  :eruby: erb
@@ -1,2 +1,3 @@
1
1
  ---
2
2
  foo: bar
3
+ ---
@@ -0,0 +1,9 @@
1
+ ---
2
+
3
+ ^ That was a Markdown horizontal rule.
4
+
5
+ Here's another one:
6
+
7
+ ---
8
+
9
+ This is more content.
@@ -0,0 +1,12 @@
1
+ This is content
2
+
3
+ ---
4
+
5
+ slkdjfklsjd f;klsjaljkdflj2k'l23423 4234jkl
6
+ wejtrkl'w jrk l'23tr
7
+ wj fkwe'jt'wk j'tfk l34j
8
+ tFjroi k ntfklqwnkltf: get off my lawn : This is not front matter!
9
+
10
+ ---
11
+
12
+ We're all just content here.
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ body {
2
+ color: purple;
3
+ }
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Hello, World!</title>
6
+ </head>
7
+ <body>
8
+ <h1>Hello, World!</h1>
9
+ </body>
10
+ </html>
@@ -0,0 +1 @@
1
+ var awestruct = {"description": "A static site-baking tool"};
@@ -0,0 +1,3 @@
1
+ docname={docname};
2
+ docfile={docfile};
3
+ docdir={docdir};
@@ -0,0 +1,4 @@
1
+ = Title
2
+ :page-interpolate: true
3
+
4
+ #{site.encoding}
@@ -0,0 +1,3 @@
1
+ = Title
2
+
3
+ #{site.encoding}